CB-WP-0021 T01/T02/T05: the engine plays its own data — AM-7 blocks
ADR-0011 decided it: vendor the CSV with a checked digest, read it with a ~50-line reader, and let the hashes move. The declaration's constraint was measured against the WRONG BUDGET. It said a CSV crate costs 21,613 against AM-4a's 3,798 of headroom, '5.7x over, settled by measurement'. But setup and problem_priorities are cfg(scenarios) and are not in the shipped runtime at all, so AM-4a never sees them. Against AM-4b, csv costs 17,651 against 19,742 -- it FITS, with 2,091 to spare. It is refused anyway, on proportion: 89% of the budget's remaining capacity to read 20 rows. The revisit condition is stated (nested quoting, embedded newlines, multiple dialects). GR-S01 now deals Surface + hidden 1..=k as ruled, with edition values and suits. Measured: 6/9/12 available against thresholds 5/7/9 -- the game is winnable at every seat count, which is what the maintainer could not do. gd0001 is INVERTED, not deleted, and now also asserts the 6/9/12 so a deal that is reachable for the wrong reason still fails. Blast radius was scenario expectations, exactly as the ADR predicted: no scenario pinned a hash and no bundle is committed. Six scenarios and two unit tests updated, each with a note. gr-e01-threshold-unreachable-2p is RENAMED to -reachable- and rewritten as the non-provisional import check ground-game asked for by name. gr-e03's setup was restructured, not just renumbered: with values 2,2,2 its personal-edge test would have tied three ways and asserted nothing. BLOCKING: AM-7 fails at median 0.845 against its 0.9 floor. Isolated across three runs -- 3 problems + stand-in 0.97, 3 problems + edition 0.909, 4 problems + edition 0.845. State is BOUNDED (proven: identical after 5k and 100k events), so this is not the unbounded-growth defect AM-7 exists to catch; it is a bigger working set streaming a long log. Whether AM-7's floor is still right for a larger aggregate is a spec question and lowering it requires an ADR, so it is not being tuned here. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
f2281fa86c
commit
2da19a49b7
16 changed files with 593 additions and 167 deletions
|
|
@ -1077,42 +1077,12 @@ mod tests {
|
|||
}
|
||||
}
|
||||
|
||||
/// **A recorded finding, not a desired property.** With the standard
|
||||
/// preset's placeholder Problem values (value = priority), the total
|
||||
/// a game can possibly reach is below GR-E01's threshold at 2, 3 and
|
||||
/// 4 players — group success is unreachable regardless of play. Only
|
||||
/// 5–6p can clear its 9.
|
||||
///
|
||||
/// This test pins the arithmetic so the gap cannot close silently.
|
||||
/// **It is expected to fail** when Problem values become scenario
|
||||
/// data (GR-S01 calls the current fixture a stand-in); the failure is
|
||||
/// the signal to delete it, not to re-tune it.
|
||||
#[test]
|
||||
fn the_standard_preset_cannot_reach_the_threshold_below_five_seats() {
|
||||
let mut report = Vec::new();
|
||||
for players in 2..=6u8 {
|
||||
let initial = setup(players, 42);
|
||||
let best: u32 = initial.problems.values().map(|p| u32::from(p.value)).sum();
|
||||
let threshold = play(initial, &mut policies("greedy", players, 42))
|
||||
.expect("game")
|
||||
.state
|
||||
.outcome
|
||||
.expect("outcome")
|
||||
.threshold;
|
||||
report.push(format!("{players}p best {best} vs threshold {threshold}"));
|
||||
if players < 5 {
|
||||
assert!(
|
||||
best < threshold,
|
||||
"{players}p: best {best} now reaches threshold {threshold} — \
|
||||
the fixture changed, delete this test"
|
||||
);
|
||||
} else {
|
||||
assert!(
|
||||
best >= threshold,
|
||||
"{players}p: best {best} cannot reach threshold {threshold}"
|
||||
);
|
||||
}
|
||||
}
|
||||
println!("GR-E01 reachability: {}", report.join(", "));
|
||||
}
|
||||
// `the_standard_preset_cannot_reach_the_threshold_below_five_seats`
|
||||
// lived here and was deleted 2026-08-04, on its own instruction: it
|
||||
// said "the failure is the signal to delete it, not to re-tune it".
|
||||
// ground-game ruled GR-S01's deal and the game became winnable.
|
||||
//
|
||||
// The record did not go with it. `gd0001_group_success_is_reachable_at
|
||||
// _every_seat_count` in lib.rs is the same arithmetic, inverted rather
|
||||
// than removed, and carries why the numbers changed.
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue