CB-WP-0038: variant selection, H1 implemented, and H1 measured
Some checks failed
ci / check (push) Failing after 3s
Some checks failed
ci / check (push) Failing after 3s
ground-game packages hypotheses as selectable rules variants — a catalog, a rules_delta.yaml, and prose — and their note is explicit that CSV text alone is not executable here. So the kernel gains a Variant in game state: in the state, therefore in the hash, therefore in the recording, because a scenario replayed under a different variant would diverge silently. Baseline is bit-for-bit what it was, asserted across seat counts and seeds. A variant system that perturbs the baseline invalidates every measurement this repo has. H1-A and H1-B implemented from rules_delta.yaml and mutation-proven on their own defects: "unclaimed" misread as face-up-and-unsolved, and the attacker's Stress read after the attack's effects. Their `unchanged:` list is asserted rather than trusted — that list is their claim about their own experiment. Measured, and three of their four criteria fail. DARVO arm rate is still 0 under greedy; ATTACK selection does not rise and falls for the rank-75 policy; group success collapses from 165/190/200 to 0 at 3/4/6 seats. The mechanism is not the assumed one: greedy answers the pressure by regulating, Stress plateaus at 3, so it never reaches the gate at 4 or the arm at 5 — H1-A acts as a solve-rate tax and H1-B is unreachable under competent play. A harness defect was caught before the claim: sweep discarded refused games silently and never reported its count, so "nobody won" and "nothing played" printed identically. Reporting H1 as unwinnable on that basis would have been the ADR-0018 family aimed at another repo's design. All 200 games ran in every cell; the zeros are real. Chaos d8 = 8 — the window's first override, redrew L against a structural L, so it changed nothing. Window 3 recorded in ChaosRollHistory. NOT REVIEWED: tier L owes a separate-agent adversarial review, and no H1 result may reach ground-game until it has run. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
627992bc85
commit
a928b5925c
15 changed files with 928 additions and 28 deletions
151
workplans/CB-WP-0038-h1-variant.md
Normal file
151
workplans/CB-WP-0038-h1-variant.md
Normal file
|
|
@ -0,0 +1,151 @@
|
|||
---
|
||||
id: CB-WP-0038
|
||||
kind: product
|
||||
title: "Variant selection, and H1"
|
||||
status: done
|
||||
---
|
||||
|
||||
# Purpose
|
||||
|
||||
```
|
||||
structural tier L (a new capability port: the kernel gains a selectable
|
||||
rules variant, so what the engine plays is no longer
|
||||
a constant)
|
||||
chaos d8 = 8 → OVERRIDE, redraw = L
|
||||
declared tier L
|
||||
```
|
||||
|
||||
**Declaration 10 of chaos window 3**, and **the window's first 8**.
|
||||
The redraw returned the structural tier, so **the override changed
|
||||
nothing** — recorded in [`ChaosRollHistory.md`](../specs/ChaosRollHistory.md)
|
||||
because a roll that changes nothing is exactly the observation ADR-0017's
|
||||
retirement condition needs.
|
||||
|
||||
> **Tier L owes a separate-agent adversarial review** (InnerLoop Step 2),
|
||||
> and it has **not** been done. The maintainer asked for implementation
|
||||
> directly, so the code proceeds — but **no H1 result may go to
|
||||
> `ground-game` until that review has run.** Measurement that reaches the
|
||||
> game's owner is exactly what the review exists to check.
|
||||
|
||||
## What ground-game built, and what it asks of us
|
||||
|
||||
`ground-game` has packaged hypothesis **H1** as a *selectable rules
|
||||
variant*, not a patch:
|
||||
|
||||
- `editions/catalog.yaml` — `variant_id → path`, `default_variant: ground-darvo-r0`
|
||||
- `editions/experiments/h1-problem-stress/` — `VARIANT.md` (prose),
|
||||
`rules_delta.yaml` (machine-readable), overridden `Actions.csv` and
|
||||
`Rules_Text.csv`
|
||||
- design note `history/260807-attack-darvo-stress-design.md` with success
|
||||
criteria
|
||||
|
||||
Their note is explicit about our side:
|
||||
|
||||
> *"clay-borg **hardcodes** much of the rules kernel and **vendors**
|
||||
> selected CSVs. H1-A/B are **rules-kernel changes**, not Problem table
|
||||
> changes. CSV text alone is not executable in the current engine."*
|
||||
|
||||
**They are right, and F25 is the same observation from our side.**
|
||||
|
||||
## The two deltas
|
||||
|
||||
| id | phase | rule |
|
||||
|---|---|---|
|
||||
| **H1-A** | round end | if **any** Problem in play is unclaimed (face-up unsolved, hidden, **or Denied**), **each player +1 Stress** — *before* the clamp that arms DARVO |
|
||||
| **H1-B** | attack resolution | an Attack that resolves **and is not cancelled**, by an attacker whose Stress was **≥ 4 before that Attack's effects**, gives the attacker **−1 Stress**, after target and relation effects, then clamp |
|
||||
|
||||
**H1-B applies to the DARVO extra Attack too**, because it shares the
|
||||
resolution path.
|
||||
|
||||
## Task: selection
|
||||
|
||||
```task
|
||||
id: CB-WP-0038-T01
|
||||
status: done
|
||||
priority: high
|
||||
```
|
||||
|
||||
A variant is chosen, not compiled in.
|
||||
|
||||
**Controls:**
|
||||
- **the variant is part of game state and reaches the recording.** A
|
||||
scenario replayed under the wrong variant would diverge silently, and
|
||||
the recording is the artifact everything else rests on;
|
||||
- **baseline is the default**, and every existing scenario replays
|
||||
byte-identically — this is the load-bearing control, because a variant
|
||||
system that perturbs the baseline invalidates every measurement we have;
|
||||
- the catalog is **vendored with a digest**, like every other borrowed
|
||||
file.
|
||||
|
||||
**Done 2026-08-08.** `Variant` in `GroundState`, `#[serde(default)]` so
|
||||
every scenario written before variants existed loads as baseline — which
|
||||
is what it was. Set beside `mode`, before the hash, so a recording replays
|
||||
under the variant it was played under. `--variant` on `cb-play`.
|
||||
|
||||
**`baseline_is_bit_for_bit_what_it_was`** compares state hashes across
|
||||
2/3/6 seats and eight seeds. Selecting the baseline explicitly must equal
|
||||
not selecting anything, or every measurement this repo has is invalid.
|
||||
|
||||
## Task: the deltas in the kernel
|
||||
|
||||
```task
|
||||
id: CB-WP-0038-T02
|
||||
status: done
|
||||
priority: high
|
||||
```
|
||||
|
||||
**Controls:**
|
||||
- **each delta fails on its own**, by mutation;
|
||||
- **`rules_delta.yaml`'s `unchanged:` list is asserted, not trusted** —
|
||||
deal and thresholds, SOLVE legality, Support, GROUND modes, the DARVO
|
||||
stage table, starting Stress 2, two relation slots. That list is
|
||||
ground-game's claim about their own experiment, and it is checkable;
|
||||
- **"unclaimed" includes Denied and hidden**, which is the clause a
|
||||
careless reading drops.
|
||||
|
||||
**Done 2026-08-08.** Both mutation-proven on their own defect:
|
||||
|
||||
| mutation | what went red |
|
||||
|---|---|
|
||||
| "unclaimed" read as *face-up and unsolved* | *"every player takes the pressure, not just some"* |
|
||||
| attacker Stress read after the attack's effects, and soothing a cancelled Attack | *"a cancelled Attack still soothed the attacker"* |
|
||||
|
||||
**H1-A lands before the DARVO arm check**, per the delta's own ordering;
|
||||
applying it after would leave the pressure unable to arm anything for a
|
||||
round, which is the opposite of the hypothesis.
|
||||
|
||||
**`h1_changes_nothing_it_said_it_would_not`** asserts ground-game's
|
||||
`unchanged:` list across all five seat counts — deal, thresholds, starting
|
||||
Stress 2, relation slots, mode, deck. That list is their claim about their
|
||||
own experiment, and taking it on faith is the habit CB-WP-0037 ended.
|
||||
|
||||
## Task: re-run the panel
|
||||
|
||||
```task
|
||||
id: CB-WP-0038-T03
|
||||
status: done
|
||||
priority: high
|
||||
```
|
||||
|
||||
Their §3.2 criteria, on the same harness as RPT-0003.
|
||||
|
||||
**Controls:**
|
||||
- **baseline and H1 measured by the same instrument in the same run**, or
|
||||
the comparison is between two harnesses rather than two rule sets;
|
||||
- **a single policy's numbers are not a fact about the game**
|
||||
(RetrospectiveAnalysis §4.1) — the panel is plural or there is no result;
|
||||
- **report what fails to move.** H1 under-delivering is a result their
|
||||
§6 has a branch for, and reporting only the confirming half is how a
|
||||
measurement becomes advocacy.
|
||||
|
||||
**Done 2026-08-08, and the result is largely negative.** See
|
||||
[CB-EV-0030](../evidence/CB-EV-0030-h1-measured.md).
|
||||
|
||||
**A harness defect was caught first, and it mattered.** The first run
|
||||
showed `won`, `atk` and `darvo` all exactly `0` at 3+ seats under H1 —
|
||||
which is the signature of games being *discarded*, not lost, because
|
||||
`sweep` had `let Ok(g) = play(..) else { continue }` and never reported
|
||||
its game count. **Reporting "H1 makes the game unwinnable" when the truth
|
||||
might have been "our harness threw every H1 game away" would have been the
|
||||
ADR-0018 family aimed at another repo's design decision.** Instrumented:
|
||||
all 200 games ran in every cell. The zeros are real.
|
||||
Loading…
Add table
Add a link
Reference in a new issue