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.