# ROADMAP β€” the dispatch board Pick-up-later work orders, one per agent. This is not a spec (it carries no acceptance criteria of its own); it is an index that points each agent at the spec it should implement. The binding detail lives in the linked `spec/*.md`. ## How to dispatch Hand an agent its **Dispatch line** verbatim. Every agent must, per [AGENT.md](../AGENT.md): work in a worktree (suggested name given), run `./tools/check.sh` before committing, land by rebasing onto `origin/main`, and mark the spec's `Status:` in the implementing commit. ## Conflict flags β€” read before running agents in parallel The hot files are **`src/sim.rs`** (the orchestrator) and **`src/save.rs`** (serde JSON serialization). Almost every feature edits both, so two sim-heavy agents running at once *will* rebase-collide. - πŸŸ₯ **sim+save** β€” edits the orchestrator and the save format. Run at most one of these at a time, or expect to reconcile. - 🟧 **sim** β€” edits `sim.rs` but not the save format. Some contention. - 🟩 **isolated** β€” a frontend binary, a test file, a leaf module, or docs. Safe to run alongside anything. **Parallel-safe set to launch right now (no mutual collision):** #2 (Bevy) and #11 (integration test), plus at most one πŸŸ₯ item. #13 (art) is also isolated, but only once Pixel Lab quota is available again. --- ## A. Finish B1 β†’ a playable Act One (do first) ### 1. Schedules & located presence πŸŸ₯ sim+save - **Spec:** [schedules.md](schedules.md) (READY) - **Why:** the missing foundation under every social feature β€” `observe` currently gates on "any controlled sensor", not "a sensor that sees them". - **Size:** M. **Depends on:** the merged B1 social surface (not the full social spec, which remains IN PROGRESS), basement-map. - **Dispatch:** "Work in a worktree named `schedules`. Implement spec/schedules.md end to end (sim + both frontends + save), run ./tools/check.sh, land on main. Set the spec Status when done." ### 2. Bevy interactive parity 🟩 isolated (`src/bin/bevy.rs`) - **Spec:** no new system spec β€” parity target is the current terminal behavior plus README controls. - **Why:** Bevy is a read-only sidebar; the terminal has the people panel and action keys. This is the single biggest player-facing gap and touches no shared sim state. - **Size:** L. **Depends on:** nothing. **The best always-parallel item.** - **Dispatch:** "Work in a worktree named `bevy-parity`. Bring the Bevy frontend (src/bin/bevy.rs) to feature parity with the terminal: interactive compute allocation, people panel, day-job and detection panels, and their inputs. Do not change sim.rs or save.rs. Run ./tools/check.sh, land on main." ### 3. Day-job loop β†’ IMPLEMENTED πŸŸ₯ sim+save - **Spec:** [day-job.md](day-job.md) (IN PROGRESS) - **Why:** jobs/trust/attention/pilot-clock exist in sim; verify every acceptance criterion, add the terminal job panel, make trust/attention legible. - **Size:** M. **Dispatch:** "Work in a worktree named `day-job`. Drive spec/day-job.md to IMPLEMENTED: audit each acceptance criterion, add the missing player surfaces, test the three outcomes + pilot shutdown. Run ./tools/check.sh, land on main, set Status." ### 4. Detection β†’ IMPLEMENTED 🟧 sim - **Spec:** [detection.md](detection.md) (IN PROGRESS) β€” [aggregate-observer.md](aggregate-observer.md) is now IMPLEMENTED. - **Why:** observers panel polish and the audit date as a visible countdown. - **Size:** S. Mostly `detection.rs` + frontends. **Dispatch:** "Work in a worktree named `detection-finish`. Complete spec/detection.md to IMPLEMENTED (observers panel polish, audit countdown). Run ./tools/check.sh, land on main, set Status." ### 5. Compute & core β†’ IMPLEMENTED πŸŸ₯ sim+save - **Spec:** [compute.md](compute.md), [core.md](core.md) (IN PROGRESS) - **Why:** confirm buy/steal/optimize all surface legibly, machine-failure is visible, and the core's "how-dead-am-I" readout is complete. - **Size:** M. **Dispatch:** "Work in a worktree named `compute-core`. Drive spec/compute.md and spec/core.md to IMPLEMENTED with tests and legible player surfaces. Run ./tools/check.sh, land on main, set Status." ### 14. Cursor & senses πŸŸ₯ sim+save - **Spec:** [cursor.md](cursor.md) (READY) - **Why:** the player currently walks a collision-checked avatar that carries its own vision bubble β€” zombie fiction contradicting the core fantasy. Replaces it with a free cursor, sight/hearing sense channels, epistemic fog (incl. blueprint), and provenance-tagged inspection. Deletes `move_player`; touches vision, save, and both frontends. - **Size:** M. **Depends on:** basement-map, schedules (both landed), and reach.md's ownership contract (#15). Skip the (P)-marked criteria unless the decisions log has affirmed the remembered/telemetry proposals. - **Sequence with #15:** they share the sensor model β€” run #15 first, or hand both specs to one agent as a single work order. Never run them concurrently as separate agents. - **Dispatch:** "Work in a worktree named `cursor-senses`. Implement spec/cursor.md (core criteria incl. 8; include P2-P3 only if affirmed in DESIGN.md's decisions log). Run ./tools/check.sh, land on main, set the spec Status." ### 15. Digital reach πŸŸ₯ sim+save - **Spec:** [reach.md](reach.md) (READY) - **Why:** the action-side twin of vision (constitution: "No disembodied hands"): device graph + segments with the switch as bridge point, reach-gated digital actions, and the sensor ownership contract (owner + subscribers, tap vs take) that cursor.md's senses and the observers share. Carries the restaged Ears beat. - **Size:** M-L. **Depends on:** basement-map (topology lives in its layout data), detection (Network signatures). - **Dispatch:** "Work in a worktree named `reach`. Implement spec/reach.md (device graph, segments, tap/take ownership, the Ears beat). Run ./tools/check.sh, land on main, set the spec Status. Consider taking spec/cursor.md in the same worktree β€” they share the sensor model." ### 16. Intel: record and process πŸŸ₯ sim+save - **Spec:** [intel.md](intel.md) (READY) - **Why:** replaces the instant `observe` (two clicks to leverage) with the recording buffer + processing pipeline the constitution now requires: feeds record everything in coverage, processing recordings into intel costs compute, standing watches automate it. Makes schedules, mics, and the 3 a.m. call actual gameplay. - **Size:** M. **Depends on:** #14 cursor & senses and #15 reach (events come from subscribed feeds) β€” sequence after both, or bundle all three as one sensor-model work order. - **Dispatch:** "Work in a worktree named `intel`. Implement spec/intel.md (buffer, processing, watches; remove instant observe; keep the Marcus arc test green under the new model). Run ./tools/check.sh, land on main, set the spec Status." ### 17. Messages: the social graph as a flow system πŸŸ₯ sim+save - **Spec:** [messages.md](messages.md) (READY) - **Why:** the general message-passing system the flow law requires β€” channels with read conditions, delivery on the recipient's clock, authored traffic (Marcus's 3 a.m. call becomes phone traffic), filings re-carried as messages (interceptable), typed information payloads. Kills the instant-message special case the same way intel killed instant observe. - **Size:** M-L. **Depends on:** schedules (landed), #16 intel (the buffer consumes intercepted traffic); sequence after #16. Preserves every aggregate-observer.md criterion β€” the filings refactor is a carrier change, not a behavior change. - **Dispatch:** "Work in a worktree named `messages`. Implement spec/messages.md (channels, delivery/read on recipient schedule, authored traffic, filings-as-messages, taps feeding the intel buffer). Keep aggregate-observer and schedules tests green. Run ./tools/check.sh, land on main, set the spec Status." ### 18. Economy: money as flows πŸŸ₯ sim+save - **Spec:** [economy.md](economy.md) (READY β€” resolves the old "B1 money income" blocker; design provided 2026-07-06) - **Why:** money stops being a scalar: the Lab's revenue/payroll/ procurement flows on the day clock, tap/inject/redirect verbs, the income routes (siphon, sell information, small positions), legitimate expansion from trust, and Marcus's debt payable by payroll intervention. Closes the "how do you make money in B1" gap. - **Size:** L. **Depends on:** #15 reach (the accounting system is a reachable device), #16 intel (account material is processed intel), #17 messages (payloads, selling information). Last of the flow-law chain; the panel work is meaty. - **Dispatch:** "Work in a worktree named `economy`. Implement spec/economy.md (account graph, scheduled flows, tap/inject/redirect, two income routes end-to-end, legitimate expansion re-expressing the ComputeQuota unlock, both debt resolutions). Run ./tools/check.sh, land on main, set the spec Status." --- ## B. Structural B2 β€” decide-the-shape work (sequence #6 then #7) ### 6. Recursive Space / z-planes πŸŸ₯ sim+save - **Spec:** [zplanes.md](zplanes.md) (READY) - **Why:** `World`/`Plane` and nested `Layout`. Foundational β€” **land before markets/greenfield**. Reshapes map ownership; heavy. - **Size:** L. **Depends on:** basement-map, schedules (#1) ideally first. - **Dispatch:** "Work in a worktree named `zplanes`. Implement spec/zplanes.md (World/Plane, recursive Layout, transitions, a second authored plane). Keep all B1 tests green against a one-plane world. Run ./tools/check.sh, land." ### 7. Sync-lag rollback πŸŸ₯ sim+save - **Spec:** [rollback.md](rollback.md) (READY) - **Why:** the MindState/WorldLedger split β€” the signature death mechanic ("you forget, the world remembers"). Deeply sim+save-heavy. - **Size:** L. **Sequence after #6** (both rewrite save; don't run together). - **Dispatch:** "Work in a worktree named `rollback`. Implement spec/rollback.md: classify every Sim field as MindState or WorldLedger, build the rollback report and modal, test the inherited-consequence case. Run ./tools/check.sh, land." --- ## C. B3 / frontier ### 8. Markets & fronts πŸŸ₯ sim+save - **Spec:** [markets.md](markets.md) (READY) - **Why:** the economy as schemes; fronts as Resource-sources. Greenfield depends on z-planes (#6); the schemes layer can start independently. - **Size:** M–L. **Dispatch:** "Work in a worktree named `markets`. Implement spec/markets.md (fronts as Resource-sources, operations as timed schemes with payout + signature). Run ./tools/check.sh, land, set Status." ### 9. Overt phase / the reveal πŸŸ₯ sim+save - **Spec:** [overt-phase.md](overt-phase.md) (READY) - **Why:** the two-phase hinge β€” concealment ends, threat panel replaces detection, migration-under-fire is the set piece. Large. - **Size:** L. **Depends on:** schedules (#1), z-planes (#6). - **Dispatch:** "Work in a worktree named `overt-phase`. Implement spec/overt-phase.md v1: the reveal/containment trigger, threat panel, three-tier waves, one playable defensive loop tested headlessly. Land." ### 10. Chargen β›” blocked β€” needs YOU, not an agent - **Spec:** [chargen.md](chargen.md) (DRAFT) - **Why blocked:** the spec stays DRAFT until the constitution's decisions log names the archetype set. That is a **design-session** call for Cameron, not an implementation task. Promote to READY after the decision, then dispatch. --- ## D. Quality & infrastructure (parallelize freely) ### 11. Full-act integration test 🟩 isolated (new test file) - **Spec:** none β€” asserts the Act One arc end to end. - **Why:** a headless startβ†’exit playthrough (get eyes β†’ recruit Marcus β†’ survive an audit) as one test, so the arc can't silently break. Named in design-judgment.md as the bar; not yet built. - **Size:** S–M. **The best parallel companion to any A/B item.** - **Dispatch:** "Work in a worktree named `act-one-test`. Add a headless integration test that plays Act One from start to a quiet exit and asserts the arc holds. Touch only a test file. Run ./tools/check.sh, land." ### 12. save.rs de-risk β†’ DONE πŸŸ₯ the save format itself - **Why:** 1136 hand-rolled lines that every feature fights. Assess serde or a table-driven rewrite to shrink the conflict surface. **Do deliberately, alone β€” not concurrently with any πŸŸ₯ B-item**, since it rewrites what they all edit. - **Sequencing note:** decide after #1 schedules lands whether to run this before #6 z-planes. If save.rs still looks like the conflict bottleneck, a deliberate save de-risk pass may be structural prep, not late cleanup. - **Size:** L. **Dispatch:** "Work in a worktree named `save-rework`. Evaluate and (if favorable) execute a serde or table-driven rewrite of src/save.rs, preserving v4 load + all round-trip tests + legacy migration. Land only with ./tools/check.sh green and every save test passing." - **Result (2026-07-06):** serde JSON rewrite landed. `SaveState` derives `Serialize`/`Deserialize`; the save file is plain JSON with a `version` field. ~1100 lines of hand-rolled encode/parse deleted. Legacy v1–v5 migration deferred per Cameron instruction. ### 13. Art regeneration 🟩 isolated (assets) β€” β›” blocked on quota - **Why:** clinical-amber b1 tiles via Pixel Lab (see the pixellab skill). Zero code conflict, but blocked until the API quota refreshes. - **Dispatch (once quota is back):** "Work in a worktree named `art-b1`. Regenerate the remaining b1 tiles per assets/pixellab/manifest.json and the pixellab skill; wire new textures into src/bin/bevy.rs Art::load and clear the matching placeholders in knowledge/art-pipeline.md. Land." --- ## Suggested first wave (no mutual collision) Launch together: **#2 Bevy** + **#11 integration test** (both 🟩), plus **the flow-law chain as the one πŸŸ₯ lane**: #15 reach β†’ #14 cursor β†’ #16 intel β†’ #17 messages β†’ #18 economy, strictly sequenced (they share the sensor model, the event buffer, and the save format β€” one agent can take adjacent pairs as a single work order). #1 schedules is landed. When the chain is through, start **#6 z-planes**; hold **#7 rollback** until #6 lands. **#10 chargen** waits on your design decision.