- commit
- 66699ee30ed71b8fba8fadb50d366077f2efe1cc
- parent
- dafc19146a332f9caacb3d59b5e9c91b28a9067e
- author
- Dami <dami.etoile@gmail.com>
| M | docs/ | 26 | ++++++++++++++++++++++++++ |
@@ -126,3 +126,29 @@ Gate and FRAIL presentation and default-world bundling follow differential engin
126126 The mechanic foundation was narrowed after the designer chose memoryless gates and stable-ID FRAIL leftovers. These are **derived** mechanics: gate openness, jams, and pressed plates recompute from settled objects and current nouns; FRAIL existence and noun live in `state.objects`, while `leaves` is static authored metadata. Persisting extra `open`, `jammed`, or `crumbled` bits would duplicate board truth and could diverge across Undo, restore, and solver replay. A host-owned lifecycle adapter still provides phase order, validation, and settled events. Only a future mechanic with real memory needs `state.mechanics` scalars and explicit compact-codec registration. The three active mechanic OpenSpec changes now state this split and require public/fast and restore parity without hidden bits.127127 128128 The next integration gates are concrete: complete D20 world input/card behavior, validate optional world identity as a nonblocking note with a safe fallback, then bundle core, Crossword, Crate Works, and Tidewater in the approved order. Run the sequential world solver, full Node/build suite, and desktop/mobile Gift→INDEX→Proof→Win browser flow before updating the public alias. The older Garden Basics and Word Lab packs remain importable examples; Word Lab's W6 lesson copy is being corrected so its direct PUSH route matches its hint.129+130+### Post-D20 architecture status131+132+2026-09-24. D20 passed designer review and is archived as133+`2026-09-24-add-world-index-presentation`. Core, Crossword, Crate Works, and134+Tidewater are playable in that order at public revision 13. The complete135+sequential world gate solved 30 proofs, including the six Clockwork proofs that136+remain outside the default INDEX. The full 373-test Node suite, production137+build, local Gift/Workshop/share flow, and public desktop/mobile D20 flow138+passed without page errors.139+140+The active proof now uses `${packId}:${localId}` rather than a retained array141+position (`50e4d68`). The catalog keeps a direct ID map and invalidates142+derived pack summaries on mutation. In a 64-level local comparison, 2,000143+last-level reads took 16.55 ms with the direct lookup and 1,079.7 ms via the144+old full-list clone and scan. Delayed Win behavior during pack replacement and145+removal remains a focused OpenSpec regression gate; its normal browser paths146+already pass.147+148+The next engine seam is canonical level validation, now specified in149+`consolidate-level-schema-boundary` (`73084e6`). The direct engine and150+CommonJS loader currently disagree on automaton shorthand, phase bounds, ID151+casing, cue emptiness, and sound names. A single pure normalizer should feed152+direct games, trusted modules, and data-only shares, with caller-specific153+error adapters and parity fixtures. That work precedes new gates and FRAIL154+runtime behavior so their authored fields do not multiply validator drift.