CB-WP-0028 T01/T02: the cards say what they do

ADR-0015 and the import. F18's fix: "I don't understand the GROUND card"
was never a design gap -- the card explains itself in the edition and we
never imported the explanation.

THE MEASUREMENT IS THE DECISION, and the gap is bigger than "one file of
nineteen". Of the file we DID vendor, the engine reads 5 of 13 columns:
title, problem_text, front_rules, reveal_effect and unresolved_effect were
discarded at parse time. The cheapest part of this pass costs no new bytes
and was sitting in the repo for eight days. And SCN_01 is hardcoded at
lib.rs:1824 -- the edition ships FOUR scenarios and the engine has never
dealt three of them. Nobody had said so.

ADR-0011's revisit condition is measurably absent, so the dependency
argument does not get re-run: across Actions, Solutions, Modes and
Scenarios there are ZERO doubled quotes and ZERO embedded newlines. The
hand reader's only job is comma-in-quoted-field, which it already did.
Refusing csv on a measurement rather than on a preference.

Vendored Actions, Solutions and Modes -- the text a player reads. Not the
production artifacts (BOM, Print_Manifest, Back_Designs, Symbols). NOT
Extensions.csv, which names content the designer placed outside the core;
importing it would break the claim that this engine plays the edition as
printed. It is now known to exist, which was the real risk.

One Table reader with four callers, because a per-file copy is how a
parser acquires four subtly different bugs. The GROUND card now shows
"Regulate. Restore the frame. Decide." with its GR/OU/ND text on demand;
Problems show their own titles where a priority number used to be.

The load-bearing test asserts the text is a SUBSTRING OF THE VENDORED
FILE rather than equal to a Rust literal -- a test comparing against a
hardcoded expectation would pass for a hand-copied string, which is the
drift this ends.

`edition` came out from behind #[cfg(feature = "scenarios")]. It was gated
because its only consumer was; the edition is the game's own data and the
shipped runtime now reads it. Test machinery and game content are
different things and only one of them is optional.

And edition-check was written for a single-file world: it compared the
first recorded digest against Problems.csv regardless of which file that
digest described. It now checks every file both ways -- a vendored file
with no digest fails, a digest naming an absent file fails -- and asserts
ADR-0015 D3's falsifier directly rather than trusting it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
tegwick 2026-08-06 17:22:04 +02:00
parent efe9f8f1a9
commit 4b5b601ce0
11 changed files with 767 additions and 42 deletions

View file

