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

4.1 KiB
Raw Permalink Blame History

Offline authentic HA dialog fixture (#505, #607, #609)

demo/helpers/ha-dialog-fixture.mjs serves the synthetic demo together with the official, pinned Home Assistant ha-dialog so a diagnostic can exercise the real component. It is not a smoke_* entry, a golden-baseline producer, or a Home Assistant server, and it never connects to a real HA instance. It was built for the #505 summary-panel parity work (505-summary-panel-design-parity.md); that one-off capture script and its designer prototype were removed by #681 and remain in git history. Two diagnostics use the fixture today.

#607 verifies the real HA close button:

npm run bundle:sync
node demo/verify_ha_dialog_discard_recovery.mjs

That diagnostic opens Device, Room, Space and General settings in turn. For each form it edits a field, presses HA's own close button, chooses Continue, proves that the same modal and draft are interactive again, then covers Discard and a clean close. It also fails on duplicate hp-close events, external requests, WebSockets or browser errors. The ordinary native-fallback contract remains in demo/smoke_dialog_modal_recovery.mjs.

Issue #609 uses that same unmodified pinned ha-dialog to verify the shared settings-form shell rather than the close lifecycle:

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

It opens the real Room settings form and checks the settled WebAwesome surface: 560 px desktop width, the 940 px/viewport height cap, zero duplicate HA body padding, one HA-owned scroller, a distinct form canvas, footer containment and edge-to-edge layouts at 480×800 and 390×844. It also keeps HA's own fullscreen behaviour for a 1280×480 viewport. --capture writes the diagnostic images into the ignored artifacts/ha-form-shell-609/; without it the command is read-only. The authentic diagnostic explicitly applies the light palette, then repeats desktop geometry in the dark palette with a 32 px root font and proves that canvas contrast, the single HA scroller and the footer survive. The fast Validate witness is demo/smoke_ha_form_shell_parity.mjs; neither diagnostic is a golden producer.

The first explicit run downloads the official 124,294,469-byte home-assistant-frontend==20260729.7 wheel from the exact allowlisted PyPI file URL; version, size and SHA-256 are pinned in ha-dialog-assets.mjs, checked before extraction, and checked against tests_backend/requirements.txt. The wheel is not installed. Only allowlisted modern JS/static assets are extracted to the OS temporary cache. The deterministic cache manifest has its own pinned hash; existing extracted bytes are then checked against its per-file hashes each run, so edited cache metadata is not trusted. After corruption, remove that temporary cache directory; the tool does not delete existing data.

To reuse an already downloaded official wheel, point HP_HA_DIALOG_WHEEL at it. There are no author-machine paths in the helper; cache contents and screenshots are never committed.

Authenticity and safety boundary

The official app.d53ce8172fc8c85d.js is served with one explicit runtime instrumentation: its final o(91535); becomes window.__ha505Require=o;o(91535);, exposing its otherwise private module loader. The downloaded wheel and the ha-dialog, WebAwesome, Lit and other component factories/styles remain unmodified. Numbered official ESM chunks register their original factories with that loader; there is no dialog stub. This is a genuine-component diagnostic, not a complete production HA boot.

No core.* entry, authentication root or HA server is loaded. The server binds only 127.0.0.1 on an ephemeral port. A restrictive CSP, browser request allowlist, blocked service workers and throwing WebSocket constructor prohibit external/HA requests; any attempted external request, WebSocket or page error fails the run. The synthetic demo HTML is adapted only in its served response to await the authentic component bootstrap and avoid duplicate icon/card tag registration. No production HA configuration, devices or services are touched.