One State for the House
Whether Dad is broadcasting changes what Oriel may do. The hands must not touch the console while he plays on air. The Broadcast eyes mode opens the home cameras only while he is on air. A play session Pippa runs on air ends when he goes off. Each of those decisions needs the answer to one question, and Oriel never answers it itself. On Air is cwkPippa's state, with its stages (Prep, Live, Solo Play, Wrap-up); Oriel reads it, every time, from cwkPippa's status route, found through the family registry's address for cwkPippa, never a written host name or a LAN address. There is no "on air" flag of Oriel's own that could disagree with the house.
The Same Unread Answer Means Different Things
The interesting part is what happens when the read fails: no answer, a refusal, a body without a clear boolean. Oriel's three followers treat that failure differently, and each is right:
| Follower | What it guards | An unread On Air means |
|---|---|---|
| The hands' preflight | Pippa touching the console during Dad's broadcast | maybe on air: refuse. Only an explicit on_air: false read just now lets the hands go on. |
| The Broadcast eyes mode | home cameras open because of a broadcast | off: the cameras stay closed. Only an explicit "on" opens them. |
| An approved play session's kill switch | ending Pippa's on-air play when the broadcast ends | nothing changed: keep playing. Only an explicit "off" after an "on" ends it. |
Read the rows as one rule: an unread state always resolves toward the less dangerous action, and which action is less dangerous depends on what is being guarded. For the hands, acting is the danger, so unread means don't. For the cameras, opening is the danger, so unread means closed. For the play session on air, a false stop is the danger (it would cut the broadcast in half), so unread means carry on, and the real stop has to be explicit. A single global "if unsure, assume X" would have been wrong for at least one of them.
70,000 Reads a Day
Reading fresh every time has a cost, and Oriel paid it before it noticed. On 2026-11-06 three followers inside the engine (the play kill switch, the phone bodies' faces, the On Air recording) were each reading the status on their own, together about 70,000 times a day, every read over a new TLS connection. Nothing was broken; it was simply wasteful, and wasteful in a way that loads another app.
The fix is a small class, onair.Shared, with rules that keep the safety while removing the waste:
- Each follower names the oldest verdict it will accept: the faces accept one read in the last 2 seconds, the On Air recording one in the last 3, and the play kill switch and the play preflight always read at once (
max_age0), beside any read already out, so the switch never waits on another follower. - Apart from those immediate reads, only one read is out at a time, and a follower waits for it no longer than its own timeout.
- An unread state is shared as unread, never converted to off, so each follower still applies its own rule from the table.
- Reads reuse kept-alive connections instead of a new TLS handshake each time.
Read Again Right Before Acting
For the hands, "fresh" means fresh at the moment of action. The command-line hands tool reads On Air before it discovers the console and again just before it connects, because discovery can take seconds and Dad can go on air in between. The capture tools read it first and every 30 seconds while they record, and stop the moment it is not clear. A check whose answer is stale by the time you act on it is a classic race (time of check to time of use); the cure is to check again as close to the action as you can.