Files
houseplan-card/docs/reviews/SPEC-REVIEW-294-r2.md
T
2026-08-24 18:16:46 +00:00

12 KiB
Raw Blame History

SPEC-REVIEW-294-r2

  • Issue: https://github.com/Matysh/houseplan-card/issues/294
  • Этап: ревью ТЗ (PROCESS.md §2.4)
  • Заход: r2 · блокирующих циклов израсходовано 1/4 (зелёный вердикт цикла не тратит, #227)
  • Ревьюер: Claude (роль «ревьюер ТЗ», сессия отдельна от автора ТЗ)
  • Предыдущий раунд: SPEC-REVIEW-294-r1, вердикт жёлтый, на SHA 8e86b0a5 (ветка issue/294-wall-esc-detach). SHA в вердикте r1 назван явно (в шапке документа r1), это не находка.
  • Предмет ревью: docs/specs/294-wall-esc-detach.md на SHA 6b857087 (текущий HEAD ветки) и комментарий автора «Правки ТЗ после SPEC-REVIEW r1».

Разбор по дельте (PROCESS.md §2.9/§2.10, issue #214)

Дельта объявлена: git diff 8e86b0a5..HEAD — два файла: docs/reviews/SPEC-REVIEW-294-r1.md (публикация документа предыдущего раунда, не предмет разбора) и docs/specs/294-wall-esc-detach.md, +43/-7 строк, только раздел 5 («Подсказки и документация») и AC7 в разделе 7. Правки в docs/specs/README.md и создание самого файла спецификации относятся к исходному коммиту 8e86b0a5, уже разобранному в r1, и в дельту r2 не входят.

Дельта локальна: правит формулировку одного раздела и одного AC того же файла, не меняет продуктовый контракт Esc (разделы 1–4), не задевает новую подсистему, не связана с ребейзом (branch содержит весь origin/dev, что подтверждает пустой diff docs/specs/README.md кроме одной добавленной строки реестра). Объём разбора сокращён до дельты; заново проверены только AC7 и раздел 5, а также согласованность новой формулировки с разделами 1–4, 6, 8, 9, которые эту дельту упоминают (раздел 6 «Не входит» и раздел 9 «Документация врёт после изменения»).

Закрытие раунда r1

Находка r1 Чем закрыта Где это видно
Medium: AC7 формулировкой («старое утверждение… отсутствует в затронутых Walls-разделах») не покрывает четыре конкретных места старого контракта вне «Walls»-раздела (USER-GUIDE.ru.md:223, :241, USER-GUIDE.md:207, :216-217), и EN «Create a room» не решён на паритет с RU Раздел 5 переписан: перечисляет шесть именованных поверхностей (RU: строка «Рисование и точный drag», таблица «Клавиши отмены» с явным разделением Draw/Split, «Комнаты и стены»; EN: строка “Draw or precise drag”, “Cancel and undo”, “Create a room” — последняя явно получает паритет с RU). AC7 дублирует тот же список пронумерованными пунктами 1–6, каждый — проверяемое утверждение по конкретному месту, а не общая цитата docs/specs/294-wall-esc-detach.md:109-127 (раздел 5) и :190-208 (AC7), коммит 6b857087

Проверка не ограничилась заявлением автора: каждая из шести строк раздела 5 и AC7 сверена построчно с текущим содержимым docs/USER-GUIDE.ru.md и docs/USER-GUIDE.md на HEAD дерева (не на ветке спецификации, а в самом репозитории, поскольку изменение поведения ещё не реализовано и тексты руководств пока старые):

  • docs/USER-GUIDE.ru.md:223 — строка «Рисование и точный drag»: `Shift` меняет магнит/угол; `Esc` отменяет операцию — совпадает с описанием в §5 п.1/AC7 п.1, требующим разделения;
  • docs/USER-GUIDE.ru.md:241 — таблица «Клавиши отмены», строка «Незавершённый Draw/Split»: «Убирает последнюю точку или выходит из инструмента» — совпадает с §5 п.2/AC7 п.2;
  • docs/USER-GUIDE.ru.md:412 — «Комнаты и стены»: «Esc/Ctrl+Z удаляет последнюю точку» — совпадает с §5 п.3/AC7 п.3;
  • docs/USER-GUIDE.md:207 — строка “Draw or precise drag”: “Esc cancels the operation” — совпадает с §5 п.4/AC7 п.4;
  • docs/USER-GUIDE.md:216-217 — “Cancel and undo”: “Esc cancels an unfinished path… without undoing an already committed action” — совпадает с §5 п.5/AC7 п.5;
  • docs/USER-GUIDE.md:294-299 — “Create a room”: раздел сегодня не содержит упоминания Esc/Ctrl+Z вовсе (в отличие от RU-версии, :412) — совпадает с тем, что §5 п.6/AC7 п.6 явно требуют добавить паритет, а не оставляют вопрос открытым.

Все шесть мест реальны, названы верно и покрывают в точности исходные четыре цитаты r1 плюс оба открытых вопроса того раунда (RU «Комнаты и стены» и EN паритет). Разбор по коду/докам, не по заявлению автора.

Отдельно проверено, что деление таблицы «Клавиши отмены» на Walls/Split не является новой догадкой: split — существующий отдельный MarkupTool в src/houseplan-card.ts (type MarkupTool = … | 'draw' | … | 'split' | …, собственная кнопка активации, собственная обработка курсора/preview), то есть разнесение «Draw (Walls)» и «Split» в разных строках описывает два реально разных инструмента, а не искусственное разделение одного.

Унаследовано из r1

Без повторной проверки принято из SPEC-REVIEW-294-r1 на SHA 8e86b0a5, поскольку дельта r2 их не затрагивает:

  • продуктовая рамка и персона (Home admin, Plan editor, десктоп) — раздел «Что проверено и корректно», п.1 документа r1;
  • отсутствие догадок, выданных за факт, в разделах 1–4 (контракт Esc) — сверено с _onKey, _finishWallChain, _undoPoint, _undoActiveDraftPoint, _resumeLastDraft, _resumeDraftBySpace на той же ветке в r1;
  • однозначность и проверяемость AC1–AC6, AC8 — не изменились байт в байт между 8e86b0a5 и HEAD (единственная правка дельты — AC7 и раздел 5, подтверждено git diff выше);
  • полнота раздела 6 «Не входит», разделов 8–13 (совместимость/touch/security/ performance, риски, откат, ожидаемые файлы, release, принятые предположения) — не затронуты дельтой;
  • корректность трейлеров коммита спецификации (Issue: #294, User-Visible: no) и трек (обычный, не small).

Гейты

Класс изменённых файлов в дельте — только C (docs/specs/**). Продуктовый код (класс A/B) на ветке отсутствует: git diff origin/dev...HEAD --stat даёt только docs/reviews/**, docs/specs/294-wall-esc-detach.md, docs/specs/README.md. typecheck/test/build/check-docs неприменимы к этапу ТЗ (то же решение, что в r1) — ничего не проверяют для файла спецификации и не запускались сознательно, а не по умолчанию.

Находки

Нет. High: 0, Medium: 0, Low: 0.

Что проверено и корректно

  • Единственная находка r1 (Medium) закрыта по существу, а не переформулирована так, чтобы формально пройти проверку: новая формулировка AC7 привязана к шести конкретным, поимённо названным местам в обоих руководствах, включая оба места, которые r1 привёл цитатами, и оба открытых вопроса r1 (RU «Комнаты и стены», EN «Create a room» паритет).
  • Новая формулировка не вводит непомеченных догадок: разделение таблицы «Клавиши отмены» на Walls/Split опирается на существующий отдельный инструмент split в коде, а не является произвольным решением автора.
  • Раздел 6 «Не входит» синхронизирован с расширенным разделом 5: пункт «переработка всех общих текстов про Escape вне затронутого Walls-контекста» по-прежнему верно ограничивает работу — новый список из шести мест целиком относится к контракту wall chain, ничего избыточного не добавлено.
  • Продуктовый вопрос владельцу не появился: оба уточнения из r1 (нужно ли разносить Draw/Split, нужен ли EN-паритет) решены автором технически, без эскалации, что соответствует PROCESS.md §7.1 («всё, чего пользователь не наблюдает, агенты решают сами»); паритет текста руководств — не продуктовое поведение, а формулировка документации одного и того же уже согласованного контракта.

Чего не проверял

  • Гейты typecheck/test/build/check-docs/смоки — не запускались: дельта правит только docs/specs/**, продуктового кода нет, issue не в S5-ready. То же решение объёма, что в r1.
  • Реализуемость AC7 на уровне будущего диффа кода/документации — предмет код-ревью после реализации, не ТЗ-ревью.
  • Разделы 1–4, 6, 8–13 не перечитывались построчно заново — они наследуются из r1 согласно разделу «Унаследовано из r1» выше, дельта их не касается.

Вердикт

Зелёный: находка r1 закрыта по существу и проверена по коду/докам, а не по заявлению автора; новых находок нет. Продуктовых вопросов владельцу нет.