README.md

decisions/spine/clues/README.md

Clues — the discovery middle-layer (FUN_REBUILD R3, the chapter-factory template)

One authored CSV per spine node (CH_NN.csv). A clue is first-class data: the in-world source a

player can actually encounter that EARNS a mechanic read ("how would they have gotten a clue?" —

the standing test). Emitted by harness/extract_spine_rows.py as build/spine_rows/<node>/clues.csv

(header-always for every node; rows only where authored; the extractor REJECTS a row whose

source_kind is not in the legal enum or whose src/player_text is empty).

Columns: `chapter_id, clue_id, chain, source_kind, beat_scope, trigger_context, player_text,

status, src`.

cold_air, hollow_gift). Clues in one chain OR together: any one earns the read, none gates —

clue = LEGIBILITY, NEVER a gate (resolutions stay keyed on the raw player action).

FIELD-SENSE re-read affordance, never the journal — HL_0070). Spoiler-safe register, same rules

as docs/spine/player_strings/ (reveal-discipline critic required before landing).

not have (an engine-phantom clue must never ship as readable-but-false). Enum-enforced at emit.

bargain-hollowness rides hollow_gift (H1), not a fourth cold_air instance; do not duplicate a

sensation across chains to satisfy a list (critic-reviewed divergence from FUN_REBUILD R3.7).

Consumers: the WS-C runtime clue-state (fire + persist), the W10 field-sense display + toast, the

clue-staged objective display (GetBeatObjectiveText returns the highest unlocked stage on top of

the player_strings stage-0 base).

Generated by harness/site/structure_site.py — the URL path is the repo path. review root