CB-WP-0050: every configuration, faceted by aspect — and F31
Some checks failed
ci / check (push) Failing after 4s

module-panel sweeps points in aspect space the way scenario-panel sweeps
boards: one module at a time with every other aspect held, then the
profiles where an interaction is the hypothesis.

F31: attack_relief.self_soothe_ge4 HAS NEVER FIRED. Zero ATTACKs in
every cell, every seat band, both bots. The module acts only on an
uncancelled ATTACK by a seat at Stress >= 4, and greedy ranks Ground 100
at the gate against Attack's 10 -- so at exactly the position where
self-soothe would pay, GROUND wins. ModuleAwarePolicy adds 55 and that
is still not enough. `unplayed`, not `inert`: the kernel implements it
correctly and nothing has ever given it an opportunity.

This reaches backwards: CB-EV-0030's H1 verdict rests on its
flat-pressure half alone, because H1's other half never had an
opportunity in those games either.

Also: problem_stress.scoped is the only module with a measured effect
(3p 85->60 greedy, 86->63 module-aware, peak Stress 2->4);
flat_any_open drives group success to 0 at every band, reproducing the
H1 rejection from the module side; and scoped_plus_attack_soothe is
EXACTLY scoped alone -- necessarily, given F31 -- so the catalog's first
intentional multi-aspect combination cannot currently be evaluated as a
combination.

THE PANEL'S OWN DEFECT, first run: it printed 85/86 for a module that
never fired -- real-looking numbers inviting "measured, no effect" when
no seat ever created the precondition. Its docstring already said it
would not do that; the claim was written before the behaviour was.
First fix marked whole rows unmeasured, which threw away h1's real
flat-pressure result; the shipped fix names the specific module and
keeps the row's numbers, which are real for the modules that did fire.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
tegwick 2026-08-09 01:45:53 +02:00
parent 3d4818b492
commit 3f2ba2ec5d
4 changed files with 425 additions and 0 deletions

View file

@ -56,6 +56,7 @@ kinds, states and metrics: [`GameDesign.md`](GameDesign.md). Reported by
| F26 | inert | ruled | `crates/cb-render-html/src/lib.rs::a_scoped_table_says_what_a_scope_does` | counterexample | 2026-08-08 | ground-game |
| F27 | unplayed | reported | `games/ground/examples/scenario-panel.rs` | counterexample | 2026-08-08 | clay-borg |
| F29 | inconsistent | applied | `games_ground::edition::card_text_tests::which_scenarios_are_mechanically_distinct` | counterexample | 2026-08-08 | ground-game |
| F31 | unplayed | raised | `games/ground/examples/module-panel.rs` | counterexample | 2026-08-08 | clay-borg |
| F30 | degenerate | ruled | `games/ground/examples/scenario-panel.rs` | counterexample | 2026-08-08 | ground-game |
| F28 | underdetermined | applied | `games_ground::tests::the_mastery_rating_and_the_shared_score_count_different_things` | counterexample | 2026-08-08 | ground-game |
@ -66,6 +67,34 @@ Prose for **closed** findings (withdrawn or applied) lives in
are the whole register and `make design` reads them from here.
- **F31 — `attack_relief.self_soothe_ge4` cannot fire, so it has never
been measured.** `module-panel` records **zero ATTACKs in every cell**,
at every seat band, under both a mode-blind and a module-aware bot. The
module only acts on an uncancelled ATTACK by a seat at Stress ≥ 4, so
it has had no opportunity in any game this repo has run — including
every game behind CB-EV-0030's H1 measurement, where it was half the
package.
The mechanism is legible: `GreedyPolicy` ranks `Ground` at 100 when the
stress gate bites and `Attack` at 10, so at exactly the position where
self-soothe would pay, GROUND wins the comparison.
`ModuleAwarePolicy` raises ATTACK by 55 at the gate and **that is still
not enough**, which is a fact about the ranking rather than about the
game.
**`unplayed`, emphatically not `inert`.** The kernel implements the
module correctly; nothing has ever given it an opportunity. Reporting
it as a null result is the error the panel now refuses to make: its
row shows real numbers with `← never fired: UNMEASURED` attached,
because the numbers belong to the *other* modules in the row.
**Sensitivity:** vary only the ATTACK rank. The falsifier is a policy
that attacks at the gate — if group success then moves under
`attack_relief.self_soothe_ge4` and not under the baseline, the module
is real and only our seats were hiding it. Until such a seat exists,
**no claim about this module is supported in either direction**, and
CB-EV-0030's H1 verdict rests on its flat-pressure half alone.
- **F30 — SCN_04 is materially harder at 2 players.** 52/100 group
success against 67 and 73, with **every other parameter held by the
edition itself**: same deal shape, same 6 available points, same