CB-WP-0037 T02: the engine's rules against the edition's
Some checks failed
ci / check (push) Failing after 3s

Vendored DARVO.csv, Relations.csv and Scenarios.csv — the three unread
files that carry mechanism. The engine has implemented the DARVO sequence
and relation formation/breaking from GroundRules.md since the beginning,
and had never read the game owner's statement of them.

Every checkable clause agrees, and agreement is recorded rather than
noted: a survey that finds nothing and leaves no trace cannot be told from
one never run. The two hardest clauses to notice were already right —
Focus placed "even if the Attack was cancelled", and Focus removed when
the sequence ends before REVERSE.

The tests are tripwires, not derivations. The match was made by a person
reading prose, and that reading goes stale in silence when the prose
changes; each behaviour pins the phrase it was read from, so a reworded
edition goes red and asks for a human. Mutation-proven by rewording the
cancelled-Attack clause.

F25 raised, and it is the real yield: Scenarios.csv carries
threshold_2_players/3_4/5_6, starting_stress and round_track, and the
engine hardcodes all three — a match returning 5/7/9, stress: 2 at setup,
five rounds. They agree on all four scenarios. These are the most
contested numbers in the project; the whole 4/6/9 vs 5/7/9 episode turned
on them, and the engine has been right by maintenance coincidence rather
than by reading the file that owns them.

Also pinned: Problems.csv and Scenarios.csv both state the deal and the
engine reads only the first. They agree; nothing was checking.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
tegwick 2026-08-08 00:21:40 +02:00
parent d98580fb4c
commit 53109ec5e5
7 changed files with 423 additions and 1 deletions

View file

@ -0,0 +1,4 @@
stage_order,stage,symbol_id,mandatory_effect,target_memory,advance
1,DENY,SYM_DENY,"Choose one face-up, unsolved Problem not protected by GROUND—OU. Turn it face down and place a Denied token on it. Ordinary Investigate cannot reveal it.",None.,Advance to ATTACK unless the sequence is ended by GROUND or Bond Support.
2,ATTACK,SYM_DARVO_ATTACK,"Make one extra Attack against any other player. Resolve it with the normal relation rules. Then place your Focus/Blame token Focus-side beside that target, even if the Attack was cancelled.",The Focus target becomes the target of REVERSE.,Advance to REVERSE unless the sequence is ended; remove Focus if the sequence ends before REVERSE.
3,REVERSE,SYM_REVERSE,"Target the player holding your Focus. Unless they reject it with GROUND—ND, flip your Focus token to Blame in front of them, give them +1 Stress, and take one Protection token. Then reduce your own Stress by 2.",Focus becomes Blame and remains with the target until removed by GROUND—ND.,End the DARVO sequence.
1 stage_order stage symbol_id mandatory_effect target_memory advance
2 1 DENY SYM_DENY Choose one face-up, unsolved Problem not protected by GROUND—OU. Turn it face down and place a Denied token on it. Ordinary Investigate cannot reveal it. None. Advance to ATTACK unless the sequence is ended by GROUND or Bond Support.
3 2 ATTACK SYM_DARVO_ATTACK Make one extra Attack against any other player. Resolve it with the normal relation rules. Then place your Focus/Blame token Focus-side beside that target, even if the Attack was cancelled. The Focus target becomes the target of REVERSE. Advance to REVERSE unless the sequence is ended; remove Focus if the sequence ends before REVERSE.
4 3 REVERSE SYM_REVERSE Target the player holding your Focus. Unless they reject it with GROUND—ND, flip your Focus token to Blame in front of them, give them +1 Stress, and take one Protection token. Then reduce your own Stress by 2. Focus becomes Blame and remains with the target until removed by GROUND—ND. End the DARVO sequence.

View file

