clay-borg/workplans/CB-WP-0037-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

9.3 KiB
Raw Blame History

id kind title status state_hub_workstream_id
CB-WP-0037 product The fourteen unread files done 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, advancethe DARVO sequence, as rules
Relations.csv formation, breaking, rules_texthow 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-check already 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: done
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.

Done 2026-08-08. Read them, and O4 was wrong: Player_Mats.csv carries GR-R03 in choice_rule. Both files are vendored as mechanism, the stress gate has a tripwire, and O4 is rewritten and re-grounded from provisional to rule.

O5, O6, O7 declared with falsifiers — symbols and glyphs, colours and design tokens, card backs / BOM / print manifest. O7's falsifier is not theoretical: back_design_id is unread in four vendored files and hidden information is what card backs are for.

Ornamentation.md §1.3 added: the unit is a column, not a file. Discovered by doing the work rather than predicted by the plan.

Task: evidence

id: CB-WP-0037-T04
status: done
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.

Done 2026-08-08. CB-EV-0029. Yes, every checkable clause — stated per rule, and with the reading that result does not support said out loud: it shows GroundRules.md was a faithful secondary source for the clauses that have behaviour to check, not that the engine is correct.