From d6b33b115b4eb91d8d3e674b60b4dfe10199f91d Mon Sep 17 00:00:00 2001 From: "claude[bot]" <209825114+claude[bot]@users.noreply.github.com> Date: Sat, 12 Sep 2026 22:53:12 +0000 Subject: [PATCH] docs: review document for #561 Issue: #561 User-Visible: no --- docs/reviews/SPEC-REVIEW-561-r2.md | 158 +++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 docs/reviews/SPEC-REVIEW-561-r2.md diff --git a/docs/reviews/SPEC-REVIEW-561-r2.md b/docs/reviews/SPEC-REVIEW-561-r2.md new file mode 100644 index 00000000..e685ac48 --- /dev/null +++ b/docs/reviews/SPEC-REVIEW-561-r2.md @@ -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.» после + невставленного в список абзаца формируют технически два `
    `, GitHub + рендерит второй с `start="3"`, визуально номерация не рвётся) — не + находка: чисто визуальный вопрос без влияния на смысл или на AC, тот же + класс, что снятая в r1 L1. + +## Вывод + +Единственная блокировавшая переход находка r1 (M1) закрыта точной, локальной +правкой тела issue; ничего другого не изменилось и не сломалось. Открытых +находок нет. Вердикт — зелёный, бюджет циклов не тратится (§4, #227): ревью +ТЗ выполнено, `## ТЗ` готово к переходу в `S5-ready`. + +--- + + + +## Материал раунда + +- Ветка: `dev`, коммит `d527ff8dcc8b` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет. +- Дерево материала: `c1255d61460377be66b85a7b06252621b0149854` + ``` + git log --all --format='%H %T' | grep c1255d614603 + ``` +- Тело issue: `9543698e33142ca2ceb66d906e271f5158a010ed8bfb00e873019519e5743970` +- Вердикт конвейера: `green` · High 0