Files
Claude 708ed850f3 docs(hygiene): снять чек-листы testing-notes и дизайн-материалы выпущенных задач (#681)
Волна 4 эпика #674.

docs/testing-notes/: восемь ручных чек-листов по поверхностям и индекс
удалены — ни одного отмеченного пункта, ручной фазы в PROCESS.md §2 нет.
Правило #650 (пустое совпадение --test-name-pattern) перенесено в
TESTING.md; пункты [manual] без автоматического свидетеля сведены в раздел
«Чего не проверяет автоматика» (реальный HA, сенсорное устройство, ресурсы
сервера, несколько клиентов, визуальная оценка, пользовательское
содержимое). В TESTING.md снят блок чек-листов v1.43–1.44 и приложения по
issue в разделе golden (#197/#249/#272/#275/#288/#261) — сцены объявлены в
demo/golden/matrix.mjs. Остался реестр браузерных гвардов #659
(mutation-browser-guards.md). test/testing-notes-index.test.mjs →
test/testing-doc.test.mjs: лимит 800 строк, правила #85, раздел ручных
проверок и живые ссылки TESTING.md; каталог testing-notes содержит только
реестр. Мутант testing-notes-index-drops-section (удалял строку индекса) →
testing-doc-drops-manual-section. golden-matrix: копия 67 id сцен #242/#250
в чек-листе снята, список и способ его измерения — в demo/golden/matrix.mjs.

docs/design/505-summary-panel удалён вместе с
demo/capture_summary_panel_505.mjs и маршрутом /reference/ фикстуры
диалога. docs/design/600-settings-dialogs: reference/, screenshots/,
pairs/, ARCHIVE-README, ISSUE-FORM, OPEN-POINTS удалены; SPEC,
IMPLEMENTATION-GUIDE, field-maps, ACCEPTANCE остаются; вывод
capture_design_pairs_600.mjs и verify_ha_form_shell_609.mjs --capture —
в artifacts/. docs/design: 68 файлов / 4,08 МБ → 13 / 0,70 МБ.
README-ha-dialog-505.md → README-ha-dialog.md (путь в release-review.yml);
demo/guard/README.md: запись гварда — в verify-guard.mjs, не в README.

docs/design/649-25d-stage6 не тронут — пункт после стабильного v1.78.0.

Issue: #681
User-Visible: no
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd
2026-09-27 21:27:57 +03:00

17 KiB
Raw Permalink Blame History

#600 · приёмка против референса

Запись закрытой задачи. Кадры pairs/, screenshots/ и прототип reference/, на которые она ссылается, удалены из дерева в #681 и лежат в истории git (git checkout f989fbfe -- docs/design/600-settings-dialogs); новая съёмка пишет в artifacts/design-pairs-600/.

AC1 в #600 требует не «эталоны изменились», а парное сравнение с референсом: для каждого диалога кадр продукта рядом с кадром референса, и каждое расхождение названо со ссылкой на пункт SPEC.md или узел reference/.

Этот документ — место, где такое сравнение живёт. Он пополняется по мере реализации, по одной таблице на диалог, и предъявляется на код-ревью вместе с кадрами.

Как снимать парные кадры

Кадры продукта — одной командой из корня репозитория, на собранном бандле:

npm run build && npm run bundle:sync
node demo/capture_design_pairs_600.mjs          # → artifacts/design-pairs-600/<диалог>-<тема>.png

Скрипт открывает четыре диалога в состояниях макетов (пространство с температурной заливкой и своим севером, общие настройки со статическим фоном, комната с эффективной температурной заливкой, привязанный светильник с ролью Always и фиксированным свечением), раскрывает скроллер на всю высоту и снимает поверхность 560 px в светлой и тёмной теме. Кадры референса — screenshots/ из архива дизайнера (светлая тема, 1120 px при devicePixelRatio 2).

Это диагностические кадры, а не golden-базы: они не принимаются golden:accept и не участвуют в golden:verify. Эталоны живут отдельно и закрываются AC10: принято 13 сцен (ed2af1b1) — одиннадцать из ТЗ (список AC10 унаследован от #598, где диалог комнаты не менялся) плюс две room-temperature-dialog-{desktop-en,mobile-ru}, потому что диалог комнаты в скоупе #600. PNG пережаты в палитру 256 цветов — для сравнения раскладки этого достаточно, а вес папки остаётся в полумегабайте.

#609: оболочка в настоящем Home Assistant

Парные кадры выше были сняты в нативной ветке hp-dialog. Для #609 отдельно проверена ветка настоящего ha-dialog из закреплённого home-assistant-frontend==20260729.7 (SHA-256 ba01782297e9506d3185f99a74d829f3811df322623848af21bcc0b8ea834c12):

npm run bundle:sync
node demo/verify_ha_form_shell_609.mjs --capture

Официальный компонент и его CSS не модифицируются; локальная фикстура не поднимает HA, не обращается к сети и падает при внешнем запросе, WebSocket или ошибке страницы. Измерения после завершения 200-миллисекундной анимации показа:

Режим Поверхность Проверенный результат
desktop 1600×1000 560×940 канва вокруг карточек, один скроллер .body HA, footer внутри
dark + text 200%, 1600×1000 560×940 root font 32 px, один HA-скроллер, footer внутри, канва не сливается с карточками
граница 480×800 480×800 fullscreen, радиус 0, горизонтального переполнения нет
mobile 390×844 390×844 fullscreen, радиус 0, footer внутри
низкое окно 1280×480 1280×480 штатный fullscreen HA сохранён

Снимки приёмки: pairs/room-ha-light.png, pairs/room-ha-dark-text-200.png и pairs/room-ha-mobile-light.png. Это диагностические доказательства, а не golden-базы; 13 нативных golden-сцен остаются неизменными. Быстрый обязательный свидетель тех же публичных CSS-контрактов — demo/smoke_ha_form_shell_parity.mjs, а перечень пяти потребителей оболочки закреплён в test/form-shell-consumers.test.mjs.

Статус по диалогам

Диалог Серия Референс Продукт (светлая / тёмная) Расхождения названы Готово
Space settings 1 screenshots/space-settings-2026-09-18.png pairs/space-light.png / pairs/space-dark.png ниже да
General settings 2 screenshots/general-settings-2026-09-18.png pairs/general-light.png / pairs/general-dark.png ниже да
Room settings 3 screenshots/room-settings-2026-09-18.png pairs/room-light.png / pairs/room-dark.png ниже да
Device on the plan 4 screenshots/device-on-the-plan-2026-09-18.png pairs/device-light.png / pairs/device-dark.png ниже да

Расхождения с референсом, по диалогам

Каждая строка — что видно на кадре продукта иначе, чем на кадре референса, со ссылкой на пункт SPEC.md или узел reference/, и чем это закрыто.

Space settings (§4)

Что Референс Продукт Основание
Образец карточки комнаты убран (§4.2) внутри карточки Room cards на тинте решение владельца Q2
Поле цвета input[type=color] (§3.2) плашка вокруг hp-color-opacity решение владельца Q5
Тексты подписей Space name, Floor plan, Appearance, Room cards, Sun & light… те же (переименования Q6) §4.1, решение владельца Q6
Подписи сегмента заливки Custom · Zigbee · Lights · Temperature те же — короткие ключи fill.seg_* ленивого словаря, общие с комнатой (r1 M1: полные fill.* в RU переносились посреди слова) §4.2 reference/app.js fillOptions
Копия / удаление Copy и Delete слева в футере то же §4.1 «Футер»

General settings (§5)

Что Референс Продукт Основание
Zigbee links один заголовок, тумблер, callout то же: блок hp-zigbee-topology-settings в режиме embedded без своего заголовка §5.1, дефект 1 из #600
Плитки цвета 3 в ряд, hex, число прозрачности то же; свотч — trigger прежнего пикера Q5
Компас 44 px справа от поля севера то же, с сохранённым перетаскиванием стрелки §3.1 «Компас»; прежний ввод с свидетелем smoke_sun

Room settings (§6)

Что Референс Продукт Основание
Образец карточки убран (§6.1 «Font sizes») под подсказкой размеров, на тинте решение владельца Q2
«?» у Basics у поля Home Assistant area у поля Home Assistant area (перенесён с заголовка карточки) §6.1
Подписи сегмента заливки None · Zigbee · Lights · Temperature · Custom, по одной строке на пункт те же — короткие ключи fill.seg_* (общие с пространством). Ревью r1 M1: «Temperature» рвалось посреди слова в пяти равных колонках — колонка сегмента больше не сжимается ниже самого длинного слова, слова переносятся только по пробелам, не поместившийся сегмент переносится на вторую строку целыми кнопками; свидетель — smoke_dialog_segments_i18n (четыре диалога × en/ru/de/fr) §6.1, §3.1 «Сегмент»
Подписи источников Temperature / Humidity Temperature source / Humidity source (прежние ключи) текст, не раскладка
Поле цвета «Свой цвет» input[type=color] плашка вокруг hp-color-opacity Q5
Кнопка выбора датчика в потоке, панель с поиском то же (sourcePicker набора) §3.1 «Кнопка выбора источника»

Device on the plan (§7)

Что Референс Продукт Основание
Подписи сегмента привязки Virtual device · Pick from the HA list Virtual device (no binding) · Pick from the HA list прежний ключ marker.virtual_option; текст, не раскладка
«Show entities» в панели выбора рядом с поиском то же решение владельца Q8
Ask for confirmation скрыта при Do nothing показана только при toggle / run Q8; прежнее условие
Display preview упрощённый макет: сцена и таблица фактов hp-device-preview целиком со своим заголовком «Display preview · Now» и переключателем деталей решение владельца Q3, §3.1 «Превью маркера»
Additional actions строка-тумблер «This is a presence radar» подзаголовок и кнопка «Объявить радаром» — прежнее действие радара; секции радара и пылесоса внутри диалога рисуются своими модулями без изменений §7.2: ветки вне прототипа теми же примитивами; внутренняя разметка радара — вне скоупа #600
Иконка поле с превью, Clear, Pin в подсказке то же; в HA — ha-icon-picker вместо текстового поля §7.1
Value badge тумблер, Value, Position сегментом то же; предупреждения бейджа — заметки и callout'ы §7.1

AC8: девять прямых дефектов выпущенного — свидетель на каждый

№ Дефект (тело issue) Чем закрыт Свидетель
1 дублированный заголовок Zigbee links карточка рисует заголовок и «?», hp-zigbee-topology-settings в режиме embedded своего не рисует smoke_general_settings_form → zigbeeHeadingOnce; мутант topology-embedded-draws-its-own-heading
2 «Fill color» дважды в строке заливки пространства плашка цвета с одной подписью поля (colorRow + colorField, у пикера hide-label) smoke_space_settings_form → hexIsPrinted, noNativeColorInputs; noLegacyMarkup
3 семь rhint-абзацев в четырёх диалогах пояснения — под «?» (_help/shelp), сообщения о состоянии — callout'ы (К5) noLegacyMarkup в четырёх фокусных смоках (класс .rhint отсутствует); test/i18n-dead-keys; мутант state-callout-hidden-under-help
4 карточка внутри карточки (fieldset в Light and glow, Value badge) плоские блоки .hpf-block с подзаголовком smoke_device_settings_form → noLegacyMarkup (fieldset, .markerlightgroup), badgeBlock, neverDisablesGlowBlock
5 поповер «?» обрезается границей диалога комнаты подсказка живёт в top layer (Popover API) либо в портале .overlay-portal вне поверхности диалога; тело формы без своего скроллера — резать нечем smoke_dialog_help_clipping: короткое окно, «?» нижней карточки комнаты, подсказка выходит за край скроллера и остаётся hit-test'ируемой во всех точках; четыре ветки — нативный <dialog> и ha-dialog × Popover и fallback. Ветка ha-dialog — заглушка с ловушками настоящей mwc-поверхности (transform + overflow: hidden + свой скроллер); настоящий ha-dialog (#505, загрузка колеса HA-frontend) — отдельная диагностическая приёмка владельца, demo/capture_summary_panel_505.mjs как образец
6 белый инпут на тёмной теме у Glow radius поле набора .hpf-unit на токенах темы pairs/device-dark.png; smoke_device_settings_form
7 два скролла (тело формы и оболочка) скроллер один — .content в hp-dialog; .body без max-height/overflow фокусные смоки → singleScroller / bodyHasNoOwnScroller
8 пустое пространство внизу .body без max-height и лишнего padding-bottom те же; кадры pairs/
9 «Загружаем редактор…» editor.loading → «Загрузка…» / «Loading…» src/i18n/*.json

Принятые адаптации

Расхождения, которые не являются дефектом, потому что продиктованы контрактами House Plan или решением владельца. Заполняется по ходу работы; каждая строка — с доводом, а не «так вышло».

Место Референс Продукт Почему
Образцы карточки комнаты убраны (SPEC.md §4.2, §6.1) сохранены, встроены в карточку решение владельца Q2: слайдер размера без образца — подбор вслепую
Поле цвета нативный input[type=color] (SPEC.md §3.2) прежний hp-color-opacity, новая только раскладка решение владельца Q5; nativeColors() === 0 — контракт со свидетелем smoke_color_picker_consumers
Цвета фиксированные hex (#4a9ec6, #f6f6f6, …) переменные темы HA SPEC.md §2 «допустимые адаптации»; тёмная тема обязательна
Шапка круглая кнопка × слева, заголовок, бейдж справа прежняя шапка hp-dialog (× справа) с бейджем в слоте заголовка SPEC.md §3 «Шапка»: «существующая шапка hp-dialog; бейдж добавляется»
Тумблеры input[type=checkbox][role=switch] с нарисованной дорожкой нативный чекбокс, нарисованный CSS набора; ha-switch не используется К7: один вид в HA, на стенде и в golden; smoke_ha_controls
Радар и пылесос внутри диалога устройства нет в прототипе прежняя разметка секций (radar-section.ts, _renderVacSection) SPEC.md §7.2: ветки вне прототипа; их внутренняя раскладка — отдельная задача
Высота строки подписи 22 px, «?» 22 px 32 px — по высоте кнопки hp-help подписи с «?» и без стоят на одной линии в сетке из двух полей