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>
8.4 KiB
| id | kind | title | status | state_hub_workstream_id |
|---|---|---|---|---|
| CB-WP-0037 | product | The fourteen unread files | active | c8425c0e-51e9-445f-802c-9ff38935fd5a |
Purpose
structural tier M (imports more of an external dataset under AM-4's
budgets, and gives an open register row its first
reproduction)
chaos d8 = 1 → no override
declared tier M
Declaration 9 of chaos window 3.
Why this, and why now
F18 is the only open finding clay-borg owns, the only row in the
register lacking a reproduction, and the only metric off target
(open, lacking a reproduction: 1, target 0). F17 is with ground-game.
And F18 is understated. Its prose describes display data — "the cards cannot say what they do" — and calls itself fixed by CB-WP-0028. Measured now: 5 of 19 files vendored, and among the 14 unread are
| file | what is in it |
|---|---|
DARVO.csv |
mandatory_effect, target_memory, advance — the DARVO sequence, as rules |
Relations.csv |
formation, breaking, rules_text — how Bonds and Rivalries form and break |
Scenarios.csv |
four scenarios with their setups — the engine hardcodes one |
Rules_Text.csv |
21 sections of the rules themselves |
Player_Mats.csv |
includes choice_rule and stress_track |
The engine implements DARVO and relation behaviour without ever having read the edition's statement of them. That is not inert display data; it is rules taken from a secondary source and never checked against the primary one.
A spot check is reassuring — REVERSE's engine path flips Focus to Blame,
gives the target +1 Stress, takes a Protection and reduces the owner's
Stress by 2, exactly as DARVO.csv states. Reassuring is not checked,
and the whole point of this repo is the difference.
Task: give F18 a reproduction
id: CB-WP-0037-T01
status: done
priority: high
state_hub_task_id: "5ff5cbda-0deb-4078-a552-f5e757abb95c"
An artifact that measures the gap instead of asserting it: per edition file, columns present against columns the engine reads.
Controls:
- it can go red and green — improving coverage must move it, or it is not measuring coverage (ADR-0006 D3);
- it reports per file, never a single ratio: "5 of 19" is the sum shape GameDesign §1.2 exists to refuse;
- an absent upstream is reported absent, never as a pass — the shape
edition-checkalready uses.
Done 2026-08-07. the_engine_reads_only_part_of_what_it_vendored.
F18 has a reproduction, and the register's one off-target metric —
open, lacking a reproduction: 1 — is now 0.
Recorded at the accessor, not counted from the source. A list of
column names beside the code would be a second copy of a fact the get
calls already carry; grepping the source would over-count, because six
column names are shared between vendored files.
And the first version was wrong in this repo's signature way. It
watched Table::at only, so it reported visibility, required_solution
and point_value as unread when the engine reads all three —
problems_of predates Table and resolves its own indices. Correct about
the accessor, wrong about the engine: the ADR-0018 family, committed
inside the artifact built to measure it. Problems.csv went 7/13 → 10/13
once the manual reader was recorded too.
Measured, per file, never as a ratio:
| file | read | unread |
|---|---|---|
| Problems.csv | 10/13 | problem_id, symbol_id, back_design_id |
| Actions.csv | 4/9 | symbol_id, resolution_order, target, stress_restriction, designer_note |
| Solutions.csv | 4/8 | suit, symbol_id, quantity, back_design_id |
| Modes.csv | 5/7 | mode_type, back_design_id |
| Tokens.csv | 6/9 | shape, size, symbol_id |
resolution_order, target and stress_restriction are rules, and
the engine implements all three from GroundRules.md without reading the
edition's statement of them. That is T02's work.
F24 raised: solution_deck() is a Rust literal — six of each suit,
never opening Solutions.csv. It agrees today (24 rows, six per
suit), which is why it is inert with role default rather than a
counterexample: right by maintenance coincidence, not by reading.
the_hardcoded_deck_still_matches_the_edition is the guard until T02
deletes the literal, and it turns red the moment either side moves.
Task: vendor what carries rules, and check it against the engine
id: CB-WP-0037-T02
status: done
priority: high
state_hub_task_id: "625b51fd-8af1-46bf-8b91-087760259dd6"
DARVO.csv, Relations.csv, Scenarios.csv first — they carry
mechanism.
Controls:
- every divergence between the edition's text and the engine is a
finding, raised, not quietly fixed: the edition is
ground-game's to rule on; - agreement is recorded too. A survey that finds nothing and leaves no trace cannot be told apart from one never run (CB-EV-0027 §3);
- AM-4's dependency and size budgets hold, or the pass says what it cost.
Done 2026-08-08. DARVO.csv, Relations.csv and Scenarios.csv
vendored with digests; make edition-check green both ways.
Every checkable clause agrees. Recorded rather than merely noted, because a survey that finds nothing and leaves no trace cannot be told from one never run:
| the edition says | the engine does |
|---|---|
| Bond Support: −2 Stress, ready Freedom, cancel the target's DARVO stage | −2, FreedomReadied, DarvoEnded |
| Bond Attack: +2 and flip to Rivalry | +2, RelationFormed(Rivalry) |
| Rivalry Support: −1, target chooses flip or break | −1, FlipToBond / BreakRivalry |
| Rivalry Attack: +2 and break | +2, RelationBroken |
| no-relation Attack forms a Rivalry automatically | forms without consent, both slots free |
| DARVO ATTACK places Focus even if the Attack was cancelled | FocusPlaced after resolve_attack regardless |
| remove Focus if the sequence ends before REVERSE | focus.remove on DarvoEnded |
| REVERSE: flip to Blame, +1 to target, take a Protection, −2 to self | exactly that, with GROUND—ND rejection |
The two hardest clauses to notice were already right, which is the part worth saying: nobody had read the file, and they were right anyway.
These 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 turns the test red and asks for a human — mutation-proven by rewording "even if the Attack was cancelled", which fails naming the exact engine branch that depends on it.
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 entire 4/6/9 versus 5/7/9
episode turned on them — and the engine has been right about them by
maintenance coincidence rather than by reading the file that owns them.
Same shape as F24; inert, role default.
A second pair that could drift silently: Problems.csv and
Scenarios.csv both state the deal, and the engine reads only the first.
the_two_files_that_state_the_deal_agree checks all four scenarios; they
match today, and nothing was checking.
Coverage, re-measured — the earlier figure would otherwise have
understated the gap by three files: DARVO.csv 5/6, Relations.csv 4/6,
Scenarios.csv 4/13.
Task: classify the rest
id: CB-WP-0037-T03
status: todo
priority: medium
state_hub_task_id: "a09c8738-f38f-414a-a986-ba224396903e"
Symbols, Design_Tokens, Back_Designs, BOM, Print_Manifest are
production and visual identity.
Control: each becomes either a vendored file or an ornament
declaration with a falsifier (OrnamentRegister.md).
O4 already says nothing may be declared about Player_Mats or
Glossary until they are read — so read them or leave O4 alone.
Task: evidence
id: CB-WP-0037-T04
status: todo
priority: medium
state_hub_task_id: "e15a9ada-263a-4fce-8975-b5d88b9ac08a"
evidence/CB-EV-*.md. Did the engine's rules match the edition's?
Say so either way, per rule, not as a count.