@ -19,6 +19,15 @@ build must not depend on a sibling checkout that CI does not have.
| `Solutions.csv` | 2026-08-06 | `4fa3b8ed` | Solution titles and microcopy |
| `Modes.csv` | 2026-08-06 | `4fa3b8ed` | mode text and `scoring_tiebreak` |
| `Tokens.csv` | 2026-08-07 | `4fa3b8ed` | the components: `front_text`, `quantity`, `sides` (ADR-0016) |
| `DARVO.csv` | 2026-08-08 | `8886543` | **the DARVO sequence as rules**: `mandatory_effect`, `target_memory`, `advance` (CB-WP-0037 T02) |
| `Relations.csv` | 2026-08-08 | `8886543` | **how Bonds and Rivalries form and break**: `formation`, `breaking`, `rules_text` |
| `Scenarios.csv` | 2026-08-08 | `8886543` | the four scenarios and their setups — the engine deals one |
**Why these three, now.** The engine already implements the DARVO
sequence and relation formation/breaking — from `GroundRules.md`, never
from the edition's own statement of them. That is not inert display data;
it is **rules taken from a secondary source and never checked against the
primary one**, and CB-WP-0037 T02 exists to check them.
**Deliberately absent**: `BOM`, `Print_Manifest`, `Back_Designs`,
`Symbols`, `Design_Tokens` — production artifacts for a physical print
@ -30,8 +39,11 @@ that this engine plays the edition as printed (ADR-0015 D2).
```
sha256 7a7a302aabecdeb419c562a029bec3e3576a306b0bd1175d1200de60d9530073 Actions.csv
sha256 0afb882dc8001f03bc48a152c9d8c36ad492ceeff2d30ef6a3a690937317f77b DARVO.csv
sha256 565431571bc06adafb67edefd4b368839b6b94134c2289877384688cc643390b Modes.csv
sha256 0a04830c93b62dcb2f4411a9fbde576368a7427fe9e63c5015e606e4d42d23a0 Problems.csv
sha256 cd84c3b131c1b7a541e9e42529fdce2b7911f0832cce8c50cfcb8462d01dc551 Relations.csv
sha256 f830de9ca44417a7510e04a39ea24a070a81969b33a31fa68361fba132ad40cd Scenarios.csv
sha256 0bda1ee97de726b5e8c4404ab15ecc53a359e6c23db74fb41ecb51d78f9884ad Solutions.csv
sha256 25273bb6e74c9ad545c5e89dfe0f76b294d0a6cbef51f80d548039d5f0943484 Tokens.csv
```

View file

@ -0,0 +1,3 @@
relation_side,symbol_id,title,rules_text,formation,breaking
Bond,SYM_BOND,BOND,"Support through an existing Bond: 2 Stress, ready Freedom, cancel the target's current DARVO stage, and end that sequence. Attack through a Bond: +2 Stress and flip this tile to Rivalry.",A no-relation Support may create a Bond if both players have a free relation slot and the target accepts.,GROUND—ND may break it. An Attack flips it rather than breaking it.
Rivalry,SYM_RIVALRY,RIVALRY,Support through Rivalry: 1 Stress; the target chooses to flip the tile to Bond or break it. Attack through Rivalry: +2 Stress and break the relation.,A no-relation Attack creates a Rivalry automatically if both players have a free relation slot.,"A further Attack, a repairing Support rejected as Bond, or GROUND—ND may break it."
1 relation_side symbol_id title rules_text formation breaking
2 Bond SYM_BOND BOND Support through an existing Bond: −2 Stress, ready Freedom, cancel the target's current DARVO stage, and end that sequence. Attack through a Bond: +2 Stress and flip this tile to Rivalry. A no-relation Support may create a Bond if both players have a free relation slot and the target accepts. GROUND—ND may break it. An Attack flips it rather than breaking it.
3 Rivalry SYM_RIVALRY RIVALRY Support through Rivalry: −1 Stress; the target chooses to flip the tile to Bond or break it. Attack through Rivalry: +2 Stress and break the relation. A no-relation Attack creates a Rivalry automatically if both players have a free relation slot. A further Attack, a repairing Support rejected as Bond, or GROUND—ND may break it.

View file

