threadnet.8 broke unmuting in production, both ways. With the filter on, LiveKit refuses the processor because the room is built without webAudioMix, so no local track ever carries an AudioContext. With the filter off, the options builder still emitted processor: undefined and rewrote noiseSuppression - LiveKit copies every key of audioCaptureDefaults into the getUserMedia constraints, undefined included, and Safari stopped unmuting over it. The off-path is now a conditional spread that produces an object identical to upstream: no processor key at all, noiseSuppression untouched. Two regression tests pin this down and were demonstrably red on the old code. The feature itself is hard-gated off (AI_NOISE_SUPPRESSION_AVAILABLE) until the webAudioMix decision is made and tested in a two-person call. The gate also neutralizes clients that enabled the setting before - that state lives in localStorage and survives every deployment. The settings UI hides behind the same gate. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Element Call Docs
This folder contains documentation for setup, usage, and development of Element Call.