docs: review document for #239

Issue: #239
User-Visible: no
This commit is contained in:
claude[bot]
2026-08-22 10:03:10 +00:00
parent e8b3c861b2
commit a4e8dd7ba7
+130
View File
@@ -0,0 +1,130 @@
# SPEC-REVIEW-239-r2
- **Issue:** https://github.com/Matysh/houseplan-card/issues/239
- **ТЗ:** `docs/specs/239-grid-scale-invariance.md`
- **Ветка / SHA:** `issue/239-grid-scale-invariance` @ `e8b3c86`
- **Этап:** spec (PROCESS.md §2.4) · трек: обычный
- **Заход:** r2 · блокирующих циклов израсходовано 1/4 (r1 — жёлтый,
потратил цикл; этот заход зелёный и цикла не образует, PROCESS.md §4, #227)
- **Ревьюер:** Claude, роль «ревьюер ТЗ»
## Скоуп
Оценивалась дельта r2 — ровно один docs-коммит `e8b3c86` (26 строк diff в
`docs/specs/239-grid-scale-invariance.md`), закрывающий две находки r1
(M1, L1). Дельта локальна: правка добрасывает доказательную таблицу и
i18n-текст в уже принятый по продуктовой рамке документ, не меняет ни
диагноз §3, ни классификацию §6, ни контракт поверхностей §8, ни AC1–AC16
по существу. Полный повторный разбор всего документа не требуется —
применяется PROCESS.md §2.9/§2.10.
Код не менялся: `git diff origin/dev...HEAD --stat` — три файла, все
`docs/**` (спека, README реестра, обзорный документ r1).
## Как проверялось
1. Найден вердикт r1 в комментариях issue: жёлтый, заход r1, SHA `4c065f5`,
документ `docs/reviews/SPEC-REVIEW-239-r1.md` (SHA в вердикте не был
назван явно текстом — восстановлен по хэндоффу автора «Коммит `4c065f5`»
и по `git log`, где `4c065f5` — последний спек-коммит перед комментарием
с вердиктом).
2. Дельта объявлена и получена: `git diff 4c065f5..e8b3c86 --
docs/specs/239-grid-scale-invariance.md` — два блока: §10 (i18n-ключи)
и новый §13.1 (матрица доказательств AC1–AC16).
3. По каждой находке r1 проверено построчно, чем именно она закрыта (см.
раздел «Закрытие раунда r1» ниже) — не по заявлению автора в хэндоффе,
а по самому тексту документа.
4. Перечитаны затронутые дельтой разделы в актуальном контексте всего
документа: §9.2 (текст подписей), §10, §13 (AC13/AC14/AC16 целиком),
§14 (план автотестов), §16 (риски), §19 (список «assumed, change
freely»), чтобы убедиться в отсутствии противоречий между новым
текстом и остальным ТЗ.
5. Сверены формулировки новой матрицы с существующим кодом там, где это
проверяемо на этапе spec:
- `src/i18n/en.json:373-374`, `src/i18n/ru.json:373-374` — ключи
`space.scale_label` / `space.scale_unit` и их текущий текст («cm per
cell» / «см на клетку») существуют буквально так, как утверждает
новый §10 — совпадение, не догадка;
- `space.scale_unit_imperial` — новый ключ, кода ещё нет, что ожидаемо
на этапе spec.
6. Гейты, применимые к docs-only дельте класса C: `node
scripts/check-docs.mjs` → `Documentation checks passed (7 files, 10
external links)`; `git diff 4c065f5..e8b3c86 --check` → чисто (нет
whitespace-ошибок). `npx tsc --noEmit` / `npm test` / `npm run build`
не запускались: `git diff origin/dev...HEAD --stat` подтверждает, что
весь диапазон изменений — три файла в `docs/**`, класса A/B файлов нет,
предмета для этих гейтов не существует.
## Закрытие раунда r1
| Находка r1 | Чем закрыта | Где это видно |
|---|---|---|
| **M1** (Medium) — §13 не указывает способ доказательства для AC13, AC14, AC16, не восстанавливается из §14/§16 | Добавлен новый раздел §13.1 «Матрица доказательств» с одной строкой на каждый AC1–AC16, включая явные записи для AC13 (code review exact scale-1 attributes + `golden:verify` как предрелизный, не как отдельно принимаемый baseline + docs provenance), AC14 (targeted touch/opening smoke: перечислены tap/pan/pinch/second-pointer/pointercancel/suppressed click раздельно, плюс edge hit-points из AC3) и AC16 (`check-docs` + code review обоих changelog/guide + screenshot provenance) | `docs/specs/239-grid-scale-invariance.md:377-396`, три строки таблицы для AC13/AC14/AC16 |
| **L1** (Low) — §10 не называет конкретный текст/ключ imperial-подписи внутри самого i18n-раздела, а отсылает к §9.2 | §10 теперь сам перечисляет оба ключа и оба текста (`space.scale_unit` metric, новый `space.scale_unit_imperial`, `space.scale_label` для label), не отсылая читателя к другому разделу — соответствует конвенции остальных спеков (#157, #167, #094), на которую ссылался L1 | `docs/specs/239-grid-scale-invariance.md:282-284` |
Обе правки точечные и не задевают ничего за пределами названных находок —
дельта в 26 строк ровно совпадает с объёмом, который требовали M1 и L1.
## Унаследовано из r1
Всё содержательное решение ТЗ, кроме двух правок выше, принято без
повторной проверки по итогам r1 (`docs/reviews/SPEC-REVIEW-239-r1.md` @
`4c065f5`):
- продуктовая рамка §1–2, соответствие J4/J6 из `docs/SCOPE.md`, отсутствие
продуктовых вопросов владельцу — не пересматривалось;
- диагноз §3 (построчная сверка с кодом: `opening-symbol.ts`,
`ISO_WALL_HEIGHT`/`ISO_FLOOR_EDGE_HEIGHT`, `cellCm: 5` в manual create и
floors-import, `HATCH_BASE_STEP_UNITS`, `iconUnit`/`iconCqw`) — дельта их
не касается, повторная построчная сверка не проводилась;
- классификация размеров §6 и контракт поверхностей §8 — внутренняя
непротиворечивость подтверждена в r1 алгебраически (`iconCqw`/`iconUnit`),
дельта их текст не меняет;
- AC1–AC12, AC15 сами по себе (формулировки) — признаны однозначными и
алгебраически проверяемыми в r1, дельта их не редактировала, только
добавила способ доказательства в §13.1;
- откат §18 и release-артефакты §17 — признаны полными в r1, не менялись;
- риски §16 — признаны содержательными в r1, не менялись.
## Находки
Нет находок ни в дельте, ни в местах, которые дельта задевает (§9.2, §10,
§13, §13.1, §14, §16, §19 перечитаны целиком на непротиворечивость с новым
текстом — противоречий не найдено).
## Что проверено и корректно
- Обе находки r1 закрыты по существу, а не переформулированы: M1 — таблица
покрывает все 16 AC, а не только три названных, и формулировки строк
буквально соответствуют тексту соответствующего AC (например, строка
AC14 отдельно называет «tap остаётся действием» и отдельно —
«pan/pinch/... не выполняют action», что закрывает обе половины критерия,
на неполноту которых указывал r1); L1 — ключи и тексты названы в самом
§10, дублирование с §9.2 не противоречиво (тексты идентичны).
- Новая матрица §13.1 согласована с остальным документом: ссылки на
конкретные файлы (`test/grid-scale.test.mjs`,
`demo/smoke_grid_scale_invariance.mjs`,
`demo/smoke_space_scale_defaults.mjs`) совпадают с именами, уже введёнными
в §14.1/§14.2; ссылка на mutation `grid-scale-physical-double-scaled` в
строке AC5 совпадает со строкой таблицы §15; разделение «code review» vs
«предрелизный гейт» для AC13/AC15 согласовано с §12 и §14.3.
- Новый i18n-текст §10 совпадает с уже существующим кодом для действующего
ключа (`space.scale_unit`/`space.scale_label`, проверено по
`src/i18n/en.json`/`ru.json`) — не введено расхождение с реальностью для
той части, которая уже реализована.
- Докс-гейт зелёный: `node scripts/check-docs.mjs` →
`Documentation checks passed (7 files, 10 external links)`;
`git diff --check` на дельте — чисто.
## Чего не проверял
- Полный повторный разбор диагноза §3, классификации §6, контракта
поверхностей §8 и AC1–AC12/AC15 по существу — дельта их не касается,
унаследовано из r1 (см. выше), правило §2.9/§2.10.
- `npx tsc --noEmit`, `npm test`, `npm run build` — не запускались: диапазон
диффа не содержит файлов класса A/B, гейты не имеют предмета проверки.
- Реализация helper'ов, тестов и smoke-файлов, названных в §13.1/§14 —
кода нет, оценивалась только логическая полнота ссылок на этапе spec.
- Golden/browser smoke/performance — не запускались и не должны: этап spec,
реализации нет, эти гейты относятся к предрелизному прогону (PROCESS.md
§8).