Nothing paints over a marker that says it is a curtain

An explicit «Открыть/закрыть» marker is the strongest statement the card
has about what a marker IS, so its cover now decides the plate BEFORE the
bound `controls` and before a lit light of the same device — audit
DEV-1DA1-01.

Until now the cover came third, and the owner's contract «у штор не
должно быть жёлтой подложки НИКОГДА» had two holes: a mixed device (a
lamp that also ships a blind) told «Открыть/закрыть» went yellow off its
own lit light, and a curtain marker with a bound wall switch went yellow
off `controls`. The early `return 'on'` never reached the cover branch,
so the travelling curtain lost its breathing ring as well — and in glow
fill, where the renderer strips `on` from a shining source, it was left
with no indicator at all, while the tap still drove the cover.

Everything else keeps the old precedence: the same mixed device WITHOUT
the explicit action is yellow again, a wall switch still mirrors its
controls, and a «cover» marker whose device carries no cover.* at all
falls back to its primary.

docs/FILTERING.md «What a marker SHOWS» is renumbered accordingly.
Regression: demo/smoke_cover_plate_precedence.mjs (the auditor's two
markers, every cover state, class AND resolved plate colour).
This commit is contained in:
Sergey
2026-08-04 10:11:32 +03:00
parent 285d569102
commit 232c4807fd
7 changed files with 406 additions and 153 deletions
+12
View File
@@ -326,6 +326,18 @@ Run the *core flows* (marked ★ below) in each environment at least once per mi
action away and the marker speaks for its primary again; a lit lamp that
also owns a cover keeps its yellow and its own icon
[auto: smoke_cover_not_primary (the indication section)]
- [ ] Nothing paints over an explicit curtain (dev, audit DEV-1DA1-01): the
cover is the FIRST rule of «What a marker SHOWS», above `controls` and
above a lit light. Two markers set to «Открыть/закрыть»: one on a mixed
device whose own `light.*` is ON, one whose bound `controls` switch is
ON. In every cover state (closed / open / opening / closing) the plate
stays neutral — never the yellow «включено», never the orange «открыто»
— the travelling ring breathes, the icon morphs with the cover, and in
glow fill the ring is still there (that is where a yellow-plated curtain
used to lose BOTH indicators). Untouched: the same mixed device without
the explicit action is yellow again, a wall switch still mirrors its
controls, and an «Открыть/закрыть» marker whose device has no `cover.*`
at all falls back to its primary [auto: smoke_cover_plate_precedence]
- [ ] Light-source badges (v1.52.0): in glow fill a lit lamp's badge stays
standard (the spot is the indicator) and a lit socket stays yellow; in
other fills a lit lamp is plain yellow with no RGB tint; morphing and