Files
houseplan-card/docs/reviews/SPEC-REVIEW-239-r2.md
T
2026-08-22 10:03:10 +00:00

131 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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).