CB-WP-0047: all four boards, and every mode named on the page
Some checks failed
ci / check (push) Failing after 3s
Some checks failed
ci / check (push) Failing after 3s
The modes were already implemented; nothing had ever COMPARED them. The scenarios were not implemented at all: edition::deal has taken a scenario_id since it was written and the only caller passed the literal "SCN_01", so 15 of 20 Problem cards had never been dealt by anything. The seam was the whole mechanism and it sat unused, with nothing red because nothing asked. Scenario is now state (serde default SCN_01, so all 26 recordings replay unchanged), selected by preset `scn-03-4p` with `standard-Np` still meaning SCN_01, and by --scenario/SCENARIO= accepting ids, numbers or titles, validated against the edition rather than a pattern. The threshold now comes off the Scenario card, closing F25's hardcoded 5/7/9. The first version of that control was worthless and mutation said so: all four scenarios print 5/7/9, so reverting to the bands left it green. Split threshold_from() so it can be handed a card that disagrees. The header read `scoring CommonProblem` where the Mode card is titled COMMON PROBLEM, PERSONAL EDGE -- the defect CB-WP-0034 deleted from the move buttons, still standing on the line that says what winning means. The coverage probe was matching that Debug output and went red when it was fixed: third instance (CB-WP-0024, CB-WP-0034). Page now carries the premise, the mode's rules text, and the tiebreak. scenario-panel plays 4x3x3. Findings: SCN_01 and SCN_02 are the same board (identical cells, pinned by a characterisation test); SCN_04 is the hard board at 2p (52% vs 67/73%, the only deck needing two Repair); and group success is EXACTLY equal across all three modes in all 36 cells, because greedy never reads state.mode -- filed F27, the two competitive modes are scoring lenses over cooperative play. F28: SHARED GROUND's mastery subtracts penalties from the claimed COUNT where the mode card's shared score is claimed VALUE. Raised, not fixed; scoring is ground-game's to rule on. Also fixes design.py reporting a backticked path as no reproduction. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
1d3f1bfe60
commit
d30938b259
19 changed files with 1351 additions and 109 deletions
|
|
@ -1,98 +1,252 @@
|
|||
# Selectable GROUND edition / rules packages.
|
||||
# Schema docs: CATALOG.md
|
||||
# clay-borg: pin by variant_id → path (+ optional git_pin).
|
||||
# GROUND edition catalog — schema 2: composable modules
|
||||
# Docs: CATALOG.md
|
||||
# clay-borg: select baseline + 0..N modules (≤1 per axis), or a named profile.
|
||||
|
||||
schema_version: 1
|
||||
schema_version: 2
|
||||
updated: "2026-08-08"
|
||||
default_variant: ground-darvo-r0
|
||||
# H2 added; H1 remains selectable as reject-as-baseline control.
|
||||
default_baseline: ground-darvo-r0
|
||||
default_profile: baseline
|
||||
|
||||
packages:
|
||||
- variant_id: ground-darvo-r0
|
||||
# ---------------------------------------------------------------------------
|
||||
# Axes — orthogonal dimensions. At most one non-default module per axis.
|
||||
# ---------------------------------------------------------------------------
|
||||
axes:
|
||||
- id: problem_stress
|
||||
title: Problem → Stress routing
|
||||
default_module: problem_stress.none
|
||||
summary: >
|
||||
Whether and how unclaimed Problems raise Stress at Round End.
|
||||
|
||||
- id: attack_relief
|
||||
title: ATTACK self-soothing
|
||||
default_module: attack_relief.none
|
||||
summary: >
|
||||
Whether resolving ATTACK can reduce the attacker's Stress.
|
||||
|
||||
- id: end_condition
|
||||
title: How the game ends
|
||||
default_module: end_condition.fixed_rounds_5
|
||||
summary: >
|
||||
Fixed round clock vs clear-board / collapse / hybrid ends.
|
||||
|
||||
- id: problem_deal
|
||||
title: How Problems enter play
|
||||
default_module: problem_deal.fixed_setup
|
||||
summary: >
|
||||
Fixed setup deal only vs mid-game influx (pressure deck, etc.).
|
||||
|
||||
# Future axes (not yet registered): setup_difficulty, sequence_pacing,
|
||||
# ground_as_sequence, status_stress, competence_track.
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Baseline content package (CSV edition data)
|
||||
# ---------------------------------------------------------------------------
|
||||
baselines:
|
||||
- baseline_id: ground-darvo-r0
|
||||
path: editions/ground-darvo-r0
|
||||
kind: baseline
|
||||
base: null
|
||||
selectable: true
|
||||
status: baseline
|
||||
dataset_id: GROUND-DARVO-CORE-0.1
|
||||
title: "GROUND DARVO Edition — core r0"
|
||||
summary: >
|
||||
Playtest baseline. Surface + hidden 1..k deal; available 6/9/12;
|
||||
thresholds 5/7/9. Stress ledger has no problem pressure; ATTACK
|
||||
does not self-soothe.
|
||||
hypothesis_ref: null
|
||||
workplan_ref: null
|
||||
rules_delta: null
|
||||
changed_files: []
|
||||
Print/playtest content. Modes, deal 6/9/12, thresholds 5/7/9.
|
||||
Default modules on all axes = r0 printed behaviour.
|
||||
utility_estimate: >
|
||||
Ship-default. RPT-0003 + CB-EV-0031: under non-attacking competent
|
||||
policies, peak Stress held never exceeds start 2 — ATTACK is the
|
||||
sole inbound pressure. Keep pinned until a successor is accepted.
|
||||
Ship-default content. Stress has no problem pressure until a
|
||||
problem_stress module is selected.
|
||||
decision: none
|
||||
git_pin: null
|
||||
clay_borg_notes: >
|
||||
Vendor CSVs as today (Problems, Actions, Solutions, Modes, Tokens).
|
||||
Kernel implements printed r0 rules.
|
||||
|
||||
- variant_id: h1-problem-stress
|
||||
path: editions/experiments/h1-problem-stress
|
||||
kind: experiment
|
||||
base: ground-darvo-r0
|
||||
# ---------------------------------------------------------------------------
|
||||
# Modules — independent variations (one directory each)
|
||||
# ---------------------------------------------------------------------------
|
||||
modules:
|
||||
# --- problem_stress ---
|
||||
- module_id: problem_stress.none
|
||||
axis: problem_stress
|
||||
path: editions/modules/problem_stress/none
|
||||
is_default: true
|
||||
selectable: true
|
||||
status: baseline-default
|
||||
rules_delta: null
|
||||
summary: Unclaimed Problems do not raise Stress (r0).
|
||||
decision: none
|
||||
|
||||
- module_id: problem_stress.flat_any_open
|
||||
axis: problem_stress
|
||||
path: editions/modules/problem_stress/flat_any_open
|
||||
is_default: false
|
||||
selectable: true
|
||||
status: measured
|
||||
dataset_id: GROUND-DARVO-EXP-H1-0.1
|
||||
title: "H1 — problem pressure + high-stress ATTACK self-soothe"
|
||||
summary: >
|
||||
Two deltas only: (A) +1 Stress each player at Round End if any
|
||||
Problem remains unclaimed; (B) uncancelled ACT_ATTACK by a seat
|
||||
at Stress ≥4 gives that seat −1 Stress. Thresholds/deal unchanged.
|
||||
hypothesis_ref: history/260807-attack-darvo-stress-design.md
|
||||
workplan_ref: workplans/GROUND-WP-0006-h1-problem-stress-experiment.md
|
||||
rules_delta: editions/modules/problem_stress/flat_any_open/rules_delta.yaml
|
||||
legacy_experiment_ids: [h1-problem-stress]
|
||||
measurement_ref: reports/260808-clay-borg-h1-measured.md
|
||||
rules_delta: editions/experiments/h1-problem-stress/rules_delta.yaml
|
||||
changed_files:
|
||||
- Actions.csv
|
||||
- Rules_Text.csv
|
||||
- metadata.json
|
||||
utility_estimate: >
|
||||
Measured 2026-08-08 (CB-EV-0030/0031; instrument caveat applies).
|
||||
Direction right, magnitude wrong: H1-A is a solve-rate tax that
|
||||
competent seats absorb with GROUND (Stress ~3); H1-B never fires
|
||||
for them. DARVO arms for unregulated seats; group wins collapse
|
||||
to 0 at 3p+ under greedy SHARED GROUND. Do not promote as-is.
|
||||
decision: reject-as-baseline
|
||||
# Package stays selectable for regression compare; not a ship pin.
|
||||
git_pin: null
|
||||
clay_borg_notes: >
|
||||
Kernel implements H1-A/H1-B. Keep for A/B against successors (H2…).
|
||||
|
||||
- variant_id: h2-scoped-problem-stress
|
||||
path: editions/experiments/h2-scoped-problem-stress
|
||||
kind: experiment
|
||||
base: ground-darvo-r0
|
||||
selectable: true
|
||||
status: experimental
|
||||
dataset_id: GROUND-DARVO-EXP-H2-0.1
|
||||
title: "H2 — scoped problem stress (personal / bond / global)"
|
||||
summary: >
|
||||
Unclaimed Problems apply +1 End Stress only to stress_scope:
|
||||
personal=owner, bond=owner's Bond network, global=all. Surface
|
||||
global; priority 3 is bond (in play at 3p+). Anyone may SOLVE any
|
||||
card. Not stacked on H1; no ATTACK self-soothe.
|
||||
hypothesis_ref: history/260808-h2-scoped-problem-stress.md
|
||||
workplan_ref: workplans/GROUND-WP-0007-h2-scoped-problem-stress.md
|
||||
measurement_ref: null
|
||||
rules_delta: editions/experiments/h2-scoped-problem-stress/rules_delta.yaml
|
||||
changed_files:
|
||||
- Problems.csv
|
||||
- Rules_Text.csv
|
||||
- metadata.json
|
||||
+1 Stress to every seat if any Problem unclaimed (former H1-A).
|
||||
utility_estimate: >
|
||||
Unmeasured. Expected: stress variance up; group wins at 3–4p much
|
||||
better than H1; bond cards create joint SOLVE incentive in networks.
|
||||
decision: none
|
||||
git_pin: null
|
||||
Reject as sole pressure: greedy 3–4p wins → 0. Keep for A/B control.
|
||||
decision: reject-as-baseline
|
||||
clay_borg_notes: Former H1-A; implement without H1-B unless attack_relief also selected.
|
||||
|
||||
- module_id: problem_stress.scoped
|
||||
axis: problem_stress
|
||||
path: editions/modules/problem_stress/scoped
|
||||
is_default: false
|
||||
selectable: true
|
||||
status: measured
|
||||
rules_delta: editions/modules/problem_stress/scoped/rules_delta.yaml
|
||||
data_overlays: [Problems.csv, Rules_Text.csv]
|
||||
legacy_experiment_ids: [h2-scoped-problem-stress]
|
||||
measurement_ref: reports/260808-clay-borg-h2-measured.md
|
||||
hypothesis_ref: history/260808-h2-scoped-problem-stress.md
|
||||
summary: >
|
||||
+1 Stress per unclaimed Problem to stress_scope (personal/bond/global).
|
||||
utility_estimate: >
|
||||
Scoping works (RPT-0005). Keep; candidate promote with other axes later.
|
||||
decision: keep-as-experiment
|
||||
clay_borg_notes: >
|
||||
Implement rules_delta H2-SCOPE, H2-OWN, H2-A, H2-SOLVE on base r0.
|
||||
Do not also apply H1 deltas. Problems.csv adds stress_scope column.
|
||||
Report bond-card SOLVE rates and stress variance vs r0 and h1.
|
||||
Prefer path editions/modules/problem_stress/scoped. Use with_variant()/owners.
|
||||
legacy_experiment_id h2-scoped-problem-stress remains an alias profile.
|
||||
|
||||
# --- attack_relief ---
|
||||
- module_id: attack_relief.none
|
||||
axis: attack_relief
|
||||
path: editions/modules/attack_relief/none
|
||||
is_default: true
|
||||
selectable: true
|
||||
status: baseline-default
|
||||
rules_delta: null
|
||||
summary: ATTACK does not self-soothe (r0).
|
||||
decision: none
|
||||
|
||||
- module_id: attack_relief.self_soothe_ge4
|
||||
axis: attack_relief
|
||||
path: editions/modules/attack_relief/self_soothe_ge4
|
||||
is_default: false
|
||||
selectable: true
|
||||
status: measured-as-combo
|
||||
rules_delta: editions/modules/attack_relief/self_soothe_ge4/rules_delta.yaml
|
||||
legacy_experiment_ids: [h1-problem-stress]
|
||||
measurement_ref: reports/260808-clay-borg-h1-measured.md
|
||||
summary: Uncancelled ATTACK at Stress ≥4 → attacker −1 Stress (former H1-B).
|
||||
utility_estimate: >
|
||||
Alone unmeasured. With flat problem stress, dead for competent play.
|
||||
Re-measure with problem_stress.scoped via profile scoped_plus_attack_soothe.
|
||||
decision: none
|
||||
clay_borg_notes: Independent of problem_stress; compose explicitly.
|
||||
|
||||
# --- end_condition ---
|
||||
- module_id: end_condition.fixed_rounds_5
|
||||
axis: end_condition
|
||||
path: editions/modules/end_condition/fixed_rounds_5
|
||||
is_default: true
|
||||
selectable: true
|
||||
status: baseline-default
|
||||
rules_delta: null
|
||||
summary: Always 5 rounds then threshold scoring (r0).
|
||||
decision: none
|
||||
|
||||
- module_id: end_condition.hybrid_clear_collapse
|
||||
axis: end_condition
|
||||
path: editions/modules/end_condition/hybrid_clear_collapse
|
||||
is_default: false
|
||||
selectable: true
|
||||
status: proposed
|
||||
rules_delta: editions/modules/end_condition/hybrid_clear_collapse/rules_delta.yaml
|
||||
hypothesis_ref: history/260808-deal-end-sequences-design.md
|
||||
summary: >
|
||||
End on board clear, group collapse, or round ceiling (draft rules).
|
||||
utility_estimate: Unimplemented — draft only.
|
||||
decision: none
|
||||
clay_borg_notes: Kernel pending; do not claim measured until implemented.
|
||||
|
||||
# --- problem_deal ---
|
||||
- module_id: problem_deal.fixed_setup
|
||||
axis: problem_deal
|
||||
path: editions/modules/problem_deal/fixed_setup
|
||||
is_default: true
|
||||
selectable: true
|
||||
status: baseline-default
|
||||
rules_delta: null
|
||||
summary: Surface + hidden 1..k at setup only (r0).
|
||||
decision: none
|
||||
|
||||
- module_id: problem_deal.pressure_deck
|
||||
axis: problem_deal
|
||||
path: editions/modules/problem_deal/pressure_deck
|
||||
is_default: false
|
||||
selectable: true
|
||||
status: proposed
|
||||
rules_delta: editions/modules/problem_deal/pressure_deck/rules_delta.yaml
|
||||
hypothesis_ref: history/260808-deal-end-sequences-design.md
|
||||
summary: >
|
||||
Small start set + mid-game draws from Pressure deck (draft).
|
||||
utility_estimate: Unimplemented — draft only.
|
||||
decision: none
|
||||
clay_borg_notes: >
|
||||
Kernel pending. Recommended compose with problem_stress.scoped.
|
||||
v0 draft uses 0-point drawn cards.
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Profiles — named compositions (convenience; not a second rules source)
|
||||
# Selection = baseline + modules list. Defaults fill missing axes.
|
||||
# ---------------------------------------------------------------------------
|
||||
profiles:
|
||||
- profile_id: baseline
|
||||
title: Pure r0
|
||||
modules: []
|
||||
summary: All axis defaults — printed ground-darvo-r0 behaviour.
|
||||
|
||||
- profile_id: h1
|
||||
title: Legacy H1 (flat problem stress + attack soothe)
|
||||
modules:
|
||||
- problem_stress.flat_any_open
|
||||
- attack_relief.self_soothe_ge4
|
||||
legacy_experiment_id: h1-problem-stress
|
||||
summary: Equivalent to old monolithic experiment h1-problem-stress.
|
||||
decision: reject-as-baseline
|
||||
|
||||
- profile_id: h2
|
||||
title: Legacy H2 (scoped problem stress only)
|
||||
modules:
|
||||
- problem_stress.scoped
|
||||
legacy_experiment_id: h2-scoped-problem-stress
|
||||
summary: Equivalent to old monolithic experiment h2-scoped-problem-stress.
|
||||
decision: keep-as-experiment
|
||||
|
||||
- profile_id: scoped_plus_attack_soothe
|
||||
title: Scoped stress + ATTACK self-soothe
|
||||
modules:
|
||||
- problem_stress.scoped
|
||||
- attack_relief.self_soothe_ge4
|
||||
summary: First intentional multi-axis combo after modular catalog.
|
||||
status: unmeasured
|
||||
|
||||
- profile_id: scoped_plus_hybrid_end
|
||||
title: Scoped stress + hybrid end (when end module ships)
|
||||
modules:
|
||||
- problem_stress.scoped
|
||||
- end_condition.hybrid_clear_collapse
|
||||
summary: Requires end_condition.hybrid_clear_collapse kernel support.
|
||||
status: proposed
|
||||
|
||||
- profile_id: scoped_plus_pressure_deck
|
||||
title: Scoped stress + pressure deck (when deal module ships)
|
||||
modules:
|
||||
- problem_stress.scoped
|
||||
- problem_deal.pressure_deck
|
||||
summary: Requires problem_deal.pressure_deck kernel support.
|
||||
status: proposed
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Legacy experiment paths (still on disk; prefer modules + profiles)
|
||||
# ---------------------------------------------------------------------------
|
||||
legacy_experiments:
|
||||
- experiment_id: h1-problem-stress
|
||||
path: editions/experiments/h1-problem-stress
|
||||
equivalent_profile: h1
|
||||
note: Prefer profile h1 or modules problem_stress.flat_any_open + attack_relief.self_soothe_ge4
|
||||
|
||||
- experiment_id: h2-scoped-problem-stress
|
||||
path: editions/experiments/h2-scoped-problem-stress
|
||||
equivalent_profile: h2
|
||||
note: Prefer profile h2 or module problem_stress.scoped
|
||||
|
|
|
|||
|
|
@ -2,7 +2,8 @@
|
|||
|
||||
| | |
|
||||
|---|---|
|
||||
| **variant_id** | `h1-problem-stress` |
|
||||
| **variant_id** | `h1-problem-stress` (**legacy** — prefer profile `h1` = `problem_stress.flat_any_open` + `attack_relief.self_soothe_ge4`) |
|
||||
| **modules** | flat problem stress + attack self-soothe (see `editions/modules/`) |
|
||||
| **base** | `ground-darvo-r0` |
|
||||
| **status** | measured — reject as baseline (2026-08-08); keep for A/B |
|
||||
| **measurement** | [`../../../reports/260808-clay-borg-h1-measured.md`](../../../reports/260808-clay-borg-h1-measured.md) |
|
||||
|
|
|
|||
|
|
@ -2,9 +2,10 @@
|
|||
|
||||
| | |
|
||||
|---|---|
|
||||
| **variant_id** | `h2-scoped-problem-stress` |
|
||||
| **variant_id** | `h2-scoped-problem-stress` (**legacy** — prefer module `problem_stress.scoped` / profile `h2`) |
|
||||
| **module** | [`../../modules/problem_stress/scoped/`](../../modules/problem_stress/scoped/) |
|
||||
| **base** | `ground-darvo-r0` (not stacked on H1) |
|
||||
| **status** | experimental |
|
||||
| **status** | measured — keep-as-experiment |
|
||||
| **catalog** | [`../../catalog.yaml`](../../catalog.yaml) |
|
||||
| **design note** | [`../../../history/260808-h2-scoped-problem-stress.md`](../../../history/260808-h2-scoped-problem-stress.md) |
|
||||
| **workplan** | [`../../../workplans/GROUND-WP-0007-h2-scoped-problem-stress.md`](../../../workplans/GROUND-WP-0007-h2-scoped-problem-stress.md) |
|
||||
|
|
|
|||
|
|
@ -58,16 +58,16 @@ the adversarial review ([CB-REV-0001](../../reviews/CB-REV-0001-h1.md))
|
|||
reported it unverified and it was a real gap.
|
||||
|
||||
```
|
||||
sha256 c469f984c3147861815e8fbd67cf1254de73368fad1654f4177f740c0c280499 ../catalog.yaml
|
||||
sha256 cd0c0db9eef5e9f94df6c1b26837c5e800d9eb8c79ee113a537767aa88934c76 ../catalog.yaml
|
||||
sha256 4c81bae21d2ecb70c7424fa17445246a9b551b10e258d448634816c564e28f09 ../experiments/h2-scoped-problem-stress/Problems.csv
|
||||
sha256 8ed8deb7ad142de1bda70dc11add339f742e8c12ac1f02d5f7c7ec8f17f77b1d ../experiments/h2-scoped-problem-stress/Rules_Text.csv
|
||||
sha256 b2db91edc6798efca1ccf0b048bb0d7cb324e808e01d636ebca813527bcd0db2 ../experiments/h2-scoped-problem-stress/VARIANT.md
|
||||
sha256 b0ffea41820ef35960d8c75ff0a734370a29a738e49fda74851fe5c2daafe53e ../experiments/h2-scoped-problem-stress/VARIANT.md
|
||||
sha256 abf994f585fdfa9b2822614a7961e98141cded6a91c446916ff7fd48642de0a7 ../experiments/h2-scoped-problem-stress/metadata.json
|
||||
sha256 8dc569b2ae62f88f7f64e282bc6bba3dbcc3ffcad276591baafbdd24cb6c16b7 ../experiments/h2-scoped-problem-stress/rules_delta.yaml
|
||||
sha256 f58e81f84ea2b0d16e39932261eb3f3d9890345cdf37ad6f0b3abc00636840be ../experiments/h1-problem-stress/rules_delta.yaml
|
||||
sha256 7b1cc0149122b855e827bc930576ed165bf7dd8d62707e845a9e514ce3521f8e ../experiments/h1-problem-stress/Actions.csv
|
||||
sha256 62785f5e7e245c60171624d15de2f40187a44fec54f93c7d9705cf52584b1078 ../experiments/h1-problem-stress/Rules_Text.csv
|
||||
sha256 b2714210c142f1d6d5bed8f9a795019e51829c627f9599ac0ebfa04ef60a37a5 ../experiments/h1-problem-stress/VARIANT.md
|
||||
sha256 49897a68056643a8cfccff32c9e4a9811018b4e4689b90a85124a487f2318369 ../experiments/h1-problem-stress/VARIANT.md
|
||||
sha256 443199db94601cc889557e5e86823f374dbfdf875962fc84f95c01865605101c ../experiments/h1-problem-stress/metadata.json
|
||||
```
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue