- commit
- 78137b13dd115626eba1c03cdf5217da4b7e11fc
- parent
- a6a5f160bcd52560628edbf438256b4895ad5729
- author
- Dami <dami.etoile@gmail.com>
@@ -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 7 at the stable14+The current [public test build](https://fcbc.n.zip/) is revision 8 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.@@ -31,6 +31,8 @@ Each word is a pushable object. Straight sentences read left to right or top to
3131 3232 The 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.3333 34+MIAU'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.35+3436 The engine also exposes physical sentence spans for presentation. Each span3537 keeps its word IDs and horizontal or vertical axis, while semantic rules remain3638 deduplicated. Settled turn events report movement, push provenance, rule@@ -58,7 +60,7 @@ decoded without evaluating CommonJS source.
5860 5961 The full-screen stage, scene flow, input routing, audio events, local font,6062 mobile behavior, reduced-motion behavior, and developer flow are implemented.61-Revision 7 passes 166 Node tests, the production build, and focused automata63+Revision 8 passes 170 Node tests, the production build, and focused automata6264 browser checks against the public URL on desktop and mobile. The designer6365 accepted the earlier stage visual gate. The automata visual review remains in6466 the active `add-rule-driven-automata` OpenSpec change.No content changes.
No content changes.
No content changes.
No content changes.
@@ -8,4 +8,4 @@
88 99 - [x] 2.1 Add unit regressions for built-in and mod palettes, horizontal turns, pushes, blocked input, Undo, reset, and reduced motion.1010 - [x] 2.2 Verify browser controls, rule changes, CommonJS mod loading, Undo, and right/left MIAU poses on desktop and mobile.11-- [ ] 2.3 Run the full Node suite, production build, strict OpenSpec validation, and update the public preview.11+- [x] 2.3 Run the full Node suite, production build, strict OpenSpec validation, and update the public preview.@@ -45,35 +45,43 @@ The app SHALL expose a polite live region and readable text equivalents for move
4545 - **THEN** the board, INDEX, active rules, current proof, pack status, and controls remain understandable from static text and tile labels4646 4747 ### Requirement: Supported character glyphs SHALL use scoped facing state48-The presentation SHALL maintain facing per entity ID as visual state separate from simulation coordinates. The built-in MIAU and FENN glyphs SHALL be directional; a mod palette object SHALL opt into directional treatment explicitly. Only an accepted horizontal self-move SHALL update an entity's facing. Pushed entities, vertical self-moves, transformations, idle turns, and blocked intents SHALL preserve the entity's prior facing. Glyphs without directional treatment SHALL use their unchanged fallback. Undo SHALL restore the per-ID facing snapshot, while loading or resetting a level SHALL use its native declared or neutral facing. A facing change MAY use a 70ms glyph-only squash; reduced motion SHALL apply the facing change instantly.48+The presentation SHALL maintain horizontal facing per entity ID as visual state separate from simulation coordinates. The built-in MIAU 🐈 SHALL have native left-facing direction, including when a pack repeats that same glyph as a plain palette string. A mod palette object MAY declare `faces: 'left' | 'right'` for another profile glyph; a different plain string and a front-facing glyph such as FENN 🦊 SHALL remain non-directional by default. Every accepted horizontal displacement SHALL update a directional entity's facing to its travel direction, including being pushed. When a pushed entity also moves itself horizontally in the same turn, its self-movement direction SHALL take precedence. Vertical movement, transformation, idle frames, and blocked intents SHALL preserve prior horizontal facing. Undo SHALL restore per-ID facing history, while loading or resetting a level SHALL use its native declared or neutral facing. A facing change MAY use a glyph-only squash; reduced motion SHALL apply the direction immediately.4949 50-#### Scenario: A direct horizontal MIAU move updates facing51-- **WHEN** a MIAU entity makes an accepted horizontal self-move52-- **THEN** its supported glyph faces the travel direction after the settled turn, with a 70ms glyph-only squash when motion is enabled and unchanged engine coordinates50+#### Scenario: Built-in cat faces forward in every pack51+- **WHEN** a MIAU entity with the built-in 🐈 glyph moves right in a core proof or a pack with `palette.MIAU: '🐈'`52+- **THEN** the settled board mirrors the native-left glyph to face right, without mirroring its cell, shadow, or text5353 54-#### Scenario: Pushes and vertical movement preserve facing55-- **WHEN** a FENN entity is pushed or makes an accepted vertical self-move56-- **THEN** its prior facing remains unchanged, regardless of the movement direction or whether it was directly controlled54+#### Scenario: Leftward travel uses the native pose55+- **WHEN** that MIAU entity subsequently moves left56+- **THEN** the settled board draws the native-left glyph without a mirror57+58+#### Scenario: Pushes turn a directional actor59+- **WHEN** a directional entity is successfully pushed one cell to the right60+- **THEN** its settled horizontal facing is right, while a blocked push leaves its prior facing unchanged61+62+#### Scenario: Self-movement wins after a push63+- **WHEN** one accepted turn pushes an actor right and then moves that actor left under an automaton rule64+- **THEN** the actor's settled horizontal facing is left65+66+#### Scenario: Vertical movement preserves the horizontal pose67+- **WHEN** a MIAU entity moves up or down after facing right68+- **THEN** its horizontal glyph orientation remains right because the side-profile emoji has no vertical view5769 5870 #### Scenario: A transformation preserves per-ID facing5971 - **WHEN** an entity transforms to another noun during a settled turn60-- **THEN** the entity ID retains its prior facing, unless the resulting noun has no directional glyph and uses its normal fallback61-62-#### Scenario: A mod opts a glyph into directional treatment63-- **WHEN** a mod palette explicitly marks an object glyph as directional64-- **THEN** the stage applies the same horizontal self-move facing rules to that glyph; unmarked mod glyphs remain non-directional72+- **THEN** the entity ID retains its prior horizontal facing, unless the resulting noun has no directional glyph and uses its normal fallback6573 66-#### Scenario: Facing stays stable without a qualifying move67-- **WHEN** an entity is idle or receives a blocked intent68-- **THEN** its prior facing remains unchanged and no direction is inferred from the failed intent74+#### Scenario: A custom mod glyph opts in explicitly75+- **WHEN** a mod supplies a different profile glyph with `faces: 'right'`76+- **THEN** leftward travel mirrors that glyph, while a different plain-string glyph is not mirrored6977 70-#### Scenario: Undo and reset restore native facing71-- **WHEN** the player undoes a turn or loads/resets a level72-- **THEN** undo restores each entity ID's prior facing snapshot and the new level uses its declared or neutral native facing instead of inheriting the previous level's direction78+#### Scenario: Undo and reset restore the correct pose79+- **WHEN** the player undoes a directional turn or resets/loads a level80+- **THEN** Undo restores the prior per-ID facing, and reset/load returns MIAU to the declared native-left pose7381 7482 #### Scenario: Reduced motion skips facing animation75-- **WHEN** reduced motion is enabled and a qualifying horizontal self-move changes facing76-- **THEN** the glyph changes facing immediately without the 70ms squash animation83+- **WHEN** reduced motion is enabled and a horizontal move changes facing84+- **THEN** the settled glyph faces its direction immediately without a transitional squash7785 7886 ### Requirement: Undo SHALL restore the complete visual entity state7987 After a successful Undo, the presentation SHALL reconcile visible entities from the restored engine snapshot by stable ID, including existence, noun or glyph, grid position, facing, control marker, and active visual effects. Effects created by the undone death turn SHALL not remain visible after reconciliation.@@ -25,3 +25,5 @@ TODO: Review the audio mix by ear and keep the spacing rule for future teaching
2525 2026-09-23: Rule-driven automata now pass 166 Node tests, the production build, strict OpenSpec validation, and 9 focused browser checks across desktop and 390×844 mobile. FENN 🦊 is the named example actor; the TICK beat strip, on-board action cue, optional sound, Space/mobile WAIT, Undo/reset phase, data-only sharing, and solver snapshot/phase support work. The unbundled `mods/automata-example.cjs` remains a mechanics sample because the solver finds a bypass in 8 rightward moves; the Clockwork world is authoring a timing-dependent proof. Gates/occupancy plates and rule-driven one-step tiles are assigned to Crate Works and Tidewater respectively, with semantics pending scenario review in `docs/mod-mechanic-stressors.md`.2626 2727 2026-09-23: Public revision 7 at https://fcbc.n.zip/ preserves the existing nzip target and expiry (2026-10-23T23:16:58Z). Its focused desktop/mobile browser run passes 9 checks with no console errors. The final mobile WAIT control is labelled plainly and fits above Restart. The active automata OpenSpec change remains open for deterministic solver and visual fixtures, plus designer review of the final frames. The designer was asked to replace the old fox token in its owned reference docs and prototype with FENN.28+29+2026-09-23: Public revision 8 corrects MIAU's intermittent backward pose. The proof renderer now recognizes the built-in 🐈 as native-left even through a same-glyph plain palette string, and every accepted horizontal displacement (including pushes) sets the actor's facing from travel; Undo/reset still restore prior/native direction. The FENN face emoji example is neutral. The new `fix-miau-forward-facing` OpenSpec change is strictly valid and complete after 170 Node tests, the production build, the existing browser flow, and the focused desktop/mobile facing flow against the public URL. Vertical moves retain the side-profile's last horizontal pose. The designer received the corrected D18 contract for its owned reference docs.