Files
houseplan-card/docs/reviews/SPEC-REVIEW-584-r2.md
T
claude[bot] e0b16c76d7
Проверка (CI) / Классификация изменённых файлов (push) Successful in 27s
Проверка (CI) / Мутанты по диффу (1/6): затронутые свидетели краснеют (push) Skipped
Проверка (CI) / Мутанты по диффу (2/6): затронутые свидетели краснеют (push) Skipped
Проверка (CI) / Мутанты по диффу (3/6): затронутые свидетели краснеют (push) Skipped
Проверка (CI) / Мутанты по диффу (4/6): затронутые свидетели краснеют (push) Skipped
Проверка (CI) / Мутанты по диффу (5/6): затронутые свидетели краснеют (push) Skipped
Проверка (CI) / Мутанты по диффу (6/6): затронутые свидетели краснеют (push) Skipped
Проверка (CI) / Предполёт: документация, провенанс, процесс (push) Failing after 46s
Проверка (CI) / Переиспользование: это дерево уже проверено (push) Successful in 1m17s
Проверка (CI) / HACS: валидация репозитория (push) Failing after 20s
Проверка (CI) / Hassfest: манифест интеграции (push) Failing after 17s
Проверка (CI) / Геометрия: TS/Python parity исполнена (push) Successful in 3m24s
Проверка (CI) / Бэкенд: pytest в Home Assistant (push) Failing after 8m20s
Проверка (CI) / Фронтенд: типы, юниты, мутанты, синхрон бандла (push) Failing after 11m18s
Проверка (CI) / Смоки в браузере (шард 1 из 3) (push) Skipped
Проверка (CI) / Смоки в браузере (шард 2 из 3) (push) Skipped
Проверка (CI) / Смоки в браузере (шард 3 из 3) (push) Skipped
Проверка (CI) / Смоки: все шарды зелёные (push) Skipped
Проверка (CI) / Golden-кадры против принятых эталонов (push) Skipped
Проверка (CI) / Перф-смок: бюджет времени кадра (push) Skipped
Проверка (CI) / Доказательство выполненных проверок (push) Failing after 16s
docs: review document for #584
Issue: #584
User-Visible: no
2026-09-16 19:50:17 +00:00

18 KiB
Raw Blame History

SPEC-REVIEW-584-r2

Issue: #584 · Этап: ТЗ на ревью (S4-spec-review) · Заход: r2 · Трек: полный (аналитика от 2026-09-15: сложность 6/10, риск 7/10 — критерий лёгкого трека «сложность и риск ≤3» не пройден).

Вердикт: зелёный


Скоуп проверки (по дельте, PROCESS.md §2.10)

r1 (docs/reviews/SPEC-REVIEW-584-r1.md, вердикт жёлтый, единственная блокирующая находка — Medium «влияние на touch не названо явно») получен на редакции тела issue от комментария Matysh 2026-09-16T19:33:08Z, репозиторий dev @ 7c5fd32a08f07177d55905d65990180a354dd0ec.

Материал этого раунда — правка тела issue, описанная комментарием IC_kwDOTOcLQM8AAAABU_SjEQ («Правка ТЗ по r1», Matysh, 2026-09-16T19:43:56Z). GitHub не хранит блоб-хеш редакций тела issue, поэтому дельта установлена через updated_at issue (2026-09-16T19:43:58Z, gh api repos/Matysh/houseplan-card/issues/584) — момент правки совпадает с моментом комментария об этой правке день-в-день до секунды, и timeline этого issue не показывает других событий edited ни до, ни после. Автор объявил дельту явно: добавлены ровно два новых раздела, «Touch, View и киоск» и «Безопасность», между «Затронутые файлы и модули» и «i18n» — так они и стоят в текущем теле. Контракт (пп.1–8), все AC1–AC8, «Пользовательский сценарий», «Что человек увидит», «Совместимость и миграция», «Производительность», «Риски», «Принятые предположения» посимвольно совпадают с тем, что цитирует и пересказывает документ r1 — перепроверке не подвергались, см. «Унаследовано из r1» ниже.

Отдельно к процессу, не находка по ТЗ: сам вердикт r1 (комментарий IC_kwDOTOcLQM8AAAABU_RNJw) не называет SHA/дерево материала в теле однострочного вердикта — SHA есть только в полном документе, в блоке «Материал раунда». §2.3 требует sha256 нормализованного тела ТЗ в блоке якорей документа ревью; в SPEC-REVIEW-584-r1.md вместо хеша — метка времени комментария. Хеш не мешает найти материал (issue один, правок тела было ровно одна, updated_at подтверждает), поэтому это не блокирует r2, но фиксирую как пробел оформления r1, а не задачи: следующему автору документа стоит класть sha256 тела в анкор, как предписано §2.3.

Читаны заново для этого раунда: docs/SCOPE.md (уже читан по факту, сверка скоупа не изменилась), PROCESS.md §2.4/§2.5/§2.10/§7.1/§7.2, текущее тело issue #584 целиком, все 8 комментариев, docs/reviews/SPEC-REVIEW-584-r1.md из коммита 1c0ed731.

