# Lane A — Media pipeline (branch `lane/a-media`) **Scope: spec milestone M1** (ingest + GCC-PHAT audio sync + pairwise graph solve + drift estimation). - Owned files: `backend/festival4d/ingest.py`, `backend/festival4d/audio_sync.py`, `backend/tests/test_ingest.py`, `backend/tests/test_audio_sync.py`. Nothing else. - Fill the stub bodies foundation left; do not change their signatures (CLI and API already call them). - Verify against the synthetic fixture: `python -m festival4d ingest && python -m festival4d sync` must recover the ground-truth offsets recorded by `synthetic.py` (spec M1 tolerances: ±10 ms offsets, ±3 ppm drift). - Write results through `db.py` helpers only; also export `data/work/sync.json` as spec'd. - Respect spec pitfall #5: disconnected sync-graph components → `offset_ms=NULL`, never a guess. **Done when:** spec M1 acceptance passes, `pytest` green, merged to `main` with synthetic end-to-end intact.