# Lane G — Persistence & capsule (branch `lane/g-capsule`) **Scope: phase-5 milestones M16 + M17** (server-side camera paths, static memory-capsule export) — see [`20-phase5.md`](20-phase5.md). - Owned files: `backend/festival4d/capsule.py`, `backend/tests/test_paths.py`, `backend/tests/test_capsule.py`, `frontend/src/pathsStore.js`, plus the paths-route bodies in the region foundation2 marks for lane G. Nothing else. - Contracts you consume (frozen): `paths` table + route shapes, camPath JSON (validate on POST), `window.__F4D_API_BASE__` override, `manifest.capsule` read-only flag. - M17 discipline: the capsule bakes API responses to files at the **same relative paths** the live API serves — the frontend must not know the difference. Ship `serve.py` (stdlib, Range-capable) in the bundle root; acceptance explicitly includes video *seeking* under it. - The capsule is the shareable artifact of the whole project — treat "zero requests to :8000" and "write UI absent" as hard acceptance, not nice-to-haves. **Done when:** M16–M17 acceptance passes (endpoint tests + a served-capsule browser pass with evidence), `pytest` ≥ 121 + your tests, merged to `main` with synthetic end-to-end intact.