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

1.4 KiB

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.