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

12 KiB
Raw Blame History

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


Материал раунда

  • Ветка: issue/564-dense-marker-hit, коммит 865c7682f656 — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет.
  • Дерево материала: f375da7be8ca58c0e598d5977308dc850291dfab
    git log --all --format='%H %T' | grep f375da7be8ca
    
  • Тело issue: f958e178616c6d48277f99106f9d84e76de72762c0c7b3e6f315231ff1cfec08
  • Вердикт конвейера: green · High 0