# 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.
