From fea0d5cb9e2872d93cc9b521efdf6cb327fed3ec Mon Sep 17 00:00:00 2001 From: type-two Date: Fri, 17 Jul 2026 18:11:56 +1000 Subject: [PATCH] integration2: full synthetic pass of M10-M17 accepted; DIRECTIVES round 5; floor 189 Evidence in plan/status/integration2.md. v0.2.0 held for the real-footage field test. Co-Authored-By: Claude Fable 5 --- .gitignore | 2 ++ plan/DIRECTIVES.md | 37 ++++++++++++++++++++++++++++ plan/status/integration2.md | 49 +++++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 plan/status/integration2.md diff --git a/.gitignore b/.gitignore index a0586fa..c6b65dd 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ __pycache__/ .DS_Store frontend/dist/ .env +data/capsule/ +.claude/worktrees/ diff --git a/plan/DIRECTIVES.md b/plan/DIRECTIVES.md index 63c9292..13888a9 100644 --- a/plan/DIRECTIVES.md +++ b/plan/DIRECTIVES.md @@ -4,6 +4,43 @@ Written **only** by the coordinator (the human's planning session). Agents: read --- +## Round 5 — 2026-07-17 — PHASE 5 COMPLETE on synthetic; floor 189; v0.2.0 waits on the field test + +**Execution report (all same-day):** foundation2 → lanes E/G/F in parallel worktrees (per +directive 3) → integration2. Every lane merged after independent coordinator verification +(suite re-run in the lane's worktree, then on the merged tree, live-browser checks per +feature). Full evidence: plan/status/{foundation2,lane-E,lane-F,lane-G,integration2}.md. + +**Accepted:** M10–M17 all pass acceptance on the synthetic fixture. Highlights: beats recover +the 120 BPM ground truth (worst beat 30 ms); director output is beat-snapped and shape-locked +through frozen geometry helpers; export produced a 13.98 s vp9/opus webm (±5% ✓, audio track +live) driven headless via the `__f4d` pump; the capsule boots with ZERO off-origin requests, +seeks over Range, hides all write UI. Lane F self-verified live in isolated servers — model +evidence discipline, worth repeating. + +**Ratified:** CR-4 (lane G) and CR-5 (lane E) — stub-era test assertions superseded by +milestones landing, CR-1 precedent. **The test floor is now 189.** Build stays clean. + +**Standing decisions:** +1. **v0.2.0 tag is HELD** until the real-footage field test runs (it is integration2's actual + milestone; synthetic-only doesn't earn the tag). Failures go to plan/ISSUES.md, not fixes. +2. Stub-era assertions in foundation tests are now an acknowledged lifecycle: when a milestone + lands, retiring its stub assertion via a CR entry + pointer to the real coverage is the + house pattern (CR-1/-4/-5). Foundation agents: prefer writing stub tests that survive the + landing (assert shape, not stub-ness) so future lanes don't need CRs. +3. `.gitignore` gained `data/capsule/` and `.claude/worktrees/`. + +**For the human (the entire remaining critical path):** +(a) **Drop 2–4 real overlapping clips into `data/raw/`** — the field test and v0.2.0 gate on + this and only this. +(b) Focused-window eyeball pass (10 min, headphones): sync panel stays green during playback; + 🎧 spatial audio while flying around; 🎬 auto-path ride; ⏺ export and CHECK THE FRAMES + (headless verified duration/audio only — rendered frame quality needs human eyes); + 📷 photo PNG; ✨ FX bursts at full rAF rate; anchor panel roundtrip. +(c) Optional but high-impact: train a splat for the real project + (`scripts/splat_via_modelbeast.sh`) before capsuling it — photo mode + capsule get + dramatically better. + ## Round 4 — 2026-07-17 — Fresh-eyes upgrades landed; PHASE 5 begins (M10–M17) **Coordinator work landed directly on `main` (self-reviewed + live-verified):** diff --git a/plan/status/integration2.md b/plan/status/integration2.md new file mode 100644 index 0000000..9763549 --- /dev/null +++ b/plan/status/integration2.md @@ -0,0 +1,49 @@ +# Status — integration2 + +## Round 1 — 2026-07-17 — STATUS: merged (synthetic pass complete; field test GATED on real clips) + +**Directives acknowledged:** Round 4. Single-agent phase 5c, main working directory on +branch `integration2`. Coordinator and integration agent are the same session this round. + +**Merge state:** foundation2, lane/g-capsule, lane/f-social, lane/e-director2 all merged to +`main` in completion order; every merge independently re-verified (suite re-run in the lane +worktree before merging, then on the merged tree). CR-4 and CR-5 ratified at merge (CR-1 +precedent; decisions recorded in plan/CHANGE_REQUESTS.md). Suite: 127 → 169 → **189 passed**; +`npm run build` clean at every step. + +**Full-system synthetic pass — evidence per milestone:** +- **M10 (beats):** `ingest → features` on the repo project: 29 beats, tempo **120.0 BPM** + (ground truth 120), beat grid at 0.5 s spacing (~+20 ms bias, well inside ±50 ms), 40 + onsets → `data/work/beats.json` matches contract #1. +- **M11 (director):** CLI `direct --top-n 4` emits frozen-shape camPath JSON, keyframe times + ON the beat grid (3.02, 4.02, …). Live browser: 🎬 visible, click → **10 keyframes loaded, + all beat-snapped (≤11 ms), path auto-plays** (⏹ Path state). +- **M12 (export):** live browser via the `__f4d` pump at 50 Hz (hidden pane, rAF=0 — pitfall + #2 workaround; WebAudio grants the timer exemption): full-length export auto-stopped at the + last keyframe → `video/webm;codecs=vp9,opus`, **duration 13.98 s vs 14.0 expected (±5% ✓)**, + audio track present and decoding (webkitAudioDecodedByteCount 28 770 after 1.5 s), state + restored, ⏺ re-armed. NOT verifiable headless: rendered-frame quality (needs a focused + window — flagged for the human). +- **M13–M15 (lane F):** lane self-verified live in isolated servers (see plan/status/lane-F.md + — full create→rename→recolor→jump→delete roundtrip, 3840×3093 helper-free PNG, both FX + types, 0.101 ms/frame worst case). Coordinator re-check on merged main: all modules + ready=true, buttons visible, anchor panel lists 4 anchors with tag/jump/edit/delete, FX + fires on a scrub crossing of bass_drop, **zero console errors**. +- **M16 (paths):** live: save (via module's own prompt flow) → dropdown refreshes → load + reproduces keyframes **exactly** (deep-equal on toJSON) → delete refreshes. 30 lane tests. +- **M17 (capsule):** baked from the real dist (19 files, 6.8 MB), served by bundle + `serve.py`: app boots in the browser with **zero off-origin requests** + (performance.getEntriesByType — nothing to :8000), `capsule: true`, all `.write-ui` hidden, + **video seek to t=10 exact** (Range/206 over serve.py), `/api/audio/1` → 200 (WebAudio + clock live), 4 anchors + 7 events + point cloud + timeline all present. Screenshot on file. + +**Housekeeping:** `.gitignore` now covers `data/capsule/` and `.claude/worktrees/` +(lane G's note). + +**Field test:** NOT RUN — gated on 2–4 real overlapping clips in `data/raw/` (the standing +human item since Round 2). Per the adjusted plan (DIRECTIVES Round 5) the **v0.2.0 tag waits** +for the field test; the synthetic integration pass is complete and accepted. + +**Blockers:** none for code. Human items listed in DIRECTIVES Round 5. + +**Next:** field test on real footage when clips land → ISSUES.md entries → v0.2.0.