CB-WP-0037 done: T03 classification and T04 evidence
Some checks failed
ci / check (push) Failing after 5s
Some checks failed
ci / check (push) Failing after 5s
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>
This commit is contained in:
parent
87414d7c1d
commit
627992bc85
10 changed files with 497 additions and 12 deletions
136
evidence/CB-EV-0029-the-fourteen-unread-files.md
Normal file
136
evidence/CB-EV-0029-the-fourteen-unread-files.md
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
# 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.
|
||||
Loading…
Add table
Add a link
Reference in a new issue