v1.0.2
One fix. The stream-stalled check asked only whether someone was publishing and whether segments were old, never whether that publisher had been up long enough to be responsible. Because segment_age_s keeps growing while the guest slot is empty and the demo loop is idle, a publisher inherited the entire preceding gap the moment it claimed.
Seen on the deployment: a guest was alerted as "publishing but segments 33s stale" four seconds after connecting, for 29 s that accrued while the slot was free. The recovery line then reported a 51 s worst case covering a period with no writer at all.
The condition now also requires the publisher to have been publishing for at least SEG_STALE_S, so it can only be blamed for staleness it had time to cause. A genuine stall still fires, SEG_STALE_S later.
No change to the streaming path.