1# Miau Is True23A small browser puzzle engine for moving words, changing rules, and solving grid puzzles. The current verified content set contains nine authored proofs: three core levels, three Basic Proofs levels, and three Word Lab levels.45## Run it67```sh8npm install9npm run dev10```1112Open the local URL printed by Vite. Run `npm test` for the engine, pack, sharing, and content fixtures, and `npm run build` to produce `dist/`.1314The current [public test build](https://fcbc.n.zip/) is revision 10 at the stable15nzip address `public:miau-is-true`. It is a static test origin that can support16a later shoo.dev identity integration. The current game has no account or17sign-in flow.1819## Play2021- Arrow keys or WASD: move one cell.22- Z: undo a successful move.23- R: restart the current level.24- Space: wait one turn in an automata proof; active automata then take their next pattern step. The mobile proof shows a WAIT button.25- The desktop fullscreen button is available in developer mode (`?dev`).26- Workshop is visible from Title and INDEX with `Space`, and is also available from Pause.27- Pause includes sound and optional music controls.28- Touch controls, Undo, Restart, and Continue are available on screen.2930Each word is a pushable object. Straight sentences read left to right or top to bottom. `MIAU IS YOU` makes the cat controllable; moving `STOP` out of `ROCK IS STOP` makes rocks passable. `AND` can join subjects or predicates. Words can also turn one noun into another, such as `MIAU IS ROCK`.3132The first property set is `YOU`, `PUSH`, `STOP`, `WIN`, `SINK`, and `DEFEAT`. A mod can declare a level-scoped behavior property such as `TICK`: a formed `FENN IS TICK` sentence activates FENN's repeating move/wait pattern. The pattern follows that property if the sentence changes; its phase is included in Undo, reset, snapshots, and the solver. This engine has its own MIAU levels and presentation; it does not attempt full compatibility with Baba Is You.3334MIAU's 🐈 glyph has a declared native left-facing pose. Successful horizontal movement, including a push, turns it toward travel even when a pack repeats `MIAU: '🐈'` as a plain palette string. Up/down travel keeps its last horizontal pose; other profile glyphs can declare a native direction with `faces` in their palette entry.3536The engine also exposes physical sentence spans for presentation. Each span37keeps its word IDs and horizontal or vertical axis, while semantic rules remain38deduplicated. Settled turn events report movement, push provenance, rule39deltas, transformations, destruction, blocked inputs, and win state.4041The bundled content is currently:4243- Core: `src/levels.js`, three required onboarding proofs.44- Basic Proofs: `mods/garden-basics.cjs` (stable internal pack ID `garden-basics`), PUSH, SINK, and DEFEAT follow-ups.45- Word Lab: `mods/word-lab.cjs`, shared control, noun transformation, and rule cargo.4647The INDEX keeps one chapter opener available for each bundled pack on a fresh48save: `core/break-the-rule` (01), `garden-basics/garden-push` (04), and49`word-lab/shared-control` (07). Later locks and completion progress are keyed50by stable `packId/levelId` pairs, even when the chapters share one sheet.5152The pack service and persistent pack library are implemented and tested for53preview, explicit install, reload, export, URL sharing, replacement, forking,54and removal. The completed E3 sentence-span and E4 sharing changes are archived55under `openspec/changes/archive/`. A local module imported from Workshop first56opens a Gift preview; the player chooses **Keep and play** before it is57installed. A shared `#pack=` URL follows the same pending Gift flow. Workshop58provides Import, Play, Share link, Export, and Remove actions. URL data is59decoded without evaluating CommonJS source.6061The full-screen stage, scene flow, input routing, audio events, local font,62mobile behavior, reduced-motion behavior, and developer flow are implemented.63Revision 9 passes 183 Node tests, the production build, and desktop/mobile browser64checks for the campaign, sharing, automata, and Undo after death. The designer65accepted the earlier stage visual gate. The automata visual review remains in66the active `add-rule-driven-automata` OpenSpec change.6768## Make a mod6970Open **Workshop** from Title or INDEX, then choose **Import…** to select a trusted local `.cjs` or `.js` file. A mod exports a CommonJS object with a manifest, level data, and optional noun palette. See [the example mod](mods/example.cjs) and [modding guide](docs/modding.md). Local modules execute JavaScript in the browser, so load files you trust.7172To try the automata mechanic, import [the FENN clock example](mods/automata-example.cjs) through Workshop. It is a mechanics sample outside the default campaign while the Clockwork world is being authored. Patterns are bounded declarative data in the pack, and shared links preserve that data without executing source.7374## Design and workflow7576- [Design backbone](docs/design-backbone.md): vocabulary, turn order, puzzle design research, and extension boundaries.77- [Roadmap](docs/roadmap.md): verified work, active OpenSpec changes, and long-term plans.78- [Architecture review](docs/architecture-review.md): runtime ownership, scaling risks, and the staged refactor plan.79- `openspec/`: behavioral specs and the history of proposed changes. Start a new feature with `openspec new change <name>`, read `openspec instructions` for each artifact, validate before implementation, then archive after verification.8081Pretext sizes variable-length hint copy. Grid coordinates are fixed integers, so emoji and text metrics never change collision geometry. UI sounds come from the supplied Kenney UI Pack (CC0; license in `public/audio/LICENSE.txt`).