2.6 KiB
2.6 KiB
Phase 1 — Foundation (serial, one agent, branch foundation)
Scope: spec milestones M0 and M3, plus scaffolding every module as a working stub. You are building the ground the four parallel lanes stand on — bias toward correct contracts over feature depth. Nothing in the lanes can start until you merge.
Deliverables
- M0 in full (spec): repo layout, deps, git hygiene (
.gitignorebefore anything else),synthetic.pyfixture generator (fake videos with known audio offsets + fake poses + fake point cloud + a few fake seeded events with plausibleevent_types so lane C can render timeline markers), pytest wired, Vite hello page. - DB schema (
db.py) exactly as spec §2, plus tiny CRUD helpers lanes will need (get videos, upsert poses, insert events/anchors/annotations). - M3 API in full against synthetic data — every route from spec M3 implemented and returning real (synthetic-sourced) data, including Range-request video serving (verify
curl -H "Range: bytes=0-100"→ 206). Lane C will treat this API as finished. - Stubs for all lane-owned modules:
ingest.py,audio_sync.py,frames.py,sfm.py,events_ai.pyexist with the final public function signatures; bodies raiseNotImplementedError(or no-op with a log line where the API/CLI would otherwise crash).cli.pyregisters all subcommands (synthetic|ingest|sync|reconstruct|events|serve) dispatching to those functions — lanes fill bodies only, never touchcli.py/api.py. - Frozen geometry contract: implement
geometry.py::colmap_to_threejs(q, t) -> (position, rotation_matrix)per spec M5 math with a unit test (round-trip a known pose), and the mirrored JS helperfrontend/src/lib/pose.jswith the same test vectors embedded as constants. Also stub (signatures + docstrings only)slerp_pose,ray_from_pixel,triangulate_rays,nearest_point_on_rayfor lane B. - Classifier contract:
MomentClassificationmodel +MomentClassifierprotocol (spec M7) defined inevents_ai.py; provider classes stubbed. plan/CHANGE_REQUESTS.mdcreated empty with a one-line format note.
Acceptance (all must pass before merging to main)
python -m festival4d synthetic→ fixture videos + populated DB +points.ply+ ground-truth JSONs.python -m festival4d serve→ every M3 endpoint returns sane synthetic data; videos seekable in a browser.pytestgreen (fixture tests + geometry conversion test).npm run devserves the hello page fetching/api/manifestsuccessfully (CORS proven).- Spec's serial acceptance criteria for M0 and M3 all pass.