mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
committed by
Sergey Matyunin
parent
4208ca81fe
commit
292618cad0
@@ -0,0 +1,160 @@
|
||||
# SPEC-REVIEW-582-r1
|
||||
|
||||
**Issue:** [#582](https://github.com/Matysh/houseplan-card/issues/582) — «HA Companion: на плане с масштабом 1 см/точку при pinch появляются фиксированные белые области»
|
||||
**Этап:** ТЗ на ревью (S4-spec-review) · заход r1 · блокирующих циклов израсходовано 0 из 4
|
||||
**Ревьюер:** независимая сессия, без контекста автора ТЗ
|
||||
**Материал:** тело issue #582, раздел `## ТЗ`, состояние на момент ревью (см. якоря)
|
||||
|
||||
## Скоуп ревью
|
||||
|
||||
Проверяется ТЗ в теле issue #582 по чек-листу PROCESS.md §7.1: обязательные разделы,
|
||||
однозначность и доказуемость каждого AC, отсутствие непомеченных догадок,
|
||||
соответствие `docs/SCOPE.md` (какую строку Core user jobs закрывает) и
|
||||
терминологии `docs/USER-GUIDE.ru.md`. Продуктовый код не менялся и не оценивался
|
||||
как реализация — только как контекст для проверки технических утверждений ТЗ.
|
||||
|
||||
Задача полного трека (аналитик явно назвал нарушенные критерии лёгкого трека:
|
||||
влияние на производительность и обязательный touch-контракт, несколько
|
||||
compositor-подсистем, кросс-браузерные доказательства) — это корректно, автор
|
||||
ТЗ не пытался обойти классификацию.
|
||||
|
||||
## Как проверялось
|
||||
|
||||
Помимо чтения тела issue и всех комментариев (`gh issue view 582 --json body,comments`),
|
||||
каждое техническое утверждение ТЗ сверено с действующим кодом и каноническими
|
||||
документами, а не принято на слово:
|
||||
|
||||
| Утверждение ТЗ | Где проверено | Результат |
|
||||
|---|---|---|
|
||||
| Постоянный `will-change: filter` на `.hp-paperg`, введённый #532 | `src/styles/plan.styles.ts:97-105` — правило висит безусловно на `.stage.daycycle .hp-paperg` и `.hp-static-stage.daycycle .hp-paperg`, не зависит от размера бумажного bbox | подтверждено дословно |
|
||||
| `.hp-static-stage` — это `houseplan-space-card`, риск общий для обеих поверхностей | `src/space-card.ts:650,944` использует тот же селектор `.hp-static-stage` | подтверждено |
|
||||
| Внутренние SVG-единицы пропорциональны `1/cell_cm` (значит `cell_cm: 1` даёт кратно больший bbox, чем `cell_cm: 5`, при одинаковой физической площади) | `docs/CANVAS.md:43` — `gridVisualScale(cell_cm) = 5 / cell_cm` | подтверждено, числа в ТЗ (4700×4200 vs 932×841) согласуются с формулой |
|
||||
| Компоситорный контракт #579 («от первого live-кадра до terminal commit — один compositor lifecycle», ownership boundary как источник белого/прозрачного кадра в HA Companion WebView) | `docs/ARCHITECTURE.md:1966-2004` | подтверждено дословно, включая упоминание того же symptom-класса |
|
||||
| Существующий mutation-свидетель #532 (`daycycle-outline-not-promoted`, снимает `will-change: filter`) | `scripts/mutation-registry.mjs:2613-2624` | найден, согласуется с AC4 («свидетель #532 остаётся зелёным») |
|
||||
| 4 golden-сцены day-cycle dawn/day/dusk/night уже существуют | `demo/golden/baselines/day-cycle-{dawn,day,dusk,night}-dark.png` | подтверждено, ровно 4 |
|
||||
| Существующие smoke, названные в тест-плане (`smoke_daycycle_raster.mjs`, `smoke_live_pan_coverage.mjs`) | `demo/smoke_*.mjs` (249 файлов) | оба файла существуют |
|
||||
| Термин «Следует за Солнцем» — не изобретён | `docs/USER-GUIDE.ru.md:1628` | совпадает дословно |
|
||||
| Touch-контракт «never flash white, become transparent» применяется к HA Companion WebView | `docs/TOUCH-SUPPORT.md:48-53` | подтверждено — ТЗ решает ровно уже задокументированный release-blocking контракт, не изобретает новый |
|
||||
| Указанные ролью «внутренняя `.hp-paperg`» — pointer-inert | `src/houseplan-card.ts:11622` (`pointer-events="none"`) | подтверждено |
|
||||
|
||||
Дополнительно сверено разбиение issue: часть «Проблема/Воспроизведение/Ожидание»
|
||||
выше `## ТЗ` — интейк-материал от заведения issue, формальный ТЗ начинается с
|
||||
`### Пользовательский сценарий`. Это тот же паттерн, что и в недавнем принятом
|
||||
ТЗ #580 (сверено `gh issue view 580`), значит не является отклонением от
|
||||
устоявшейся практики репозитория.
|
||||
|
||||
## Находки
|
||||
|
||||
### Low — AC5 не несёт собственного независимого доказательства (снято ревьюером)
|
||||
|
||||
`AC5 (render contract)` дублирует контракт-пункт 5 («один внешний контур без
|
||||
внутренних швов») и часть контракта-пункта 7, но категория «render contract» не
|
||||
входит в перечень доказательств §2.5 (`unit`/`backend`/`smoke`/`golden`/«ревью
|
||||
кода»). При первом чтении это выглядит как AC без названного способа проверки.
|
||||
|
||||
Проверка тест-плана показала, что это не пробел: раздел «Тест-план и
|
||||
доказательства» явно называет «unit/structure-проверку наличия отдельной
|
||||
outline-scene **только там, где она нужна**» — формулировка покрывает и
|
||||
позитивную часть AC5 (full/kiosk/space-card получают контур), и негативную
|
||||
(редакторы и изометрия не получают новый filter-layer), а видимый шов между
|
||||
комнатами — тот же механизм, что уже сегодня закрывает существующий
|
||||
комментарий `houseplan-card.ts:11617-11619` («One `<g>` around ALL paper shapes
|
||||
… so adjacent rooms never cast seams»). Иными словами, AC5 полностью
|
||||
покрывается связкой AC6 (golden) + AC7 (unit/structure), у него просто нет
|
||||
собственной строки-подписи.
|
||||
|
||||
Снимаю без правки: это вопрос перечисления, а не отсутствующей проверки —
|
||||
автор может при желании сменить бирку AC5 на `(golden + unit, см. AC6/AC7)`,
|
||||
но это не блокирует переход в «Готово к разработке».
|
||||
|
||||
## Что проверено и признано корректным
|
||||
|
||||
- Все обязательные по §7.1 содержательные блоки присутствуют (распределены по
|
||||
подзаголовкам как и в #580): сценарий, видимый до/после, проблема (частично
|
||||
вынесена в тело issue выше `## ТЗ`, частично — в «Подтверждённая причина»),
|
||||
контракт поведения, UX/данные/i18n, критерии приёмки с доказательством,
|
||||
тест-план, риски, откат, release-артефакты.
|
||||
- Технический диагноз (`will-change: filter` на координатно большой
|
||||
`.hp-paperg` создаёт compositor-слой пропорционально `cell_cm`) грамотно
|
||||
отделён от решения: ТЗ явно запрещает наивные обходы («нельзя просто удалить
|
||||
`will-change`», «нельзя отключить тень», «нельзя подменить фон статичным») и
|
||||
оставляет техническую реализацию (где именно рисуется вторая сцена, как она
|
||||
синхронизируется) агентам — это правильная граница §7.1 «всё, чего
|
||||
пользователь не наблюдает, решают агенты».
|
||||
- Продуктовых вопросов владельцу нет, и по факту не нужно: единственные
|
||||
неопределённости (природа «белых областей» как platform-specific потери
|
||||
тайлов, способ вычисления экранного лимита теста, неизменность параметров
|
||||
тени) явно помечены разделом «Принятые предположения», а не выданы за факт.
|
||||
Это именно то разграничение, которое требует PROCESS.md §7.1 — ни одна из
|
||||
них не является продуктовым вопросом («что видит/делает человек»), поэтому
|
||||
эскалация владельцу была бы избыточной.
|
||||
- AC1–AC4, AC6–AC9 однозначны, у каждого назван способ доказательства и он
|
||||
соответствует существующей инфраструктуре гейтов (CDP LayerTree smoke,
|
||||
presented-frame/screencast smoke, performance-сравнение, golden, unit/
|
||||
structure, quality gates, полевая проверка). AC2 явно требует мутационного
|
||||
свидетеля и связи с mutation registry — соответствует §2.7 требованию
|
||||
«таблица чем краснеет» на будущее код-ревью.
|
||||
- Контракт поведения (пункты 1–7) непротиворечив: не расширяет пользовательский
|
||||
скоуп (внешний вид, тайминг фаз, параметры тени не меняются), явно
|
||||
перечисляет незатронутые подсистемы (изометрия, редакторы, солнечные лучи,
|
||||
Glow, мебель, проёмы, конфиг-схема) — это и есть не-скоуп, просто внутри
|
||||
«Контракта», а не под отдельным заголовком.
|
||||
- Откат — один коммит без миграции данных, с явным условием (не откатывать
|
||||
тихо, без блокировки беты) — проверяемо и соразмерно классу бага.
|
||||
- Release-артефакты названы: `ARCHITECTURE.md`, `SUN.md`, опционально
|
||||
`TOUCH-SUPPORT.md`/`TESTING.md`, оба changelog в терминальном коммите при
|
||||
`User-Visible: yes` — соответствует §2.5 DoR.
|
||||
- i18n и модель данных корректно помечены «не затрагиваются» и это
|
||||
подтверждается описанным характером правки (только отрисовка).
|
||||
|
||||
## Чего не проверял
|
||||
|
||||
- Сам продуктовый код фикса не существует (это этап ТЗ, реализации ещё нет) —
|
||||
соответственно AC1–AC9 не исполнялись, только оценивалась их проверяемость и
|
||||
соответствие существующей инфраструктуре гейтов.
|
||||
- Не проверялось реальное поведение в HA Companion WebView на физическом
|
||||
устройстве — это находится за пределами ревью ТЗ и явно вынесено в AC9
|
||||
(полевая проверка после беты), что ТЗ само корректно помечает как
|
||||
дополняющую, а не блокирующую автоматические AC проверку.
|
||||
- Не запускал `npm test`/`npm run build`/gates — на этапе ревью ТЗ не
|
||||
применимо: код не менялся, только текст issue.
|
||||
- Не проверял issues #532 и #579 построчно по их собственным ТЗ/ревью —
|
||||
ограничился их итоговым состоянием в `ARCHITECTURE.md`/`SUN.md` и `CLOSED` в
|
||||
трекере, этого достаточно для проверки согласованности заявленной причины.
|
||||
|
||||
## Вердикт
|
||||
|
||||
Зелёный. AC пронумерованы, каждый имеет способ доказательства, технические
|
||||
утверждения о причине дефекта подтверждены чтением действующего кода и
|
||||
канонических документов (не догадка, выданная за факт), продуктовых открытых
|
||||
вопросов нет, риски и откат описаны. Единственная находка — Low, снята
|
||||
ревьюером без правки текста (см. раздел «Находки»).
|
||||
|
||||
---
|
||||
|
||||
## Материал раунда
|
||||
|
||||
- Issue: #582, ветка ТЗ — тело issue, раздел `## ТЗ` (файл в `docs/specs/` не
|
||||
создаётся, #517).
|
||||
- Проверено на состоянии репозитория `bae6afaae7bac2dd45bca52b6caf64a16d96f182`
|
||||
(текущая рабочая копия), файлы-источники истины для сверки: `src/styles/plan.styles.ts`,
|
||||
`src/space-card.ts`, `src/space-render.ts`, `src/houseplan-card.ts`,
|
||||
`scripts/mutation-registry.mjs`, `docs/CANVAS.md`, `docs/ARCHITECTURE.md`,
|
||||
`docs/SUN.md`, `docs/TOUCH-SUPPORT.md`, `docs/USER-GUIDE.ru.md`.
|
||||
- Текст ТЗ получен `gh issue view 582 --repo Matysh/houseplan-card --json body,comments`
|
||||
в ходе этого ревью; отдельный SHA/blob тела issue конвейер проставит сам в
|
||||
публикуемую версию документа.
|
||||
|
||||
---
|
||||
|
||||
<!-- material-anchors: сгенерировано конвейером (#414) -->
|
||||
|
||||
## Материал раунда
|
||||
|
||||
- Ветка: `issue/582-webview-large-filter-layers`, коммит `bae6afaae7ba` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет.
|
||||
- Дерево материала: `df4dd4b28569cf0269e0ae155d20537080179e07`
|
||||
```
|
||||
git log --all --format='%H %T' | grep df4dd4b28569
|
||||
```
|
||||
- Тело issue: `4c1e1ecfe8ce205f3cfb3c44eb6028a35d0bb4358323e05ba60c6fd85b3b40ba`
|
||||
- Вердикт конвейера: `green` · High 0
|
||||
Reference in New Issue
Block a user