mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-02 21:01:21 +00:00
72 lines
12 KiB
Markdown
72 lines
12 KiB
Markdown
# 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 и «Контракт». ТЗ готово к переходу на код-ревью.
|
||
|
||
---
|
||
|
||
<!-- material-anchors: сгенерировано конвейером (#414) -->
|
||
|
||
## Материал раунда
|
||
|
||
- Ветка: `dev`, коммит `` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет.
|
||
- Якоря снять не удалось: ветки задачи нет, материал читался по `dev`.
|