clay-borg/games
tegwick e75f3afe4d CB-WP-0048 T01: Configuration and Rules — identity split from behaviour
catalog.rs reads ground-game's schema 2 and refuses an unknown schema by
name: a reader that silently accepted schema 1 would answer questions
about aspects over a file that has none.

config.rs holds the two types ADR-0022 chose. Configuration is identity
and round-trips anything the catalog names, including modules with no
kernel path; Rules is behaviour, exhaustive, no catch-all. resolve() is
the boundary and emits the two distinct errors -- "known module with no
kernel path (status: proposed)" vs "not a module the catalog has" --
which is the entire reason this shape was chosen over a per-aspect enum.

Nothing about aspects, defaults or module status is written in our
source; all of it is read. The tests find the proposed module by
searching for status: proposed rather than naming one, so implementing
it upstream makes the test look elsewhere instead of going stale.

Four mutations, four red. scoped_plus_attack_soothe now resolves -- the
combination the three-armed enum could not express.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 22:30:05 +02:00
..
ground CB-WP-0048 T01: Configuration and Rules — identity split from behaviour 2026-08-08 22:30:05 +02:00