Files
houseplan-card/docs/reviews/SPEC-REVIEW-298-r2.md
T
2026-08-24 19:08:31 +00:00

127 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-298-r2
- **Issue:** https://github.com/Matysh/houseplan-card/issues/298
- **ТЗ:** `docs/specs/298-resize-wall-thickness-carrier.md` @ commit `55db16df6e51027a81aaf56de6cd08bbf19c3b77`
- **Этап:** ТЗ на ревью (PROCESS.md §2.4)
- **Заход:** r2 · блокирующих циклов израсходовано 1 из 4 (потрачено r1, жёлтый)
- **Ревьюер:** Claude (сессия ревью ТЗ), автор ≠ ревьюер
## Скоуп ревью
Не первый заход. По PROCESS.md §2.9 / issue #214 разбор идёт по дельте:
- предыдущий вердикт — комментарий `claude`, 2026-08-24T19:01:20Z, в issue #298:
жёлтый, r1, блокирующих циклов 0/4, High 0 / Medium 1 (в скоупе), документ
`docs/reviews/SPEC-REVIEW-298-r1.md`, ТЗ проверялось на SHA
`45066631aee4997ac1f033dbe75918b5b2d439d4` (SHA не был назван в самом
вердикте — восстановлен из ссылки автора на коммит ТЗ в комментарии за 18:54:17Z,
который текстуально совпадает с состоянием, разобранным в r1-документе);
- правка автора — коммит `55db16df6e51027a81aaf56de6cd08bbf19c3b77`
(`docs(spec): add resize user contract`, единственный файл
`docs/specs/298-resize-wall-thickness-carrier.md`, +25/-1);
- дельта строго локальна: добавлен раздел «Персона, поверхность, момент и
видимый результат», добавлена подсекция «UX и i18n», добавлены две строки
«Доказательство:» под AC5 и AC7. Ни один AC, ни контракт поведения (§§3–5),
ни scope (§6) не менялись. Рёбейза на ушедший вперёд `dev` не было (родитель
коммита — `8221ad9b`, публикация r1-документа, что и ожидается между
раундами). Подсистема не сменилась, новых открытых вопросов правка не внесла.
Объём дельты (одна секция + два предложения) несопоставим с объёмом задачи →
разбор сокращён до дельты, остальное наследуется из r1.
## Как проверялось
1. `git diff 45066631..55db16df -- docs/specs/298-resize-wall-thickness-carrier.md`
— получен полный текст дельты, показан ниже в разделе «Закрытие раунда r1».
2. Дельта прочитана в контексте всего текущего файла (`Read` целиком, 377
строк), чтобы исключить рассинхронизацию новых фраз с остальным ТЗ.
3. Новый раздел 1 сверен с:
- `docs/SCOPE.md` — персона «Home admin (primary) … Desktop browser», job
J6 «Keep the plan true as the home evolves … drag/resize» — совпадает
с «администратор дома / desktop Plan editor / инструмент Resize»;
- комментарием-аналитикой автора (18:52:14Z), где та же персона и та же
поверхность были названы изначально, но не попадали в сам документ —
ровно то несоответствие, которое r1 отметил как находку.
4. Термин «ручка» и написание «Resize» сверены с `docs/USER-GUIDE.ru.md`
(строки 441, 480–481: «Resize», «ручка объясняет…», «Ручка остаётся
видимой, но приглушена») — терминология не изобретена, взята из канона.
5. Новая подсекция «UX и i18n» сверена с §6 «Не входит» («изменение
eligibility, safe range, pointer UX … не входит») и §12 п.3 («Existing
`resize.commit_failed` достаточно … пока eligibility не меняется») —
утверждение «новых контролов/текстов нет» не противоречит остальному
документу.
6. Новые строки «Доказательство:» под AC5/AC7 сверены с разделом 11
(«Ожидаемые файлы и release artifacts»): методы («table-driven unit pure
carrier preflight», «production-bundle Resize pointer smoke») там же
названы как ожидаемые файлы/evidence — не расходятся.
7. Коммит `55db16df` проверен `git show --stat`: правда только один файл,
+25/-1, что совпадает с диффом, разобранным построчно (не поверено на
слово автора).
8. Трейлеры коммита: `Issue: #298`, `User-Visible: no` — для docs-only
spec-коммита корректно (видимого поведения нет, меняется только текст ТЗ).
**Не проверялось повторно** (наследуется из r1, ниже отдельным разделом):
корневая причина по коду, существование фикстур/констант/связанных issue,
формулировки §§3–5, §6, §7 (AC1–AC9 по содержанию), §8–§12 — дельта их не
касается, к этим утверждениям автор не притрагивался.
## Закрытие раунда r1
| Находка r1 | Чем закрыта | Где это видно |
|---|---|---|
| **Medium (в скоупе):** ТЗ не содержит обязательных продуктовых разделов §7.1 — «персона/поверхность/момент» и «что человек увидит до/после» без терминов реализации; §1 и §2 были на языке реализации (`rekeyWallsAfterMove`, topology vertex, config write) | Добавлен раздел 1 «Персона, поверхность, момент и видимый результат»: явно назван «администратор дома», «desktop Plan editor, инструмент Resize», «обычный ресайз стены готового плана»; добавлены два предложения «До:»/«После:» без единого термина реализации (стена рисуется другой толщиной / теряет ручку → ресайз либо проходит как раньше, либо fail-closed с прежней ошибкой) | `docs/specs/298-resize-wall-thickness-carrier.md`, новые строки 16–26 (коммит `55db16df`) |
| **Low (снят с записью, не блокировал):** AC5 и AC7 не называют явно способ доказательства | Под AC5 и AC7 добавлены явные строки «Доказательство: …» | строки 244–245 (AC5) и 272–273 (AC7) |
| **Low (снят с записью, не блокировал):** разделы «UX» и «i18n» не выделены явными заголовками | Добавлена подсекция `### UX и i18n` внутри §5 с прямым утверждением «новых контролов, состояний и текстов нет» | строки 162–166 |
Все три пункта r1 закрыты правкой; новых расхождений между добавленным текстом
и остальным документом не найдено (см. «Как проверялось», пп. 3–6).
## Унаследовано из r1
Без повторной проверки в этом раунде принято по документу
`docs/reviews/SPEC-REVIEW-298-r1.md` (ТЗ на SHA `45066631aee4997ac1f033dbe75918b5b2d439d4`),
поскольку дельта r1→r2 их не касается:
- корневая причина подтверждена чтением `rekeyWallsAfterMove()`
(`src/wall-thickness.ts:533`, пропорциональная проекция `mapPoint`,
строки 574–582) — совпадает с числами из issue;
- обе fixture-репродукции (`real-plan-second-floor.json`,
`real-plan-first-floor.json`) существуют и соответствуют описанным в AC1/AC2
жестам;
- `LATTICE_NOISE_STEPS` существует (`src/coordinate-canonicalization.ts:11`,
`1e-4`), используется в инвариантах и мутационном гейте;
- все связанные issue (#253, #277, #289, #291, #293, #297, #299) существуют в
заявленном состоянии (закрыты/открыт), ссылки не искажены;
- ссылки на канон (`WALL-THICKNESS.md`, `RESIZE.md`, `TOUCH-SUPPORT.md`)
точны, не изобретены;
- AC1–AC9 по содержанию проверяемы, скоуп «не входит» корректно исключает
#299 (`mixed_role_record`);
- §12 «Принятые технические предположения» — явные, не выданы за факт.
## Находки
Нет. Единственная находка r1 (Medium, в скоупе) закрыта дельтой; новых находок
дельта не создала.
## Что проверено и корректно
- Дельта r1→r2 (раздел 1, подсекция UX/i18n, две строки «Доказательство:»)
внутренне согласована с остальным документом и с каноном (`SCOPE.md`,
`USER-GUIDE.ru.md`).
- Персона/поверхность/момент и фраза «до/после» присутствуют, без терминов
реализации — оба обязательных продуктовых раздела §7.1 закрыты.
- Коммит содержит ровно заявленное изменение, трейлеры корректны.
## Чего не проверял
- Повторно не перечитывал и не оспаривал §§2–12 по содержанию — дельта их не
меняла, см. «Унаследовано из r1».
- Гейты `typecheck`/`test`/`build`/`check-docs` не запускал — стадия ТЗ, кода к
задаче ещё нет; это ожидается на этапе code-review.
- Не проверял снова состояние связанных issue (#253/#277/#289/#291/#293/#297/#299)
— наследуется из r1, ссылки дельта не меняла.
## Вердикт
Зелёный. Единственная Medium-находка r1 закрыта точечной и корректной правкой,
новых находок нет.