# ECP-0072: CMAF Seedbox Invariant For Relay Archive

Status: Implemented

## Context

Archive replay currently stores and serves relay groups exactly as received, but many existing broadcasts were published in `legacy` container mode. Those bytes are not browser-HLS compatible, so archive playback fails despite a valid timeline and object store.

## Decision

Make `wt-publish` default to CMAF passthrough (`--passthrough=true`) so:

- relay subscribers and archive workers observe the same CMAF fragment bytes (`moof+mdat`);
- archive replay can serve those exact bytes without re-encoding;
- the archive acts as a history seedbox of previously played chunks.

Update the NixOS module default `services.every-channel.ec-node.passthrough = true` to keep host deployments aligned with the seedbox invariant.

## Rationale

- Zero-transform archive path is simpler and more auditable.
- Exact-byte retention avoids drift between live and replay.
- Browsers can play CMAF fragments via standard HLS tooling; no custom legacy converter is required for new streams.

## Alternatives considered

- Keep `passthrough=false` as default for all publishers. Rejected because archive replay needs byte-compatible CMAF fragments.
- Re-encode archived payloads during replay. Rejected because it adds complexity and breaks exact-byte history semantics.

## Rollout / teardown

- Flip default `passthrough` to true in CLI and Nix module, then verify new archives play via HLS.
- Teardown by explicitly setting `passthrough=false` on hosts needing legacy framing.

## Reversibility

- Operators can explicitly set `passthrough = false` per host to revert to legacy framing.
- Existing archived legacy data remains readable for timeline/index use, but may require separate migration tooling for browser playback.
