mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-01 12:18:51 +00:00
@@ -0,0 +1,234 @@
|
||||
# SPEC-REVIEW-505-r2
|
||||
|
||||
Issue: https://github.com/Matysh/houseplan-card/issues/505
|
||||
Стадия: ТЗ на ревью (`S4-spec-review`), полный трек (не пересматривается в r2 —
|
||||
основание трека не затронуто дельтой).
|
||||
Заход: r2 · блокирующих циклов израсходовано 1 из 4 (жёлтый r1 бюджет потратил;
|
||||
зелёный r2 цикла не образует, #227).
|
||||
Материал: `docs/specs/505-summary-panel-design-parity.md` на SHA
|
||||
`8c0962f36f2b93dd0c043806aa2e838d570fcd1c` (ветка `issue/505-summary-panel-polish`,
|
||||
коммит «docs: address summary panel spec review r1»). Рабочая копия уже стоит
|
||||
на этом SHA (`HEAD detached at origin/issue/505-summary-panel-polish`).
|
||||
|
||||
## 1. Скоуп ревью — почему разбор по дельте
|
||||
|
||||
Предыдущий раунд: `docs/reviews/SPEC-REVIEW-505-r1.md`, вердикт жёлтый,
|
||||
заход r1, High 0 / Medium 2 / Low 1, материал на SHA
|
||||
`8defee4ce1cb0f2794495c03173348c7a6c34e13`. SHA в вердикте r1 назван явно (в
|
||||
самом документе, раздел «Материал раунда») — расследовать не пришлось.
|
||||
|
||||
Дельта: `git diff 8defee4ce1cb0f2794495c03173348c7a6c34e13..8c0962f36f2b93dd0c043806aa2e838d570fcd1c`
|
||||
затрагивает ровно два файла:
|
||||
|
||||
- `docs/reviews/SPEC-REVIEW-505-r1.md` — публикация документа r1 конвейером
|
||||
(не предмет разбора, это чужой артефакт);
|
||||
- `docs/specs/505-summary-panel-design-parity.md` — 46 insertions / 5 deletions,
|
||||
единственный коммит `8c0962f3` с трейлерами `Issue: #505` / `User-Visible: no`.
|
||||
|
||||
Правка сугубо аддитивна и локальна:
|
||||
|
||||
1. добавлены два новых раздела в начало документа — «Сценарий» и «Что человек
|
||||
увидит до и после» (перед прежним «1. Problem, value and scope»);
|
||||
2. переписан один абзац в конце §8 (список визуальных пар);
|
||||
3. добавлен раздел «Принятые технические предположения» в конец документа
|
||||
(после прежнего раздела 9).
|
||||
|
||||
Ни один из существующих разделов 1–9, таблица AC1–AC11, `Baseline`
|
||||
(`dev@abbca50c`), тело issue (`updated_at` issue = момент последнего
|
||||
комментария автора, содержимое не менялось со времени r1 — сверено
|
||||
построчно) не тронуты. Это не ребейз (baseline тот же `abbca50c`), не смена
|
||||
контракта поведения, не новая подсистема, объём дельты (46 строк) на порядок
|
||||
меньше исходного ТЗ (291 строка). Разбор по дельте: полная переоценка нужна
|
||||
только находкам r1 и участку текста, который они затронули; AC1–AC11 и весь
|
||||
технический анализ §2–7 наследуются без повторной проверки.
|
||||
|
||||
## 2. Как проверялось
|
||||
|
||||
- `git diff 8defee4c..8c0962f3 -- docs/specs/505-summary-panel-design-parity.md`
|
||||
— построчно, для локализации правки и проверки отсутствия побочных правок.
|
||||
- Полное чтение текущего файла `docs/specs/505-summary-panel-design-parity.md`
|
||||
на SHA `8c0962f3` (не только диффа) — чтобы увидеть новые разделы в
|
||||
контексте, а не изолированно.
|
||||
- Прочитан текст issue #505 и все 5 комментариев (аналитика ×2, пауза,
|
||||
возобновление, r1-вердикт, отчёт о правках) — подтверждено, что тело issue
|
||||
и объём scope не менялись после r1, и что комментарий автора (`comment 4`)
|
||||
корректно описывает содержание фактической правки.
|
||||
- Проверено соответствие терминологии персон в новом разделе «Сценарий»
|
||||
канону `docs/SCOPE.md:28-30` — «Home admin» / «Household members» /
|
||||
«Guests / kiosk» и их типовые поверхности (desktop / phone / wall tablet
|
||||
kiosk) совпадают дословно по смыслу с «Администратор дома на desktop», «домочадец
|
||||
... на телефоне», «гость ... в киоске».
|
||||
- Проверено, что новые разделы не содержат терминов реализации (CSS/код/имена
|
||||
функций) — только пользовательское поведение и персоны, как требует
|
||||
PROCESS.md §7.1.
|
||||
- Проверено, что раздел «Принятые технические предположения» стоит в конце
|
||||
документа (после раздела 9), как требует PROCESS.md §7 («записывается явным
|
||||
блоком в конце ТЗ»), и что все четыре односторонних технических решения,
|
||||
названные в r1-находке M2 (имя CSS-переменной, состав файлов, имена
|
||||
i18n-ключей, механика generation-guard/анимации), в явном виде перечислены.
|
||||
- Проверено, что расширенный абзац visual evidence в §8 перечисляет все пять
|
||||
контекстов чек-листа issue («Дополнительные критерии приёмки», пункт 4)
|
||||
отдельно: desktop light, desktop dark, bottom portrait, kiosk, mobile View
|
||||
panel — плюс отдельно диалог настроек light/dark desktop и narrow
|
||||
native/real HA.
|
||||
- `grep -n '§[0-9]\|Sections'` по всему файлу — все существующие
|
||||
перекрёстные ссылки (`§2–3`, `Sections4–8`, `§2`, `§7`, `§6`) продолжают
|
||||
указывать на прежние номерованные разделы 1–9; новые разделы намеренно не
|
||||
пронумерованы и не сдвинули нумерацию, поэтому ни одна ссылка не сломана.
|
||||
Это лучше, чем предложенный в r1-находке M1 вариант «со сдвигом
|
||||
нумерации» — автор выбрал более безопасный способ починки, не создав
|
||||
новый класс дефекта (битые ссылки на разделы).
|
||||
- Прогнан `node scripts/process-gate.mjs --range 8defee4c..8c0962f3` →
|
||||
«гейт пройден, предупреждений 0» (офлайн-часть; `--issues` не запускался —
|
||||
статус issue уже виден в метках: `S4-spec-review`, без `blocked`).
|
||||
- Проверены трейлеры коммита `8c0962f3`: `Issue: #505`, `User-Visible: no` —
|
||||
корректно, правка чисто документационная.
|
||||
- Проверен CI на точном материале ревью:
|
||||
`gh run view 34316874922` → `Проверка (CI)`, `headSha ==
|
||||
8c0962f36f2b93dd0c043806aa2e838d570fcd1c`, `status: completed`,
|
||||
`conclusion: success`. Детализация по джобам (`gh api
|
||||
.../commits/8c0962f3.../check-runs`): лёгкие джобы «Фронтенд: типы, юниты,
|
||||
мутанты, синхрон бандла», «Предполётные проверки: документация, провенанс,
|
||||
процесс», «Классификация изменённых файлов», «Мутанты по диффу (1–3/3)»,
|
||||
«Переиспользование: это дерево уже проверено» — все `success`; тяжёлые
|
||||
джобы (смоки, golden, perf, backend pytest, HACS/Hassfest) — `skipped`, что
|
||||
ожидаемо для чисто документационного диффа класса C. **Уточнение к вводным
|
||||
этого раунда**: там указано «Зелёного Validate на этом SHA нет — прогон не
|
||||
найден, не завершён либо не success» — это не подтвердилось, как и в r1 с
|
||||
тем же типом утверждения; прогон найден и зелёный именно на материале
|
||||
ревью. Дополнительно вручную дешёвые гейты не гонялись сверх
|
||||
`process-gate.mjs` — диапазон диффа ограничен `docs/**` (`git diff --stat
|
||||
origin/dev..8c0962f3` подтверждает, что `src/**`/`custom_components/**` не
|
||||
тронуты во всей ветке), поэтому `tsc`/`npm test`/`npm run build`/
|
||||
`check-docs.mjs` к предмету этого раунда не относятся, а к предмету всей
|
||||
ветки их уже покрыл зафиксированный зелёный CI-прогон на этом SHA.
|
||||
|
||||
## 3. Закрытие раунда r1
|
||||
|
||||
| Находка r1 | Чем закрыта | Где это видно |
|
||||
|---|---|---|
|
||||
| Medium — отсутствуют разделы «Сценарий» и «Что человек увидит до и после» (PROCESS.md §7.1) | Оба раздела добавлены первыми в документе, до прежнего «1. Problem, value and scope»; названы персоны admin/household member/guest-kiosk по канону SCOPE.md, одна фраза «что увидит» без терминов реализации | `docs/specs/505-summary-panel-design-parity.md:9-22` (в текущем файле на `8c0962f3`) |
|
||||
| Medium — отсутствует раздел «Принятые технические предположения» (PROCESS.md §7/§7.1) | Раздел добавлен в конец документа; перечислены все 4 пункта из находки: имя CSS-переменной real-HA диалога помечено как подлежащее проверке, состав файлов §7 назван планом реализации, имена i18n-ключей допущены к переименованию при сохранении семантики, механика lifecycle-анимации (CSS transitions/WAAPI, generation guards) явно оставлена на усмотрение реализации | `docs/specs/505-summary-panel-design-parity.md:271-291` |
|
||||
| Low — неполный список визуальных пар в §8 | Абзац переписан, все пять контекстов чек-листа issue названы отдельно поимённо (desktop light/dark, bottom portrait, kiosk, mobile View panel) плюс отдельно диалог настроек | `docs/specs/505-summary-panel-design-parity.md:233-243` |
|
||||
|
||||
Все три находки закрыты правкой того же файла без нового технического
|
||||
исследования, как и предполагал вердикт r1 («формат восстановим без нового
|
||||
анализа»). Новых дефектов формата правка не внесла — численность и ссылки
|
||||
разделов 1–9 не пострадали (см. §2 выше).
|
||||
|
||||
## 4. Унаследовано из r1
|
||||
|
||||
Принято без повторной проверки в этом раунде, основание — документ
|
||||
`docs/reviews/SPEC-REVIEW-505-r1.md` на SHA `8defee4ce1cb0f2794495c03173348c7a6c34e13`,
|
||||
поскольку дельта r1→r2 не затрагивает предмет этих пунктов:
|
||||
|
||||
- продуктовая рамка и соответствие `docs/SCOPE.md` (исключение #437 для
|
||||
read-only summary overlay), приоритет источников истины
|
||||
owner > контракты House Plan > прототип > демо;
|
||||
- технический анализ причин всех четырёх исходных дефектов, подтверждённый
|
||||
чтением кода `dev@abbca50c` (`renderPanel()` возвращает `nothing` без
|
||||
exit-анимации, отсутствие exit-keyframes, `min-width` на `.summary-editor`,
|
||||
несвязанный mobile-чекбокс, нерасширенный `Sizes on this screen`);
|
||||
- корректность механизма wide-диалога (`--hp-dialog-wide-width`,
|
||||
`hp-dialog.ts:163`) как технически реализуемого пути;
|
||||
- согласованность с `docs/USER-GUIDE.ru.md` (раздел «Сводная панель»),
|
||||
`docs/TOUCH-SUPPORT.md:48-56` (44×44 px, гарантированный View-контракт),
|
||||
`docs/CONFIG-COMPATIBILITY.md:100-132` (namespace version 1 не меняется,
|
||||
local size prefs вне серверного конфига);
|
||||
- целостность референс-архива `docs/design/505-summary-panel/reference/**` и
|
||||
совпадение SHA-256 между README задачи, README референса и телом issue;
|
||||
- обновление `docs/specs/README.md` (строка для #505 добавлена);
|
||||
- полнота и однозначность таблицы AC1–AC11, включая требование
|
||||
отрицательного свидетеля и mutation-gate для дорогих AC3/AC5;
|
||||
- отсутствие открытых продуктовых вопросов владельцу (текст ТЗ не выдаёт
|
||||
догадку за факт нигде, кроме явно помеченного «verify actual pinned HA
|
||||
frontend contract»).
|
||||
|
||||
Эти пункты дельта r2 не касается: ни один из трёх изменённых участков текста
|
||||
(два новых вводных раздела, абзац visual evidence, финальный блок
|
||||
предположений) не переопределяет и не сужает ни один из перечисленных
|
||||
пунктов.
|
||||
|
||||
## 5. Находки (r2)
|
||||
|
||||
Нет. Дельта полностью закрывает обе Medium- и одну Low-находку r1, не
|
||||
привнося нового дефекта содержания или формата.
|
||||
|
||||
## 6. Что проверено и корректно
|
||||
|
||||
- Все три находки r1 закрыты по существу (см. таблицу §3), а не
|
||||
переформулированы без изменения сути.
|
||||
- Терминология персон в новом разделе «Сценарий» — канонические термины
|
||||
`docs/SCOPE.md`, не изобретённые.
|
||||
- «Что человек увидит до и после» — одна фраза, без терминов реализации,
|
||||
как требует PROCESS.md §7.1.
|
||||
- «Принятые технические предположения» размещены в конце документа и явно
|
||||
разрешают ревьюеру их оспорить — соответствует формулировке PROCESS.md §7.
|
||||
- Правка не переименовала и не сдвинула номера существующих разделов —
|
||||
все внутренние перекрёстные ссылки (`§2–3`, `§6`, `§7`, `Sections4–8`)
|
||||
остались корректны.
|
||||
- Baseline (`dev@abbca50c`), таблица AC1–AC11 и весь технический контракт
|
||||
поведения (§2–7, §9) в дельте не менялись — не о чем спорить заново.
|
||||
- Коммит несёт корректные трейлеры (`Issue: #505`, `User-Visible: no` —
|
||||
верно для чисто документационной правки), `process-gate.mjs` проходит без
|
||||
предупреждений на диапазоне r1→r2.
|
||||
- CI зелёный именно на материале этого раунда (`8c0962f3`, run `34316874922`,
|
||||
`Проверка (CI)`), включая релевантные для класса C джобы (фронтенд
|
||||
типы/юниты/мутанты/синхрон бандла, предполётные документация/провенанс/
|
||||
процесс).
|
||||
- Диапазон всей ветки `dev..8c0962f3` подтверждён как класс C: только
|
||||
`docs/**`, продуктовый код не тронут.
|
||||
|
||||
## 7. Чего не проверял
|
||||
|
||||
- Полный повторный разбор разделов 1–9 и таблицы AC1–AC11 — не требуется,
|
||||
дельта их не касается (обоснование в §1 и §4 выше).
|
||||
- Пиксельное сравнение реализации с прототипом и тяжёлые браузерные гейты
|
||||
(`golden`, `smoke_*`, `performance_smoke`, `pytest tests_backend`) — как и
|
||||
в r1, не относится к этапу ТЗ; продуктовый код по-прежнему не существует
|
||||
и не менялся.
|
||||
- Содержимое архива `макет.zip` за пределами зафиксированного SHA-256 —
|
||||
не переисследовалось повторно, наследуется из r1.
|
||||
- Флаг `--issues` у `process-gate.mjs` — статус issue подтверждён напрямую
|
||||
через `gh issue view` (метка `S4-spec-review`, без `blocked`).
|
||||
|
||||
## 8. Вердикт
|
||||
|
||||
High: 0. Medium: 0. Обе Medium- и одна Low-находка r1 закрыты правкой того
|
||||
же документа, дельта не привнесла нового дефекта. Дельта локальна (один файл
|
||||
документации, 46/5 строк, без ребейза, без смены baseline, без смены
|
||||
контракта поведения) — полный переразбор не требуется и не проводился.
|
||||
|
||||
Вердикт: зелёный · заход r2 · блокирующих циклов 1/4 · High: 0 · Medium: 0 → в задаче
|
||||
|
||||
## Материал раунда
|
||||
|
||||
- Ветка: `issue/505-summary-panel-polish`
|
||||
- SHA материала: `8c0962f36f2b93dd0c043806aa2e838d570fcd1c`
|
||||
- Дерево материала: `2af4e1c1420a56d9914b793d60e8024fd3181f16`
|
||||
```
|
||||
git log --all --format='%H %T' | grep 2af4e1c1420a
|
||||
```
|
||||
- ТЗ `docs/specs/505-summary-panel-design-parity.md`, блоб `fed71b61cb26deae64fef8dc1a364d3401242d48`
|
||||
```
|
||||
git log --all --find-object=fed71b61cb26deae64fef8dc1a364d3401242d48 -- docs/specs/505-summary-panel-design-parity.md
|
||||
```
|
||||
- Предыдущий раунд: `docs/reviews/SPEC-REVIEW-505-r1.md`, SHA `8defee4ce1cb0f2794495c03173348c7a6c34e13`
|
||||
- Вердикт конвейера: `green` · High 0 · Medium 0
|
||||
|
||||
---
|
||||
|
||||
<!-- material-anchors: сгенерировано конвейером (#414) -->
|
||||
|
||||
## Материал раунда
|
||||
|
||||
- Ветка: `issue/505-summary-panel-polish`, коммит `8c0962f36f2b` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет.
|
||||
- Дерево материала: `2af4e1c1420a56d9914b793d60e8024fd3181f16`
|
||||
```
|
||||
git log --all --format='%H %T' | grep 2af4e1c1420a
|
||||
```
|
||||
- ТЗ `docs/specs/505-summary-panel-design-parity.md`, блоб `fed71b61cb26deae64fef8dc1a364d3401242d48`
|
||||
```
|
||||
git log --all --find-object=fed71b61cb26deae64fef8dc1a364d3401242d48 -- docs/specs/505-summary-panel-design-parity.md
|
||||
```
|
||||
- Вердикт конвейера: `green` · High 0
|
||||
Reference in New Issue
Block a user