CB-REV-0003: round 3, and three of four FATAL came from round 2's fixes
Some checks failed
ci / check (push) Failing after 3s

The pattern is now measured over three rounds: 5 fatal, then 3 (2 from the
previous round's corrections), then 4 (3 from them). The corrections are
not getting safer.

FATAL 1: round 2's short-cell assertion went into regulation.rs only.
attack-value.rs — which produced every number in CB-EV-0030's DARVO table
— still just warned, and the gate registered to close the finding claimed
the property for both.

FATAL 2, the sharpest of the three rounds: counting games proves they
STARTED. Stopping the engine after one round gives 200 games, all-zero
columns and exit 0 — byte for byte the signature CB-EV-0030 says the
instrumentation distinguishes from a real result. Both harnesses now
require every counted game to have reached an outcome over five rounds.

FATAL 3: round 2's `.csv` filter was applied to all three loops, so
catalog.yaml and rules_delta.yaml — whose missing digests were round 1's
finding — were recorded and then never compared, and never checked against
upstream at all. Only the parser loop filters now.

FATAL 4: five of six tiebreak comparators had no coverage. GR-E04's
tiebreak never executes in any scenario. All four are now covered and
mutation-verified; the Blame key needed compensating claims to be
reachable at all, since Blame also lowers the coalition score.

SERIOUS: "peak held" computed the same number as "peak assigned" for every
possible input — the real gap was that START_STRESS was an unchecked
constant, now read off the dealt state; cadence="none" was a pure
loophole, removed; sibling discovery swapped a hand-written list for
hand-written globs and missed metadata.json and VARIANT.md, both named in
the package's own changed_files — now walked, and it found them
immediately; and "~72,000 games" was unsourced, make panels runs 17,600.

Also separated two kinds of number that were presented alike: seats×games
is invariant, 363 and 29 vary 7.1%-11.5% across samples.

Round 4 owed. The conclusion is not that the work is nearly right — it is
that author-made corrections to measurement work should be assumed
defective until a fresh reader has attacked them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
tegwick 2026-08-08 10:26:25 +02:00
parent feb68027f9
commit c4a8a227c0
9 changed files with 386 additions and 57 deletions

View file

@ -143,12 +143,18 @@ takes the **clamp** at 5 to collapse a gap and change who wins.
**Its impact was claimed and never measured, and the measurement is
zero** (round 2, #5). This file said the pressure was invisible to *"the
two modes CB-EV-0030 reports on"* without checking. The reviewer ran
~72,000 games across all three modes with a divergence detector and found
**no divergence at all**; `attack-value`'s output is byte-identical with
the fix and without it. **The defect is real in principle and its only
witness is a hand-constructed board.** It is worth fixing and it changed
nothing that has been reported.
two modes CB-EV-0030 reports on"* without checking. Reverting the fix
leaves `attack-value`'s output **byte-identical across all 24 cells and
all three modes**, including the two whose `won` column reads through the
tiebreak. **The defect is real in principle and its only witness is a
hand-constructed board.**
**The sample size quoted here was "~72,000 games" and was not
derivable from anything in this repo** (round 3, #9). `make panels` runs
**17,600**: `attack-value` is 2 variants × 3 modes × 3 policies × 4 seat
counts × 200 = 14,400, and `regulation` is 2 × 4 × 2 × 200 = 3,200. The
figure was adopted from a reviewer's message and never re-derived — in
the file whose whole correction history is about exactly that.
**Inert arms, and a second wrong-subject error caught on the way.** A
DARVO arm at the End of Round 5 can never advance a stage — `GameEnded`
@ -162,19 +168,32 @@ follows immediately — and ground-game's criterion 1 is about DARVO
| 4p | 800 | 0 |
| 6p | 1200 | 0 |
**Two kinds of number are in that table and this file did not distinguish
them** (round 3, #10). `600 / 800 / 1200` is **exactly `seats × games`**
and holds on every sample tried. `363` and `29` are **sample-specific**:
across four disjoint windows the 2p arms run 354366 and the inert share
runs **7.1%11.5%**. So "92% of arms at 2p are live" is a fact about seeds
`0..200`, not about the game — it reads 88.5% elsewhere.
The same applies to the baseline win counts quoted throughout
(`132/165/190/200`): the *identity* of greedy and reactive under baseline
holds on every sample, the **digits do not**.
**The first version of that metric was wrong and equalled `darvo` in
every cell**, because it tested `g.rounds >= 5` — a property of the
*game*, not of the *event*. Every arm in every completed game was marked
inert, which briefly looked like "criterion 1 is not met after all". An
arm is inert when no `RoundEnded` follows it.
**29-of-363 was independently confirmed twice**, and the citation for it
was wrong the first time (round 2, #6): this file credited
`CB-REV-0001`, which does not contain the figure. Round 1's reviewer *did*
report it — 29 of 363 at 2p, 8% — but only in its message, and it was
never transcribed into the review file. **The record is now corrected
there.** Round 2 re-derived it independently, by a different definition
(no later DARVO event names that player), and agrees in every cell.
**The 29-of-363 citation has now been wrong twice and is stated plainly
here.** Round 2 found it credited to `CB-REV-0001`, which did not contain
the figure; round 1's reviewer *had* reported it, in its message only.
Round 3 found the remaining problem (#10, #11): both "independent
confirmations" used **seeds 0..200**, so what was confirmed twice is the
**definition**, not the figure — and whether round 1's `StrictReactive`
was the corrected one-arm policy or the five-difference one **cannot be
determined from anything in this repo**, because that reviewer's code was
never kept. Treat 29/363 as one sample of a quantity that varies.
**Criterion 1 stands as met**: 92% of arms at 2p and all of them above are
live.