@ -0,0 +1,6 @@
action_id,title,symbol_id,resolution_order,target,tagline,rules_text,stress_restriction,designer_note
ACT_INVESTIGATE,INVESTIGATE,SYM_INVESTIGATE,4,One hidden Problem,Reveal what is hidden.,"Choose one hidden, non-Denied Problem and reveal it. Then draw one Solution. If no hidden Problems remain, draw one Solution only.","At Stress 4 or 5, this action requires spending a ready Freedom token.",Place the face-down action card beside the chosen hidden Problem.
ACT_SOLVE,SOLVE,SYM_SOLVE,6,"One face-up, non-Denied Problem",Match a solution to the real problem.,"Play and discard one Solution with the matching symbol. Claim the Problem if it is still available when Solve resolves. If another player has already claimed it, keep your Solution.","At Stress 4 or 5, this action requires spending a ready Freedom token.","Resolve competing claims in Lead order, then clockwise."
ACT_SUPPORT,SUPPORT,SYM_SUPPORT,2,One other player,Increase another player's room to choose.,"No relation: 1 Stress; you may form a Bond if both players have a free relation slot and the target accepts. Existing Bond: 2 Stress, ready their Freedom, and cancel their current DARVO stage and end that sequence. Existing Rivalry: 1 Stress; the target chooses to flip the relation to Bond or break it.","At Stress 4 or 5, this action requires spending a ready Freedom token.",A Bond formed by this same Support does not cancel DARVO; the Bond must already exist.
ACT_ATTACK,ATTACK,SYM_ATTACK,5,One other player,Push pressure into another player.,Protection or GROUND—OU may cancel this Attack. No relation: +1 Stress; form a Rivalry if both players have a free relation slot. Existing Bond: +2 Stress and flip it to Rivalry. Existing Rivalry: +2 Stress and break the relation. A cancelled Attack changes neither Stress nor relation.,"Always legal. At Stress 4 or 5, Attack is one of the two actions available without spending Freedom.",Rivalry formation is not consensual.
ACT_GROUND,GROUND,SYM_GROUND,1,"Self, a Problem, a relation, or an incoming effect",Regulate. Restore the frame. Decide.,"After all actions are revealed, choose one mode: GR—Ground & Restate: 2 Stress, ready Freedom; if you are in DARVO, its current stage still resolves, then the remaining sequence ends. OU—Observe & Uphold: restore one Denied Problem, cancel one Attack targeting you this round, or protect one face-up Problem from Deny this round. ND—Name & Decide: remove one Blame from yourself, break one relation involving you, or reject one Reverse targeting you this round.","Always legal. At Stress 4 or 5, GROUND is one of the two actions available without spending Freedom.",Keep the revealed GROUND card in front of the player until the end of the round as a reminder of the chosen mode.
1 action_id title symbol_id resolution_order target tagline rules_text stress_restriction designer_note
2 ACT_INVESTIGATE INVESTIGATE SYM_INVESTIGATE 4 One hidden Problem Reveal what is hidden. Choose one hidden, non-Denied Problem and reveal it. Then draw one Solution. If no hidden Problems remain, draw one Solution only. At Stress 4 or 5, this action requires spending a ready Freedom token. Place the face-down action card beside the chosen hidden Problem.
3 ACT_SOLVE SOLVE SYM_SOLVE 6 One face-up, non-Denied Problem Match a solution to the real problem. Play and discard one Solution with the matching symbol. Claim the Problem if it is still available when Solve resolves. If another player has already claimed it, keep your Solution. At Stress 4 or 5, this action requires spending a ready Freedom token. Resolve competing claims in Lead order, then clockwise.
4 ACT_SUPPORT SUPPORT SYM_SUPPORT 2 One other player Increase another player's room to choose. No relation: −1 Stress; you may form a Bond if both players have a free relation slot and the target accepts. Existing Bond: −2 Stress, ready their Freedom, and cancel their current DARVO stage and end that sequence. Existing Rivalry: −1 Stress; the target chooses to flip the relation to Bond or break it. At Stress 4 or 5, this action requires spending a ready Freedom token. A Bond formed by this same Support does not cancel DARVO; the Bond must already exist.
5 ACT_ATTACK ATTACK SYM_ATTACK 5 One other player Push pressure into another player. Protection or GROUND—OU may cancel this Attack. No relation: +1 Stress; form a Rivalry if both players have a free relation slot. Existing Bond: +2 Stress and flip it to Rivalry. Existing Rivalry: +2 Stress and break the relation. A cancelled Attack changes neither Stress nor relation. Always legal. At Stress 4 or 5, Attack is one of the two actions available without spending Freedom. Rivalry formation is not consensual.
6 ACT_GROUND GROUND SYM_GROUND 1 Self, a Problem, a relation, or an incoming effect Regulate. Restore the frame. Decide. After all actions are revealed, choose one mode: GR—Ground & Restate: −2 Stress, ready Freedom; if you are in DARVO, its current stage still resolves, then the remaining sequence ends. OU—Observe & Uphold: restore one Denied Problem, cancel one Attack targeting you this round, or protect one face-up Problem from Deny this round. ND—Name & Decide: remove one Blame from yourself, break one relation involving you, or reject one Reverse targeting you this round. Always legal. At Stress 4 or 5, GROUND is one of the two actions available without spending Freedom. Keep the revealed GROUND card in front of the player until the end of the round as a reminder of the chosen mode.

View file

