diff --git a/docs/reviews/SPEC-REVIEW-294-r2.md b/docs/reviews/SPEC-REVIEW-294-r2.md new file mode 100644 index 00000000..2a55381c --- /dev/null +++ b/docs/reviews/SPEC-REVIEW-294-r2.md @@ -0,0 +1,138 @@ +# 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](SPEC-REVIEW-294-r1.md), вердикт жёлтый, + на 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](SPEC-REVIEW-294-r1.md) +на 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 закрыта по существу и проверена по коду/докам, а не по +заявлению автора; новых находок нет. Продуктовых вопросов владельцу нет.