# Implementation backlog: MaleCNS and modular sessions Status: **planned, not started**. Written 2026-09-18. Companion to the [design and code analysis](malecns-modular-sessions.md), based on `f7bc13a`. This is the execution order for that proposal. It does not authorize deployment or a live stream. Reconcile the baseline with merged macro/shop/recovery work before implementation. Existing feed/control contracts and TypeScript oracle rules remain binding. Concrete second-game audit: [Melee framework and emulator plan](melee-framework-audit.md). Its MELEE-01/02 spikes specialize EMULATOR-01 below and can proceed alongside framework extraction; they do not depend on importing MaleCNS first. ## 1. Delivery strategy Deliver working vertical slices; keep the existing FAFB/Game Boy composition usable throughout. 1. Establish a behavior baseline and explicit dataset/profile identities. 2. In parallel workstreams, characterize MaleCNS and extract the single-agent session runtime. 3. Demonstrate two isolated brains driving one ROM-free shared environment. 4. Expose that session through versioned feed/control contracts and a multi-agent broadcast. 5. Integrate a specifically chosen alternative emulator after its capability spike passes. 6. Finish physical package reorganization once the second consumer proves the boundaries. **First milestone:** a reproducible headless MaleCNS run and a reusable single-agent session. **Second milestone:** two flies in a synthetic arena with coherent resume and a local broadcast. **Third milestone:** two flies in the chosen fighting game, with documented task scaffolding. No elapsed-time estimate is committed before the import and emulator spikes establish their unknowns. Split an item further when its contract and implementation cannot be reviewed together. ## 2. Work queue Every item starts pending. Branch names are suggested implementation branches, not branches already created. Builders use separate worktrees; the coordinator reviews contracts and results. ### FOUNDATION-01 — Pin existing behavior - **Branch:** `test/session-baseline` - **Depends on:** reconciliation with current main and related open work. - Record effective legacy configuration, fingerprint, version strings and frame ordering. - Add a ROM-free transition harness around the service's frame orchestration; capture brain ticks, decoded actions, reward application and recovery effects with explicit clocks. - Distinguish exact numerical replay from intentional macro/hold/transient reset on restore. - **Done:** existing goldens pass; a trace fixture detects reordered vision/reward application; legacy feed/API fixtures and compatibility identity are unchanged. ### FOUNDATION-02 — Specify bundle and behavior identities - **Branch:** `feat/brain-profile-contract` - **Depends on:** FOUNDATION-01. - Specify dataset manifests, original-ID mapping, anatomical roles, sensory bindings, readout bindings and composite behavior identity in a focused contract. - Add profile resolution/validation around the existing core in TypeScript and Rust. - Keep schema-1 fingerprinting and the legacy macro-role exception behind the legacy path. - Add strict graph validation for new bundles, shared invalid fixtures and profile mismatch tests. - **Done:** empty required populations, malformed CSR and incorrect profile restores fail; legacy FAFB artifacts and default numerical version strings remain unchanged. ### DATA-01 — Acquire and normalize MaleCNS - **Branch:** `feat/malecns-import` - **Depends on:** FOUNDATION-02. - Build a source-specific importer from official v1.0 tables with checksummed source locks. - Reconcile the Codex versus neuPrint inventories, or explicitly select and document one. - Preserve raw contact counts, transmitter evidence, original IDs and missing-data indicators. - Emit deterministic graph bundles, weight≥1/weight≥5 comparison variants, and an exclusion/ clipping/coverage report. Decide schema-1 feasibility from measured weight ranges. - Add attribution and license records with actual artifacts; keep raw downloads out of git. - **Done:** repeated builds match; endpoint/role/index invariants pass; both loaders agree; no service startup or ordinary unit test needs a download. ### DATA-02 — Characterize MaleCNS in the current kernel - **Branch:** `feat/malecns-baseline-profile` - **Depends on:** DATA-01. - Audit L1 geometry, hemisphere handling, KC/MBON/PAM mappings and brain-versus-VNC motor roles. - Define a versioned fixed readout; keep task action partitions out of anatomical truth. - Run learning-off first, then learning-on, using fixed sensory traces and multiple seeds. - Generate TS reference goldens and compare Rust exactly; measure activity, saturation, initialization, memory and per-phase latency for both graph thresholds. - **Done:** publish a reproducible characterization report and profile choice. Stop task integration if required mappings are missing or dynamics are unusable; any recalibration becomes a named profile rather than an edit to the legacy model. ### RUNTIME-01 — Separate environment execution from task interpretation - **Branch:** `refactor/environment-task-boundary` - **Depends on:** FOUNDATION-02. - Specify controller ports, digital/analog controls, rational cadence, media descriptors, observation ownership and backend capabilities. - Wrap binjgb as the first environment; retain Game Boy FFI/cache/state behavior. - Keep Pokémon memory inspection, objective routing, macros and reward rules in its task. - Preserve existing imports through a facade; avoid simultaneous directory moves. - **Done:** existing single-agent action/reward traces match and a fake environment can be driven through the same boundary without importing binjgb or task-specific addresses. ### RUNTIME-02 — Extract the single-agent session - **Branch:** `refactor/session-runtime` - **Depends on:** RUNTIME-01. - Move deterministic agent/environment/task orchestration out of `Sim` into a library. - Keep HTTP, WebSocket serialization, wall-clock publication and process supervision in flysim. - Give session clock, action executor, task ledger and recovery state explicit owners. - Wrap the existing composition with legacy ordering, checkpoint and reset semantics. - **Done:** headless consumer runs a session without Twitch/browser; the legacy composition passes its traces and restore tests; a slow snapshot consumer cannot stall simulation. ### RUNTIME-03 — Add synchronized multi-agent sessions - **Branch:** `feat/multi-agent-arena` - **Depends on:** RUNTIME-02. - Implement a ROM-free two-player arena and per-port controller ownership. - Evaluate both brains against one observation boundary; apply one complete action batch; advance the world once. Start sequentially, then verify parallel execution equivalence. - Isolate RNG, stimulation, decoder holds, gains, traces and rewards per agent; share only immutable topology. Enforce a total worker budget and single-dispatcher pool ownership. - Define participant failure, lateness and episode reset policies. - **Done:** no cross-agent state leakage; swapping evaluation order leaves results unchanged; one failed participant cannot accidentally advance a half-controlled match. ### STATE-01 — Capture and resume whole sessions - **Branch:** `feat/session-checkpoints` - **Depends on:** RUNTIME-03; specify the state contract during RUNTIME-02. - Define the new envelope/manifest and preserve the `FLYSIM01` reader. - Capture all agents, environment, task/executor/admission state and clock remainders at one boundary. Bound off-thread write jobs and retain atomic manifest commit semantics. - Validate all components before installing any restored state; define external-backend staging. - **Done:** uninterrupted and resumed synthetic matches agree; corrupting any participant refuses the generation without partial restore; crash-injection fallback tests pass. ### WIRE-01 — Introduce session feed/control v2 - **Branch:** `feat/session-protocol-v2` - **Depends on:** FOUNDATION-02, RUNTIME-02; use RUNTIME-03 fixtures for integration. - Write binding contracts before consumer implementation: descriptors, scoped agents/events, media IDs/timestamps, task progress, targeted stimulation and retry/idempotency behavior. - Implement Rust/TS codecs, schemas and a fake server; preserve the legacy v1 surface. - Specify descriptor reconnect behavior, asset/index identity, bounded message sizes and audio gaps. - **Done:** cross-language fixtures pass for unequal neuron counts and shared/private views; duplicate attachment kinds no longer collide; ambiguous targets and incompatible schemas fail. ### PRESENTATION-01 — Compose multi-agent stage and bridge - **Branch:** `feat/multi-agent-broadcast` - **Depends on:** WIRE-01, RUNTIME-03. - Replace stage store/scaler singletons with session/agent instances and one paint scheduler. - Resolve geometry from hashed descriptors, preserve the Game Boy presentation, and add a shared-match layout with explicit audio ownership. - Route bridge commands/redemptions to persistent session/agent identities; test lost responses, retries and restart without applying an interaction twice or to a different agent. - **Done:** local synthetic match broadcast works; two-agent PNGs receive operator review; browser/fixture/legibility checks pass; bridge remains template-only and quiet-mode capable. ### DATA-03 — Run MaleCNS through the complete application - **Branch:** `feat/malecns-session` - **Depends on:** DATA-02 and descriptor-aware assets from WIRE-01/PRESENTATION-01. - Expose explicit profile selection and create a fresh MaleCNS state namespace. - Verify task/controller bindings, stimulation capability and displayed anatomy identity. - A narrow single-agent descriptor extension may ship earlier only with matching v1 contract and consumer updates; do not publish MaleCNS spikes as implicit FAFB indices. - **Done:** local one-hour soak and restore drill pass; paired learning-off/on observations are recorded without claiming improved play; FAFB remains available unchanged. ### EMULATOR-01 — Establish the alternative backend's capabilities - **Branch:** `spike/fighting-game-backend` - **Depends on:** RUNTIME-01; can proceed alongside later runtime work. - Choose the exact game/version and emulator; Melee/Dolphin is a candidate, not a commitment. - Prove pause/step, simultaneous ports, analog input, frame/audio capture, state inspection, save/restore, process lifecycle and achievable cadence with synthetic controller traces. - Prefer private IPC if embedding would leak emulator internals into the session library. - **Done:** capability report includes pinned backend/content identity and reproducible results. If bounded stepping or coherent restore fails, stop and revise the backend/requirements before writing neural game logic. No game content enters repository fixtures. ### EMULATOR-02 — Build the two-fly fighting-game slice - **Branch:** `feat/two-fly-fighting-game` - **Depends on:** EMULATOR-01, STATE-01, PRESENTATION-01. - Implement fixed controller mapping, match/round interpretation, positive attributed rewards, observation policy and episode recovery. Display selected actions and actual controls. - Validate one fly, two flies, round transitions, backend failure and resume in that order. - Run side swaps and repeated seeds; compare learning-off and simple control baselines before interpreting win rates. Separate show settings from controlled evaluation settings. - **Done:** repeated local matches sustain declared cadence; restoration/failure policies work; scaffold, interventions and limits are documented; reviewed match presentation is legible. ### PACKAGE-01 — Finalize reusable packages and release compositions - **Branch:** `refactor/reusable-package-layout` - **Depends on:** a useful second backend plus PRESENTATION-01. - Extract proven crate/package boundaries from the design's module table; preserve facades. - Move the Rust workspace only in a mechanical follow-up if it makes library consumption clearer. - Update CI/build/vendor/golden paths, dataset/view asset packaging and compatibility preflight. - Add minimal external-style Rust/TS consumers and a synthetic example composition. - Reconcile current docs, stale template explanations and licensing/asset attribution. - **Done:** both legacy and new compositions package successfully; incompatible state is rejected before release selection; libraries run without importing broadcast services. ## 3. Dependency map and first execution batch ```text FOUNDATION-01 → FOUNDATION-02 ┬→ DATA-01 → DATA-02 ───────────────→ DATA-03 └→ RUNTIME-01 → RUNTIME-02 → RUNTIME-03 → STATE-01 │ └→ WIRE-01 ───────┐ └→ EMULATOR-01 PRESENTATION-01 │ STATE-01 + EMULATOR-01 + PRESENTATION-01 → EMULATOR-02 second backend + presentation → PACKAGE-01 ``` The item dependency lists are authoritative; the diagram is a reading aid. When implementation begins, take **FOUNDATION-01 only** as the first build task. Then review FOUNDATION-02's contract before assigning DATA-01 and RUNTIME-01 to independent worktrees. Contract/schema authorship is serialized to avoid conflicting definitions. Deployment host work remains serialized under the repository's claim protocol. ## 4. Definition of done for every implementation branch - Scope and intentional behavior changes are stated; compatibility impact is explicit. - Meaningful boundary tests cover the changed behavior; the TS oracle is not adjusted to accommodate Rust output. Existing committed real-data goldens stay mandatory. - `npm test`, `npm run typecheck`, `cargo test --workspace` (Rust workspace) and `infra/tests/lint.sh` pass before merge. Visual changes also pass applicable Playwright checks and PNG review. Optional full-MaleCNS/ROM runs record skips honestly. - Performance-sensitive changes report representative activity, agent count, thread budget, memory and tail latency. New experiments state what is modeled versus handwritten. - Review the complete diff, merge with `--no-ff` when authorized, and update this queue with commit, evidence and unresolved follow-ups. Rollback includes compatible state, not just code. ## 5. Decisions needed before the relevant work starts | Decision | Deadline | Default recommendation | | --- | --- | --- | | MaleCNS inventory/filter policy | DATA-01 completion | Official versioned source; retain both threshold variants until measured | | MaleCNS sensory/readout profile | DATA-02 | Audited L1 mapping with existing numerical model first | | Exact fighting game and backend | EMULATOR-01 | Evaluate one concrete title/backend rather than supporting a console family at once | | Number of flies and target resource budget | RUNTIME-03 performance gate | Two first; characterize four before promising it | | Learning retention and sugar in matches | EMULATOR-02 task contract | Retention explicit; stimulation disabled in controlled comparisons | | Package publication versus monorepo reuse | PACKAGE-01 | Monorepo libraries/examples first; public package publishing later | There is no need to resolve these now to plan another feature. This backlog is ready for resumption at FOUNDATION-01.