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

11 KiB
Raw Blame History

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 закрыта точечной и корректной правкой, новых находок нет.