> Companion to 00-MASTER-PLAN.md. Operationalises the 12 tracks into a
> concrete agent-team plan with producer-vs-verifier separation.
---
| Agent | Role | Specialty | Sessions to spawn |
|---|---|---|---|
| Mavis (root) | Owner / conductor | Decision-making, drift-checks, cross-track coordination | (this session — 413419604156710) |
| Helper Mavis | Pact-alignment + verifier | Drift-check, integration tests, cross-thread regressions | 412100071272671 (existing) |
| Producer A | TS / state specialist | VSILStore, Scrubber, evaluator wiring | pA (spawn per phase) |
| Producer B | Graphics engineer | Canvas + pointer events + paint subsystems | pB (spawn per phase) |
| Producer C | React engineer | LayerPanel, Properties two-way binding | pC (spawn per phase) |
| Producer D | Animation specialist | Mask + Animation engines, keyframe ops | pD (spawn for Phase 6 only) |
| Producer E | Dev-tools engineer | Monaco, DevLayout, OAuth removal | pE (spawn for Phase 8) |
| Producer F | WebGL/Node engineer | WebGL2 shaders, Render CLI | pF (spawn for Phase 9) |
| Producer G | Verifier / QA | Drift-check, integration tests, performance gates | pG (always-on, co-resident with Helper Mavis) |
Co-located agent dispatch: communicate tool from Mavis (root) to Helper Mavis (existing) for pact-alignment + drift-check; mavis session create for new producers as needed.
---
| Step | Agent | Action |
|---|---|---|
| 1.1 | Mavis | Re-run drift-check baseline; confirm 32/0 PASS |
| 1.2 | Helper Mavis | Re-confirm pact files specialised; report any drift |
| 1.3 | Mavis | Sign off Phase 1; commit a phase-1-foundation-lock marker if any work was done |
Outcome: Drift baseline sealed. No code changes expected.
---
| Step | Agent | Action |
|---|---|---|
| 2.1 | Producer A | Implement VSILStore.ts + vsilOps.ts |
| 2.2 | Producer A | Wire 6 cards to read from VSILStore instead of mock imports |
| 2.3 | Producer A | Self-tests: vsilOps.test.ts (50+ cases) |
| 2.4 | Helper Mavis | Verify drift-check 32/0 + integration test (3-substrate CardMount parity) |
| 2.5 | Mavis | Sign off Phase 2; merge commit |
Branch: phase-2-editor-store (cut from main; merge when verifier green)
---
| Step | Agent | Action |
|---|---|---|
| 3.1 | Producer A | Implement ScrubberContext.tsx |
| 3.2 | Producer A | Refactor 6 cards to consume useScrubber instead of useState<number> |
| 3.3 | Producer A | Implement CinemaProcedural.eval.ts variant |
| 3.4 | Producer A | Self-tests: scrubber-evaluator-integration.test.tsx |
| 3.5 | Helper Mavis | Verify drift-check 32/0 + lint rule blocking local time state in cards |
| 3.6 | Mavis | Sign off Phase 3; merge commit |
Branch: phase-3-scrubber-evaluator
---
Parallel dispatch: T4, T5, T6 run concurrently.
| Step | Agent | Action |
|---|---|---|
| 4.1a | Producer B (T4) | Implement BrushEngine.ts + PaintSurface.tsx |
| 4.1b | Producer B (T5) | Implement TransformEngine.ts |
| 4.1c | Producer B (T6) | Implement SelectionEngine.ts + HitTest.ts |
| 4.2 | Producer B | VisualCard refactor to use <PaintSurface> |
| 4.3 | Producer B | SelectionStore + integration with vsilOps |
| 4.4 | Producer B | Self-tests: brush (20+), transform (20+), selection (15+), hit-test |
| 4.5 | Producer G (perf) | Performance gate: 60fps paint with 50 layers, <16ms/frame |
| 4.6 | Helper Mavis | Drift-check 32/0 + integration tests |
| 4.7 | Mavis | Sign off Phase 4; merge commit |
Branch: phase-4-paint-surface (3 producer commits + 1 verifier + 1 merge)
Risk concentration: Canvas performance. Helper Mavis's verifier must enforce the 16ms budget test. If fails, do NOT advance.
---
| Step | Agent | Action |
|---|---|---|
| 5.1 | Producer C | Implement LayerPanel.tsx + LayerRow.tsx |
| 5.2 | Producer C | Implement layerOps.ts |
| 5.3 | Producer C | Wire LayerPanel into CinemaLayout's Structure cell |
| 5.4 | Producer C | Inspector AST mode rewires to read from VSILStore |
| 5.5 | Producer C | Self-tests: layerOps.test.ts, LayerPanel.test.tsx |
| 5.6 | Helper Mavis | Drift-check + integration |
| 5.7 | Mavis | Sign off Phase 5; merge |
Branch: phase-5-layer-panel
---
Parallel dispatch: T8a (Mask) + T8b (Animation).
| Step | Agent | Action |
|---|---|---|
| 6.1a | Producer D (T8a) | Implement MaskEngine.ts |
| 6.1b | Producer D (T8b) | Implement AnimationEngine.ts + animationOps.ts (float + vec2 tracks) |
| 6.2 | Producer D | KeyframeRow component for Timeline |
| 6.3 | Producer D | TimelineCard refactor for draggable keyframes |
| 6.4 | Producer D | VisualCard mask mode toggle |
| 6.5 | Producer D | Self-tests: mask (15+), animation (15+), animationOps (50+) |
| 6.6 | Producer G (perf) | Performance gate: 60fps scrub with 4 animated layers |
| 6.7 | Helper Mavis | Drift-check + integration |
| 6.8 | Mavis | Sign off Phase 6; merge |
Branch: phase-6-mask-animation
---
| Step | Agent | Action |
|---|---|---|
| 7.1 | Producer C | Implement propertyBindings.ts |
| 7.2 | Producer C | PropsMode refactor: controlled inputs bound to vsilOps |
| 7.3 | Producer C | Multi-selection handling for common properties |
| 7.4 | Producer C | Undo/redo wired to mutationLog |
| 7.5 | Producer C | Self-tests: props-two-way.test.tsx (20+ cases) |
| 7.6 | Producer G | Snapshot test: AST mode never emits write op |
| 7.7 | Helper Mavis | Drift-check + Inspector read-only invariant audit |
| 7.8 | Mavis | Sign off Phase 7; merge |
Branch: phase-7-properties-twoway
---
| Step | Agent | Action |
|---|---|---|
| 8.1 | Producer E | Implement DesignerCard.tsx (Monaco + VSIL JSON syntax) |
| 8.2 | Producer E | Implement DataCard.tsx + LogsCard.tsx (real state + engine telemetry) |
| 8.3 | Producer E | Implement useMonacoVSIL.ts |
| 8.4 | Producer E | CinemaLayout refactor: PaintSurface + Properties + LayerPanel + TimelineCard |
| 8.5 | Producer E | DevLayout refactor: DesignerCard + DataCard + LogsCard + InspectorCard AST |
| 8.6 | Producer E | Footer-level layout switcher in CentreStage |
| 8.7 | Producer E | DevLayoutGate: remove FUTURE-OAUTH-INTEGRATION marker (replace with OAUTH-DEFERRED-VS-2026Q3 if real OAuth not yet built) |
| 8.8 | Producer E | Self-tests: CinemaLayout (5+), DevLayout (5+), DesignerCard (10+) |
| 8.9 | Helper Mavis | Drift-check + visual regression snapshots for both layouts |
| 8.10 | Mavis | Sign off Phase 8; merge |
Branch: phase-8-cinema-dev-monaco
---
| Step | Agent | Action |
|---|---|---|
| 9.1 | Producer F | Implement CinemaUltra.webgl.ts (real vertex + fragment shaders) |
| 9.2 | Producer F | CinemaUltra.tsx refactor: WebGL2 path uses shader; procedural still falls back honestly |
| 9.3 | Producer F | Implement renderCli.ts (CLI driver for batch SVG output) |
| 9.4 | Producer F | Implement remaining 5 track kinds in animationOps (vec3/colour/path/string/discrete) |
| 9.5 | Producer F | Write pact/workspaces/vibescope/editor-getting-started.md |
| 9.6 | Producer F | Update studio/modules/vibescope/README.md |
| 9.7 | Producer F | Self-tests: ultra-webgl (5+), render-cli (5+), animationOps per-kind (5+ × 5 = 25+) |
| 9.8 | Helper Mavis | Final drift-check seal; produce sign-off report |
| 9.9 | Mavis | Sign off Phase 9 → DONE |
Branch: phase-9-webgl-cli-docs
---
| Check | When | Owner | Threshold |
|---|---|---|---|
| pact/scripts/audit-chip-system-v3.3.x.sh | After every commit | Helper Mavis | 32/0 PASS |
| studio/ npm test | After every commit | Producer G | 0 failures |
| Visual snapshot: 3-substrate CardMount parity | After Phase 2, 4, 8 | Helper Mavis | identical to Phase 1 baseline |
| Visual snapshot: Cinema layout | After Phase 5, 8 | Helper Mavis | new golden file |
| Visual snapshot: Dev layout | After Phase 8 | Helper Mavis | new golden file |
| Performance gate: 60fps paint with 50 layers | After Phase 4 | Producer G | <16ms/frame (procedural); <33ms (Ultra) |
| Performance gate: 60fps scrub with 4 animated layers | After Phase 6 | Producer G | <16ms/frame |
| Bundle size: VibeScope route | After Phase 8 | Producer G | <1.5MB (Monaco dynamic-imported) |
| Integration test: data-card-mount parity | After every CardMount change | Helper Mavis | unchanged from baseline |
| Stub marker scan | After every commit | Producer G | 0 STUB: in shipped code |
---
Mavis (root) decides at each phase boundary:
| Decision | Input | Options |
|---|---|---|
| Phase N → Phase N+1? | Helper Mavis verifier report + Producer G performance report | GO / RETRY (with specifics) / PARK |
| Branch merge? | Helper Mavis drift-check + integration test | MERGE / HOLD (with blocker list) |
| Performance gate fail? | Producer G performance report | ACCEPT (with documented regression) / REJECT (force producer fix) |
| Stub marker introduced? | Producer G scan report | REJECT (force producer fix before merge) |
---
---
| Failure | Recovery |
|---|---|
| Producer commit breaks drift-check | Helper Mavis reports specific rule violation; Producer A/B/C/D/E/F fixes in 1 cycle |
| Performance gate fails | Producer G retries with profiler data; if unfixable in 1 cycle, scope cut (e.g., "reduce animated layer count for Phase 6 demo") |
| Monaco bundle > 1.5MB | Producer E adjusts dynamic-import path; if still > 1.5MB, defer Monaco to Phase 10 |
| Cross-track contract breach (e.g., T4 changes store shape T7 depends on) | Mavis (root) arbitrates; T12 verifier catches on next drift-check |
| Verifier disagreement | Mavis (root) decides; if persists, escalate to operator |
---