clone

a browser grid puzzle game where you push words around to rewrite the rules of each level

main
miau-is-true / docs / roadmap.md
roadmap.md 6.8K source

Roadmap

This page distinguishes verified work from planned work. Each new milestone still needs an OpenSpec change with scenarios and engine fixtures before it is called shipped.

Verified nine-proof stage and stage shell

The current content and engine proof set is nine authored levels:

  • Core: three MIAU teaching levels for YOU, PUSH, STOP, WIN, and AND.
  • Basic Proofs (garden-basics is the stable internal pack ID): three CommonJS levels for PUSH, SINK, and DEFEAT.
  • Word Lab: three CommonJS levels for shared control, noun transformation, and moving one property out of a stacked rule.

On a fresh save, INDEX leaves the first proof of each chapter open even though the nine proofs share one sheet: Core core/break-the-rule (01), Basic Proofs garden-basics/garden-push (04), and Word Lab word-lab/shared-control (07). Later locks and progress remain keyed by stable packId/levelId pairs.

The engine exposes E3 physical sentence spans (state.sentences) with source IDs and axis, while semantic rule records remain deduplicated. E3 is archived under openspec/changes/archive/2026-09-23-expose-sentence-spans/.

The E4 pack service and persistent pack library are implemented and tested for preview, explicit installation, reload, replacement, forking, export, URL links, and removal. Local imports and shared URLs both enter an explicit Gift preview before installation. Workshop exposes Import, Play, Share link, Export, and Remove. E4 is archived under openspec/changes/archive/2026-09-23-share-level-packs/.

The S3–S10 full-screen stage is implemented: Title, INDEX, Proof, Pause, Win, Workshop, and Gift scenes share the canvas, input, settled-event juice, audio, Recursive font, mobile controls, reduced-motion path, and ?dev diagnostics. The stable public build is revision 10. It passed 185 Node tests, the full sharing and automata browser suites, focused mobile death/Undo visual regression, the Tidewater solver pass, and the production build. It includes the next-proof first-frame, same-entity win, spatial INDEX navigation, directional facing, direct Workshop access, Gift layout, and death/Undo visual fixes. The same-entity win change is archived under openspec/changes/archive/2026-09-24-fix-same-entity-win/. The designer accepted the stage visual gate, and its change is archived under openspec/changes/archive/2026-09-24-build-ink-signal-stage/. Death/Undo visual recovery is archived under openspec/changes/archive/2026-09-24-fix-undo-death-visual/; Gift layout remains active for designer review.

The runtime architecture review is archived under openspec/changes/archive/2026-09-24-modularize-runtime-boundaries/. The settled rule refresh for contact destruction is archived under openspec/changes/archive/2026-09-24-refresh-rules-after-contact-destruction/. The world team is independently rechecking Tidewater before it is bundled.

1. Playable foundation — shipped

Three 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/.

2. Make the rule language composable — planned

Proposed changes: add-negation-and-conditions, then add-paired-interactions.

  • Add NOT with explicit contradiction and transformation precedence.
  • Add ON, NEAR, and LONELY only after the parser can report why a rule is active for each object.
  • Add paired effects (OPEN/SHUT, HOT/MELT) with conflict examples in fixtures.
  • Keep ALL, EMPTY, TEXT, and LEVEL out of this milestone because they change selection and meta rules more broadly.

Gate: every new word has a small teaching level, a rule display explanation, a conflict test, and an undo/replay fixture.

3. Let mods define behavior — planned

Proposed change: add-deterministic-mod-systems.

The 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.

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.

4. Author and test puzzles — planned

Proposed change: add-level-editor-and-replay.

  • Add a grid editor with a palette derived from the vocabulary registry.
  • Show active sentences and source word coordinates while editing.
  • Export/import CommonJS level packs and compact replay traces.
  • 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.

Gate: a designer can build, play, undo, export, reload, and replay a puzzle without changing source files.

5. Campaign and sharing — v0.3 in progress

The pack service, persistence, data-only sharing path, local import preview, URL Gift preview, Workshop actions, and stage shell are implemented. E3, E4, and the stage are archived. Campaign UI polish continues as a new change.

The public reduced-motion walkthrough passed at 1280×800 and 390×844. The next design pass covers an audio mix check against the shipped Kenney clip map and spacing checks for new teaching proofs. These do not reopen the accepted stage gate.

Proposed change: add-campaign-progression.

Group 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.

Current decisions to preserve or revisit deliberately

  1. Multiple YOU objects resolve in a stable direction-aware order. Future simultaneous movement would need a new rule-engine spec and replay fixtures.
  2. STOP takes precedence over PUSH on the same object. A blocked intent does not consume a move.
  3. Contacts resolve SINK, then DEFEAT, then WIN, so a defeated controlled object cannot win in the same cell.
  4. Stacked words generate sentence combinations in stable object order; the UI offsets occupants and shows a stack count.
  5. No YOU state is recoverable with undo or restart. A later loss screen should be designed only if puzzles need it.

The design backbone explains the research behind these priorities. The first release documents its actual behavior in openspec/specs/.