11 KiB
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).
Как проверялось
- Найден вердикт r1 в комментариях issue: жёлтый, заход r1, SHA
4c065f5, документdocs/reviews/SPEC-REVIEW-239-r1.md(SHA в вердикте не был назван явно текстом — восстановлен по хэндоффу автора «Коммит4c065f5» и поgit log, где4c065f5— последний спек-коммит перед комментарием с вердиктом). - Дельта объявлена и получена:
git diff 4c065f5..e8b3c86 -- docs/specs/239-grid-scale-invariance.md— два блока: §10 (i18n-ключи) и новый §13.1 (матрица доказательств AC1–AC16). - По каждой находке r1 проверено построчно, чем именно она закрыта (см. раздел «Закрытие раунда r1» ниже) — не по заявлению автора в хэндоффе, а по самому тексту документа.
- Перечитаны затронутые дельтой разделы в актуальном контексте всего документа: §9.2 (текст подписей), §10, §13 (AC13/AC14/AC16 целиком), §14 (план автотестов), §16 (риски), §19 (список «assumed, change freely»), чтобы убедиться в отсутствии противоречий между новым текстом и остальным ТЗ.
- Сверены формулировки новой матрицы с существующим кодом там, где это
проверяемо на этапе 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.
- Гейты, применимые к 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; ссылка на mutationgrid-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).