docs(issues): #0054 — v0.5.0 unmute incident, fixed and accepted in v0.5.1

The first production image carrying the filter broke unmuting for everyone.
Records both causes (missing AudioContext on the on-path, a stray
processor: undefined leaking into getUserMedia constraints on the off-path),
the fix with its deliberately-red-first regression tests, the passed two-person
acceptance call, and the standing lesson: for changes in the microphone path,
a real-call acceptance is a rollout precondition, not an afterthought.

The filter stays gated off until the webAudioMix decision - that follow-up is
what makes ADR-0018 implementable or refutes it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Thore Cimbal
2026-08-16 12:00:00 +00:00
co-authored by Claude Opus 4.8
parent 78228e4d3b
commit 755aa3f2b5
@@ -252,3 +252,47 @@ relative Aufschlag ist also +60 %, nicht das Zwölffache.
2. **Danach ThreadNet-Web:** Abhängigkeit auf `0.19.2-threadnet.8` anheben, bauen, Image in 2. **Danach ThreadNet-Web:** Abhängigkeit auf `0.19.2-threadnet.8` anheben, bauen, Image in
die Registry, Tag im gitops-Repo anheben. die Registry, Tag im gitops-Repo anheben.
3. **Abnahme im echten Call zu zweit** steht weiterhin aus. 3. **Abnahme im echten Call zu zweit** steht weiterhin aus.
## Vorfall 2026-08-16: v0.5.0 brach das Entmuten — behoben in v0.5.1, Filter stillgelegt
⚠️ **Das erste Produktivimage mit dem Filter (v0.5.0, embedded `.8`) hat das Entmuten fuer
ALLE gebrochen** — nicht nur fuer Nutzer, die den Filter eingeschaltet hatten. Rueckrollung
auf v0.4.3 stellte den Dienst wieder her; die Ursache wurde ueber ein von sorb angefordertes
Diagnosefenster (v0.5.0 gezielt wieder ausgerollt, Browser-Konsole gesichert) festgenagelt.
**Zwei getrennte Fehler derselben Aenderung:**
1. **Filter an:** `LocalAudioTrack.setProcessor()` verlangt einen AudioContext auf dem Track.
Den gibt es nur mit `webAudioMix` beim Raum-Bau — und das steht in Element Call als
unerprobtes Upstream-TODO auskommentiert. Konsole: *"Audio context needs to be set on
LocalAudioTrack in order to enable processors"*; im SFU-Log erschien nie ein Track-Publish.
**ADR-0018 hat die Integrationstiefe unterschaetzt:** der Prototyp verdrahtete seinen
Audio-Graphen selbst und hat LiveKits Prozessor-Anbindung nie mitgeprueft.
2. **Filter aus:** Der Optionen-Bau setzte `processor: undefined` und schrieb
`noiseSuppression` um. LiveKit kopiert **jeden** Schluessel der `audioCaptureDefaults` bis
in die getUserMedia-Constraints durch, `undefined` eingeschlossen — in Safari brach damit
das Entmuten trotz publiziertem Track. In Chromium unauffaellig; die fruehe Entlastung
dieses Verdachts war ein Browser-uebergreifender Fehlschluss aus einem Chromium-Test.
**Fix (threadnet-call `dcc8643`, embedded `.9`, ThreadNet-Web v0.5.1):**
- Aus-Pfad als bedingtes Spread — identisch mit Upstream, kein `processor`-Schluessel.
- Feature-Tor `AI_NOISE_SUPPRESSION_AVAILABLE = false`: neutralisiert auch Clients mit noch
aktivierter Einstellung im localStorage (real existierender Fall), UI dahinter versteckt.
- Zwei Regressionstests, **auf dem alten Stand nachweislich rot** — erst dadurch beweisen sie
etwas.
**Abnahme bestanden 2026-08-16:** Call sorb+frank auf v0.5.1, Muten/Entmuten beidseitig,
sorbs Client mit unveraendertem localStorage. Konsolen-Fehlerbild identisch mit dem
funktionierenden v0.4.3-Stand (bekanntes Rauschen, als eigene Beobachtung notiert:
einmaliger 401 auf ein m.call-State-Event, einmaliger LiveKit-Connect-Fehlversuch mit
erfolgreichem Folgeversuch).
**Lehre (Wiederholung des Sitzungsmusters):** Die Auslieferungskette war penibel verifiziert
— npm, node_modules, webpack, CI-Artefakt, Container, ausgelieferte URL. Geprueft wurde, ob
die *Dateien ankommen*, nicht, ob die *Funktion im Zielsystem tut*. Der Call-Test zu zweit
stand als „danach" auf der Liste statt als Voraussetzung. Fuer Aenderungen im Mikrofon-Pfad
gilt ab jetzt: **Abnahme im echten Call ist Rollout-Voraussetzung, nicht Nacharbeit.**
**Offen (Folge-Entscheidung, nicht Teil dieses Issues):** Der Filter bleibt stillgelegt, bis
`webAudioMix` entschieden ist — Upstream-TODO mit Nebenwirkungen auf Echo-Unterdrueckung und
Ausgabegeraete-Wahl. Erst diese Entscheidung macht ADR-0018 umsetzbar oder widerlegt ihn.