CB-WP-0037 T02: the engine's rules against the edition's
Some checks failed
ci / check (push) Failing after 3s

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>
This commit is contained in:
tegwick 2026-08-08 00:21:40 +02:00
parent d98580fb4c
commit 53109ec5e5
7 changed files with 423 additions and 1 deletions

View file

@ -108,7 +108,7 @@ deletes the literal, and it turns red the moment either side moves.
```task
id: CB-WP-0037-T02
status: todo
status: done
priority: high
state_hub_task_id: "625b51fd-8af1-46bf-8b91-087760259dd6"
```
@ -124,6 +124,52 @@ mechanism.
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
```task