1## 1. Contract and validation23- [ ] 1.1 Define the normalized level `mechanics` schema with stable IDs,4 host-supported types, versions, static configuration, and either a derived5 no-state contract or a stateful scalar schema.6- [ ] 1.2 Validate mechanic IDs, duplicate definitions, authored references,7 unsupported types, unsupported fields, and executable values in `src/mods.js`8 and the engine boundary.9- [ ] 1.3 Normalize and clone mechanic metadata consistently in CommonJS,10 catalog, pack service, export, and data-only share paths.11- [ ] 1.4 Add diagnostics that identify an unsupported mechanic feature and the12 path that declared it.1314## 2. Engine lifecycle and snapshots1516- [ ] 2.1 Initialize `state.mechanics` from stateful normalized definitions17 during reset and expose a cloned settled envelope from `getState()`; derived18 projections remain recomputable and are not duplicated in the envelope.19- [ ] 2.2 Add host-owned deterministic phase adapters for before movement,20 after movement, after transforms, before contacts, after contacts, and21 settled finalization.22- [ ] 2.3 Include mechanic state in accepted-turn transactions and restore the23 previous state on blocked, invalid, or rule-complexity-rejected turns.24- [ ] 2.4 Preserve and validate mechanic state through Undo, reset, and25 `restore()`; prove restored state does not advance transformations or phases.26- [ ] 2.5 Add bounded, cloned mechanic transition records to settled events27 without changing existing events for levels with no mechanics.2829## 3. Solver and replay contract3031- [ ] 3.1 Derive a deterministic stateful mechanic codec registry from32 normalized level definitions and pass it to `createStateCodec()` and33 `solveLevel()`; require derived mechanics to declare their projection inputs34 and no-hidden-state assertion.35- [ ] 3.2 Reject unknown mechanic IDs, fields, missing registrations, invalid36 values, and unsupported schema versions before search expands a state.37- [ ] 3.3 Round-trip mechanic state through encode/decode/restore and compare38 the next public and fast transitions.39- [ ] 3.4 Add a same-board/different-mechanic-state key fixture and confirm40 unregistered state cannot be silently merged.41- [ ] 3.5 Preserve solver shortest-path, BYPASS, HANDS-OFF, cap, and replay42 behavior for levels without mechanics.4344## 4. Verification and handoff4546- [ ] 4.1 Add focused engine, mod, pack/share, codec, and solver parity tests.47- [ ] 4.2 Run the full Node suite and production build.48- [ ] 4.3 Run strict OpenSpec validation for this change.49- [ ] 4.4 Send the foundation contract and open semantic questions to the50 worlds team before beginning gate or FRAIL behavior specs.