docs: review document for #561

Issue: #561
User-Visible: no
This commit is contained in:
claude[bot]
2026-09-12 22:53:12 +00:00
parent d527ff8dcc
commit d6b33b115b
+158
View File
@@ -0,0 +1,158 @@
# SPEC-REVIEW-561-r2
## Скоуп
Issue #561 (`bug`, `P3`, `S4-spec-review`, полный трек). Этап — ревью ТЗ, второй
заход (r1 был жёлтым с единственной Medium-находкой M1). Предмет этого раунда —
**дельта тела issue между материалом r1 и текущим состоянием**, а не задача
целиком (PROCESS.md §2.10, issue #214).
ТЗ живёт в теле issue, раздел `## ТЗ` (#517); файл в `docs/specs/` не создаётся.
## Материал и дельта
Материал r1 (из блока «Материал раунда» документа `docs/reviews/SPEC-REVIEW-561-r1.md`,
коммит `d527ff8d`, уже в `dev`):
- Ветка/дерево: `dev` на `b26d9694025e`.
- Тело issue на момент r1: `sha256` `5c619c9775f834a6607d8623a303f1ba412d1f0cf9c4f4fa8b0e2fcf50cef47b`.
- Вердикт r1: жёлтый, High 0, Medium 1 (M1).
Тело issue в GitHub правится редактированием, а не коммитом, поэтому «SHA не
резолвится» здесь неприменимо — дельта взята напрямую через историю правок
контента (`userContentEdits` GraphQL issue #561): ровно одна правка тела после
вердикта r1, `editedAt: 2026-09-12T22:48:15Z` (вердикт r1 опубликован
`22:46:56Z`, правка тела после публикации). Правка, которую рецензировал r1,
сделана раньше, в `22:38:44Z`, и совпадает по содержанию с материалом,
описанным в документе r1 (тот же текст `## ТЗ`, без слов touch/kiosk).
Дословный дифф (нормализация CRLF→LF, иных отличий нет):
```diff
2. Полная перезагрузка страницы, возврат на тот же route, технический remount и адаптивный переход между разным числом Masonry-колонок без редактирования dashboard сохраняют настройку именно своей карточки.
+
+**Touch/kiosk:** в основном поддерживаемом kiosk-сценарии поворот сенсорного устройства и смена orientation могут пересобрать Masonry и изменить число колонок, но не переносят local show/scale между карточками. Существующие touch-жесты, hit targets и kiosk-controls не меняются. Полный remount после ротации доказывает AC1, живой responsive reflow/remount — AC3.
3. Редактирование порядка или структуры dashboard может изменить логическую identity. ...
```
Ничего больше не изменилось: разделы 1, 3–8, все AC1–AC8, контракт identity,
риски, откат, принятые предположения — байт в байт как на r1. Дельта локальна
(одна вставленная во 2-й раздел двухпредложная ремарка), не ребейз, не смена
контракта поведения, не новая подсистема — полный повторный разбор не требуется
(§2.10).
## Как проверялось
- Получено тело issue #561 (`gh issue view 561 --json body,labels,comments`) и
сверено через `gh api graphql` (`userContentEdits`) с версией, которую видел
r1, — построчный диф выше.
- Прочитан документ r1 (`docs/reviews/SPEC-REVIEW-561-r1.md`, коммит `d527ff8d`)
целиком, включая находку M1 и блок «Материал раунда».
- Проверено соответствие добавленного текста `docs/TOUCH-SUPPORT.md`: строка 21
(`Kiosk | Supported | Primary supported environment`), строка 44 (сводная
панель обязана «remain usable after backgrounding, resize, orientation
changes and warm remount»), строки 48–49 (сводная панель — поддерживаемая
View-поверхность). Утверждение ТЗ «полный remount после ротации доказывает
AC1, живой reflow/remount — AC3» согласуется буквально с формулировками AC1
(«full reload и rebalancing») и AC3 («живой reflow и remount») из раздела 4
ТЗ, которые дельта не трогала.
- Проверено, что вставка не задевает нумерацию/содержание AC1–AC8 (раздел 4
ТЗ), контракт identity (раздел 3) и решение Q1 (раздел 2 п.5) — они лежат вне
диффа, дословно совпадают с материалом r1.
- Проверено состояние репозитория: код не тронут (`git log --all --oneline |
grep 561` — только доc-коммит `d527ff8d` с документом r1; ветки
`issue/561-*` нет), что соответствует стадии `S4-spec-review` и прямому
указанию в теле issue «код пока не менять».
- Кода/гейтов не запускал — на этапе ревью ТЗ реализации ещё нет, проверять
нечего (как и в r1).
## Закрытие раунда r1
| Находка | Чем закрыта | Где это видно |
|---|---|---|
| **M1** — ТЗ не называет touch/kiosk-влияние (обязательный блокирующий пункт DoR §2.5) | В раздел 2 ТЗ после п.2 вставлено явное `**Touch/kiosk:** …`, называющее сценарий (поворот устройства, пересборка колонок), гарантию (`show/scale` не переезжают между карточками), что не меняется (жесты/hit targets/kiosk-controls), и АС-доказательства (AC1 — full remount, AC3 — живой reflow) | Тело issue #561, раздел `## ТЗ` → `### 2. Пользовательский контракт`, абзац `Touch/kiosk:` между пп. 2 и 3; правка `userContentEdits` `editedAt=2026-09-12T22:48:15Z` |
| L1 (низкая, снята ещё в r1 с записью) | Не тронуто в этом раунде — решение r1 остаётся в силе, повторно не проверялось | `docs/reviews/SPEC-REVIEW-561-r1.md`, раздел «Low» |
## Унаследовано из r1
Без повторной проверки в этом раунде принято всё, чего дельта не касается —
документ `docs/reviews/SPEC-REVIEW-561-r1.md`, материал `dev@b26d9694025e`,
тело issue `sha256=5c619c97…ef47b`:
- Риск подтверждён по реальным ссылкам на исходники HA `20260729.7`
(`hui-view.ts`, `hui-masonry-view.ts`) — не голословное заявление.
- Контракт раздела 3 (canonical Masonry identity: composed ancestor chain,
`masonry.cards`, versioned slot, nested suffix, fail-closed unresolved,
fallback для не-Masonry hosts) прослежен к существующему
`src/summary-panel-identity.ts`, который он заменяет.
- Q1 решён предсказуемо и зафиксирован в разделе 2 п.5 (нет миграции старых
DOM-path ключей, обычные defaults + legacy scale seed).
- Все AC1–AC8 проверяемы, каждый называет способ доказательства; AC7 закладывает
именованный mutation witness уже на этапе спецификации.
- Скоуп не размыт: явно исключены новый `card_id`, серверная миграция, перенос
после ручного reorder, расширение на Sections/unknown wrappers.
- Откат и release-артефакты названы (раздел 7, раздел 5); i18n и серверная
совместимость явно «без изменений» (раздел 6), включая частную проверку r1,
что `summary.storage_unavailable` можно переиспользовать для AC4 без нового
ключа.
- Полный трек обоснован явно названным нарушенным критерием `small`
(сложность/риск 5/10 в комментарии аналитики).
- L1 (оформление порядка подразделов) снята с записью в r1, не переоткрывается.
## Находки
Нет. High: 0, Medium: 0 (M1 закрыта дельтой, ничего нового не привнесено), Low:
0 новых сверх уже снятой в r1 L1.
## Что проверено и корректно
- Дельта — ровно одна вставка, точно закрывающая M1 по существу и по форме,
которую просил r1 («одно-два предложения `Touch/kiosk:` с указанием AC»).
- Формулировка не противоречит `docs/TOUCH-SUPPORT.md` и не вводит новый,
ранее не описанный touch-контракт — она лишь называет словами то, что уже
проектировали AC1/AC3.
- Ни один AC, ни контракт раздела 3, ни решение Q1 дельтой не задеты — их
повторная проверка не требовалась по правилу «только то, что задевает
дельта» (§2.10 п.4), и я это подтвердил построчным диффом, а не поверил на
слово.
- Код продукта не менялся — соответствует стадии и прямому указанию issue.
- DoR-чек-лист (§2.5) теперь закрыт полностью: ТЗ есть, AC1–AC8 пронумерованы
с доказательствами, файлы/модули названы, i18n «без изменений» обосновано,
compatibility/Q1 решены, touch/kiosk теперь назван явно, откат и
release-артефакты названы, открытых продуктовых вопросов нет.
## Чего не проверял
- Не запускал `typecheck`/`test`/`build`/mutation-gate — кода нет, ревью ТЗ
этого не требует (как и в r1).
- Не проверял заново #493/#552 на дублирование — унаследовано из r1 без
повторной сверки, так как дельта их не касается.
- Не проверял живое поведение `hui-masonry-view` в реальном HA — унаследовано
из r1, который сверился с исходниками `20260729.7` по ссылкам с номерами
строк.
- Косметический эффект вставки на markdown-нумерацию (пункт 2 и «3.» после
невставленного в список абзаца формируют технически два `<ol>`, GitHub
рендерит второй с `start="3"`, визуально номерация не рвётся) — не
находка: чисто визуальный вопрос без влияния на смысл или на AC, тот же
класс, что снятая в r1 L1.
## Вывод
Единственная блокировавшая переход находка r1 (M1) закрыта точной, локальной
правкой тела issue; ничего другого не изменилось и не сломалось. Открытых
находок нет. Вердикт — зелёный, бюджет циклов не тратится (§4, #227): ревью
ТЗ выполнено, `## ТЗ` готово к переходу в `S5-ready`.
---
<!-- material-anchors: сгенерировано конвейером (#414) -->
## Материал раунда
- Ветка: `dev`, коммит `d527ff8dcc8b` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет.
- Дерево материала: `c1255d61460377be66b85a7b06252621b0149854`
```
git log --all --format='%H %T' | grep c1255d614603
```
- Тело issue: `9543698e33142ca2ceb66d906e271f5158a010ed8bfb00e873019519e5743970`
- Вердикт конвейера: `green` · High 0