mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-02 04:38:55 +00:00
139 lines
12 KiB
Markdown
139 lines
12 KiB
Markdown
# 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 закрыта по существу и проверена по коду/докам, а не по
|
||
заявлению автора; новых находок нет. Продуктовых вопросов владельцу нет.
|