every.channel/evolution/proposals/ECP-0076-webtransport-only-web-watcher.md

35 lines
1.4 KiB
Markdown

# ECP-0076: WebTransport-Only Browser Watcher Path
Status: Implemented
## Context
The browser watcher (`@moq/watch`) races WebTransport against WebSocket fallback by default. In production relay sessions this fallback path correlates with degraded playback behavior (frequent stream resets and unreliable audio despite active subscription).
## Decision
In `apps/web/app.js`, configure each `<moq-watch>` instance to disable WebSocket fallback before connect:
- `watch.connection.websocket = { enabled: false }`
Also set default watcher volume to full (`volume="1"`). Keep canvas live rendering, and on mount force audio signals to `muted=false` and `volume=1`.
## Rationale
- Aligns browser transport with the intended relay mode (WebTransport MoQ).
- Removes fallback-induced variability from live playback behavior.
- Keeps implementation local to web app wiring without forking upstream packages.
## Alternatives considered
- Leave WebSocket fallback enabled. Rejected because fallback races correlated with unstable live playback.
- Fork upstream watcher package for a custom transport stack. Rejected because app-level wiring changes were sufficient.
## Rollout / teardown
- Deploy connection override to disable websocket fallback and validate live session stability.
- Teardown by removing the override and restoring default transport behavior.
## Reversibility
- Remove the connection override to restore default fallback behavior.