clone

a browser grid puzzle game where you push words around to rewrite the rules of each level

main
miau-is-true / openspec / changes / archive / 2026-09-24-consolidate-level-schema-boundary / tasks.md
tasks.md 2.6K source

1. Canonical boundary

  • [x] 1.1 Inventory current direct engine, CommonJS, share, catalog, and solver level fields and write the canonical normalization API and context profiles.
  • [x] 1.2 Add a pure level schema module with cloned canonical output, stable issue codes/paths, explicit object kinds, uppercase tokens, and explicit automaton actions.
  • [x] 1.3 Preserve and test the documented legacy shorthand as input-only; ensure export and shared encoding emit canonical action objects.
  • [x] 1.4 Keep pack-only identity, count, and size limits as explicit profile adapters around the shared structural validator.

2. Integrations

  • [x] 2.1 Route createGame() through the canonical boundary while preserving its current level-labeled error types and standalone fixtures.
  • [x] 2.2 Route CommonJS validation/normalization through the boundary while preserving ModValidationError, source context, and atomic registration.
  • [x] 2.3 Route CommonJS export and data-only share encode/decode through the canonical boundary and preserve current schema/revision behavior.

3. Verification

  • [x] 3.1 Add parity fixtures for valid data, legacy shorthand, malformed coordinates/tokens/actions, duplicate IDs, and source immutability.
  • [x] 3.2 Add CommonJS and shared round-trip assertions for canonical gameplay data, automata metadata, and first-transition parity.
  • [x] 3.3 Run focused engine/mod/share tests, full Node tests, production build, world solver, and browser import/share flows.
  • [x] 3.4 Run strict OpenSpec validation, document any deferred metadata fields, and archive this change only after all adapter and round-trip evidence is complete.

Verification evidence (2026-09-24)

  • npm test: 388 passed, 0 failed after the canonical boundary and conflicting-field follow-up.
  • npm run build: Vite production build passed, 73 transformed modules.
  • npm run check:worlds: 30/30 Core, Crossword, Crate Works, Tidewater, and Clockwork proofs solved with no issues or warnings.
  • Local browser tests/browser/world-index.mjs: desktop/mobile, Workshop PLAY, Q/E, and reduced-motion checks passed without page errors.
  • Local browser tests/browser/share-flow.mjs: Gift, Workshop, CommonJS import/export, data-only sharing, proof/Win, and mobile checks passed without console errors.
  • openspec validate consolidate-level-schema-boundary --strict --no-interactive: valid.
  • Independent read-only release review found no remaining P0/P1 regression. Unknown future mechanics, channel, and leaves fields intentionally fail as unsupported-field until their concrete host contracts land.