# CB-EV-0029 — the fourteen unread files CB-WP-0037 T04. Tier M (imports more of an external dataset under AM-4's budgets; chaos d8 = 1 → no override). **Declaration 9 of chaos window 3.** Closed 2026-08-08. **Delivered:** F18's first reproduction, five more vendored files, the engine's rules checked against the edition's for the first time, F24 and F25 raised, four ornament declarations, and one spec clause the work produced rather than the plan predicting. --- ## 1. Did the engine's rules match the edition's? **Yes. Every checkable clause, on the first reading.** Stated per rule, because a count would hide which ones were checked. | 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, **the 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` regardless of the attack's outcome | | **remove Focus if the sequence ends before REVERSE** | `focus.remove` on `DarvoEnded` | | REVERSE: flip to Blame, +1 target, take a Protection, −2 self | exactly that, with GROUND—ND rejection | | GR-R03: at Stress 4–5 only ATTACK or GROUND unless Freedom | `stress_gated` ≥ 4, `allowed_under_stress_gate` | **The two hardest clauses to notice were already right.** Focus after a cancelled Attack, and Focus removed on an early end, are the kind of thing a reimplementation drops — and nobody here had read the file they come from. **That is a real result and it is worth resisting the obvious reading.** It does not show the engine is correct; it shows `GroundRules.md` was a faithful secondary source for the clauses we checked. The clauses we did not check are the ones with no behaviour to check against, and they are still unread. ## 2. What the reproduction cost, and the error inside it F18 had sat open with **no artifact** — the only such row — because the gap had been hand-counted, never measured. **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 **over-counting coverage understates the gap** — the wrong direction for a measurement whose only job is to size it. **The first version was wrong in this project's signature way.** It watched `Table::at` only and reported `visibility`, `required_solution` and `point_value` as unread when the engine reads all three through `problems_of`'s own index lookups. Correct about the accessor, wrong about the engine: **the ADR-0018 family, committed inside the artifact built to measure that family.** Problems.csv went 7/13 → 10/13 once the manual reader was recorded too. **Coverage, after this pass** — 10 of 19 files vendored: | file | read | file | read | |---|---|---|---| | Glossary.csv | 2/2 | Modes.csv | 5/7 | | Problems.csv | 10/13 | Tokens.csv | 6/9 | | Scenarios.csv | 9/13 | Actions.csv | 4/9 | | DARVO.csv | 5/6 | Solutions.csv | 4/8 | | Relations.csv | 4/6 | Player_Mats.csv | **1/14** | **Player_Mats reads one column of fourteen, and that is correct**: §4. ## 3. Two findings, one shape **F24** — `solution_deck()` builds six of each suit from a Rust array and never opens `Solutions.csv`, whose `suit` and `quantity` say the same. **F25** — `GroundState::threshold` is a `match` returning 5/7/9; `Scenarios.csv` carries `threshold_2_players`, `threshold_3_4_players`, `threshold_5_6_players`. Setup writes `stress: 2`; the edition says *"All players start at Stress 2."* The engine plays five rounds; the edition prints a 1–5 track. **Both agree, and that is the finding rather than the reassurance.** F25's numbers are **the most contested in the project** — the whole 4/6/9 versus 5/7/9 episode, a withdrawal, a ruling and a scenario rewrite turned on exactly these — and the engine has been right about them by maintenance coincidence rather than by reading the file that owns them. Filed `inert`, role **`default`**, not `counterexample`: the reproduction is green *because* the two agree, which GameDesign §1.3 says to expect from a documented provisional choice, and it turns red the moment either side moves. ## 4. The clause the work produced `Player_Mats.csv` looks like pure ornamentation — a symbol, a colour, a title for each of six seats. One of its fourteen columns, `choice_rule`, **is GR-R03**. Classifying the file would have thrown a rule away with the colour swatches. So `Ornamentation.md` gained §1.3: **the unit is a column, not a file**, and a mixed artifact is normal — a player mat is a rule printed on a decorated card in the box too. **This is why O4 was wrong and has been rewritten.** It said nothing could be declared about `Player_Mats` or `Glossary` until they were read, and assumed both were ornamentation-bearing. Reading them found a rule. ## 5. Tripwires, and why they are not derivations Every agreement in §1 was established by **a person reading prose**, and that reading goes stale in silence when the prose changes. So each behaviour pins the phrase it was read from. Reword the edition and the test goes red **naming the engine branch that depended on it** — mutation-proven by rewording *"even if the Attack was cancelled"*. **It asks for a human rather than re-deriving**, and that is deliberate: a rules change absorbed automatically is a rules change nobody decided. ## 6. Cost `make cost`, not inlined (§Single source of fact). Five files vendored, no new dependency, no budget moved. ## Open after this pass - **Nine files still unread**, and `Rules_Text.csv` (21 sections) is the one that matters: it is the rules themselves, and every clause in §1 was checked against `GroundRules.md`, our transcription of them. - **`resolution_order`, `target` and `stress_restriction`** are unread in `Actions.csv` and look like rules. **Nothing in §1 covers them.** - **F17** waits on ground-game's maintainer, not on us. - **F24 and F25 are guarded, not fixed.** The literals are still literals.