ce49e8e30d
Telemetry proof: overrideOutputAudioPort(.none) routes to Receiver once, then every later toggle latches to built-in Speaker despite opts=36 (no .defaultToSpeaker) — WebKit's WebRTC engine re-forces the loudspeaker after our override. The prior build ignored .override-reason route changes and never corrected it. Now: react to ALL route changes, debounced 0.25s, and re-assert the chosen port only on a genuine mismatch (self-terminating, capped at 6/toggle to avoid thrash). setSpeaker returns a reason->port route-change trail so the log shows whether WebKit is one-shot or persistent. native marker 1.0.3-reassert. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>