Merge integration2: phase 5 synthetic integration complete (suite floor 189)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
type-two 2026-07-17 18:11:56 +10:00
commit f7ba7f2095
3 changed files with 88 additions and 0 deletions

2
.gitignore vendored
View File

@ -7,3 +7,5 @@ __pycache__/
.DS_Store .DS_Store
frontend/dist/ frontend/dist/
.env .env
data/capsule/
.claude/worktrees/

View File

@ -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:** M10M17 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 24 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 (M10M17) ## Round 4 — 2026-07-17 — Fresh-eyes upgrades landed; PHASE 5 begins (M10M17)
**Coordinator work landed directly on `main` (self-reviewed + live-verified):** **Coordinator work landed directly on `main` (self-reviewed + live-verified):**

View File

@ -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).
- **M13M15 (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 24 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.