clay-borg/workplans/CB-WP-0038-h1-variant.md
tegwick a928b5925c
Some checks failed
ci / check (push) Failing after 3s
CB-WP-0038: variant selection, H1 implemented, and H1 measured
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>
2026-08-08 00:50:08 +02:00

151 lines
6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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.