every.channel/evolution/proposals/ECP-0072-cmaf-seedbox-invariant.md

1.8 KiB

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.