Release v1.61.0-beta.3 candidate

This commit is contained in:
Matysh
2026-08-10 09:44:31 +03:00
parent 7d152e04f9
commit cd55a8e897
39 changed files with 1019 additions and 483 deletions
+13 -4
View File
@@ -593,10 +593,19 @@ hash falls back to the default.
token and projects to data fill `none` plus Glow `true` unless an explicit
boolean wins. Normal settings/room saves materialise that projection in the
same write; Optimize Plans performs the equivalent idempotent model-v6
migration. Render order is paper → data room/tunnel fill → pointer-free Glow
base room/tunnel fill → radial pools → sun/interactive layers. The static
room card uses the same data/base projection but deliberately has no live
pools.
migration. Render order is paper → data room/tunnel fill → conditional
pointer-free Glow base for rooms whose effective fill is `none` → radial
pools → sun/interactive layers. A data/static fill (`lqi`, `light`, `temp`,
`custom`) never receives the dark base, so its exact color and alpha remain
visible; radial pools stay independent and continue to render. The static
room card uses the same data/base projection, omits empty base groups, and
deliberately has no live pools.
- **Custom room fill** (#56): `space.settings.custom_fill` is the space color
and `room.settings.custom_fill` is an optional explicit override. The pure
projection is room → space → `{c:'#607d8b',a:.18}` and every read crosses
`safeStoredColor` plus finite alpha clamping. `resolveEffectiveRoomFill`
remains the single source for room floor, clean-floor holes and thick-wall
tunnel colors; stored `room_color` continues to control borders/names only.
- **Glow pools and additive composition** (#19): every source retains its own
radial gradient and wall/door `clipPath`. All pools live in one flat isolated
group inside one outer `opacity=.7` frame; only the pool elements use SVG
+19
View File
@@ -1,5 +1,24 @@
# Changelog
## v1.61.0-beta.3 — 2026-08-10
- Performance tooling now fails before measurement when a candidate/base card
no longer exposes a private API consumed by the benchmark, documents the
safe two-revision rename path, and falls back from an unreachable force-push
comparison SHA to the latest reachable release. The bilingual release-body
headings now have one explicit canonical template. ([#15](https://github.com/Matysh/houseplan-card/issues/15),
[#16](https://github.com/Matysh/houseplan-card/issues/16),
[#17](https://github.com/Matysh/houseplan-card/issues/17))
- Rooms and spaces can now use a persistent custom fill color and opacity,
independently of border/name color and Home Assistant state. Room overrides
inherit safely from the space and can be reset. ([#56](https://github.com/Matysh/houseplan-card/issues/56))
- Glow no longer darkens or tints LQI, light, temperature, or custom room
fills: those colors stay exact while live radial light pools remain visible.
([#61](https://github.com/Matysh/houseplan-card/issues/61))
- The global Glow radius now sits with the other Glow settings. Small code
review cleanups also remove an unreachable legacy branch and empty static
SVG layers. ([#60](https://github.com/Matysh/houseplan-card/issues/60))
## v1.61.0-beta.2 — 2026-08-10
- Light-source Glow is now an independent overlay that can be combined with
+20
View File
@@ -6,6 +6,26 @@
> **Правило проекта:** оба файла пополняются в одном коммите с самим
> изменением — как и остальная документация (см. docs/STATUS.md).
## v1.61.0-beta.3 — 2026-08-10
- Performance-инструменты теперь до начала замеров сообщают об исчезнувшем
приватном API карточки в candidate/base, документируют безопасное
двухэтапное переименование и при недостижимом SHA после force-push выбирают
последний достижимый релиз. Для заголовков двуязычного release body явно
закреплён один канонический шаблон. ([#15](https://github.com/Matysh/houseplan-card/issues/15),
[#16](https://github.com/Matysh/houseplan-card/issues/16),
[#17](https://github.com/Matysh/houseplan-card/issues/17))
- Для комнат и пространств появилась постоянная заливка своим цветом и
прозрачностью, независимая от цвета границ/названий и состояния Home
Assistant. Цвет комнаты безопасно наследуется от пространства и сбрасывается
отдельной кнопкой. ([#56](https://github.com/Matysh/houseplan-card/issues/56))
- Glow больше не затемняет и не меняет цвет заливки по LQI, свету, температуре
или пользовательскому цвету: эти заливки остаются точными, а живые световые
пятна продолжают отображаться. ([#61](https://github.com/Matysh/houseplan-card/issues/61))
- Общий радиус свечения перенесён к остальным настройкам Glow. Мелкие правки по
код-ревью также убрали недостижимую legacy-ветку и пустые SVG-слои статичной
карточки. ([#60](https://github.com/Matysh/houseplan-card/issues/60))
## v1.61.0-beta.2 — 2026-08-10
- Свечение источников света стало независимым слоем и может одновременно
+7
View File
@@ -56,3 +56,10 @@ enabled Glow overlay; explicit `glow_enabled` / room `glow` booleans always win.
A normal edit that replaces the legacy token writes the resolved boolean in the
same operation. Optimize Plans applies the same lossless, idempotent model-v6
migration while preserving unknown sibling settings.
Current `fill_mode` additionally accepts `custom`. Its optional color is stored
as `{c:'#RRGGBB',a:0..1}` in `space.settings.custom_fill` and, for an explicit
room override, `room.settings.custom_fill`. Missing or invalid historical data
is projected at render time through room → space → `#607d8b`/`0.18`; merely
reading it never rewrites the config. Backend writes keep the strict shared
hex/finite-alpha contract.
+14
View File
@@ -218,19 +218,33 @@ bodies of skipped releases. The full detail remains in both
`docs/CHANGELOG.ru.md` and `docs/CHANGELOG.md`; finish every release body with
two explicit links, one to each language version of the changelog.
Changelog entries may link directly to a **closed** GitHub Issue when that
issue is the canonical task for the shipped change. Append a normal Markdown
link such as `([#55](https://github.com/Matysh/houseplan-card/issues/55))` to
the relevant bullet in both language changelogs. Keep this optional: do not
invent issues for minor work, do not link open or partially delivered issues,
and do not expand the grouped small-fixes bullet into an issue inventory.
```md
## Основное
- Значимое изменение.
- Исправлена конкретная проблема ([#123](https://github.com/Matysh/houseplan-card/issues/123)).
- Мелкие исправления и улучшения.
## Highlights
- Significant change.
- Fixed a specific problem ([#123](https://github.com/Matysh/houseplan-card/issues/123)).
- Small fixes and improvements.
[Полный список изменений на русском](https://github.com/Matysh/houseplan-card/blob/vX.Y.Z/docs/CHANGELOG.ru.md)
· [Full changelog in English](https://github.com/Matysh/houseplan-card/blob/vX.Y.Z/docs/CHANGELOG.md)
```
The literal `## Основное` and `## Highlights` headings above are the canonical
release-body format. Do not maintain a second `## Русский` / `## English`
template in scripts or release notes; change this single template if the
product format changes again.
Replace `vX.Y.Z` with the release tag so the links remain pinned to the
published version instead of drifting with `dev` or `main`.
+11 -6
View File
@@ -21,11 +21,11 @@ metadata). Only an explicit owner-approved emergency hotfix may skip this gate.
| Item | State |
|---|---|
| Version | **v1.61.0-beta.2** everywhere (manifest, const.py, package.json, CARD_VERSION) — pre-release candidate with independent/additive Glow and the long-press gesture fix |
| Current local cycle | Stable v1.60.3 and pre-release v1.61.0-beta.1 are published. The current `dev` candidate for v1.61.0-beta.2 implements #55 (Glow independent from data fill, legacy-safe model-v6 migration and separate base/tunnel projection), #19 (flat additive pool composition with a cached real-pixel capability probe and normal fallback), and P1 #59 (a modal opened by mouse long-press now terminates the interrupted pan gesture). Deterministic fixtures, browser smokes, golden candidates and two same-runner performance profiles are included; publication waits for reviewed Linux golden baselines and the mandatory exact-SHA Validate run. |
| 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 |
| Version | **v1.61.0-beta.3** everywhere (manifest, const.py, package.json, CARD_VERSION) — pre-release candidate with custom room colors, exact data fills under Glow and performance-infrastructure hardening |
| Current local cycle | The v1.61.0-beta.3 candidate implements #56 (safe custom room/space fill), #61 (Glow base only when effective fill is `none`, while pools remain independent), #60 (Glow radius grouped with Glow settings), review L1/L2, and infrastructure #15/#16 (explicit performance-card API contract plus force-push-safe comparison SHA). #17 is closed after aligning the one canonical release-body template. Publication waits for the targeted local gate, reviewed Linux golden matrix v5 and mandatory green exact-SHA Validate. |
| 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. Detailed RU/EN changelog bullets may link the corresponding closed GitHub Issues; open or partially delivered issues are never presented as shipped. Nothing is copied to the home instance by hand |
| GitHub | https://github.com/Matysh/houseplan-card — [Issues](https://github.com/Matysh/houseplan-card/issues) are the canonical task records and the linked [Project v2](https://github.com/users/Matysh/projects/1) is the canonical priority/status view; both must stay current. `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 | The v1.61.0-beta.2 local targeted gate passed: typecheck, 146 focused frontend tests, 86 validation-schema backend tests, Glow/settings/tunnel/static-parity/#59 browser smokes, reviewed local golden candidates, the 7-sample additive profile and a diagnostic full-house overlay sample. Both profiles preserve exact 1/10/30/60 pool cardinality, one render per HA tick and stable caches; the mandatory exact-SHA Ubuntu Validate will run the full HA/smoke/golden matrix and both 7-sample performance profiles before publication. `release.yml` withholds the card asset unless it is green. |
| CI | The published v1.61.0-beta.2 exact-SHA Validate run is green. The v1.61.0-beta.3 targeted gate covers logic/backend enum+color validation, performance-card contracts, settings/room/tunnel/Glow/static browser smokes, golden matrix v5 and diagnostic samples of both performance profiles. `release.yml` withholds the card asset unless the final exact-SHA Validate is green. |
| HACS | Custom repository works. **Inclusion PR: hacs/default#9004** — open, valid, labeled, mergeable clean, never drafted. Queue: 1212 open, 835 older than ours. Merge rate COLLAPSED: 75 in July but almost all in the first decade, 0 in the last week (checked 2026-07-29) — maintainers process in rare bursts; ETA unknowable, months at best. Nothing actionable on our side |
| Home instance | ha.jbstudio.pro (SSH port **22222**, key `ha_jb`; HA config root is `/mnt/data/supervisor/homeassistant` — `/config` does NOT exist in this SSH environment), last direct copy was **v1.57.0**; from v1.58.0 on it updates itself through HACS by tag (no scp) |
| Localization | UI en/ru (src/i18n/*.json), everything user-visible localized incl. kiosk popover |
@@ -43,12 +43,17 @@ metadata). Only an explicit owner-approved emergency hotfix may skip this gate.
across reloads (v1.38.2). **Kiosk mode** (v1.41.0): `kiosk: true` — no
header/editors, swipe between spaces, double-tap zoom reset, `cycle: N`
carousel, per-screen size multipliers in localStorage.
- **Independent Glow overlay** (local #55/#19 over the v1.35–v1.37 model):
dark-room base and per-source pools can coexist with any data fill. Pools use
- **Independent Glow overlay** (#55/#19, refined locally by #61): dark-room
base is used only with effective fill `none`; LQI/light/temp/custom colors
keep their exact alpha while per-source pools remain visible. Pools use
additive screen blending only after a cached real-pixel browser probe and
otherwise fall back to normal composition; legacy `fill_mode: glow` remains
losslessly readable/migratable. Existing RGB/colour-temperature/default
colour, per-source radius, door sectors and transitive open zones remain.
- **Custom room fill** (local #56): space and room dialogs offer a persistent
user color/opacity independent of HA state and border/name color. Effective
inheritance is room → space → safe documented default; room reset restores
space inheritance, and full/static renderers share the same projection.
- **Real switches** (v1.36): `marker.controls[]` group-toggle with HA-group
semantics; icon mirrors targets; hidden grouped lamps fixed (tiered
primaryEntity). **Lights toggle by default** (v1.39): primary domain light
+10 -7
View File
@@ -246,8 +246,8 @@ desktop: для точного рисования, Resize, модификато
| Стиль | Цвет и прозрачность | Общий цвет границ и названий |
| Фон | Наследовать/статический/день-ночь | Управляет фоном вокруг плана |
| Солнце | Север и лучи | Локально переопределяет общие настройки |
| Заливка | Нет/LQI/свет/температура | Выбирает модель данных для заливки комнат пространства |
| Свечение источников света | Вкл/выкл | Независимо добавляет базовое затемнение и световые пятна поверх заливки |
| Заливка | Нет/LQI/свет/температура/свой цвет | Выбирает данные или постоянный цвет заливки комнат пространства |
| Свечение источников света | Вкл/выкл | Добавляет световые пятна; базовое затемнение используется только без другой заливки |
Удаление пространства удаляет его комнаты и разметку после подтверждения. Файл подложки при этом автоматически не удаляется: им можно управлять через список уже загруженных планов.
@@ -630,10 +630,13 @@ Glow и заливка «Свет» продолжают работать по
| Zigbee signal | Средний LQI устройств HA-зоны | Градиент от красного (≤40) до зелёного (≥180) | Без заливки |
| Свет | Единый набор видимых источников комнаты: внешние `controls` + собственный источник по флагу «Это источник света»; автоматические `light.*` — fallback | Цвет «включено», «всё выключено» или «нет источников» | Цвет «нет источников», если его прозрачность >0 |
| Температура | Источник комнаты или среднее датчиков | Холодно ниже минимума, комфорт между границами, жарко выше максимума | Без заливки |
| Свой цвет | Настройка пространства или комнаты | Постоянный цвет и прозрачность, не зависящие от HA | Безопасный серо-синий `#607d8b`, 18% |
«Свечение источников света» теперь включается отдельно и сочетается с любым
режимом заливки. Оно добавляет базовое затемнение и световые пятна поверх
заливки данными, не заменяя её. Новое вручную созданное пространство по
режимом заливки. При режиме «Нет» оно добавляет базовое затемнение и световые
пятна. При LQI, свете, температуре или своём цвете базовое затемнение не
рисуется: исходный цвет и прозрачность заливки сохраняются точно, а световые
пятна остаются видимыми поверх неё. Новое вручную созданное пространство по
умолчанию имеет режим «Нет» и включённое свечение. Старые планы с режимом
«Световые источники» читаются без визуальной потери и при следующем обычном
сохранении переводятся в независимые настройки.
@@ -642,9 +645,9 @@ Glow и заливка «Свет» продолжают работать по
| Уровень | Что можно изменить |
|---|---|
| Общие настройки | Цвет и прозрачность всех состояний, радиус света, цвет стен |
| Пространство | Режим заливки, независимый переключатель Glow, температурные границы, показ LQI, фон |
| Комната | Наследовать или явно выбрать Нет/LQI/Свет/Температуру; пока наследует Glow пространства |
| Общие настройки | Цвет и прозрачность состояний данных, настройки Glow вместе с его радиусом, цвет стен |
| Пространство | Режим заливки, свой цвет и прозрачность, независимый переключатель Glow, температурные границы, показ LQI, фон |
| Комната | Наследовать или явно выбрать Нет/LQI/Свет/Температуру/свой цвет; свой цвет наследуется от пространства и может быть сброшен; пока наследует Glow пространства |
| Устройство | Явно стать источником света, радиус свечения, цвет эффекта |
### Что считается светом
+30 -25
View File
@@ -2,7 +2,7 @@
- Issue: https://github.com/Matysh/houseplan-card/issues/55
- Приоритет: P2
- Статус ТЗ: реализовано в кандидате v1.61.0-beta.2; exact-SHA verification/golden approval — release gate
- Статус ТЗ: реализовано в v1.61.0-beta.2; уточнение #61 входит в v1.61.0-beta.3
- Связано: room override #36; additive pools #19; compatibility registry #33;
custom fill #56
@@ -14,7 +14,10 @@
2. световой Glow как отдельный слой поверх этой заливки.
Пользователь может одновременно видеть LQI/освещённость/температуру/свой цвет
и Glow. Модель геометрии комнат, распространения света и проёмов не меняется.
и световые пятна Glow. Тёмная базовая подложка Glow применяется только когда
effective data fill равен `none`, поэтому полезная заливка не затемняется и не
меняет оттенок. Модель геометрии комнат, распространения света и проёмов не
меняется.
## Границы этапа и зависимости
@@ -24,10 +27,10 @@
- #19 может заменить обычную группу световых пятен на isolated additive group,
но не блокирует модель и миграцию #55.
Порядок поставки: **#55 → (#36, #56)**; #36 и #56 могут выйти вместе с #55,
если их schema/UI/tests входят в тот же beta gate. Пока #56 не реализована,
frontend и backend #55 не принимают `fill_mode:'custom'`: будущий enum нельзя
открывать частично.
Порядок поставки: **#55 → (#36, #56)**. Базовая часть #55 опубликована в
`v1.61.0-beta.2`; #56 реализована в текущей локальной итерации целиком — enum,
schema, UI и проверки добавлены вместе. Частично открывать будущий enum до
готовности всего этого вертикального среза по-прежнему запрещено.
## Persisted model и effective projection
@@ -150,7 +153,8 @@ Preview показывает число затронутых пространс
1. paper/backdrop;
2. resolved data/static room fill и matching data fill внутреннего тоннеля;
3. Glow base для effective-Glow rooms и соответствующих частей тоннеля;
3. Glow base только для effective-Glow rooms с effective fill `none` и
соответствующих частей тоннеля;
4. tunnel light sectors и radial pools;
5. sun и interactive layers по текущему контракту.
@@ -160,30 +164,31 @@ Glow base и pools pointer-transparent. Room hover, tooltip и editor hit target
### Нормативное смешивание Glow base
Glow base — отдельная SVG-геометрия с обычным `source-over`/`normal`
композитингом. `multiply`, `screen`, CSS filter и дополнительная групповая
opacity не применяются.
композитингом, которая создаётся только при
`effectiveGlow == true && effectiveFill == none`. `multiply`, `screen`, CSS
filter и дополнительная групповая opacity не применяются.
```text
a = clamp(fill_colors.glow_base.a, 0, 1)
Cout = Cglow_base * a + Cunderlay * (1 - a)
```
`Cunderlay` — уже скомпозированный результат paper + data fill. Используется
существующий пользовательский token `glow_base`; data fill color и alpha не
мутируются. Для legacy `fill_mode:'glow'` под Glow base лежит paper, а геометрия
`Cunderlay` — paper без data fill. Используется существующий пользовательский
token `glow_base`. Для legacy `fill_mode:'glow'` под Glow base лежит paper, а геометрия
base повторяет прежние room/tunnel shapes, поэтому при штатной палитре результат
должен сохранять pixel parity старого режима. Для новых сочетаний temp+Glow и
custom+Glow обязательны owner-reviewed golden baselines в light/dark theme;
после принятия они становятся визуальным контрактом и не обновляются
автоматически.
должен сохранять pixel parity старого режима. Для сочетаний LQI/light/temp/custom
с Glow обязательный контракт обратный: data/static fill сохраняет exact color и
alpha, Glow base отсутствует, а radial pools продолжают рисоваться поверх.
Room с effective Glow on получает base даже при отсутствии источников света;
radial pools тогда отсутствуют. Room с Glow off не получает base и исключается
Room с effective Glow on и fill `none` получает base даже при отсутствии
источников света; radial pools тогда отсутствуют. Room с любым другим fill или
Glow off не получает base. Glow-off room исключается
из визуальных clip pools, но это не меняет физический transport через неё по
#36. Если Glow off у всех комнат, overlay не создаёт пустые SVG layers.
Тоннель сначала повторяет resolved data fill своей стороны, затем получает тот
же Glow-base overlay только со стороны effective-Glow room. Геометрия световых
Тоннель сначала повторяет resolved data fill своей стороны. Glow-base overlay
получает только сторона с effective Glow и fill `none`; сторона с любой
data/static заливкой сохраняет её точный цвет. Геометрия световых
секторов, отсечение откосами и проникновение через двери/ворота не меняются.
### Radial pools
@@ -197,7 +202,7 @@ radial pools тогда отсутствуют. Room с Glow off не получ
Статическая карточка использует тот же effective resolver и показывает:
- data/static fill;
- Glow base поверх него для effective-Glow rooms;
- Glow base поверх него только для effective-Glow rooms с fill `none`;
- matching базовую заливку поддерживаемых тоннелей.
Live radial pools и tunnel light sectors в статической карточке не рисуются —
@@ -251,7 +256,7 @@ review артефактов.
соответствующая страница существует;
- compatibility registry/audit #33;
- скриншот новых независимых controls;
- owner-reviewed golden matrix temp+Glow/custom+Glow и static-card state.
- owner-reviewed golden matrix temp+Glow/custom+Glow без base и static-card state.
Release body выделяет независимый Glow как пользовательскую функцию; чисто
технические детали группируются по общему release-правилу.
@@ -265,9 +270,9 @@ Release body выделяет независимый Glow как пользов
3. Обычный Save, заменяющий legacy token, атомарно материализует effective Glow;
untouched Save, Cancel и reload не создают silent migration.
4. Optimize preview/apply/undo идемпотентен и сохраняет future fields.
5. Старый config до migration имеет pixel parity; normal source-over formula и
layer order проверены DOM/style unit-тестами.
6. Golden: dark/light, temp+Glow, custom+Glow, mixed room overrides, no-source,
5. Старый config до migration имеет pixel parity; normal source-over formula,
отсутствие base поверх data/static fill и layer order проверены DOM/style unit-тестами.
6. Golden: dark/light, temp+Glow без base, custom+Glow без base, mixed room overrides, no-source,
tunnel и hover; baseline принят владельцем до merge.
7. `houseplan-space-card` совпадает по data/base projection и не рисует pools.
8. Doors/gates, virtual/physical walls, nested holes, partitions/columns и
+1 -1
View File
@@ -2,7 +2,7 @@
- Issue: https://github.com/Matysh/houseplan-card/issues/56
- Приоритет: P2
- Статус ТЗ: ready after security gate #21
- Статус ТЗ: реализовано в v1.61.0-beta.3
- Совместимо: независимый Glow #55
## Цель
+4 -4
View File
@@ -51,9 +51,9 @@ GitHub Issues и GitHub Projects (v2) остаются единственным
| [#11](https://github.com/Matysh/houseplan-card/issues/11) Vacuum source health | [011-vacuum-source-health.md](011-vacuum-source-health.md) | в реализации |
| [#12](https://github.com/Matysh/houseplan-card/issues/12) Room cleaning highlight | [012-vacuum-room-cleaning-highlight.md](012-vacuum-room-cleaning-highlight.md) | готово к ревью |
| [#13](https://github.com/Matysh/houseplan-card/issues/13) Golden open context tray | [013-golden-open-context-tray.md](013-golden-open-context-tray.md) | реализовано |
| [#19](https://github.com/Matysh/houseplan-card/issues/19) Additive Glow blending | [019-glow-additive-blending.md](019-glow-additive-blending.md) | v1.61.0-beta.2 candidate; exact-SHA gate |
| [#19](https://github.com/Matysh/houseplan-card/issues/19) Additive Glow blending | [019-glow-additive-blending.md](019-glow-additive-blending.md) | реализовано в v1.61.0-beta.2 |
| [#20](https://github.com/Matysh/houseplan-card/issues/20) Glow through open doors | [020-glow-open-door-spill.md](020-glow-open-door-spill.md) | готово к реализации |
| [#21](https://github.com/Matysh/houseplan-card/issues/21) Safe color CSS variables | [021-color-css-injection.md](021-color-css-injection.md) | готово к реализации |
| [#21](https://github.com/Matysh/houseplan-card/issues/21) Safe color CSS variables | [021-color-css-injection.md](021-color-css-injection.md) | реализовано в v1.61.0-beta.1 |
| [#36](https://github.com/Matysh/houseplan-card/issues/36) Room Glow override | [036-room-glow-override.md](036-room-glow-override.md) | черновик продуктового решения |
| [#37](https://github.com/Matysh/houseplan-card/issues/37) Room scale system | [037-room-scale-system.md](037-room-scale-system.md) | черновик migration semantics |
| [#38](https://github.com/Matysh/houseplan-card/issues/38) Icon rule builder | [038-icon-rule-builder.md](038-icon-rule-builder.md) | черновик data model |
@@ -66,8 +66,8 @@ GitHub Issues и GitHub Projects (v2) остаются единственным
| [#51](https://github.com/Matysh/houseplan-card/issues/51) Custom decor images | [051-custom-decor-images.md](051-custom-decor-images.md) | черновик: security dependencies |
| [#52](https://github.com/Matysh/houseplan-card/issues/52) Dimensions in View | [052-view-dimensions.md](052-view-dimensions.md) | готово к ревью |
| [#54](https://github.com/Matysh/houseplan-card/issues/54) Zigbee topology overlay | [054-zigbee-topology-overlay.md](054-zigbee-topology-overlay.md) | research + adapter contract |
| [#55](https://github.com/Matysh/houseplan-card/issues/55) Independent Glow overlay | [055-independent-glow-overlay.md](055-independent-glow-overlay.md) | v1.61.0-beta.2 candidate; exact-SHA gate |
| [#56](https://github.com/Matysh/houseplan-card/issues/56) Static room color | [056-static-room-color.md](056-static-room-color.md) | готово после security gate #21 |
| [#55](https://github.com/Matysh/houseplan-card/issues/55) Independent Glow overlay | [055-independent-glow-overlay.md](055-independent-glow-overlay.md) | реализовано в v1.61.0-beta.2; #61 — v1.61.0-beta.3 |
| [#56](https://github.com/Matysh/houseplan-card/issues/56) Static room color | [056-static-room-color.md](056-static-room-color.md) | реализовано в v1.61.0-beta.3 |
## Правило актуализации