plan/20-phase5.md is the phase-5 canonical spec: M10 beats/onsets, M11 auto-director, M12 cinematic export (lane E); M13 anchor manager + friend tags, M14 photo mode, M15 moment FX (lane F); M16 server-side camera paths, M17 static memory-capsule export (lane G). foundation2 freezes the new contracts (beats.json, camPath JSON, paths table, PATCH anchors, __F4D_API_BASE__ / manifest.capsule, transport/scene3d hooks) and pre-wires all UI so parallel lanes never touch shared files. DIRECTIVES Round 4 records the fresh-eyes upgrades (FFT caching, WebAudio master clock, spatial audio; suite floor now 121), ratifies the additive contract amendments, and sets run order: foundation2 -> E, G, F (own worktrees, mandatory) -> integration2 (real-footage field test, v0.2.0 proposal). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
18 lines
1.2 KiB
Markdown
18 lines
1.2 KiB
Markdown
# 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.
|