Fixes ticket 0001 (fedora chrome cannot hear speakers) — fox 2026-06-07
telemetry ruled out the sink hypothesis from 0f36e02 and pinned two
coupled defects:
(A) tracks=0 race in handleRemoteSfuTrack mic branch — ev.streams[0]
can be empty at handler-time even when ev.track is live; the
silent <audio> fallback ate the listener.
(B) Mesh ontrack swapped the worklet to the mesh stream even when
the mesh track was still muted, orphaning the SFU receiver and
trapping the listener on a silent mesh source.
Mic now mirrors screen/camera/game (new MediaStream([ev.track])) and
the mesh swap waits for 'unmute' / restores SFU after a mute window.
Source commit: caa0548 in zebra-report.git
Pulls in two upstream zebra-report commits:
0ce1339 prefix-match in flushSfuStreams (kills the silent
fedora-chrome listener: ontrack races peer-joined, cache
keyed by 16-char streamID prefix, flush's strict-equality
matcher never resolved short→full, listener heard nothing
from anyone already in the room).
5e8cdad send 'bye' on pagehide for listeners even when
persisted=true (kills the closed-firefox-phone roster
zombies sitting through the 120s readTimeout window).
Server-side backstop (60s listenerAliveTTL) ships separately in
proxy.unturf.com main; the client fix above stands on its own for
the common bye-arrives case.
Fox 2026-06-06: "rebooting fedora chrome blanka because it never
could hear any speakers for days now".
Mirror of zebra-report 3ca9042 + proxy.unturf.com bc04362.
- moderation: boot failures now log to the moderator's page instead
of looking like the button did nothing (stale uuid case).
- diagnostic: watchFirstFrame fires 'still black after 2500ms — no
keyframe?' if a fresh SFU video tile never decodes a first frame.
- proxy-side companion: longer keyframe-burst on subscriber attach
so a dropped PLI no longer leaves the tile permanently black.
Mirror source 2fd2ac3 — fixes mobile autoplay so phone listeners
actually see the video pixels (was a black tile because mobile blocks
autoplay of unmuted audio).
New page: zebra-spaces.html — multi-party voice rooms (host, 2 co-hosts,
speakers, listeners) with persistent Ed25519 identity, password-vault
backup/restore, hand-raise → mic-invite → accept flow, and signed role
transitions enforced server-side. Pairs with the new zebra-spaces-signal
relay on cors-proxy.uncloseai.com.
Other pages (chat.html → index.html, zebra-audio.html, how-it-works.html,
host-your-own.html) refreshed because their integrity stamps rolled
today; nav links to zebra-spaces added on zebra-audio and host-your-own.
Deploy zebra-audio puppet console (triple-click footer seal: type -> TTS at
speech.ai.unturf.com -> into the call, send/stop) and the new host-your-own
page, plus nav links from chat (index) and how-it-works.