clay-borg/evidence/CB-EV-0029-the-fourteen-unread-files.md
tegwick 627992bc85
Some checks failed
ci / check (push) Failing after 5s
CB-WP-0037 done: T03 classification and T04 evidence
Reading Player_Mats.csv and Glossary.csv — which O4 had forbidden
declaring about until they were read — found a rule. Player_Mats'
choice_rule column IS GR-R03: at Stress 4-5 choose ATTACK or GROUND unless
you spend a ready Freedom token. The engine's stress_gated and
allowed_under_stress_gate match it exactly, and now have a tripwire.

So Ornamentation.md gains §1.3: the unit is a column, not a file.
Classifying Player_Mats as ornamentation would have thrown a rule away
with the colour swatches. A mixed artifact is normal — a player mat is a
rule printed on a decorated card in the box too. O4 is rewritten and
re-grounded from provisional to rule accordingly.

O5, O6, O7 declared with falsifiers. O7's is not theoretical:
back_design_id is unread in four vendored files, and hidden information is
what card backs are for.

CB-EV-0029 answers T04's question per rule rather than as a count — yes,
every checkable clause — and states the reading that result does NOT
support: it shows GroundRules.md was a faithful secondary source for the
clauses with behaviour to check, not that the engine is correct.

10 of 19 files vendored. Nine still unread, and Rules_Text.csv is the one
that matters: every clause checked here was checked against our own
transcription of it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 00:33:24 +02:00

6.3 KiB
Raw Blame History

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 45 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

F24solution_deck() builds six of each suit from a Rust array and never opens Solutions.csv, whose suit and quantity say the same.

F25GroundState::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 15 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.