The three denominations are move tokens, not stored buckets — there is one integer, so change-making never arises. The deserter is down to 47c: under a silver, so he cannot cover a bed and the player sees it on turn one. A parity test guards the code-side ratios against the content-side ids. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QYa9u7Kdxv5gX4AnwWexy8
/content/origins — starting-state seeds
Thin authored files, one per starting point. An origin is an initial-state
overlay on the static shared world (/content/world): where the player begins,
the opening situation, and seeds for dispositions, inventory, starting quest, and
character-creation constraints. Values and id references — never maps or personas.
At new-game the player picks an origin; code constructs the runtime canon log
from origin + world content + character creation. See the spec in
/docs/canon-log.md (design under
/docs/superpowers/specs).
Scope (§17)
Schema supports N origins; the POC authors one. One world, one map, fixed NPCs — origins change only the player's starting point and situation. More replayability, flat authoring cost.
Fields (summary)
id · display_name · description · start_location_id · situation[] ·
opening_facts[] · disposition_overrides{} · inventory_grants[] ·
start_quest_id · build_constraints{}
humiliations are never seeded — they are earned in play (§7/§9). Validated
against origin.schema.json; every id must resolve in /content/world.