mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-02 04:38:55 +00:00
131 lines
11 KiB
Markdown
131 lines
11 KiB
Markdown
# 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).
|