Files
houseplan-card/docs/reviews/SPEC-REVIEW-561-r2.md
T
2026-09-12 22:53:12 +00:00

13 KiB
Raw Blame History

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, иных отличий нет):

 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.


Материал раунда

  • Ветка: dev, коммит d527ff8dcc8b — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет.
  • Дерево материала: c1255d61460377be66b85a7b06252621b0149854
    git log --all --format='%H %T' | grep c1255d614603
    
  • Тело issue: 9543698e33142ca2ceb66d906e271f5158a010ed8bfb00e873019519e5743970
  • Вердикт конвейера: green · High 0