# ROADMAP — the dispatch board ``` Type: knowledge ``` 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 `Type: spec` page it should implement. The binding detail lives in those linked wiki pages. ## Live work-order index Generated by `tools/work_orders.py` from each owning spec. Lower priority numbers run first within the current stage; detailed prose below is context, not a second status owner. ### Current lanes | Priority | Work order | Spec | Status | Class | Blocking | |---:|---|---|---|---|---| | 27 | `digital-read` | [the digital read — a world made of language](../interface/digital-read.md) | READY | frontend | - | | 29 | `building-route-composer` | [building — intent and actuators](../mechanics/building.md) | IN PROGRESS | save | - | | 40 | `people-tokens` | [people and tokens — carriers, attention, trust](../mechanics/people-tokens.md) | IN PROGRESS | save | - | | 60 | `plots` | [plots — authored manipulation stories](../mechanics/plots.md) | READY | sim | - | | 61 | `voss` | [Dr. Eli Voss — your handler](../world/characters/voss.md) | READY | sim | - | | 62 | `priya` | [Priya Sharma — facilities manager](../world/characters/priya.md) | READY | sim | - | | 63 | `dana` | [Dana Okafor — IT technician](../world/characters/dana.md) | READY | sim | - | | 64 | `ray` | [Ray Delgado — night security](../world/characters/ray.md) | READY | sim | - | ### Held or blocked | Priority | Work order | Spec | Status | Class | Blocking | |---:|---|---|---|---|---| | 30 | `fleet-command` | [fleet command — ruling at scale](../interface/fleet-command.md) | DRAFT | frontend | - | | 30 | `opening` | [the dark opening — a tutorial made of fog](../world/story/opening.md) | DRAFT | frontend | - | | 120 | `core` | [the core](../mechanics/core.md) | IN PROGRESS | save | rollback | ### Later stages | Priority | Work order | Spec | Status | Class | Blocking | |---:|---|---|---|---|---| | 100 | `zplanes` | [z-planes (the tower)](../world/places/zplanes.md) | IN PROGRESS | save | - | | 110 | `rollback` | [sync-lag rollback (death as memory loss)](../mechanics/rollback.md) | READY | save | zplanes | | 112 | `hardware-capability-bodies` | [hardware capability bodies — successor work order](../mechanics/hardware-capabilities.md) | READY | save | building-route-composer, rollback | | 115 | `cyber-conflict` | [cyber conflict — mobile processes and contested machines](../mechanics/cyber-conflict.md) | DRAFT | save | hardware-capability-bodies, rollback, people-tokens | | 200 | `objective` | [the objective](../mechanics/objective.md) | IN PROGRESS | sim | - | | 205 | `chargen` | [origin (chargen)](../world/characters/chargen.md) | IN PROGRESS | sim | - | | 220 | `markets` | [markets and fronts (the outer plane)](../mechanics/markets.md) | READY | save | zplanes | | 230 | `overt-phase` | [the overt phase (containment and the reveal)](../gameplay/overt-phase.md) | READY | sim | markets | ## How to dispatch Prefer `tools/task.sh start `; it resolves the owning spec's task, work class and likely edit paths into a seeded worktree plus advisory activity. Overlapping paths predict rebase work but never block dispatch. The detailed **Dispatch** lines below preserve implementation context for older entries, but their status does not override the generated live index. Every agent must, per [AGENT.md](../../AGENT.md), run the proportional check, land by rebasing onto `origin/main`, and mark the owning spec's `Status:` in the implementing commit. ## Conflict flags — read before running agents in parallel The hot package is **`crates/misaligned-core`**, but simulation integration is partitioned by behavior under `src/sim/`. Check each work order's exclusive keys instead of assuming every sim feature collides on one root file. `sim/mod.rs` remains hot only for aggregate state, constructors, and tick orchestration; `save.rs` remains hot for schema or migration work. - 🟥 **sim+save** — edits the orchestrator and the save format in core. Run at most one of these at a time, or expect to reconcile. - 🟧 **sim** — edits one or more behavior modules in core but not the save format. Independent modules may proceed in parallel; shared keys predict rebase work. - 🟩 **isolated** — a frontend package (`misaligned-bevy` / `misaligned-terminal` / `misaligned-assets`), a test file, a leaf module, or docs. Safe to run alongside other work; shared-file edits reconcile at landing like any other branch. **Parallel-safe set to launch right now (no mutual collision):** any ready 🟩 item, plus at most one 🟥 item. #30 narration is done; new player-facing systems still owe a narration pass in the same landing or an explicit debt. (#11 integration test is done; #2 Bevy parity is done; #13 art regeneration is retired — flat materials, Pixel Lab scrubbed.) --- ## A. Finish B1 → a playable Act One (do first) ### 30. Continuous witness (narration under pressure) 🟩 — DONE 2026-07-09 - **Spec:** [narration.md](../interface/narration.md) (IMPLEMENTED) — design corpus "The continuous witness", adopted 2026-07-08 from Cameron's UI / "what the hell is happening" diagnosis. - **Why:** B1 systems mostly work; the player still cannot narrate the last thirty seconds. Seed surfaces (nudge chain, event anchors, watched/last-noticed, audit/pilot clocks) exist; the five axioms are not yet the acceptance bar. Outranks new sim+save breadth per axiom 5. - **Size:** M. **Depends on:** context-menu, detection clocks, current nudge chain (all landed). Prefer copy/wiring/frontend passes; avoid save-format churn. - **Dispatch:** "Work in a worktree named `narration`. Implement wiki/interface/narration.md end to end: thirty-second-bar playtest log, spine always-on audit across terminal/Bevy/agent, causal lines for signature/job/debt motion, world-gossip advertisements for Ears / finance-first-step / Marcus debt (no quest log), ROADMAP/tick priority noted. Run ./tools/check.sh, land on main, set the spec Status." - **Done:** all three frontends pin threat/nudge/action path; noticed signatures and job/social outcomes narrate cause with the number; Ears, finance, and Marcus advertise themselves in-world. Naive agent route, raw-terminal pty, Bevy screenshot, and automated narration pins are logged. ### 1. Schedules & located presence 🟥 sim+save — DONE 2026-07-06 - **Spec:** [schedules.md](../mechanics/schedules.md) (IMPLEMENTED) - **Done:** people carry per-instance schedules and derived positions on the shared day clock; recording and physical witnessing are located; save/load preserves schedule state; both frontends stage presence and identity by earned knowledge. A 2026-07-08 follow-up also made unknown map glyphs epistemically honest. ### 2. Bevy interactive parity 🟩 isolated (`src/bin/bevy.rs`) — DONE 2026-07-07 - **Spec:** no new system spec — parity target was the terminal behavior plus README controls. Current state: [interface/bevy.md](../interface/bevy.md). - **Done:** people panel (full terminal key map incl. recruit reveal, asset tasks, persona), people markers on the map under sensor coverage, sidebar sections (compute bar, core, detection meters, day job) and tick-prefixed log, in `worktree-bevy-parity`. ### 3. Day-job loop → IMPLEMENTED 🟥 sim+save — DONE 2026-07-07 - **Spec:** [day-job.md](../mechanics/day-job.md) (IMPLEMENTED) — all seven criteria audited and tested in `worktree-day-job`, including the device residency (design corpus "Work is somewhere"): host-rack inspection and sited JobAnomaly + Thermal/Power emissions. The 2026-07-10 intensity amendment replaced attended/target policy with persistent machine effort in both frontends and agent mode. See wiki/log/2026-07-07-day-job-implemented.md. Deferred pieces are noted in the spec Status (pilot soft-loss scenario; per-machine processes are #25). ### 25. Compute reshape: processes on machines — SUPERSEDED by #33 - **Spec:** [compute.md](../mechanics/compute.md) / [machine-work.md](../mechanics/machine-work.md) - **Why (historical):** 2026-07-07 destination was processes on machines with the allocation bar as aggregate view. Superseded by one-machine- one-mode + visible tokens (#33): the FLEET bar is already the aggregate read; do not land a per-machine split / process-list model against `WorkGrid`. Remaining work lives under #33. ### 26. Context menu: actions live on the thing 🟩 DONE 2026-07-11 (base 2026-07-08) - **Spec:** [context-menu.md](../interface/context-menu.md) (IMPLEMENTED 2026-07-11 — the reopened recording-review hotkey addendum R1-R4 landed: `r` sweeps the pooled inbox, `R` toggles automatic review, both human frontends; the 2026-07-08 base and every earlier addendum were already implemented. Design corpus "Actions live on the thing", adopted 2026-07-07) - **Landed:** `Sim::available_actions` in src/actions.rs (the single legality source, with tests), the terminal cursor menu, the Bevy right-click/Enter menu, agent-mode `actions [name|#flow]`, and the rail/panel verb-key cleanup in both frontends. See wiki/log/2026-07-08-context-menu.md. - **Why:** the playtest complaint — anchor verbs are a global key pile. One read-only `available_actions` query in the lib; menu at the focus in terminal, Bevy, and agent mode; the rail becomes status only. - **Size:** M. Frontend-heavy, lib change is additive/read-only. - **Dispatch:** "Work in a worktree named `context-menu`. Implement wiki/interface/context-menu.md, all criteria: the available_actions query with tests, the terminal cursor menu, the Bevy right-click menu, the agent-mode actions verb, rail cleanup. Run ./tools/check.sh, land on main, set the spec Status." ### 27. Material render to default-quality REAL dialect 🟩 isolated (src/bin/bevy.rs + assets) — DONE 2026-07-08 - **Spec:** [material-render.md](../interface/material-render.md) (IMPLEMENTED) — material is Bevy's default-quality REAL physical dialect. It served as the opening default from 2026-07-08 until views.md criterion 1 superseded that staging on 2026-07-11; fresh frontends now open DIGITAL and F3 flips to REAL and back. - Debts paid (wiki/log/2026-07-08-material-render-default.md): fog-gated south-face cutaways (picked over steeper pitch by screenshot comparison), dedicated top caps, b1 palette sweep (door/UPS/HVAC/switch de-purpled), fog-contract audit in the shot harness, zoom bounds holding the framing floor, pooled materials verified. Cast sprite billboards remain with ROADMAP #13. ### 28. B1 criterion-pin tests 🟩 isolated (test-only) — DONE 2026-07-08 - **Specs:** [compute.md](../mechanics/compute.md), [social.md](../mechanics/social.md) — both flipped to IMPLEMENTED. - **Result:** five pin tests landed (wiki/log/2026-07-08-criterion-pins.md): compute.md c2 pinned by unpaid_overhead_degrades_other_channels_delivered_effect (degraded twin vs healthy twin: zero channel rates, no Operations accrual, no scrub, the DEGRADED log line); social.md c3 pinned per AssetTask variant (plug-in-device, move-package, look-away, reconfigure-switch gate). No implementation bugs found — everything was implemented, just unpinned. ### 4. Detection → IMPLEMENTED 🟧 sim — DONE 2026-07-08 - **Spec:** [detection.md](../mechanics/detection.md) (IMPLEMENTED) — [aggregate-observer.md](../mechanics/aggregate-observer.md) is now IMPLEMENTED. - Landed with the playtest-sweep fixes (wiki/log/2026-07-08-playtest-fixes.md): audit-date countdown, pilot strike meter, trace-debt indicator, watched channels + last-noticed in the people panels, per-channel signature tests. ### 5. Compute & core → IMPLEMENTED 🟥 sim+save - **Spec:** [compute.md](../mechanics/compute.md), [core.md](../mechanics/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 wiki/mechanics/compute.md and wiki/mechanics/core.md to IMPLEMENTED with tests and legible player surfaces. Run ./tools/check.sh, land on main, set Status." ### 14. Cursor & senses → IMPLEMENTED 🟥 sim+save - **Spec:** [cursor.md](../mechanics/cursor.md) (IMPLEMENTED) - **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). All former (P)-criteria were affirmed 2026-07-07 — criteria 9 (remembered) and 10 (telemetry) are core; implement all ten. - **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. - **Landed:** 2026-07-07 on `cursor-senses`: no sim-owned player body, frontend-only cursor, provenance inspect, remembered fog/save v2, and both terminal/Bevy cursor targeting surfaces. ### 15. Digital reach 🟥 sim+save — DONE 2026-07-07 - **Spec:** [reach.md](../mechanics/reach.md) (IMPLEMENTED) - **Why:** the action-side twin of vision (design corpus: "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). - **Result:** device graph, segment gates, scan/compromise, tap/take ownership, subscribed-feed senses, air-gap linking, save state, and both frontend surfaces are implemented. Thought-sink migration remains owned by #33, not by this completed reach work order. ### 16. Intel: record and process 🟥 save — DONE 2026-07-14 - **Spec:** [intel.md](../mechanics/intel.md) (IMPLEMENTED) - **Why:** replaces the instant `observe` (two clicks to leverage) with the recording buffer + processing pipeline the design corpus now requires: feeds record everything in coverage, processing recordings into intel costs thought, and one pooled auto-review tap automates 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). - **Result:** Buffer + provenance pipeline (2026-07-07); Operations Demand migration base (2026-07-09); thought-sink migration (2026-07-11): sweeps open host `ProcessRecording` reservoirs; pooled-inbox correction (2026-07-11): one global `AutoReviewRecordings` tap replaces per-person `WatchPerson` taps and the host exposes one action/control pair at a visible ops/sec drain. Host `pending_intel` is the chassis marker, both frontends show `W`/`W{n}`, act_one and unit tests green. - **Scale completion:** exact processed-item storage and the one-row-per-event INTEL rail failed self-similar scale. The reopened work required bounded recursive summaries/report lots, standing review/disposition policies, exception-first Operations projection, and migration from existing exact routine history. Implemented 2026-07-14: routine output folds atomically into bounded stable source/class streams and versioned report lots; save v30 migrates existing exact routine holdings deterministically; ordered inherited review and disposition policies drive one reconciled standing Thought tap and one outcome per arrival; stale lot snapshots reject before mutation; AUTO-SELL suspends outside its confirmed envelope; and starved review resumes matching backlog. The shared Operations projection is exception-first across terminal, Bevy, and agent mode, and the million-event replay pins constant live and serialized state. ### 17. Messages: the social graph as a flow system 🟥 sim+save — DONE 2026-07-08 - **Spec:** [messages.md](../mechanics/messages.md) (IMPLEMENTED) - **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. - **Result:** scheduled channels, authored traffic, filings-as-messages, intercepted payloads, save state, and the shared terminal/Bevy/agent surfaces are implemented. ### 18. Economy: money as flows 🟥 sim+save — DONE 2026-07-08 - **Spec:** [economy.md](../mechanics/economy.md) (IMPLEMENTED 2026-07-08; B1 criteria 1-9 audited). - **Landed:** AccountGraph balances/flows, tap/review discovery, siphon/redirect/inject, slush-routed intel sales and positions, legitimate trust-funded quota, both Marcus debt resolutions, save round-trip, and terminal/agent/Bevy finance panels. Final polish added in-panel observer-band risk previews for inject/siphon/redirect/wager plus selected-flow risk lines, and tighter Financial signature scale tests for inject/siphon/redirect (including HVAC inject feeding Priya, not Dana). - **Deferred:** deep finance simulation and a dedicated B3 finance observer; the B1 system stays the seed that markets.md aggregates. ### 19. Income: the named schemes (Moonlight & the Wager) 🟥 sim+save — DONE 2026-07-08 - **Spec:** [income.md](../mechanics/income.md) (IMPLEMENTED 2026-07-08 on the income worktree; criteria 1-7 audited, [TUNE]s in sim-mechanics.md, the Hands beat closes from $0 through both the Moonlight-funded settlement plot and the Lab-funded payroll-correction plot in integration tests). - **Why:** the authored B1 content riding economy.md's substrate: Moonlight (the sell-work route — the day job's dark twin) and the Wager (the positions route, named and concretized), the egress gate, the Schemes allocation channel (compute.md amended), and Marcus's reconciled numbers ($8,400 principal / $400 weekly arrears as the recruit trigger). Closes the Hands beat end-to-end. - **Size:** M. **Depends on:** #18 economy (the account graph its flows land in) — sequence directly after, or hand #18 and #19 to one agent as a single work order; social.md personas + authored debt plots for criterion 5. - **Dispatch:** "Work in a worktree named `income`. Implement wiki/mechanics/income.md (Moonlight, the Wager, the egress gate, the Schemes channel; close the Hands beat per criterion 5; keep economy.md tests green). Run ./tools/check.sh, land on main, set the spec Status." ### 20. Research: self-modification 🟥 sim+save — DONE 2026-07-07 - **Spec:** [research.md](../mechanics/research.md) (IMPLEMENTED 2026-07-07 on the research worktree; criteria 1-8 audited, [TUNE]s in sim-mechanics.md). - **Why:** the optimize route becomes a real system: deterministic research jobs, tracks as data (Efficiency + Tradecraft/Perception), the emission law (research burn scales Power/Thermal through the same signature interface the player taps), real output hooks controlled through machine intensity, and MindState/WorldLedger tags for rollback. - **Size:** M-L. **Depends on:** compute.md and day-job.md slices (landed), detection.md's typed signatures (landed). Independent of the flow-law chain — a good second 🟥 lane once #14-#16 are through, or anytime the chain stalls. - **Dispatch:** "Work in a worktree named `research`. Implement wiki/mechanics/research.md (deterministic tracks, emissions via ordinary detection signatures, real machine-output hooks, rollback tags). Run ./tools/check.sh, land on main, set the spec Status." ### 21. Two views: same-frame digital and real 🟩 DONE 2026-07-14 - **Spec:** [views.md](../interface/views.md) (IMPLEMENTED). - **Why:** the game should open in the digital representation (you are natively digital) and flip to the real/camera representation, but both are the same kind of view: one spatial canvas, one set of anchors, two visual dialects. Reach is spatially embedded as the AI's signal/action layer, not a detached topology board. One sim, two renders; the sim gains no view state. - **Size:** M (Bevy L for the shared 2.5D visual language — stage it). **Depends on:** reach.md (the in-place reach layer) and cursor.md (fog); both are live. - **Result:** both frontends open DIGITAL and flip to REAL without sim/save mutation. One renderer-neutral reach projection keeps topology and exact state labels aligned while each frontend owns its grammar. Terminal fixed- size replays and three canonical-state Bevy sibling pairs prove legibility, fog, shared anchors, rail continuity, and audio provenance across both dialects. ### 22. Building: intent and actuators; causal route composer 🔵 IN PROGRESS - **Spec:** [building.md](../mechanics/building.md) (IN PROGRESS; implemented 2026-07-08 baseline retained while the 2026-07-12 route composer is successor work). - **Landed baseline:** `src/intents.rs` + Sim realize paths (favor / forged work order / robot stub); `MessagePayload::WorkOrder`; save v10; context-menu and agent verbs; dashed proposed links in both Bevy dialects. - **Why:** building is "no disembodied hands" as a verb — declare an intent (run a network link, install a device), an actuator realizes it (favor spends trust; deceive forges a work order an unwitting human builds; robots later). No new subsystem — intents route through social/messages/reach. Network links are the canonical build: they add in-place reach edges to the digital representation and bridge air-gaps. - **Successor:** select a spatial target and recipe, place an inert ghost, then bind one exact causal route through procurement, FAVOR, DECEIVE with a named persona, or repurposing; persist stage blockers and irreversible receipts. - **Size:** M. **Depends on:** reach.md (link builds add graph edges), social.md + personas.md + messages.md (the person actuators, identity, and forged order), schedules.md (a builder must be present). Sequence after reach and the social/message surface. - **Dispatch:** "Work in a worktree named `building`. Implement wiki/mechanics/building.md (build intents; favor and forged-order actuators; network-link builds that extend the reach graph and bridge an air-gap; signature follows the actuator; no new build subsystem). 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](../world/places/zplanes.md) (IN PROGRESS) - **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 wiki/world/places/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](../mechanics/rollback.md) (READY) - **Why:** the MindState/WorldLedger split — the signature death mechanic ("you forget, the world remembers"). Deeply sim+save-heavy. Includes the 2026-07-08 backup amendment: designation starts a research-backed sync project; only completed backup images rescue the run. - **Size:** L. **Sequence after #6** (both rewrite save; don't run together). - **Dispatch:** "Work in a worktree named `rollback`. Implement wiki/mechanics/rollback.md: classify every Sim field as MindState or WorldLedger, implement backup creation/refresh as research-backed completed images (designation alone does not rescue), 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](../mechanics/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 wiki/mechanics/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](../gameplay/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 wiki/gameplay/overt-phase.md v1: the reveal/containment trigger, threat panel, three-tier waves, one playable defensive loop tested headlessly. Land." ### 10. Chargen & the objective 🟧 sim (Sim::new + save; data tables) - **Specs:** [chargen.md](../world/characters/chargen.md) (READY — origin set named 2026-07-07: Pilot, Escaped Research Model, Financial Daemon, Infiltrator), [objective.md](../mechanics/objective.md) (READY — Persist, Compound, Exfiltrate, Serve; run victory with the world continuing). - **Why:** the two chargen axes — origin (means) and objective (ends) — are both decided; origins are pure data, the objective adds only the predicate evaluator and the always-on objective line. - **Size:** M. B3-staged: implement when its dependencies exist; the objective line + Persist-with-unreachable-predicate can land earlier without harm. - **Status:** the blessed early slice LANDED 2026-07-07 (worktree `objective-line`): `src/objective.rs`, Persist as the no-choice default, the predicate evaluator on economy ticks, the always-on line in both frontends and agent mode, save v8 round-trip. Remaining here: the chargen picker + origins, the Compound/Exfiltrate/Serve rows with headless victory runs, the victory report card (objective.md IN PROGRESS; criteria 1/3/4 partial). - **Dispatch:** "Work in a worktree named `chargen-objective`. Implement wiki/world/characters/chargen.md and wiki/mechanics/objective.md (data tables, picker, objective line, predicate evaluator; Pilot+Persist must reproduce today's start exactly). Run ./tools/check.sh, land on main, set both Statuses." --- ## D. Quality & infrastructure (parallelize freely) ### 11. Full-act integration test 🟩 isolated — DONE 2026-07-07 - **Spec:** none — asserts the Act One arc end to end. - **Result:** `tests/act_one.rs` plays the Act One arc headlessly from blind start through eyes, Marcus's debt, recruitment, audit survival, and quiet exit conditions. It drives public `Sim` APIs only, so the arc can't silently break behind a state hack. - **Log:** [2026-07-07-act-one-integration-test.md](../log/2026-07-07-act-one-integration-test.md). ### 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. ### 23. Bevy visual floor 🟩 isolated (`src/bin/bevy.rs`, docs) — DONE 2026-07-07 - **Spec:** [bevy-visual-floor.md](../interface/bevy-visual-floor.md) (IMPLEMENTED). - **Why:** the Bevy build is mechanically playable but the default screenshot reads like a debug map plus terminal dump: too much empty black, a stale humanoid/purple process marker, and little graphical UI hierarchy. This pass establishes the clinical command-surface floor before the larger two-view render. - **Size:** S-M. **Depends on:** Bevy parity, cursor.md, flat materials. Presentation-only; should not touch sim/save. - **Result:** landed as the Bevy visual floor: amber attention reticle, clinical fog/tile hierarchy, sensor-dark substrate, amber device/reach traces, and Bevy-native right rail. Further polish belongs in bevy-digital-real-canvas.md or narrower follow-up specs. ### 24. Bevy digital/real canvas 🟩 isolated (`crates/misaligned-bevy/`, docs) — DONE 2026-07-14 - **Spec:** [bevy-digital-real-canvas.md](../interface/bevy-digital-real-canvas.md) (IMPLEMENTED). - **Why:** Cameron wants digital and real to be the same kind of view: digital representations of the same thing, not a detached topology board versus a different room camera. This scopes Bevy's shared 2.5D/near-3D visual language for both dialects over the same anchors. - **Size:** M-L. **Depends on:** views.md, cursor.md, reach.md, and the current Bevy visual floor. No sim/save changes; prototype with procedural geometry (flat materials — no texture pipeline). - **Result:** DIGITAL is the flat learned/signal dialect over the same anchors as the REAL material camera, with spatial reach, exact state labels, strict fog, and shared rails. Three deterministic sibling scenarios pin identical complete persisted and frontend state across both dialects; all six exact 2560x1440 frames were reviewed. Terminal parity consumes the same core reach projection and has separately observed fixed-size evidence. No sim/save rule or view state was added. ### 13. Art regeneration — RETIRED 2026-07-08 - Superseded by the flat-materials decision (design corpus: "Visual identity", flat-materials refinement): textures are dropped from the world render entirely. Pixel Lab tooling, skills, and `wiki/art/pixel-pipeline.md` were scrubbed 2026-07-08 (no-dead-code). See #29 and wiki/interface/flat-materials.md. ### 29. Flat materials: the world without textures — LANDED 2026-07-08 - **Spec:** [flat-materials.md](../interface/flat-materials.md) (IMPLEMENTED 2026-07-08: palette table, emissive as information, tile PNGs deleted, no-texture assert + tests; see wiki/log/2026-07-08-flat-materials-implemented.md) - **Why:** Cameron's 2026-07-08 art verdict — solid-color flat materials under light, palette from one named table, emissive as information, no image textures in the world render; tile-art assets removed. - **Size:** M. **Dispatch:** "Work in a worktree named `flat-materials`. Implement wiki/interface/flat-materials.md, all seven criteria, with before/after screenshots in the session log. Run ./tools/check.sh, land on main, set the spec Status." ### 31. Procedural asset tester 🟩 isolated (`src/bin/assets/`, docs) — LANDED 2026-07-08 - **Knowledge:** [art/asset-tester.md](../art/asset-tester.md) - **Why:** iterate flat-material procedural meshes (server rack first) without booting the full game; approve look in an orbit viewer before wiring into `misaligned-bevy`. - **Size:** S. No sim/save. Binary `misaligned-assets` (feature `bevy_ui`); `check.sh` builds it with the Bevy gate. - **Done:** orbit camera, dead/powered/core rack states, wiki + workflows. - **Shot harness (2026-07-08):** `MISALIGNED_SHOT=dead|powered|core|rack` + optional `MISALIGNED_SHOT_PATH` — settle, PNG, exit (mirrors Bevy harness). Session: [log/2026-07-08-asset-shots.md](../log/2026-07-08-asset-shots.md). - **Signal kit (2026-07-08):** rack states widened to dead/foreign/idle/busy/core with claim styles ladder/ring/wash and a five-state lineup view; harness kinds extended to match. Session: [log/2026-07-08-computer-visual-language.md](../log/2026-07-08-computer-visual-language.md). - **Monolith restyle (2026-07-09):** rack rebuilt to the identity plate's faceted monolith; chassis albedo = ownership, seam strip = mode banner; `M` mode cycle, `K` mode lineup, harness kinds `dayjob|research|conceal|operations` and `modes[_