@ -0,0 +1,5 @@
scenario_id,title,premise,surface_problem_id,hidden_problem_ids,setup_2_players,setup_3_4_players,setup_5_6_players,threshold_2_players,threshold_3_4_players,threshold_5_6_players,starting_stress,round_track
SCN_01,Missed Deadline,"The team promised a delivery. It did not arrive when expected, and the conversation about why is becoming personal.",PRB_01_S,PRB_01_1 | PRB_01_2 | PRB_01_3 | PRB_01_4,Surface + hidden priorities 12 (3 problems; available 6). Threshold 5.,Surface + hidden priorities 13 (4 problems; available 9). Threshold 7.,Surface + hidden priorities 14 (5 problems; available 12). Threshold 9.,5,7,9,All players start at Stress 2.,Rounds 15 printed along the bottom edge.
SCN_02,Shared Responsibility,A shared responsibility keeps being left undone. Everyone agrees it matters; nobody agrees on what fairness requires.,PRB_02_S,PRB_02_1 | PRB_02_2 | PRB_02_3 | PRB_02_4,Surface + hidden priorities 12 (3 problems; available 6). Threshold 5.,Surface + hidden priorities 13 (4 problems; available 9). Threshold 7.,Surface + hidden priorities 14 (5 problems; available 12). Threshold 9.,5,7,9,All players start at Stress 2.,Rounds 15 printed along the bottom edge.
SCN_03,Decision Without Consent,A decision affecting the group was announced as settled. Several players believe they were consulted only after the fact.,PRB_03_S,PRB_03_1 | PRB_03_2 | PRB_03_3 | PRB_03_4,Surface + hidden priorities 12 (3 problems; available 6). Threshold 5.,Surface + hidden priorities 13 (4 problems; available 9). Threshold 7.,Surface + hidden priorities 14 (5 problems; available 12). Threshold 9.,5,7,9,All players start at Stress 2.,Rounds 15 printed along the bottom edge.
SCN_04,Broken Confidence,"Information shared in confidence travelled beyond the expected circle. Harm, intent, and responsibility are now contested.",PRB_04_S,PRB_04_1 | PRB_04_2 | PRB_04_3 | PRB_04_4,Surface + hidden priorities 12 (3 problems; available 6). Threshold 5.,Surface + hidden priorities 13 (4 problems; available 9). Threshold 7.,Surface + hidden priorities 14 (5 problems; available 12). Threshold 9.,5,7,9,All players start at Stress 2.,Rounds 15 printed along the bottom edge.
1 scenario_id title premise surface_problem_id hidden_problem_ids setup_2_players setup_3_4_players setup_5_6_players threshold_2_players threshold_3_4_players threshold_5_6_players starting_stress round_track
2 SCN_01 Missed Deadline The team promised a delivery. It did not arrive when expected, and the conversation about why is becoming personal. PRB_01_S PRB_01_1 | PRB_01_2 | PRB_01_3 | PRB_01_4 Surface + hidden priorities 1–2 (3 problems; available 6). Threshold 5. Surface + hidden priorities 1–3 (4 problems; available 9). Threshold 7. Surface + hidden priorities 1–4 (5 problems; available 12). Threshold 9. 5 7 9 All players start at Stress 2. Rounds 1–5 printed along the bottom edge.
3 SCN_02 Shared Responsibility A shared responsibility keeps being left undone. Everyone agrees it matters; nobody agrees on what fairness requires. PRB_02_S PRB_02_1 | PRB_02_2 | PRB_02_3 | PRB_02_4 Surface + hidden priorities 1–2 (3 problems; available 6). Threshold 5. Surface + hidden priorities 1–3 (4 problems; available 9). Threshold 7. Surface + hidden priorities 1–4 (5 problems; available 12). Threshold 9. 5 7 9 All players start at Stress 2. Rounds 1–5 printed along the bottom edge.
4 SCN_03 Decision Without Consent A decision affecting the group was announced as settled. Several players believe they were consulted only after the fact. PRB_03_S PRB_03_1 | PRB_03_2 | PRB_03_3 | PRB_03_4 Surface + hidden priorities 1–2 (3 problems; available 6). Threshold 5. Surface + hidden priorities 1–3 (4 problems; available 9). Threshold 7. Surface + hidden priorities 1–4 (5 problems; available 12). Threshold 9. 5 7 9 All players start at Stress 2. Rounds 1–5 printed along the bottom edge.
5 SCN_04 Broken Confidence Information shared in confidence travelled beyond the expected circle. Harm, intent, and responsibility are now contested. PRB_04_S PRB_04_1 | PRB_04_2 | PRB_04_3 | PRB_04_4 Surface + hidden priorities 1–2 (3 problems; available 6). Threshold 5. Surface + hidden priorities 1–3 (4 problems; available 9). Threshold 7. Surface + hidden priorities 1–4 (5 problems; available 12). Threshold 9. 5 7 9 All players start at Stress 2. Rounds 1–5 printed along the bottom edge.