Files
houseplan-card/docs/reviews/SPEC-REVIEW-463-r2.md
T
2026-09-05 14:38:15 +00:00

12 KiB
Raw Blame History

SPEC-REVIEW-463-r2

Issue: #463 — «Нативные диалоги прижимаются к краю и теряют модальность после переподключения» Этап: ТЗ на ревью (S4-spec-review), лёгкий трек (small) Заход: r2 · блокирующих циклов израсходовано 1 из 2 (лимит лёгкого трека — 2) Материал: тело issue #463 на момент ревью (канонический блок «ТЗ лёгкого трека») + правка-комментарий владельца от 2026-09-05T14:33:32Z, описывающий внесённые исправления после r1 + src/hp-dialog.ts, docs/ARCHITECTURE.md, demo/golden/matrix.mjs, docs/CHANGELOG*.md на HEAD=f6956fa4 (dev, без изменений с r1 — задача ещё не реализована).

Код продукта не менялся между r1 и r2 (задача в стадии ТЗ, src/hp-dialog.ts не тронут). Дельта раунда — правка текста issue после красного вердикта r1 (комментарий 2026-09-05T14:33:32Z).

SHA предыдущего раунда

Вердикт r1 (красный, docs/reviews/SPEC-REVIEW-463-r1.md) не называл явный SHA основного материала issue (у текста issue нет коммитов/SHA — только правка через комментарий и редактирование тела). SHA сопутствующего кода в r1 был назван: HEAD=fc0c6166. Между fc0c6166 и текущим f6956fa4 в диапазон входит только сам коммит публикации docs/reviews/SPEC-REVIEW-463-r1.md (f6956fa4) — код, ARCHITECTURE.md, PROCESS.md, AGENTS.md, SCOPE.md не менялись (git log fc0c6166..HEAD -- PROCESS.md AGENTS.md docs/SCOPE.md — пусто). Дельта этого раунда полностью локальна к тексту issue.

Объявление дельты

Дельта — редактирование тела issue после r1, зафиксированное комментарием владельца:

«условная оговорка о golden удалена; зафиксированы обязательная приёмка полного фактического inventory (сейчас 29 dialog-сцен) и 4 docs-кадров; backdrop уточнён как видимый scrim с alpha > 0. Дополнительно исправлены пути changelog, уточнён ARCHITECTURE-контракт и заголовок issue».

Пять точек правки: раздел «Release-артефакты» (golden-оговорка), формулировка AC1 (backdrop), пути changelog в «Затронутые поверхности», строка ARCHITECTURE.md в «Затронутые поверхности», заголовок issue. Раздел «Контракт» (пп. 1–6), AC2–AC6, «Не входит», «Совместимость, touch и производительность», «Откат» дельту не задевают — наследуются из r1 без повторной проверки.

Как проверялось

  • Прочитано текущее тело issue #463 целиком (канонический блок ТЗ) и комментарий от 2026-09-05T14:33:32Z.
  • Сверено дословно: старая формулировка golden-оговорки, процитированная в docs/reviews/SPEC-REVIEW-463-r1.md («Новый golden не обязателен, если восстановленный вид побайтово совпадает с действующими эталонами...») — в текущем теле отсутствует; на её месте — безусловное «Golden обязателен» с требованием пересъёмки полного inventory и явной приёмки изменившихся кадров.
  • Сверена старая формулировка AC1 («backdrop непрозрачен», отмеченная Low в r1) — заменена на «вычисленный backdrop виден (alpha > 0)», дословно совпадает с рекомендацией r1.
  • grep -c "dialog: '" demo/golden/matrix.mjs → 29 — совпадает с заявленным в ТЗ «matrix содержит 29 scenario.dialog»; не голословная оценка, а проверяемое число.
  • Прочитан docs/ARCHITECTURE.md (пункт 5 «One modal contract», строки 127–130): текущее описание «delegates surface semantics... falls back to native <dialog>» действительно не упоминает самовосстановление модальности и ветвление по факту DOM — заявленное в ТЗ «уточнение уже неточного описания» соответствует реальному состоянию документа, не выдумка.
  • Проверены пути docs/CHANGELOG.md, docs/CHANGELOG.ru.md (ls/Glob) — оба существуют, названы верно.
  • Заголовок issue («Нативные диалоги прижимаются к краю и теряют модальность после переподключения») не приписывает alert-диалогу немодальность — согласуется с воспроизведением («конкретный hp-confirm уже open и :modal»), исходная неточность заголовка, отмеченная владельцем, устранена.
  • Перепроверены на взаимное непротиворечие только задетые дельтой разделы: AC1 (backdrop) и «Release-артефакты» (golden) — не создают новых противоречий с AC2–AC6 и «Контрактом», которые их не упоминают.
  • Гейтов кода нет: стадия ТЗ, продуктовый код не менялся ни в этом раунде, ни между раундами.

