clay-borg/editions/catalog.yaml
tegwick 3045eb03f8
Some checks failed
ci / check (push) Has been cancelled
CB-WP-0049 T02/T03: a seat that plays its objective, and F27 splits in two
objective() reads GroundState::score (now public) rather than restating
what winning is; a copy in the bot would disagree with the kernel the
first time ground-game rules on F28.

Working out WHERE the modes can differ was most of the task and it
bounds the result: SOLVE always claims for the actor, so own-score and
group-score want the same SOLVE nearly everywhere. That is a fact about
GROUND's action set, not a shortcoming of the bot. Two real divergences,
both readable off the table: SUPPORT regulates someone else (worth less
against a rival, worth MORE under coalitions where a Bond merges them
into my side), and SOLVE's value is the card's value, which greedy
ignores entirely.

THE RESULT — F27 splits in two:
  group success  UNCHANGED in 34 of 36 cells
  who wins       MOVES: BONDED COALITIONS at 4p goes 2.04 -> 2.98,
                 2.12 -> 3.29, 2.05 -> 3.01 winning seats per game

So "the competitive modes are scoring lenses over cooperative play" was
too strong and is withdrawn. The sharper claim: GROUND's scoring modes
change WHO WINS, not WHETHER THE GROUP SUCCEEDS. And the effect is
seat-band dependent -- 2p none, 4p largest, 6p none under coalitions;
two relation slots capping network growth is a candidate explanation and
is untested.

The panel now prints BOTH policies side by side. That was a correction
mid-task: the first version printed only the new one and I compared it
against a figure remembered from CB-WP-0047 -- a comparison against a
board nobody re-ran.

Control that makes the numbers mean anything: under SHARED GROUND the
two policies agree at all but <=2 decision points across 12 boards, so a
moving column is mode-awareness and not simply a different bot.

Also: two T01 tests keyed on `status: proposed`, which ground-game
renamed to `ready-for-implement` mid-session. They now find the module
by asking resolve() -- the structural property is ours and does not move
when another repo edits its vocabulary.

Also: `make vendor` replaces three hand re-vendors with a tool that
regenerates digests by walking editions/, and reports one-sided files
rather than resolving them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 23:31:11 +02:00

256 lines
9.7 KiB
YAML
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.

# GROUND edition catalog — schema 2: composable modules
# Docs: CATALOG.md
# clay-borg: select baseline + 0..N modules (≤1 per aspect), or a named profile.
schema_version: 2
# terminology: aspect (human) = former axis; modules remain module_id
updated: "2026-08-08"
default_baseline: ground-darvo-r0
default_profile: baseline
# ---------------------------------------------------------------------------
# Aspects — orthogonal design dimensions (formerly "axes"). At most one non-default module per aspect.
# ---------------------------------------------------------------------------
aspects:
- id: problem_stress
# legacy key: axis (same meaning)
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 aspects (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
selectable: true
status: baseline
dataset_id: GROUND-DARVO-CORE-0.1
title: "GROUND DARVO Edition — core r0"
summary: >
Print/playtest content. Modes, deal 6/9/12, thresholds 5/7/9.
Default modules on all aspects = r0 printed behaviour.
utility_estimate: >
Ship-default content. Stress has no problem pressure until a
problem_stress module is selected.
decision: none
# ---------------------------------------------------------------------------
# Modules — independent variations (one directory each)
# ---------------------------------------------------------------------------
modules:
# --- problem_stress ---
- module_id: problem_stress.none
aspect: 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
aspect: problem_stress
path: editions/modules/problem_stress/flat_any_open
is_default: false
selectable: true
status: measured
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
summary: >
+1 Stress to every seat if any Problem unclaimed (former H1-A).
utility_estimate: >
Reject as sole pressure: greedy 34p 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
aspect: 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: >
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
aspect: 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
aspect: 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
aspect: 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
aspect: end_condition
path: editions/modules/end_condition/hybrid_clear_collapse
is_default: false
selectable: true
status: ready-for-implement
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-5 ceiling (v0 frozen).
utility_estimate: Unimplemented in kernel — package ready for clay-borg.
decision: none
clay_borg_notes: >
v0 frozen in MODULE.md. Implement alone then profile scoped_plus_hybrid_end.
allow_proposed/ready-for-implement: refuse measure-as-green until kernel ships.
# --- problem_deal ---
- module_id: problem_deal.fixed_setup
aspect: 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
aspect: problem_deal
path: editions/modules/problem_deal/pressure_deck
is_default: false
selectable: true
status: ready-for-implement
rules_delta: editions/modules/problem_deal/pressure_deck/rules_delta.yaml
hypothesis_ref: history/260808-deal-end-sequences-design.md
summary: >
Reduced starters + Pressure deck draws; drawn cards 0 points (v0 frozen).
utility_estimate: Unimplemented in kernel — package ready for clay-borg.
decision: none
clay_borg_notes: >
v0 frozen in MODULE.md. Drawn point_value 0; thresholds unchanged.
Compose with problem_stress.scoped via profile scoped_plus_pressure_deck.
# ---------------------------------------------------------------------------
# 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 aspect 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-aspect 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