152 lines
6 KiB
Markdown
152 lines
6 KiB
Markdown
|
|
---
|
|||
|
|
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.
|