clay-borg/workplans/CB-WP-0038-h1-variant.md

156 lines
6.3 KiB
Markdown
Raw Normal View History

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
---
id: CB-WP-0038
kind: product
title: "Variant selection, and H1"
status: done
state_hub_workstream_id: "0976d470-7ec4-446d-827e-3a79c95ae63d"
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
---
# 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
state_hub_task_id: "20d9c7ca-187e-44f8-96ee-7f32f948c092"
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
```
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
state_hub_task_id: "19c893b7-443f-48e4-b85a-61686df98343"
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
```
**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
state_hub_task_id: "03566bc7-2000-4a39-b8f8-c02de0a12c5a"
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
```
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.