13 KiB
CODE-REVIEW-505-r2
Этап: code-review · заход r2 · блокирующих циклов израсходовано 0 из 4
Материал: 7b9af60541c017205e490f21b6787fe8159b1a2d (рабочая копия уже на нём)
Прошлый раунд: CODE-REVIEW-505-r1, материал d32dfc9be107dce72a2fa465413633caf717d1f5, вердикт зелёный (High 0, Medium 0, Low 1), слит в dev как f03a9e5d.
Скоуп раунда
r1 был полностью зелёным с единственной находкой Low L1: неиспользуемый ключ
локализации summary.block_visible остался во всех четырёх словарях
(src/summary-panel-i18n.ts) после замены чекбокса видимости блока на
eye/eye-off кнопку с новыми ключами hide_block/show_block. Автор вернул
задачу в S6, исправил находку одним узким коммитом и снова отправил на
S7-code-review. Это не рестарт расширенного скоупа (#505 в целом — три
поверхности по дизайнерскому прототипу), а точечный follow-up к принятому и
уже слитому в dev материалу.
Дельта раунда — ровно f03a9e5d..7b9af605 (совпадает с origin/dev..HEAD,
один коммит):
docs/design/505-summary-panel/ACCEPTANCE.md | 16 ++++++++++++++
src/summary-panel-i18n.ts | 4 ----
+ пересборка custom_components/houseplan/frontend/** и dist/** (класс D)
Дельта локальна: одна строка убрана из четырёх словарей одного файла плюс плановая пересборка бандла и запись в ACCEPTANCE.md. Рендер, CSS, события, модель, shared-схема, geometry — не задеты. Разбор сужен до делты; AC1–AC11 и весь остальной код r1 не проверялись заново (см. «Унаследовано из r1»).
Закрытие раунда r1
| Находка r1 | Чем закрыта | Где это видно |
|---|---|---|
Low L1: неиспользуемый ключ summary.block_visible во всех 4 словарях (src/summary-panel-i18n.ts:55,124,193,262 в материале r1) |
Ключ и его перевод ("Visible"/"Показывать"/"Sichtbar"/"Visible") удалены из всех четырёх словарей (en/ru/de/fr) одним коммитом |
git diff f03a9e5d..7b9af605 -- src/summary-panel-i18n.ts — 4 удалённые строки, по одной на локаль; лично проверено rg -n "block_visible" src demo test scripts custom_components → 0 совпадений (только исторические упоминания в docs/design/505-summary-panel/ACCEPTANCE.md и docs/reviews/CODE-REVIEW-505-r1.md) |
Находка закрыта полностью и корректно: удаление симметрично по всем четырём
локалям (не оставляет расхождение набора ключей между словарями), сама
запись dictionaries — плейн-объект без строгого TS-интерфейса, требующего
идентичного набора ключей (keyof typeof dictionaries используется только
для выбора локали, не для проверки состава), поэтому симметричное удаление
не могло вызвать несоответствие типов. tsc --noEmit лично прогнан на
материале раунда — чисто.
Унаследовано из r1
Без повторной проверки в этом раунде приняты (документ CODE-REVIEW-505-r1,
SHA d32dfc9be107dce72a2fa465413633caf717d1f5, слито в dev как f03a9e5d):
- AC1–AC11 целиком: split-control в шапке/kiosk, панель по макету
(
.summary-scroll/.summary-block/карточки/разделители), диалог настроек 920px на подлинном pinned HA-компоненте,SummaryPanelPresentationlifecycle (генерации, reversals, reduced motion, hard boundaries), удалениеsummary.sizes_title/size-controls только из этого диалога, mobile-чекбокс связан с local master-toggle, документация (оба CHANGELOG, USER-GUIDE, ARCHITECTURE, STATUS) и трейлеры семи коммитов исходного скоупа. - Все шесть mutation-gate witness'ов (
summary-hide-unmounts-before-animation,summary-dialog-loses-wide-shell,summary-mobile-ignores-local-off,summary-animation-stale-completion-unguarded,summary-animation-reset-keeps-presentation,summary-animation-ignores-reduced-motion) — лично подтверждены в r1, дельта r2 не касается кода, который они охраняют. - Визуальная приёмка пяти контекстов (desktop light/dark, bottom, kiosk, mobile) и настоящего HA-диалога (920px, mobile-fullscreen 390px) — лично подтверждена в r1 по идентичному render/CSS/событийному коду; r2 не меняет ни одного визуального артефакта (сам автор прямо не заявляет новую пересъёмку, и это корректно: изменение — только мёртвая строка в JS-словаре, не участвующая в рендере).
- Независимая проверка риска AC5 (
--ha-dialog-width-md: 920pxв подлинном pinned HA-компоненте) — не переисследовалась, дельта её не касается.
Основание для наследования: дельта отсутствует в перечисленных областях
(git diff f03a9e5d..7b9af605 не содержит правок вне src/summary-panel-i18n.ts
и docs/design/505-summary-panel/ACCEPTANCE.md, плюс класс D пересборка).
Как проверялось (r2)
Зелёного Validate на материале раунда (7b9af605) на момент ревью не
найдено — гейты прогнаны лично на рабочей копии, уже стоящей на этом SHA:
npx tsc --noEmit— чисто, без вывода.npm test—2400 pass / 0 fail / 1 skippedиз 2401 (тот же skip, что и на материале r1; не новый).npm run build→git status --porcelainпосле — пусто: собранныйdist/байт-в-байт совпал с закоммиченным, регенерация детерминирована.npm run bundle:sync— пересобрал и сверил все три копии дерева (dist,custom_components/houseplan/frontend,demo/srv/assets);git status --porcelainпосле — пусто.node scripts/process-gate.mjs --range f03a9e5d..7b9af605— «гейт пройден, предупреждений 0» (проверка статуса issue пропущена намеренно, флаг--issuesне передавался — не относится к трейлерам/дельте).- Трейлеры коммита
7b9af605—Issue: #505,User-Visible: no, лично прочитаныgit show 7b9af605.User-Visible: noкорректен: ключsummary.block_visibleуже был мёртвым (не рендерился) на момент r1 — замена на eye/eye-off кнопки произошла в исходном скоупе, до этого follow-up; удаление строки не меняет ни одного видимого текста. Оба CHANGELOG закономерно не тронуты в этом коммите. node demo/smoke_summary_panel_polish.mjsна свежесобранном бандле — PASS (лично прогнан, не только со слов автора).node scripts/check-docs.mjs --screenshots=warn— предупреждение о устаревшем отпечатке скриншотов (ожидаемо: отпечаток покрывает весьsrc/**и был устаревшим уже на материале r1 из-за исходного скоупа задачи; это предрелизный, а не ревью-гейт, см. AGENTS.md). Строгий режим (node scripts/check-docs.mjsбез флага) даётERRORпо той же причине — ожидаемо на этой стадии, не новая находка этого раунда.node scripts/smoke-select.mjs --base f03a9e5d --head 7b9af605→ «НЕОПРЕДЕЛЁННОСТЬ» (0 символов проекта на изменённых строках — правки только в строковых литералах словаря, не в исполняемых символах). Инструмент не называет ни прямого совпадения, ни зарегистрированной связи. Решение: не прогонять широкую матрицу смоков — единственный затронутый смок по теме (smoke_summary_panel_polish) уже прогнан лично и зелёный; удаление доказуемо-мёртвого i18n-ключа (grep пуст по всему дереву) не имеет других поверхностей, которые способен затронуть широкий прогон.
Инварианты геометрии (npm run invariants), golden:verify, backend pytest,
полный набор 235 смоков и performance-профили не прогонялись: дельта не
трогает layout/marker.space/open_spans/толщину стен, рендер, стили,
backend или производительность — ни один пункт из списка обязательности этих
гейтов не задет диффом.
Находки
Нет.
Что не проверял
- Полный набор
demo/smoke_*.mjs(235 штук) — выборкаsmoke-select.mjsвернула «НЕОПРЕДЕЛЁННОСТЬ» без прямых/зарегистрированных связей, а сама дельта (удаление мёртвого литерала) не имеет других правдоподобных поверхностей отказа. Полный прогон остаётся предрелизной обязанностью. npm run golden:verify,python -m pytest tests_backend -q,npm run invariants, performance-профили — дельта не меняет рендер, геометрию, backend или производительность.- Повторная визуальная пересъёмка панели/диалога/прототипа — дельта не меняет ни один рендерящийся текст или стиль; наследуется из r1 (см. выше).
mutation-gate/check-inputs --coverage— не перезапускались; ни одного нового behavioural-контракта дельта не вводит, шесть witness'ов r1 её не касаются.
Вывод
Единственная находка предыдущего раунда (Low L1) закрыта точно так, как
описана: симметричное удаление мёртвого ключа из всех четырёх словарей,
без побочных изменений рендера/событий/модели. Дельта раунда узкая и
полностью укладывается в заявленный follow-up; расширенный скоуп задачи
(три поверхности по дизайнерскому прототипу) не пересматривался повторно —
он был принят r1 зелёным по коду, слитому в dev, и эта дельта его не
трогает. Новых находок нет.
Вердикт: зелёный · заход r2 · блокирующих циклов 0/4 · High: 0 · Medium: 0
Материал раунда
- Ветка:
issue/505-summary-panel-polish, коммит7b9af60541c0— ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет. - Дерево материала:
746fe338eb2465a2a26a96625b73c597a1247451git log --all --format='%H %T' | grep 746fe338eb24 - ТЗ
docs/specs/505-summary-panel-design-parity.md, блобfed71b61cb26deae64fef8dc1a364d3401242d48git log --all --find-object=fed71b61cb26deae64fef8dc1a364d3401242d48 -- docs/specs/505-summary-panel-design-parity.md - Вердикт конвейера:
green· High 0