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-validate-mod-feature-contract / proposal.md
proposal.md 1.5K source

Why

A misspelled or unsupported property word can silently become a noun transformation. Clockwork's DOOR IS SHUT example turns doors into unglyphed SHUT objects when the host does not implement SHUT. Authors need a clear diagnostic, and packs need a way to declare mechanics that a host must recognize before play.

What Changes

  • Report nonfatal author notes for word tiles with no semantic role in their own proof, including loose words that may become predicates later and properties declared only in another proof.
  • Reject object nouns that collide with a level's declared property words.
  • Validate optional manifest.features identifiers and reject unknown required features with player-readable feedback.
  • Carry structured notes separately from errors through local and shared pack previews without serializing transient diagnostics into exported pack data.
  • Preserve existing supported #pack v1 links and CommonJS packs while introducing the feature contract.

Capabilities

New Capabilities

None.

Modified Capabilities

  • commonjs-mods: validate declared mechanic features and property/noun collisions; diagnose unknown predicates.
  • level-sharing: apply the same feature gate to decoded data and return nonfatal warnings in preview envelopes.

Impact

  • src/mods.js, the CommonJS and data-only validators, and pack-service result envelopes.
  • Gift/Workshop warning presentation, coordinated through the design inbox.
  • Clockwork authoring and compatibility fixtures; no change to engine turn semantics.