# Baby steps

These are the smallest useful steps to get a real MoQ pipeline running end-to-end.

1. Capture and inspect transport streams

- Confirm HDHomeRun discovery on the local network.
- Fetch lineup JSON and map it to `ec-core::Channel`.
- Open a raw MPEG-TS stream for a single channel and write it to disk.

2. Deterministic transcode + chunking

- Choose a reference ffmpeg profile (encoder, GOP, keyframe cadence).
- Emit fixed-duration chunks with deterministic timestamps.
- Hash chunks and verify that repeated runs are byte-identical.

3. MoQ object model

- Model track/group/object IDs and object metadata in `ec-moq`.
- Map each chunk to a MoQ object with deterministic naming.
- Validate that object IDs are stable across runs.

4. Single-node publish + replay

- Build a local relay that stores objects on disk.
- Publish from the chopper to the relay.
- Replay stored objects to a local subscriber and validate playback.

5. Multi-node relay mesh

- Integrate iroh for node discovery and routing.
- Replicate objects between two relays.
- Verify that a subscriber can pull from either relay.

6. Client surfaces

- Tauri shell that lists available tracks and plays one.
- CLI that can subscribe and dump objects for inspection.
- Static web UI that connects to a relay gateway.

7. Time-synchronized chunking

- Parse PCR + STT/TDT/TOT to anchor chunk boundaries to broadcast UTC.
- Emit deterministic TS chunks with sync metadata.
- Promote source-scoped streams to broadcast-scoped streams when synced.

8. MoQ publish path

- Wrap time-aligned chunks as MoQ objects (timing metadata attached).
- Write objects to the local relay store.
- Wire to iroh transport once MoQ session adapters are stable.

7. Production hardening

- Crash recovery and backfill.
- Observability: tracing, metrics, object retention.
- Network policies for DMCA resilience and takedown mitigation.
