zebra-report/docs/tickets
Russell Ballestrini 4cedd85dc6
zebra-spaces: re-apply sink on every attach + per-tick ctx.sink telemetry (kill blanka-chrome sink drift)
After caa0548 (fixes A + B for ticket 0001), blanka-chrome was still
silent. Fresh telemetry pinned a third failure mode:

  21:31:31  audio via AudioContext 47e5 sink=c38572ec…   ← good
  …leave + rejoin…
  21:31:33  audio via AudioContext 47e5 sink=default     ← drifted

No `audioCtx sink → c38572ec…` log line between the two attaches.
applySinkToAudioCtx was only invoked inside the `if (!audioCtx)` branch
in attachAudioStreamViaWorklet — a persistent audioCtx whose .sinkId
getter returned '' (system default) after a leave/rejoin never got
its sink re-applied, so every subsequent attach emitted to the system
default speaker instead of the device the user picked in the dropdown.

Fix: when audioCtx already exists AND speakerDeviceId is set AND
audioCtx.sinkId !== speakerDeviceId, call applySinkToAudioCtx() to
restore routing. Idempotent (same-sink call is a noop).

Telemetry: every 5s tick now includes `ctx.sink=…` and `want=…` when
the active sink doesn't match the picked one, so drift is visible
without grepping for the rare attach event.

Test: attach re-applies sink when audioCtx persists across leave/rejoin
and the picked sink drifted. Sandbox now exposes setSpeakerDeviceId so
the test can drive the picked-device path through the real
attachAudioStreamViaWorklet branch.

Ticket 0001 updated with the second-pass telemetry and fix (C).
2026-06-07 17:42:12 -04:00
..
0001-fedora-chrome-cannot-hear-speakers.md zebra-spaces: re-apply sink on every attach + per-tick ctx.sink telemetry (kill blanka-chrome sink drift) 2026-06-07 17:42:12 -04:00
0002-fedora-firefox-cannot-share-camera.md docs: add tickets dir + first two open defects 2026-06-07 11:24:17 -04:00
README.md docs: add tickets dir + first two open defects 2026-06-07 11:24:17 -04:00

Tickets

Defect tracker for zebra-report. Anything that takes more than 15 minutes or needs to be reproduced across browsers, devices, or sessions lives here as a numbered markdown file.

File format

Each ticket is docs/tickets/NNNN-slug.md where NNNN is monotonically increasing. New tickets get the next number.

# NNNN: Short title

**Status:** open | in-progress | blocked | fixed | won't-fix
**Priority:** P0 (silent regression / data loss) | High | Medium | Low
**Surface:** browser / OS / role (e.g. "fedora chrome listener")
**First seen:** YYYY-MM-DD (reporter's local date)
**Reporter:** handle

## Symptom
What the user sees. Plain language, no implementation details.

## Telemetry / Repro
What the signal log / browser console / pcap shows. Concrete lines if
available. How to reproduce.

## Hypothesis
What we think is going on. List candidates if not yet narrowed.

## Fix
What was tried, what landed, what commit. Empty until something ships.

## Status notes
Running log of attempts, observations, retests. Newest at the top.

Priority

  • P0 — silent regression: the app appears to work but doesn't (no error surfaced, audio routes nowhere, video goes black). Trust-eroding because the user can't tell what's wrong.
  • High — feature unavailable (can't share camera, can't enter room). Visible error or empty state.
  • Medium — degraded UX with workaround (slight latency, wrong tile order).
  • Low — cosmetic, log noise, tooling.

How tickets are resolved

  1. Reproduce or grab telemetry from the signal-server log (/var/log/zebra-spaces-signal.log — grep CLIENT_LOG + the reporter's handle).
  2. Write a failing test in test/ that pins the contract the defect violates. The test failing IS the diagnosis.
  3. Fix the code so the test passes. Commit with the test name in the message body.
  4. make stamp, push both zebra-report and the deploy repo (www.unturf.com/zebra-report/).
  5. Update the ticket Status to fixed, link the commit, note what to re-test in production.

Open

# Title Priority Surface Status
0001 fedora chrome cannot hear speakers P0 fedora chrome (any role) in-progress
0002 fedora firefox cannot share camera High fedora firefox (speaker/host) open

Fixed

(none yet)