- commit
- d53da086f30d966d54f82084cb69983f5b9dd6a4
- parent
- 0db331ceb61d078e8c2849aa593800e30fb1f329
- author
- Dami <dami.etoile@gmail.com>
No content changes.
No content changes.
No content changes.
No content changes.
No content changes.
No content changes.
@@ -20,15 +20,19 @@ The renderer SHALL draw the simulation on the ink-and-signal full-screen canvas
2020 - **THEN** the renderer draws maximal horizontal or vertical bars from those physical spans, including exact duplicates2121 2222 ### Requirement: The app SHALL show active rules and turn feedback23-The presentation SHALL render the current proof HUD, ledger, hints, keycap controls, active/inactive words, and no-YOU state on the stage. It SHALL consume settled engine events for blocked movement, undo, reset, transformations, defeat, victory, and rule changes without changing simulation state.23+The presentation SHALL render the current proof HUD, ledger, hints, keycap controls, active/inactive words, and no-YOU state on the stage. It SHALL consume settled engine events for blocked movement, undo, reset, transformations, defeat, victory, and rule changes without changing simulation state. New ledger sentences SHALL stamp tile by tile; broken sentences SHALL strike and fall away. Changed step digits SHALL roll up on forward counts and down on Undo. Pushed word tiles SHALL skid toward actual travel, while pushers remain level. Visible keycaps SHALL press when their corresponding keyboard, gamepad, or touch action fires.2424 25-#### Scenario: Active rules update after a word push26-- **WHEN** a word tile is pushed into or out of a sentence27-- **THEN** the stage updates sentence bars and ledger from the settled event and current state25+#### Scenario: A pushed word skids independently of its pusher26+- **WHEN** a settled accepted turn records a word moved with non-null `pushedBy`27+- **THEN** the word tilts toward its travel during its visual tween and rests level at the destination, while the pusher does not tilt2828 29-#### Scenario: Victory is readable30-- **WHEN** the engine enters the won state31-- **THEN** the stage shows the winning sentence, `PROVEN IN N STEPS`, and explicit continue/replay actions29+#### Scenario: Undo rolls the step counter downward30+- **WHEN** Undo restores an earlier move count31+- **THEN** the clipped digits roll toward the lower number and settle on the restored count32+33+#### Scenario: New and broken sentences have distinct motion34+- **WHEN** a word push forms one sentence and breaks another35+- **THEN** the new physical sentence's tiles stamp in sequence and the broken sentence strikes, drops, and leaves without altering the engine's rule list3236 3337 ### Requirement: Text effects SHALL support variable-length labels without driving grid geometry3438 The app MAY use Pretext or an equivalent text-effect layer for proof names, hints, ledger labels, pack feedback, and scene copy. Text effects SHALL be laid out in their owning HUD or scene region and SHALL not determine integer simulation coordinates or collision geometry.@@ -15,34 +15,42 @@ The player-facing app SHALL use one full-viewport canvas sized for the device pi
1515 - **THEN** interim DOM controls are hidden while normal keyboard, pad, touch, and scene controls remain available1616 1717 ### Requirement: The stage SHALL provide the v0.3 scene flow18-The stage SHALL support Title, INDEX, Proof, Pause, Win card, Workshop, and pending Gift scenes. Scene changes SHALL be driven by explicit input and SHALL use a cat-centered iris transition, with a straight cut under reduced motion. A win SHALL wait for explicit continue or replay input.18+The stage SHALL support Title, INDEX, Proof, Pause, Win card, Workshop, and pending Gift scenes. Scene changes SHALL be driven by explicit input and SHALL use a cat-centered iris transition, with a straight cut under reduced motion. A win SHALL wait for explicit continue or replay input. Pause and other menu overlays SHALL use the D22 entry, navigation, and exit phases; the Win card SHALL use the D22 ring and card choreography. `?slowmo=N` SHALL scale presentation timing for review without changing engine turns or held-input repeat cadence.1919 20-#### Scenario: A solved proof returns through the win card21-- **WHEN** a proof reaches the engine's won state22-- **THEN** the stage shows the winning sentence and `PROVEN IN N STEPS`, then waits for Enter before returning to INDEX20+#### Scenario: Pause enters and exits before its action21+- **WHEN** the player opens Pause and then selects a non-toggle action22+- **THEN** the shutter, title, and staggered items enter in order; the selected item presses, items leave in reverse order, the shutter closes, and the action runs after the exit2323 24-#### Scenario: Pause opens from a proof25-- **WHEN** the player presses Escape, P, or the mapped menu action during a proof26-- **THEN** the stage opens Pause without changing the engine state and offers Resume, Restart, INDEX, Workshop, sound, and music actions24+#### Scenario: Repeated input during menu exit is ignored25+- **WHEN** a second key or tap arrives while Pause is exiting26+- **THEN** only the first captured action runs and navigation does not resume until the destination scene is ready2727 28-#### Scenario: A shared pack opens as a Gift29-- **WHEN** the app opens with a valid `#pack=` payload30-- **THEN** the stage presents a Gift preview with `Keep and play` and `Not now`, and does not install the pack before confirmation28+#### Scenario: An external import finishes during menu exit29+- **WHEN** a file import finishes while a menu is exiting and requests Gift or Workshop30+- **THEN** the current exit completes and the latest externally requested scene opens, while player menu input remains ignored during the exit3131 32-### Requirement: Input SHALL be immediate, repeatable, and never queued33-The stage SHALL use the shared input adapter for keyboard, Standard gamepad, and touch. A press SHALL emit on the same frame, browser repeat events SHALL be ignored, only the most recently held direction SHALL repeat after 175ms and every 110ms, undo SHALL accelerate from 240ms toward a 55ms floor, and a new intent SHALL snap an in-flight visual tween before starting the next action.32+#### Scenario: Toggle remains in Pause33+- **WHEN** the player selects Sound or Music34+- **THEN** that item presses and updates in place while Pause remains open35+36+#### Scenario: Win entrance can be skipped37+- **WHEN** the player presses Enter before the Win card has settled38+- **THEN** the entire card reaches its final legible state; a later Enter exits to INDEX3439 35-#### Scenario: Held direction uses owned repeat36-- **WHEN** the player holds Right and no newer direction is held37-- **THEN** one move emits immediately, the first repeat waits 175ms, and subsequent repeats occur 110ms apart40+#### Scenario: An authored proof is already won on entry41+- **WHEN** the player enters an initially won proof from INDEX while its exit animation is in progress42+- **THEN** the proof handoff completes before the Win card opens for that same proof3843 39-#### Scenario: A newer direction takes over40-- **WHEN** the player holds Right, presses Down, and releases Down41-- **THEN** Down is the active repeating direction while held and Right resumes after Down releases44+#### Scenario: Reduced motion uses settled scenes45+- **WHEN** reduced motion is requested46+- **THEN** Pause and Win controls and text are immediately visible in their final positions without waiting for choreography47+48+### Requirement: Input SHALL be immediate, repeatable, and never queued49+The stage SHALL use the shared input adapter for keyboard, Standard gamepad, and touch. A press SHALL emit on the same frame, browser repeat events SHALL be ignored, only the most recently held direction SHALL repeat after 175ms and every 110ms, undo SHALL accelerate from 240ms toward a 55ms floor, and a new gameplay intent SHALL snap an in-flight visual tween before starting the next action. A menu exit SHALL capture one selected action and ignore later menu intents until the exit completes; this is an explicit scene phase, not a gameplay input queue.4250 43-#### Scenario: Touch and gamepad use the same intent path44-- **WHEN** the player swipes at least 26px or moves the gamepad stick beyond the 0.55 deadzone45-- **THEN** the stage emits the same direction intent path used by keyboard input51+#### Scenario: Slow-motion review preserves input cadence52+- **WHEN** `?slowmo=8` is enabled and Right is held during a proof53+- **THEN** the engine accepts the same immediate and repeated movement cadence while presentation effects advance at one eighth visual speed4654 4755 ### Requirement: INDEX SHALL be data-driven and preserve progress4856 The INDEX map SHALL lay out levels from catalog data on a serpentine path with at most five nodes per row and three rows per sheet. Progress SHALL be stored by `packId/levelId`; locks SHALL be evaluated within each pack, and the first proof of every pack SHALL remain available even when bundled packs share one sheet. The next unsolved proof within a pack SHALL lock until its predecessor is solved, while additional sheets remain reachable through pack path connections.