mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-30 19:58:50 +00:00
committed by
Sergey Matyunin
parent
9fd9e6d978
commit
fcc6c747a3
@@ -0,0 +1,142 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user