Commit graph

42 commits

Author SHA1 Message Date
c3597454ac
zebra-report: deploy stacked layout below 1100px (kill cramped 3-col on iPad/split-screen) 2026-06-08 14:46:14 -04:00
a8b06b5907
zebra-report: deploy fresh-stream wrap on mic ontrack + mute-gate mesh swap
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
2026-06-07 11:34:29 -04:00
3a0a30807e
zebra-report: deploy silent-listener fix + listener-bye-on-bfcache fix
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".
2026-06-06 14:48:09 -04:00
fb1fabc810
zebra-report: listener mute button doubles as audio-unlock gesture
Mirror of zebra-report 334ee82.
2026-06-03 20:57:18 -04:00
e09a1793b9
zebra-report: surface boot errors + watchFirstFrame keyframe diagnostic
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.
2026-06-03 15:51:39 -04:00
571dcce792
zebra-report: shrinkable row cells — fix music-mode label overflow 2026-06-02 09:27:57 -04:00
c44192f196
zebra-report: .row style guide + conditional grid templates — mirror 2026-06-02 09:22:13 -04:00
5d589d9986
zebra-report: grid-only layout — fix controls-eats-viewport bug, no more flex 2026-06-02 09:12:48 -04:00
1e6a6a7c1b
zebra-report: dark default + theme toggle on every page — mirror source 8c90379 2026-06-01 22:18:12 -04:00
78329ea04d
zebra-report: mute remote screen tiles by default, add unmute button
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).
2026-06-01 20:02:13 -04:00
39b74ef622
zebra-report: ship local preview tile for screen-share publisher
Mirror zebra-spaces fix + refreshed page-integrity stamps from
git.unturf.com/engineering/unturf/zebra-report d9852e6.
2026-06-01 19:45:30 -04:00
a8b184b853
zebra-report: bump mobile body padding to 1.25rem 2026-05-31 14:13:34 -04:00
4e83197fbf
zebra-report: every page now mobile-friendly, no horizontal overflow 2026-05-31 13:52:40 -04:00
583db0ab97
zebra-report: deploy zebra-spaces v0.1 + refresh integrity stamps
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.
2026-05-31 11:07:38 -04:00
37d34013ef
zebra-report: secret TTS puppet console + host-your-own page
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.
2026-05-29 15:18:00 -04:00
4ae59be669
zebra-report: auto-reconnect on drops + live mic-input switching 2026-05-28 21:29:55 -04:00
3ab9917115
zebra-report: integrity footer (build date + md5/sha256) on all pages 2026-05-28 17:50:21 -04:00
06c1e2bfec
zebra-report: fetch ephemeral TURN credentials from /turn-cred 2026-05-28 13:27:33 -04:00
11b6abaf13
zebra-report: when relayed, log how to force direct P2P (disable mDNS masking) 2026-05-28 13:09:09 -04:00
a995c8a711
zebra-report: surface media path (direct P2P vs relayed via TURN) 2026-05-28 12:56:52 -04:00
0a218c1a09
zebra-report: add how-it-works write-up + link from chat header 2026-05-28 12:50:36 -04:00
1183e17ba3
zebra-report: exponential retransmit backoff (stop hammering on lost ACK) 2026-05-28 12:44:21 -04:00
abde9079c8
zebra-report: Hamming(12,8) FEC + Gray-coded levels on the modem 2026-05-28 12:41:14 -04:00
4d2b6ba996
zebra-report: full viewport width on desktop (drop max-width cap) 2026-05-28 12:29:11 -04:00
6af92ddf4e
zebra-report: 50:50 setup/chat layout (CSS grid), strip redundant UI 2026-05-28 12:18:05 -04:00
90d5966c08
zebra-report: delivery ACKs + outbox (hold sent msgs until confirmed) 2026-05-28 12:00:30 -04:00
db382f6d44
zebra-report: echo sent message instantly (don't wait for slow transmit) 2026-05-28 11:35:33 -04:00
4eb0aab206
zebra-report: single 440 Hz carrier (kill 1 Hz beat under mono G.711) 2026-05-28 11:34:05 -04:00
c618c2c10d
zebra-report: multi-level volume modem (N-level symbols, ?levels=N) 2026-05-28 11:17:37 -04:00
23b7214b74
zebra-report: widen MARK/SPACE swing to 0.95/0.10 for decode margin 2026-05-28 10:56:12 -04:00
e3340a776b
zebra-report: force G.711/G.722 codec (fix amplitude modem over WebRTC) 2026-05-28 10:51:57 -04:00
c234cb9055
zebra-report: tunable link baud (?baud=N), default 20 for Opus reliability 2026-05-28 10:47:49 -04:00
a502b98fb2
zebra-report: send chat data at decoder baud (fix messages not crossing) 2026-05-28 10:41:46 -04:00
bc8191622c
zebra-report: publish chat UX with signaling-relay auto-connect 2026-05-28 10:09:02 -04:00
9303d5e97f zebra-report: larger QR (320px) 2026-05-27 19:03:56 -04:00
6845ecd3d3 zebra-report: share-link + QR for SDP exchange 2026-05-27 18:37:19 -04:00
885d894023 zebra-report: add proxy.uncloseai.com TURN to iceServers 2026-05-27 17:10:30 -04:00
172d140868 zebra-report: reset button + ICE candidate logging + mDNS hint 2026-05-27 16:39:26 -04:00
3826d818a2 zebra-report: WebRTC P2P rewrite — drop native daemon dep, decode in-browser 2026-05-27 16:16:03 -04:00
b74e838d35 zebra-report: sync chat page — drop self-echo frames at onRxFrame entry 2026-05-27 16:00:29 -04:00
695b6af58f zebra-report: sync chat page, add ?loopback=1 dev mode
mirrors web/chat.html from the zebra-report repo. adds a
BroadcastChannel-based loopback gated on ?loopback=1 so two
tabs of a same browser can round-trip frames without zebrad,
useful for UX validation while a real PulseAudio introspector
daemon stays in progress.

yellow warning banner makes dev mode obvious when active.
2026-05-27 15:47:09 -04:00
c2b1883e0a zebra-report: drop production volume modem chatroom
single self-contained page at /zebra-report/. ports recovered web/chat.html
from git.unturf.com/engineering/unturf/zebra-report into this site's layout.

changes vs source:
  * @font-face points at /css/chunkfive/ instead of bundled fonts dir,
    so a single chunkfive copy serves a whole site.
  * back link points at / instead of ./ which looped to self.
  * "recovered rx.c" link points at git.unturf.com repo instead of ./.

what it does:
  * web audio GainNode modulator drives PulseAudio sink-input volume
    between MARK (0.80) & SPACE (0.20) per bit, 50 baud handshake,
    higher rates after benchmark + OFFER/READY exchange.
  * passphrase mode (PBKDF2 600k iter → AES-GCM-256 group key) or
    pubkey mode (ECDH P-256 → AES-GCM-256 pairwise). toggle in UI.
  * no chat content crosses a network packet. wireshark blind.
  * RX path requires a local zebrad introspector at ws://127.0.0.1:7777,
    documented inline on a page. without it, page transmits but cannot
    receive.

dual use posture:
  * page leads with threat model + mitigation panel citing
    foxhop.net/linux-audio-ipc-attack-surface whitepaper.
  * "what this does not protect against" explicit on a page.

CI publishes via .gitlab-ci.yml on master → deploy-www.sh runner.
2026-05-27 15:39:23 -04:00