Some checks failed
ci / check (push) Failing after 3s
The H2 panel measured wins, variance and DARVO but not ATTACK selection — which is F17's actual question. attack-value now runs H2 too. The shape is the finding. Under H1 a seat that sometimes attacks loses everything at 3p and above. Under H2 rank-75 wins 112/173/199 against greedy's 120/175/199, while attacking and arming DARVO. So H2 makes occasional ATTACK affordable — it does not make it pay. rank-75 never beats greedy in any cell, and rank-95 (always attack) still wins 0 everywhere in all three variants, so "not always-attack-optimal" holds. F17 therefore stands: ATTACK earns its place in no mode. What changed is that choosing it is no longer catastrophic. Whether affordable is what the design wants is ground-game's judgement. And a hazard: with_variant() exists because H2 assigns Problem owners at setup and `state.variant = v` leaves them unassigned, so scoped pressure ticks nobody and H2 measures as INERT. Three call sites had the bare write, including cb-play's driver. No published figure is affected, and that was checked rather than assumed: h2-panel used the builder, and the two harnesses with the bare write had only ever run baseline and H1, neither of which has a setup step; the driver has never played H2. All three fixed, and a_bare_variant_write_leaves_h2_inert now states the difference so a regression is caught by a named test rather than by a reader wondering why H2 did nothing. The builder was not enough — the field is public, so the old form still compiles. Worth knowing before the next variant. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
173 lines
7.1 KiB
Markdown
173 lines
7.1 KiB
Markdown
# CB-EV-0032 — H2 measured
|
||
|
||
CB-WP-0042 T05. Tier M. Closed 2026-08-08. **The first pass declared after
|
||
the chaos roll was retired** (ADR-0021), so there is no roll to record.
|
||
|
||
**Delivered:** H2 implemented from `rules_delta.yaml`, measured against
|
||
**ground-game's own §3 criteria** — read from their design note, not
|
||
reused from H1 — and a control that isolates the mechanism.
|
||
|
||
---
|
||
|
||
## 1. Their criteria, answered
|
||
|
||
| # | criterion | verdict |
|
||
|---|---|---|
|
||
| 1 | greedy SHARED 3–4p **well above H1's 0** | **met, strongly** |
|
||
| 2 | Stress variance above baseline *and* H1-greedy | **met at 2p/4p/6p, marginally missed at 3p** |
|
||
| 3 | DARVO non-zero for a policy that **still sometimes wins** | **met** — and this was H1's clearest failure |
|
||
| 4 | bond cards show elevated SOLVE rate vs personal | **not met, and this panel cannot test it** (§3) |
|
||
| 5 | control: force all scopes global → H1-like collapse | **met, decisively** |
|
||
|
||
## 2. The numbers
|
||
|
||
SHARED GROUND, 200 games per cell. `spread` is the mean max−min final
|
||
Stress across seats — their criterion 2.
|
||
|
||
**greedy**
|
||
|
||
| seats | baseline won / spread | H1 won / spread | H2 won / spread |
|
||
|---|---|---|---|
|
||
| 2p | 132 / 0.05 | 68 / 0.34 | **87 / 0.47** |
|
||
| 3p | 165 / 1.57 | **0** / 0.00 | **120** / 1.50 |
|
||
| 4p | 190 / 1.83 | **0** / 0.00 | **175** / 2.40 |
|
||
| 6p | 200 / 1.55 | **0** / 0.00 | **199** / 2.02 |
|
||
|
||
**reactive** — DARVO arms in brackets
|
||
|
||
| seats | H1 won (arms) | H2 won (arms) |
|
||
|---|---|---|
|
||
| 2p | 66 (363) | 61 (346) |
|
||
| 3p | **0** (600) | **13** (499) |
|
||
| 4p | **0** (800) | **13** (470) |
|
||
| 6p | **0** (1200) | **57** (565) |
|
||
|
||
**Criterion 1 is met with room.** H2 restores 73% of baseline wins at 3p
|
||
and 92% at 4p, where H1 destroyed them entirely.
|
||
|
||
**Criterion 3 is the one that matters most.** Under H1 the unregulated
|
||
seat armed DARVO constantly and **never won**; under H2 it arms and wins
|
||
13/13/57. *"Non-zero for some policy that still sometimes wins"* is
|
||
exactly the shape H1 could not produce.
|
||
|
||
**Criterion 2, honestly.** H2's spread beats baseline at 2p, 4p and 6p and
|
||
**misses at 3p — 1.50 against 1.57**. It beats H1-greedy everywhere, and
|
||
**H1-greedy's spread is 0.00 at 3p+**: a flat tax on every seat creates no
|
||
variance at all, which is the clearest statement of why scoping was the
|
||
right correction.
|
||
|
||
## 3. Criterion 4 — the number is lower, and the number cannot mean what
|
||
the criterion asks
|
||
|
||
Claim rate by scope, H2, greedy:
|
||
|
||
| seats | global | personal | bond |
|
||
|---|---|---|---|
|
||
| 2p | 70.5% | 54.5% | — (no bond card, as designed) |
|
||
| 3p | 85.5% | 80.2% | **60.0%** |
|
||
| 4p | 99.0% | 98.5% | **87.5%** |
|
||
| 6p | 100% | 95.3% | 99.5% |
|
||
|
||
**Bond is lower than personal at 3p and 4p — the opposite direction.**
|
||
|
||
**And this panel cannot test the hypothesis.** The claim is that a shared
|
||
tick makes a Bond network *jointly motivated* to clear that card.
|
||
**No policy here models another seat, or knows what a scope is.** Greedy
|
||
picks SOLVE on suit availability. So the bond rate is driven by which
|
||
cards happen to be matchable, not by incentive — the mechanism the
|
||
criterion is about could not have shown up.
|
||
|
||
**This was stated in the workplan before the run**, not discovered in the
|
||
numbers. The honest report is: **criterion 4 is untested, and the
|
||
incidental figure points the wrong way.** A table can answer it; this
|
||
cannot.
|
||
|
||
## 4. Criterion 5 — the control isolates the mechanism
|
||
|
||
Force every scope to `global` and change nothing else:
|
||
|
||
| seats | H2 scoped | H2, all scopes global |
|
||
|---|---:|---:|
|
||
| 3p | **120** | **0** |
|
||
| 4p | **175** | **0** |
|
||
|
||
**H1's collapse returns exactly.** That is a strong causal statement and
|
||
the best evidence in this file: **the scoping is what saves it**, not any
|
||
other difference between the packages. Their optional A/B was worth
|
||
running.
|
||
|
||
## 5. ATTACK — affordable under H2, still not profitable
|
||
|
||
Added after the first report, because the H2 panel measured wins, variance
|
||
and DARVO and **not ATTACK selection**, which is F17's actual question.
|
||
|
||
`attack-value`'s rank-75 policy — *attack when convenient* — SHARED
|
||
GROUND, wins with attacks and DARVO arms in brackets:
|
||
|
||
| seats | baseline | H1 | H2 |
|
||
|---|---|---|---|
|
||
| 2p | 132 (604 atk, 81 arms) | 66 (180, 59) | **65 (248, 102)** |
|
||
| 3p | 165 (592, 125) | **0** (0, 0) | **112 (250, 52)** |
|
||
| 4p | 190 (923, 218) | **0** (0, 0) | **173 (626, 165)** |
|
||
| 6p | 200 (389, 31) | **0** (0, 0) | **199 (299, 45)** |
|
||
|
||
**The shape is the finding.** Under H1 a seat that sometimes attacks loses
|
||
everything at 3p and above. Under H2 it wins **112 / 173 / 199** — against
|
||
greedy's 120 / 175 / 199 — *while* attacking and arming DARVO.
|
||
|
||
> **H2 makes occasional ATTACK affordable. It does not make it pay.**
|
||
|
||
rank-75 never beats greedy in any cell; at best it draws level (199 vs 199
|
||
at 6p). And **rank-95 — always attack — still wins 0 everywhere**, in all
|
||
three variants, so the *"not always-attack-optimal"* property holds.
|
||
|
||
**F17 therefore stands.** ATTACK earns its place in no mode; what changed
|
||
is that choosing it is no longer catastrophic. Whether "affordable" is
|
||
what the design wants, or whether ATTACK should actually reward, is
|
||
ground-game's judgement.
|
||
|
||
## 6. A construction hazard, found while measuring this
|
||
|
||
`GroundState::with_variant()` exists because H2 assigns Problem owners at
|
||
setup and `state.variant = v` leaves them unassigned — **scoped pressure
|
||
then ticks nobody and H2 measures as inert**.
|
||
|
||
**Three call sites had the bare write**, including `cb-play`'s driver.
|
||
|
||
**No published figure is affected**, and that was checked rather than
|
||
assumed: `h2-panel.rs` used the builder, and the two harnesses with the
|
||
bare write had only ever run baseline and H1, neither of which has a
|
||
setup step. The driver has never played H2.
|
||
|
||
All three are fixed, and `a_bare_variant_write_leaves_h2_inert` now states
|
||
the difference — so a regression is caught by a named test rather than by
|
||
a reader wondering why H2 did nothing.
|
||
|
||
**The builder was not enough**: the field is public, so the old form still
|
||
compiles. That is worth knowing before the next variant.
|
||
|
||
## 7. What this does not say
|
||
|
||
- **No felt-play.** H2's central claim is about *motivation* — a bonded
|
||
pair caring about each other's card — and §3 says as much. 200-game
|
||
aggregates measure dynamics, not motivation
|
||
([`Taxonomy.md`](../specs/Taxonomy.md) §4).
|
||
- **The panel is still greedy-family**, as CB-EV-0031 said of itself.
|
||
Criterion 3 asks for "some policy that still sometimes wins" and we have
|
||
two, both derived from the same ranking.
|
||
- **These are single-sample figures.** CB-REV-0003 #10 found the 2p arm
|
||
counts varying 354–366 across seed windows; nothing here has been
|
||
re-derived on a second sample, and the `won` columns should be read as
|
||
approximate.
|
||
- **No re-review.** CB-WP-0038's tier-L review found twelve fatal defects
|
||
across three rounds, all in the instrument. This pass reuses that
|
||
instrument.
|
||
|
||
## Open after this pass
|
||
|
||
- **Criterion 4 needs a policy that models other seats**, or a table.
|
||
- **A second seed window**, to separate the invariant figures from the
|
||
sample-specific ones as CB-EV-0031 §1 now does.
|
||
- **The 3p variance miss** (1.50 vs 1.57) is within what a second sample
|
||
might move; it is reported as a miss because that is what this sample
|
||
says.
|