Files
houseplan-card/docs/reviews/SPEC-REVIEW-564-r2.md
T
2026-09-14 02:57:32 +03:00

143 lines
12 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-564-r2
## Скоуп
Issue #564 (`bug`, `P1`, `S4-spec-review`, полный трек). Второй заход ревью ТЗ.
Единственная блокирующая находка r1 — **M1**: отсутствовал обязательный
DoR-пункт «затронутые файлы и модули» (`PROCESS.md` §2.5). Между вердиктом r1
(комментарий `github-actions`, 2026-09-13T22:47:50Z) и повторным входом в
`S4-spec-review` (2026-09-13T22:49:34Z) тело issue было отредактировано ровно
один раз — `updated_at` issue совпадает с этим таймстампом день-в-день до
секунды. Это и есть материал раунда: дельта тела issue, а не код (кода по
этой задаче ещё нет — `S6-in-progress` не начат).
Разбор в этом раунде — по дельте (`PROCESS.md` §2.10): дельта локальна
(добавлен один раздел, не задет контракт поведения, не подключена новая
подсистема, объём дельты много меньше исходного ТЗ), полный пересчёт не
требуется.
## Как проверялось
- Получено текущее тело issue целиком (`gh issue view 564 --json body`,
230 строк) и оба комментария (`gh issue view 564 --json comments`):
исходная аналитика владельца и вердикт-комментарий r1. Новых комментариев
между r1 и повторным входом нет — правка внесена прямым редактированием
тела issue, что и предусмотрено `PROCESS.md` §2.3 («ТЗ живёт в теле issue»).
- Восстановлен timeline меток (`gh api .../timeline`): `S4-spec-review` →
(r1, 22:47:50) → `S3-spec` → (22:49:34) → `S4-spec-review`. Ровно одно окно
правки, что соответствует точечному фиксу, а не переписыванию ТЗ.
- Дельта локализована арифметически и текстуально: r1 зафиксировал объём ТЗ
в 217 строк; текущее тело — 230 строк, разница ровно 13 строк — это ширина
нового раздела `### 7.1. Ожидаемые файлы и модули` (строки 135–147 текущего
тела). Все остальные разделы (`1`…`6`, `8`…`13`) сверены построчно с прямыми
цитатами, которые r1 приводил в разделах «Находки» и «Что проверено и
корректно» (модель владения §5–6, AC1–AC11 §9, compatibility-матрица §8,
scope §3–4, риски и откат §12, принятые предположения §13) — текст этих
разделов идентичен процитированному в r1, включая нумерацию AC и формулировки.
- Каждый путь, названный в новом §7.1, проверен на существование в дереве
репозитория (`src/houseplan-card.ts`, `src/styles/devices.styles.ts`,
`src/houseplan-editor-runtime.ts`, `src/space-card.ts`,
`src/hp-device-preview.ts`, `src/device-face.ts`,
`scripts/mutation-gate.mjs` — все существуют). `src/device-hit-owner.ts` и
`test/device-hit-owner.test.ts` намеренно не существуют — это планируемые
новые артефакты реализации, что уместно на этапе ТЗ.
- `PROCESS.md` §2.5 сверен построчно с текстом нового раздела — пункт
«перечислены затронутые файлы и модули» закрыт буквально.
- Не повторял: чтение кода `.dev::before`/`_clickDevice` (не изменилось,
дельта его не касается), сверку #213/#563, оценку Q1/Q2-политики
(см. «Унаследовано из r1»).
## Находки
Новых находок нет.
## Закрытие раунда r1
| Находка | Чем закрыта | Где видно |
|---|---|---|
| M1 (Medium, DoR: не названы затронутые файлы/модули) | Добавлен раздел `### 7.1. Ожидаемые файлы и модули` — 9 пунктов с конкретными путями (новый `src/device-hit-owner.ts`; `src/houseplan-card.ts` с перечислением конкретных методов/обработчиков; `src/styles/devices.styles.ts`; условно `src/device-face.ts`; `src/houseplan-editor-runtime.ts`; `src/space-card.ts`/`src/hp-device-preview.ts` как read-only/parity; тестовый файл; `scripts/mutation-gate.mjs`; список документации) | Тело issue #564, строки 135–147, ровно по образцу `docs/specs/213-device-marker-geometry.md` §15, как и просил r1 |
L1 (Low, персона/поверхность не разделены в §1) в закрытии не нуждалась: r1
снял её с записью, а не вернул автору — дельта её не касается, действие не
требовалось.
## Унаследовано из r1
Без повторной проверки, дельта этих разделов не задевает. Источник —
`docs/reviews/SPEC-REVIEW-564-r1.md`, материал: дерево `3b54d2227e67…`,
блоб тела issue на тот момент `32ca611dc6bd99561abbb7cee1295dd63d195a2f70469dd4a4922a5ebc46a498`.
- Технические предпосылки ТЗ (44‑px `.dev::before`, `_clickDevice`, замкнутый
на конкретный маркер, отсутствие арбитража) — подтверждены r1 прямым чтением
кода.
- Ссылки на #213 (44×44 + вся видимая capsule) и #563 (`S8-merged`, pinch
suppression) — точны, не дублируют друг друга и не дублируют #564.
- AC1–AC11 (§9) — пронумерованы, проверяемы, у каждого назван способ
доказательства; текст AC в теле issue не изменился (см. «Как проверялось»).
- Compatibility-матрица §8 покрывает все шесть классов риска `PROCESS.md`
§2.6 (async/данные-права/геометрия/визуал/объём-перф/host-input).
- Scope §3/4 корректно отделяет задачу от #563 и от визуального
раздвигания/кластеризации; согласовано с `docs/SCOPE.md`.
- Откат §12 реалистичен, без миграции данных.
- Release-артефакты §11 называют релевантные документы.
- i18n/схема конфигурации/backend API — явное «нет» (§4, AC11), закрывает
соответствующие пункты DoR.
- Q1/Q2 (модель арбитража; единство владельца между жестами) — приняты как
проведённые через весь текст defaults; политика «ответ владельца тем же
каналом не обязателен» унаследована из прецедента #561, r1 её не
переоткрывал, и это ревью тоже не переоткрывает.
- L1 (персона/поверхность объединены в §1) — снята с записью решением r1,
не находка.
## Что проверено и корректно (эта дельта)
- Новый §7.1 называет только реально существующие в дереве пути (проверено
`ls`/чтением дерева) — список не выдуман и не оторван от кода.
- Раздел не переопределяет модель владения, AC, scope или compatibility-
матрицу — явно ограничен перечнем поверхностей и не требует «менять каждый
файл искусственно», что согласуется с §2.6 «скоуп не расширяется».
- Правка сделана одним точечным окном редактирования между вердиктом r1 и
повторным входом в ревью — это подтверждает, что дельта локальна, и
оправдывает разбор по дельте, а не заново (`PROCESS.md` §2.10).
## Чего не проверял
- Не прогонял гейты (`typecheck`/`test`/`build`/смоки) — кода по #564 ещё нет,
это предмет код-ревью.
- Не перечитывал построчно код `.dev::before`, `_clickDevice`,
`houseplan-editor-runtime.ts` заново — унаследовано из r1, дельта их не
касается.
- Не проверял повторно, существует ли отдельный ответ владельца на Q1/Q2 вне
GitHub — унаследовано из r1 и прецедента #561.
- Не запускал криптографическое сравнение полного текста тела issue между r1
и текущим моментом (архивной копии тела на момент r1 файлом не сохранено):
локализация дельты опирается на совпадение построчного прироста (+13 строк
= длина нового раздела), на дословное совпадение всех разделов с прямыми
цитатами r1 и на таймлайн с единственным окном правки. Три независимых
сигнала сходятся, поэтому считаю дельту доказанной, но называю это
ограничением явно, а не молчу о нём.
## Вывод
Единственная блокирующая находка r1 (M1) закрыта по существу: конкретный,
проверенный по дереву репозитория список файлов и модулей добавлен тем же
абзацем, без пересмотра модели, AC или scope, как и требовал r1. Новых
находок нет. High: 0, Medium: 0. Все пункты DoR (`PROCESS.md` §2.5) теперь
покрыты текстом ТЗ. Задача готова к переходу в «Готово к разработке».
**Вердикт: зелёный · заход r2 · блокирующих циклов 1/4 · High: 0 · Medium: 0**
---
<!-- material-anchors: сгенерировано конвейером (#414) -->
## Материал раунда
- Ветка: `issue/564-dense-marker-hit`, коммит `865c7682f656` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет.
- Дерево материала: `f375da7be8ca58c0e598d5977308dc850291dfab`
```
git log --all --format='%H %T' | grep f375da7be8ca
```
- Тело issue: `f958e178616c6d48277f99106f9d84e76de72762c0c7b3e6f315231ff1cfec08`
- Вердикт конвейера: `green` · High 0