docs(review): record local acceptance of Zigbee caption layout

Issue: #802
User-Visible: no
This commit is contained in:
Matysh
2026-10-05 21:39:44 +03:00
parent 077e9c1b1b
commit 5c893c7ff3
2 changed files with 74 additions and 1 deletions
+71
View File
@@ -0,0 +1,71 @@
# Локальное код-ревью #802 — r1
Вердикт: зелёный · High: 0 · Medium: 0 · маршрут: merge.
## Материал и полномочия
- Дата: 2026-10-05; ветка `issue/802-zigbee-hover-labels`.
- База: `7feda5b6c82b34f3b42f87a1f0c1fac5bf590265`.
- Продукт: `db887cd7f0612267e74d06700ae5fe8deb14a561`.
- Итоговый материал тестов: `077e9c1b1be693757009f748bfccb1c77bb39aee`.
- ТЗ: тело [#802](https://github.com/Matysh/houseplan-card/issues/802), раздел
`## ТЗ`, default Q1 принят. [Исключение владельца](https://github.com/Matysh/houseplan-card/issues/802#issuecomment-6000425421)
разрешает саморевью, ручное слияние и следующую бету вместо недоступной
ревью-модели. Это не вердикт штатного автоматического ревьюера.
Автор прочитал весь diff; дополнительно отдельный локальный агент проверил
продуктовый материал и повторно проверил исправление своей находки. Итог
обоих прочтений — без High/Medium. Изначально длинная подпись адресата могла
перекрыть сетевой status-бейдж; это исправлено тем же измеряемым размещением,
с переносом текста и присоединением стрелки к фактическому краю подписи.
## Приёмка
| Контракт | Проверка |
| --- | --- |
| AC1: адресат | ZHA/Z2M, имя из текущего маппинга, fallback, длинные строки и специальные символы; Lit выводит текст, входящий счётчик не изменён. |
| AC2: читаемость | Реальный pointer, remote/unplaced/status-only, partial/stale/error, края, Flat и настоящий 2.5D, обе темы; измеряются пересечения DOM-прямоугольников. |
| AC3: тесная карточка | 13 unit-тестов чистого расчёта, включая независимый перебор 200 малых раскладок; browser hide/restore без нового hover. |
| AC4: обновления | Lazy adoption уже наведённого устройства, runtime, resize и camera, отсутствие новых запросов от pointer; измерения после render объединены через rAF. |
| AC5: input/lifecycle | Keyboard restore, mouse/touch/pen, несколько карточек и unmount; соседние input/render smokes. Наблюдатели отключаются при clear/disconnect. |
| AC6: визуал | Просмотрены кадры длинной подписи, status-only 2.5D, узкой карточки и transformed/scrolled ancestor. Эталоны не переписываются вслепую. |
## Исполненные проверки
- WSL Ubuntu, Node 22.23.2: `npm run gate:small` — PASS, 0 упавших гейтов.
Нативный Windows не использован как доказательство полного unit-набора:
платформенные shell-тесты проверены в WSL.
- `node demo/smoke_zigbee_tooltip_layout.mjs` — 77/77 PASS на Windows с pinned
Node; базовые 70 проверок также PASS в WSL. Дополнительные семь проверяют
реальный `position:fixed` при `translate + scale` предка, scroll без нового
hover и повторное наведение после большой прокрутки.
- WSL: `smoke_zigbee_topology_hover`, `smoke_household_journeys`,
`smoke_render_invalidation`, `smoke_touch_tips` — PASS.
- WSL: полный `npm run golden:verify` — PASS; ни один эталон не изменён.
- Отрицательный контроль старого cursor-position даёт 1596 CSS px² перекрытия;
новый layout устраняет его. Это не DOM-count и не поиск строки в исходнике.
- Изолированный raster-oracle обводки временно скрывает обычную подсказку
только внутри тестовой сцены, иначе её тёмный фон закрывает измеряемую стрелку
при scale 0.5. Все пороги и проверки масштабирования сохранены; совместное
отображение подсказок защищено отдельным новым smoke.
- `git diff --check`, process gate с живыми issue-метками,
`node scripts/mutation-gate.mjs --check` — PASS. Два мутанта размещения
зарегистрированы; их исполнение оставлено ночному гейту по процессу.
Smoke-select перечисляет много потребителей общего live-hover; локально выбран
Zigbee, household actions, invalidation и touch, поскольку новая ветка активна
только для pointer-tooltip с совпадающим владельцем реально показанных
Zigbee-бейджей. Остальные режимы ранним return сохраняют старое поведение.
Полная CI-матрица остаётся обязательной на точном SHA беты.
## Ограничения и заключение
В физически слишком маленькой области невозможно гарантировать размещение
сколь угодно длинного диагностического текста. Текст не обрезается до потери
имени, обычный tooltip уступает место; новая настройка не добавлена.
Изменения не затрагивают маршруты, LQI, transport, сохранённые данные или
действия устройств. Рост bundleBytes на 8229 байт обоснован в issue; прочие
монолитные метрики и initial-load budget не расширены.
Разрешено ручное слияние после зелёных проверок ветки. Этот документ сам по
себе не подтверждает готовность точного release-кандидата или публикацию.
+3 -1
View File
@@ -1,12 +1,14 @@
# Индекс ревью
Генерируется `node scripts/reviews-index.mjs` (#635) — не редактировать руками. Документов: 305, issue: 152. Вердикт: 🟢 зелёный · 🟡 жёлтый · 🔴 красный · ⚪ не распознан (свободная форма старых документов). H/M — число High/Medium по строке вердикта или заголовкам находок. Файлы — пути, названные в находках; ищите по имени файла: `grep form-kit INDEX.md`.
Генерируется `node scripts/reviews-index.mjs` (#635) — не редактировать руками. Документов: 307, issue: 153. Вердикт: 🟢 зелёный · 🟡 жёлтый · 🔴 красный · ⚪ не распознан (свободная форма старых документов). H/M — число High/Medium по строке вердикта или заголовкам находок. Файлы — пути, названные в находках; ищите по имени файла: `grep form-kit INDEX.md`.
| Issue | Документ | Этап · раунд | Вердикт | H | M | Находки | Файлы |
|---|---|---|---|---:|---:|---|---|
| бета v1.80.0-beta.1 | [SHIP-REVIEW-v1.80.0-beta.1.md](SHIP-REVIEW-v1.80.0-beta.1.md) | пакетное ревью ship · — | ⚪ — | 0 | 0 | — | — |
| бета v1.79.0-beta.2 | [SHIP-REVIEW-v1.79.0-beta.2.md](SHIP-REVIEW-v1.79.0-beta.2.md) | пакетное ревью ship · — | ⚪ — | 0 | 0 | — | — |
| бета v1.79.0-beta.1 | [SHIP-REVIEW-v1.79.0-beta.1.md](SHIP-REVIEW-v1.79.0-beta.1.md) | пакетное ревью ship · — | ⚪ — | 0 | 0 | — | — |
| #802 | [SPEC-REVIEW-802-r1.md](SPEC-REVIEW-802-r1.md) | spec · r1 | 🟢 зелёный | 0 | 0 | — | — |
| #802 | [CODE-REVIEW-802-r1.md](CODE-REVIEW-802-r1.md) | code · r1 | 🟢 зелёный | 0 | 0 | — | — |
| #800 | [SPEC-REVIEW-800-r1.md](SPEC-REVIEW-800-r1.md) | spec · r1 | 🟢 зелёный | 0 | 0 | — | — |
| #800 | [CODE-REVIEW-800-r1.md](CODE-REVIEW-800-r1.md) | code · r1 | 🟡 жёлтый | 0 | 3 | живой браузер остаётся на умершем job после reload интеграции; AC1 не имеет свидетеля, чувствительного к прежнему 600-секундному deadline; материал не проходит обязательный gate:small; English guide всё ещё обещает прекращение ожидания через 10 минут | `custom_components/houseplan/zigbee_topology.py` `scripts/mutation-registry.mjs` `test/data-hp-contract.test.mjs` `test/reviews-index.test.mjs` `PREFLIGHT-SPEC-800.md` `test/smoke-select.test.mjs` `docs/USER-GUIDE.md` |
| #800 | [CODE-REVIEW-800-r2.md](CODE-REVIEW-800-r2.md) | code · r2 | 🟡 жёлтый | 0 | 1 | временный not_ready во время reload навсегда блокирует явный retry | `src/zigbee-topology-runtime.ts` |