Находки

Нет. Обе находки r1 (High и Low) закрыты правкой текста; новых находок в дельте не обнаружено.

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

Находка r1 Чем закрыта Где это видно
High — раздел «Release-артефакты» ложно утверждал, что golden не обязателен при «побайтовом совпадении», хотя все сцены с диалогом рендерятся нативной веткой и уже показывают дефект Оговорка удалена; текст теперь безусловно требует пересъёмки и приёмки golden для всех dialog-сцен Тело issue, «Release-артефакты»: «Golden обязателен. На момент ТЗ matrix содержит 29 scenario.dialog... После реализации переснимается фактический полный inventory dialog-сцен; принимается явный список только после визуального просмотра каждого изменившегося кадра. Допустимая дельта — центрирование и связанный scrim; любое иное расхождение блокирует приёмку.»
Low — AC1 «backdrop непрозрачен» буквально конфликтует с действующим rgb(0 0 0 / 0.45) Формулировка заменена на «виден (alpha > 0)», дословно как рекомендовано в r1 Тело issue, AC1: «...а вычисленный backdrop виден (alpha > 0)»

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

Без повторной проверки в этом раунде принято на основании docs/reviews/SPEC-REVIEW-463-r1.md (материал на HEAD=fc0c6166, код с тех пор не менялся):

  • Продуктовая рамка и скоуп: задача — багфикс общего modal-контракта hp-dialog (используется в 31 месте), не новая функциональность; конфликта с docs/SCOPE.md нет (предпосылка к J3/J4/J6, восстанавливает уже описанный контракт).
  • Техническая база контракта (два независимых дефекта — geometry native outer dialog и потеря :modal после detach/reattach) согласуется с прочитанным src/hp-dialog.ts: единичный вызов showModal() в firstUpdated(), отсутствие повторной проверки при апдейтах/переподключении.
  • AC2–AC6 сформулированы как проверяемые критерии с мутационными свидетелями там, где нужно; пограничный случай п.5 контракта (уже открытый native-fallback экземпляр не пересоздаётся при поздней регистрации ha-dialog) — приемлемое решение, не требует эскалации владельцу.
  • «Не входит», «Откат», «Совместимость, touch и производительность» — присутствуют, согласованы с фактическим состоянием, замечаний нет.
  • Дублирования с существующим demo/smoke_danger_confirm_branches.mjs нет — этот смок не проверяет геометрию/:modal/::backdrop.

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

  • Не проверял docs-capture раздел («4 из 10 кадров... space-create, device-editor, device-display-preview, device-info») отдельно в этом раунде — не упомянут в комментарии о правках, дельта его не касалась; не нашёл в нём противоречий при чтении, но отдельно не пересчитывал состав 10 кадров.
  • Не запускал typecheck/test/build/golden:verify/инварианты — кода нет, стадия ТЗ, гейты неприменимы (как и в r1).
  • Не проверял поведение реального Home Assistant frontend — вне материала ревью ТЗ.

Вердикт

Зелёный. Обе находки r1 закрыты точными правками текста, дельта не создала новых противоречий и не задела ранее принятые AC2–AC6 и «Контракт». ТЗ готово к переходу на код-ревью.


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

  • Ветка: dev, коммит `` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет.
  • Якоря снять не удалось: ветки задачи нет, материал читался по dev.