diff --git a/demo/golden/README.md b/demo/golden/README.md index b7ace6f4..31ae2ef9 100644 --- a/demo/golden/README.md +++ b/demo/golden/README.md @@ -40,10 +40,9 @@ npm run golden:verify ``` Never accept images merely to make CI green. A matrix/framing change increments -`GOLDEN_MATRIX_VERSION`; a normal rendering fix does not. The first reviewed -baseline set is intentionally deferred to the next pre-release gate, because -the owner's process forbids running builds/tests during ordinary local edits. -Use the `golden-images` artifact produced by the Linux CI job as the canonical -review set: desktop font rasterisation can differ from the CI environment even -with the same pinned Chromium. Pass its unpacked root via `--from=...` when -accepting it locally. +`GOLDEN_MATRIX_VERSION`; a normal rendering fix does not. The first canonical +Linux baseline was reviewed and accepted during the v1.60.3-beta.1 gate. +Future updates must still use the `golden-images` artifact produced by the Linux +CI job as the review set: desktop font rasterisation can differ from the CI +environment even with the same pinned Chromium. Pass its unpacked root via +`--from=...` when accepting it locally. diff --git a/demo/golden/baselines/decor-color-popover-mobile-ru.png b/demo/golden/baselines/decor-color-popover-mobile-ru.png new file mode 100644 index 00000000..11db8f0c Binary files /dev/null and b/demo/golden/baselines/decor-color-popover-mobile-ru.png differ diff --git a/demo/golden/baselines/device-dialog-desktop-en.png b/demo/golden/baselines/device-dialog-desktop-en.png new file mode 100644 index 00000000..80279769 Binary files /dev/null and b/demo/golden/baselines/device-dialog-desktop-en.png differ diff --git a/demo/golden/baselines/device-dialog-mobile-ru.png b/demo/golden/baselines/device-dialog-mobile-ru.png new file mode 100644 index 00000000..121651b4 Binary files /dev/null and b/demo/golden/baselines/device-dialog-mobile-ru.png differ diff --git a/demo/golden/baselines/geometry-decor-editor-dark.png b/demo/golden/baselines/geometry-decor-editor-dark.png new file mode 100644 index 00000000..bcad926c Binary files /dev/null and b/demo/golden/baselines/geometry-decor-editor-dark.png differ diff --git a/demo/golden/baselines/geometry-devices-editor-dark.png b/demo/golden/baselines/geometry-devices-editor-dark.png new file mode 100644 index 00000000..20bb9c05 Binary files /dev/null and b/demo/golden/baselines/geometry-devices-editor-dark.png differ diff --git a/demo/golden/baselines/geometry-diagonal-45-opening-dark.png b/demo/golden/baselines/geometry-diagonal-45-opening-dark.png new file mode 100644 index 00000000..9222487b Binary files /dev/null and b/demo/golden/baselines/geometry-diagonal-45-opening-dark.png differ diff --git a/demo/golden/baselines/geometry-plan-editor-dark.png b/demo/golden/baselines/geometry-plan-editor-dark.png new file mode 100644 index 00000000..c8266c70 Binary files /dev/null and b/demo/golden/baselines/geometry-plan-editor-dark.png differ diff --git a/demo/golden/baselines/geometry-view-dark-fit.png b/demo/golden/baselines/geometry-view-dark-fit.png new file mode 100644 index 00000000..9222487b Binary files /dev/null and b/demo/golden/baselines/geometry-view-dark-fit.png differ diff --git a/demo/golden/baselines/geometry-view-light-fit.png b/demo/golden/baselines/geometry-view-light-fit.png new file mode 100644 index 00000000..a4de78e7 Binary files /dev/null and b/demo/golden/baselines/geometry-view-light-fit.png differ diff --git a/demo/golden/baselines/hover-nested-room-dark.png b/demo/golden/baselines/hover-nested-room-dark.png new file mode 100644 index 00000000..9c74fe29 Binary files /dev/null and b/demo/golden/baselines/hover-nested-room-dark.png differ diff --git a/demo/golden/baselines/hover-over-glow-dark.png b/demo/golden/baselines/hover-over-glow-dark.png new file mode 100644 index 00000000..31a82f9f Binary files /dev/null and b/demo/golden/baselines/hover-over-glow-dark.png differ diff --git a/demo/golden/baselines/large-house-warm-remount-dark.png b/demo/golden/baselines/large-house-warm-remount-dark.png new file mode 100644 index 00000000..d3bea4c4 Binary files /dev/null and b/demo/golden/baselines/large-house-warm-remount-dark.png differ diff --git a/demo/golden/baselines/large-house-zoom-040-dark.png b/demo/golden/baselines/large-house-zoom-040-dark.png new file mode 100644 index 00000000..fa91d3e2 Binary files /dev/null and b/demo/golden/baselines/large-house-zoom-040-dark.png differ diff --git a/demo/golden/baselines/large-house-zoom-250-dark.png b/demo/golden/baselines/large-house-zoom-250-dark.png new file mode 100644 index 00000000..e02b4c43 Binary files /dev/null and b/demo/golden/baselines/large-house-zoom-250-dark.png differ diff --git a/demo/golden/baselines/lighting-fill-light-axis-split-dark.png b/demo/golden/baselines/lighting-fill-light-axis-split-dark.png new file mode 100644 index 00000000..ef879eaf Binary files /dev/null and b/demo/golden/baselines/lighting-fill-light-axis-split-dark.png differ diff --git a/demo/golden/baselines/lighting-fill-lqi-axis-split-dark.png b/demo/golden/baselines/lighting-fill-lqi-axis-split-dark.png new file mode 100644 index 00000000..cf34ae20 Binary files /dev/null and b/demo/golden/baselines/lighting-fill-lqi-axis-split-dark.png differ diff --git a/demo/golden/baselines/lighting-fill-temp-axis-split-dark.png b/demo/golden/baselines/lighting-fill-temp-axis-split-dark.png new file mode 100644 index 00000000..decd6bdc Binary files /dev/null and b/demo/golden/baselines/lighting-fill-temp-axis-split-dark.png differ diff --git a/demo/golden/baselines/lighting-glow-sun-dark.png b/demo/golden/baselines/lighting-glow-sun-dark.png new file mode 100644 index 00000000..7ccaac67 Binary files /dev/null and b/demo/golden/baselines/lighting-glow-sun-dark.png differ diff --git a/demo/golden/baselines/manifest.json b/demo/golden/baselines/manifest.json new file mode 100644 index 00000000..eae13666 --- /dev/null +++ b/demo/golden/baselines/manifest.json @@ -0,0 +1,29 @@ +{ + "schema": 1, + "matrixVersion": 2, + "acceptedAt": "2026-08-08T18:51:15.651Z", + "sourceFingerprint": "4d8e60a278cd81ea896a50b94da318b11ba8b2d7cdc3b782a5fb7fbe042702a5", + "chromium": "151.0.7922.34", + "scenarios": { + "geometry-view-dark-fit": "fbce77f97180cd7d50a997c74d3fa1874ee3be2515a4c09b36dd4e792ebc66df", + "geometry-view-light-fit": "a425fa6d77081bb35d2fb81e469962402c6a3c86a8113ff957f28548908d0816", + "geometry-plan-editor-dark": "1c98c2a22843846fe021fd69f8f854a394229216a35f1e22cce381f510415754", + "geometry-devices-editor-dark": "89f677b2ae242236071bea8c4bc9ba88100eb61ba80bd85ad919e288673a0622", + "geometry-decor-editor-dark": "6e8cafb30e47da92b711528bb24c6d29dce094214b81c1175ec30408c6b988e4", + "geometry-diagonal-45-opening-dark": "fbce77f97180cd7d50a997c74d3fa1874ee3be2515a4c09b36dd4e792ebc66df", + "openings-thick-wall-dark": "5d9ac6add9a5709318180f4554ac62c1c7e2862bd016be7901a2bd450e021f0c", + "openings-hidden-view-dark": "799e791830ab63a1c445b8c77650a577d8e881daa1ff47d1dcf4e238eb1cff16", + "lighting-glow-sun-dark": "638ab9fa6856f91581453c732e4059b2a7af47b20d6a58b45a47497876142ea1", + "lighting-fill-light-axis-split-dark": "acdbebe845ede66dbbe9de979aad93ba78dc2779d1ec533b238a9bea0d047d1c", + "lighting-fill-temp-axis-split-dark": "2348b7c6a8594468664755e2fea1b49126e604192599be0a3965f24a0c2d2765", + "lighting-fill-lqi-axis-split-dark": "584adcfb5541b1dddc814c2674bfce8002566bbb667b10501b7ff49fedef6f9c", + "hover-over-glow-dark": "3ca354fa94922a3e38ce15886250ae88630a1e9356e4ac07b74b425f063839d7", + "hover-nested-room-dark": "472f630768f60c3168f64744af891323a64cf71f36f943fc5a56b4f0494efa70", + "large-house-zoom-040-dark": "69593f75f1965daf0a12777fde923ae25c99b42089a73a04cf523b3ea5ce4f0d", + "large-house-zoom-250-dark": "21a1a0408c913f477913ae9c0339417ae7aaad7baad8a890eb558f6e36a5a597", + "large-house-warm-remount-dark": "f3eb077934701cf11bc828da6a68b55346d499a68c323988938b88aca5f5d9fe", + "device-dialog-desktop-en": "f669ff6b975a3d52d06b6eb7535f1af39373001217b7ab65c94a4fb9c3036193", + "device-dialog-mobile-ru": "852b5ced2d056eb1b79d7dcd3218271198a90a7b3ea6e93da5622f75518ca6c6", + "decor-color-popover-mobile-ru": "206f9e8ec7ee1d584561622772b6a4cbdadfcbfeec55c987dffc0107f5ed1293" + } +} diff --git a/demo/golden/baselines/openings-hidden-view-dark.png b/demo/golden/baselines/openings-hidden-view-dark.png new file mode 100644 index 00000000..f6472c58 Binary files /dev/null and b/demo/golden/baselines/openings-hidden-view-dark.png differ diff --git a/demo/golden/baselines/openings-thick-wall-dark.png b/demo/golden/baselines/openings-thick-wall-dark.png new file mode 100644 index 00000000..9f42d14f Binary files /dev/null and b/demo/golden/baselines/openings-thick-wall-dark.png differ diff --git a/docs/PRODUCT-IMPROVEMENT-PLAN.ru.md b/docs/PRODUCT-IMPROVEMENT-PLAN.ru.md index 0143e294..08f4244e 100644 --- a/docs/PRODUCT-IMPROVEMENT-PLAN.ru.md +++ b/docs/PRODUCT-IMPROVEMENT-PLAN.ru.md @@ -48,7 +48,7 @@ | Данные и совместимость | Есть versioned migration и явная оптимизация | В модели остаются legacy-поля и внутренние ключи без публичного жизненного цикла | | Frontend | 35 TypeScript-файлов, 31 273 физические строки | `src/houseplan-card.ts` содержит 14 308 строк — 45,8% всего TypeScript; любое изменение всё ещё затрагивает слишком широкую поверхность | | Типизация | Строгий TypeScript включён | В `src/` остаётся около 641 употребления `any`, включая внутреннюю бизнес-логику, а не только границу HA | -| Проверки | Инвентаризация: 496 Node unit, 105 pure backend, 50 HA-harness и 118 browser smoke | Детерминированная golden-image инфраструктура добавлена, но первый просмотренный baseline-набор будет принят только на пре-релизном прогоне; performance budgets ещё не утверждены | +| Проверки | Инвентаризация: 497 Node unit, 105 pure backend, 50 HA-harness и 118 browser smoke | Первый просмотренный Linux baseline из 20 golden-сценариев принят и включён в блокирующий CI gate; performance budgets ещё не утверждены | | Документация | Подробное русское руководство и двуязычный changelog существуют | Скриншоты и часть обзорного текста отстают от текущего состава редакторов | Главная цель ближайших циклов: **сделать уже существующую глубину понятной, доступной и дешёвой в сопровождении**, не расширяя без необходимости поверхность настроек. @@ -66,7 +66,7 @@ | HP-A11Y-02 | P1 | Готово к ТЗ | Единое кастомное подтверждение вместо оставшихся browser `confirm()` | | HP-DATA-01 | P1 | Исследование, этап 1 начат | Единый реестр схемы, миграций и срока жизни compatibility-полей | | HP-ARCH-01 | P1 | Реализация малыми этапами | Поэтапное разбиение корневого компонента и монолитных стилей | -| HP-QA-01 | P1 | Инфраструктура готова, baseline ожидает пре-релиза | Визуальная regression-матрица геометрии, света и адаптивных диалогов | +| HP-QA-01 | P1 | Baseline принят, CI gate активен; матрица расширяется вместе с поверхностью продукта | Визуальная regression-матрица геометрии, света и адаптивных диалогов | | HP-PERF-01 | P1 | Baseline-инфраструктура готова | Воспроизводимый профиль большого дома и бюджеты производительности | | HP-DOC-01 | P1 | Готово к ТЗ | Актуальные скриншоты и единая пользовательская навигация по документации | | HP-UX-06 | P2 | Нужно UX-решение | Явный room override для Glow | @@ -299,10 +299,9 @@ baseline/регрессионной защиты затрагиваемой по Есть три раздельных действия: `golden:capture` никогда не пишет baseline, `golden:verify` требует полный набор и manifest, `golden:accept -- --reviewed` -является единственным путём замены эталонов. Отдельный CI job до первого -baseline только прикладывает кандидатов, а после появления PNG автоматически -становится блокирующим. Первый набор сознательно не снимается сейчас: по правилу -владельца build/test выполняются только на пре-релизном gate. +является единственным путём замены эталонов. Первый Linux baseline из 20 +сценариев просмотрен и принят на gate `v1.60.3-beta.1`; после появления PNG +отдельный CI job автоматически работает в блокирующем режиме. **Критерии приёмки.** Матрица запускается отдельным CI job; браузер, viewport, шрифты и анимации детерминированы; обычные DOM-smoke остаются быстрым первым слоем; новый тип стыка или диалога добавляет fixture в ту же матрицу. diff --git a/docs/STATUS.md b/docs/STATUS.md index c5127f2e..0dd52f40 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -21,7 +21,7 @@ metadata). Only an explicit owner-approved emergency hotfix may skip this gate. | Item | State | |---|---| | Version | **v1.60.3-beta.1** everywhere (manifest, const.py, package.json, CARD_VERSION) — first maintenance pre-release after v1.60.2; `main` remains on stable v1.60.2 while the beta is published from `dev` | -| Current local cycle | Maintenance-only after v1.60.2: the brief tab-return flash and thick-opening association/overlap defects are fixed; static-icon coverage is expanded. HP-DATA-01 has an offline compatibility registry/auditor; HP-PERF-01 has a schema-valid deterministic large-house benchmark with source-freshness and precise-memory guards; HP-ARCH-01 started with the opening-tunnel render seam; HP-QA-01 has deterministic capture/verify/review infrastructure and its first pre-release candidate matrix. No new user features are introduced. | +| Current local cycle | Maintenance-only after v1.60.2: the brief tab-return flash and thick-opening association/overlap defects are fixed; static-icon coverage is expanded. HP-DATA-01 has an offline compatibility registry/auditor; HP-PERF-01 has a schema-valid deterministic large-house benchmark with source-freshness and precise-memory guards; HP-ARCH-01 started with the opening-tunnel render seam; HP-QA-01 has deterministic capture/verify/review infrastructure and its first reviewed Linux baseline of 20 scenarios. No new user features are introduced. | | Workflow | Owner's rule since 2026-08-07: ordinary fixes/features are made **locally, without tests and without commits**. A requested pre-release gets a production build plus the smallest targeted unit/smoke set covering the changed surfaces, one tested `dev` commit/tag and a GitHub Release with `prerelease=true`; `main` stays untouched. The complete local frontend/backend/smoke gate runs only before a stable release, after which `main` is fast-forwarded to the exact tested `dev` SHA and the GitHub Release uses `prerelease=false`. Release bodies are short and bilingual (Russian first): only significant user changes get individual bullets, while minor/code-only work is grouped as `Мелкие исправления и улучшения` / `Small fixes and improvements`; every body ends with separate links to the Russian and English changelogs. Nothing is copied to the home instance by hand | | GitHub | https://github.com/Matysh/houseplan-card — `main` carries stable releases; pre-release tags may point directly at `dev`. Work lands on `dev` and is merged into `main` for a stable release, so `dev` is normally equal to or ahead of `main`, never behind. Push via SSH key `ha_jb` (remote git@github.com:…); API releases via the fine-grained PAT in `~/.git-credentials` (Contents R/W, issued 2026-07-23) | | CI | v1.60.3-beta.1 uses the owner-approved targeted pre-release gate locally. Exact-SHA Ubuntu Validate remains mandatory and runs the broader matrix; `release.yml` withholds assets until every matching run finishes green |