zebra-report/web
Russell Ballestrini 2f1e4813d2
zebra-spaces: SFU mic fallback when mesh PC is present-but-not-connected
CLIENT_LOG telemetry showed the phone re-promoted to speaker, published
to SFU successfully, but neither the host nor the other speaker heard
them. Cause: the page's ontrack handler skipped attaching SFU mic
whenever peers.has(uuid) — even if that peer's mesh PC was in
'failed' or 'disconnected' state from an earlier role-change cycle.

Fix two paths:

1. ontrack-side: only skip SFU mic when peers.get(uuid).connectionState
   is actually 'connected'. A stale entry or a failing PC no longer
   blocks the SFU fallback; receiver hears the publisher via SFU until
   mesh actually delivers.

2. mesh-fails-side: when an existing mesh PC transitions to 'failed',
   the audio element was bound to the dying mesh stream. Reach into
   sfuStreamsByPubHex and re-attach the cached SFU stream so the
   listener hears continuous audio while the mesh reconnect runs in
   the background, instead of a silent gap.

Mesh stays the preferred path when it's actually working — only
takes over the audio binding via its own ontrack when 'connected'.
2026-06-03 12:50:50 -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: SFU mic fallback when mesh PC is present-but-not-connected 2026-06-03 12:50:50 -04:00