clone

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

main
miau-is-true / openspec / changes / add-custom-property-presentation / proposal.md
proposal.md 2.6K source

Why

The engine can already activate a level-scoped automaton from a custom rule such as MOUSE IS TICK, but the board and ledger still recognize only the hard-coded property vocabulary. A mod-defined word therefore looks like a noun, and the player has no in-board explanation for what the new word does. Clockwork's TICK glossary and the accepted D24 presentation need a stable data path from CommonJS pack loading through the board and stage.

What Changes

  • Validate and normalize an optional pack-level properties glossary with property colour accents and short descriptions.
  • Derive the property-word set from the current level's implemented custom properties, and pass glossary metadata through catalog, pack-service, and share views without changing simulation semantics.
  • Render declared custom properties as chamfered property tiles and glossary colours in the board and rule ledger.
  • Show a first-encounter custom-word card with its tile, description, and a level-derived example sentence, persisted once per pack and word.
  • Make the description available through inspect mode and ledger hover or its equivalent accessible details affordance.
  • Add browser acceptance for local/imported custom-property packs on desktop, mobile, and reduced-motion presentation paths.

Capabilities

New Capabilities

  • custom-property-presentation: glossary validation, metadata plumbing, property tile and ledger presentation, first-encounter teaching, and accessible inspection copy.

Modified Capabilities

  • commonjs-mods: validate the optional property glossary and preserve it in normalized and shared pack data.
  • game-presentation: consume level-local custom property metadata in the board, ledger, and first-encounter card.

Dependencies

  • add-rule-driven-automata supplies the current level-local source of implemented custom properties through level.automata[].property.
  • The D21 automata beat strip remains a separate presentation change. This change may provide its property metadata seam but does not alter beat-strip geometry, cue glyphs, or timing.

Deliberately Deferred

  • level.pairs, OPEN/SHUT, and their destroy-both or enter collision effect remain W13. This change does not make glossary entries executable rules or add pair semantics.
  • Arbitrary custom rule callbacks, new engine phases, solver state, and changes to rule precedence are out of scope.
  • Exact card typography, motion timing, and final visual composition remain designer-owned within the accepted Motion language; the implementation must expose a stable card request and data model for those decisions.