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

@ -46,6 +46,7 @@ kinds, states and metrics: [`GameDesign.md`](GameDesign.md). Reported by
| F16 | inconsistent | withdrawn | games/ground/examples/difficulty.rs | counterexample | 2026-08-05 | clay-borg |
| F17 | degenerate | raised | games/ground/examples/attack-value.rs | counterexample | 2026-08-06 | ground-game |
| F18 | inert | raised | `games/ground/src/edition.rs::card_text_tests::the_engine_reads_only_part_of_what_it_vendored` | counterexample | 2026-08-06 | clay-borg |
| F25 | inert | raised | `games/ground/src/edition.rs::card_text_tests::the_engine_agrees_with_the_editions_own_numbers` | default | 2026-08-08 | clay-borg |
| F24 | inert | raised | `games/ground/src/edition.rs::card_text_tests::the_hardcoded_deck_still_matches_the_edition` | default | 2026-08-07 | clay-borg |
| F19 | degenerate | applied | crates/cb-render-html/src/lib.rs::overhead_table | counterexample | 2026-08-06 | clay-borg |
| F20 | inert | applied | crates/cb-render-html/src/lib.rs::ending_page | counterexample | 2026-08-06 | clay-borg |
@ -202,6 +203,19 @@ kinds, states and metrics: [`GameDesign.md`](GameDesign.md). Reported by
sees `Clarify` where the card reads *"Ask What Happened — Invite a
concrete account before judging."* **`inert`**: the data exists and
cannot fire, because nothing reads it. **Ours, and CB-WP-0028 fixes it.**
- **F25 — the engine hardcodes numbers the edition states.**
`GroundState::threshold` is a `match` returning 5/7/9 while
`Scenarios.csv` carries `threshold_2_players`, `threshold_3_4_players`
and `threshold_5_6_players`; setup writes `stress: 2` against *"All
players start at Stress 2."*; the engine plays five rounds against a
printed 15 track. **All three agree, on all four scenarios**, and that
is the finding rather than the reassurance: these are the most contested
numbers in the project — the whole 4/6/9 versus 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. **`inert`**, role `default`:
green because they agree, red the moment either side moves. **Ours.**
Same shape as F24.
- **F24 — the draw pile is a Rust literal.** `solution_deck()` builds six
of each suit from an array and never opens `Solutions.csv`, whose `suit`
and `quantity` columns say the same thing. **They agree today** — 24