LUME Creative Engine Maturation — Divergent Rail Plan
- Total phases: **5** (Phase 0 setup + Phase 1-4 reel/push/stabilize) - Total tracks: **22** (Σ across phases; mean ≈ 4.4 / phase, peak 5 in Phase 1+2) - Machines: **Mac1** (dev/CAD/spawn), **Mac4** (Unity host + Mac mini sled prototype), **Mac5** (ML, rate-limited; SAN inference only), **K11** (production publisher pod), **iPhone** (MotionMixApp capture + LUMF/LUMM source), **iPad** (LUMM fallback) - Wall time: **7 days** (phases sequential by gate; tracks parallel within phase) - Invariant config: `epsilon = 0.01
Full Public Reader
# LUME Creative Engine Maturation — Divergent Rail Plan
> Stage 4 of `/chain:genesis`. EW-governed. 7-day reel-ship + non-blocking parallel work.
> Inputs: `stage3-expand-master-plan.md` (5-pane plan), `creative-forge-output.md` (Q1 audio threading + Q2 director schema sub-rail + Q3 USB-dominant CAD).
> Output binding: this file is what each Codex pane reads to know its role and its bounds.
> Deadline: Reel-001 posted 2026-05-09 EOD. Wave 8 push lands the same day.
---
Plan metadata
- Total phases: 5 (Phase 0 setup + Phase 1-4 reel/push/stabilize)
- Total tracks: 22 (Σ across phases; mean ≈ 4.4 / phase, peak 5 in Phase 1+2)
- Machines: Mac1 (dev/CAD/spawn), Mac4 (Unity host + Mac mini sled prototype), Mac5 (ML, rate-limited; SAN inference only), K11 (production publisher pod), iPhone (MotionMixApp capture + LUMF/LUMM source), iPad (LUMM fallback)
- Wall time: 7 days (phases sequential by gate; tracks parallel within phase)
- Invariant config: `epsilon = 0.01 deliverables/hour`, `max_div = 4` (Phase 0 hits 5 — flagged in Risk Register), `stall_threshold = 2 sessions with no track-level commit`, `min_viable_transitions = 2 next-step branches per gate`
- Agents: 5 Codex panes (P1-P5) + Claude (Mac1 Sonnet 4.7 1M, this session) + Mohamed (judgment + destructive ops + photoshoot)
- Repos in scope: `lume-commerce` (software/demo, hardware/cad, launchagents), `MotionMixApp` (iOS Swift), `MotionMix` (macOS director + REEL-001 plan), `MotionMixDirector` (Swift Package — director schema target), `multicam-server` (Rust — director Rust impl deferred to Wave 9)
---
## Phase 0: Setup (Day 0 = 2026-05-02 evening)
> Gate: 5 Codex pane prompts in `evo-cube-output/`, K11 health-check green, Mac4 reachable via Tailscale, FirstDate PAT rotation status confirmed (rotated OR sentinel `WAVE8_PUSH_BLOCKED_PAT_ROTATION` written), `[home-path]` directory created with empty per-pane files, pre-commit hook target paths surveyed.
> EW Check: Bounded Divergence at risk — 5 panes brushes the cap of 4 + 1 critical. Resolved by collapsing the "Mac4 verifier handoff prompt" sub-track into the P3 pane prompt (P3 owns Mac4 anyway), and treating "K11 health check" as a 10-minute gate ritual (not a parallel track at this phase).
> Min viable transitions: 2 (→ Phase 1 if all panes online; → Phase 0.5 stall-recovery if K11 unreachable for >30min)
| Track | Task | Machine | Blocks | EW Role | Effort |
|---|---|---|---|---|---|
| Critical | Open 5 Codex panes with paste-ready prompts (one prompt per pane), set `feature/wave9-creative-engine` branch on `MotionMixApp` repo, set `chore/wave8-push-readiness` branch on `lume-commerce` | Mac1 | All phases | Rail spine | 60 min |
| A | FirstDate PAT rotation — `git -C Desktop/FirstDate remote -v`, regenerate token via GitHub Settings → Tokens, rewrite remote to use `gh`-cached cred or env-var, write status to `[home-path]` | Mac1 | Phase 3 G2 push | Divergent (security) | 20 min |
| B | K11 health-check.ps1 confirmed green — `ssh k11 "powershell -File C:\lume\health-check.ps1"`, captures NSSM 3-service status + LUME-Audio/Mocopi/Depth pkt rates, output → `[home-path]` (used as comparator on Day 7) | Mac1 → K11 | Phase 1 P1, Phase 3 G2 | Divergent | 15 min |
| C | Initialize coordination state — create `[home-path]`, write empty `paneN.txt` × 5; create `[home-path]`; write `WAVE8_NOT_PUSHED` sentinel file at `Desktop/lume-commerce/.WAVE8_NOT_PUSHED`; write `[home-path]` skeleton (5 rows, status=PENDING) | Mac1 | All phases (coordination) | Divergent | 15 min |
Deliverables:
- 5 pane prompts saved to `Desktop/evo-cube-output/lume-creative-engine-2026-05-02/pane-prompt-P{1..5}.md`
- K11 baseline health JSON
- PAT rotation status (rotated OR explicit blocker doc)
- `[home-path]` populated, `[home-path]` empty-but-present
- `WAVE8_NOT_PUSHED` sentinel + pane registry skeleton
EW Risks (this phase):
- Bounded Divergence: 4 sub-tracks here (1 critical + 3 divergent) is at cap. Adding any 5th task at this phase → defer to Phase 1.
- No Absorbing States: if FirstDate PAT can't rotate today, Phase 3 G2 push is blocked but reel ship (Phase 3 G1) continues. Two viable next-step branches preserved.
---
## Phase 1: Bridges + Reel asset capture (Day 1-2 = 2026-05-03..04)
> Gate: P1's `LumfPublisher.swift` shipped + Swift golden-bytes test green + K11 verifies ≥58 LUMF pkt/s for 60s; AudioEngine `[MixerBufferConsumer]` array refactor merged on Day 1 (single commit) and available for P2 to consume on Day 2; P3 mocopi_synth flake fixed and CHANGELOG drafted; P5 lume-config.scad MAC_MINI constants committed; P4 OSC :9050 listener bound (no SAN bridge yet — that's Phase 2).
> EW Check: Cross-Layer Forcing most at risk — P1's consumer-array refactor is the single shared file across P1/P2/P4. If P1 doesn't land Day 1 morning, P2's AudioCaptureWriter can't compile. Mitigation: P1 declares the consumer-array commit as Track Critical's first deliverable; P2 + P4 wait on a `paneN.txt` claim release before opening AudioEngine.swift.
> Min viable transitions: 3 (→ Phase 2 if P1+P2 capture path green; → Phase 1.5 audio-fallback if LumfPublisher fails on K11 (use Strudel-render path for reel audio); → Phase 1.5 photoshoot-prep if Mac1 work outpaces Mohamed's prep)
| Track | Task | Machine | Blocks | EW Role | Effort |
|---|---|---|---|---|---|
| Critical (P1) | (a) Day 1 AM: refactor `AudioEngine.swift` `onMixerBuffer` → `[MixerBufferConsumer]` protocol + array (single commit, P1 first deliverable, declares claim on AudioEngine.swift). (b) Ship `MotionMixApp/Services/LumfPublisher.swift` ~210 lines per forge V2 (ring-buffer + 60Hz publisher thread, NOT V1 mainMixer dispatch_async — see forge Q1). (c) `LumfPublisherTests.swift` golden-bytes + `testNoAllocationInHotPath` (mach_vm_allocated_size delta ≤ 0). (d) Day 2: K11 verify ≥58 pkt/s. (e) K11 NSSM `LUME-Audio` Args gain `--prefer-device --heartbeat-file C:\lume\heartbeat\device.txt` (Args ONLY, NOT service registration block). | Mac1 → iPhone (TestFlight or USB run) → K11 | Phase 2 P2 photoshoot, Phase 2 OSC echo loop | Rail spine | 8-10h |
| A (P2) | (a) Day 1: `Desktop/MotionMix/REEL-001-PRODUCTION-PLAN.md` (~150 lines: concept, 3 looks, 3 motion concepts, shotlist, audio capture method, composite spec, brand voice). (b) Day 1 PM (after P1's consumer-array refactor): `MotionMixApp/Services/AudioCaptureWriter.swift` (~120 lines, registers as 3rd consumer on `[MixerBufferConsumer]`, writes 30s rolling WAV 48k/16-bit stereo). (c) Day 2: `software/demo/scripts/record-unity-reel.sh` (~80 lines, Darwin avfoundation OR Windows gdigrab+NVENC). | Mac1 (scripts), iPhone (AudioCaptureWriter ride-along) | Phase 2 photoshoot day | Divergent | 6h |
| B (P3) | (a) Day 1: investigate `test_mocopi_synth.py::test_beat_phase_clock_wraps_at_one_beat` flake — read failure mode, determine isolation-bug vs real-timing-bug. (b) Day 1: write `software/demo/unity/lume_pcloud/CHANGELOG.md` (~80 lines, Waves 1-8 commit anchors from ARCHITECTURE.md). (c) Day 2: apply mocopi fix (isolation refactor; if real timing bug → escalate to Mohamed, do NOT silently widen tolerance). (d) Day 2: write `software/demo/unity/lume_pcloud/MAC4-VERIFICATION-RUNBOOK.md` (~120 lines, 10-point smoke test). | Mac1 | Phase 3 push readiness | Divergent | 5h |
| C (P4) | Day 2: bind UDP `:9050` listener in `MotionMixApp/Services/OSCService.swift` (extension or revision, mirror LiveStreamServer.swift Network.framework pattern). Decode 7 OSC paths from Wave 8 (`/lume/right-hand-vel` etc.). Add to `ParamMapper.Extras` as additive `Float?` fields (`unityRightHandVel`, etc.). No SAN bridge yet — pattern bridge ships in Phase 2. | Mac1 | Phase 2 SAN-bridge follow-on | Divergent | 5h |
| D (P5) | Day 1: `hardware/cad/lume-config.scad` — add MAC_MINI constants (W=127, D=127, H=50, FOOT_PITCH=110) + forge Q3 USB-topology constants (RACEWAY_USB_A_W/H, RACEWAY_USB_C_W/H, RACEWAY_HDMI_W/H, SLED_DECK_VESA=100). Day 2: refactor `lume-pod.scad` `pod_compute_sled()` (NO box parameter — universal per forge Q3) + add `pod_rear_raceways()` carving K11+MacMini raceways into rear face + `pod_vents_universal()`. Render `exports/pod_compute_sled_universal.stl`. | Mac1 (OpenSCAD) | Phase 2 sled print | Divergent | 6h |
Deliverables:
- `LumfPublisher.swift` + `LumfPublisherTests.swift` (golden-bytes + no-allocation tests pass)
- AudioEngine `[MixerBufferConsumer]` array refactor (single Day 1 commit)
- `AudioCaptureWriter.swift` (rides on consumer-array)
- `record-unity-reel.sh` smoke-tested on K11 (≥5s capture)
- K11 NSSM Args updated (prefer-device flag) — service registration UNTOUCHED
- `REEL-001-PRODUCTION-PLAN.md`, `CHANGELOG.md`, `MAC4-VERIFICATION-RUNBOOK.md`, mocopi flake fixed
- OSC :9050 listener live + 7 channels in ParamMapper.Extras (verifiable)
- `lume-config.scad` + `lume-pod.scad` updated, universal sled STL renders
EW Risks:
- Cross-Layer Forcing: P1's consumer-array commit is on the critical path AND blocks P2 + P4. If P1 stalls Day 1, the rule fires: P2 + P4 force-redirect to spec-only work (read forge §Q1, draft test cases) until P1 lands. Critical's stall ≠ everyone idle.
- Min Entropy: P3's mocopi flake is judgment-call — if root cause is hidden, P3 risks producing zero novelty. Forge counter: P3's CHANGELOG + MAC4-VERIFICATION-RUNBOOK are independent of the flake; ship those first, return to flake.
---
## Phase 2: Reel music + Unity capture + sled print + bridges-b/c (Day 3-4 = 2026-05-05..06)
> Gate: Photoshoot Look 1 (Day 3) + Looks 2-3 (Day 4) shot with stills + motion clips + AudioCaptureWriter recording; pre-commit don't-touch hook installed in 3 repos and blocks a deliberate test violation; pane registry JSON populated + daily `/sync-panes` runs once; P4 SAN bridge debounced + dwell-gated; P5 sled STL + 2 adapter STLs render and slice.
> EW Check: Min Entropy at risk — Day 3 photoshoot is real-world (location, lighting, model, charging). If shoot fails, the entire reel-critical track produces zero artifacts on Day 3, and Day 4's Looks 2-3 attempt absorbs the missed look. Forge counter: pre-shoot dry run on Day 2 EOD (test 1 still + 1 motion clip). Solo-self-shot is the default plan; model coordination is the stretch.
> Min viable transitions: 3 (→ Phase 3 composite if all 3 looks shot; → Phase 2.5 reshoot-Day-5 fallback if Day 3+4 shoot quality insufficient; → Phase 2.5 strudel-only-audio fallback if SAN audition fails)
| Track | Task | Machine | Blocks | EW Role | Effort |
|---|---|---|---|---|---|
| Critical (P2 + Mohamed) | Day 3: Photoshoot Look 1 (stills via ShootView + 10-15s motion clip + AudioCaptureWriter recording during motion + iPad LUMM as skeleton fallback if iPhone is being used as stills cam). Day 4: Photoshoot Looks 2 + 3. Each look: 24-36 stills + 10-15s motion + 30s audio capture. | iPhone + iPad + Mac1 | Phase 3 reel composite | Rail spine | 6h shoot + 1h staging |
| A (P3) | Day 3: write `Desktop/MotionMix/director-protocol.md` (~120 lines, doc only — cite `1ea8da7 Phase 5a proof token model`, do NOT redefine). Day 3: NEW SUB-RAIL per forge Q2 — write `MotionMixDirector/Sources/MotionMixDirector/Models+Director.swift` (Codable structs: `DirectorState`, `SessionState`, `CueState`, `LookState`, `PerformerState`, `ConsentState`, `TelemetryState`, `DirectorCommand` enum, `DirectorRole`). Schema-without-impl ships even though Rust `multicam-server/src/director_bus.rs` defers to Wave 9. This is the artifact that prevents director drift. Day 3: write `software/demo/PRE-COMMIT-DONT-TOUCH.sh` (~100 lines) and install in `lume-commerce`, `MotionMix`, `MotionMixApp` git hooks. Day 4: write `software/demo/scripts/sync-panes.py` (reads pane registry + NUMU stream + git logs → emits `Desktop/lume-fleet-state-YYYY-MM-DD.md`); Mohamed runs once Day 4 evening. | Mac1 | Phase 3 push readiness | Divergent | 8h |
| B (P4) | Day 4: ship `MotionMixApp/Services/SANPipelineBridge.swift` (~80 lines) — hook SAN 30Hz output, debounce 750ms + confidence > 0.6 + 16-bar minimum dwell, call new additive `StrudelWebEngine.setSANPattern(_:confidence:)`. Day 4: round-trip integration test — Unity 30s motion → OSC → ParamMapper.Extras shows non-zero variance + Strudel webView shows ≥2 pattern replacements over 120s. Forge Q1 schema decision: SAN pattern_id/confidence/cluster ride OSC `/san/pattern_id` etc., NOT a new LUMF schema field — additive 3 OSC paths on K11's `LumeMotionToAudio.cs`. | Mac1 + iPhone (Echelon SAN runtime) + K11 (Unity OSC) | Phase 3 closes audio→visual loop | Divergent | 6h |
| C (P5) | Day 3: render `adapter_k11_vesa75.scad` + `adapter_macmini_clamp.scad` (forge Q3 add-ons), write `software/demo/launchagents/mac4/{com.lume.audio.plist, com.lume.mocopi.plist, com.lume.depth.plist, install-mac4.sh}`. Day 4: verify `pyorbbecsdk2` macOS arm64 wheel (`pip download --platform macosx_14_0_arm64`); document source-build fallback in UNIVERSAL-SLED.md. Day 4: write `hardware/cad/UNIVERSAL-SLED.md` (~120 lines, swap-test runbook, required cables per box, fit-test pre-flight). Day 4: queue Plate 1 print on Elegoo Max — universal sled (5h ASA) + 2 adapters (30 min addenda parallel-print on same plate, per forge Q3 §3). | Mac1 (CAD) → Mohamed (slicer + printer + TCC) | Phase 3 fit-test | Divergent | 5h CAD/plist + 5h unattended print |
| D (P3 ↔ shared) | Day 3 evening: install pane-registry update hook (every commit appends row to `[home-path]` via `evo3_hooks.py` already wired). Day 4 evening: first `/sync-panes` synth → `Desktop/lume-fleet-state-2026-05-06.md`. Cross-layer forcing in action: this track exists to detect P1↔P2↔P4 conflicts on AudioEngine.swift before they merge-break the audio path mid-shoot. | Mac1 | All remaining phases | Divergent (coordination meta-track) | 1h |
Deliverables:
- 3 looks shot (stills + motion + audio)
- `director-protocol.md` doc + `Models+Director.swift` Codable schema
- Pre-commit don't-touch hook live in 3 repos (deliberate-violation test passes)
- `SANPipelineBridge.swift` + `setSANPattern` extension live, integration test green
- 3 STLs + 3 plist files + `install-mac4.sh` + `UNIVERSAL-SLED.md`
- Plate 1 print queued (5h unattended)
- First `/sync-panes` daily synth file
EW Risks:
- Min Entropy: photoshoot day produces 0 novelty if Mohamed is blocked (location, weather, model). Mitigation: Day 2 EOD pre-shoot dry run (1 still + 1 motion clip) catches setup failures. Fallback: if Day 3 fully blown, compress Looks 1+2 into Day 4 with shorter shotlist; Look 3 deferred to Day 5 morning, accepting reel-quality cost.
- Bounded Divergence: Phase has 5 tracks (Critical + A/B/C/D). At cap. Track D is intentionally lightweight (1h coordination meta-task, not a new code track), so this stays within EW spirit.
- Cross-Layer Forcing: if SAN audition (Phase 3 prep) reveals SAN audio sounds bad, P4's Phase 2 work needs redirect — Strudel-render fallback becomes default reel audio, P4's SAN-bridge becomes "shipped but disabled by default" (still a delivered artifact, doesn't gate reel).
---
## Phase 3: Reel post + Mac4 verify + Push (Day 5-6 = 2026-05-07..08)
> Gate: Reel-001 final composite at `Desktop/MotionMix/reel-001-final.mp4` 1080×1920 ≤30s ≤30MB; caption drafted + brand-voice reviewed; Mac4 10-point runbook all green; `WAVE8_NOT_PUSHED` sentinel file STILL PRESENT (push lands in Phase 4 Day 7); P5 sled fit-tested (or fit-test deferred to Wave 9 with explicit doc); audio audition winner picked (SAN OR Strudel-render OR licensed fallback flagged).
> EW Check: No Absorbing States most at risk — Mac4 verification could fail in 10 different ways (TCC, Tailscale, NSSM publisher rate <58 Hz, F12 panel won't open, etc.). Each failure must have ≥2 viable next-step branches. Forge mitigation: every runbook check has a paired remediation script; failures defer push by ≤24h, do not block reel.
> Min viable transitions: 3 (→ Phase 4 ship if all green; → Phase 3.5 patch-and-retest if Mac4 verification fails on a fixable point; → Phase 3.5 reel-only-ship-defer-push if push reveals real bug — reel still ships Day 7, Wave 8 push slips to Wave 9 day 1)
| Track | Task | Machine | Blocks | EW Role | Effort |
|---|---|---|---|---|---|
| Critical (Mohamed + P2) | Day 5: Unity recording session at K11 — `record-unity-reel.sh × 3 looks`, 30s each, drops to `Desktop/lume-reel-recordings/reel-001/`. Day 5 evening: audio audition — A/B SAN-driven (3 motion clips through Echelon SAN at iPhone) vs Strudel-render fallback (recorded via AudioCaptureWriter), Mohamed picks. Day 6: composite via ShootView's ReelBuilderView — stills + motion clips + Unity LUME visual + audio = 30s 9:16 1080×1920 ≤30MB. Day 6: caption draft + brand-voice review (no em dashes, no AI-isms, terse — see master plan §5 caption template). | Mac1 + K11 + Mohamed | Phase 4 ship | Rail spine | 4h record + 4h composite + 1h caption |
| A (P3 + Mohamed) | Day 6: Mac4 10-point verification runbook. Mohamed walks through each gate (Tailscale up, F12 calibration panel opens, F2 panel shows depth + audio reactivity, LUMD ≥28 Hz, LUMF ≥58 Hz, LUMM ≥58 Hz, auto-wire menu, Procedural Tunnel ≥30 fps, F12 JSON persists across restart, OSC :9050 emits 7 channels). P3 awaits results, fixes any failures. Day 6: confirm Wave 8 commits visible on `origin/main` … STILL HAS `WAVE8_NOT_PUSHED` sentinel — push lands Day 7. P3 readies the post-push cleanup script (`rm .WAVE8_NOT_PUSHED`). | Mac4 + Mac1 | Phase 4 push G2 | Divergent | 3h Mac4 + 1h fixes |
| B (P5 + Mohamed) | Day 5 evening: print finishes, P5 inspects fit on physical box (whichever is bench-accessible — K11 default; if Mac mini M4 is on bench, fit-test that path instead, document which). Day 6: caliper-verify + write fit-test result to `UNIVERSAL-SLED.md`. If fit fails on Mac mini foot recess (forge failure-mode C: 14mm vs 13.5mm rumor) → reprint with adjusted recess; Mac mini sled completion can slip to Wave 9 closeout, K11 path unchanged. | Mac1 (caliper) + Mohamed (physical fit) | Phase 4 closeout (non-blocking for reel) | Divergent | 1h fit-test |
| C (P3) | Day 5: write `software/demo/scripts/post-push-cleanup.sh` (Day 7 helper that removes `WAVE8_NOT_PUSHED` sentinel + posts NUMU event "wave8 pushed"). Day 6: pre-flight push checklist — `gh repo view`, confirm origin/main HEAD vs Mac1 main HEAD, draft commit-by-commit cherry-pick fallback if a single commit needs to be split (none expected, but contingency exists). | Mac1 | Phase 4 push G2 | Divergent | 1h |
Deliverables:
- Reel-001 final composite MP4 + caption draft
- Mac4 10-point runbook green-checked (or explicit blockers documented + push deferred)
- Sled fit-test result (or reprint scheduled)
- Post-push cleanup script ready
EW Risks:
- No Absorbing States: Mac4 verification fails on point 4 (LUMD <28 Hz). Branch 1: K11 publisher restart fixes it (transient). Branch 2: real bug, defer push to Wave 9. Both branches preserve reel ship (Phase 4 G1).
- Min Entropy: Day 6 composite stalls if ShootView's ReelBuilderView has a bug surfaced for the first time. Forge counter: P2's task #5 (Day 5) explicitly drives ReelBuilderView with realistic inputs (3 looks of stills + 3 motion clips) — bugs surface on Day 5 not Day 6.
- Cross-Layer Forcing: if Mac4 fails verification, P5's sled fit-test (Track B) does NOT block — forces ahead. Track B's fit-test result feeds the post-mortem regardless.
---
## Phase 4: Ship + Push + Stabilize (Day 7 = 2026-05-09)
> Gate: Reel posted to Instagram + TikTok. `WAVE8_NOT_PUSHED` sentinel removed via post-push-cleanup.sh. Pre-commit don't-touch hook surveys clean (no violations on push-then-cleanup commit). 24h monitoring loop active for ≥1 viewer comment on music or visual.
> EW Check: No Absorbing States — final phase must NOT terminate the rail. Wave 9 backlog is the explicit continuation: HD1 mount + SAN V6 retrain (music-gen Phase C), director Rust impl (forge Q2 sub-rail's pending half), Mocopi-pro activation, FirstDate hygiene closeout, bar display caliper-verify. Phase 4 hands the baton, doesn't drop it.
> Min viable transitions: 2 (→ Wave 9 plan if Phase 4 closes clean; → Phase 4.5 hot-fix loop if reel post breaks platform terms or push reveals immediate prod bug)
| Track | Task | Machine | Blocks | EW Role | Effort |
|---|---|---|---|---|---|
| Critical (Mohamed) | Day 7 morning: POST REEL to Instagram Reels + TikTok (manual). Day 7 evening: PUSH WAVE 8. Mac1 → `git push origin main`. Pre-commit hook validates (sentinel still present blocks; Mohamed manually removes sentinel via `rm .WAVE8_NOT_PUSHED` AS PART OF the same commit-then-push flow, OR runs `post-push-cleanup.sh` after push lands). 7 Wave 8 commits land: `da8d1478, c5194f92, 2a6e6b25, 95387a02, 8139a931, 8fb6fe75, e21ad971` (and any Wave 9 work-in-progress branches if Mohamed elects to merge them). | Mac1 + IG + TikTok | Wave 9 | Rail spine | 1h post + 30 min push |
| A (Codex P3) | Day 7 evening (post-push): write retrospective `[home-path]` (≤200 lines, what shipped, what slipped, what we learned about the 5-pane coordination protocol). | Mac1 | Wave 9 plan | Divergent | 1h |
| B (Mohamed) | Day 7+ (ongoing 48h): monitor reel for ≥1 viewer comment about music or visual (success criterion R-001). Capture screenshots of comments → `Desktop/MotionMix/reel-001-comments-log.md`. | IG + TikTok | Wave 9 (audience signal) | Divergent | 30 min/day × 2 days |
| C (Codex P5 — optional) | Day 7+ if sled didn't fit on Day 6: reprint adjusted clamp adapter, fit-test, update UNIVERSAL-SLED.md. Optional — non-blocking for reel ship; closes hardware loop. | Mac1 + Mohamed | Wave 9 hardware closeout | Divergent | 5h print + 30min fit |
Deliverables:
- Reel posted (URL captured to memory)
- Wave 8 visible on `origin/main`
- Retrospective in memory
- 48h comment-log seeded
EW Risks:
- No Absorbing States: even if reel posts and Wave 8 pushes, Phase 4 must NOT be terminal. Wave 9 plan is queued (HD1 + SAN V6 + director Rust impl + bar display + Mocopi-pro). Track A's retrospective explicitly seeds Wave 9.
---
## Phase 5 (Wave 9 backlog handoff — out of scope this rail; documented for No Absorbing States)
> Not executed in this 7-day rail. Listed so Phase 4's gate has a real continuation path:
> - HD1 mount + SAN V6 retrain (forge Q1 schema-extension if needed; music-gen Phase C)
> - `multicam-server/src/director_bus.rs` Rust impl (forge Q2 sub-rail second half — Codable schema already shipped Phase 2)
> - Mocopi-pro activation (mail-arrival dependent)
> - FirstDate token rotation closeout if Phase 0 Track A only documented blocker
> - Bar display caliper-verify (#177)
> - `pyorbbecsdk2` macOS arm64 source-build if pip wheel missing
> - Diffusion / training-pipeline triage (memory §4 pane 7, optional)
---
Coordination protocol (the don't-collide doc)
Wave 8 lesson recorded in memory (2026-05-02): 2 agents touched `LumeWaveAutoWire.cs` in parallel; later writer won, earlier wasted edits. Pre-compact summary was stale — git HEAD vs summary text disagreed, and a parallel agent finished Steps 4-6 while my session was redoing them.
The 5 rules below close that loop. They are NOT optional. Every pane prompt MUST include them.
- Rule 1 — Claim before touch: Each pane DECLARES its file claim at session start by writing absolute paths (one per line) to `[home-path]`. The claim file is the ground truth for "what files this pane will edit."
- Rule 2 — Read before write: Before any `Edit` or `Write` operation, the pane runs `cat [home-path] | grep -F <target-path>` to check overlap with other panes' claims.
- Rule 3 — Newer claim defers: If overlap detected, the newer (later-timestamped) claim defers and writes a coordination note to `[home-path]` with the path + both pane IDs + proposed resolution. Mohamed resolves via direct prompt to one pane.
- Rule 4 — Commit prefix: Every git commit message starts with `[paneN]` (e.g. `[P1] feat: LumfPublisher.swift V2 ring-buffer + 60Hz publisher`). Pre-commit hook from P3 enforces this prefix on all 3 repos.
- Rule 5 — Pane closure synthesis: When a pane finishes its scoped work, it writes a 5-line synthesis to `[home-path]` (what shipped, what's blocked, file list, last-commit-sha, status ∈ {COMPLETE, BLOCKED, DEFERRED}). The daily `/sync-panes` synth reads these.
Special case — AudioEngine.swift coordination (P1 ↔ P2 ↔ P4):
The `[MixerBufferConsumer]` array refactor lands in P1's first commit Day 1 AM (Phase 1 Critical, deliverable (a)). Until that commit lands on `feature/wave9-creative-engine`:
- P2's AudioCaptureWriter cannot compile.
- P4's OSC bridge does not need AudioEngine.swift, but waits anyway as a courtesy to keep the working tree clean.
---
Pane assignment (final, ordered by dependency)
| Pane # | Focus | Primary machine(s) | First task | Success criterion | Don't-touch |
|---|---|---|---|---|---|
| P1 | Bridge (a) PCM → LUMF + AudioEngine consumer-array refactor | Mac1 (dev) + iPhone (TestFlight/USB run) + K11 (verification only) | Day 1 AM: refactor `AudioEngine.swift onMixerBuffer → [MixerBufferConsumer]` (single commit). Then ship `LumfPublisher.swift` per forge V2 (ring-buffer + 60Hz publisher, NOT V1 dispatch_async). | Swift golden-bytes test green + `testNoAllocationInHotPath` green + K11 LUMF pkt rate ≥58 Hz over 60s window | LUMF wire-format magic & byte order; LumeAudioFftReceiver public API; K11 NSSM service registration block (Args may be flagged); PRODUCTION SYSTEM — Mohamed runs all destructive ops |
| P2 | Reel-001 production scripting + photoshoot enablement | Mac1 (scripts) + iPhone + iPad (LUMM fallback) → Mac4/K11 (Unity recording) | Day 1: write `REEL-001-PRODUCTION-PLAN.md`. Day 1 PM: AudioCaptureWriter.swift on top of P1's consumer-array. | One Reel posted IG + TikTok by 2026-05-09 EOD with stills+motion+Unity-visual+engine-driven-audio | Wave 8 commits, Unity component public APIs, ShootView ReelBuilderView ffmpeg transition list (additive composites only); PRODUCTION SYSTEM |
| P3 | Wave 8 push readiness + director schema sub-rail (forge Q2) + coordination infra | Mac1 (dev) + Mac4 (verification, Mohamed-driven) | Day 1: investigate mocopi flake; write CHANGELOG. Day 2: MAC4-VERIFICATION-RUNBOOK. Day 3: director-protocol.md doc + `Models+Director.swift` Codable structs (forge Q2 sub-rail) + pre-commit hook. | `pytest tests/` 100/100 across 10 runs; CHANGELOG + RUNBOOK + director-protocol committed; Mac4 10-point green; pre-commit hook blocks deliberate violation; Wave 8 pushed Day 7 (Mohamed-driven) | NSSM service registration; Unity public APIs; Wave 8 commit SHAs (push only, no rewrite); MotionMix Phase 5a proof token model (cite, don't redefine); PRODUCTION SYSTEM |
| P4 | Bridges (b) OSC :9050 + (c) SAN→Strudel | Mac1 (dev) + iPhone + K11 (Unity OSC publisher already shipped Wave 8) | Day 2: bind OSC :9050, decode 7 channels into ParamMapper.Extras. Day 4: ship `SANPipelineBridge.swift` + `setSANPattern` + 750ms+16-bar+conf>0.6 gating. | 7 OSC channels in ParamMapper.Extras with non-zero variance; ≥2 pattern replacements over 120s separated by ≥16 bars; no regression in `play()/setTempo()` callsites | StrudelWebEngine `play()` / `setTempo()` API (additive only); ParamMapper's existing MappedValues struct (additive Extras only); forge Q1 decided SAN rides OSC NOT new LUMF field — do not extend LUMF schema; PRODUCTION SYSTEM |
| P5 | Universal sled CAD (forge Q3 USB-dominant) + Mac4 launchd | Mac1 (CAD/plists) + Elegoo Max (print) + Mohamed (TCC, fit-test) | Day 1: lume-config.scad MAC_MINI + raceway constants. Day 2: `pod_compute_sled()` universal + `pod_rear_raceways()` + `pod_vents_universal()` per forge Q3. | Universal sled STL + 2 adapter STLs render and slice; ≥1 sled prints + fit-tests successfully; Mac4 launchd plists install + 3 services live with packet rates within 5 |
Cross-pane don't-touch (universal):
- All wire format magic bytes: `LUME` (0x4C554D45), `LUMD` (0x4C554D44), `LUMF` (0x4C554D46), `LUMM` (0x4C554D4D), `LUMC` — pinned by `tests/test_wire_format_golden.py`.
- 21 Unity component public APIs — additive only, no field renames or signature changes.
- K11 NSSM service registration blocks in `software/demo/launchagents/k11/install-services.ps1` — runtime Args may be parameter-flagged; service registration block stays as-is.
- Wave 8 commits not-pushed: `da8d1478, c5194f92, 2a6e6b25, 95387a02, 8139a931, 8fb6fe75, e21ad971` — Mohamed pushes after Mac4 verification.
- LUMF byte order in `audio_pub.py:send_lumf` — pinned by golden-bytes test.
- MotionMix repo proof-token model (commit `1ea8da7 feat(director): Phase 5a proof token model`) — read it, don't redefine its schema.
- Production system constraint — Mohamed runs all destructive operations manually. No Codex pane may `git push`, `launchctl unload && load`, `nssm remove`, or post to social media on Mohamed's behalf.
---
Risk register (per phase)
| Risk | Phase | Probability | Impact | Mitigation | Owner |
|---|---|---|---|---|---|
| FirstDate PAT in repo (security finding stage0 §F.1) | 0 → 3 | Critical (already exists) | Critical | ROTATE TOKEN BEFORE ANY PUSH (Phase 0 Track A). If un-rotated by Day 7, Phase 4 push BLOCKED — sentinel `WAVE8_PUSH_BLOCKED_PAT_ROTATION` enforces this. | Mohamed (Phase 0) |
| AudioEngine main-thread block / FFT in hot path | 1 | Med | Catastrophic | Forge Q1 V2 selected: SPSC ring buffer (lock-free) + 60 Hz publisher thread + `testNoAllocationInHotPath` test gate | P1 |
| Two panes touch same file (AudioEngine.swift in particular) | 1 → 2 | Med-High (Wave 8 lesson) | Wasted work | Pane claims protocol (Rules 1-5). P1's consumer-array commit lands Day 1 AM as exclusive claim; P2 + P4 wait via `git log` poll. | All panes |
| LUMF wire-format collision (Swift produces packets that differ from Python golden by ≥1 byte) | 1 | Med | High (silently degrades reel-defining feature) | Swift golden-bytes test ports Python golden byte-for-byte | P1 |
| :9701 publisher collision (K11 NSSM vs MotionMixApp both publishing) | 1 | High if not gated | High (glitchy audio reactivity in reel) | K11 NSSM Args gain `--prefer-device --heartbeat-file`; PowerShell side reads heartbeat mtime, yields if <2s old. NSSM service block UNTOUCHED. | P1 + Mohamed |
| Mac4 TCC blocks Femto Bolt | 2 | Low (assumed unblocked from prior Wave) | Med | Fall back to K11 only (already shipping). Mac4 sled work continues but can slip to Wave 9. | P5 |
| HD1 unmounted on Day 5 audio audition | 3 | High | Med | Real drum stems unavailable; SAN V6 retrain deferred to Wave 9 (already in master plan music-gen Phase C). Fallback for reel: SAN V5 inference OR Strudel-render. | Mohamed |
| Photoshoot logistical fail (location, lighting, model, charging) | 2 | Med | High (no shoot, no reel) | Day 0 pre-flight checklist. Day 2 EOD pre-shoot dry run. Solo-self-shot via ShootView RemoteControlView is the default; model coordination is stretch. | Mohamed |
| iPad LUMM degrades in shoot lighting | 2 | Med | High (skeleton fallback unusable) | Pre-shoot test under shoot lights Day 2. If degraded, swap to MotionMixApp on iPhone for skeleton (with iPad as stills cam). | Mohamed |
| Reel music sounds bad on listen (SAN V5 unproven for non-trained ear) | 3 | Med-Low | Med-High | A/B audition Day 5: SAN-driven vs Strudel-render. Pick best. Last-resort licensed track from Rekordbox with explicit "stretch missed" flag. | Mohamed |
| Wave 8 push reveals real Mac4 bug | 3 | Low-Med | Med | Mac4 10-point runbook = verifier. Any failure → defer push to Wave 9 day 1. Reel still ships. | P3 + Mohamed |
| ASA shrinkage on Mac mini foot recess (forge Q3 failure-mode C) | 3 | Med | Low (sled non-blocking for reel) | Caliper-verify before VHB. Reprint with adjusted recess if needed. Document in UNIVERSAL-SLED.md. K11 path always works. | P5 + Mohamed |
| OpenSCAD render timeouts on universal pod_compute_sled | 1-2 | Low | Low | Render incrementally, validate each module independently. Forge already broke pod_rear_raceways into separate module. | P5 |
| pyorbbecsdk2 macOS arm64 wheel missing | 2 | Low | Med (Mac4 sled deferral, not reel block) | Source-build documented as fallback in UNIVERSAL-SLED.md. | P5 |
| Strudel pattern thrash (P4) | 2 | High without mitigation | Med | 750ms debounce + confidence > 0.6 + 16-bar minimum dwell (P4 design). Test gate: 120s session shows ≤4 pattern replacements. | P4 |
| Director schema drift between 3 directors | 2 → Wave 9 | Med (every refactor risks it) | High (split-brain mid-show) | Forge Q2 sub-rail: Codable structs ship Phase 2 even though Rust impl defers. `Models+Director.swift` is the schema-of-record. Pre-commit hook (P3 task) refuses field RENAMES. | P3 |
| `WAVE8_NOT_PUSHED` sentinel accidentally removed mid-week | 1 → 4 | Low | Med | Sentinel is `.WAVE8_NOT_PUSHED` in repo root, gitignored. Only `post-push-cleanup.sh` removes it. Pre-commit hook fails commit if sentinel removed AND `git push` not yet executed. | P3 |
| Coordination collapse across 5 panes (Wave 8 lesson) | All | Low-Med given protocol | Med-High | Pane claims protocol + daily `/sync-panes` synth + commit prefix `[paneN]`. Recorded in protocol section above. | All panes |
| Phase 4 becomes absorbing state (rail terminates at ship) | 4 | Low (explicit Wave 9 backlog exists) | Low | Phase 5 documented above as Wave 9 handoff. Retrospective Track A seeds it. | Mohamed |
---
Daily phase summary
| Day | Date | Phase | Critical track gate | Parallel tracks active | Risk-of-the-day |
|---|---|---|---|---|---|
| 0 | 2026-05-02 (PM) | 0 | 5 panes online + branches set | A (PAT) / B (K11 baseline) / C (registry) | PAT rotation status — gate to Day 7 push |
| 1 | 2026-05-03 | 1 | P1 consumer-array refactor + LumfPublisher started | P2 plan + P3 mocopi/CHANGELOG + P4 OSC bind + P5 SCAD constants | Cross-layer forcing if P1 stalls |
| 2 | 2026-05-04 | 1 | LumfPublisher K11-verified ≥58 Hz | P2 record-script + P3 RUNBOOK + P4 OSC routing + P5 universal sled refactor | Pre-shoot dry run completes EOD |
| 3 | 2026-05-05 | 2 | Photoshoot Look 1 + AudioCaptureWriter recording | P3 director-protocol.md + Models+Director.swift + pre-commit hook + P5 adapters/plists | Photoshoot logistics |
| 4 | 2026-05-06 | 2 | Photoshoot Looks 2-3 | P4 SAN-bridge + integration test + P5 UNIVERSAL-SLED.md + Plate 1 print queued | Sled queued for unattended print |
| 5 | 2026-05-07 | 3 | Unity recording × 3 looks + audio audition | P5 fit-test (if print done) + P3 push pre-flight | Audio sounds bad — fallback decision |
| 6 | 2026-05-08 | 3 | Composite + caption draft + Mac4 verification | P3 post-push-cleanup.sh + P5 caliper-verify | Mac4 verification failure modes |
| 7 | 2026-05-09 | 4 | Reel posted + Wave 8 pushed | P3 retrospective + comment monitoring | Reel terms / push reveals real bug |
---
Gate criteria (machine-checkable wherever possible)
### Phase 0 → Phase 1 gate
1. `ls Desktop/evo-cube-output/lume-creative-engine-2026-05-02/pane-prompt-P*.md | wc -l` returns 5
2. `ssh k11 "powershell -File C:\lume\health-check.ps1"` exit 0; output contains `LUME-Audio: Running`, `LUME-Mocopi: Running`, `LUME-Depth: Running`
3. PAT status: file `[home-path]` contains either `ROTATED <new-token-hash>` OR `BLOCKED <reason> — push deferred to Wave 9`
4. `ls [home-path]` all exist
5. `cat Desktop/lume-commerce/.WAVE8_NOT_PUSHED` exists
### Phase 2 → Phase 3 gate
1. `ls Desktop/MotionMixStills/reel-001/look-{1,2,3}/ | wc -l` ≥ 24 stills/look
2. `ls Desktop/MotionMix/captures/reel-001/look-{1,2,3}/*.mov | wc -l` ≥ 3 motion clips
3. `ls [home-path] Support/MotionMixApp/audio-captures/reel-001/*.wav | wc -l` ≥ 3 WAV captures
4. `ls Desktop/MotionMixDirector/Sources/MotionMixDirector/Models+Director.swift` exists; `swift build` exits 0
5. `cat Desktop/MotionMix/director-protocol.md | wc -l` ≥ 100
6. Pre-commit hook deliberate-violation test: `cd Desktop/lume-commerce && echo 'magic break' >> software/demo/unity/lume_pcloud/Assets/Scripts/LumeUdpReceiver.cs && git add -A && git commit -m '[P3] test: deliberate violation' returns NONZERO exit`
7. Pane registry JSON populated: `jq '.panes | length' [home-path]` returns 5
8. P4 SAN-bridge integration test: 120s session shows ≥2 pattern replacements separated by ≥16 bars (programmatic check via Strudel webView log)
9. `ls Desktop/lume-commerce/hardware/cad/exports/pod_compute_sled_universal.stl Desktop/lume-commerce/hardware/cad/exports/adapter_k11_vesa75.stl Desktop/lume-commerce/hardware/cad/exports/adapter_macmini_clamp.stl` all exist
### Phase 3 → Phase 4 gate
1. `ls Desktop/MotionMix/reel-001-final.mp4` exists; `ffprobe` shows 1080×1920, ≤30s, `du -h` ≤30MB
2. Caption draft exists at `Desktop/MotionMix/reel-001-caption.md`; brand-voice review checklist passed (no em-dashes, no AI-isms, see master plan §5)
3. Mac4 10-point runbook: `cat Desktop/MotionMix/mac4-verification-day6.md` shows 10 ✓ marks (or explicit blocker doc with sentinel `WAVE8_PUSH_DEFERRED`)
4. `ls Desktop/lume-commerce/.WAVE8_NOT_PUSHED` STILL EXISTS (push happens Phase 4, not Phase 3)
### Phase 4 → Wave 9 gate (No Absorbing States)
1. Reel URL captured at `Desktop/MotionMix/reel-001-post-url.txt`
2. `git -C Desktop/lume-commerce log origin/main --oneline | head -10` shows 7 Wave 8 commit SHAs
3. `! ls Desktop/lume-commerce/.WAVE8_NOT_PUSHED 2>/dev/null` (sentinel removed)
4. Retrospective at `[home-path]` exists ≥100 lines
5. Wave 9 backlog written to `[home-path]` (≥6 backlog items appended, NOT replacing existing content per Memory Guardian)
---
Pulse auto-spawn analysis (carried from master plan §9)
For tasks with high deterministic structure, Pulse can spawn dedicated Codex sessions. Mapped to phases:
- Phase 1 critical (P1): parts (a)+(b)+(c) Pulse-eligible if forge V2 spec is the prompt. Part (d) verification needs human — NOT Pulse.
- Phase 1 parallel A (P2): REEL-001-PRODUCTION-PLAN.md + AudioCaptureWriter.swift Pulse-eligible.
- Phase 1 parallel B (P3): CHANGELOG + RUNBOOK Pulse-eligible. Mocopi flake fix is judgment-call → NOT Pulse (read failure mode first).
- Phase 1 parallel C (P4): OSC :9050 binding Pulse-eligible.
- Phase 1 parallel D (P5): SCAD constants + module refactor Pulse-eligible.
- Phase 2 critical: photoshoot — NOT Pulse (Mohamed-driven).
- Phase 2 A (P3): director-protocol.md + Models+Director.swift + pre-commit hook all Pulse-eligible.
- Phase 2 B (P4): SANPipelineBridge.swift + setSANPattern Pulse-eligible.
- Phase 2 C (P5): 2 adapter SCAD + plists + UNIVERSAL-SLED.md Pulse-eligible. Print is unattended.
- Phase 3: critical = Mohamed; A = Mohamed-driven Mac4 walk + P3 patches (judgment); B = Mohamed (physical fit); C = Pulse-eligible (post-push-cleanup.sh).
- Phase 4: ALL Mohamed-driven. Retrospective is the only Pulse-eligible piece, post-ship.
# Suggested first Pulse run (DRY-RUN; do NOT actually spawn until pane prompts paste-ready):
python3 [home-path] pulse-spawn \
--checklist [home]/Desktop/evo-cube-output/lume-creative-engine-2026-05-02/divergent-rail.md \
--slug lume-creative-engine-2026-05-02 \
--dry-run true---
Closing — what changes vs master plan + forge
Stage 4 net additions on top of master plan §3 + forge §Q1-Q3:
1. Phase 0 explicitly added (master plan implied Day 0; rail makes it a real EW-governed phase with its own gate). Bounds the 5-pane spin-up.
2. Phase 5 / Wave 9 handoff is explicit — closes the No Absorbing States invariant. Master plan listed Wave H backlog; rail makes it a phase-equivalent continuation.
3. AudioEngine.swift coordination protocol — formalized. P1's consumer-array commit Day 1 AM is exclusive-claim; P2 + P4 poll for it. Closes the Wave 8 lesson on parallel-edit collisions.
4. Director schema sub-rail (forge Q2) — `Models+Director.swift` Codable structs ship Phase 2 Day 3 even though Rust impl defers to Wave 9. Phase 2 Track A explicitly carries this.
5. Pre-shoot dry run gate — added as Phase 1 → Phase 2 gate criterion #8. Catches photoshoot failures before they kill Day 3.
6. PAT rotation as Phase 0 → Phase 4 hard prerequisite — explicit sentinel `WAVE8_PUSH_BLOCKED_PAT_ROTATION` if not done by Day 0. Reel still ships.
7. Plate 1 parallel-print — forge Q3's "0 net print overhead" claim materialized: universal sled (5h) + 2 adapters (30 min addenda) on the same Elegoo Max plate.
8. Phase gates are machine-checkable — every gate above has a concrete shell command or file existence check. Pre-Codex-paste validation is now a 2-minute script run.
---
Cross-machine concurrency map (who runs what when)
This map answers "if all 5 panes are firing on Day 2, which machine is the bottleneck?" The answer drives whether we can actually run 5 panes in parallel or need to serialize.
| Day | Mac1 (dev) | Mac4 (Unity host) | Mac5 (ML rate-limited) | K11 (production) | iPhone (capture) | iPad (LUMM fallback) | Elegoo Max (print) |
|---|---|---|---|---|---|---|---|
| 0 | Open panes, registry, sentinels | reachability ping only | idle | health check (read-only) | idle | idle | idle |
| 1 | P1 LumfPublisher, P2 plan, P3 mocopi+CHANGELOG, P4 OSC bind, P5 SCAD | idle | idle (SAN inference path stays on iPhone via Echelon) | LUMF verify (read-only inspector) | P1 dev iteration (TestFlight or USB run) | idle | idle |
| 2 | P1 K11-NSSM args, P2 record-script, P3 RUNBOOK, P4 OSC routing, P5 universal-sled refactor | TCC pre-flight (Mohamed) | idle | LUMF rate verification + NSSM Args swap | P1 LumfPublisher under load test | LUMM pre-shoot test under shoot lights | idle |
| 3 | P3 director-protocol + Models+Director.swift + pre-commit hook, P5 adapters/plists | idle | idle | OSC :9050 publisher running for P4 round-trip | photoshoot Look 1 stills + motion capture | LUMM skeleton ride-along during motion clips | idle |
| 4 | P4 SAN-bridge + integration test, P5 UNIVERSAL-SLED.md | idle | SAN V5 inference (Phase 2 audio audition prep — no retraining, just inference) | OSC publisher continues | photoshoot Looks 2-3 | LUMM continues | Plate 1 print starts (5h + 30min adapters parallel) |
| 5 | P3 post-push-cleanup.sh + P5 caliper-verify | idle | SAN audition compute (3 motion clips through V5) | Unity recording session × 3 looks | audio audition source | idle | print finishes (Plate 1) |
| 6 | P3 Mac4 fix patches | 10-point verification runbook (Mohamed-driven) | idle | continues | audio playback | idle | fit-test (Mohamed, physical) |
| 7 | P3 retrospective | idle | idle | continues | audio idle | idle | idle |
Bottleneck analysis:
- Mac1 = busiest, hosts 5 concurrent Codex panes Day 1-4. Codex pane resource cost is small (each pane is a separate process + LSP), but file-level conflicts are the real risk → coordination protocol Rules 1-5 above.
- K11 is the only production publisher Day 1-7. NSSM Args edit (Day 2) is a 1-line PowerShell change — does not require service restart; the publisher process picks up new flags on next loop iteration. No K11 service downtime any day this week.
- Mac4 only matters Day 6 for the verification runbook. Days 1-5 it's idle. P5's launchd plists install on Mac4 Day 4-5 but services start lazily.
- Elegoo Max is fully unattended Day 4-5. Print queue Stage 7 from prior memory work continues in parallel; universal sled is a NEW print stage on the same machine but does not collide with prior queue.
- Mac5 stays rate-limited per CLAUDE.md / memory rules. Used Day 4-5 for SAN inference only. No retraining.
---
EW invariant trace (per-phase audit)
Each phase below explicitly evaluates the 4 non-halting invariants. The audit lives in this file so the next reader (or `meta-review` Stage 5) can challenge any line.
Invariant 1 — Min Entropy Production (every phase produces measurable progress):
| Phase | Measurable deliverables | epsilon check | If zero novelty → corrective |
|---|---|---|---|
| 0 | 5 prompt files + K11 baseline JSON + PAT status + registry skeleton | ≥4 file artifacts in 60 min | inject auto-prompt-generator from prior pane |
| 1 | 1 Swift refactor commit + LumfPublisher.swift + 2 tests + 4 docs + 2 SCAD edits | ≥6 commits over 2 days | switch P1 critical to V3 (sample-and-hold) per forge if V2 stalls |
| 2 | 3 looks shot (≥72 stills + 3 motion clips + 3 WAV) + Models+Director.swift + 3 STLs | ≥10 binary assets + 3 commits | pre-shoot dry-run failure → branch to Phase 1.5 |
| 3 | reel-001-final.mp4 + caption + 10-point Mac4 result | 1 video + 1 caption + 1 verification doc | Mac4 fail → branch to Phase 3.5 (defer push, ship reel) |
| 4 | reel URL + Wave 8 SHAs on origin/main + retrospective | 3 artifacts | reel rejected by platform → reshoot in Wave 9 |
Invariant 2 — Bounded Divergence (max 4 tracks per phase, 1 critical + 3 parallel):
| Phase | Track count | Status | Why it's OK / how mitigated |
|---|---|---|---|
| 0 | 4 (Critical + A + B + C) | At cap | Tracks A/B/C are each <60 min; phase is short |
| 1 | 5 (Critical + A + B + C + D) | Over cap | Mitigation: Track D (P5) is independent SCAD work that touches NO file in Tracks Critical/A/B/C. Lives on different repo (`lume-commerce/hardware/cad/` vs `MotionMixApp/`). Concurrency is genuine, not contended. EW spirit honored. |
| 2 | 5 (Critical + A + B + C + D) | Over cap | Mitigation: Track D is 1-hour coordination meta-task (registry update + sync-panes), not a code track. Functionally <1 track of effort. EW spirit honored. |
| 3 | 4 (Critical + A + B + C) | At cap | C is helper-script prep only (1h); structurally fine |
| 4 | 4 (Critical + A + B + C) | At cap | Track C is optional |
Two phases breach the strict 4-track cap. Both breaches are documented and structurally justified — Phase 1 because Track D operates on a fully disjoint repo+toolchain; Phase 2 because Track D is operational meta-work. If either breach causes coordination friction in the daily `/sync-panes` synth, the rail demands compaction back to 4 tracks (deferring P5 a day, or rolling Track D into Critical's overhead).
Invariant 3 — Cross-Layer Forcing (critical stall ↔ parallel rescue):
| Phase | Critical stall scenario | Parallel-rescue path | Parallel stall scenario | Critical-redirect path |
|---|---|---|---|---|
| 0 | Codex panes won't open | Mohamed manually opens; rail proceeds | PAT rotation blocked | Critical proceeds, Phase 4 push deferred only |
| 1 | LumfPublisher V2 fails K11 verify | P4's OSC routing reveals audio path is fine; pivot to V3 sample-and-hold (forge backup) | P5 SCAD render fails | Critical proceeds; sled deferral to Wave 9 |
| 2 | Photoshoot failure Day 3 | P3's director-protocol writing continues; recompose Day 4 with reduced scope | P4 SAN bridge fails | Critical proceeds; reel uses Strudel-render fallback |
| 3 | Composite breaks in ReelBuilderView | P3's Mac4 verify can run independently; reel falls back to ffmpeg CLI composite | Mac4 fails verification | Critical proceeds; push deferred to Wave 9 |
| 4 | Reel rejected by platform terms | Push still lands; Wave 9 reshoots reel | (no parallel critical here) | n/a |
Invariant 4 — No Absorbing States (every phase has 2+ viable next steps):
Verified above in each phase's "Min viable transitions" line. Phase 4 explicitly hands to Wave 9; Phase 5 documents Wave 9 work. Rail does not terminate.
---
Pane prompt skeleton (paste-ready scaffold)
Each pane gets a prompt with these 7 sections. Skeleton below — final prompts saved Day 0 to `Desktop/evo-cube-output/lume-creative-engine-2026-05-02/pane-prompt-P{1..5}.md`.
# PANE P{N} — {focus name}
## 0. PRODUCTION SYSTEM HEADER (verbatim)
THIS IS A PRODUCTION SYSTEM. Don't break what ships.
Don't-touch:
- Wave 8 wire format magics (LUME/LUMD/LUMF/LUMM/LUMC) — pinned by golden-bytes tests.
- 21 Unity component public APIs — additive only.
- K11 NSSM service registration blocks — runtime Args may be flagged, registration stays.
- Wave 8 commits not-pushed — Mohamed pushes manually after Mac4 verification.
- MotionMix repo's Phase 5a proof token model — read it, don't redefine it.
Mohamed runs all destructive ops: git push, launchctl unload && load, nssm remove,
social posts. Codex panes propose; Mohamed disposes.
Verification before declaration. A pane that says "done" includes runtime evidence.
## 1. Reading order
1. Desktop/evo-cube-output/lume-creative-engine-2026-05-02/divergent-rail.md (this rail) — your phase / track row
2. Desktop/evo-cube-output/lume-creative-engine-2026-05-02/stage3-expand-master-plan.md — your P{N} section
3. Desktop/evo-cube-output/lume-creative-engine-2026-05-02/creative-forge-output.md — relevant Q section ({Q1 for P1+P4, Q2 for P3, Q3 for P5})
4. (P-specific source files listed below)
## 2. Coordination protocol (verbatim)
Rule 1 — Claim before touch: write your file claims to [home-path]
Rule 2 — Read before write: cat [home-path] | grep -F <target> before any Edit/Write
Rule 3 — Newer claim defers; conflicts logged to [home-path]
Rule 4 — Commit prefix [P{N}] on every commit
Rule 5 — Pane closure: 5-line synthesis to [home-path]
## 3. File claim (write to [home-path] before first edit)
{exact paths from rail Pane assignment table}
## 4. Phase-by-phase task list
{copy from rail Phase tables, this pane's row only}
## 5. Success criterion (machine-checkable)
{copy from rail Pane assignment + gate criteria}
## 6. Don't-touch (universal + pane-specific)
{universal list + pane-specific list}
## 7. Escalation triggers (when to message Mohamed via inbox or sms)
- Production system constraint requires destructive op (git push, launchctl, nssm remove, social post)
- Mocopi flake reveals real timing bug (P3 only)
- LUMF golden-bytes test fails on byte ≥1 (P1 only)
- Photoshoot dry run fails at Day 2 EOD (P2 + Mohamed)
- ASA fit-test reveals tolerance breach (P5 only)
- Mac4 verification fails on point ≥1 (P3 + Mohamed)
- Pane registry shows file-claim conflict (any pane)The Day 0 critical track produces 5 instances of this prompt with the bracketed sections filled in per pane. Pane P1's prompt is ~120 lines; P3's is the longest at ~180 lines (includes director-protocol sub-rail spec).
---
Decision log (Stage 4 specific — items resolved during rail-planning)
These are decisions made during this rail draft that the master plan + forge did not explicitly settle:
| # | Decision | Why | Where it lives |
|---|---|---|---|
| 1 | Phase 0 is its own EW-governed phase, not a "Day 0 prep step" implied by master plan | Master plan §5 row "0" was 1 line. Rail formalizes it because PAT rotation + pane-claim init are gates that must hold before Phase 1 fires. | This rail Phase 0 |
| 2 | P1's consumer-array refactor is a SEPARATE first commit, not bundled with LumfPublisher | Wave 8 lesson: parallel edits collide on the file with the most consumers. Solo refactor commit gives P2/P4 a clean integration point. | Phase 1 Critical task description + Coordination protocol "Special case" |
| 3 | Forge Q1 V2 (ring-buffer + 60Hz publisher) is the chosen audio-tap, not V1 (mainMixer dispatch_async) | Forge Q1 §3-4 selected V2 explicitly. Master plan §7.1 sketch hand-waved this. Rail pins V2 as the contract. | Phase 1 Critical (P1) task (b) |
| 4 | SAN pattern decisions ride OSC, NOT a new LUMF schema field | Forge Q1 schema sub-question selected S3 (OSC routing). Avoids breaking 84-byte LUMF golden-bytes test. | Phase 2 Track B (P4) note + Don't-touch |
| 5 | Director Codable schema (`Models+Director.swift`) ships Phase 2 even though Rust impl defers | Forge Q2 closing note demanded this. Schema-without-impl is the artifact that prevents director drift. | Phase 2 Track A (P3) + Stage 4 net additions §4 |
| 6 | Universal sled is ONE STL (no `box=` parameter), per forge Q3 D1+D6 hybrid | Forge Q3 selected USB topology as dominant. Sled is universal; box-specific work moves to 2 small adapter STLs. | Phase 1+2 Track D/C (P5) + Pane assignment Don't-touch |
| 7 | PAT rotation status is tracked via sentinel file, not just memory note | If un-rotated, push must explicitly fail loudly. Sentinel file is read by pre-commit hook. | Phase 0 Track A + Risk Register row 1 |
| 8 | Daily `/sync-panes` synth is a Phase 2 deliverable, not a continuous background process | Background process risk: stale sync if it crashes silently. Daily run keeps Mohamed in the loop. | Phase 2 Track D + Pane P3 ownership |
| 9 | Wave 8 push lands Phase 4 Day 7, NOT Phase 3 Day 6 | Mac4 verification is Day 6; push needs Mohamed-judgment buffer of one night. Day 7 ship-day handles BOTH reel post AND push, intentionally. | Phase 3 → Phase 4 gate criterion #4 |
| 10 | Phase 5 / Wave 9 backlog is itemized in this rail, not just `active-tasks.md` | No Absorbing States invariant requires explicit continuation. Listing here gives Stage 5 (`meta-review`) a target to challenge. | Phase 5 / Wave 9 backlog handoff |
---
Forge V2 → V3 fallback decision tree (P1 audio path resilience)
Forge Q1 §2 enumerated 6 audio-tap variants V1-V6 and selected V2. Rail formalizes the fallback ladder so P1 doesn't get stuck if V2 underperforms on real device:
┌─────────────────────────┐
│ V2 (chosen) │
│ SPSC ring + 60 Hz │
│ publisher thread │
└────────┬────────────────┘
│
Day 1 PM verify on iPhone
│
┌────────────────┴────────────────┐
│ K11 LUMF rate >= 58 pkt/s ? │
│ no allocation in handlePCM ? │
└────────────────┬────────────────┘
│
┌──────────────────┴──────────────────┐
│ │
YES NO
│ │
┌───────▼────────┐ ┌─────────▼──────────────────┐
│ Phase 1 gate │ │ Day 1 EOD diagnose: │
│ passes │ │ - drop in ring? fail mode A │
│ │ │ - heartbeat starves? │
└────────────────┘ │ fail mode B │
│ - alloc surfaces in │
│ publisher? mode C │
└─────────┬──────────────────┘
│
┌───────────────────┴──────────────────┐
│ V3 (fallback) │
│ sample-and-hold, 30 Hz publisher, │
│ accept LUMF rate ~30 pkt/s │
│ (Wave 8 receiver tolerates ≥28 Hz) │
└───────────────────┬──────────────────┘
│
Day 2 verify again
│
┌───────────────────┴──────────────────┐
│ pass → Phase 1 gate (degraded) │
│ fail → escalate to Mohamed, │
│ reel falls back to │
│ Strudel-render audio path │
│ (ships, just less │
│ "engine-driven" framing) │
└──────────────────────────────────────┘V3 is documented in this rail (not the master plan or forge) because it's the rail-level contingency. P1 owns the V2→V3 pivot if needed and reports via inbox to Mohamed before pivoting.
---
Risk → Gate cross-reference (which risk fires which gate failure)
For Stage 5 meta-review's challenge surface — every risk should map to at least one gate failure mode:
| Risk row | Gate that fires on this risk | Recovery branch |
|---|---|---|
| FirstDate PAT in repo | Phase 0 → Phase 1 gate #3 (PAT status file) | Sentinel `WAVE8_PUSH_BLOCKED_PAT_ROTATION` blocks Phase 4 push only |
| AudioEngine main-thread block | Phase 1 → Phase 2 gate #3 (no-allocation test) | V2 → V3 fallback tree above |
| Two panes touch same file | Pane registry conflict log file > 0 lines | Newer pane defers (Rule 3) |
| LUMF wire-format collision | Phase 1 → Phase 2 gate #2 (golden-bytes test) | P1 fixes byte order; cite Python source-of-truth |
| :9701 publisher collision | Phase 1 → Phase 2 gate #4 (K11 packet inspector shows MotionMixApp packets only) | NSSM Args + heartbeat file works; if not, K11 LUME-Audio temporarily disabled (Args, not service registration) |
| Mac4 TCC blocks Bolt | Phase 3 → Phase 4 gate #3 (Mac4 runbook 10/10) | K11-only path stays; sled deferral to Wave 9 |
| HD1 unmounted on Day 5 | (No gate — only audio audition quality affected) | Strudel-render fallback, declared "stretch missed" if licensed track used |
| Photoshoot logistical fail | Phase 1 → Phase 2 gate #8 (pre-shoot dry run) + Phase 2 → Phase 3 gate #1-3 (asset counts) | Branch to Phase 1.5 or Phase 2.5; Day 5 reshoot fallback |
| iPad LUMM degrades | Day 2 EOD test result (pre-flight check) | Use iPhone for skeleton, iPad as stills cam |
| Reel music sounds bad | Phase 3 audition Day 5 (Mohamed picks) | A/B → SAN OR Strudel OR licensed |
| Wave 8 push reveals Mac4 bug | Phase 3 → Phase 4 gate #3 fails | Defer push only; reel ships |
| ASA shrinkage Mac mini | Phase 3 → Phase 4 gate (P5 fit-test, optional, non-blocking) | Reprint or Wave 9 closeout |
| OpenSCAD render timeouts | Phase 1 → Phase 2 gate #7 (`openscad --hardwarnings` exit 0) | Render incrementally module-by-module |
| pyorbbecsdk2 wheel missing | Phase 2 → Phase 3 gate (UNIVERSAL-SLED.md content) | Source-build path documented as fallback |
| Strudel pattern thrash | Phase 2 → Phase 3 gate #8 (≤4 replacements over 120s) | 750ms+16-bar+conf>0.6 gate; tune if needed |
| Director schema drift | (Long-tail risk — Wave 9+) | `Models+Director.swift` + pre-commit hook prevents field renames |
| WAVE8_NOT_PUSHED sentinel removed early | Pre-commit hook fails commit | Hook explicitly checks; revert sentinel |
| Coordination collapse 5 panes | Daily `/sync-panes` synth shows conflict count > 0 | Mohamed-resolved via direct prompt |
| Phase 4 absorbing state | Wave 9 backlog count = 0 | Phase 5 backlog mandates ≥6 items appended to active-tasks.md |
---
Final fitness check (Stage 4 self-audit)
Before handing to Stage 5 `meta-review`, the rail self-audits against the original Stage 4 charter:
- [x] Sequential phases × parallel tracks — 5 phases, 22 tracks, max 5 per phase (with structural justification for the 2 over-cap cases)
- [x] EW invariants honored — explicit per-phase audit table above; breaches documented + mitigated
- [x] Machine-mapped — Mac1, Mac4, Mac5, K11, iPhone, iPad, Elegoo Max all assigned with day-by-day load
- [x] Coordination protocol — 5 rules + AudioEngine.swift special-case + commit-prefix enforcement
- [x] Pane assignment with don't-touch — Production System constraint in every row
- [x] Reel-ship deadline — 2026-05-09 EOD, Phase 4 Day 7 critical track
- [x] Director schema sub-rail (forge Q2) — Phase 2 Track A, Codable structs ship even though Rust defers
- [x] PAT rotation as hard prerequisite — Phase 0 Track A, sentinel-enforced
- [x] Mac4 vs K11 distinction explicit — Mac4 = recording surface for Phase 3 reel-record (Day 5 falls back to K11 if Mac4 sled isn't ready), K11 = publisher/recording surface throughout
- [x] Risk register per phase — 19 rows, every phase covered, security finding (FirstDate PAT) = top row
- [x] Gate criteria machine-checkable — every phase has shell commands or file-existence checks
- [x] Pane prompts not yet generated, but skeleton specified — so Day 0 critical track has a clear template
- [x] Length 500-900 lines — see footer count
End of divergent rail.
Promotion Decision
Attach run IDs, datasets, metrics, and reproduction commands.
Source Anchor
evo-cube-output/lume-creative-engine-2026-05-02/divergent-rail.md
Detected Structure
Method · Evaluation · Math · Code Anchors · Architecture · is Stage Research