Files
houseplan-card/docs/reviews/SPEC-REVIEW-384-r2.md
T
2026-08-30 07:46:03 +00:00

124 lines
10 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-384-r2
Issue: [#384](https://github.com/Matysh/houseplan-card/issues/384) ·
этап: `S4-spec-review` · трек: `small` (ТЗ в теле issue) · заход r2 ·
SHA рабочего дерева на момент ревью: `3aac9bd2`, ветка `dev`.
## Скоуп
Родитель — #373 (`fit: house`). Продуктовый скоуп не изменился с r1: гейтить
вклад тел стен (~:432), extras (~:438) и нулевых стен (~:442) в кадре
`fit: house` тем же `disp.showBorders`, которым уже гейтится их рендер (:657,
:882, :914), и вернуть `needsCanonicalWallGeometry` (:388) к виду до #373.
Единственное изменение между r1 и r2 — правка раздела 7 ТЗ («i18n /
Release-артефакты») в ответ на единственную находку r1 (M1). Код продукта не
менялся и не мог меняться: реализации всё ещё нет, это ревью ТЗ.
## Предыдущий раунд и дельта
- Вердикт r1: жёлтый, High: 0, Medium: 1 (в скоупе) — документ
`docs/reviews/SPEC-REVIEW-384-r1.md`, SHA `9c162c09`.
- Дельта — правка тела issue #384, раздел 7, между комментарием ревьюера
(`IC_kwDOTOcLQM8AAAABReJaQw`, 2026-08-30T07:38:09Z) и следующим комментарием
владельца (`IC_kwDOTOcLQM8AAAABReKJ9w`, 2026-08-30T07:41:10Z: «Редакция 2 по
SPEC-REVIEW-384-r1 M1 … Возвращаю S4»).
- Проверено `git log --oneline 9c162c09..HEAD -- src/space-render.ts
docs/USER-GUIDE.md docs/USER-GUIDE.ru.md docs/CANVAS.md` — пусто; `git diff
9c162c09..HEAD --stat` трогает только `docs/reviews/SPEC-REVIEW-384-r1.md` и
несвязанный `docs/specs/385-audit-lows.md`. Делта полностью локальна тексту
issue, ни один файл кода или доки не менялся — сокращённый разбор оправдан
(не ребейз, не смена контракта, не новая подсистема).
## Закрытие раунда r1
| Находка r1 | Чем закрыта | Где это видно |
|---|---|---|
| Medium: раздел 7 утверждал «Доки: не задеты», хотя `docs/USER-GUIDE.md:798-800`, `docs/USER-GUIDE.ru.md:1543-1544` и `docs/CANVAS.md:232-233` безусловно обещают стены/перегородки/колонны в кадре `fit: house` | Раздел 7 переписан: явно называет все три файла с теми же номерами строк, требует добавить во все три места оговорку «если они видимы (`show_borders`)» по аналогии с существующей оговоркой про backdrop/decor, и добавляет способ проверки | Тело issue #384, раздел «7. i18n / Release-артефакты»: *«Доки (M1 r1): `docs/USER-GUIDE.md:798-800`, `docs/USER-GUIDE.ru.md:1543-1544` и `docs/CANVAS.md:232-233` сегодня безусловно обещают стены/перегородки/колонны в кадре `fit: house` — во все три места добавляется оговорка «если они видимы (`show_borders`)» … AC-док: grep на код-ревью.»* |
Проверка закрытия — не только заявление автора:
- Строки `798-800` в `docs/USER-GUIDE.md`, `1543-1544` в `docs/USER-GUIDE.ru.md`
и `232-233` в `docs/CANVAS.md` прочитаны заново на текущем SHA — они всё ещё
безусловны («fits every room, wall, partition, column…», «сохранит в кадре
все комнаты, стены, перегородки, колонны…», «every sane room,
positive/zero wall, independent wall or saved draft, column… participates»)
и все три ссылки в правке точно указывают на них — номера строк не съехали
со времени r1 (код доков не менялся, см. дельту выше).
- Раздел 7 теперь называет ровно те три файла, которые требовала находка r1,
с тем же предложением оговорки («если видимы»), и добавляет способ доказать
правку на код-ревью (`grep`) — закрывает и требование «указание способа
доказательства» для этого AC.
- Асимметрия по проёмам (`hide_openings`), которую r1 отдельно отметил как
предсуществующий и вне-скоуповый пробел, в правке не тронута — это верно:
r1 явно сказал, что её отсутствие не создаёт эта задача.
Находка r1 закрыта полностью, новых пробелов правка не вносит.
## Унаследовано из r1
Без повторной проверки на этом раунде — документ
`docs/reviews/SPEC-REVIEW-384-r1.md`, SHA `9c162c09`, дельта эту часть не
задевает:
- Фактическая база ТЗ: построчные ссылки на `src/space-render.ts` (:388,
:424-467, :654-657, :882, :914) и происхождение условия
`needsCanonicalWallGeometry` (реверт к состоянию до коммита #373 `0d33691f`,
исходно `955de3e6`) — подтверждены чтением кода и `git log -S` в r1.
- Согласованность гейта: `disp.showBorders === true` не меняет поведение;
`floorMinusBodies` (:791) использует сырой `extras`, путь «чистого пола» не
задет.
- AC1–AC3 однозначны и доказуемы (twin-фикстура `smoke_space_card` с
`show_borders: false`; регресс на существующих tight-ассертах, которые
используют фиксированный `show_borders: true` и физически не пересекаются с
новым гейтом).
- AC4 («полный гейт зелёный; бюджет ≈ 0») корректен по характеру изменения
(два булевых гейта + возврат одного условия).
- План тестов и mutation-gate («убрать гейт → красный смок») пригодны.
- Откат — обычный `git revert`, без флагов/миграций.
- Раздел 8 («принятые предположения») — единственное предположение явно
помечено как предположение, продуктового вопроса не требует.
- Проверка трека `small` — все пять критериев §5 выполняются одновременно.
- Открытых продуктовых вопросов нет.
## Как проверялось (этот раунд)
- Прочитан текущий текст issue #384 и все три комментария (`gh issue view 384
--json body,comments`).
- Сопоставлен новый раздел 7 с формулировкой находки M1 из r1 — построчно,
файл за файлом.
- Перепроверены сами три доковые ссылки на текущем SHA (см. выше) — не
устарели.
- `git log`/`git diff` подтвердили локальность дельты (только текст issue,
никакой код или докфайл не менялся с r1).
- Не перепроверялись AC1–AC4, факт-база ТЗ по коду, трек `small` — дельта их
не задевает, унаследованы из r1 (раздел выше).
## Что проверено и корректно
- Единственная находка r1 (Medium, в скоупе) закрыта по существу: все три
файла названы с теми же строками, оговорка сформулирована, способ проверки
на код-ревью указан.
- Правка не вносит догадок, выданных за факт: формулировка «сегодня
безусловно обещают» повторяет уже проверенный в r1 факт, новых
непроверяемых утверждений нет.
- Правка не расширяет и не сужает скоуп задачи (AC1–AC4, раздел 2 «Объём» не
тронуты) и не меняет трек `small`.
## Чего не проверял
- Не запускал никакие гейты (`tsc`, `test`, `build`, смоки, invariants) — это
по-прежнему ревью ТЗ, реализации ещё не существует, кода для проверки нет.
- Не проверял точную будущую формулировку доковой оговорки в трёх файлах —
ТЗ (лёгкий трек) обязано назвать файлы/строки и содержание оговорки, а не
дать готовый текст патча; точную формулировку и её реальное наличие в трёх
файлах проверит код-ревью через названный автором `grep`.
- Не проверял `fit: content` и i18n-строки интерфейса — вне дельты, и уже не
проверялись в r1 по тем же причинам (гейт живёт только в блоке `fit ===
'house'`).
## Вердикт
Зелёный. High: 0. Medium: 0. Единственная находка r1 закрыта по существу, новых
находок делта не вносит. Готово к переходу в разработку.