# TODO > Completed tasks moved to [DONE](./DONE.md). Remaining tasks in [BACKLOG](./BACKLOG.md). ## Playout / R2 manifest–segment layout mismatch **Chosen approach: candidate (a)** — rewrite the live manifest so its media URIs point into the current run-scoped folder before the atomic R2 publish. Go change in `backend/playout/src/playlist.go`. The `linearvoid-media` Worker stays a faithful path→R2 mapper (no serve-time rewrite). ### Remaining — Validation - [ ] Run playout (local or test lab), then: - `curl https://media.linearvoid.tv/hls/playlist.m3u8` → 200, short TTL. - Every URI in the manifest resolves `200` with `Cache-Control: public, max-age=31536000, immutable` (via the `linearvoid-media` Worker). - Confirm manifest refresh + `CF-Cache-Status` progression and no 404 on segment fetch across a run loop. - [ ] Verify slate fallback still serves correctly after the rewrite change. > Implementation (candidate a), Go unit tests, and documentation are complete — see [DONE.md](./DONE.md). ## Frontend Tests ### User Frontend - [ ] Test coverage for all critical frontend components and interactions - [ ] Add code coverage reporting and enforce minimum coverage threshold in CI/CD pipeline - [ ] Document test cases and expected outcomes ### Admin Frontend - [ ] Test coverage for all critical admin UI components and interactions - [ ] Add code coverage reporting and enforce minimum coverage threshold in CI/CD pipeline - [ ] Document test cases and expected outcomes ## Backend Integration Tests ### Cloudflare R2 - [ ] Test retrieval of segments and manifests from R2 via Cloudflare edge - [ ] Validate cache hit/miss behavior and performance metrics - [ ] Validate edge cache hit/miss behavior with repeat requests — script `scripts/validate-edge-cache.sh` created