You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Part of LightWitch M1 — see the rework plan, "Command arbitration". This issue covers the local mechanics only; the mesh message and the button action build on it (separate issues).
Problem
A light can only render its group's state — there is no way to command a single light ("turn green", "blink for 2 s, then return") without changing the whole group. Wanted rule: the newest command owns the light — a direct command overrides the group state; the next actual group change takes the light back.
Proposed change
Per-light override slot: full LightConfig snapshot (replace, never merge) + baseSeq (the group's seq at capture time) + optional durationMs.
Arbitration:
group re-broadcasts with seq == baseSeq (periodic self-heal) do not displace the override
any group update with seq > baseSeq drops the override — the light rejoins its group
a newer direct command replaces the previous override
durationMs expiry (receiver-side) drops the override
Part of LightWitch M1 — see the rework plan, "Command arbitration". This issue covers the local mechanics only; the mesh message and the button action build on it (separate issues).
Problem
A light can only render its group's state — there is no way to command a single light ("turn green", "blink for 2 s, then return") without changing the whole group. Wanted rule: the newest command owns the light — a direct command overrides the group state; the next actual group change takes the light back.
Proposed change
LightConfigsnapshot (replace, never merge) +baseSeq(the group'sseqat capture time) + optionaldurationMs.seq == baseSeq(periodic self-heal) do not displace the overrideseq > baseSeqdrops the override — the light rejoins its groupdurationMsexpiry (receiver-side) drops the overridebrightnessOverrideEnabled, config: allow brightness override per light, not just per group #299) stays untouched — it applies while following the group; an active override bypasses it.Acceptance criteria
seqbump) returns the overridden light to the group.durationMsoverride reverts on its own; reboot clears any override.Checklist obligations
server/index.js, mock data with a second group/validate-uion the dashboard indicator/clear flow