zebra-report/web
Russell Ballestrini 1ed5263fbc
zebra-spaces: session fingerprint + sharper camera-error breadcrumbs
Telemetry for tickets 0001 (fedora chrome silence) and 0002 (fedora
firefox cannot share camera). Every logLine call already ships to
zebra-spaces-signal via client-log; these two additions thicken the
diagnostic payload at the points each ticket needs.

1. ONE-SHOT SESSION FINGERPRINT on entry. After the 'joined as ...'
   line we now emit:

     session: ua=chrome/desktop ctx={sr=48000 baseLat=0.0107
       sinkSupp=1 sink=default} devs={out=4 in=3 cam=2}
       picked={mic=abc12345 cam=def67890 spk=}

   - ua family + mobile/desktop bucket (the bug shape often falls
     cleanly along browser-family lines: fxhp-phone-firefox vs
     fedora-chrome are different problem classes)
   - audioCtx sampleRate, baseLatency, setSinkId support, current
     sinkId — directly answers the 0001 hypothesis: if sink ≠ the
     picked spk= shortprefix, we know the audioCtx isn't routed to
     the user's chosen device even though the dropdown says so.
   - device counts (audiooutput / audioinput / videoinput) — tells
     us if a saved-deviceId is pointed at a device that's gone (0002).
   - 8-char prefix of the saved mic/cam/spk deviceIds — enough to
     correlate with the picker selection without leaking the full id.

   Wrapped + caught so a hostile UA can't break entry. Empty fields
   shown as 'n/a' / ''.

2. CAMERA-OPEN ERROR now logs e.name + constraints summary instead
   of bare e.message. Firefox returns NotFoundError vs
   OverconstrainedError vs NotAllowedError vs NotReadableError with
   nearly identical .message strings — name disambiguates the actual
   failure mode (device gone vs constraint mismatch vs permission
   denied vs camera held by another app). Constraints summary
   includes the resolution we asked for and the first 8 chars of the
   saved deviceId so a saved-id mismatch is obvious on inspection.

   AUTO-RECOVERY for OverconstrainedError+saved-deviceId: retry once
   without the deviceId constraint so the user gets default camera
   instead of a permanent fail. The most likely 0002 cause is a
   saved cameraDeviceId pointing at a removed/renamed device, and
   making the user re-pick from the dropdown after every system
   reboot would be hostile.
2026-06-07 11:27:24 -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 zebra-spaces: prefix-match in flushSfuStreams (kill silent fedora-chrome listener) 2026-06-06 14:37:18 -04:00
host-your-own.html zebra-spaces: prefix-match in flushSfuStreams (kill silent fedora-chrome listener) 2026-06-06 14:37:18 -04:00
how-it-works.html zebra-spaces: prefix-match in flushSfuStreams (kill silent fedora-chrome listener) 2026-06-06 14:37:18 -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 zebra-spaces: prefix-match in flushSfuStreams (kill silent fedora-chrome listener) 2026-06-06 14:37:18 -04:00
zebra-spaces.html zebra-spaces: session fingerprint + sharper camera-error breadcrumbs 2026-06-07 11:27:24 -04:00