clone

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

docs: record revision 3 acceptance and Workshop entry

Dami committed 71eca4f
commit
71eca4f158b28cd252c964f15208cee52437752a
parent
7ca5868945333efff2b4d9c8bd04a5d5b1c6c3a1
author
Dami <dami.etoile@gmail.com>
4 files changed, +60 -22
MREADME.md18++++++++++++-----
Mdocs/modding.md33+++++++++++++++++++++++-------
Mdocs/roadmap.md23+++++++++++++++------
Mprogress.md8+++++--
M README.md +13 -5
@@ -11,7 +11,7 @@ npm run dev
1111 1212 Open the local URL printed by Vite. Run `npm test` for the engine, pack, sharing, and content fixtures, and `npm run build` to produce `dist/`.1313 14-The current [public test build](https://fcbc.n.zip/) is revision 2 at the stable14+The current [public test build](https://fcbc.n.zip/) is revision 3 at the stable1515 nzip address `public:miau-is-true`. It is a static test origin that can support1616 a later shoo.dev identity integration. The current game has no account or1717 sign-in flow.
@@ -22,6 +22,7 @@ sign-in flow.
2222 - Z: undo a successful move.2323 - R: restart the current level.2424 - The desktop fullscreen button is available in developer mode (`?dev`).25+- Workshop is visible from Title and INDEX with `Space`, and is also available from Pause.2526 - Pause includes sound and optional music controls.2627 - Touch controls, Undo, Restart, and Continue are available on screen.2728
@@ -40,6 +41,11 @@ The bundled content is currently:
4041 - Basic Proofs: `mods/garden-basics.cjs` (stable internal pack ID `garden-basics`), PUSH, SINK, and DEFEAT follow-ups.4142 - Word Lab: `mods/word-lab.cjs`, shared control, noun transformation, and rule cargo.4243 44+The INDEX keeps one chapter opener available for each bundled pack on a fresh45+save: `core/break-the-rule` (01), `garden-basics/garden-push` (04), and46+`word-lab/shared-control` (07). Later locks and completion progress are keyed47+by stable `packId/levelId` pairs, even when the chapters share one sheet.48+4349 The pack service and persistent pack library are implemented and tested for4450 preview, explicit install, reload, export, URL sharing, replacement, forking,4551 and removal. The completed E3 sentence-span and E4 sharing changes are archived
@@ -51,13 +57,15 @@ decoded without evaluating CommonJS source.
5157 5258 The full-screen stage, scene flow, input routing, audio events, local font,5359 mobile behavior, reduced-motion behavior, and developer flow are implemented.54-Revision 2 passed 114 Node tests and 27 browser checks, including the55-production build. The stage remains pending designer round-2 acceptance for56-visual and contrast decisions.60+Revision 3 passed 144 Node tests, 36 browser checks against the public URL,61+and the production build. It fixes next-proof first-frame positioning,62+same-entity `YOU` and `WIN`, spatial INDEX arrows, actor facing, and direct63+Workshop access. The active stage OpenSpec awaits the designer's final visual64+review.5765 5866 ## Make a mod5967 60-Use the **Import module** control 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.68+Open **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.6169 6270 ## Design and workflow6371
M docs/modding.md +25 -8
@@ -43,7 +43,7 @@ The exported object has these fields:
4343 | --- | --- | --- |4444 | `manifest` | yes | `id`, `name`, and semantic `version`; optional `engine` must be `1` |4545 | `levels` | yes | One or more level objects |46-| `palette` | no | Uppercase noun to display string, usually an emoji |46+| `palette` | no | Uppercase noun to display string, or `{ glyph, faces: 'left' \| 'right' }` for an explicitly directional glyph |4747 | `vocabulary` | no | Uppercase noun tokens used by the mod |4848 4949 Manifest IDs use lowercase letters, numbers, `.`, `_`, and `-`, and must start
@@ -54,6 +54,19 @@ or vocabulary entries. Every level requires a unique lowercase `id` and may
5454 also include `title` and `hint`. A pack can contain at most 64 levels, each5555 with at most 4096 entities. The local CommonJS source limit is 512 KiB.5656 57+Palette strings never flip. A mod that opts into facing may use a bounded58+object entry instead:59+60+```js61+palette: {62+ CAT: { glyph: '🐈', faces: 'left' },63+ FLAG: '🚩',64+}65+```66+67+`faces` is only `left` or `right`; the object form must include a non-empty68+`glyph` of at most 16 characters. Shared packs preserve this metadata.69+5770 ## The `@miau/engine` helper5871 5972 For less repetitive level declarations, the loader provides one deliberately
@@ -133,17 +146,21 @@ Local imports follow the same flow: Workshop, Import, Gift preview, then
133146 explicit **Keep and play**. Workshop also offers Play, Share link, Export134147 `.cjs`, and Remove. Installed authored pack data is persisted through the pack135148 library and reloaded without evaluating CommonJS. The service and pending136-install contract are covered by unit tests; the final stage and browser137-integration pass remains in progress.149+install contract are covered by unit tests. [Revision 3 of the public stage](https://fcbc.n.zip/)150+verifies these flows with 144 Node tests and 36 browser checks, including151+missing-audio behavior and the mobile, reduced-motion, and `?dev` paths.152+Workshop is reachable directly from Title and INDEX. The active stage change153+awaits the designer's final visual review.138154 139155 ## OpenSpec status140156 141157 Physical sentence spans are shipped and archived under142-`openspec/changes/archive/2026-09-23-expose-sentence-spans/`. Pack sharing and143-stage integration are active changes under144-`openspec/changes/share-level-packs/` and145-`openspec/changes/build-ink-signal-stage/`; their remaining presentation and146-browser gates are not treated as shipped here.158+`openspec/changes/archive/2026-09-23-expose-sentence-spans/`. Pack sharing is159+archived under `openspec/changes/archive/2026-09-23-share-level-packs/`.160+Same-entity `YOU` and `WIN` resolution is archived under161+`openspec/changes/archive/2026-09-24-fix-same-entity-win/`. The full-screen162+stage is implemented under the active `openspec/changes/build-ink-signal-stage/`163+change, pending final visual review.147164 148165 ## Sentence spans for renderers149166
M docs/roadmap.md +16 -7
@@ -14,6 +14,11 @@ The current content and engine proof set is nine authored levels:
1414 - Word Lab: three CommonJS levels for shared control, noun transformation,1515 and moving one property out of a stacked rule.1616 17+On a fresh save, INDEX leaves the first proof of each chapter open even though18+the 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).20+Later locks and progress remain keyed by stable `packId/levelId` pairs.21+1722 The engine exposes E3 physical sentence spans (`state.sentences`) with source1823 IDs and axis, while semantic rule records remain deduplicated. E3 is archived1924 under `openspec/changes/archive/2026-09-23-expose-sentence-spans/`.
@@ -28,10 +33,13 @@ and Remove. E4 is archived under
2833 The S3–S10 full-screen stage is implemented: Title, INDEX, Proof, Pause, Win,2934 Workshop, and Gift scenes share the canvas, input, settled-event juice, audio,3035 Recursive font, mobile controls, reduced-motion path, and `?dev` diagnostics.31-The stable public build is [revision 2](https://fcbc.n.zip/). It passed 11432-Node tests, 27 browser checks, and the production build. Designer round-233-acceptance remains pending for visual fidelity and contrast; implementation34-status does not imply designer approval.36+The stable public build is [revision 3](https://fcbc.n.zip/). It passed 14437+Node tests, 36 browser checks against the public URL, and the production38+build. It includes the next-proof first-frame, same-entity win, spatial INDEX39+navigation, directional facing, and direct Workshop access fixes. The40+same-entity win change is archived under41+`openspec/changes/archive/2026-09-24-fix-same-entity-win/`; the stage awaits42+final designer visual review.3543 3644 ## 1. Playable foundation — shipped3745
@@ -72,12 +80,13 @@ Proposed change: `add-level-editor-and-replay`.
7280 The pack service, persistence, data-only sharing path, local import preview,7381 URL Gift preview, Workshop actions, and stage shell are implemented. E3 and E47482 are archived; the active OpenSpec change is75-`openspec/changes/build-ink-signal-stage/`. Remaining work is designer round-276-visual and contrast acceptance plus campaign UI polish.83+`openspec/changes/build-ink-signal-stage/`. The remaining stage gate is the84+designer's round-3 visual, contrast, and copy acceptance. Campaign UI polish85+continues after that gate.7786 7887 Proposed change: `add-campaign-progression`.7988 80-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. Add persistent progress only after the level and mod IDs are stable.89+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.8190 8291 ## Current decisions to preserve or revisit deliberately8392
M progress.md +6 -2
@@ -8,6 +8,10 @@ Original prompt: I want to create a web app game engine that supports 'baba is y
88 99 2026-09-23: Playwright browser checks pass for rule breaking, keyboard and touch movement, undo, reset, valid and invalid CommonJS imports, victory, and continuing to the next level. Inspected the rule-break and victory screenshots and the text game state; the rule table updates when STOP moves. Level 2's wall-rule shortcut was sealed and its intended push solution still passes. The designer requested richer settled turn events (E1/E2); source IDs and axes are implemented, and the event payload is receiving a final ordering/contact review before OpenSpec archival.1010 11-2026-09-23: E2 event review completed. Movement includes push provenance and contact-destroyed movers; rule deltas retain source IDs and axis; blocked events identify the physical blocker. E3 sentence spans are implemented and archived at `openspec/changes/archive/2026-09-23-expose-sentence-spans/`: `state.sentences` preserves every maximal physical sentence with source IDs and axis while semantic rules deduplicate. E4 pack-service and pack-library operations are implemented and unit tested, including local import preview, explicit install, reload, export, sharing, replacement, forking, and removal. Local imports and shared URLs both enter the Gift preview and require **Keep and play**. Workshop exposes Import, Play, Share link, Export, and Remove. The active OpenSpec changes are `share-level-packs` and `build-ink-signal-stage`; their final browser and public URL gates remain in progress. A refreshed revision of https://fcbc.n.zip/ is planned after that pass. OpenSpec change `build-dynamic-rule-engine` was validated and archived.11+2026-09-23: E2 event review completed. Movement includes push provenance and contact-destroyed movers; rule deltas retain source IDs and axis; blocked events identify the physical blocker. E3 sentence spans are implemented and archived at `openspec/changes/archive/2026-09-23-expose-sentence-spans/`: `state.sentences` preserves every maximal physical sentence with source IDs and axis while semantic rules deduplicate. E4 pack-service and pack-library operations are implemented and unit tested, including local import preview, explicit install, reload, export, sharing, replacement, forking, and removal. Local imports and shared URLs both enter the Gift preview and require **Keep and play**. Workshop exposes Import, Play, Share link, Export, and Remove. At this checkpoint, the stage and final public browser gates were still in progress. OpenSpec change `build-dynamic-rule-engine` was validated and archived.1212 13-TODO: v0.3 integration is in progress: finish the browser verification and public test URL refresh for the local and URL Gift flows, Workshop actions, persistent packs, and optional music. Keep designer-owned S3 through S10 work planned until its gates are verified. Future mechanic changes should begin with a new OpenSpec change from the roadmap.13+2026-09-23: E4 is archived at `openspec/changes/archive/2026-09-23-share-level-packs/`. The S3–S10 full-screen stage is implemented in revision 2 at https://fcbc.n.zip/. Revision 2 passes 114 Node tests, 27 browser checks, and the production build, covering the stage scenes, input routing, sentence-bar juice, Workshop/Gift flows, audio fallback, local Recursive font, mobile, reduced motion, and `?dev`. Designer round 2 approved the implemented chapter flow; visual P1/P2 changes remain in progress, so this status does not imply final visual sign-off.14+15+2026-09-24: Revision 3 at https://fcbc.n.zip/ passes 144 Node tests, 36 browser checks against the public URL, and the production build. Player reports are fixed: a fresh presentation timeline on next-proof load, same-entity `YOU` + `WIN` after SINK/DEFEAT, visible-link INDEX arrows, and horizontal actor facing with undo history and mod opt-in. Title and INDEX now expose Workshop directly; mobile Workshop rows and action targets fit at 390×844. The same-entity win OpenSpec change is archived. The stage change remains active for designer round-3 copy, contrast, and settled-frame review.16+17+TODO: Complete designer round-3 review and resolve any findings before archiving `build-ink-signal-stage`. Future mechanic changes should begin with a new OpenSpec change from the roadmap.