@ -0,0 +1,4 @@
mode_id,title,mode_type,tagline,rules_text,scoring_tiebreak,back_design_id
MODE_COOP,SHARED GROUND,Cooperative,The group succeeds or fails together.,"All claimed Problem cards form one shared score. Meet the Scenario threshold by the end of Round 5. Playable at 26 players — not a high-seat-only mode. No individual winner is declared. For a mastery rating, subtract 1 for each Blame token still in play and 1 for each Denied Problem.",Not applicable.,BACK_MODE
MODE_SEMI,"COMMON PROBLEM, PERSONAL EDGE",Semi-cooperative,The group must succeed before anyone can win.,"The group succeeds only if the total value of all claimed Problems meets the Scenario threshold (always ≤ available points for the seat band). If it succeeds, each player scores the value of Problems they claimed minus 1 per Blame token they hold. Highest score wins.","Lower Stress, then more Bonds, then shared victory.",BACK_MODE
MODE_COALITION,BONDED COALITIONS,Dynamic teams,Bonds decide the sides at the end.,"The group must first meet the Scenario threshold (always ≤ available points for the seat band). At game end, each connected network of Bonds is a coalition; unbonded players are one-player coalitions. Sum the personal scores of coalition members. The highest-scoring coalition wins. Rivalries do not connect players.","Lower combined Stress, then fewer Blame tokens, then shared victory.",BACK_MODE
1 mode_id title mode_type tagline rules_text scoring_tiebreak back_design_id
2 MODE_COOP SHARED GROUND Cooperative The group succeeds or fails together. All claimed Problem cards form one shared score. Meet the Scenario threshold by the end of Round 5. Playable at 2–6 players — not a high-seat-only mode. No individual winner is declared. For a mastery rating, subtract 1 for each Blame token still in play and 1 for each Denied Problem. Not applicable. BACK_MODE
3 MODE_SEMI COMMON PROBLEM, PERSONAL EDGE Semi-cooperative The group must succeed before anyone can win. The group succeeds only if the total value of all claimed Problems meets the Scenario threshold (always ≤ available points for the seat band). If it succeeds, each player scores the value of Problems they claimed minus 1 per Blame token they hold. Highest score wins. Lower Stress, then more Bonds, then shared victory. BACK_MODE
4 MODE_COALITION BONDED COALITIONS Dynamic teams Bonds decide the sides at the end. The group must first meet the Scenario threshold (always ≤ available points for the seat band). At game end, each connected network of Bonds is a coalition; unbonded players are one-player coalitions. Sum the personal scores of coalition members. The highest-scoring coalition wins. Rivalries do not connect players. Lower combined Stress, then fewer Blame tokens, then shared victory. BACK_MODE

View file

@ -7,15 +7,31 @@ build must not depend on a sibling checkout that CI does not have.
| | |
|---|---|
| upstream repo | `ground-game` |
| upstream path | `editions/ground-darvo-r0/Problems.csv` |
| upstream revision | `9fd27a51f427a0a3dbeba04bc44c2e2eae894b3e` |
| vendored | 2026-08-04 |
| upstream repo path | `editions/ground-darvo-r0/` |
| authoritative? | **yes** — ruled by ground-game, GROUND-WP-0002 T01 |
## Digest
## Files, and why each is here
| file | vendored | upstream revision | why |
|---|---|---|---|
| `Problems.csv` | 2026-08-04 | `9fd27a51` | the deal (ADR-0011) |
| `Actions.csv` | 2026-08-06 | `4fa3b8ed` | the five action cards' own words (ADR-0015 D2) |
| `Solutions.csv` | 2026-08-06 | `4fa3b8ed` | Solution titles and microcopy |
| `Modes.csv` | 2026-08-06 | `4fa3b8ed` | mode text and `scoring_tiebreak` |
**Deliberately absent**: `BOM`, `Print_Manifest`, `Back_Designs`,
`Symbols`, `Design_Tokens` — production artifacts for a physical print
run, meaningless to a simulator. And `Extensions.csv`, which names content
the designer placed *outside* the core; importing it would break the claim
that this engine plays the edition as printed (ADR-0015 D2).
## Digests
```
sha256 7a7a302aabecdeb419c562a029bec3e3576a306b0bd1175d1200de60d9530073 Actions.csv
sha256 565431571bc06adafb67edefd4b368839b6b94134c2289877384688cc643390b Modes.csv
sha256 0a04830c93b62dcb2f4411a9fbde576368a7427fe9e63c5015e606e4d42d23a0 Problems.csv
sha256 0bda1ee97de726b5e8c4404ab15ecc53a359e6c23db74fb41ecb51d78f9884ad Solutions.csv
```
`make edition-check` compares this against `../ground-game` when that

View file