Что проверено в дельте

Дельта — два новых раздела. Оба содержат новые фактические утверждения, которых не было в r1, поэтому они сверены с кодом (репозиторий на SHA 1c0ed731, рабочая копия), а не приняты на слово:

Утверждение делты Проверка Результат
«жесты, hit-area мебели и положение хэндлов resize/rotate считаются от физического бокса фигуры, а не от art-координат» src/houseplan-card.ts:8921 — furnitureRenderTransform(sh, W, H, art.viewW, art.viewH) берёт sh (сохранённый физический box: x/y/w/h из конфига) как первый операнд; hit-path (dfurniturehit) использует тот же tr подтверждено — хэндлы и хит-путь строятся от sh, а не от art-координат
«halo выделения по-прежнему строится по пути символа (#383) и вместе с ним станет ровно таким же, как видимая геометрия» src/houseplan-card.ts:8921-8938: dfurniturehit (halo/hit) рендерится с тем же d="${art.d}" и тем же transform=${tr}, что и видимый dfurn-path, отличие только в stroke-width подтверждено дословно; furnitureRenderTransform промаркирован в src/furniture.ts:605 как «One canonical transform for visible art, selection halo and future consumers»
«Плановые SVG… генератор проверяет их формат сам — активный XML, внешние ссылки и посторонние теги отвергаются (существующий контракт svgArt…)» scripts/generate-furniture-assets.mjs:60-96, функция svgArt: отклоняет <!DOCTYPE|<!ENTITY|<?|<!--|<script|<style>, разрешает только теги svg/g/path, для <path> — только атрибуты d/fill/stroke/stroke-width/stroke-linecap/stroke-linejoin подтверждено — контракт уже существует и уже отклоняет ровно перечисленное; расширение пп.2/5 (границы, единственный path, M) в текущем svgArt действительно ещё не реализовано — соответствует контракту п.1/2/5 и AC5, которые эта задача добавляет
«Отдельно фиксируется AC7» текст AC7 в теле issue: «правка ограничена паком, генератором, src/furniture.ts и тестами; редактор, hit-area, привязка к стенам, схема конфига и i18n не меняются» согласовано — новый раздел Touch не противоречит AC7, а прямо на него ссылается
«Сетевых вызовов, прав, пользовательского ввода и разбора внешних данных задача не трогает» сверено с диапазоном затронутых файлов из контракта (assets pack, генератор, src/furniture.ts, generated art/catalog, тесты) — ни один не относится к сети/правам/пользовательскому вводу согласовано

Ни одна новая формулировка не оказалась догадкой, выданной за факт: обе секции описывают код, который уже существует именно так, как написано.

Закрытие раунда r1

Находка r1 Чем закрыта Где это видно
Medium (блокирующая): ТЗ не называет влияние на touch — DoR §2.5 требует явный пункт («View и киоск — блокирующие»), в тексте не было слов «touch»/«киоск» Добавлен раздел «Touch, View и киоск» с явным «Влияния нет, и это утверждение, а не следствие», обоснованием через физический бокс (не art-координаты) и ссылкой на AC7 Тело issue #584, ## ТЗ → раздел «Touch, View и киоск» (между «Затронутые файлы и модули» и «Безопасность»)
Low (снята с записью в r1, не требовала правки): разделы «UX» и «скоуп/не-скоуп» без отдельных заголовков Не правилось — автор в комментарии IC_kwDOTOcLQM8AAAABU_SjEQ явно объяснил отказ (содержание уже в AC7, заголовки добавили бы длину без нового утверждения); ревьюер r1 уже снял находку с записью, повторно не требуется Комментарий «Правка ТЗ по r1»
Low (снята с записью в r1): security не назван даже «нет» Закрыта с запасом: добавлен явный раздел «Безопасность» с «Влияния нет» и обоснованием (свойства svgArt уже отклоняют активный XML/внешние ссылки/посторонние теги) Тело issue #584, ## ТЗ → раздел «Безопасность»
Low (снята с записью в r1): формула допуска AC3 не зафиксирована числом Осталась как есть — намеренное решение, автор подтвердил (технический вопрос, не продуктовый, §7.1) Комментарий «Правка ТЗ по r1»

Унаследовано из r1

Принято без повторной проверки в этом раунде — как уже проверенное и неизменное содержимое, задокументированное в docs/reviews/SPEC-REVIEW-584-r1.md (коммит 1c0ed731, материал: тело issue на редакции 2026-09-16T19:33:08Z, dev @ 7c5fd32a):

  • Соответствие docs/SCOPE.md (искажённый физический масштаб мебели делает план визуально недостоверным — это J1/J4 в буквальном смысле «то, что видно на плане»).
  • Контракт пп.1–8 — однозначность и проверяемость против кода (44 плановых SVG, furnitureRenderTransform, parseSvgPath, kitchen_floor/dishwasher 60×60, plant 2%, paths.join(' ') в генераторе).
  • AC1–AC8 — формулировки и способ доказательства (unit / unit-generator / golden / review / гейты) для каждого.
  • Продуктовые вопросы Q1 (видимый габарит = осевая линия контура, обводка не входит) и Q2 (без миграции, центрирование в прежнем физическом боксе) — закрыты владельцем предметно, открытых продуктовых вопросов не осталось.
  • Блок «Принятые предположения» (аналитическая проверка границ без браузера; legacy-примитивы остаются кодом, не переводятся в SVG-пак) оформлен по §7.1.
  • Откат («возврат коммита») и совместимость (без миграции, x/y/w/h, угол, зеркалирование сохраняются) — корректны для правки без миграции конфига.
  • Риски (маскировка регрессии golden-пересъёмкой; склейка путей как единственное место, где легко молча испортить геометрию; рост ленивого чанка art) — предметны и покрывают специфику задачи.
  • §7.1 обязательные разделы присутствуют по содержанию (кроме двух устранённых в этом раунде пробелов — touch и security).

Находки

Блокирующих (High) нет. Находок Medium, требующих правки в этом раунде, нет — единственная Medium-находка r1 закрыта (см. таблицу выше). Новых находок по содержанию дельты не появилось.

Что проверено и корректно

  • Оба новых раздела фактически точны и сверены с кодом построчно (см. таблицу «Что проверено в дельте») — ни одна фраза не оказалась недоказанным допущением.
  • Новые разделы не создают противоречия с AC7 и с контрактом пп.1–8: они ссылаются на существующие ограничения, а не вводят новые обещания поведения.
  • DoR §2.5 теперь закрыт по всем пунктам: ТЗ + зелёное ревью, нумерованные AC1–AC8 со способом доказательства, затронутые файлы, i18n («нет» явно), миграция/совместимость решены, touch по TOUCH-SUPPORT.md назван явно, производительность названа, release-артефакты (changelog RU+EN, golden, перф, security) перечислены или явно «нет», откат описан, открытых продуктовых вопросов нет, риски перечислены.
  • Правка по замечанию (§2.10, «правка способна сломать AC, который предыдущий раунд признал выполненным») не задела ни один AC: новые разделы не переопределяют геометрию, transform или scope контракта, только формулируют явно то, что уже следовало из AC7.

Чего не проверял

  • Не перепроверял заново AC1–AC8 по коду/паку — кода и ассетов по задаче в репозитории ещё нет (реализация не начата, issue всё ещё на этапе ТЗ); это предмет код-ревью, не этого раунда.
  • Не проверял повторно факты, не задетые дельтой (44 SVG, parseSvgPath, генератор, plant, kitchen_floor/dishwasher) — они наследуются из r1 без изменений, дельта их не касается (см. «Унаследовано из r1»).
  • Не запускал гейты (npm test, furniture:check, golden:verify и т.п.) — на этапе ревью ТЗ нет ни строки кода/ассета для прогона; это часть §8 на этапе код-ревью.
  • Не проверял, положил ли предыдущий ревьюер sha256 тела ТЗ в анкор документа r1 (§2.3) — не положил; отмечено выше как пробел оформления, не как блокирующая находка этого раунда.

Итог

Единственная блокирующая находка r1 закрыта точным попаданием — явным разделом «Touch, View и киоск» с обоснованием через уже зафиксированный в контракте механизм (физический бокс, а не art-координаты) и прямой ссылкой на AC7. Дельта также добавила раздел «Безопасность», закрывающий Low-находку r1 с запасом. Обе новые формулировки проверены по коду и точны. DoR §2.5 выполнен по всем пунктам. High нет, Medium нет — вердикт зелёный, задача уходит в S5-ready.


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

  • Issue: https://github.com/Matysh/houseplan-card/issues/584
  • Материал ТЗ r2: тело issue #584, раздел ## ТЗ, редакция после правки комментарием IC_kwDOTOcLQM8AAAABU_SjEQ (Matysh, 2026-09-16T19:43:56Z), updated_at issue = 2026-09-16T19:43:58Z (gh api repos/Matysh/houseplan-card/issues/584).
  • Материал ТЗ r1 (для дельты): тело issue на редакции комментария IC_kwDOTOcLQM8AAAABU_J7Fg (Matysh, 2026-09-16T19:33:08Z), как зафиксировано в docs/reviews/SPEC-REVIEW-584-r1.md.
  • Репозиторий на момент ревью: 1c0ed73133b3718c19f1c8c0bd1b05f0f208d4b2 (рабочая копия; кода по задаче ещё нет, использован только для сверки фактических утверждений ТЗ с текущим состоянием src/, scripts/).

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

  • Ветка: dev, коммит 1c0ed73133b3 — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет.
  • Дерево материала: 9bf8c6df56d7886a9dfe6d6930424846ee92aaa3
    git log --all --format='%H %T' | grep 9bf8c6df56d7
    
  • Тело issue: 2b6d41955420844101142131ce4f789615f0ac788609ae654f4b416448b03b9b
  • Вердикт конвейера: green · High 0