zebra-report/web
Russell Ballestrini 6a72e77518
zebra-spaces: rebuild SFU sub PC on connectionstatechange + visibility resume
Lid-close / suspend recovery. When the OS suspends the browser, the
SFU sub PC goes 'disconnected' → 'failed' (or just stops carrying RTP
silently). On resume the old PC is dead but JS still holds a reference
to it, so we get frozen remote screens until the host hard-reboots.

Two recovery paths added:

1. pc.onconnectionstatechange — on 'failed' or 'closed' for the active
   sub PC, sfuUnsubscribe() then sfuSubscribe() to rebuild. The
   wantConnected guard prevents fighting a deliberate leave.

2. document visibilitychange → 'visible' — Chromium on Linux can
   silently keep the PC in 'connected' state through a suspend cycle
   without firing connectionstatechange. So we also probe on tab/lid
   wake: if the sub PC's connectionState is anything other than
   'connected'/'new'/'connecting', force the rebuild.

Both paths converge on the same teardown + re-subscribe so the SFU
sends a fresh initial SDP with every current publisher's tracks.

83 FSM tests still green; this is runtime-only and doesn't affect
the pure state machines yet.
2026-06-02 11:25:41 -04:00
..
blog phase 1: unfirehose reconstruction from session JSONL ingest 2026-05-27 13:51:14 -04:00
fonts phase 2: gap analysis — cat>> append + binary asset recovery 2026-05-27 13:54:19 -04:00
chat.html css: .row uses minmax(0, max-content) so long labels shrink + wrap 2026-06-02 09:27:55 -04:00
host-your-own.html zebra: dark mode default on all pages + unified theme key 2026-06-01 22:18:02 -04:00
how-it-works.html zebra: dark mode default on all pages + unified theme key 2026-06-01 22:18:02 -04:00
index.html web: bump mobile body padding from 1rem to 1.25rem so the right edge has visible breathing room 2026-05-31 14:13:25 -04:00
kernel.html web: bump mobile body padding from 1rem to 1.25rem so the right edge has visible breathing room 2026-05-31 14:13:25 -04:00
stamp.js web: stamp each zebra-report page with build date + md5/sha256 2026-05-28 17:50:12 -04:00
zebra-audio.html css: .row uses minmax(0, max-content) so long labels shrink + wrap 2026-06-02 09:27:55 -04:00
zebra-spaces.html zebra-spaces: rebuild SFU sub PC on connectionstatechange + visibility resume 2026-06-02 11:25:41 -04:00