@ -0,0 +1,25 @@
solution_id,suit,symbol_id,title,microcopy,rules_text,quantity,back_design_id
SOL_C01,Clarify,SYM_CLARIFY,Ask What Happened,Invite a concrete account before judging.,Discard with SOLVE to resolve one revealed Problem requiring Clarify.,1,BACK_SOLUTION
SOL_C02,Clarify,SYM_CLARIFY,Compare Accounts,Place different perspectives side by side.,Discard with SOLVE to resolve one revealed Problem requiring Clarify.,1,BACK_SOLUTION
SOL_C03,Clarify,SYM_CLARIFY,Check the Evidence,"Use records, observations, or agreed facts.",Discard with SOLVE to resolve one revealed Problem requiring Clarify.,1,BACK_SOLUTION
SOL_C04,Clarify,SYM_CLARIFY,Name the Assumption,Turn an unspoken belief into a testable statement.,Discard with SOLVE to resolve one revealed Problem requiring Clarify.,1,BACK_SOLUTION
SOL_C05,Clarify,SYM_CLARIFY,Separate the Issues,Keep a counterclaim from replacing the original problem.,Discard with SOLVE to resolve one revealed Problem requiring Clarify.,1,BACK_SOLUTION
SOL_C06,Clarify,SYM_CLARIFY,Confirm the Agreement,Restate what each person understood.,Discard with SOLVE to resolve one revealed Problem requiring Clarify.,1,BACK_SOLUTION
SOL_R01,Repair,SYM_REPAIR,Acknowledge Impact,Name what the action changed for others.,Discard with SOLVE to resolve one revealed Problem requiring Repair.,1,BACK_SOLUTION
SOL_R02,Repair,SYM_REPAIR,Own Your Part,Accept the part that belongs to you.,Discard with SOLVE to resolve one revealed Problem requiring Repair.,1,BACK_SOLUTION
SOL_R03,Repair,SYM_REPAIR,Correct the Record,Replace a misleading account with an accurate one.,Discard with SOLVE to resolve one revealed Problem requiring Repair.,1,BACK_SOLUTION
SOL_R04,Repair,SYM_REPAIR,Make a Specific Apology,"Name the act, impact, and responsibility.",Discard with SOLVE to resolve one revealed Problem requiring Repair.,1,BACK_SOLUTION
SOL_R05,Repair,SYM_REPAIR,Offer Restitution,"Restore value, time, opportunity, or standing.",Discard with SOLVE to resolve one revealed Problem requiring Repair.,1,BACK_SOLUTION
SOL_R06,Repair,SYM_REPAIR,Follow Through,Make repair visible through completed action.,Discard with SOLVE to resolve one revealed Problem requiring Repair.,1,BACK_SOLUTION
SOL_B01,Boundary,SYM_BOUNDARY,State the Limit,Say clearly what will and will not continue.,Discard with SOLVE to resolve one revealed Problem requiring Boundary.,1,BACK_SOLUTION
SOL_B02,Boundary,SYM_BOUNDARY,Pause the Interaction,Create time before pressure removes choice.,Discard with SOLVE to resolve one revealed Problem requiring Boundary.,1,BACK_SOLUTION
SOL_B03,Boundary,SYM_BOUNDARY,Refuse the False Frame,Return to the original issue without accepting misdirection.,Discard with SOLVE to resolve one revealed Problem requiring Boundary.,1,BACK_SOLUTION
SOL_B04,Boundary,SYM_BOUNDARY,Set a Consequence,Connect repeated conduct to a known response.,Discard with SOLVE to resolve one revealed Problem requiring Boundary.,1,BACK_SOLUTION
SOL_B05,Boundary,SYM_BOUNDARY,Bring a Witness,"Add support, memory, or fair process.",Discard with SOLVE to resolve one revealed Problem requiring Boundary.,1,BACK_SOLUTION
SOL_B06,Boundary,SYM_BOUNDARY,Leave the Relation,End a relation that cannot support safe engagement.,Discard with SOLVE to resolve one revealed Problem requiring Boundary.,1,BACK_SOLUTION
SOL_X01,Change,SYM_CHANGE,Clarify Roles,"Assign authority, responsibility, and expectations.",Discard with SOLVE to resolve one revealed Problem requiring Change.,1,BACK_SOLUTION
SOL_X02,Change,SYM_CHANGE,Define a New Process,Replace improvisation with a shared method.,Discard with SOLVE to resolve one revealed Problem requiring Change.,1,BACK_SOLUTION
SOL_X03,Change,SYM_CHANGE,Add a Checkpoint,Detect problems before they become crises.,Discard with SOLVE to resolve one revealed Problem requiring Change.,1,BACK_SOLUTION
SOL_X04,Change,SYM_CHANGE,Document the Agreement,Create a durable shared reference.,Discard with SOLVE to resolve one revealed Problem requiring Change.,1,BACK_SOLUTION
SOL_X05,Change,SYM_CHANGE,Change the Incentive,Stop rewarding the behaviour that creates the problem.,Discard with SOLVE to resolve one revealed Problem requiring Change.,1,BACK_SOLUTION
SOL_X06,Change,SYM_CHANGE,Review the Pattern,Use repeated events to change the system.,Discard with SOLVE to resolve one revealed Problem requiring Change.,1,BACK_SOLUTION
1 solution_id suit symbol_id title microcopy rules_text quantity back_design_id
2 SOL_C01 Clarify SYM_CLARIFY Ask What Happened Invite a concrete account before judging. Discard with SOLVE to resolve one revealed Problem requiring Clarify. 1 BACK_SOLUTION
3 SOL_C02 Clarify SYM_CLARIFY Compare Accounts Place different perspectives side by side. Discard with SOLVE to resolve one revealed Problem requiring Clarify. 1 BACK_SOLUTION
4 SOL_C03 Clarify SYM_CLARIFY Check the Evidence Use records, observations, or agreed facts. Discard with SOLVE to resolve one revealed Problem requiring Clarify. 1 BACK_SOLUTION
5 SOL_C04 Clarify SYM_CLARIFY Name the Assumption Turn an unspoken belief into a testable statement. Discard with SOLVE to resolve one revealed Problem requiring Clarify. 1 BACK_SOLUTION
6 SOL_C05 Clarify SYM_CLARIFY Separate the Issues Keep a counterclaim from replacing the original problem. Discard with SOLVE to resolve one revealed Problem requiring Clarify. 1 BACK_SOLUTION
7 SOL_C06 Clarify SYM_CLARIFY Confirm the Agreement Restate what each person understood. Discard with SOLVE to resolve one revealed Problem requiring Clarify. 1 BACK_SOLUTION
8 SOL_R01 Repair SYM_REPAIR Acknowledge Impact Name what the action changed for others. Discard with SOLVE to resolve one revealed Problem requiring Repair. 1 BACK_SOLUTION
9 SOL_R02 Repair SYM_REPAIR Own Your Part Accept the part that belongs to you. Discard with SOLVE to resolve one revealed Problem requiring Repair. 1 BACK_SOLUTION
10 SOL_R03 Repair SYM_REPAIR Correct the Record Replace a misleading account with an accurate one. Discard with SOLVE to resolve one revealed Problem requiring Repair. 1 BACK_SOLUTION
11 SOL_R04 Repair SYM_REPAIR Make a Specific Apology Name the act, impact, and responsibility. Discard with SOLVE to resolve one revealed Problem requiring Repair. 1 BACK_SOLUTION
12 SOL_R05 Repair SYM_REPAIR Offer Restitution Restore value, time, opportunity, or standing. Discard with SOLVE to resolve one revealed Problem requiring Repair. 1 BACK_SOLUTION
13 SOL_R06 Repair SYM_REPAIR Follow Through Make repair visible through completed action. Discard with SOLVE to resolve one revealed Problem requiring Repair. 1 BACK_SOLUTION
14 SOL_B01 Boundary SYM_BOUNDARY State the Limit Say clearly what will and will not continue. Discard with SOLVE to resolve one revealed Problem requiring Boundary. 1 BACK_SOLUTION
15 SOL_B02 Boundary SYM_BOUNDARY Pause the Interaction Create time before pressure removes choice. Discard with SOLVE to resolve one revealed Problem requiring Boundary. 1 BACK_SOLUTION
16 SOL_B03 Boundary SYM_BOUNDARY Refuse the False Frame Return to the original issue without accepting misdirection. Discard with SOLVE to resolve one revealed Problem requiring Boundary. 1 BACK_SOLUTION
17 SOL_B04 Boundary SYM_BOUNDARY Set a Consequence Connect repeated conduct to a known response. Discard with SOLVE to resolve one revealed Problem requiring Boundary. 1 BACK_SOLUTION
18 SOL_B05 Boundary SYM_BOUNDARY Bring a Witness Add support, memory, or fair process. Discard with SOLVE to resolve one revealed Problem requiring Boundary. 1 BACK_SOLUTION
19 SOL_B06 Boundary SYM_BOUNDARY Leave the Relation End a relation that cannot support safe engagement. Discard with SOLVE to resolve one revealed Problem requiring Boundary. 1 BACK_SOLUTION
20 SOL_X01 Change SYM_CHANGE Clarify Roles Assign authority, responsibility, and expectations. Discard with SOLVE to resolve one revealed Problem requiring Change. 1 BACK_SOLUTION
21 SOL_X02 Change SYM_CHANGE Define a New Process Replace improvisation with a shared method. Discard with SOLVE to resolve one revealed Problem requiring Change. 1 BACK_SOLUTION
22 SOL_X03 Change SYM_CHANGE Add a Checkpoint Detect problems before they become crises. Discard with SOLVE to resolve one revealed Problem requiring Change. 1 BACK_SOLUTION
23 SOL_X04 Change SYM_CHANGE Document the Agreement Create a durable shared reference. Discard with SOLVE to resolve one revealed Problem requiring Change. 1 BACK_SOLUTION
24 SOL_X05 Change SYM_CHANGE Change the Incentive Stop rewarding the behaviour that creates the problem. Discard with SOLVE to resolve one revealed Problem requiring Change. 1 BACK_SOLUTION
25 SOL_X06 Change SYM_CHANGE Review the Pattern Use repeated events to change the system. Discard with SOLVE to resolve one revealed Problem requiring Change. 1 BACK_SOLUTION