1## ADDED Requirements23### Requirement: Solver state SHALL have a canonical compact identity4For one authored level, the solver SHALL encode each settled nonterminal state in stable authored-ID order for entities and stable system-ID order for automata. The identity SHALL include every dynamic value that can change a future transition: existence, position, and noun of each entity; phase of each automaton; and registered stateful-mechanic fields. It SHALL exclude values derived from those fields and SHALL reject a dynamic field with no codec registration.56#### Scenario: Object order does not change identity7- **WHEN** two settled snapshots contain the same surviving entities, coordinates, nouns, and automata phases but list objects in different array orders8- **THEN** their compact solver identities are equal910#### Scenario: Removal and phase change remain distinct11- **WHEN** otherwise identical states differ by a removed entity or by one automaton phase12- **THEN** their compact solver identities differ1314#### Scenario: Future mechanic state cannot be silently merged15- **WHEN** two otherwise identical states differ in a registered gate, switch, or crumble field16- **THEN** their identities differ; if that dynamic field lacks a registration, encoding fails with an actionable error1718### Requirement: Compact states SHALL round-trip through authoritative restore19Encoding and decoding a settled state SHALL preserve its behavior under the public engine's next accepted movement or wait. Decoding SHALL use the authored level for static data and SHALL not apply noun transformations or advance automata until the subsequent turn.2021#### Scenario: One-link transformation survives round-trip22- **WHEN** a state contains ROCK after `BABA IS ROCK` with `ROCK IS FLAG` also active23- **THEN** encoding and restoring it leaves ROCK in place; a later accepted turn may transform it to FLAG2425#### Scenario: Automaton phase survives round-trip26- **WHEN** two states share entity positions but have different automaton phases27- **THEN** decoding each state restores its own phase and the next wait produces the same result as ordinary engine replay2829### Requirement: Solver search SHALL retain shortest-path and analysis behavior30The compact breadth-first search SHALL preserve the real engine's accepted-transition graph. It SHALL return shortest paths, use the configured expansion cap, and preserve `--replay` and already-won reporting. It SHALL report BYPASS when the player never pushes a word and HANDS-OFF when no word moves by any cause. Search nodes SHALL not retain full cloned snapshots or full path strings.3132#### Scenario: Shortest route remains stable33- **WHEN** core and bundled teaching levels are searched with the compact frontier34- **THEN** solved/limited status, shortest route length, and BYPASS classification match the authoritative baseline under the same cap3536#### Scenario: A forbidden rule is never active37- **WHEN** an author runs `--forbid "GAP IS CRATE"`38- **THEN** the search rejects an initially active rule and every transition that activates it at any rule-evaluation phase, including a rule that disappears before the turn settles3940#### Scenario: Automaton word motion is distinguished from player work41- **WHEN** an automaton pushes a word on a winning path and the player never pushes a word42- **THEN** the solver reports BYPASS but not HANDS-OFF4344### Requirement: Fast solver transitions SHALL match public gameplay transitions45An event-free engine transition SHALL return the same next gameplay state or rejection as public `step()` and `wait()` for the same settled input. It SHALL expose word-motion provenance and every evaluated rule set needed by solver constraints without constructing presentation events or Undo history. The solver SHALL only enable this path after differential fixtures cover the current rule vocabulary and automata.4647#### Scenario: W6 contact and rule ordering match48- **WHEN** a reachable state has stacked word alternatives, PUSH with STOP, noun transformation, or simultaneous WIN and DEFEAT contact49- **THEN** the fast transition and public engine produce equivalent surviving entities, rules, automata phases, win state, and accepted status5051#### Scenario: Clockwork wait matches52- **WHEN** a Clockwork state advances an automaton through a wait action53- **THEN** the fast transition yields the same actor positions and next phase as public `wait()`