1# Roadmap23This page distinguishes verified work from planned work. Each new milestone4still needs an OpenSpec change with scenarios and engine fixtures before it is5called shipped.67## Verified nine-proof stage and stage shell89The current content and engine proof set is nine authored levels:1011- Core: three MIAU teaching levels for YOU, PUSH, STOP, WIN, and AND.12- Basic Proofs (`garden-basics` is the stable internal pack ID): three13 CommonJS levels for PUSH, SINK, and DEFEAT.14- Word Lab: three CommonJS levels for shared control, noun transformation,15 and moving one property out of a stacked rule.1617On a fresh save, INDEX leaves the first proof of each chapter open even though18the nine proofs share one sheet: Core `core/break-the-rule` (01), Basic Proofs19`garden-basics/garden-push` (04), and Word Lab `word-lab/shared-control` (07).20Later locks and progress remain keyed by stable `packId/levelId` pairs.2122The engine exposes E3 physical sentence spans (`state.sentences`) with source23IDs and axis, while semantic rule records remain deduplicated. E3 is archived24under `openspec/changes/archive/2026-09-23-expose-sentence-spans/`.2526The E4 pack service and persistent pack library are implemented and tested for27preview, explicit installation, reload, replacement, forking, export, URL28links, and removal. Local imports and shared URLs both enter an explicit Gift29preview before installation. Workshop exposes Import, Play, Share link, Export,30and Remove. E4 is archived under31`openspec/changes/archive/2026-09-23-share-level-packs/`.3233The S3–S10 full-screen stage is implemented: Title, INDEX, Proof, Pause, Win,34Workshop, and Gift scenes share the canvas, input, settled-event juice, audio,35Recursive font, mobile controls, reduced-motion path, and `?dev` diagnostics.36The stable public build is [revision 10](https://fcbc.n.zip/). It passed 18537Node tests, the full sharing and automata browser suites, focused mobile38death/Undo visual regression, the Tidewater solver pass, and the production build. It includes the39next-proof first-frame, same-entity win, spatial INDEX navigation, directional40facing, direct Workshop access, Gift layout, and death/Undo visual fixes. The41same-entity win change is archived under42`openspec/changes/archive/2026-09-24-fix-same-entity-win/`. The designer43accepted the stage visual gate, and its change is archived under44`openspec/changes/archive/2026-09-24-build-ink-signal-stage/`. Death/Undo visual45recovery is archived under46`openspec/changes/archive/2026-09-24-fix-undo-death-visual/`; Gift layout remains47active for designer review.4849The runtime architecture review is archived under50`openspec/changes/archive/2026-09-24-modularize-runtime-boundaries/`.51The settled rule refresh for contact destruction is archived under52`openspec/changes/archive/2026-09-24-refresh-rules-after-contact-destruction/`.53The world team is independently rechecking Tidewater before it is bundled.5455## 1. Playable foundation — shipped5657Three MIAU puzzles establish the turn contract: stacked occupancy, cardinal movement, atomic push chains, `IS` and `AND`, six properties, transformations, undo, a CommonJS content format, and a fixed emoji grid. The completed OpenSpec change is archived at `openspec/changes/archive/2026-09-23-build-dynamic-rule-engine/`; its behavioral requirements are now the live specs in `openspec/specs/`.5859## 2. Make the rule language composable — planned6061Proposed changes: `add-negation-and-conditions`, then `add-paired-interactions`.6263- Add `NOT` with explicit contradiction and transformation precedence.64- Add `ON`, `NEAR`, and `LONELY` only after the parser can report *why* a rule is active for each object.65- Add paired effects (`OPEN`/`SHUT`, `HOT`/`MELT`) with conflict examples in fixtures.66- Keep `ALL`, `EMPTY`, `TEXT`, and `LEVEL` out of this milestone because they change selection and meta rules more broadly.6768**Gate:** every new word has a small teaching level, a rule display explanation, a conflict test, and an undo/replay fixture.6970## 3. Let mods define behavior — planned7172Proposed change: `add-deterministic-mod-systems`.7374The current CommonJS contract adds nouns, emoji, and levels. A later contract should register named properties and pure effect handlers against explicit turn phases. The host should pass read-only state queries and queue mutations; hooks should never directly edit the rule table or renderer. Decide save serialization and load order before freezing the API. For untrusted shared mods, move execution into an isolated worker or iframe with a versioned message protocol.7576**Gate:** a sample mod adds one genuinely new property, reproduces the same result from a recorded intent sequence, and fails cleanly when its handler errors.7778## 4. Author and test puzzles — planned7980Proposed change: `add-level-editor-and-replay`.8182- Add a grid editor with a palette derived from the vocabulary registry.83- Show active sentences and source word coordinates while editing.84- Export/import CommonJS level packs and compact replay traces.85- Check bounds, initial `YOU` control, reachable rule words, and common Sokoban dead squares. Treat solver output as a hint for authors rather than proof of puzzle quality.8687**Gate:** a designer can build, play, undo, export, reload, and replay a puzzle without changing source files.8889## 5. Campaign and sharing — v0.3 in progress9091The pack service, persistence, data-only sharing path, local import preview,92URL Gift preview, Workshop actions, and stage shell are implemented. E3, E4,93and the stage are archived. Campaign UI polish continues as a new change.9495The public reduced-motion walkthrough passed at 1280×800 and 390×844. The96next design pass covers an audio mix check against the shipped Kenney clip map97and spacing checks for new teaching proofs. These do not reopen the accepted98stage gate.99100Proposed change: `add-campaign-progression`.101102Group levels by the word they introduce, mark challenges separately, and preserve multiple paths through hard sections. Test for unintended shortcuts as well as intended solutions. Extend the existing stable-ID progress model to track chapter and challenge paths.103104## Current decisions to preserve or revisit deliberately1051061. Multiple `YOU` objects resolve in a stable direction-aware order. Future simultaneous movement would need a new rule-engine spec and replay fixtures.1072. `STOP` takes precedence over `PUSH` on the same object. A blocked intent does not consume a move.1083. Contacts resolve `SINK`, then `DEFEAT`, then `WIN`, so a defeated controlled object cannot win in the same cell.1094. Stacked words generate sentence combinations in stable object order; the UI offsets occupants and shows a stack count.1105. No `YOU` state is recoverable with undo or restart. A later loss screen should be designed only if puzzles need it.111112The [design backbone](design-backbone.md) explains the research behind these priorities. The first release documents its actual behavior in `openspec/specs/`.