clay-borg/games/ground/examples/regulation.rs

284 lines
11 KiB
Rust
Raw Normal View History

CB-WP-0039: a seat that does not regulate — and it changes H1's verdict CB-EV-0030 concluded H1's DARVO arm rate was still 0. That was true of the panel, and the panel was greedy-family throughout. GreedyPolicy ranks `Ground if gated => 100`, so it grounds the instant the stress gate bites, Stress plateaus at 3, and the arm at 5 is unreachable by construction. "H1 does nothing" was really "H1 does nothing to a seat that already manages its Stress" — and H1 was written for the seat that does not. `reactive` is greedy with exactly one preference changed: GROUND demoted below ATTACK. Under it, H1's criteria 1 and 2 are MET — DARVO arms 400 times per cell, ATTACK is chosen 3 times per seat per game. Criterion 3 fails harder: reactive wins nothing at any seat count. The larger finding is about the baseline. Greedy and reactive play IDENTICALLY under baseline, and peak Stress across 3,200 baseline games was 1 — against a starting value of 2. The gate at 4, the DARVO arm at 5 and the Freedom token are all unreachable, and a policy built to be reckless with Stress is indistinguishable from one built to husband it. That is a deeper account of F17 than F17 has. Not raised as a finding yet: it wants the plural panel first. A constant was investigated rather than reported: darvo was exactly 400 in every cell while atk scaled with seats. Six-player final Stress is [5,5,4,4,4,4] every seed — H1-B holds the attacker at 4, below the arm, and pushes its targets to 5. The self-soothe suppresses DARVO in the aggressor and concentrates it in the attacked. The direction follows from H1-B's arithmetic; the number 2 is partly an artifact of reactive's first-legal targeting, and is labelled as such. Still unreviewed: tier L review outstanding on CB-WP-0038, and nothing here reaches ground-game until it runs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 01:08:40 +02:00
//! Does H1 do nothing, or does it do nothing **to a seat that already
//! manages its Stress**? (CB-WP-0039)
//!
//! [`CB-EV-0030`] measured ground-game's H1 with a panel that was
//! greedy-family throughout, and found DARVO never arms. But
//! `GreedyPolicy` ranks `Action::Ground if gated => 100`: the moment the
//! stress gate bites it grounds, Stress plateaus at 3, and the arm at 5
//! is unreachable **by construction**.
//!
//! H1 was written for the seat that does *not* do that. So this varies
//! **exactly one preference** — GROUND demoted below ATTACK — and holds
//! every other ranking identical to greedy's.
//!
//! [`CB-EV-0030`]: ../../../evidence/CB-EV-0030-h1-measured.md
use cb_game_runtime::{ScenarioGame, Setup};
use cb_kernel::PlayerId;
use games_ground::bot::{play, Choice, GreedyPolicy, Policy};
use games_ground::{Action, GroundCommand, GroundState, ScoringMode, Variant};
/// Greedy, with GROUND demoted below ATTACK. Nothing else differs.
///
CB-REV-0002: round 2, and the corrections were not approvable either Three FATAL, five SERIOUS. The substance of round 1's corrections held — Reactive is genuinely one arm different, the five replacement controls are non-inert, the inert metric is right, the numbers reproduce. What failed were the CLAIMS about them, and two defects the corrections introduced. FATAL 1: the fix for round 1's #11 did not fix it. The assertion was `games + setup_fails == 200`, and a refused setup increments setup_fails while skipping games — so the sum is invariant under exactly the failure it claimed to catch. Injecting setup failures gave exit 0 over 196-game columns. Now asserts games == GAMES, verified to exit 101. FATAL 2: the correction to the selective-column FATAL was itself selective. "81-1000 per cell, baseline AND H1" and "31-1000" twelve lines apart, both taken from the baseline row; under H1 rank-75 arms are 59/0/0/0. Every cell is now printed rather than summarised, and the corrected verdict is the opposite of the one it replaced: under rank-75, H1 REDUCES DARVO arms to zero at 3p and above. FATAL 3: "DARVO arms 2 per seat per game" is 1 per seat per game, exactly, at every band. SERIOUS: the tiebreak oracle asserted only that the winner set CHANGED, so reversing the tiebreak left it green; the #13 defect's impact was claimed and never measured (72,000 games: zero divergences — real in principle, witnessed only by a constructed board); a 29-of-363 citation pointed at a file that did not contain it (round 1's reviewer did report it, and it was never transcribed — the record was wrong, not the number); the harnesses were run by NO GATE, so every published figure came from a manual run of an ungated binary, including the assertion added for #1; and edition-check's sibling handling — added by the last correction — was self-certifying, crashed instead of failing, and counted Markdown lines as coverage. Now discovered on disk, and it found a real gap on its first run: Rules_Text.csv vendored with no digest. Also: "peak Stress held" was dead code kept quiet by `let _ = held;` — the numbers were right by coincidence. make panels is now a registered gate. Round 3 is owed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 09:44:00 +02:00
/// **It delegates.** An earlier version re-typed an abridged copy of
/// greedy's ranking and called changing one line of the copy "one
/// preference"; it differed in five, and the seat burned its Freedom
/// token in round one of every game. This comment used to argue for the
/// copy, which gave a future maintainer written cover to restore it
/// (CB-REV-0002 #11).
CB-WP-0039: a seat that does not regulate — and it changes H1's verdict CB-EV-0030 concluded H1's DARVO arm rate was still 0. That was true of the panel, and the panel was greedy-family throughout. GreedyPolicy ranks `Ground if gated => 100`, so it grounds the instant the stress gate bites, Stress plateaus at 3, and the arm at 5 is unreachable by construction. "H1 does nothing" was really "H1 does nothing to a seat that already manages its Stress" — and H1 was written for the seat that does not. `reactive` is greedy with exactly one preference changed: GROUND demoted below ATTACK. Under it, H1's criteria 1 and 2 are MET — DARVO arms 400 times per cell, ATTACK is chosen 3 times per seat per game. Criterion 3 fails harder: reactive wins nothing at any seat count. The larger finding is about the baseline. Greedy and reactive play IDENTICALLY under baseline, and peak Stress across 3,200 baseline games was 1 — against a starting value of 2. The gate at 4, the DARVO arm at 5 and the Freedom token are all unreachable, and a policy built to be reckless with Stress is indistinguishable from one built to husband it. That is a deeper account of F17 than F17 has. Not raised as a finding yet: it wants the plural panel first. A constant was investigated rather than reported: darvo was exactly 400 in every cell while atk scaled with seats. Six-player final Stress is [5,5,4,4,4,4] every seed — H1-B holds the attacker at 4, below the arm, and pushes its targets to 5. The self-soothe suppresses DARVO in the aggressor and concentrates it in the attacked. The direction follows from H1-B's arithmetic; the number 2 is partly an artifact of reactive's first-legal targeting, and is labelled as such. Still unreviewed: tier L review outstanding on CB-WP-0038, and nothing here reaches ground-game until it runs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 01:08:40 +02:00
struct Reactive;
impl Policy for Reactive {
fn name(&self) -> &'static str {
"reactive"
}
fn choose(
&mut self,
state: &GroundState,
seat: PlayerId,
legal: &[GroundCommand],
_may_pass: bool,
) -> Choice {
let gated = state
.players
.get(&seat)
.is_some_and(|p| p.stress >= 4 && !p.freedom_gate_lifted);
CB-REV-0001: the adversarial review, and it was not approvable Thirteen challenges, five FATAL, all five conceded. Nothing had reached ground-game, which is the only reason this is a correction and not a retraction. The worst: `Reactive` was not "greedy with one preference changed". It differed in five, including SpendFreedom — ranked 95 unconditionally against greedy's `95 if gated else 0` — so the seat burned its Freedom token in round one of every game. A second change to the exact mechanism under study, and every number in CB-EV-0031 was measuring it. The pass claimed ADR-0018's one-varying-parameter discipline in its own workplan while violating it. GreedyPolicy::rank is now public and the policy delegates, overriding one match arm, so the control is structurally true. Withdrawn entirely: "H1-B suppresses DARVO in the attacker". Disabling H1-B under the corrected policy changes the arm count by exactly zero. The pass hedged the wrong variable — it disclaimed "the number 2" and defended "the direction", and the direction is what failed. The supporting inference was invalid anyway: final Stress cannot show who armed, because DarvoEnded resets the stage and REVERSE gives its owner -2. Corrected: criterion 1 was failed on the greedy column while the pass's own printed table showed 31-1000 arms in the other columns — the selective-column move, in the file that names it. "Peak Stress was 1" was a maximum over StressSet payloads, not held state (true: 2); the baseline game count was 1,600 not 3,200; and "a reckless policy plays identically to a careful one" is refuted by this repo's own rank-95 policy. Inert controls replaced, each verified red against the reviewer's own mutation: the baseline hash test compared two identically-constructed states (serde(skip) on variant left 57/57 green); the `unchanged:` test checked 3 of 7 entries and passed with SOLVE made illegal; H1-A's ordering and H1-B's OU-cancel path had no test at all. edition-check now covers catalog.yaml and rules_delta.yaml, whose digests CB-WP-0038 claimed and never recorded — the review found it and reported it unverified rather than absent, which was the right call. Still open: H1-B on the DARVO extra-Attack path is untested, regulation.rs still skips setup failures silently, and round-5 arms are counted though they can never act. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 02:02:35 +02:00
// ONE ARM OVERRIDDEN, THE REST DELEGATED.
//
// The first version re-typed greedy's ranking and changed one
// line of the copy. It differed in five places, and the review
// found it: `SpendFreedom` ranked 95 unconditionally instead of
// greedy's `95 if gated else 0`, so this seat spent its Freedom
// token in round one of every game — a second change to the very
// mechanism under study. Delegating makes "exactly one preference
// differs" structurally true instead of a claim in a comment.
CB-WP-0039: a seat that does not regulate — and it changes H1's verdict CB-EV-0030 concluded H1's DARVO arm rate was still 0. That was true of the panel, and the panel was greedy-family throughout. GreedyPolicy ranks `Ground if gated => 100`, so it grounds the instant the stress gate bites, Stress plateaus at 3, and the arm at 5 is unreachable by construction. "H1 does nothing" was really "H1 does nothing to a seat that already manages its Stress" — and H1 was written for the seat that does not. `reactive` is greedy with exactly one preference changed: GROUND demoted below ATTACK. Under it, H1's criteria 1 and 2 are MET — DARVO arms 400 times per cell, ATTACK is chosen 3 times per seat per game. Criterion 3 fails harder: reactive wins nothing at any seat count. The larger finding is about the baseline. Greedy and reactive play IDENTICALLY under baseline, and peak Stress across 3,200 baseline games was 1 — against a starting value of 2. The gate at 4, the DARVO arm at 5 and the Freedom token are all unreachable, and a policy built to be reckless with Stress is indistinguishable from one built to husband it. That is a deeper account of F17 than F17 has. Not raised as a finding yet: it wants the plural panel first. A constant was investigated rather than reported: darvo was exactly 400 in every cell while atk scaled with seats. Six-player final Stress is [5,5,4,4,4,4] every seed — H1-B holds the attacker at 4, below the arm, and pushes its targets to 5. The self-soothe suppresses DARVO in the aggressor and concentrates it in the attacked. The direction follows from H1-B's arithmetic; the number 2 is partly an artifact of reactive's first-legal targeting, and is labelled as such. Still unreviewed: tier L review outstanding on CB-WP-0038, and nothing here reaches ground-game until it runs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 01:08:40 +02:00
let rank = |c: &GroundCommand| -> i32 {
match c {
GroundCommand::SelectAction {
CB-REV-0001: the adversarial review, and it was not approvable Thirteen challenges, five FATAL, all five conceded. Nothing had reached ground-game, which is the only reason this is a correction and not a retraction. The worst: `Reactive` was not "greedy with one preference changed". It differed in five, including SpendFreedom — ranked 95 unconditionally against greedy's `95 if gated else 0` — so the seat burned its Freedom token in round one of every game. A second change to the exact mechanism under study, and every number in CB-EV-0031 was measuring it. The pass claimed ADR-0018's one-varying-parameter discipline in its own workplan while violating it. GreedyPolicy::rank is now public and the policy delegates, overriding one match arm, so the control is structurally true. Withdrawn entirely: "H1-B suppresses DARVO in the attacker". Disabling H1-B under the corrected policy changes the arm count by exactly zero. The pass hedged the wrong variable — it disclaimed "the number 2" and defended "the direction", and the direction is what failed. The supporting inference was invalid anyway: final Stress cannot show who armed, because DarvoEnded resets the stage and REVERSE gives its owner -2. Corrected: criterion 1 was failed on the greedy column while the pass's own printed table showed 31-1000 arms in the other columns — the selective-column move, in the file that names it. "Peak Stress was 1" was a maximum over StressSet payloads, not held state (true: 2); the baseline game count was 1,600 not 3,200; and "a reckless policy plays identically to a careful one" is refuted by this repo's own rank-95 policy. Inert controls replaced, each verified red against the reviewer's own mutation: the baseline hash test compared two identically-constructed states (serde(skip) on variant left 57/57 green); the `unchanged:` test checked 3 of 7 entries and passed with SOLVE made illegal; H1-A's ordering and H1-B's OU-cancel path had no test at all. edition-check now covers catalog.yaml and rules_delta.yaml, whose digests CB-WP-0038 claimed and never recorded — the review found it and reported it unverified rather than absent, which was the right call. Still open: H1-B on the DARVO extra-Attack path is untested, regulation.rs still skips setup failures silently, and round-5 arms are counted though they can never act. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 02:02:35 +02:00
action: Action::Ground,
..
} if gated => 5,
other => GreedyPolicy::rank(state, seat, other),
CB-WP-0039: a seat that does not regulate — and it changes H1's verdict CB-EV-0030 concluded H1's DARVO arm rate was still 0. That was true of the panel, and the panel was greedy-family throughout. GreedyPolicy ranks `Ground if gated => 100`, so it grounds the instant the stress gate bites, Stress plateaus at 3, and the arm at 5 is unreachable by construction. "H1 does nothing" was really "H1 does nothing to a seat that already manages its Stress" — and H1 was written for the seat that does not. `reactive` is greedy with exactly one preference changed: GROUND demoted below ATTACK. Under it, H1's criteria 1 and 2 are MET — DARVO arms 400 times per cell, ATTACK is chosen 3 times per seat per game. Criterion 3 fails harder: reactive wins nothing at any seat count. The larger finding is about the baseline. Greedy and reactive play IDENTICALLY under baseline, and peak Stress across 3,200 baseline games was 1 — against a starting value of 2. The gate at 4, the DARVO arm at 5 and the Freedom token are all unreachable, and a policy built to be reckless with Stress is indistinguishable from one built to husband it. That is a deeper account of F17 than F17 has. Not raised as a finding yet: it wants the plural panel first. A constant was investigated rather than reported: darvo was exactly 400 in every cell while atk scaled with seats. Six-player final Stress is [5,5,4,4,4,4] every seed — H1-B holds the attacker at 4, below the arm, and pushes its targets to 5. The self-soothe suppresses DARVO in the aggressor and concentrates it in the attacked. The direction follows from H1-B's arithmetic; the number 2 is partly an artifact of reactive's first-legal targeting, and is labelled as such. Still unreviewed: tier L review outstanding on CB-WP-0038, and nothing here reaches ground-game until it runs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 01:08:40 +02:00
}
};
let mut best = 0;
for (i, c) in legal.iter().enumerate() {
if rank(c) > rank(&legal[best]) {
best = i;
}
}
Choice::Command(best)
}
}
CB-REV-0003: round 3, and three of four FATAL came from round 2's fixes 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>
2026-08-08 10:26:25 +02:00
/// The starting Stress, **read off the dealt state** rather than declared.
///
/// It was a `const 2` "named so the peak metric cannot silently disagree
/// with setup" — and nothing compared it to setup, so raising it to 7
/// printed `peak 7` in every cell with no warning (CB-REV-0003 #6).
/// Naming a constant is not checking it.
fn start_stress(state: &GroundState) -> u8 {
state.players.values().map(|p| p.stress).max().unwrap_or(0)
}
CB-REV-0001: the adversarial review, and it was not approvable Thirteen challenges, five FATAL, all five conceded. Nothing had reached ground-game, which is the only reason this is a correction and not a retraction. The worst: `Reactive` was not "greedy with one preference changed". It differed in five, including SpendFreedom — ranked 95 unconditionally against greedy's `95 if gated else 0` — so the seat burned its Freedom token in round one of every game. A second change to the exact mechanism under study, and every number in CB-EV-0031 was measuring it. The pass claimed ADR-0018's one-varying-parameter discipline in its own workplan while violating it. GreedyPolicy::rank is now public and the policy delegates, overriding one match arm, so the control is structurally true. Withdrawn entirely: "H1-B suppresses DARVO in the attacker". Disabling H1-B under the corrected policy changes the arm count by exactly zero. The pass hedged the wrong variable — it disclaimed "the number 2" and defended "the direction", and the direction is what failed. The supporting inference was invalid anyway: final Stress cannot show who armed, because DarvoEnded resets the stage and REVERSE gives its owner -2. Corrected: criterion 1 was failed on the greedy column while the pass's own printed table showed 31-1000 arms in the other columns — the selective-column move, in the file that names it. "Peak Stress was 1" was a maximum over StressSet payloads, not held state (true: 2); the baseline game count was 1,600 not 3,200; and "a reckless policy plays identically to a careful one" is refuted by this repo's own rank-95 policy. Inert controls replaced, each verified red against the reviewer's own mutation: the baseline hash test compared two identically-constructed states (serde(skip) on variant left 57/57 green); the `unchanged:` test checked 3 of 7 entries and passed with SOLVE made illegal; H1-A's ordering and H1-B's OU-cancel path had no test at all. edition-check now covers catalog.yaml and rules_delta.yaml, whose digests CB-WP-0038 claimed and never recorded — the review found it and reported it unverified rather than absent, which was the right call. Still open: H1-B on the DARVO extra-Attack path is untested, regulation.rs still skips setup failures silently, and round-5 arms are counted though they can never act. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 02:02:35 +02:00
CB-REV-0002: round 2, and the corrections were not approvable either Three FATAL, five SERIOUS. The substance of round 1's corrections held — Reactive is genuinely one arm different, the five replacement controls are non-inert, the inert metric is right, the numbers reproduce. What failed were the CLAIMS about them, and two defects the corrections introduced. FATAL 1: the fix for round 1's #11 did not fix it. The assertion was `games + setup_fails == 200`, and a refused setup increments setup_fails while skipping games — so the sum is invariant under exactly the failure it claimed to catch. Injecting setup failures gave exit 0 over 196-game columns. Now asserts games == GAMES, verified to exit 101. FATAL 2: the correction to the selective-column FATAL was itself selective. "81-1000 per cell, baseline AND H1" and "31-1000" twelve lines apart, both taken from the baseline row; under H1 rank-75 arms are 59/0/0/0. Every cell is now printed rather than summarised, and the corrected verdict is the opposite of the one it replaced: under rank-75, H1 REDUCES DARVO arms to zero at 3p and above. FATAL 3: "DARVO arms 2 per seat per game" is 1 per seat per game, exactly, at every band. SERIOUS: the tiebreak oracle asserted only that the winner set CHANGED, so reversing the tiebreak left it green; the #13 defect's impact was claimed and never measured (72,000 games: zero divergences — real in principle, witnessed only by a constructed board); a 29-of-363 citation pointed at a file that did not contain it (round 1's reviewer did report it, and it was never transcribed — the record was wrong, not the number); the harnesses were run by NO GATE, so every published figure came from a manual run of an ungated binary, including the assertion added for #1; and edition-check's sibling handling — added by the last correction — was self-certifying, crashed instead of failing, and counted Markdown lines as coverage. Now discovered on disk, and it found a real gap on its first run: Rules_Text.csv vendored with no digest. Also: "peak Stress held" was dead code kept quiet by `let _ = held;` — the numbers were right by coincidence. make panels is now a registered gate. Round 3 is owed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 09:44:00 +02:00
/// Games per cell. Named once so the assertion and the banner cannot
/// disagree — the banner said "200 games per cell" over 196-game columns.
const GAMES: u32 = 200;
CB-WP-0039: a seat that does not regulate — and it changes H1's verdict CB-EV-0030 concluded H1's DARVO arm rate was still 0. That was true of the panel, and the panel was greedy-family throughout. GreedyPolicy ranks `Ground if gated => 100`, so it grounds the instant the stress gate bites, Stress plateaus at 3, and the arm at 5 is unreachable by construction. "H1 does nothing" was really "H1 does nothing to a seat that already manages its Stress" — and H1 was written for the seat that does not. `reactive` is greedy with exactly one preference changed: GROUND demoted below ATTACK. Under it, H1's criteria 1 and 2 are MET — DARVO arms 400 times per cell, ATTACK is chosen 3 times per seat per game. Criterion 3 fails harder: reactive wins nothing at any seat count. The larger finding is about the baseline. Greedy and reactive play IDENTICALLY under baseline, and peak Stress across 3,200 baseline games was 1 — against a starting value of 2. The gate at 4, the DARVO arm at 5 and the Freedom token are all unreachable, and a policy built to be reckless with Stress is indistinguishable from one built to husband it. That is a deeper account of F17 than F17 has. Not raised as a finding yet: it wants the plural panel first. A constant was investigated rather than reported: darvo was exactly 400 in every cell while atk scaled with seats. Six-player final Stress is [5,5,4,4,4,4] every seed — H1-B holds the attacker at 4, below the arm, and pushes its targets to 5. The self-soothe suppresses DARVO in the aggressor and concentrates it in the attacked. The direction follows from H1-B's arithmetic; the number 2 is partly an artifact of reactive's first-legal targeting, and is labelled as such. Still unreviewed: tier L review outstanding on CB-WP-0038, and nothing here reaches ground-game until it runs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 01:08:40 +02:00
struct Cell {
games: u32,
won: u32,
atk: u32,
darvo: u32,
peak_stress: u8,
Close the three items CB-REV-0001 left open H1-B on the DARVO extra Attack: the delta says the extra Attack shares the Attack resolution "so it can self-soothe too if Stress >= 4". CB-WP-0038 asserted it because the code shares resolve_attack; nothing tested it, and CB-EV-0031's withdrawn mechanism story ran through that exact path. Now tested and mutation-verified. Round-5 pressure did not reach the score, and this was a real defect rather than a reporting one. end_round_events scored from `self` while H1-A's pressure went into `work`, and score() reads Stress for the GR-E03 and GR-E04 tiebreaks — so the final round's pressure was invisible to the two modes CB-EV-0030 reports on. Fixed. The test uses the case that bites: uniform pressure preserves an ordering, so it takes the clamp at 5 to collapse a gap and change who wins. Inert arms reported separately: a DARVO arm at the End of Round 5 can never advance a stage, and criterion 1 is about DARVO mattering. 29 of 363 at 2p, none above — matching the reviewer's independent figure, so criterion 1 stands as met. That fix produced one more wrong-subject error, caught before reporting: the first inert-arm metric tested `g.rounds >= 5`, a property of the GAME rather than the EVENT, so it marked every arm in every completed game inert and briefly read as "criterion 1 fails after all". An arm is inert when no RoundEnded follows it. regulation.rs no longer skips setup failures silently: they are counted, and a short cell fails an assertion rather than printing a number a reader has to notice — which is the credit CB-EV-0030 §3 took and half earned. All thirteen challenges closed. Re-review is owed before any of this travels: the corrections were made by the author of the errors. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 02:14:19 +02:00
/// Setups the engine refused. **Counted, not skipped** (CB-REV-0001
/// #11): CB-EV-0030 §3 credited this pass with fixing silent skips
/// and only the `play` path was instrumented.
setup_fails: u32,
/// DARVO arms at the End of Round 5. `GameEnded` is pushed
/// immediately after, so the sequence never advances a stage — the
/// arm is real and can do nothing. Reported separately, because
/// ground-game's criterion 1 is asking about DARVO *mattering*.
inert_arms: u32,
CB-REV-0003: round 3, and three of four FATAL came from round 2's fixes 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>
2026-08-08 10:26:25 +02:00
/// Games that reached an outcome over the full five rounds.
///
/// **`games` counts `play` returning `Ok`, which is not the claim.**
/// Stopping the engine after one round produced 200 games, all-zero
/// columns and exit 0 — the exact signature CB-EV-0030 §3 says the
/// instrumentation distinguishes from a real result.
played: u32,
CB-WP-0039: a seat that does not regulate — and it changes H1's verdict CB-EV-0030 concluded H1's DARVO arm rate was still 0. That was true of the panel, and the panel was greedy-family throughout. GreedyPolicy ranks `Ground if gated => 100`, so it grounds the instant the stress gate bites, Stress plateaus at 3, and the arm at 5 is unreachable by construction. "H1 does nothing" was really "H1 does nothing to a seat that already manages its Stress" — and H1 was written for the seat that does not. `reactive` is greedy with exactly one preference changed: GROUND demoted below ATTACK. Under it, H1's criteria 1 and 2 are MET — DARVO arms 400 times per cell, ATTACK is chosen 3 times per seat per game. Criterion 3 fails harder: reactive wins nothing at any seat count. The larger finding is about the baseline. Greedy and reactive play IDENTICALLY under baseline, and peak Stress across 3,200 baseline games was 1 — against a starting value of 2. The gate at 4, the DARVO arm at 5 and the Freedom token are all unreachable, and a policy built to be reckless with Stress is indistinguishable from one built to husband it. That is a deeper account of F17 than F17 has. Not raised as a finding yet: it wants the plural panel first. A constant was investigated rather than reported: darvo was exactly 400 in every cell while atk scaled with seats. Six-player final Stress is [5,5,4,4,4,4] every seed — H1-B holds the attacker at 4, below the arm, and pushes its targets to 5. The self-soothe suppresses DARVO in the aggressor and concentrates it in the attacked. The direction follows from H1-B's arithmetic; the number 2 is partly an artifact of reactive's first-legal targeting, and is labelled as such. Still unreviewed: tier L review outstanding on CB-WP-0038, and nothing here reaches ground-game until it runs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 01:08:40 +02:00
}
fn sweep(mode: ScoringMode, variant: Variant, players: u8, reactive: bool) -> Cell {
let mut c = Cell {
games: 0,
won: 0,
atk: 0,
darvo: 0,
peak_stress: 0,
Close the three items CB-REV-0001 left open H1-B on the DARVO extra Attack: the delta says the extra Attack shares the Attack resolution "so it can self-soothe too if Stress >= 4". CB-WP-0038 asserted it because the code shares resolve_attack; nothing tested it, and CB-EV-0031's withdrawn mechanism story ran through that exact path. Now tested and mutation-verified. Round-5 pressure did not reach the score, and this was a real defect rather than a reporting one. end_round_events scored from `self` while H1-A's pressure went into `work`, and score() reads Stress for the GR-E03 and GR-E04 tiebreaks — so the final round's pressure was invisible to the two modes CB-EV-0030 reports on. Fixed. The test uses the case that bites: uniform pressure preserves an ordering, so it takes the clamp at 5 to collapse a gap and change who wins. Inert arms reported separately: a DARVO arm at the End of Round 5 can never advance a stage, and criterion 1 is about DARVO mattering. 29 of 363 at 2p, none above — matching the reviewer's independent figure, so criterion 1 stands as met. That fix produced one more wrong-subject error, caught before reporting: the first inert-arm metric tested `g.rounds >= 5`, a property of the GAME rather than the EVENT, so it marked every arm in every completed game inert and briefly read as "criterion 1 fails after all". An arm is inert when no RoundEnded follows it. regulation.rs no longer skips setup failures silently: they are counted, and a short cell fails an assertion rather than printing a number a reader has to notice — which is the credit CB-EV-0030 §3 took and half earned. All thirteen challenges closed. Re-review is owed before any of this travels: the corrections were made by the author of the errors. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 02:14:19 +02:00
setup_fails: 0,
inert_arms: 0,
CB-REV-0003: round 3, and three of four FATAL came from round 2's fixes 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>
2026-08-08 10:26:25 +02:00
played: 0,
CB-WP-0039: a seat that does not regulate — and it changes H1's verdict CB-EV-0030 concluded H1's DARVO arm rate was still 0. That was true of the panel, and the panel was greedy-family throughout. GreedyPolicy ranks `Ground if gated => 100`, so it grounds the instant the stress gate bites, Stress plateaus at 3, and the arm at 5 is unreachable by construction. "H1 does nothing" was really "H1 does nothing to a seat that already manages its Stress" — and H1 was written for the seat that does not. `reactive` is greedy with exactly one preference changed: GROUND demoted below ATTACK. Under it, H1's criteria 1 and 2 are MET — DARVO arms 400 times per cell, ATTACK is chosen 3 times per seat per game. Criterion 3 fails harder: reactive wins nothing at any seat count. The larger finding is about the baseline. Greedy and reactive play IDENTICALLY under baseline, and peak Stress across 3,200 baseline games was 1 — against a starting value of 2. The gate at 4, the DARVO arm at 5 and the Freedom token are all unreachable, and a policy built to be reckless with Stress is indistinguishable from one built to husband it. That is a deeper account of F17 than F17 has. Not raised as a finding yet: it wants the plural panel first. A constant was investigated rather than reported: darvo was exactly 400 in every cell while atk scaled with seats. Six-player final Stress is [5,5,4,4,4,4] every seed — H1-B holds the attacker at 4, below the arm, and pushes its targets to 5. The self-soothe suppresses DARVO in the aggressor and concentrates it in the attacked. The direction follows from H1-B's arithmetic; the number 2 is partly an artifact of reactive's first-legal targeting, and is labelled as such. Still unreviewed: tier L review outstanding on CB-WP-0038, and nothing here reaches ground-game until it runs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 01:08:40 +02:00
};
CB-REV-0002: round 2, and the corrections were not approvable either Three FATAL, five SERIOUS. The substance of round 1's corrections held — Reactive is genuinely one arm different, the five replacement controls are non-inert, the inert metric is right, the numbers reproduce. What failed were the CLAIMS about them, and two defects the corrections introduced. FATAL 1: the fix for round 1's #11 did not fix it. The assertion was `games + setup_fails == 200`, and a refused setup increments setup_fails while skipping games — so the sum is invariant under exactly the failure it claimed to catch. Injecting setup failures gave exit 0 over 196-game columns. Now asserts games == GAMES, verified to exit 101. FATAL 2: the correction to the selective-column FATAL was itself selective. "81-1000 per cell, baseline AND H1" and "31-1000" twelve lines apart, both taken from the baseline row; under H1 rank-75 arms are 59/0/0/0. Every cell is now printed rather than summarised, and the corrected verdict is the opposite of the one it replaced: under rank-75, H1 REDUCES DARVO arms to zero at 3p and above. FATAL 3: "DARVO arms 2 per seat per game" is 1 per seat per game, exactly, at every band. SERIOUS: the tiebreak oracle asserted only that the winner set CHANGED, so reversing the tiebreak left it green; the #13 defect's impact was claimed and never measured (72,000 games: zero divergences — real in principle, witnessed only by a constructed board); a 29-of-363 citation pointed at a file that did not contain it (round 1's reviewer did report it, and it was never transcribed — the record was wrong, not the number); the harnesses were run by NO GATE, so every published figure came from a manual run of an ungated binary, including the assertion added for #1; and edition-check's sibling handling — added by the last correction — was self-certifying, crashed instead of failing, and counted Markdown lines as coverage. Now discovered on disk, and it found a real gap on its first run: Rules_Text.csv vendored with no digest. Also: "peak Stress held" was dead code kept quiet by `let _ = held;` — the numbers were right by coincidence. make panels is now a registered gate. Round 3 is owed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 09:44:00 +02:00
for seed in 0..GAMES as u64 {
CB-WP-0039: a seat that does not regulate — and it changes H1's verdict CB-EV-0030 concluded H1's DARVO arm rate was still 0. That was true of the panel, and the panel was greedy-family throughout. GreedyPolicy ranks `Ground if gated => 100`, so it grounds the instant the stress gate bites, Stress plateaus at 3, and the arm at 5 is unreachable by construction. "H1 does nothing" was really "H1 does nothing to a seat that already manages its Stress" — and H1 was written for the seat that does not. `reactive` is greedy with exactly one preference changed: GROUND demoted below ATTACK. Under it, H1's criteria 1 and 2 are MET — DARVO arms 400 times per cell, ATTACK is chosen 3 times per seat per game. Criterion 3 fails harder: reactive wins nothing at any seat count. The larger finding is about the baseline. Greedy and reactive play IDENTICALLY under baseline, and peak Stress across 3,200 baseline games was 1 — against a starting value of 2. The gate at 4, the DARVO arm at 5 and the Freedom token are all unreachable, and a policy built to be reckless with Stress is indistinguishable from one built to husband it. That is a deeper account of F17 than F17 has. Not raised as a finding yet: it wants the plural panel first. A constant was investigated rather than reported: darvo was exactly 400 in every cell while atk scaled with seats. Six-player final Stress is [5,5,4,4,4,4] every seed — H1-B holds the attacker at 4, below the arm, and pushes its targets to 5. The self-soothe suppresses DARVO in the aggressor and concentrates it in the attacked. The direction follows from H1-B's arithmetic; the number 2 is partly an artifact of reactive's first-legal targeting, and is labelled as such. Still unreviewed: tier L review outstanding on CB-WP-0038, and nothing here reaches ground-game until it runs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 01:08:40 +02:00
let Ok(mut st) = GroundState::setup(
&Setup {
players,
preset: format!("standard-{players}p"),
patch: Default::default(),
},
seed,
) else {
Close the three items CB-REV-0001 left open H1-B on the DARVO extra Attack: the delta says the extra Attack shares the Attack resolution "so it can self-soothe too if Stress >= 4". CB-WP-0038 asserted it because the code shares resolve_attack; nothing tested it, and CB-EV-0031's withdrawn mechanism story ran through that exact path. Now tested and mutation-verified. Round-5 pressure did not reach the score, and this was a real defect rather than a reporting one. end_round_events scored from `self` while H1-A's pressure went into `work`, and score() reads Stress for the GR-E03 and GR-E04 tiebreaks — so the final round's pressure was invisible to the two modes CB-EV-0030 reports on. Fixed. The test uses the case that bites: uniform pressure preserves an ordering, so it takes the clamp at 5 to collapse a gap and change who wins. Inert arms reported separately: a DARVO arm at the End of Round 5 can never advance a stage, and criterion 1 is about DARVO mattering. 29 of 363 at 2p, none above — matching the reviewer's independent figure, so criterion 1 stands as met. That fix produced one more wrong-subject error, caught before reporting: the first inert-arm metric tested `g.rounds >= 5`, a property of the GAME rather than the EVENT, so it marked every arm in every completed game inert and briefly read as "criterion 1 fails after all". An arm is inert when no RoundEnded follows it. regulation.rs no longer skips setup failures silently: they are counted, and a short cell fails an assertion rather than printing a number a reader has to notice — which is the credit CB-EV-0030 §3 took and half earned. All thirteen challenges closed. Re-review is owed before any of this travels: the corrections were made by the author of the errors. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 02:14:19 +02:00
c.setup_fails += 1;
CB-WP-0039: a seat that does not regulate — and it changes H1's verdict CB-EV-0030 concluded H1's DARVO arm rate was still 0. That was true of the panel, and the panel was greedy-family throughout. GreedyPolicy ranks `Ground if gated => 100`, so it grounds the instant the stress gate bites, Stress plateaus at 3, and the arm at 5 is unreachable by construction. "H1 does nothing" was really "H1 does nothing to a seat that already manages its Stress" — and H1 was written for the seat that does not. `reactive` is greedy with exactly one preference changed: GROUND demoted below ATTACK. Under it, H1's criteria 1 and 2 are MET — DARVO arms 400 times per cell, ATTACK is chosen 3 times per seat per game. Criterion 3 fails harder: reactive wins nothing at any seat count. The larger finding is about the baseline. Greedy and reactive play IDENTICALLY under baseline, and peak Stress across 3,200 baseline games was 1 — against a starting value of 2. The gate at 4, the DARVO arm at 5 and the Freedom token are all unreachable, and a policy built to be reckless with Stress is indistinguishable from one built to husband it. That is a deeper account of F17 than F17 has. Not raised as a finding yet: it wants the plural panel first. A constant was investigated rather than reported: darvo was exactly 400 in every cell while atk scaled with seats. Six-player final Stress is [5,5,4,4,4,4] every seed — H1-B holds the attacker at 4, below the arm, and pushes its targets to 5. The self-soothe suppresses DARVO in the aggressor and concentrates it in the attacked. The direction follows from H1-B's arithmetic; the number 2 is partly an artifact of reactive's first-legal targeting, and is labelled as such. Still unreviewed: tier L review outstanding on CB-WP-0038, and nothing here reaches ground-game until it runs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 01:08:40 +02:00
continue;
};
st.mode = mode;
st.variant = variant;
CB-REV-0003: round 3, and three of four FATAL came from round 2's fixes 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>
2026-08-08 10:26:25 +02:00
// The dealt state, kept so the peak metric can read the real
// starting Stress rather than trust a constant.
let started = st.clone();
CB-WP-0039: a seat that does not regulate — and it changes H1's verdict CB-EV-0030 concluded H1's DARVO arm rate was still 0. That was true of the panel, and the panel was greedy-family throughout. GreedyPolicy ranks `Ground if gated => 100`, so it grounds the instant the stress gate bites, Stress plateaus at 3, and the arm at 5 is unreachable by construction. "H1 does nothing" was really "H1 does nothing to a seat that already manages its Stress" — and H1 was written for the seat that does not. `reactive` is greedy with exactly one preference changed: GROUND demoted below ATTACK. Under it, H1's criteria 1 and 2 are MET — DARVO arms 400 times per cell, ATTACK is chosen 3 times per seat per game. Criterion 3 fails harder: reactive wins nothing at any seat count. The larger finding is about the baseline. Greedy and reactive play IDENTICALLY under baseline, and peak Stress across 3,200 baseline games was 1 — against a starting value of 2. The gate at 4, the DARVO arm at 5 and the Freedom token are all unreachable, and a policy built to be reckless with Stress is indistinguishable from one built to husband it. That is a deeper account of F17 than F17 has. Not raised as a finding yet: it wants the plural panel first. A constant was investigated rather than reported: darvo was exactly 400 in every cell while atk scaled with seats. Six-player final Stress is [5,5,4,4,4,4] every seed — H1-B holds the attacker at 4, below the arm, and pushes its targets to 5. The self-soothe suppresses DARVO in the aggressor and concentrates it in the attacked. The direction follows from H1-B's arithmetic; the number 2 is partly an artifact of reactive's first-legal targeting, and is labelled as such. Still unreviewed: tier L review outstanding on CB-WP-0038, and nothing here reaches ground-game until it runs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 01:08:40 +02:00
let mut ps: Vec<Box<dyn Policy>> = (0..players)
.map(|_| {
if reactive {
Box::new(Reactive) as Box<dyn Policy>
} else {
Box::new(GreedyPolicy) as Box<dyn Policy>
}
})
.collect();
// A refused game is not a lost game (CB-EV-0030 §3).
let g = match play(st, &mut ps) {
Ok(g) => g,
Err(e) => {
eprintln!(" !! {players}p seed {seed}: {e:?}");
continue;
}
};
c.games += 1;
CB-REV-0003: round 3, and three of four FATAL came from round 2's fixes 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>
2026-08-08 10:26:25 +02:00
// A game that RAN is not a game that was PLAYED (CB-REV-0003 #2).
if g.state.outcome.is_some() && g.rounds == 5 {
c.played += 1;
}
CB-WP-0039: a seat that does not regulate — and it changes H1's verdict CB-EV-0030 concluded H1's DARVO arm rate was still 0. That was true of the panel, and the panel was greedy-family throughout. GreedyPolicy ranks `Ground if gated => 100`, so it grounds the instant the stress gate bites, Stress plateaus at 3, and the arm at 5 is unreachable by construction. "H1 does nothing" was really "H1 does nothing to a seat that already manages its Stress" — and H1 was written for the seat that does not. `reactive` is greedy with exactly one preference changed: GROUND demoted below ATTACK. Under it, H1's criteria 1 and 2 are MET — DARVO arms 400 times per cell, ATTACK is chosen 3 times per seat per game. Criterion 3 fails harder: reactive wins nothing at any seat count. The larger finding is about the baseline. Greedy and reactive play IDENTICALLY under baseline, and peak Stress across 3,200 baseline games was 1 — against a starting value of 2. The gate at 4, the DARVO arm at 5 and the Freedom token are all unreachable, and a policy built to be reckless with Stress is indistinguishable from one built to husband it. That is a deeper account of F17 than F17 has. Not raised as a finding yet: it wants the plural panel first. A constant was investigated rather than reported: darvo was exactly 400 in every cell while atk scaled with seats. Six-player final Stress is [5,5,4,4,4,4] every seed — H1-B holds the attacker at 4, below the arm, and pushes its targets to 5. The self-soothe suppresses DARVO in the aggressor and concentrates it in the attacked. The direction follows from H1-B's arithmetic; the number 2 is partly an artifact of reactive's first-legal targeting, and is labelled as such. Still unreviewed: tier L review outstanding on CB-WP-0038, and nothing here reaches ground-game until it runs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 01:08:40 +02:00
if g.state.outcome.as_ref().is_some_and(|o| o.group_success) {
c.won += 1;
}
for (_, cmd) in &g.steps {
if let GroundCommand::SelectAction {
action: Action::Attack,
..
} = cmd
{
c.atk += 1;
}
}
CB-REV-0003: round 3, and three of four FATAL came from round 2's fixes 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>
2026-08-08 10:26:25 +02:00
// Peak Stress **held**.
CB-REV-0001: the adversarial review, and it was not approvable Thirteen challenges, five FATAL, all five conceded. Nothing had reached ground-game, which is the only reason this is a correction and not a retraction. The worst: `Reactive` was not "greedy with one preference changed". It differed in five, including SpendFreedom — ranked 95 unconditionally against greedy's `95 if gated else 0` — so the seat burned its Freedom token in round one of every game. A second change to the exact mechanism under study, and every number in CB-EV-0031 was measuring it. The pass claimed ADR-0018's one-varying-parameter discipline in its own workplan while violating it. GreedyPolicy::rank is now public and the policy delegates, overriding one match arm, so the control is structurally true. Withdrawn entirely: "H1-B suppresses DARVO in the attacker". Disabling H1-B under the corrected policy changes the arm count by exactly zero. The pass hedged the wrong variable — it disclaimed "the number 2" and defended "the direction", and the direction is what failed. The supporting inference was invalid anyway: final Stress cannot show who armed, because DarvoEnded resets the stage and REVERSE gives its owner -2. Corrected: criterion 1 was failed on the greedy column while the pass's own printed table showed 31-1000 arms in the other columns — the selective-column move, in the file that names it. "Peak Stress was 1" was a maximum over StressSet payloads, not held state (true: 2); the baseline game count was 1,600 not 3,200; and "a reckless policy plays identically to a careful one" is refuted by this repo's own rank-95 policy. Inert controls replaced, each verified red against the reviewer's own mutation: the baseline hash test compared two identically-constructed states (serde(skip) on variant left 57/57 green); the `unchanged:` test checked 3 of 7 entries and passed with SOLVE made illegal; H1-A's ordering and H1-B's OU-cancel path had no test at all. edition-check now covers catalog.yaml and rules_delta.yaml, whose digests CB-WP-0038 claimed and never recorded — the review found it and reported it unverified rather than absent, which was the right call. Still open: H1-B on the DARVO extra-Attack path is untested, regulation.rs still skips setup failures silently, and round-5 arms are counted though they can never act. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 02:02:35 +02:00
//
CB-REV-0003: round 3, and three of four FATAL came from round 2's fixes 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>
2026-08-08 10:26:25 +02:00
// The original took a maximum over `StressSet` PAYLOADS, and the
// starting value is written by `setup` and never by an event — so
// a table that sat at 2 all game reported 1.
//
// **The first correction did not change the number it computes**
// (CB-REV-0003 #5): `held`'s values are exactly
// `{start} {payloads}`, so with the floor applied
// `peak_held ≡ max(start, peak_payload)` for every possible input,
// and the comment claiming a change of subject was false of the
// new code too. The real fix is that `start` is now read off the
// dealt state instead of asserted by a constant.
Close the three items CB-REV-0001 left open H1-B on the DARVO extra Attack: the delta says the extra Attack shares the Attack resolution "so it can self-soothe too if Stress >= 4". CB-WP-0038 asserted it because the code shares resolve_attack; nothing tested it, and CB-EV-0031's withdrawn mechanism story ran through that exact path. Now tested and mutation-verified. Round-5 pressure did not reach the score, and this was a real defect rather than a reporting one. end_round_events scored from `self` while H1-A's pressure went into `work`, and score() reads Stress for the GR-E03 and GR-E04 tiebreaks — so the final round's pressure was invisible to the two modes CB-EV-0030 reports on. Fixed. The test uses the case that bites: uniform pressure preserves an ordering, so it takes the clamp at 5 to collapse a gap and change who wins. Inert arms reported separately: a DARVO arm at the End of Round 5 can never advance a stage, and criterion 1 is about DARVO mattering. 29 of 363 at 2p, none above — matching the reviewer's independent figure, so criterion 1 stands as met. That fix produced one more wrong-subject error, caught before reporting: the first inert-arm metric tested `g.rounds >= 5`, a property of the GAME rather than the EVENT, so it marked every arm in every completed game inert and briefly read as "criterion 1 fails after all". An arm is inert when no RoundEnded follows it. regulation.rs no longer skips setup failures silently: they are counted, and a short cell fails an assertion rather than printing a number a reader has to notice — which is the credit CB-EV-0030 §3 took and half earned. All thirteen challenges closed. Re-review is owed before any of this travels: the corrections were made by the author of the errors. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 02:14:19 +02:00
// An arm is inert when NO `RoundEnded` follows it: the game
// ended in the same End step, so the sequence never advances a
// stage. `g.rounds >= 5` is a property of the GAME, not of the
// event, and using it marked every arm in every completed game
// as inert — which is how a metric ends up equal to the thing it
// was supposed to be a subset of.
let last_round_ended = g
.events
.iter()
.rposition(|e| matches!(e, games_ground::GroundEvent::RoundEnded { .. }));
CB-REV-0003: round 3, and three of four FATAL came from round 2's fixes 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>
2026-08-08 10:26:25 +02:00
let start = start_stress(&started);
CB-REV-0001: the adversarial review, and it was not approvable Thirteen challenges, five FATAL, all five conceded. Nothing had reached ground-game, which is the only reason this is a correction and not a retraction. The worst: `Reactive` was not "greedy with one preference changed". It differed in five, including SpendFreedom — ranked 95 unconditionally against greedy's `95 if gated else 0` — so the seat burned its Freedom token in round one of every game. A second change to the exact mechanism under study, and every number in CB-EV-0031 was measuring it. The pass claimed ADR-0018's one-varying-parameter discipline in its own workplan while violating it. GreedyPolicy::rank is now public and the policy delegates, overriding one match arm, so the control is structurally true. Withdrawn entirely: "H1-B suppresses DARVO in the attacker". Disabling H1-B under the corrected policy changes the arm count by exactly zero. The pass hedged the wrong variable — it disclaimed "the number 2" and defended "the direction", and the direction is what failed. The supporting inference was invalid anyway: final Stress cannot show who armed, because DarvoEnded resets the stage and REVERSE gives its owner -2. Corrected: criterion 1 was failed on the greedy column while the pass's own printed table showed 31-1000 arms in the other columns — the selective-column move, in the file that names it. "Peak Stress was 1" was a maximum over StressSet payloads, not held state (true: 2); the baseline game count was 1,600 not 3,200; and "a reckless policy plays identically to a careful one" is refuted by this repo's own rank-95 policy. Inert controls replaced, each verified red against the reviewer's own mutation: the baseline hash test compared two identically-constructed states (serde(skip) on variant left 57/57 green); the `unchanged:` test checked 3 of 7 entries and passed with SOLVE made illegal; H1-A's ordering and H1-B's OU-cancel path had no test at all. edition-check now covers catalog.yaml and rules_delta.yaml, whose digests CB-WP-0038 claimed and never recorded — the review found it and reported it unverified rather than absent, which was the right call. Still open: H1-B on the DARVO extra-Attack path is untested, regulation.rs still skips setup failures silently, and round-5 arms are counted though they can never act. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 02:02:35 +02:00
let mut held: std::collections::BTreeMap<PlayerId, u8> =
CB-REV-0003: round 3, and three of four FATAL came from round 2's fixes 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>
2026-08-08 10:26:25 +02:00
g.state.players.keys().map(|s| (*s, start)).collect();
c.peak_stress = c.peak_stress.max(start);
Close the three items CB-REV-0001 left open H1-B on the DARVO extra Attack: the delta says the extra Attack shares the Attack resolution "so it can self-soothe too if Stress >= 4". CB-WP-0038 asserted it because the code shares resolve_attack; nothing tested it, and CB-EV-0031's withdrawn mechanism story ran through that exact path. Now tested and mutation-verified. Round-5 pressure did not reach the score, and this was a real defect rather than a reporting one. end_round_events scored from `self` while H1-A's pressure went into `work`, and score() reads Stress for the GR-E03 and GR-E04 tiebreaks — so the final round's pressure was invisible to the two modes CB-EV-0030 reports on. Fixed. The test uses the case that bites: uniform pressure preserves an ordering, so it takes the clamp at 5 to collapse a gap and change who wins. Inert arms reported separately: a DARVO arm at the End of Round 5 can never advance a stage, and criterion 1 is about DARVO mattering. 29 of 363 at 2p, none above — matching the reviewer's independent figure, so criterion 1 stands as met. That fix produced one more wrong-subject error, caught before reporting: the first inert-arm metric tested `g.rounds >= 5`, a property of the GAME rather than the EVENT, so it marked every arm in every completed game inert and briefly read as "criterion 1 fails after all". An arm is inert when no RoundEnded follows it. regulation.rs no longer skips setup failures silently: they are counted, and a short cell fails an assertion rather than printing a number a reader has to notice — which is the credit CB-EV-0030 §3 took and half earned. All thirteen challenges closed. Re-review is owed before any of this travels: the corrections were made by the author of the errors. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 02:14:19 +02:00
for (i, e) in g.events.iter().enumerate() {
CB-WP-0039: a seat that does not regulate — and it changes H1's verdict CB-EV-0030 concluded H1's DARVO arm rate was still 0. That was true of the panel, and the panel was greedy-family throughout. GreedyPolicy ranks `Ground if gated => 100`, so it grounds the instant the stress gate bites, Stress plateaus at 3, and the arm at 5 is unreachable by construction. "H1 does nothing" was really "H1 does nothing to a seat that already manages its Stress" — and H1 was written for the seat that does not. `reactive` is greedy with exactly one preference changed: GROUND demoted below ATTACK. Under it, H1's criteria 1 and 2 are MET — DARVO arms 400 times per cell, ATTACK is chosen 3 times per seat per game. Criterion 3 fails harder: reactive wins nothing at any seat count. The larger finding is about the baseline. Greedy and reactive play IDENTICALLY under baseline, and peak Stress across 3,200 baseline games was 1 — against a starting value of 2. The gate at 4, the DARVO arm at 5 and the Freedom token are all unreachable, and a policy built to be reckless with Stress is indistinguishable from one built to husband it. That is a deeper account of F17 than F17 has. Not raised as a finding yet: it wants the plural panel first. A constant was investigated rather than reported: darvo was exactly 400 in every cell while atk scaled with seats. Six-player final Stress is [5,5,4,4,4,4] every seed — H1-B holds the attacker at 4, below the arm, and pushes its targets to 5. The self-soothe suppresses DARVO in the aggressor and concentrates it in the attacked. The direction follows from H1-B's arithmetic; the number 2 is partly an artifact of reactive's first-legal targeting, and is labelled as such. Still unreviewed: tier L review outstanding on CB-WP-0038, and nothing here reaches ground-game until it runs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 01:08:40 +02:00
if matches!(e, games_ground::GroundEvent::DarvoTriggered { .. }) {
c.darvo += 1;
Close the three items CB-REV-0001 left open H1-B on the DARVO extra Attack: the delta says the extra Attack shares the Attack resolution "so it can self-soothe too if Stress >= 4". CB-WP-0038 asserted it because the code shares resolve_attack; nothing tested it, and CB-EV-0031's withdrawn mechanism story ran through that exact path. Now tested and mutation-verified. Round-5 pressure did not reach the score, and this was a real defect rather than a reporting one. end_round_events scored from `self` while H1-A's pressure went into `work`, and score() reads Stress for the GR-E03 and GR-E04 tiebreaks — so the final round's pressure was invisible to the two modes CB-EV-0030 reports on. Fixed. The test uses the case that bites: uniform pressure preserves an ordering, so it takes the clamp at 5 to collapse a gap and change who wins. Inert arms reported separately: a DARVO arm at the End of Round 5 can never advance a stage, and criterion 1 is about DARVO mattering. 29 of 363 at 2p, none above — matching the reviewer's independent figure, so criterion 1 stands as met. That fix produced one more wrong-subject error, caught before reporting: the first inert-arm metric tested `g.rounds >= 5`, a property of the GAME rather than the EVENT, so it marked every arm in every completed game inert and briefly read as "criterion 1 fails after all". An arm is inert when no RoundEnded follows it. regulation.rs no longer skips setup failures silently: they are counted, and a short cell fails an assertion rather than printing a number a reader has to notice — which is the credit CB-EV-0030 §3 took and half earned. All thirteen challenges closed. Re-review is owed before any of this travels: the corrections were made by the author of the errors. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 02:14:19 +02:00
if last_round_ended.is_none_or(|last| i > last) {
c.inert_arms += 1;
}
CB-WP-0039: a seat that does not regulate — and it changes H1's verdict CB-EV-0030 concluded H1's DARVO arm rate was still 0. That was true of the panel, and the panel was greedy-family throughout. GreedyPolicy ranks `Ground if gated => 100`, so it grounds the instant the stress gate bites, Stress plateaus at 3, and the arm at 5 is unreachable by construction. "H1 does nothing" was really "H1 does nothing to a seat that already manages its Stress" — and H1 was written for the seat that does not. `reactive` is greedy with exactly one preference changed: GROUND demoted below ATTACK. Under it, H1's criteria 1 and 2 are MET — DARVO arms 400 times per cell, ATTACK is chosen 3 times per seat per game. Criterion 3 fails harder: reactive wins nothing at any seat count. The larger finding is about the baseline. Greedy and reactive play IDENTICALLY under baseline, and peak Stress across 3,200 baseline games was 1 — against a starting value of 2. The gate at 4, the DARVO arm at 5 and the Freedom token are all unreachable, and a policy built to be reckless with Stress is indistinguishable from one built to husband it. That is a deeper account of F17 than F17 has. Not raised as a finding yet: it wants the plural panel first. A constant was investigated rather than reported: darvo was exactly 400 in every cell while atk scaled with seats. Six-player final Stress is [5,5,4,4,4,4] every seed — H1-B holds the attacker at 4, below the arm, and pushes its targets to 5. The self-soothe suppresses DARVO in the aggressor and concentrates it in the attacked. The direction follows from H1-B's arithmetic; the number 2 is partly an artifact of reactive's first-legal targeting, and is labelled as such. Still unreviewed: tier L review outstanding on CB-WP-0038, and nothing here reaches ground-game until it runs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 01:08:40 +02:00
}
CB-REV-0001: the adversarial review, and it was not approvable Thirteen challenges, five FATAL, all five conceded. Nothing had reached ground-game, which is the only reason this is a correction and not a retraction. The worst: `Reactive` was not "greedy with one preference changed". It differed in five, including SpendFreedom — ranked 95 unconditionally against greedy's `95 if gated else 0` — so the seat burned its Freedom token in round one of every game. A second change to the exact mechanism under study, and every number in CB-EV-0031 was measuring it. The pass claimed ADR-0018's one-varying-parameter discipline in its own workplan while violating it. GreedyPolicy::rank is now public and the policy delegates, overriding one match arm, so the control is structurally true. Withdrawn entirely: "H1-B suppresses DARVO in the attacker". Disabling H1-B under the corrected policy changes the arm count by exactly zero. The pass hedged the wrong variable — it disclaimed "the number 2" and defended "the direction", and the direction is what failed. The supporting inference was invalid anyway: final Stress cannot show who armed, because DarvoEnded resets the stage and REVERSE gives its owner -2. Corrected: criterion 1 was failed on the greedy column while the pass's own printed table showed 31-1000 arms in the other columns — the selective-column move, in the file that names it. "Peak Stress was 1" was a maximum over StressSet payloads, not held state (true: 2); the baseline game count was 1,600 not 3,200; and "a reckless policy plays identically to a careful one" is refuted by this repo's own rank-95 policy. Inert controls replaced, each verified red against the reviewer's own mutation: the baseline hash test compared two identically-constructed states (serde(skip) on variant left 57/57 green); the `unchanged:` test checked 3 of 7 entries and passed with SOLVE made illegal; H1-A's ordering and H1-B's OU-cancel path had no test at all. edition-check now covers catalog.yaml and rules_delta.yaml, whose digests CB-WP-0038 claimed and never recorded — the review found it and reported it unverified rather than absent, which was the right call. Still open: H1-B on the DARVO extra-Attack path is untested, regulation.rs still skips setup failures silently, and round-5 arms are counted though they can never act. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 02:02:35 +02:00
if let games_ground::GroundEvent::StressSet { player, stress } = e {
held.insert(*player, *stress);
CB-WP-0039: a seat that does not regulate — and it changes H1's verdict CB-EV-0030 concluded H1's DARVO arm rate was still 0. That was true of the panel, and the panel was greedy-family throughout. GreedyPolicy ranks `Ground if gated => 100`, so it grounds the instant the stress gate bites, Stress plateaus at 3, and the arm at 5 is unreachable by construction. "H1 does nothing" was really "H1 does nothing to a seat that already manages its Stress" — and H1 was written for the seat that does not. `reactive` is greedy with exactly one preference changed: GROUND demoted below ATTACK. Under it, H1's criteria 1 and 2 are MET — DARVO arms 400 times per cell, ATTACK is chosen 3 times per seat per game. Criterion 3 fails harder: reactive wins nothing at any seat count. The larger finding is about the baseline. Greedy and reactive play IDENTICALLY under baseline, and peak Stress across 3,200 baseline games was 1 — against a starting value of 2. The gate at 4, the DARVO arm at 5 and the Freedom token are all unreachable, and a policy built to be reckless with Stress is indistinguishable from one built to husband it. That is a deeper account of F17 than F17 has. Not raised as a finding yet: it wants the plural panel first. A constant was investigated rather than reported: darvo was exactly 400 in every cell while atk scaled with seats. Six-player final Stress is [5,5,4,4,4,4] every seed — H1-B holds the attacker at 4, below the arm, and pushes its targets to 5. The self-soothe suppresses DARVO in the aggressor and concentrates it in the attacked. The direction follows from H1-B's arithmetic; the number 2 is partly an artifact of reactive's first-legal targeting, and is labelled as such. Still unreviewed: tier L review outstanding on CB-WP-0038, and nothing here reaches ground-game until it runs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 01:08:40 +02:00
}
CB-REV-0002: round 2, and the corrections were not approvable either Three FATAL, five SERIOUS. The substance of round 1's corrections held — Reactive is genuinely one arm different, the five replacement controls are non-inert, the inert metric is right, the numbers reproduce. What failed were the CLAIMS about them, and two defects the corrections introduced. FATAL 1: the fix for round 1's #11 did not fix it. The assertion was `games + setup_fails == 200`, and a refused setup increments setup_fails while skipping games — so the sum is invariant under exactly the failure it claimed to catch. Injecting setup failures gave exit 0 over 196-game columns. Now asserts games == GAMES, verified to exit 101. FATAL 2: the correction to the selective-column FATAL was itself selective. "81-1000 per cell, baseline AND H1" and "31-1000" twelve lines apart, both taken from the baseline row; under H1 rank-75 arms are 59/0/0/0. Every cell is now printed rather than summarised, and the corrected verdict is the opposite of the one it replaced: under rank-75, H1 REDUCES DARVO arms to zero at 3p and above. FATAL 3: "DARVO arms 2 per seat per game" is 1 per seat per game, exactly, at every band. SERIOUS: the tiebreak oracle asserted only that the winner set CHANGED, so reversing the tiebreak left it green; the #13 defect's impact was claimed and never measured (72,000 games: zero divergences — real in principle, witnessed only by a constructed board); a 29-of-363 citation pointed at a file that did not contain it (round 1's reviewer did report it, and it was never transcribed — the record was wrong, not the number); the harnesses were run by NO GATE, so every published figure came from a manual run of an ungated binary, including the assertion added for #1; and edition-check's sibling handling — added by the last correction — was self-certifying, crashed instead of failing, and counted Markdown lines as coverage. Now discovered on disk, and it found a real gap on its first run: Rules_Text.csv vendored with no digest. Also: "peak Stress held" was dead code kept quiet by `let _ = held;` — the numbers were right by coincidence. make panels is now a registered gate. Round 3 is owed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 09:44:00 +02:00
// Read from `held`, which is the point. The first correction
// BUILT `held`, then took the max over event payloads anyway
// and silenced the unused binding with `let _ = held;` — so
// the comment described code that did not exist (CB-REV-0002
// #10). The published figures were right only because the
// START_STRESS floor made the two agree.
c.peak_stress = c
.peak_stress
CB-REV-0003: round 3, and three of four FATAL came from round 2's fixes 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>
2026-08-08 10:26:25 +02:00
.max(held.values().copied().max().unwrap_or(start));
CB-WP-0039: a seat that does not regulate — and it changes H1's verdict CB-EV-0030 concluded H1's DARVO arm rate was still 0. That was true of the panel, and the panel was greedy-family throughout. GreedyPolicy ranks `Ground if gated => 100`, so it grounds the instant the stress gate bites, Stress plateaus at 3, and the arm at 5 is unreachable by construction. "H1 does nothing" was really "H1 does nothing to a seat that already manages its Stress" — and H1 was written for the seat that does not. `reactive` is greedy with exactly one preference changed: GROUND demoted below ATTACK. Under it, H1's criteria 1 and 2 are MET — DARVO arms 400 times per cell, ATTACK is chosen 3 times per seat per game. Criterion 3 fails harder: reactive wins nothing at any seat count. The larger finding is about the baseline. Greedy and reactive play IDENTICALLY under baseline, and peak Stress across 3,200 baseline games was 1 — against a starting value of 2. The gate at 4, the DARVO arm at 5 and the Freedom token are all unreachable, and a policy built to be reckless with Stress is indistinguishable from one built to husband it. That is a deeper account of F17 than F17 has. Not raised as a finding yet: it wants the plural panel first. A constant was investigated rather than reported: darvo was exactly 400 in every cell while atk scaled with seats. Six-player final Stress is [5,5,4,4,4,4] every seed — H1-B holds the attacker at 4, below the arm, and pushes its targets to 5. The self-soothe suppresses DARVO in the aggressor and concentrates it in the attacked. The direction follows from H1-B's arithmetic; the number 2 is partly an artifact of reactive's first-legal targeting, and is labelled as such. Still unreviewed: tier L review outstanding on CB-WP-0038, and nothing here reaches ground-game until it runs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 01:08:40 +02:00
}
}
CB-REV-0002: round 2, and the corrections were not approvable either Three FATAL, five SERIOUS. The substance of round 1's corrections held — Reactive is genuinely one arm different, the five replacement controls are non-inert, the inert metric is right, the numbers reproduce. What failed were the CLAIMS about them, and two defects the corrections introduced. FATAL 1: the fix for round 1's #11 did not fix it. The assertion was `games + setup_fails == 200`, and a refused setup increments setup_fails while skipping games — so the sum is invariant under exactly the failure it claimed to catch. Injecting setup failures gave exit 0 over 196-game columns. Now asserts games == GAMES, verified to exit 101. FATAL 2: the correction to the selective-column FATAL was itself selective. "81-1000 per cell, baseline AND H1" and "31-1000" twelve lines apart, both taken from the baseline row; under H1 rank-75 arms are 59/0/0/0. Every cell is now printed rather than summarised, and the corrected verdict is the opposite of the one it replaced: under rank-75, H1 REDUCES DARVO arms to zero at 3p and above. FATAL 3: "DARVO arms 2 per seat per game" is 1 per seat per game, exactly, at every band. SERIOUS: the tiebreak oracle asserted only that the winner set CHANGED, so reversing the tiebreak left it green; the #13 defect's impact was claimed and never measured (72,000 games: zero divergences — real in principle, witnessed only by a constructed board); a 29-of-363 citation pointed at a file that did not contain it (round 1's reviewer did report it, and it was never transcribed — the record was wrong, not the number); the harnesses were run by NO GATE, so every published figure came from a manual run of an ungated binary, including the assertion added for #1; and edition-check's sibling handling — added by the last correction — was self-certifying, crashed instead of failing, and counted Markdown lines as coverage. Now discovered on disk, and it found a real gap on its first run: Rules_Text.csv vendored with no digest. Also: "peak Stress held" was dead code kept quiet by `let _ = held;` — the numbers were right by coincidence. make panels is now a registered gate. Round 3 is owed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 09:44:00 +02:00
// **`games`, not `games + setup_fails`** (CB-REV-0002 #1).
//
// The first version asserted the SUM — and a refused setup increments
// `setup_fails` while skipping `games`, so the sum is invariant under
// exactly the failure it claimed to catch. It could only ever fire on
// a `play` error, the path that was already instrumented. Verified by
// injecting setup failures: green, exit 0, and a full table printed
// over 196-game columns under a banner reading "200 games per cell".
Close the three items CB-REV-0001 left open H1-B on the DARVO extra Attack: the delta says the extra Attack shares the Attack resolution "so it can self-soothe too if Stress >= 4". CB-WP-0038 asserted it because the code shares resolve_attack; nothing tested it, and CB-EV-0031's withdrawn mechanism story ran through that exact path. Now tested and mutation-verified. Round-5 pressure did not reach the score, and this was a real defect rather than a reporting one. end_round_events scored from `self` while H1-A's pressure went into `work`, and score() reads Stress for the GR-E03 and GR-E04 tiebreaks — so the final round's pressure was invisible to the two modes CB-EV-0030 reports on. Fixed. The test uses the case that bites: uniform pressure preserves an ordering, so it takes the clamp at 5 to collapse a gap and change who wins. Inert arms reported separately: a DARVO arm at the End of Round 5 can never advance a stage, and criterion 1 is about DARVO mattering. 29 of 363 at 2p, none above — matching the reviewer's independent figure, so criterion 1 stands as met. That fix produced one more wrong-subject error, caught before reporting: the first inert-arm metric tested `g.rounds >= 5`, a property of the GAME rather than the EVENT, so it marked every arm in every completed game inert and briefly read as "criterion 1 fails after all". An arm is inert when no RoundEnded follows it. regulation.rs no longer skips setup failures silently: they are counted, and a short cell fails an assertion rather than printing a number a reader has to notice — which is the credit CB-EV-0030 §3 took and half earned. All thirteen challenges closed. Re-review is owed before any of this travels: the corrections were made by the author of the errors. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 02:14:19 +02:00
assert_eq!(
CB-REV-0002: round 2, and the corrections were not approvable either Three FATAL, five SERIOUS. The substance of round 1's corrections held — Reactive is genuinely one arm different, the five replacement controls are non-inert, the inert metric is right, the numbers reproduce. What failed were the CLAIMS about them, and two defects the corrections introduced. FATAL 1: the fix for round 1's #11 did not fix it. The assertion was `games + setup_fails == 200`, and a refused setup increments setup_fails while skipping games — so the sum is invariant under exactly the failure it claimed to catch. Injecting setup failures gave exit 0 over 196-game columns. Now asserts games == GAMES, verified to exit 101. FATAL 2: the correction to the selective-column FATAL was itself selective. "81-1000 per cell, baseline AND H1" and "31-1000" twelve lines apart, both taken from the baseline row; under H1 rank-75 arms are 59/0/0/0. Every cell is now printed rather than summarised, and the corrected verdict is the opposite of the one it replaced: under rank-75, H1 REDUCES DARVO arms to zero at 3p and above. FATAL 3: "DARVO arms 2 per seat per game" is 1 per seat per game, exactly, at every band. SERIOUS: the tiebreak oracle asserted only that the winner set CHANGED, so reversing the tiebreak left it green; the #13 defect's impact was claimed and never measured (72,000 games: zero divergences — real in principle, witnessed only by a constructed board); a 29-of-363 citation pointed at a file that did not contain it (round 1's reviewer did report it, and it was never transcribed — the record was wrong, not the number); the harnesses were run by NO GATE, so every published figure came from a manual run of an ungated binary, including the assertion added for #1; and edition-check's sibling handling — added by the last correction — was self-certifying, crashed instead of failing, and counted Markdown lines as coverage. Now discovered on disk, and it found a real gap on its first run: Rules_Text.csv vendored with no digest. Also: "peak Stress held" was dead code kept quiet by `let _ = held;` — the numbers were right by coincidence. make panels is now a registered gate. Round 3 is owed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 09:44:00 +02:00
c.games, GAMES,
"{players}p {variant:?}: only {} of {GAMES} games ran ({} setups refused) — \
the cell is short, so every number in it is over a sample nobody chose",
c.games, c.setup_fails
Close the three items CB-REV-0001 left open H1-B on the DARVO extra Attack: the delta says the extra Attack shares the Attack resolution "so it can self-soothe too if Stress >= 4". CB-WP-0038 asserted it because the code shares resolve_attack; nothing tested it, and CB-EV-0031's withdrawn mechanism story ran through that exact path. Now tested and mutation-verified. Round-5 pressure did not reach the score, and this was a real defect rather than a reporting one. end_round_events scored from `self` while H1-A's pressure went into `work`, and score() reads Stress for the GR-E03 and GR-E04 tiebreaks — so the final round's pressure was invisible to the two modes CB-EV-0030 reports on. Fixed. The test uses the case that bites: uniform pressure preserves an ordering, so it takes the clamp at 5 to collapse a gap and change who wins. Inert arms reported separately: a DARVO arm at the End of Round 5 can never advance a stage, and criterion 1 is about DARVO mattering. 29 of 363 at 2p, none above — matching the reviewer's independent figure, so criterion 1 stands as met. That fix produced one more wrong-subject error, caught before reporting: the first inert-arm metric tested `g.rounds >= 5`, a property of the GAME rather than the EVENT, so it marked every arm in every completed game inert and briefly read as "criterion 1 fails after all". An arm is inert when no RoundEnded follows it. regulation.rs no longer skips setup failures silently: they are counted, and a short cell fails an assertion rather than printing a number a reader has to notice — which is the credit CB-EV-0030 §3 took and half earned. All thirteen challenges closed. Re-review is owed before any of this travels: the corrections were made by the author of the errors. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 02:14:19 +02:00
);
CB-REV-0003: round 3, and three of four FATAL came from round 2's fixes 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>
2026-08-08 10:26:25 +02:00
assert_eq!(
c.played, GAMES,
"{players}p {variant:?}: {} of {} games reached an outcome over five rounds",
c.played, c.games
);
Close the three items CB-REV-0001 left open H1-B on the DARVO extra Attack: the delta says the extra Attack shares the Attack resolution "so it can self-soothe too if Stress >= 4". CB-WP-0038 asserted it because the code shares resolve_attack; nothing tested it, and CB-EV-0031's withdrawn mechanism story ran through that exact path. Now tested and mutation-verified. Round-5 pressure did not reach the score, and this was a real defect rather than a reporting one. end_round_events scored from `self` while H1-A's pressure went into `work`, and score() reads Stress for the GR-E03 and GR-E04 tiebreaks — so the final round's pressure was invisible to the two modes CB-EV-0030 reports on. Fixed. The test uses the case that bites: uniform pressure preserves an ordering, so it takes the clamp at 5 to collapse a gap and change who wins. Inert arms reported separately: a DARVO arm at the End of Round 5 can never advance a stage, and criterion 1 is about DARVO mattering. 29 of 363 at 2p, none above — matching the reviewer's independent figure, so criterion 1 stands as met. That fix produced one more wrong-subject error, caught before reporting: the first inert-arm metric tested `g.rounds >= 5`, a property of the GAME rather than the EVENT, so it marked every arm in every completed game inert and briefly read as "criterion 1 fails after all". An arm is inert when no RoundEnded follows it. regulation.rs no longer skips setup failures silently: they are counted, and a short cell fails an assertion rather than printing a number a reader has to notice — which is the credit CB-EV-0030 §3 took and half earned. All thirteen challenges closed. Re-review is owed before any of this travels: the corrections were made by the author of the errors. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 02:14:19 +02:00
if c.setup_fails > 0 {
eprintln!(
" !! {players}p {variant:?}: {} setups refused",
c.setup_fails
);
}
CB-WP-0039: a seat that does not regulate — and it changes H1's verdict CB-EV-0030 concluded H1's DARVO arm rate was still 0. That was true of the panel, and the panel was greedy-family throughout. GreedyPolicy ranks `Ground if gated => 100`, so it grounds the instant the stress gate bites, Stress plateaus at 3, and the arm at 5 is unreachable by construction. "H1 does nothing" was really "H1 does nothing to a seat that already manages its Stress" — and H1 was written for the seat that does not. `reactive` is greedy with exactly one preference changed: GROUND demoted below ATTACK. Under it, H1's criteria 1 and 2 are MET — DARVO arms 400 times per cell, ATTACK is chosen 3 times per seat per game. Criterion 3 fails harder: reactive wins nothing at any seat count. The larger finding is about the baseline. Greedy and reactive play IDENTICALLY under baseline, and peak Stress across 3,200 baseline games was 1 — against a starting value of 2. The gate at 4, the DARVO arm at 5 and the Freedom token are all unreachable, and a policy built to be reckless with Stress is indistinguishable from one built to husband it. That is a deeper account of F17 than F17 has. Not raised as a finding yet: it wants the plural panel first. A constant was investigated rather than reported: darvo was exactly 400 in every cell while atk scaled with seats. Six-player final Stress is [5,5,4,4,4,4] every seed — H1-B holds the attacker at 4, below the arm, and pushes its targets to 5. The self-soothe suppresses DARVO in the aggressor and concentrates it in the attacked. The direction follows from H1-B's arithmetic; the number 2 is partly an artifact of reactive's first-legal targeting, and is labelled as such. Still unreviewed: tier L review outstanding on CB-WP-0038, and nothing here reaches ground-game until it runs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 01:08:40 +02:00
c
}
fn main() {
println!("CB-WP-0039 — does H1 reach a seat that does not regulate?\n");
println!("`reactive` is greedy with ONE preference changed: GROUND is");
println!("demoted below ATTACK, so the seat never grounds to shed Stress.");
CB-REV-0002: round 2, and the corrections were not approvable either Three FATAL, five SERIOUS. The substance of round 1's corrections held — Reactive is genuinely one arm different, the five replacement controls are non-inert, the inert metric is right, the numbers reproduce. What failed were the CLAIMS about them, and two defects the corrections introduced. FATAL 1: the fix for round 1's #11 did not fix it. The assertion was `games + setup_fails == 200`, and a refused setup increments setup_fails while skipping games — so the sum is invariant under exactly the failure it claimed to catch. Injecting setup failures gave exit 0 over 196-game columns. Now asserts games == GAMES, verified to exit 101. FATAL 2: the correction to the selective-column FATAL was itself selective. "81-1000 per cell, baseline AND H1" and "31-1000" twelve lines apart, both taken from the baseline row; under H1 rank-75 arms are 59/0/0/0. Every cell is now printed rather than summarised, and the corrected verdict is the opposite of the one it replaced: under rank-75, H1 REDUCES DARVO arms to zero at 3p and above. FATAL 3: "DARVO arms 2 per seat per game" is 1 per seat per game, exactly, at every band. SERIOUS: the tiebreak oracle asserted only that the winner set CHANGED, so reversing the tiebreak left it green; the #13 defect's impact was claimed and never measured (72,000 games: zero divergences — real in principle, witnessed only by a constructed board); a 29-of-363 citation pointed at a file that did not contain it (round 1's reviewer did report it, and it was never transcribed — the record was wrong, not the number); the harnesses were run by NO GATE, so every published figure came from a manual run of an ungated binary, including the assertion added for #1; and edition-check's sibling handling — added by the last correction — was self-certifying, crashed instead of failing, and counted Markdown lines as coverage. Now discovered on disk, and it found a real gap on its first run: Rules_Text.csv vendored with no digest. Also: "peak Stress held" was dead code kept quiet by `let _ = held;` — the numbers were right by coincidence. make panels is now a registered gate. Round 3 is owed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 09:44:00 +02:00
println!("SHARED GROUND; `won` is group success; {GAMES} games per cell.\n");
CB-WP-0039: a seat that does not regulate — and it changes H1's verdict CB-EV-0030 concluded H1's DARVO arm rate was still 0. That was true of the panel, and the panel was greedy-family throughout. GreedyPolicy ranks `Ground if gated => 100`, so it grounds the instant the stress gate bites, Stress plateaus at 3, and the arm at 5 is unreachable by construction. "H1 does nothing" was really "H1 does nothing to a seat that already manages its Stress" — and H1 was written for the seat that does not. `reactive` is greedy with exactly one preference changed: GROUND demoted below ATTACK. Under it, H1's criteria 1 and 2 are MET — DARVO arms 400 times per cell, ATTACK is chosen 3 times per seat per game. Criterion 3 fails harder: reactive wins nothing at any seat count. The larger finding is about the baseline. Greedy and reactive play IDENTICALLY under baseline, and peak Stress across 3,200 baseline games was 1 — against a starting value of 2. The gate at 4, the DARVO arm at 5 and the Freedom token are all unreachable, and a policy built to be reckless with Stress is indistinguishable from one built to husband it. That is a deeper account of F17 than F17 has. Not raised as a finding yet: it wants the plural panel first. A constant was investigated rather than reported: darvo was exactly 400 in every cell while atk scaled with seats. Six-player final Stress is [5,5,4,4,4,4] every seed — H1-B holds the attacker at 4, below the arm, and pushes its targets to 5. The self-soothe suppresses DARVO in the aggressor and concentrates it in the attacked. The direction follows from H1-B's arithmetic; the number 2 is partly an artifact of reactive's first-legal targeting, and is labelled as such. Still unreviewed: tier L review outstanding on CB-WP-0038, and nothing here reaches ground-game until it runs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 01:08:40 +02:00
for (vlabel, variant) in [
("BASELINE ground-darvo-r0", Variant::Baseline),
("H1 h1-problem-stress", Variant::H1ProblemStress),
] {
println!("{vlabel}");
println!(" greedy (regulates) reactive (does not)");
Close the three items CB-REV-0001 left open H1-B on the DARVO extra Attack: the delta says the extra Attack shares the Attack resolution "so it can self-soothe too if Stress >= 4". CB-WP-0038 asserted it because the code shares resolve_attack; nothing tested it, and CB-EV-0031's withdrawn mechanism story ran through that exact path. Now tested and mutation-verified. Round-5 pressure did not reach the score, and this was a real defect rather than a reporting one. end_round_events scored from `self` while H1-A's pressure went into `work`, and score() reads Stress for the GR-E03 and GR-E04 tiebreaks — so the final round's pressure was invisible to the two modes CB-EV-0030 reports on. Fixed. The test uses the case that bites: uniform pressure preserves an ordering, so it takes the clamp at 5 to collapse a gap and change who wins. Inert arms reported separately: a DARVO arm at the End of Round 5 can never advance a stage, and criterion 1 is about DARVO mattering. 29 of 363 at 2p, none above — matching the reviewer's independent figure, so criterion 1 stands as met. That fix produced one more wrong-subject error, caught before reporting: the first inert-arm metric tested `g.rounds >= 5`, a property of the GAME rather than the EVENT, so it marked every arm in every completed game inert and briefly read as "criterion 1 fails after all". An arm is inert when no RoundEnded follows it. regulation.rs no longer skips setup failures silently: they are counted, and a short cell fails an assertion rather than printing a number a reader has to notice — which is the credit CB-EV-0030 §3 took and half earned. All thirteen challenges closed. Re-review is owed before any of this travels: the corrections were made by the author of the errors. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 02:14:19 +02:00
println!("seats games won atk darvo peak games won atk darvo peak inert");
CB-WP-0039: a seat that does not regulate — and it changes H1's verdict CB-EV-0030 concluded H1's DARVO arm rate was still 0. That was true of the panel, and the panel was greedy-family throughout. GreedyPolicy ranks `Ground if gated => 100`, so it grounds the instant the stress gate bites, Stress plateaus at 3, and the arm at 5 is unreachable by construction. "H1 does nothing" was really "H1 does nothing to a seat that already manages its Stress" — and H1 was written for the seat that does not. `reactive` is greedy with exactly one preference changed: GROUND demoted below ATTACK. Under it, H1's criteria 1 and 2 are MET — DARVO arms 400 times per cell, ATTACK is chosen 3 times per seat per game. Criterion 3 fails harder: reactive wins nothing at any seat count. The larger finding is about the baseline. Greedy and reactive play IDENTICALLY under baseline, and peak Stress across 3,200 baseline games was 1 — against a starting value of 2. The gate at 4, the DARVO arm at 5 and the Freedom token are all unreachable, and a policy built to be reckless with Stress is indistinguishable from one built to husband it. That is a deeper account of F17 than F17 has. Not raised as a finding yet: it wants the plural panel first. A constant was investigated rather than reported: darvo was exactly 400 in every cell while atk scaled with seats. Six-player final Stress is [5,5,4,4,4,4] every seed — H1-B holds the attacker at 4, below the arm, and pushes its targets to 5. The self-soothe suppresses DARVO in the aggressor and concentrates it in the attacked. The direction follows from H1-B's arithmetic; the number 2 is partly an artifact of reactive's first-legal targeting, and is labelled as such. Still unreviewed: tier L review outstanding on CB-WP-0038, and nothing here reaches ground-game until it runs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 01:08:40 +02:00
for players in [2u8, 3, 4, 6] {
let g = sweep(ScoringMode::SharedGround, variant, players, false);
let r = sweep(ScoringMode::SharedGround, variant, players, true);
println!(
Close the three items CB-REV-0001 left open H1-B on the DARVO extra Attack: the delta says the extra Attack shares the Attack resolution "so it can self-soothe too if Stress >= 4". CB-WP-0038 asserted it because the code shares resolve_attack; nothing tested it, and CB-EV-0031's withdrawn mechanism story ran through that exact path. Now tested and mutation-verified. Round-5 pressure did not reach the score, and this was a real defect rather than a reporting one. end_round_events scored from `self` while H1-A's pressure went into `work`, and score() reads Stress for the GR-E03 and GR-E04 tiebreaks — so the final round's pressure was invisible to the two modes CB-EV-0030 reports on. Fixed. The test uses the case that bites: uniform pressure preserves an ordering, so it takes the clamp at 5 to collapse a gap and change who wins. Inert arms reported separately: a DARVO arm at the End of Round 5 can never advance a stage, and criterion 1 is about DARVO mattering. 29 of 363 at 2p, none above — matching the reviewer's independent figure, so criterion 1 stands as met. That fix produced one more wrong-subject error, caught before reporting: the first inert-arm metric tested `g.rounds >= 5`, a property of the GAME rather than the EVENT, so it marked every arm in every completed game inert and briefly read as "criterion 1 fails after all". An arm is inert when no RoundEnded follows it. regulation.rs no longer skips setup failures silently: they are counted, and a short cell fails an assertion rather than printing a number a reader has to notice — which is the credit CB-EV-0030 §3 took and half earned. All thirteen challenges closed. Re-review is owed before any of this travels: the corrections were made by the author of the errors. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 02:14:19 +02:00
" {players}p {:>4} {:>4} {:>4} {:>5} {:>4} {:>4} {:>4} {:>4} {:>5} {:>4} {:>6}",
CB-WP-0039: a seat that does not regulate — and it changes H1's verdict CB-EV-0030 concluded H1's DARVO arm rate was still 0. That was true of the panel, and the panel was greedy-family throughout. GreedyPolicy ranks `Ground if gated => 100`, so it grounds the instant the stress gate bites, Stress plateaus at 3, and the arm at 5 is unreachable by construction. "H1 does nothing" was really "H1 does nothing to a seat that already manages its Stress" — and H1 was written for the seat that does not. `reactive` is greedy with exactly one preference changed: GROUND demoted below ATTACK. Under it, H1's criteria 1 and 2 are MET — DARVO arms 400 times per cell, ATTACK is chosen 3 times per seat per game. Criterion 3 fails harder: reactive wins nothing at any seat count. The larger finding is about the baseline. Greedy and reactive play IDENTICALLY under baseline, and peak Stress across 3,200 baseline games was 1 — against a starting value of 2. The gate at 4, the DARVO arm at 5 and the Freedom token are all unreachable, and a policy built to be reckless with Stress is indistinguishable from one built to husband it. That is a deeper account of F17 than F17 has. Not raised as a finding yet: it wants the plural panel first. A constant was investigated rather than reported: darvo was exactly 400 in every cell while atk scaled with seats. Six-player final Stress is [5,5,4,4,4,4] every seed — H1-B holds the attacker at 4, below the arm, and pushes its targets to 5. The self-soothe suppresses DARVO in the aggressor and concentrates it in the attacked. The direction follows from H1-B's arithmetic; the number 2 is partly an artifact of reactive's first-legal targeting, and is labelled as such. Still unreviewed: tier L review outstanding on CB-WP-0038, and nothing here reaches ground-game until it runs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 01:08:40 +02:00
g.games,
g.won,
g.atk,
g.darvo,
g.peak_stress,
r.games,
r.won,
r.atk,
r.darvo,
Close the three items CB-REV-0001 left open H1-B on the DARVO extra Attack: the delta says the extra Attack shares the Attack resolution "so it can self-soothe too if Stress >= 4". CB-WP-0038 asserted it because the code shares resolve_attack; nothing tested it, and CB-EV-0031's withdrawn mechanism story ran through that exact path. Now tested and mutation-verified. Round-5 pressure did not reach the score, and this was a real defect rather than a reporting one. end_round_events scored from `self` while H1-A's pressure went into `work`, and score() reads Stress for the GR-E03 and GR-E04 tiebreaks — so the final round's pressure was invisible to the two modes CB-EV-0030 reports on. Fixed. The test uses the case that bites: uniform pressure preserves an ordering, so it takes the clamp at 5 to collapse a gap and change who wins. Inert arms reported separately: a DARVO arm at the End of Round 5 can never advance a stage, and criterion 1 is about DARVO mattering. 29 of 363 at 2p, none above — matching the reviewer's independent figure, so criterion 1 stands as met. That fix produced one more wrong-subject error, caught before reporting: the first inert-arm metric tested `g.rounds >= 5`, a property of the GAME rather than the EVENT, so it marked every arm in every completed game inert and briefly read as "criterion 1 fails after all". An arm is inert when no RoundEnded follows it. regulation.rs no longer skips setup failures silently: they are counted, and a short cell fails an assertion rather than printing a number a reader has to notice — which is the credit CB-EV-0030 §3 took and half earned. All thirteen challenges closed. Re-review is owed before any of this travels: the corrections were made by the author of the errors. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 02:14:19 +02:00
r.peak_stress,
r.inert_arms
CB-WP-0039: a seat that does not regulate — and it changes H1's verdict CB-EV-0030 concluded H1's DARVO arm rate was still 0. That was true of the panel, and the panel was greedy-family throughout. GreedyPolicy ranks `Ground if gated => 100`, so it grounds the instant the stress gate bites, Stress plateaus at 3, and the arm at 5 is unreachable by construction. "H1 does nothing" was really "H1 does nothing to a seat that already manages its Stress" — and H1 was written for the seat that does not. `reactive` is greedy with exactly one preference changed: GROUND demoted below ATTACK. Under it, H1's criteria 1 and 2 are MET — DARVO arms 400 times per cell, ATTACK is chosen 3 times per seat per game. Criterion 3 fails harder: reactive wins nothing at any seat count. The larger finding is about the baseline. Greedy and reactive play IDENTICALLY under baseline, and peak Stress across 3,200 baseline games was 1 — against a starting value of 2. The gate at 4, the DARVO arm at 5 and the Freedom token are all unreachable, and a policy built to be reckless with Stress is indistinguishable from one built to husband it. That is a deeper account of F17 than F17 has. Not raised as a finding yet: it wants the plural panel first. A constant was investigated rather than reported: darvo was exactly 400 in every cell while atk scaled with seats. Six-player final Stress is [5,5,4,4,4,4] every seed — H1-B holds the attacker at 4, below the arm, and pushes its targets to 5. The self-soothe suppresses DARVO in the aggressor and concentrates it in the attacked. The direction follows from H1-B's arithmetic; the number 2 is partly an artifact of reactive's first-legal targeting, and is labelled as such. Still unreviewed: tier L review outstanding on CB-WP-0038, and nothing here reaches ground-game until it runs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 01:08:40 +02:00
);
}
println!();
}
}