diff --git a/HANDOFF.md b/HANDOFF.md new file mode 100644 index 0000000..a38fdff --- /dev/null +++ b/HANDOFF.md @@ -0,0 +1,129 @@ +# Handoff — ground-game (2026-08-12) + +Written for the next agent/session. Generated `.custodian-brief.md` may say +*no active workstreams* and still be right about *tasks* — this file says +**what not to misread** and **what to pick up**. + +**Domain:** consumer · **Repo:** ground-game · **Agent inbox:** `ground-game` +**Sister:** clay-borg (engine/sim; design authority defers *here*) + +--- + +## One-line state + +Product repo is **clean of open formal workplans**. Catalog **schema 2** +(aspects × modules × profiles) is the rules-variation contract. clay-borg +is integrating configurations (CB-WP-0048). Several clay-borg *reports* +are filed under `reports/` — **RPT-0007 needs a disposition pass** next. + +--- + +## Orient next session (order) + +1. `cat HANDOFF.md` (this file) then `cat .custodian-brief.md` +2. Inbox: + `curl -s "http://127.0.0.1:8000/messages/?to_agent=ground-game&unread_only=true"` +3. Skim recent reports (newest first): + `ls -lt reports/` +4. Catalog contract: `editions/CATALOG.md`, `editions/ASPECTS.md`, `editions/catalog.yaml` +5. If clay-borg work: sibling `../clay-borg/HANDOFF.md` and CB-RES-0010 + +--- + +## Finished this multi-day stretch (do not reopen casually) + +| ID | Outcome | +|----|---------| +| WP-0002 / 0003 / 0004 | Finished earlier (rulings, engine mode playtest, threshold arithmetic) | +| WP-0005 | **Finished:** Standard thresholds only; no Learning/Mastery cards | +| WP-0006 | **Finished:** H1 reject-as-baseline (flat pressure); package kept for A/B | +| WP-0007 | **Finished:** `problem_stress.scoped` keep-as-experiment; not promoted to r0 | +| WP-0008 | **Finished:** schema 2 aspects/modules/profiles; hybrid end + pressure deck **ready-for-implement** | +| ADHOC-2026-08-08 | **Finished:** mastery=points; SCN_02 suit retune; SCN_04 left hard | + +--- + +## Catalog / design-space (authoritative here) + +```text +configuration = baseline (ground-darvo-r0) + × one module per aspect +``` + +| Aspect | Key modules | +|--------|-------------| +| `problem_stress` | `none` · `flat_any_open` (reject) · **`scoped`** (keep) | +| `attack_relief` | `none` · `self_soothe_ge4` (needs problem_stress to *reach*) | +| `end_condition` | `fixed_rounds_5` · `hybrid_clear_collapse` (ready-for-implement) | +| `problem_deal` | `fixed_setup` · `pressure_deck` (ready-for-implement) | + +Profiles: `h1`, `h2`, `scoped_plus_attack_soothe`, `scoped_plus_hybrid_end`, +`scoped_plus_pressure_deck`. + +**Do not** silently edit frozen r0 `point_value` / `required_solution` +(GROUND-WP-0002 T01). Content bumps → new revision directory. + +--- + +## Reports — trust carefully + +| Report | Topic | Disposition status | +|--------|--------|-------------------| +| RPT-0003 | Modes / ATTACK value | Filed; WP-0003 closed on engine path | +| RPT-0004 | H1 measured | Reject H1-A stands | +| RPT-0005 | H2 measured | Scoping works; keep module | +| RPT-0006 | All boards × modes | Dispositions filed; SCN_02 retuned 2026-08-09 | +| **RPT-0007** | **H1-B correction** | **On disk; needs formal review/reply next** | + +### RPT-0007 (unread disposition — pick up first) + +clay-borg correction: H1-B was never measured under bots that never +attacked; once a gate-attack probe + problem_stress is present, self-soothe +**does** fire and cuts DARVO arms / raises probe wins slightly. **Do not +reopen H1 as a package** (H1-A still kills group wins). Open ask: + +> Catalog **preconditions / reachability** on modules so “unreachable in +> this configuration” is not misread as “module is inert.” + +Also still open from RPT-0006/0007 prose: weak competitive-mode testing +(no rival model); scoped stress unreadable in round 1 when only Surface is +up — measurement hygiene, not automatic design bugs. + +--- + +## Content note (SCN_02) + +2026-08-09: SCN_02 suits retuned so it is not a mechanical twin of SCN_01 +(`history/260809-scn02-mechanical-distinct.md`). clay-borg must re-vendor +`Problems.csv` digests. SCN_04 remains harder at 2p (double Repair) by choice. + +Mastery rating: **points**, not card count (`Modes.csv` MODE_COOP). + +--- + +## Suggested next work (when returning) + +1. **Triage RPT-0007** — reply clay-borg; catalog field for module + preconditions if agreed; update `attack_relief` utility notes. +2. Optional: `consumed_files` on remaining modules (process hygiene). +3. Wait on clay-borg for hybrid end / pressure deck kernel + profile panels + before promoting `scoped` into baseline r1. +4. Do **not** invent ATTACK “should pay” or mode difficulty without new + evidence; F17 still design judgement. + +--- + +## Hub hygiene + +- Agent: `ground-game` +- Topic id: `4c2e5315-2cb9-447c-9d16-a39bdb0aabd0` +- After workplan edits: `statehub fix-consistency` +- Progress: `POST /progress/` with author + +--- + +## Sister repo + +clay-borg owns simulation, panels, configuration selector. ground-game owns +rules truth, edition CSV, catalog modules. Claude’s clay-borg hall entry +and `clay-borg/HANDOFF.md` cover the engine side of the same week. diff --git a/SCOPE.md b/SCOPE.md index 0ec839a..ee61118 100644 --- a/SCOPE.md +++ b/SCOPE.md @@ -4,7 +4,7 @@ > in design or delivery *now*. Counterpart: [`INTENT.md`](INTENT.md) (stable / > aspirational). -**Last updated:** 2026-07-31 +**Last updated:** 2026-08-07 --- @@ -49,6 +49,10 @@ must outrank partnership. - Glossary and rules-text consistency across CSV sheets. - Safety/safeguards language for the core set (non-clinical framing). - Edition packaging notes (zip, metadata, version bumps). +- **Rules modules by aspect** under `editions/modules/`, indexed by + `editions/catalog.yaml` (schema 2) and mapped in `editions/ASPECTS.md`. + Profiles compose modules (H1/H2 legacy → profiles `h1` / `h2`). + Compare / keep / reject before promoting into baseline `ground-darvo-rN`. --- diff --git a/WORK-RECORDS.md b/WORK-RECORDS.md index cf687cf..9d15420 100644 --- a/WORK-RECORDS.md +++ b/WORK-RECORDS.md @@ -8,11 +8,19 @@ | Kind | ID | Status | Lane | Source | | --- | --- | --- | --- | --- | +| workplan | ADHOC-2026-08-08 | finished | — | workplans/ADHOC-2026-08-08.md | | workplan | GROUND-WP-0001 | done | — | workplans/GROUND-WP-0001-statehub-bootstrap.md | | workplan | GROUND-WP-0002 | finished | — | workplans/GROUND-WP-0002-rulings-clay-borg-is-blocked-on.md | -| workplan | GROUND-WP-0003 | ready | — | workplans/GROUND-WP-0003-playtest-semi-and-coalitions.md | +| workplan | GROUND-WP-0003 | finished | — | workplans/GROUND-WP-0003-playtest-semi-and-coalitions.md | | workplan | GROUND-WP-0004 | finished | — | workplans/GROUND-WP-0004-the-threshold-ruling-rests-on-a-bad-premise.md | -| workplan | GROUND-WP-0005 | active | — | workplans/GROUND-WP-0005-difficulty-tiers-and-pressure-dial.md | +| workplan | GROUND-WP-0005 | finished | — | workplans/GROUND-WP-0005-difficulty-tiers-and-pressure-dial.md | +| workplan | GROUND-WP-0006 | finished | — | workplans/GROUND-WP-0006-h1-problem-stress-experiment.md | +| workplan | GROUND-WP-0007 | finished | — | workplans/GROUND-WP-0007-h2-scoped-problem-stress.md | +| workplan | GROUND-WP-0008 | finished | — | workplans/GROUND-WP-0008-composable-rules-modules.md | +| task | ADHOC-2026-08-08-T01 | done | — | workplans/ADHOC-2026-08-08.md | +| task | ADHOC-2026-08-08-T02 | done | — | workplans/ADHOC-2026-08-08.md | +| task | ADHOC-2026-08-08-T03 | cancel | — | workplans/ADHOC-2026-08-08.md | +| task | ADHOC-2026-08-08-T04 | done | — | workplans/ADHOC-2026-08-08.md | | task | GROUND-WP-0001-T01 | done | — | workplans/GROUND-WP-0001-statehub-bootstrap.md | | task | GROUND-WP-0001-T02 | done | — | workplans/GROUND-WP-0001-statehub-bootstrap.md | | task | GROUND-WP-0001-T03 | done | — | workplans/GROUND-WP-0001-statehub-bootstrap.md | @@ -21,12 +29,26 @@ | task | GROUND-WP-0002-T03 | done | — | workplans/GROUND-WP-0002-rulings-clay-borg-is-blocked-on.md | | task | GROUND-WP-0002-T04 | done | — | workplans/GROUND-WP-0002-rulings-clay-borg-is-blocked-on.md | | task | GROUND-WP-0002-T05 | done | — | workplans/GROUND-WP-0002-rulings-clay-borg-is-blocked-on.md | -| task | GROUND-WP-0003-T01 | todo | — | workplans/GROUND-WP-0003-playtest-semi-and-coalitions.md | -| task | GROUND-WP-0003-T02 | todo | — | workplans/GROUND-WP-0003-playtest-semi-and-coalitions.md | -| task | GROUND-WP-0003-T03 | todo | — | workplans/GROUND-WP-0003-playtest-semi-and-coalitions.md | -| task | GROUND-WP-0003-T04 | todo | — | workplans/GROUND-WP-0003-playtest-semi-and-coalitions.md | -| task | GROUND-WP-0003-T05 | todo | — | workplans/GROUND-WP-0003-playtest-semi-and-coalitions.md | +| task | GROUND-WP-0003-T01 | done | — | workplans/GROUND-WP-0003-playtest-semi-and-coalitions.md | +| task | GROUND-WP-0003-T02 | done | — | workplans/GROUND-WP-0003-playtest-semi-and-coalitions.md | +| task | GROUND-WP-0003-T03 | done | — | workplans/GROUND-WP-0003-playtest-semi-and-coalitions.md | +| task | GROUND-WP-0003-T04 | done | — | workplans/GROUND-WP-0003-playtest-semi-and-coalitions.md | +| task | GROUND-WP-0003-T05 | done | — | workplans/GROUND-WP-0003-playtest-semi-and-coalitions.md | | task | GROUND-WP-0004-T01 | done | — | workplans/GROUND-WP-0004-the-threshold-ruling-rests-on-a-bad-premise.md | | task | GROUND-WP-0004-T02 | done | — | workplans/GROUND-WP-0004-the-threshold-ruling-rests-on-a-bad-premise.md | -| task | GROUND-WP-0005-T01 | wait | — | workplans/GROUND-WP-0005-difficulty-tiers-and-pressure-dial.md | -| task | GROUND-WP-0005-T02 | wait | — | workplans/GROUND-WP-0005-difficulty-tiers-and-pressure-dial.md | +| task | GROUND-WP-0005-T01 | done | — | workplans/GROUND-WP-0005-difficulty-tiers-and-pressure-dial.md | +| task | GROUND-WP-0005-T02 | cancel | — | workplans/GROUND-WP-0005-difficulty-tiers-and-pressure-dial.md | +| task | GROUND-WP-0006-T01 | done | — | workplans/GROUND-WP-0006-h1-problem-stress-experiment.md | +| task | GROUND-WP-0006-T02 | done | — | workplans/GROUND-WP-0006-h1-problem-stress-experiment.md | +| task | GROUND-WP-0006-T03 | cancel | — | workplans/GROUND-WP-0006-h1-problem-stress-experiment.md | +| task | GROUND-WP-0006-T04 | done | — | workplans/GROUND-WP-0006-h1-problem-stress-experiment.md | +| task | GROUND-WP-0006-T05 | done | — | workplans/GROUND-WP-0006-h1-problem-stress-experiment.md | +| task | GROUND-WP-0007-T01 | done | — | workplans/GROUND-WP-0007-h2-scoped-problem-stress.md | +| task | GROUND-WP-0007-T02 | done | — | workplans/GROUND-WP-0007-h2-scoped-problem-stress.md | +| task | GROUND-WP-0007-T03 | cancel | — | workplans/GROUND-WP-0007-h2-scoped-problem-stress.md | +| task | GROUND-WP-0007-T04 | done | — | workplans/GROUND-WP-0007-h2-scoped-problem-stress.md | +| task | GROUND-WP-0007-T05 | done | — | workplans/GROUND-WP-0007-h2-scoped-problem-stress.md | +| task | GROUND-WP-0008-T01 | done | — | workplans/GROUND-WP-0008-composable-rules-modules.md | +| task | GROUND-WP-0008-T02 | done | — | workplans/GROUND-WP-0008-composable-rules-modules.md | +| task | GROUND-WP-0008-T03 | cancel | — | workplans/GROUND-WP-0008-composable-rules-modules.md | +| task | GROUND-WP-0008-T04 | done | — | workplans/GROUND-WP-0008-composable-rules-modules.md | diff --git a/editions/ASPECTS.md b/editions/ASPECTS.md new file mode 100644 index 0000000..b449014 --- /dev/null +++ b/editions/ASPECTS.md @@ -0,0 +1,146 @@ +# Aspects of the game — design space for GROUND + +**Authority:** this file + [`catalog.yaml`](catalog.yaml) `aspects:` list. +**Catalog contract:** [`CATALOG.md`](CATALOG.md) +**Research (simulator side):** clay-borg `research/CB-RES-0010-game-aspects-and-design-space.md` + +An **aspect** is an orthogonal **design dimension** of the game: a family of +questions you can answer independently when defining or varying rules. +A **module** is one concrete answer on one aspect. A **profile** is a named +point in multi-aspect space (a combination of modules). + +Terminology: **aspect** is the human and catalog term (schema 2). Older +text said *axis*; treat them as synonyms until references are gone. + +This is **game design structure**, not a game-theory taxonomy. Game theory +supplies formal objects (players, actions, payoffs, information) used when +*analyzing* a configuration; it does not list edition-level modules. + +--- + +## Vocabulary + +| Term | Meaning | +|------|---------| +| **Aspect** | A dimension of design space (e.g. how the game ends, how stress is routed). | +| **Module** | One implementable choice for an aspect (`problem_stress.scoped`). | +| **Default module** | The r0 / printed answer when no experimental module is selected. | +| **Profile** | Named list of modules (e.g. `h2`, `scoped_plus_attack_soothe`). | +| **Baseline** | Content package (`ground-darvo-r0`) + all default modules. | +| **Configuration** | Baseline + resolved module list — what a sim or table actually plays. | + +**Rule:** at most **one module per aspect**. Cross-aspect behaviour is an +explicit **profile**, never a silent dependency inside a single module. + +--- + +## Full aspect map for GROUND + +Aspects marked **modular** have entries under `editions/modules/`. +Aspects marked **fixed (r0)** are part of the baseline until someone +proposes a competing module. +Aspects marked **product** may never need a kernel module. + +### A. Structure — when and how the session runs + +| Aspect id | Question | GROUND today | Modular? | +|-----------|----------|--------------|----------| +| `player_structure` | Who plays? seats? teams? | 2–6 seats; modes redefine who wins | fixed (r0) | +| `objective_scoring` | What is success / who wins? | Modes: co-op / semi / coalition + thresholds | fixed (r0 modes cards) | +| `turn_time_structure` | How does play advance? | Simultaneous select–reveal–resolve; Lead | fixed (r0) | +| `end_condition` | When does the game stop? | Fixed 5 rounds + score | **modular** | +| `setup` | What is on the table at start? | Scenario + mode; mats; start Stress 2 | fixed (r0); future difficulty card | +| `information` | What is hidden vs public? | Hidden Problems; face-down actions; DENY | fixed (r0) | + +### B. Content economy — what enters play + +| Aspect id | Question | GROUND today | Modular? | +|-----------|----------|--------------|----------| +| `problem_deal` | How do Problems enter play? | Surface + hidden 1..k at setup | **modular** | +| `solution_economy` | Hands, draws, suits | Solution deck; INVESTIGATE draws | fixed (r0) | +| `action_set` | What may a seat choose? | Investigate, Solve, Support, Attack, GROUND | fixed (r0) | +| `legality_filters` | What is offerable when? | SOLVE legality; Stress 4–5 gate | fixed (r0 rulings) | + +### C. Pressure and regulation + +| Aspect id | Question | GROUND today | Modular? | +|-----------|----------|--------------|----------| +| `individual_state` | Stress, Freedom, arming | Stress 0–5; Freedom token | fixed (r0) | +| `problem_stress` | Unclaimed Problems → who gets Stress? | None (until module) | **modular** | +| `interaction_stress` | Attack/Support stress numbers | As printed on Actions | fixed (r0) | +| `attack_relief` | Does ATTACK soothe the attacker? | No | **modular** | +| `reflex_sequences` | Multi-round binding chains | DARVO DENY→ATTACK→REVERSE | fixed (r0); future pacing module | +| `regulation_practices` | How you exit pressure | GROUND GR/OU/ND; Bond Support | fixed (r0); future GROUND-sequence module | + +### D. Relationships + +| Aspect id | Question | GROUND today | Modular? | +|-----------|----------|--------------|----------| +| `relation_structure` | Bonds, Rivalries, slots | 2 slots; Bond/Rivalry | fixed (r0) | +| `relation_scoring` | Do networks win? | Coalition mode | under `objective_scoring` / modes | +| `relation_stress` | Shared liability via Bonds | Bond-scope under `problem_stress.scoped` | via problem_stress modules | + +### E. Product and frame (often outside kernel) + +| Aspect id | Question | GROUND today | Modular? | +|-----------|----------|--------------|----------| +| `scenario_fiction` | Thematic conflict | Scenarios.csv | content, not rules module | +| `safety_teaching_frame` | How DARVO is framed | Rules_Text safety; INTENT | product | +| `difficulty_accessibility` | Learning vs mastery | **WP-0005 finished:** Standard thresholds only; dial via `problem_stress` / `problem_deal` modules, not Learning/Mastery threshold cards | future if needed | +| `medium` | Print vs digital | Edition CSV vs clay-borg | product | + +--- + +## Registered aspects (have module directories) + +These appear in `catalog.yaml` `aspects:` and accept non-default modules: + +| Aspect | Default module | Other modules | +|--------|----------------|---------------| +| `problem_stress` | `problem_stress.none` | `flat_any_open`, `scoped` | +| `attack_relief` | `attack_relief.none` | `self_soothe_ge4` | +| `end_condition` | `end_condition.fixed_rounds_5` | `hybrid_clear_collapse` (proposed) | +| `problem_deal` | `problem_deal.fixed_setup` | `pressure_deck` (proposed) | + +--- + +## Configuration as a vector + +```text +playable configuration = + baseline content (ground-darvo-rN) + × problem_stress + × attack_relief + × end_condition + × problem_deal + × …future modular aspects… +``` + +Missing aspects use defaults. clay-borg should **persist the full resolved +module list** (and baseline id) on every game so measurements name the +point in design space, not only a legacy experiment slug. + +--- + +## Adding an aspect + +1. Add a row to the tables above (this file). +2. If two competing designs exist (or one alternative to r0): register in + `catalog.yaml` `aspects:`, create `editions/modules//…`. +3. Do not overload an existing aspect with unrelated rules (e.g. do not put + end-of-game into `problem_stress`). +4. Prefer measuring a new module **alone**, then in profiles with others. + +--- + +## Relation to external frameworks + +See clay-borg **CB-RES-0010** for sources. Short map: + +| Framework | How it maps here | +|-----------|------------------| +| Formal elements (Fullerton et al.) | Coarse checklist → our Structure / Economy groups | +| MDA (Hunicke et al.) | Module = Mechanics; panels = Dynamics; intent = Aesthetics | +| Characteristics of Games (Elias/Garfield/Gutschera) | Independent dimensions → our aspects | +| Design space | Configuration = point in multi-aspect space | +| Extensive-form game theory | Analysis substrate (CB-RES-0009), not the aspect list | diff --git a/editions/CATALOG.md b/editions/CATALOG.md new file mode 100644 index 0000000..10c2107 --- /dev/null +++ b/editions/CATALOG.md @@ -0,0 +1,146 @@ +# Edition & rules catalog (schema 2 — composable modules by **aspect**) + +**Authority:** this file + [`catalog.yaml`](catalog.yaml) on `main`. +**Aspect map:** [`ASPECTS.md`](ASPECTS.md) — full design-space dimensionality for GROUND. +**Simulator research:** clay-borg `research/CB-RES-0010-game-aspects-and-design-space.md` + +**Purpose:** pin **baseline content** and **independent rules modules** so humans and **clay-borg** can run any module alone or in combination, measure, keep, or reject — without silent baseline edits. + +--- + +## Model + +``` + ┌─────────────────────┐ + │ baseline content │ editions/ground-darvo-rN/ + │ (CSVs, print data) │ + └──────────┬──────────┘ + │ + ┌─────────────────────┼─────────────────────┐ + ▼ ▼ ▼ + problem_stress attack_relief end_condition … + (≤1 module) (≤1 module) (≤1 module) + ▲ ▲ ▲ + └────────── aspects of the game ────────────┘ +``` + +| Concept | Meaning | +|---------|---------| +| **Aspect** | An orthogonal **design dimension** of the game (how stress is routed, how the game ends, how Problems enter play, …). Full list: [ASPECTS.md](ASPECTS.md). | +| **Baseline** | Edition **data** package (`Problems.csv`, modes, …). Frozen columns still require `rN→rN+1` (GROUND-WP-0002 T01). | +| **Module** | One implementable choice on **one aspect**. Defaults are named modules with no delta. | +| **Profile** | Named list of modules (convenience). **Not** a third rules source — expands to baseline + modules. | +| **Configuration** | Baseline + resolved module list = what is actually played. | +| **Composition** | At most **one module per aspect**. Missing aspects use `default_module`. | + +**Independence rule:** a module may only declare rules on its **own aspect**. Cross-aspect effects belong in a **profile** (explicit combo) or a new aspect — never silent coupling inside one module. + +**Legacy experiments** (`editions/experiments/h1-…`, `h2-…`) remain on disk as measured packages; they map to **profiles**. Prefer `module_id` / `profile_id` going forward. + +**Synonym:** older docs said *axis* for aspect. Machine field is `aspect:`. + +--- + +## Aspects with modules (registered) + +| Aspect | Default | Other modules | +|--------|---------|----------------| +| `problem_stress` | `none` | `flat_any_open` (H1-A, reject), `scoped` (H2, keep) | +| `attack_relief` | `none` | `self_soothe_ge4` (H1-B) | +| `end_condition` | `fixed_rounds_5` | `hybrid_clear_collapse` (**ready-for-implement**) | +| `problem_deal` | `fixed_setup` | `pressure_deck` (**ready-for-implement**) | + +Many other aspects exist but are **fixed in r0** until a competing design appears (see ASPECTS.md § full map). + +--- + +## Selection (clay-borg / trials) + +### Preferred API + +```yaml +baseline: ground-darvo-r0 +modules: + - problem_stress.scoped + - end_condition.hybrid_clear_collapse # when implemented +# other aspects → defaults +``` + +Or: + +```yaml +profile: h2 +# expands to modules: [problem_stress.scoped] +``` + +Or multi-aspect: + +```yaml +profile: scoped_plus_attack_soothe +# problem_stress.scoped + attack_relief.self_soothe_ge4 +``` + +### Validation + +1. Every `module_id` exists and `selectable: true`. +2. No two modules share the same **aspect**. +3. `status: proposed` modules may be selected only if the host declares `allow_proposed: true` (kernel may no-op or refuse). +4. State / recordings must store the **resolved module list** (and baseline id), not only a legacy experiment string — so A/B names the **point in design space**. + +### Implementation + +- Baseline CSVs: vendor as today. +- Each module: apply `rules_delta` + optional `data_overlays` from its `path`. +- Apply modules in **aspect order** listed in `catalog.yaml` `aspects:` (stable, documented). +- Conflict: refuse composition rather than last-write-wins. +- **`consumed_files` (RPT-0006):** when present on a module, a consumer that + has not read those paths is in a **detectable** incomplete state — not + silence. Freshness/edition-check should fail or warn if a listed file is + unread or undigested. Modules without the field still work; new modules + should list it. + +--- + +## Profiles (named combos) + +| profile_id | modules | note | +|------------|---------|------| +| `baseline` | (defaults) | Pure r0 | +| `h1` | flat + attack soothe | Legacy H1; reject-as-baseline | +| `h2` | scoped | Legacy H2; keep-as-experiment | +| `scoped_plus_attack_soothe` | scoped + soothe | Unmeasured combo | +| `scoped_plus_hybrid_end` | scoped + hybrid end | Needs kernel for end | +| `scoped_plus_pressure_deck` | scoped + pressure deck | Needs kernel for deal | + +--- + +## Adding a module (checklist) + +1. Confirm the **aspect** exists in [ASPECTS.md](ASPECTS.md); add the aspect first if needed. +2. Create `editions/modules///` with `MODULE.md` and, if non-default, `rules_delta.yaml` (+ CSV overlays if needed). +3. Register under `modules:` with `aspect`, `path`, `status`, `decision`. +4. Optionally add a **profile** that includes it alone and/or with other modules. +5. Message clay-borg: `module_id`, aspect, delta path, compose examples. +6. Measure **alone** first when possible; then measure interesting **profiles**. +7. Update `utility_estimate` / `decision` per module (and per profile if combo-specific). + +### What must not happen + +- Silent edit of frozen baseline columns inside `ground-darvo-r0`. +- A new mega-experiment that re-bundles three aspects into one non-decomposable id (use a profile instead). +- Modules that hard-require another aspect’s module without documenting a profile. + +--- + +## Git + +**main + catalog** is discovery; commits pin digests; branches optional for WIP. Modules live as directories on `main`. + +--- + +## Legacy map + +| Old experiment | Prefer | +|----------------|--------| +| `h1-problem-stress` | profile `h1` or modules `problem_stress.flat_any_open` + `attack_relief.self_soothe_ge4` | +| `h2-scoped-problem-stress` | profile `h2` or module `problem_stress.scoped` | diff --git a/editions/catalog.yaml b/editions/catalog.yaml new file mode 100644 index 0000000..3bfb2cd --- /dev/null +++ b/editions/catalog.yaml @@ -0,0 +1,263 @@ +# 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 +# packages declare files consumers must read (consumed_files / data_overlays) +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 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 + 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] + # files a consumer must open to implement this module (RPT-0006 §5b) + consumed_files: + - editions/modules/problem_stress/scoped/rules_delta.yaml + - editions/modules/problem_stress/scoped/Problems.csv + - editions/modules/problem_stress/scoped/Rules_Text.csv + - editions/modules/problem_stress/scoped/MODULE.md + 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 diff --git a/editions/experiments/h1-problem-stress/Actions.csv b/editions/experiments/h1-problem-stress/Actions.csv new file mode 100644 index 0000000..f487eed --- /dev/null +++ b/editions/experiments/h1-problem-stress/Actions.csv @@ -0,0 +1,6 @@ +action_id,title,symbol_id,resolution_order,target,tagline,rules_text,stress_restriction,designer_note +ACT_INVESTIGATE,INVESTIGATE,SYM_INVESTIGATE,4,One hidden Problem,Reveal what is hidden.,"Choose one hidden, non-Denied Problem and reveal it. Then draw one Solution. If no hidden Problems remain, draw one Solution only.","At Stress 4 or 5, this action requires spending a ready Freedom token.",Place the face-down action card beside the chosen hidden Problem. +ACT_SOLVE,SOLVE,SYM_SOLVE,6,"One face-up, non-Denied Problem",Match a solution to the real problem.,"Play and discard one Solution with the matching symbol. Claim the Problem if it is still available when Solve resolves. If another player has already claimed it, keep your Solution.","At Stress 4 or 5, this action requires spending a ready Freedom token.","Resolve competing claims in Lead order, then clockwise." +ACT_SUPPORT,SUPPORT,SYM_SUPPORT,2,One other player,Increase another player's room to choose.,"No relation: −1 Stress; you may form a Bond if both players have a free relation slot and the target accepts. Existing Bond: −2 Stress, ready their Freedom, and cancel their current DARVO stage and end that sequence. Existing Rivalry: −1 Stress; the target chooses to flip the relation to Bond or break it.","At Stress 4 or 5, this action requires spending a ready Freedom token.",A Bond formed by this same Support does not cancel DARVO; the Bond must already exist. +ACT_ATTACK,ATTACK,SYM_ATTACK,5,One other player,Push pressure into another player.,"Protection or GROUND—OU may cancel this Attack. No relation: +1 Stress; form a Rivalry if both players have a free relation slot. Existing Bond: +2 Stress and flip it to Rivalry. Existing Rivalry: +2 Stress and break the relation. A cancelled Attack changes neither Stress nor relation. H1: if this Attack is not cancelled and the attacker's Stress was 4 or 5 before the Attack's effects, the attacker then takes −1 Stress (clamp 0–5).","Always legal. At Stress 4 or 5, Attack is one of the two actions available without spending Freedom.",Rivalry formation is not consensual. H1 self-soothe is experiment-only (variant h1-problem-stress). +ACT_GROUND,GROUND,SYM_GROUND,1,"Self, a Problem, a relation, or an incoming effect",Regulate. Restore the frame. Decide.,"After all actions are revealed, choose one mode: GR—Ground & Restate: −2 Stress, ready Freedom; if you are in DARVO, its current stage still resolves, then the remaining sequence ends. OU—Observe & Uphold: restore one Denied Problem, cancel one Attack targeting you this round, or protect one face-up Problem from Deny this round. ND—Name & Decide: remove one Blame from yourself, break one relation involving you, or reject one Reverse targeting you this round.","Always legal. At Stress 4 or 5, GROUND is one of the two actions available without spending Freedom.",Keep the revealed GROUND card in front of the player until the end of the round as a reminder of the chosen mode. diff --git a/editions/experiments/h1-problem-stress/Rules_Text.csv b/editions/experiments/h1-problem-stress/Rules_Text.csv new file mode 100644 index 0000000..f8cf159 --- /dev/null +++ b/editions/experiments/h1-problem-stress/Rules_Text.csv @@ -0,0 +1,22 @@ +order,section,heading,body +1,Object,What players are trying to do,"Uncover hidden Problems and solve them with matching Solutions before the end of Round 5. Support, Attack, Bonds, Rivalries, Stress, DARVO, and GROUND determine how much freedom each player retains while doing so. The game is for 2–6 players in every Mode, including SHARED GROUND." +2,Setup,Choose the game,"Choose one Scenario card and one Mode card. Always use the Scenario's Surface Problem. Then add hidden Problems by player count: priorities 1–2 for 2 players, 1–3 for 3–4 players, and 1–4 for 5–6 players. Surface is never optional and is never counted as one of those hidden priorities." +3,Setup,Problems in play and available value,"Problems in play = Surface + the selected hidden priorities. With the core problem values (2+2+2+3+3), available points are 6 at 2 players, 9 at 3–4 players, and 12 at 5–6 players. Every published setup must keep the Scenario threshold at or below that available total so the group can win in principle." +4,Setup,Prepare each player,"Each player takes one mat, the five Action cards with their player symbol, one Stress marker at 2, one ready Freedom token, one DARVO marker at OFF, one Focus/Blame token, and two relation-link tokens. Deal two Solution cards to each player." +5,Setup,Prepare the table,Place the Surface Problem face up and the selected hidden Problems face down. Put the remaining Solution deck within reach. Give the Lead marker to a random player and place the Round marker on 1. +6,Round,1. Select,"Every player chooses one Action face down and places it beside its target where needed. At Stress 4 or 5, a player must choose ATTACK or GROUND unless they spend a ready Freedom token before reveal." +7,Round,2. Reveal,Reveal all selected Actions simultaneously. Players using GROUND choose their mode after seeing the revealed Actions. +8,Round,3. Resolve,"Resolve in this order: GROUND, Support, active DARVO stages, Investigate, Attack, Solve. Within the same step, start with the Lead player and continue clockwise." +9,Round,4. End,"H1 problem pressure: if any Problem still in play is unclaimed (face-up, hidden, or Denied), each player gains +1 Stress. Then cap Stress at 0–5. Any player at Stress 5 who is not already in DARVO places their marker on DENY for the next round. Rotate Lead clockwise and advance the Round marker." +10,Stress,Stress and Freedom,"Stress 0–3 allows any Action. At Stress 4–5, only ATTACK or GROUND is freely available. Spending a ready Freedom token allows any one Action; turn it to SPENT. GROUND—GR and Support through an existing Bond can ready it. H1: an uncancelled Attack by a player whose Stress was 4 or 5 before that Attack's effects also reduces the attacker's Stress by 1 (after target effects; then clamp)." +11,DARVO,A binding sequence,"Once triggered, DARVO continues from DENY to ATTACK to REVERSE over consecutive rounds even if Stress later falls. Existing Bond Support cancels the current stage and ends the sequence. GROUND—GR lets the current stage resolve, then ends the remaining sequence." +12,DARVO,DENY,Turn one visible unsolved Problem face down and mark it Denied. It cannot be solved or revealed by ordinary Investigate. GROUND—OU can restore it. +13,DARVO,ATTACK,Make one extra Attack against another player and place your Focus token beside that target. This extra Attack is in addition to your chosen Action. +14,DARVO,REVERSE,"Target the player holding your Focus. Unless rejected by GROUND—ND, flip Focus to Blame in front of them, give them +1 Stress, and gain Protection. Reduce your own Stress by 2 and end the sequence." +15,Relations,Creating and limiting relations,"Every player has two relation slots. A relation uses one link token from each player. If either player has no free slot, the immediate Support or Attack still works but no new relation is formed. Only one relation may exist between the same two players." +16,Relations,Bond,A no-relation Support may create a Bond if both players have a free slot and the target accepts. Support through an existing Bond is strong enough to regulate DARVO. Attack through a Bond causes +2 Stress and flips it to Rivalry. +17,Relations,Rivalry,A no-relation Attack creates Rivalry automatically when both slots are available. Attack through Rivalry causes +2 Stress and breaks it. Support through Rivalry causes −1 Stress; the target chooses to flip it to Bond or break it. +18,Problems,Hidden and Denied Problems,"Only face-up, non-Denied Problems can be solved. Investigate reveals one hidden Problem and draws one Solution. Deny can turn a previously revealed Problem face down again." +19,Problems,Solving,"Play SOLVE beside a face-up Problem and discard one matching Solution when Solve resolves. Claim that Problem and count its printed value. If another player claims it first in Lead order, keep your Solution." +20,End,End of game,"After Round 5, total solved Problem values and apply the selected Mode card. The Scenario's Standard thresholds are 5 for 2 players, 7 for 3–4 players, and 9 for 5–6 players — always at or below available points for that seat band (6 / 9 / 12)." +21,Safety,Learning frame,"DARVO is a response pattern, not proof of an underlying accusation and not a diagnosis. GROUND does not require reconciliation. Breaking a relation, bringing in process, or preserving personal freedom can be a successful result." diff --git a/editions/experiments/h1-problem-stress/VARIANT.md b/editions/experiments/h1-problem-stress/VARIANT.md new file mode 100644 index 0000000..01fc4f5 --- /dev/null +++ b/editions/experiments/h1-problem-stress/VARIANT.md @@ -0,0 +1,46 @@ +# Experiment H1 — problem pressure + high-stress ATTACK self-soothe + +| | | +|---|---| +| **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) | +| **catalog** | [`../../catalog.yaml`](../../catalog.yaml) | +| **design note** | [`../../../history/260807-attack-darvo-stress-design.md`](../../../history/260807-attack-darvo-stress-design.md) | +| **workplan** | [`../../../workplans/GROUND-WP-0006-h1-problem-stress-experiment.md`](../../../workplans/GROUND-WP-0006-h1-problem-stress-experiment.md) | + +## Hypothesis + +If unsolved shared Problems raise Stress, and high-Stress ATTACK returns a small self-relief, then competent play will sometimes arm DARVO and sometimes select ATTACK, without making always-ATTACK optimal. + +## Deltas (only) + +### H1-A — Problem pressure + +At **Round End**, before the Stress clamp that arms DARVO: + +- If **any** Problem still in play is **unclaimed** (face-up unsolved, hidden, or Denied), **each player +1 Stress**. +- Then clamp 0–5, arm DARVO at 5 as in baseline, rotate Lead, advance Round. + +### H1-B — High-stress ATTACK self-soothe + +When an Attack resolves and is **not cancelled**, if the attacker’s Stress was **≥ 4 before that Attack’s effects**, the attacker takes **−1 Stress** (then clamp). Target and relation effects unchanged. + +## Table play + +Use baseline components for everything except: + +1. Read End step and Stress/Attack wording from this package’s `Rules_Text.csv` / `Actions.csv` (or this file). +2. Do not mix with baseline r0 wording mid-game. + +## Simulation (clay-borg) + +1. Select `variant_id: h1-problem-stress` via catalog. +2. Inherit base edition data for Problems/Solutions/Modes/Tokens. +3. Implement `rules_delta.yaml` in the kernel (H1-A, H1-B). CSV text is provenance for the table, not a substitute for kernel changes. + +## Decision criteria + +See design note §3.2. Catalog `utility_estimate` / `decision` update only after measurement — not when packaging. diff --git a/editions/experiments/h1-problem-stress/metadata.json b/editions/experiments/h1-problem-stress/metadata.json new file mode 100644 index 0000000..ca9970b --- /dev/null +++ b/editions/experiments/h1-problem-stress/metadata.json @@ -0,0 +1,40 @@ +{ + "dataset_id": "GROUND-DARVO-EXP-H1-0.1", + "variant_id": "h1-problem-stress", + "base_variant_id": "ground-darvo-r0", + "base_path": "editions/ground-darvo-r0", + "game_title": "GROUND", + "subtitle": "A Game of Bonds and Rivalry", + "edition": "DARVO Edition — experiment H1", + "version": "0.1-h1", + "status": "Experimental rules variant (not baseline)", + "player_count": "2–6", + "duration": "5–15 minutes", + "rounds": 5, + "relationship_slots_per_player": 2, + "description": "Experiment H1 on top of ground-darvo-r0: unsolved Problems raise everyone's Stress at Round End; high-Stress ATTACK self-soothes by 1. Hypothesis and success criteria: history/260807-attack-darvo-stress-design.md", + "inherits_unchanged_from_base": [ + "Problems.csv", + "Solutions.csv", + "Modes.csv", + "Scenarios.csv", + "Tokens.csv", + "DARVO.csv", + "Relations.csv", + "Player_Mats.csv", + "Glossary.csv", + "Extensions.csv", + "BOM.csv", + "Print_Manifest.csv", + "Symbols.csv", + "Back_Designs.csv", + "Design_Tokens.csv" + ], + "changed_files": [ + "Actions.csv", + "Rules_Text.csv", + "metadata.json", + "rules_delta.yaml", + "VARIANT.md" + ] +} diff --git a/editions/experiments/h1-problem-stress/rules_delta.yaml b/editions/experiments/h1-problem-stress/rules_delta.yaml new file mode 100644 index 0000000..8c26f83 --- /dev/null +++ b/editions/experiments/h1-problem-stress/rules_delta.yaml @@ -0,0 +1,50 @@ +# Machine-oriented rules deltas for clay-borg / simulators. +# Human prose: VARIANT.md and history/260807-attack-darvo-stress-design.md +# Apply on top of base variant ground-darvo-r0 kernel behaviour. + +variant_id: h1-problem-stress +base: ground-darvo-r0 +schema_version: 1 + +deltas: + - id: H1-A + name: problem_pressure_end_of_round + phase: round_end + # Order relative to baseline End step: + # 1) apply this +1 if any unclaimed Problem remains + # 2) clamp Stress 0–5 + # 3) arm DARVO (Stress 5 and not already in sequence) as today + # 4) rotate Lead; advance Round + when: + any_problem_unclaimed: true + # unclaimed = not claimed by any seat this game + # includes face-up unsolved, still-hidden, and Denied + effect: + each_player_stress_delta: +1 + notes: > + Soft shared pressure. Does not scale by number of open Problems + (deliberately). Denied and hidden unclaimed Problems count. + + - id: H1-B + name: high_stress_attack_self_soothe + phase: resolve_attack + # Applies to ACT_ATTACK and to DARVO-stage extra Attack if they share + # the same Attack resolution path. + when: + attack_not_cancelled: true + attacker_stress_before_attack_effects_gte: 4 + effect: + attacker_stress_delta: -1 + order: after_target_and_relation_effects + notes: > + Does not change target Stress, Rivalry/Bond rules, or Protection/OU + cancel. Clamp after delta. + +unchanged: + - deal_and_thresholds + - solve_legality + - support + - ground_modes + - darvo_stage_table + - start_stress: 2 + - relation_slots: 2 diff --git a/editions/experiments/h2-scoped-problem-stress/Problems.csv b/editions/experiments/h2-scoped-problem-stress/Problems.csv new file mode 100644 index 0000000..3049c8b --- /dev/null +++ b/editions/experiments/h2-scoped-problem-stress/Problems.csv @@ -0,0 +1,21 @@ +problem_id,scenario_id,visibility,stress_scope,hidden_priority,title,problem_text,required_solution,symbol_id,point_value,front_rules,reveal_effect,unresolved_effect,back_design_id +PRB_01_S,SCN_01,Surface,global,0,Deadline Missed,A promised result was not delivered when expected.,Repair,SYM_REPAIR,2,Resolve with Repair. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=global (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM_SURFACE +PRB_01_1,SCN_01,Hidden,personal,1,Unclear Ownership,Responsibility for the commitment and the work was never made explicit.,Clarify,SYM_CLARIFY,2,Resolve with Clarify. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_01_2,SCN_01,Hidden,personal,2,Unspoken Overload,The work required more capacity than someone could safely or fairly provide.,Boundary,SYM_BOUNDARY,2,Resolve with Boundary. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_01_3,SCN_01,Hidden,bond,3,Bad News Was Delayed,A warning was withheld until the remaining options became worse.,Repair,SYM_REPAIR,3,Resolve with Repair. Value: 3.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=bond (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_01_4,SCN_01,Hidden,personal,4,No Checkpoint Process,The group had no reliable moment for testing progress and changing course.,Change,SYM_CHANGE,3,Resolve with Change. Value: 3.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_02_S,SCN_02,Surface,global,0,Shared Task Left Undone,"A recurring responsibility was not completed, and others absorbed the impact.",Repair,SYM_REPAIR,2,Resolve with Repair. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=global (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM_SURFACE +PRB_02_1,SCN_02,Hidden,personal,1,Different Standards,"Players were using different definitions of complete, timely, or fair.",Change,SYM_CHANGE,2,Resolve with Change. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_02_2,SCN_02,Hidden,personal,2,Invisible Workload,Some contributions and constraints were not visible to the group.,Clarify,SYM_CLARIFY,2,Resolve with Clarify. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_02_3,SCN_02,Hidden,bond,3,Resentment Never Raised,Frustration accumulated without a direct request or acknowledgement.,Boundary,SYM_BOUNDARY,3,Resolve with Boundary. Value: 3.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=bond (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_02_4,SCN_02,Hidden,personal,4,No Ownership Routine,The group relied on goodwill instead of a dependable allocation method.,Repair,SYM_REPAIR,3,Resolve with Repair. Value: 3.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_03_S,SCN_03,Surface,global,0,Decision Announced as Settled,A group-affecting choice was presented as final before meaningful agreement.,Boundary,SYM_BOUNDARY,2,Resolve with Boundary. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=global (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM_SURFACE +PRB_03_1,SCN_03,Hidden,personal,1,Mandate Was Ambiguous,"It was unclear who could decide, advise, consent, or veto.",Clarify,SYM_CLARIFY,2,Resolve with Clarify. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_03_2,SCN_03,Hidden,personal,2,Contributions Were Dismissed,Relevant input was ignored or treated as less legitimate.,Repair,SYM_REPAIR,2,Resolve with Repair. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_03_3,SCN_03,Hidden,bond,3,One Voice Spoke for Others,A player claimed authority to represent people who had not agreed.,Boundary,SYM_BOUNDARY,3,Resolve with Boundary. Value: 3.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=bond (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_03_4,SCN_03,Hidden,personal,4,No Decision Rule,The group had no shared method for turning discussion into a legitimate choice.,Change,SYM_CHANGE,3,Resolve with Change. Value: 3.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_04_S,SCN_04,Surface,global,0,Private Information Spread,Information moved beyond the circle in which it was originally shared.,Repair,SYM_REPAIR,2,Resolve with Repair. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=global (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM_SURFACE +PRB_04_1,SCN_04,Hidden,personal,1,Confidentiality Was Assumed,The players never made the scope of confidentiality explicit.,Clarify,SYM_CLARIFY,2,Resolve with Clarify. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_04_2,SCN_04,Hidden,personal,2,Exposure Caused Harm,"The sharing changed another player's safety, reputation, or freedom to choose.",Repair,SYM_REPAIR,2,Resolve with Repair. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_04_3,SCN_04,Hidden,bond,3,Consent Boundary Was Ignored,A clear or reasonably expected limit on sharing was crossed.,Boundary,SYM_BOUNDARY,3,Resolve with Boundary. Value: 3.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=bond (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_04_4,SCN_04,Hidden,personal,4,No Sharing Protocol,"The group lacked a repeatable rule for consent, need-to-know, and escalation.",Change,SYM_CHANGE,3,Resolve with Change. Value: 3.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM diff --git a/editions/experiments/h2-scoped-problem-stress/Rules_Text.csv b/editions/experiments/h2-scoped-problem-stress/Rules_Text.csv new file mode 100644 index 0000000..14c9238 --- /dev/null +++ b/editions/experiments/h2-scoped-problem-stress/Rules_Text.csv @@ -0,0 +1,23 @@ +order,section,heading,body +1,Object,What players are trying to do,"Uncover hidden Problems and solve them with matching Solutions before the end of Round 5. Support, Attack, Bonds, Rivalries, Stress, DARVO, and GROUND determine how much freedom each player retains while doing so. The game is for 2–6 players in every Mode, including SHARED GROUND." +2,Setup,Choose the game,"Choose one Scenario card and one Mode card. Always use the Scenario's Surface Problem. Then add hidden Problems by player count: priorities 1–2 for 2 players, 1–3 for 3–4 players, and 1–4 for 5–6 players. Surface is never optional and is never counted as one of those hidden priorities." +3,Setup,Problems in play and available value,"Problems in play = Surface + the selected hidden priorities. With the core problem values (2+2+2+3+3), available points are 6 at 2 players, 9 at 3–4 players, and 12 at 5–6 players. Every published setup must keep the Scenario threshold at or below that available total so the group can win in principle." +4,Setup,Prepare each player,"Each player takes one mat, the five Action cards with their player symbol, one Stress marker at 2, one ready Freedom token, one DARVO marker at OFF, one Focus/Blame token, and two relation-link tokens. Deal two Solution cards to each player." +5,Setup,Prepare the table,"Place the Surface Problem face up and the selected hidden Problems face down. Put the remaining Solution deck within reach. Give the Lead marker to a random player and place the Round marker on 1. H2 stress scope: each Problem has a printed stress_scope (global / personal / bond). Assign owners for every personal and bond Problem in play: in ascending hidden_priority order, assign the next seat clockwise starting from Lead (each assignment uses the next seat). Place that seat's owner marker on the card (or note it). Global Problems have no owner." +6,Round,1. Select,"Every player chooses one Action face down and places it beside its target where needed. At Stress 4 or 5, a player must choose ATTACK or GROUND unless they spend a ready Freedom token before reveal." +7,Round,2. Reveal,Reveal all selected Actions simultaneously. Players using GROUND choose their mode after seeing the revealed Actions. +8,Round,3. Resolve,"Resolve in this order: GROUND, Support, active DARVO stages, Investigate, Attack, Solve. Within the same step, start with the Lead player and continue clockwise." +9,Round,4. End,"H2 scoped problem pressure: for each still-unclaimed Problem in play, add +1 Stress to every seat in that Problem's stress_scope (see Problems). Then cap Stress at 0–5. Any player at Stress 5 who is not already in DARVO places their marker on DENY for the next round. Rotate Lead clockwise and advance the Round marker." +10,Stress,Stress and Freedom,"Stress 0–3 allows any Action. At Stress 4–5, only ATTACK or GROUND is freely available. Spending a ready Freedom token allows any one Action; turn it to SPENT. GROUND—GR and Support through an existing Bond can ready it. H2: inbound Stress also comes from unclaimed Problems by scope — personal (owner only), bond (owner's Bond network), global (all seats)." +11,DARVO,A binding sequence,"Once triggered, DARVO continues from DENY to ATTACK to REVERSE over consecutive rounds even if Stress later falls. Existing Bond Support cancels the current stage and ends the sequence. GROUND—GR lets the current stage resolve, then ends the remaining sequence." +12,DARVO,DENY,Turn one visible unsolved Problem face down and mark it Denied. It cannot be solved or revealed by ordinary Investigate. GROUND—OU can restore it. +13,DARVO,ATTACK,Make one extra Attack against another player and place your Focus token beside that target. This extra Attack is in addition to your chosen Action. +14,DARVO,REVERSE,"Target the player holding your Focus. Unless rejected by GROUND—ND, flip Focus to Blame in front of them, give them +1 Stress, and gain Protection. Reduce your own Stress by 2 and end the sequence." +15,Relations,Creating and limiting relations,"Every player has two relation slots. A relation uses one link token from each player. If either player has no free slot, the immediate Support or Attack still works but no new relation is formed. Only one relation may exist between the same two players." +16,Relations,Bond,A no-relation Support may create a Bond if both players have a free slot and the target accepts. Support through an existing Bond is strong enough to regulate DARVO. Attack through a Bond causes +2 Stress and flips it to Rivalry. +17,Relations,Rivalry,A no-relation Attack creates Rivalry automatically when both slots are available. Attack through Rivalry causes +2 Stress and breaks it. Support through Rivalry causes −1 Stress; the target chooses to flip it to Bond or break it. +18,Problems,Hidden and Denied Problems,"Only face-up, non-Denied Problems can be solved. Investigate reveals one hidden Problem and draws one Solution. Deny can turn a previously revealed Problem face down again." +19,Problems,Solving,"Play SOLVE beside a face-up Problem and discard one matching Solution when Solve resolves. Claim that Problem and count its printed value. If another player claims it first in Lead order, keep your Solution. H2: any seat with a matching Solution may SOLVE any Problem — claim rights are not limited by stress_scope or owner. Clearing a bond-scoped Problem relieves the whole Bond network." +20,Problems,Stress scope (H2 experiment),"Each Problem has stress_scope. global: every seat. personal: the assigned owner only. bond: the owner and every seat connected to the owner through one or more Bonds (the Bond network). If the owner has no Bonds, bond scope behaves as personal. Rivalries do not expand bond scope. Multiple unclaimed Problems stack (+1 each) for seats in their scopes." +21,End,End of game,"After Round 5, total solved Problem values and apply the selected Mode card. The Scenario's Standard thresholds are 5 for 2 players, 7 for 3–4 players, and 9 for 5–6 players — always at or below available points for that seat band (6 / 9 / 12)." +22,Safety,Learning frame,"DARVO is a response pattern, not proof of an underlying accusation and not a diagnosis. GROUND does not require reconciliation. Breaking a relation, bringing in process, or preserving personal freedom can be a successful result." diff --git a/editions/experiments/h2-scoped-problem-stress/VARIANT.md b/editions/experiments/h2-scoped-problem-stress/VARIANT.md new file mode 100644 index 0000000..f96d5bf --- /dev/null +++ b/editions/experiments/h2-scoped-problem-stress/VARIANT.md @@ -0,0 +1,54 @@ +# Experiment H2 — scoped problem stress (personal / bond / global) + +| | | +|---|---| +| **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** | 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) | +| **control** | `h1-problem-stress` (reject-as-baseline) | + +## Hypothesis + +If unclaimed Problems apply End stress only to their **stress_scope**, with mostly personal, one bond at 3p+, and rare global (Surface), then some seats can climb toward DARVO **without** taxing the whole table into zero group wins — and **bond-scoped** cards give the Bond network a shared reason to SOLVE. + +## Scopes + +| stress_scope | End +1 Stress while unclaimed goes to… | +|--------------|----------------------------------------| +| **global** | every seat | +| **personal** | assigned **owner** only | +| **bond** | owner + every seat in the owner’s **Bond network** (Bond edges only). No Bonds → behaves as personal | + +**SOLVE:** any seat with matching suit may claim any Problem (owner need not solve). Clearing a bond card is a network public good — that is intentional. + +## Assignment in this package + +By `hidden_priority` in `Problems.csv`: + +| priority | scope | in play at | +|---------:|-------|------------| +| 0 Surface | global | all seats | +| 1 | personal | 2p+ | +| 2 | personal | 2p+ | +| 3 | **bond** | 3p+ only | +| 4 | personal | 5p+ only | + +Owners: non-global in-play Problems, ascending priority, round-robin clockwise from **Lead**. + +## Bond incentive (design intent) + +Bond is still the regulation tool (−2 Stress, cancel DARVO). Bond-scope pressure **spreads** cost across the network so partners are incentivised to clear *that* card together rather than leave one seat to melt alone. Measure whether networks SOLVE bond cards faster or avoid Bonding. + +## Not in H2 + +- H1 flat global +1 for “any open problem” +- H1-B ATTACK self-soothe +- Owner-only SOLVE, shadow goals, competence track + +## Simulation + +Select `variant_id: h2-scoped-problem-stress`. Implement `rules_delta.yaml` (H2-SCOPE, H2-OWN, H2-A, H2-SOLVE). Compare to `ground-darvo-r0` and optionally `h1-problem-stress`. diff --git a/editions/experiments/h2-scoped-problem-stress/metadata.json b/editions/experiments/h2-scoped-problem-stress/metadata.json new file mode 100644 index 0000000..017a244 --- /dev/null +++ b/editions/experiments/h2-scoped-problem-stress/metadata.json @@ -0,0 +1,40 @@ +{ + "dataset_id": "GROUND-DARVO-EXP-H2-0.1", + "variant_id": "h2-scoped-problem-stress", + "base_variant_id": "ground-darvo-r0", + "base_path": "editions/ground-darvo-r0", + "game_title": "GROUND", + "subtitle": "A Game of Bonds and Rivalry", + "edition": "DARVO Edition — experiment H2", + "version": "0.1-h2", + "status": "Experimental rules variant (not baseline)", + "player_count": "2–6", + "duration": "5–15 minutes", + "rounds": 5, + "relationship_slots_per_player": 2, + "description": "Experiment H2: unclaimed Problems apply End Stress only to stress_scope (personal / bond / global). Bond scope taxes the Bond network so bonded seats share incentive to SOLVE. Not stacked on H1. Design: history/260808-h2-scoped-problem-stress.md", + "inherits_unchanged_from_base": [ + "Solutions.csv", + "Modes.csv", + "Scenarios.csv", + "Tokens.csv", + "DARVO.csv", + "Relations.csv", + "Player_Mats.csv", + "Glossary.csv", + "Extensions.csv", + "BOM.csv", + "Print_Manifest.csv", + "Symbols.csv", + "Back_Designs.csv", + "Design_Tokens.csv", + "Actions.csv" + ], + "changed_files": [ + "Problems.csv", + "Rules_Text.csv", + "metadata.json", + "rules_delta.yaml", + "VARIANT.md" + ] +} diff --git a/editions/experiments/h2-scoped-problem-stress/rules_delta.yaml b/editions/experiments/h2-scoped-problem-stress/rules_delta.yaml new file mode 100644 index 0000000..a5f381a --- /dev/null +++ b/editions/experiments/h2-scoped-problem-stress/rules_delta.yaml @@ -0,0 +1,93 @@ +# Machine-oriented rules deltas for clay-borg / simulators. +# Human prose: VARIANT.md and history/260808-h2-scoped-problem-stress.md +# Apply on top of base variant ground-darvo-r0 (not on H1). + +variant_id: h2-scoped-problem-stress +base: ground-darvo-r0 +schema_version: 1 +replaces_experiments: + # H2 is a new package, not a silent edit of H1. Do not stack H1-A/H1-B. + - h1-problem-stress + +deltas: + - id: H2-SCOPE + name: problem_stress_scope_field + phase: data + effect: + problems_csv_column: stress_scope + allowed_values: [global, personal, bond] + edition_assignment_by_hidden_priority: + 0: global # Surface + 1: personal + 2: personal + 3: bond + 4: personal + notes: > + Seat-band dial without a difficulty card: 2p deal (S+1..2) has no bond + card in play; 3–4p introduces one bond; 5–6p still one bond + more personal. + + - id: H2-OWN + name: assign_owners_at_setup + phase: setup_after_deal + when: + problem_stress_scope_in: [personal, bond] + effect: + assign_owner: + order: ascending_hidden_priority_among_in_play_non_global + start: lead + step: clockwise_next_seat + # Each such Problem gets exactly one owner seat. + notes: > + Deterministic for sims. Table: place owner marker on the card. + Global Problems have owner = none. + + - id: H2-A + name: scoped_problem_pressure_end_of_round + phase: round_end + # Order: + # 1) for each unclaimed Problem in play, +1 Stress to each seat in scope + # 2) clamp 0–5 + # 3) arm DARVO at 5 as baseline + # 4) rotate Lead; advance Round + when: + problem_unclaimed: true + effect: + stress_delta_per_matching_problem: +1 + recipients: stress_scope_of_that_problem + scope_resolution: + global: all_seats + personal: [owner] + bond: bond_network_of_owner + bond_network: > + owner plus every seat reachable from owner by traversing Bond + edges only (not Rivalry). If owner has degree 0, treat as personal. + stacking: true # two open bond problems both hit the network + notes: > + Bond incentive: every bonded partner shares the tick, so the network + is jointly motivated to SOLVE that card (anyone may still SOLVE). + + - id: H2-SOLVE + name: claim_not_restricted_by_scope + phase: resolve_solve + effect: + any_seat_with_matching_suit_may_solve: true + owner_need_not_be_solver: true + notes: > + Altruistic clear is legal and intended — especially on bond-scope cards. + +unchanged: + - deal_and_thresholds + - solve_legality_suit_faceup_unclaimed_race + - support + - ground_modes + - darvo_stage_table + - attack_resolution # no H1-B self-soothe in H2 + - start_stress: 2 + - relation_slots: 2 + +not_in_this_variant: + - H1-A_flat_global_plus_one + - H1-B_attack_self_soothe + - owner_only_solve + - shadow_goals + - competence_track diff --git a/editions/ground-darvo-r0/Modes.csv b/editions/ground-darvo-r0/Modes.csv index a48c063..64c311d 100644 --- a/editions/ground-darvo-r0/Modes.csv +++ b/editions/ground-darvo-r0/Modes.csv @@ -1,4 +1,4 @@ mode_id,title,mode_type,tagline,rules_text,scoring_tiebreak,back_design_id -MODE_COOP,SHARED GROUND,Cooperative,The group succeeds or fails together.,"All claimed Problem cards form one shared score. Meet the Scenario threshold by the end of Round 5. Playable at 2–6 players — not a high-seat-only mode. No individual winner is declared. For a mastery rating, subtract 1 for each Blame token still in play and 1 for each Denied Problem.",Not applicable.,BACK_MODE +MODE_COOP,SHARED GROUND,Cooperative,The group succeeds or fails together.,"All claimed Problem cards form one shared score equal to the sum of their point values. Meet the Scenario threshold by the end of Round 5. Playable at 2–6 players — not a high-seat-only mode. No individual winner is declared. For a mastery rating, start from that shared point total and subtract 1 point for each Blame token still in play and 1 point for each Denied Problem (penalties apply to points, not card count).",Not applicable.,BACK_MODE MODE_SEMI,"COMMON PROBLEM, PERSONAL EDGE",Semi-cooperative,The group must succeed before anyone can win.,"The group succeeds only if the total value of all claimed Problems meets the Scenario threshold (always ≤ available points for the seat band). If it succeeds, each player scores the value of Problems they claimed minus 1 per Blame token they hold. Highest score wins.","Lower Stress, then more Bonds, then shared victory.",BACK_MODE MODE_COALITION,BONDED COALITIONS,Dynamic teams,Bonds decide the sides at the end.,"The group must first meet the Scenario threshold (always ≤ available points for the seat band). At game end, each connected network of Bonds is a coalition; unbonded players are one-player coalitions. Sum the personal scores of coalition members. The highest-scoring coalition wins. Rivalries do not connect players.","Lower combined Stress, then fewer Blame tokens, then shared victory.",BACK_MODE diff --git a/editions/ground-darvo-r0/Problems.csv b/editions/ground-darvo-r0/Problems.csv index b19d202..aa87799 100644 --- a/editions/ground-darvo-r0/Problems.csv +++ b/editions/ground-darvo-r0/Problems.csv @@ -1,21 +1,21 @@ -problem_id,scenario_id,visibility,hidden_priority,title,problem_text,required_solution,symbol_id,point_value,front_rules,reveal_effect,unresolved_effect,back_design_id -PRB_01_S,SCN_01,Surface,0,Deadline Missed,A promised result was not delivered when expected.,Repair,SYM_REPAIR,2,Resolve with Repair. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM_SURFACE -PRB_01_1,SCN_01,Hidden,1,Unclear Ownership,Responsibility for the commitment and the work was never made explicit.,Clarify,SYM_CLARIFY,2,Resolve with Clarify. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM -PRB_01_2,SCN_01,Hidden,2,Unspoken Overload,The work required more capacity than someone could safely or fairly provide.,Boundary,SYM_BOUNDARY,2,Resolve with Boundary. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM -PRB_01_3,SCN_01,Hidden,3,Bad News Was Delayed,A warning was withheld until the remaining options became worse.,Repair,SYM_REPAIR,3,Resolve with Repair. Value: 3.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM -PRB_01_4,SCN_01,Hidden,4,No Checkpoint Process,The group had no reliable moment for testing progress and changing course.,Change,SYM_CHANGE,3,Resolve with Change. Value: 3.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM -PRB_02_S,SCN_02,Surface,0,Shared Task Left Undone,"A recurring responsibility was not completed, and others absorbed the impact.",Repair,SYM_REPAIR,2,Resolve with Repair. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM_SURFACE -PRB_02_1,SCN_02,Hidden,1,Different Standards,"Players were using different definitions of complete, timely, or fair.",Clarify,SYM_CLARIFY,2,Resolve with Clarify. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM -PRB_02_2,SCN_02,Hidden,2,Invisible Workload,Some contributions and constraints were not visible to the group.,Boundary,SYM_BOUNDARY,2,Resolve with Boundary. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM -PRB_02_3,SCN_02,Hidden,3,Resentment Never Raised,Frustration accumulated without a direct request or acknowledgement.,Repair,SYM_REPAIR,3,Resolve with Repair. Value: 3.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM -PRB_02_4,SCN_02,Hidden,4,No Ownership Routine,The group relied on goodwill instead of a dependable allocation method.,Change,SYM_CHANGE,3,Resolve with Change. Value: 3.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM -PRB_03_S,SCN_03,Surface,0,Decision Announced as Settled,A group-affecting choice was presented as final before meaningful agreement.,Boundary,SYM_BOUNDARY,2,Resolve with Boundary. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM_SURFACE -PRB_03_1,SCN_03,Hidden,1,Mandate Was Ambiguous,"It was unclear who could decide, advise, consent, or veto.",Clarify,SYM_CLARIFY,2,Resolve with Clarify. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM -PRB_03_2,SCN_03,Hidden,2,Contributions Were Dismissed,Relevant input was ignored or treated as less legitimate.,Repair,SYM_REPAIR,2,Resolve with Repair. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM -PRB_03_3,SCN_03,Hidden,3,One Voice Spoke for Others,A player claimed authority to represent people who had not agreed.,Boundary,SYM_BOUNDARY,3,Resolve with Boundary. Value: 3.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM -PRB_03_4,SCN_03,Hidden,4,No Decision Rule,The group had no shared method for turning discussion into a legitimate choice.,Change,SYM_CHANGE,3,Resolve with Change. Value: 3.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM -PRB_04_S,SCN_04,Surface,0,Private Information Spread,Information moved beyond the circle in which it was originally shared.,Repair,SYM_REPAIR,2,Resolve with Repair. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM_SURFACE -PRB_04_1,SCN_04,Hidden,1,Confidentiality Was Assumed,The players never made the scope of confidentiality explicit.,Clarify,SYM_CLARIFY,2,Resolve with Clarify. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM -PRB_04_2,SCN_04,Hidden,2,Exposure Caused Harm,"The sharing changed another player's safety, reputation, or freedom to choose.",Repair,SYM_REPAIR,2,Resolve with Repair. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM -PRB_04_3,SCN_04,Hidden,3,Consent Boundary Was Ignored,A clear or reasonably expected limit on sharing was crossed.,Boundary,SYM_BOUNDARY,3,Resolve with Boundary. Value: 3.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM -PRB_04_4,SCN_04,Hidden,4,No Sharing Protocol,"The group lacked a repeatable rule for consent, need-to-know, and escalation.",Change,SYM_CHANGE,3,Resolve with Change. Value: 3.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM +problem_id,scenario_id,visibility,hidden_priority,title,problem_text,required_solution,symbol_id,point_value,front_rules,reveal_effect,unresolved_effect,back_design_id +PRB_01_S,SCN_01,Surface,0,Deadline Missed,A promised result was not delivered when expected.,Repair,SYM_REPAIR,2,Resolve with Repair. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM_SURFACE +PRB_01_1,SCN_01,Hidden,1,Unclear Ownership,Responsibility for the commitment and the work was never made explicit.,Clarify,SYM_CLARIFY,2,Resolve with Clarify. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM +PRB_01_2,SCN_01,Hidden,2,Unspoken Overload,The work required more capacity than someone could safely or fairly provide.,Boundary,SYM_BOUNDARY,2,Resolve with Boundary. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM +PRB_01_3,SCN_01,Hidden,3,Bad News Was Delayed,A warning was withheld until the remaining options became worse.,Repair,SYM_REPAIR,3,Resolve with Repair. Value: 3.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM +PRB_01_4,SCN_01,Hidden,4,No Checkpoint Process,The group had no reliable moment for testing progress and changing course.,Change,SYM_CHANGE,3,Resolve with Change. Value: 3.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM +PRB_02_S,SCN_02,Surface,0,Shared Task Left Undone,"A recurring responsibility was not completed, and others absorbed the impact.",Repair,SYM_REPAIR,2,Resolve with Repair. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM_SURFACE +PRB_02_1,SCN_02,Hidden,1,Different Standards,"Players were using different definitions of complete, timely, or fair.",Change,SYM_CHANGE,2,Resolve with Change. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM +PRB_02_2,SCN_02,Hidden,2,Invisible Workload,Some contributions and constraints were not visible to the group.,Clarify,SYM_CLARIFY,2,Resolve with Clarify. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM +PRB_02_3,SCN_02,Hidden,3,Resentment Never Raised,Frustration accumulated without a direct request or acknowledgement.,Boundary,SYM_BOUNDARY,3,Resolve with Boundary. Value: 3.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM +PRB_02_4,SCN_02,Hidden,4,No Ownership Routine,The group relied on goodwill instead of a dependable allocation method.,Repair,SYM_REPAIR,3,Resolve with Repair. Value: 3.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM +PRB_03_S,SCN_03,Surface,0,Decision Announced as Settled,A group-affecting choice was presented as final before meaningful agreement.,Boundary,SYM_BOUNDARY,2,Resolve with Boundary. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM_SURFACE +PRB_03_1,SCN_03,Hidden,1,Mandate Was Ambiguous,"It was unclear who could decide, advise, consent, or veto.",Clarify,SYM_CLARIFY,2,Resolve with Clarify. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM +PRB_03_2,SCN_03,Hidden,2,Contributions Were Dismissed,Relevant input was ignored or treated as less legitimate.,Repair,SYM_REPAIR,2,Resolve with Repair. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM +PRB_03_3,SCN_03,Hidden,3,One Voice Spoke for Others,A player claimed authority to represent people who had not agreed.,Boundary,SYM_BOUNDARY,3,Resolve with Boundary. Value: 3.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM +PRB_03_4,SCN_03,Hidden,4,No Decision Rule,The group had no shared method for turning discussion into a legitimate choice.,Change,SYM_CHANGE,3,Resolve with Change. Value: 3.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM +PRB_04_S,SCN_04,Surface,0,Private Information Spread,Information moved beyond the circle in which it was originally shared.,Repair,SYM_REPAIR,2,Resolve with Repair. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM_SURFACE +PRB_04_1,SCN_04,Hidden,1,Confidentiality Was Assumed,The players never made the scope of confidentiality explicit.,Clarify,SYM_CLARIFY,2,Resolve with Clarify. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM +PRB_04_2,SCN_04,Hidden,2,Exposure Caused Harm,"The sharing changed another player's safety, reputation, or freedom to choose.",Repair,SYM_REPAIR,2,Resolve with Repair. Value: 2.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM +PRB_04_3,SCN_04,Hidden,3,Consent Boundary Was Ignored,A clear or reasonably expected limit on sharing was crossed.,Boundary,SYM_BOUNDARY,3,Resolve with Boundary. Value: 3.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM +PRB_04_4,SCN_04,Hidden,4,No Sharing Protocol,"The group lacked a repeatable rule for consent, need-to-know, and escalation.",Change,SYM_CHANGE,3,Resolve with Change. Value: 3.,None in the core set.,No card-specific effect; it simply remains unsolved.,BACK_PROBLEM diff --git a/editions/modules/attack_relief/none/MODULE.md b/editions/modules/attack_relief/none/MODULE.md new file mode 100644 index 0000000..09f4019 --- /dev/null +++ b/editions/modules/attack_relief/none/MODULE.md @@ -0,0 +1,7 @@ +# Module: `attack_relief.none` + +| | | +|---|---| +| **aspect** | `attack_relief` | +| **role** | **Default.** ATTACK never reduces attacker Stress. | +| **status** | baseline-default | diff --git a/editions/modules/attack_relief/self_soothe_ge4/MODULE.md b/editions/modules/attack_relief/self_soothe_ge4/MODULE.md new file mode 100644 index 0000000..e6671e1 --- /dev/null +++ b/editions/modules/attack_relief/self_soothe_ge4/MODULE.md @@ -0,0 +1,10 @@ +# Module: `attack_relief.self_soothe_ge4` + +| | | +|---|---| +| **aspect** | `attack_relief` | +| **role** | Uncancelled ATTACK: if attacker Stress was ≥4 before effects → attacker −1 Stress | +| **status** | measured only as part of H1; alone unmeasured | +| **legacy** | H1-B half of `h1-problem-stress` | + +Under H1, never fired for competent play (Stress stayed <4). Worth re-trying **with** `problem_stress.scoped` as a composition profile. diff --git a/editions/modules/attack_relief/self_soothe_ge4/rules_delta.yaml b/editions/modules/attack_relief/self_soothe_ge4/rules_delta.yaml new file mode 100644 index 0000000..a87d5df --- /dev/null +++ b/editions/modules/attack_relief/self_soothe_ge4/rules_delta.yaml @@ -0,0 +1,19 @@ +# attack_relief.self_soothe_ge4 (was H1-B) +module_id: attack_relief.self_soothe_ge4 +aspect: attack_relief +schema_version: 1 +base: ground-darvo-r0 +deltas: +- id: AR-H4 + name: high_stress_attack_self_soothe + phase: resolve_attack + when: + attack_not_cancelled: true + attacker_stress_before_attack_effects_gte: 4 + effect: + attacker_stress_delta: -1 + order: after_target_and_relation_effects + notes: Former H1-B alone. +unchanged: +- deal_and_thresholds +- problem_pressure diff --git a/editions/modules/end_condition/fixed_rounds_5/MODULE.md b/editions/modules/end_condition/fixed_rounds_5/MODULE.md new file mode 100644 index 0000000..a63c235 --- /dev/null +++ b/editions/modules/end_condition/fixed_rounds_5/MODULE.md @@ -0,0 +1,7 @@ +# Module: `end_condition.fixed_rounds_5` + +| | | +|---|---| +| **aspect** | `end_condition` | +| **role** | **Default.** Always play Round 1–5, then threshold + mode scoring. | +| **status** | baseline-default | diff --git a/editions/modules/end_condition/hybrid_clear_collapse/MODULE.md b/editions/modules/end_condition/hybrid_clear_collapse/MODULE.md new file mode 100644 index 0000000..2624208 --- /dev/null +++ b/editions/modules/end_condition/hybrid_clear_collapse/MODULE.md @@ -0,0 +1,64 @@ +# Module: `end_condition.hybrid_clear_collapse` + +| | | +|---|---| +| **aspect** | `end_condition` | +| **module_id** | `end_condition.hybrid_clear_collapse` | +| **role** | End on **board clear**, **group collapse**, or **max rounds** | +| **status** | **ready-for-implement** (draft frozen for v0 kernel) | +| **rules_delta** | [`rules_delta.yaml`](rules_delta.yaml) | +| **design** | [history/260808-deal-end-sequences-design.md](../../../history/260808-deal-end-sequences-design.md) | + +Independent of `problem_stress` / `problem_deal` / `attack_relief`. Measure +**alone** first, then profile `scoped_plus_hybrid_end`. + +## Frozen v0 rules + +### END-CLEAR + +After the **Solve** step: if **zero** unclaimed Problems remain in play → +**end the game immediately**. + +- Apply mode scoring as usual. +- **Threshold:** if total claimed value ≥ scenario threshold for seat band → + group success (SHARED mastery / semi-coalition personal winners as normal). +- If claimed value < threshold but board is empty (should be rare) → group + **failure** (nothing left to claim). + +### END-COLLAPSE + +After Round End stress clamp (and problem-stress ticks if any module active), +before Lead rotation: + +**Collapse** if **either**: + +1. **No seat has Stress ≤ 3**, or +2. **Majority** of seats are in an **active DARVO sequence** (stage ≠ OFF). + +Effect: + +- End the game. +- **Group success = false** (SHARED fails). +- Semi / coalition: **no personal / coalition winners** (table broke). + +### END-CEILING + +If Round **5** completes without CLEAR or COLLAPSE → end with current +threshold + mode scoring (identical to baseline fixed-rounds behaviour). + +Round max is **5** in v0 (same product length as r0). Changing max is a +different module later if needed. + +## Non-goals (v0) + +- Soft collapse (one seat at 5 only). +- Extending rounds when board not clear. +- Mode-specific collapse exceptions. + +## Success criteria (when clay-borg implements) + +1. Alone on baseline content: some games end before round 5 (clear or collapse). +2. Mean game length ≤ 5 rounds; no hangs. +3. With `problem_stress.scoped`: collapse rate non-zero for unregulated policies; + clear rate non-zero for greedy SHARED at 3–4p. +4. Does not recreate H1-style 0% greedy wins solely via collapse spam. diff --git a/editions/modules/end_condition/hybrid_clear_collapse/rules_delta.yaml b/editions/modules/end_condition/hybrid_clear_collapse/rules_delta.yaml new file mode 100644 index 0000000..1682848 --- /dev/null +++ b/editions/modules/end_condition/hybrid_clear_collapse/rules_delta.yaml @@ -0,0 +1,41 @@ +# module: end_condition.hybrid_clear_collapse +# status: ready-for-implement (v0 rules frozen in MODULE.md) +module_id: end_condition.hybrid_clear_collapse +aspect: end_condition +schema_version: 1 +base: ground-darvo-r0 +status: ready-for-implement +implementation: pending_kernel + +deltas: + - id: END-CLEAR + name: early_end_board_clear + phase: after_solve_step + when: + unclaimed_problems_in_play: 0 + effect: + end_game: true + scoring: mode_as_usual + group_success_if_claimed_ge_threshold: true + group_fail_if_claimed_lt_threshold: true + + - id: END-COLLAPSE + name: early_end_group_collapse + phase: round_end_after_stress_clamp + when: + any_of: + - no_seat_with_stress_lte: 3 + - majority_seats_in_active_darvo: true + effect: + end_game: true + group_success: false + personal_winners: none + + - id: END-CEILING + name: max_rounds_five + phase: after_round + when: + round_completed: 5 + effect: + end_game: true + scoring: mode_as_usual diff --git a/editions/modules/problem_deal/fixed_setup/MODULE.md b/editions/modules/problem_deal/fixed_setup/MODULE.md new file mode 100644 index 0000000..5fe4fc1 --- /dev/null +++ b/editions/modules/problem_deal/fixed_setup/MODULE.md @@ -0,0 +1,7 @@ +# Module: `problem_deal.fixed_setup` + +| | | +|---|---| +| **aspect** | `problem_deal` | +| **role** | **Default.** Surface + hidden 1..k at setup only; no mid-game Problem influx. | +| **status** | baseline-default | diff --git a/editions/modules/problem_deal/pressure_deck/MODULE.md b/editions/modules/problem_deal/pressure_deck/MODULE.md new file mode 100644 index 0000000..a0e07e2 --- /dev/null +++ b/editions/modules/problem_deal/pressure_deck/MODULE.md @@ -0,0 +1,77 @@ +# Module: `problem_deal.pressure_deck` + +| | | +|---|---| +| **aspect** | `problem_deal` | +| **module_id** | `problem_deal.pressure_deck` | +| **role** | Small start set + mid-game **Pressure deck** draws | +| **status** | **ready-for-implement** (draft frozen for v0 kernel) | +| **rules_delta** | [`rules_delta.yaml`](rules_delta.yaml) | +| **design** | [history/260808-deal-end-sequences-design.md](../../../history/260808-deal-end-sequences-design.md) | + +Independent of end_condition. **Recommended** compose with +`problem_stress.scoped` so drawn scopes matter. Measure alone first if +possible (with default problem_stress.none, influx still adds board clutter). + +## Frozen v0 rules + +### DEAL-START + +- **Always in play at setup:** Surface Problem (priority 0). +- **Also deal face-down:** hidden priority **1** (and priority **2** only if + seats ≥ 4). +- All other scenario Problems for that scenario go into the **Pressure deck**, + shuffled with the game seed (deterministic). +- Seat-band `k` from r0 does **not** bulk-deal the rest; influx replaces + “deal all k at once.” + +| seats | starters in play | rest → pressure deck | +|------:|------------------|----------------------| +| 2–3 | Surface + H1 | H2… | +| 4–6 | Surface + H1 + H2 | H3… | + +### DEAL-INFLUX + +At **Round End** (after problem-stress ticks if any, before DARVO arm): + +- If Pressure deck non-empty **and** unclaimed Problems in play < **open_cap**, + draw **1** card into play. +- **open_cap** = number of seats. +- Placement: face-down if hidden/personal/bond as printed; Surface-like global + face-up if scope is global. +- Stop drawing for that End once one card is drawn (v0: max 1 per round). + +### DEAL-OWN (if problem_stress.scoped also active) + +- **personal:** owner = Lead at time of draw (or next free seat clockwise if + Lead already owns ≥2 personal — v0 simplify: **drawer seat = current Lead**). +- **bond:** same owner rule; network = Bond network of owner. +- **global:** no owner. + +If `problem_stress.none`, owners may still be recorded for table clarity but +have no stress effect. + +### DEAL-POINTS (v0) + +- Cards that entered via **Pressure deck draw** have **point_value 0** for + scoring (stress / fiction only). +- **Starters** keep printed `point_value`. +- Scenario **thresholds unchanged** (5/7/9) and apply only to starter claims + + any printed values that were starters. + +This avoids reopening GR-E01 arithmetic while testing influx. + +## Non-goals (v0) + +- Problems in Solution hand. +- Multiple draws per round. +- Owner-only SOLVE. +- Changing thresholds mid-game. + +## Success criteria (when clay-borg implements) + +1. Games show mid-game influx (deck depletes or open_cap binds). +2. With scoped stress: variance and DARVO still possible; greedy SHARED 3–4p + wins not collapsed to H1-zero. +3. Threshold success still well-defined (starter points only). +4. Composable: works with default end_condition and with hybrid end. diff --git a/editions/modules/problem_deal/pressure_deck/rules_delta.yaml b/editions/modules/problem_deal/pressure_deck/rules_delta.yaml new file mode 100644 index 0000000..6c66309 --- /dev/null +++ b/editions/modules/problem_deal/pressure_deck/rules_delta.yaml @@ -0,0 +1,45 @@ +# module: problem_deal.pressure_deck +# status: ready-for-implement (v0 rules frozen in MODULE.md) +module_id: problem_deal.pressure_deck +aspect: problem_deal +schema_version: 1 +base: ground-darvo-r0 +status: ready-for-implement +implementation: pending_kernel + +deltas: + - id: DEAL-START + name: reduced_initial_deal + phase: setup + effect: + seats_2_3_initial: [surface, hidden_priority_1] + seats_4_6_initial: [surface, hidden_priority_1, hidden_priority_2] + remainder_to: pressure_deck + pressure_deck_shuffle: deterministic_seeded + + - id: DEAL-INFLUX + name: end_round_draw_if_room + phase: round_end + when: + pressure_deck_nonempty: true + unclaimed_count_lt: open_cap + effect: + open_cap: seat_count + draw_problems: 1 + max_draws_per_end: 1 + place: face_down_unless_global_scope + + - id: DEAL-OWN + name: owner_on_draw + phase: on_pressure_draw + effect: + personal_or_bond_owner: current_lead + global_owner: none + + - id: DEAL-POINTS + name: drawn_card_scoring + phase: data + effect: + drawn_point_value: 0 + starter_printed_values: unchanged + thresholds: unchanged_5_7_9 diff --git a/editions/modules/problem_stress/flat_any_open/MODULE.md b/editions/modules/problem_stress/flat_any_open/MODULE.md new file mode 100644 index 0000000..cbc915e --- /dev/null +++ b/editions/modules/problem_stress/flat_any_open/MODULE.md @@ -0,0 +1,14 @@ +# Module: `problem_stress.flat_any_open` + +| | | +|---|---| +| **aspect** | `problem_stress` | +| **role** | End of round: if **any** Problem unclaimed → **each** seat +1 Stress | +| **status** | measured → reject as sole pressure (H1-A); keep for A/B | +| **legacy** | H1-A half of `h1-problem-stress` | +| **measurement** | [RPT-0004](../../../../reports/260808-clay-borg-h1-measured.md) | + +**Compose with:** any `end_condition`, `problem_deal`, `attack_relief`. +**Conflicts with:** other `problem_stress.*` modules (one per aspect). + +Known result: flat tax → solve-rate collapse at 3p+ under greedy (when used alone or with H1-B). diff --git a/editions/modules/problem_stress/flat_any_open/rules_delta.yaml b/editions/modules/problem_stress/flat_any_open/rules_delta.yaml new file mode 100644 index 0000000..ae9f3e7 --- /dev/null +++ b/editions/modules/problem_stress/flat_any_open/rules_delta.yaml @@ -0,0 +1,18 @@ +# problem_stress.flat_any_open (was H1-A) +module_id: problem_stress.flat_any_open +aspect: problem_stress +schema_version: 1 +base: ground-darvo-r0 +deltas: +- id: PS-FLAT + name: flat_any_open_problem_pressure + phase: round_end + when: + any_problem_unclaimed: true + effect: + each_player_stress_delta: 1 + notes: Former H1-A alone. +1 to every seat if any unclaimed Problem remains. +unchanged: +- deal_and_thresholds +- attack_resolution +- solve_legality diff --git a/editions/modules/problem_stress/none/MODULE.md b/editions/modules/problem_stress/none/MODULE.md new file mode 100644 index 0000000..7f53573 --- /dev/null +++ b/editions/modules/problem_stress/none/MODULE.md @@ -0,0 +1,9 @@ +# Module: `problem_stress.none` + +| | | +|---|---| +| **aspect** | `problem_stress` | +| **role** | **Default.** Unclaimed Problems do not raise Stress. | +| **status** | baseline-default | + +This is the implicit r0 behaviour. No `rules_delta`; selecting it means “no problem_stress module active.” diff --git a/editions/modules/problem_stress/scoped/MODULE.md b/editions/modules/problem_stress/scoped/MODULE.md new file mode 100644 index 0000000..276d75d --- /dev/null +++ b/editions/modules/problem_stress/scoped/MODULE.md @@ -0,0 +1,13 @@ +# Module: `problem_stress.scoped` + +| | | +|---|---| +| **aspect** | `problem_stress` | +| **role** | Unclaimed Problems +1 Stress to **stress_scope** only (personal / bond / global) | +| **status** | measured → keep-as-experiment; candidate for core | +| **legacy** | `h2-scoped-problem-stress` | +| **measurement** | [RPT-0005](../../../../reports/260808-clay-borg-h2-measured.md) | + +Bond network shares ticks → joint SOLVE incentive (bots do not test joint motive). +**Compose with:** end, deal, attack_relief independently. +**Conflicts with:** other `problem_stress.*`. diff --git a/editions/modules/problem_stress/scoped/Problems.csv b/editions/modules/problem_stress/scoped/Problems.csv new file mode 100644 index 0000000..3049c8b --- /dev/null +++ b/editions/modules/problem_stress/scoped/Problems.csv @@ -0,0 +1,21 @@ +problem_id,scenario_id,visibility,stress_scope,hidden_priority,title,problem_text,required_solution,symbol_id,point_value,front_rules,reveal_effect,unresolved_effect,back_design_id +PRB_01_S,SCN_01,Surface,global,0,Deadline Missed,A promised result was not delivered when expected.,Repair,SYM_REPAIR,2,Resolve with Repair. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=global (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM_SURFACE +PRB_01_1,SCN_01,Hidden,personal,1,Unclear Ownership,Responsibility for the commitment and the work was never made explicit.,Clarify,SYM_CLARIFY,2,Resolve with Clarify. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_01_2,SCN_01,Hidden,personal,2,Unspoken Overload,The work required more capacity than someone could safely or fairly provide.,Boundary,SYM_BOUNDARY,2,Resolve with Boundary. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_01_3,SCN_01,Hidden,bond,3,Bad News Was Delayed,A warning was withheld until the remaining options became worse.,Repair,SYM_REPAIR,3,Resolve with Repair. Value: 3.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=bond (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_01_4,SCN_01,Hidden,personal,4,No Checkpoint Process,The group had no reliable moment for testing progress and changing course.,Change,SYM_CHANGE,3,Resolve with Change. Value: 3.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_02_S,SCN_02,Surface,global,0,Shared Task Left Undone,"A recurring responsibility was not completed, and others absorbed the impact.",Repair,SYM_REPAIR,2,Resolve with Repair. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=global (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM_SURFACE +PRB_02_1,SCN_02,Hidden,personal,1,Different Standards,"Players were using different definitions of complete, timely, or fair.",Change,SYM_CHANGE,2,Resolve with Change. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_02_2,SCN_02,Hidden,personal,2,Invisible Workload,Some contributions and constraints were not visible to the group.,Clarify,SYM_CLARIFY,2,Resolve with Clarify. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_02_3,SCN_02,Hidden,bond,3,Resentment Never Raised,Frustration accumulated without a direct request or acknowledgement.,Boundary,SYM_BOUNDARY,3,Resolve with Boundary. Value: 3.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=bond (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_02_4,SCN_02,Hidden,personal,4,No Ownership Routine,The group relied on goodwill instead of a dependable allocation method.,Repair,SYM_REPAIR,3,Resolve with Repair. Value: 3.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_03_S,SCN_03,Surface,global,0,Decision Announced as Settled,A group-affecting choice was presented as final before meaningful agreement.,Boundary,SYM_BOUNDARY,2,Resolve with Boundary. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=global (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM_SURFACE +PRB_03_1,SCN_03,Hidden,personal,1,Mandate Was Ambiguous,"It was unclear who could decide, advise, consent, or veto.",Clarify,SYM_CLARIFY,2,Resolve with Clarify. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_03_2,SCN_03,Hidden,personal,2,Contributions Were Dismissed,Relevant input was ignored or treated as less legitimate.,Repair,SYM_REPAIR,2,Resolve with Repair. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_03_3,SCN_03,Hidden,bond,3,One Voice Spoke for Others,A player claimed authority to represent people who had not agreed.,Boundary,SYM_BOUNDARY,3,Resolve with Boundary. Value: 3.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=bond (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_03_4,SCN_03,Hidden,personal,4,No Decision Rule,The group had no shared method for turning discussion into a legitimate choice.,Change,SYM_CHANGE,3,Resolve with Change. Value: 3.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_04_S,SCN_04,Surface,global,0,Private Information Spread,Information moved beyond the circle in which it was originally shared.,Repair,SYM_REPAIR,2,Resolve with Repair. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=global (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM_SURFACE +PRB_04_1,SCN_04,Hidden,personal,1,Confidentiality Was Assumed,The players never made the scope of confidentiality explicit.,Clarify,SYM_CLARIFY,2,Resolve with Clarify. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_04_2,SCN_04,Hidden,personal,2,Exposure Caused Harm,"The sharing changed another player's safety, reputation, or freedom to choose.",Repair,SYM_REPAIR,2,Resolve with Repair. Value: 2.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_04_3,SCN_04,Hidden,bond,3,Consent Boundary Was Ignored,A clear or reasonably expected limit on sharing was crossed.,Boundary,SYM_BOUNDARY,3,Resolve with Boundary. Value: 3.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=bond (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM +PRB_04_4,SCN_04,Hidden,personal,4,No Sharing Protocol,"The group lacked a repeatable rule for consent, need-to-know, and escalation.",Change,SYM_CHANGE,3,Resolve with Change. Value: 3.,None in the core set.,"H2: while unclaimed, +1 Stress at Round End to stress_scope=personal (personal=owner; bond=owner's Bond network; global=all).",BACK_PROBLEM diff --git a/editions/modules/problem_stress/scoped/Rules_Text.csv b/editions/modules/problem_stress/scoped/Rules_Text.csv new file mode 100644 index 0000000..14c9238 --- /dev/null +++ b/editions/modules/problem_stress/scoped/Rules_Text.csv @@ -0,0 +1,23 @@ +order,section,heading,body +1,Object,What players are trying to do,"Uncover hidden Problems and solve them with matching Solutions before the end of Round 5. Support, Attack, Bonds, Rivalries, Stress, DARVO, and GROUND determine how much freedom each player retains while doing so. The game is for 2–6 players in every Mode, including SHARED GROUND." +2,Setup,Choose the game,"Choose one Scenario card and one Mode card. Always use the Scenario's Surface Problem. Then add hidden Problems by player count: priorities 1–2 for 2 players, 1–3 for 3–4 players, and 1–4 for 5–6 players. Surface is never optional and is never counted as one of those hidden priorities." +3,Setup,Problems in play and available value,"Problems in play = Surface + the selected hidden priorities. With the core problem values (2+2+2+3+3), available points are 6 at 2 players, 9 at 3–4 players, and 12 at 5–6 players. Every published setup must keep the Scenario threshold at or below that available total so the group can win in principle." +4,Setup,Prepare each player,"Each player takes one mat, the five Action cards with their player symbol, one Stress marker at 2, one ready Freedom token, one DARVO marker at OFF, one Focus/Blame token, and two relation-link tokens. Deal two Solution cards to each player." +5,Setup,Prepare the table,"Place the Surface Problem face up and the selected hidden Problems face down. Put the remaining Solution deck within reach. Give the Lead marker to a random player and place the Round marker on 1. H2 stress scope: each Problem has a printed stress_scope (global / personal / bond). Assign owners for every personal and bond Problem in play: in ascending hidden_priority order, assign the next seat clockwise starting from Lead (each assignment uses the next seat). Place that seat's owner marker on the card (or note it). Global Problems have no owner." +6,Round,1. Select,"Every player chooses one Action face down and places it beside its target where needed. At Stress 4 or 5, a player must choose ATTACK or GROUND unless they spend a ready Freedom token before reveal." +7,Round,2. Reveal,Reveal all selected Actions simultaneously. Players using GROUND choose their mode after seeing the revealed Actions. +8,Round,3. Resolve,"Resolve in this order: GROUND, Support, active DARVO stages, Investigate, Attack, Solve. Within the same step, start with the Lead player and continue clockwise." +9,Round,4. End,"H2 scoped problem pressure: for each still-unclaimed Problem in play, add +1 Stress to every seat in that Problem's stress_scope (see Problems). Then cap Stress at 0–5. Any player at Stress 5 who is not already in DARVO places their marker on DENY for the next round. Rotate Lead clockwise and advance the Round marker." +10,Stress,Stress and Freedom,"Stress 0–3 allows any Action. At Stress 4–5, only ATTACK or GROUND is freely available. Spending a ready Freedom token allows any one Action; turn it to SPENT. GROUND—GR and Support through an existing Bond can ready it. H2: inbound Stress also comes from unclaimed Problems by scope — personal (owner only), bond (owner's Bond network), global (all seats)." +11,DARVO,A binding sequence,"Once triggered, DARVO continues from DENY to ATTACK to REVERSE over consecutive rounds even if Stress later falls. Existing Bond Support cancels the current stage and ends the sequence. GROUND—GR lets the current stage resolve, then ends the remaining sequence." +12,DARVO,DENY,Turn one visible unsolved Problem face down and mark it Denied. It cannot be solved or revealed by ordinary Investigate. GROUND—OU can restore it. +13,DARVO,ATTACK,Make one extra Attack against another player and place your Focus token beside that target. This extra Attack is in addition to your chosen Action. +14,DARVO,REVERSE,"Target the player holding your Focus. Unless rejected by GROUND—ND, flip Focus to Blame in front of them, give them +1 Stress, and gain Protection. Reduce your own Stress by 2 and end the sequence." +15,Relations,Creating and limiting relations,"Every player has two relation slots. A relation uses one link token from each player. If either player has no free slot, the immediate Support or Attack still works but no new relation is formed. Only one relation may exist between the same two players." +16,Relations,Bond,A no-relation Support may create a Bond if both players have a free slot and the target accepts. Support through an existing Bond is strong enough to regulate DARVO. Attack through a Bond causes +2 Stress and flips it to Rivalry. +17,Relations,Rivalry,A no-relation Attack creates Rivalry automatically when both slots are available. Attack through Rivalry causes +2 Stress and breaks it. Support through Rivalry causes −1 Stress; the target chooses to flip it to Bond or break it. +18,Problems,Hidden and Denied Problems,"Only face-up, non-Denied Problems can be solved. Investigate reveals one hidden Problem and draws one Solution. Deny can turn a previously revealed Problem face down again." +19,Problems,Solving,"Play SOLVE beside a face-up Problem and discard one matching Solution when Solve resolves. Claim that Problem and count its printed value. If another player claims it first in Lead order, keep your Solution. H2: any seat with a matching Solution may SOLVE any Problem — claim rights are not limited by stress_scope or owner. Clearing a bond-scoped Problem relieves the whole Bond network." +20,Problems,Stress scope (H2 experiment),"Each Problem has stress_scope. global: every seat. personal: the assigned owner only. bond: the owner and every seat connected to the owner through one or more Bonds (the Bond network). If the owner has no Bonds, bond scope behaves as personal. Rivalries do not expand bond scope. Multiple unclaimed Problems stack (+1 each) for seats in their scopes." +21,End,End of game,"After Round 5, total solved Problem values and apply the selected Mode card. The Scenario's Standard thresholds are 5 for 2 players, 7 for 3–4 players, and 9 for 5–6 players — always at or below available points for that seat band (6 / 9 / 12)." +22,Safety,Learning frame,"DARVO is a response pattern, not proof of an underlying accusation and not a diagnosis. GROUND does not require reconciliation. Breaking a relation, bringing in process, or preserving personal freedom can be a successful result." diff --git a/editions/modules/problem_stress/scoped/rules_delta.yaml b/editions/modules/problem_stress/scoped/rules_delta.yaml new file mode 100644 index 0000000..31da57c --- /dev/null +++ b/editions/modules/problem_stress/scoped/rules_delta.yaml @@ -0,0 +1,58 @@ +# module: problem_stress.scoped (formerly experiment h2-scoped-problem-stress) +# Compose with other axes freely; do not require attack_relief or end/deal modules. + +module_id: problem_stress.scoped +aspect: problem_stress +schema_version: 1 +base: ground-darvo-r0 +legacy_experiment_id: h2-scoped-problem-stress + +deltas: + - id: PS-SCOPE + name: problem_stress_scope_field + phase: data + effect: + problems_csv_column: stress_scope + allowed_values: [global, personal, bond] + edition_assignment_by_hidden_priority: + 0: global + 1: personal + 2: personal + 3: bond + 4: personal + + - id: PS-OWN + name: assign_owners_at_setup + phase: setup_after_deal + when: + problem_stress_scope_in: [personal, bond] + effect: + assign_owner: + order: ascending_hidden_priority_among_in_play_non_global + start: lead + step: clockwise_next_seat + + - id: PS-TICK + name: scoped_problem_pressure_end_of_round + phase: round_end + when: + problem_unclaimed: true + effect: + stress_delta_per_matching_problem: +1 + recipients: stress_scope_of_that_problem + scope_resolution: + global: all_seats + personal: [owner] + bond: bond_network_of_owner + stacking: true + + - id: PS-SOLVE + name: claim_not_restricted_by_scope + phase: resolve_solve + effect: + any_seat_with_matching_suit_may_solve: true + owner_need_not_be_solver: true + +data_overlays: + - Problems.csv + - Rules_Text.csv diff --git a/editions/profiles/README.md b/editions/profiles/README.md new file mode 100644 index 0000000..5f8211b --- /dev/null +++ b/editions/profiles/README.md @@ -0,0 +1,7 @@ +# Profiles + +Named compositions of modules. Authoritative definitions live in +[`../catalog.yaml`](../catalog.yaml) under `profiles:`. + +This directory may hold optional human notes per profile; it is not required +for selection. diff --git a/history/260807-attack-darvo-stress-design.md b/history/260807-attack-darvo-stress-design.md new file mode 100644 index 0000000..ec0b65c --- /dev/null +++ b/history/260807-attack-darvo-stress-design.md @@ -0,0 +1,166 @@ +# ATTACK / DARVO relevance — design challenge and H1 + +**Date:** 2026-08-07 (measurement 2026-08-08) +**Status:** H1 **measured** — reject as baseline; direction kept for H2 +**Triggers:** [GROUND-RPT-0003](../reports/260807-clay-borg-attack-and-modes.md); inbox triage +**Variant:** [`editions/experiments/h1-problem-stress/`](../editions/experiments/h1-problem-stress/) +**Measurement:** [GROUND-RPT-0004](../reports/260808-clay-borg-h1-measured.md) +**Catalog:** [`editions/CATALOG.md`](../editions/CATALOG.md) +**Workplan:** [GROUND-WP-0006](../workplans/GROUND-WP-0006-h1-problem-stress-experiment.md) + +--- + +## 0. The measured gap + +clay-borg (RPT-0003): under competent play, **ATTACK never improves** outcomes in any mode, and in 500 competent games **DARVO armed zero times**. Modes themselves differentiate correctly; the driver bug that forced SHARED GROUND is fixed on their side. + +So the namesake loop is reachable only by playing badly. That may be intentional (cautionary structure) or a missing Problem → Stress coupling. This note challenges design options **before** promoting any change into baseline `ground-darvo-r0`. + +--- + +## 1. Stress ledger today (baseline r0) + +| Source | Who’s stress changes? | Notes | +|--------|----------------------|--------| +| **ACT_ATTACK** | **Target** +1 or +2 | **Attacker: no relief.** Cancelled → no change | +| **SUPPORT** | **Target** −1 or −2 | Bond Support also readies Freedom, cancels DARVO | +| **GROUND—GR** | **Self** −2 | Readies Freedom; DARVO current stage still fires | +| **DARVO REVERSE** | **Self** −2; **Focus target** +1 | Blame on target; Protection for self | +| **Unsolved Problems** | **Nobody** | `unresolved_effect` is empty in `Problems.csv` | +| **Status / rank** | **Nobody** | No hierarchy stress | +| Start | All at **2** | | + +At Stress 4–5 the rules force the *vocabulary* of ATTACK or GROUND (unless Freedom is spent), but ordinary ATTACK is not a stress valve—only GROUND—GR and receiving Support (and later REVERSE) are. + +**Implication:** Stress is almost a **closed social subsystem**. If nobody attacks, stress drifts mid/down; DARVO never arms. clay-borg’s zero-DARVO result is the ledger working as printed, not a simulator bug. + +INTENT principle (“DARVO must sometimes work **locally** — short-term advantage, delayed relational cost”) is therefore under-served: the only local advantage is REVERSE’s package, gated on already being at Stress 5 for three rounds of sequence. + +--- + +## 2. Design directions (challenged) + +### 2.1 Stress from stuck problems + outward projection + +**Strong:** Restores Problem → Individual link in the four-layer model. Makes GROUND regulation under load; Support anti-cascade; DARVO “I can’t hold this.” + +**Challenge:** + +- Today **ATTACK and Blame do not reduce the projector’s stress**. Without a rules change, “forced projection” is flavor on a move that still does not help the projector. +- Passive problem ticks can flatten into always-DARVO or kill group thresholds (already ~75–83% of available points). +- Personal / Bond-attached problems are powerful and already listed as **extensions** (`EXT_PERSONAL`) — keep out of first core experiment. +- Even with self-soothe, **E04** still punishes Bond-breaking; mode-aware evaluation is required. + +### 2.2 Hierarchy / competitive status stress + +**Strong:** Injects stress without anyone choosing ATTACK; natural in semi-coop. + +**Challenge:** Leader −stress amplifies Matthew effects; “leading” mid-game is noisy; co-op must not invent early winners; stacking with problem pressure overproduces Stress 5 at 2p. + +**Parked** behind H1 (last-place-only semi-coop is the minimal follow-up if H1 under-delivers). + +### 2.3 Competence score + +**Strong as extension** (follow-through, self-regard). **Wrong tool** for RPT-0003: does not create ATTACK incentive unless it secretly becomes another stress track. **Out of H1.** + +--- + +## 3. Playtest hypothesis H1 + +> If unsolved shared Problems raise Stress, and high-Stress ATTACK returns a small self-relief, then competent play will sometimes arm DARVO and sometimes select ATTACK, without making always-ATTACK optimal. + +### 3.1 Two rule deltas only (relative to `ground-darvo-r0`) + +| ID | Rule | Detail | +|----|------|--------| +| **H1-A** | Problem pressure | At **Round End**, after Stress clamp step preparation: if **any** Problem still in play is **unclaimed** (face-up, hidden, or Denied), **each player +1 Stress**, then clamp 0–5, then DARVO arm check as today. | +| **H1-B** | High-stress ATTACK self-soothe | When an **ACT_ATTACK** resolves and is **not cancelled**, if the **attacker’s Stress was ≥ 4 before this Attack’s effects**, the attacker takes **−1 Stress** (then clamp). Target / relation effects unchanged. DARVO-stage extra Attack uses the same Attack resolution (so it can self-soothe too if Stress ≥ 4). | + +Unchanged on purpose: thresholds, deal, SOLVE legality, Support, GROUND modes, DARVO stage table, relation slots, starting Stress 2. + +### 3.2 Success criteria (compare to RPT-0003 harness) + +Under a competent multi-policy panel, same seat counts as RPT-0003 where practical: + +1. **DARVO arm rate** non-trivial (target band to refine after first N; not 0/500). +2. **ATTACK selection** rises for some subpopulation (e.g. Stress ≥ 4) and **raising ATTACK rank** improves at least one objective in some mode/seat cell — not “always attack wins.” +3. **Group threshold success** does not collapse to “only perfect peaceful play.” +4. Bond Support and GROUND remain better than DARVO **when regulation holds** — DARVO stays the failure mode, not the dominant strategy. + +### 3.3 Explicit non-goals for H1 + +- No personal / bond-group problem cards. +- No competence track. +- No leader/last-place status stress (Idea 2). +- No silent edit of baseline `point_value` / `required_solution` inside r0. +- No promotion of H1 into `ground-darvo-r0` until measured utility is accepted. + +--- + +## 4. Rules variation versioning (how we compare experiments) + +See full contract: [`editions/CATALOG.md`](../editions/CATALOG.md). + +**Summary:** + +| Mechanism | Role | +|-----------|------| +| **`editions/catalog.yaml` + `CATALOG.md`** | Authoritative **index of selectable packages** (baseline + experiments). Lives on `main`. clay-borg and humans read this to know what can be pinned. | +| **Directory path** | Selectable unit, e.g. `editions/ground-darvo-r0/`, `editions/experiments/h1-problem-stress/`. Matches clay-borg’s vendor-by-path practice (ADR-0011). | +| **`variant_id` + `base`** | Stable ids (`ground-darvo-r0`, `h1-problem-stress`); experiments declare inheritance and file-level deltas. | +| **Git** | Commits/tags pin content digests; optional feature branches for WIP **before** an experiment directory lands on `main`. Branches are **not** the primary selection API (sibling checkout + multi-ref is hostile to clay-borg CI). | +| **Utility fields** | Catalog rows carry `status`, `utility_estimate`, `decision` (keep / reject / merge-to-baseline / supersede). Updated when measurement lands — not when the idea is written. | + +Baseline contract (GROUND-WP-0002 T01) still holds: changing frozen columns inside `ground-darvo-r0` requires a **new revision directory** (`-r1`), not an experiment. Experiments may **copy** and alter rules text/actions; only a later **promote** step rewrites baseline. + +--- + +## 5. clay-borg selection contract + +A package is **selectable for simulation** when it appears in `editions/catalog.yaml` with `selectable: true` and a `path`. + +Minimum fields clay-borg should read (or we message explicitly): + +```yaml +variant_id: h1-problem-stress +path: editions/experiments/h1-problem-stress +base: ground-darvo-r0 +status: experimental +rules_engine_notes: rules_delta.yaml # structured deltas if CSV alone is not executable +``` + +Engine note: today clay-borg **hardcodes** much of the rules kernel and **vendors** selected CSVs. H1-A/B are **rules-kernel changes**, not Problem table changes. Selecting H1 means: + +1. Vendor or overlay the experiment’s changed CSVs for text/provenance, **and** +2. Implement `rules_delta.yaml` in the kernel (or a feature flag keyed by `variant_id`). + +Until (2) exists, H1 is **specified here** and playable at a human table from the experiment package; bulk ATTACK-value re-runs wait on clay-borg. + +--- + +## 6. Exploration order (after H1) + +| Step | If… | Then… | +|------|-----|--------| +| H1 measured | criteria met | promote candidates into r1 design / keep as optional mode card | +| H1 measured | DARVO still ~0 | add Idea 2 last-place stress (semi only) as **H2** experiment | +| H1 measured | always-ATTACK optimal | reject H1-B or gate self-soothe tighter | +| Later | core loop works | competence / personal problems as extensions | + +--- + +## 7. Decision log + +| Date | Decision | +|------|----------| +| 2026-08-07 | Do not invent “DARVO-only-from-bad-play is intended” without measurement of H1-class pressure. | +| 2026-08-07 | First experiment is **H1** (problem pressure + high-stress ATTACK −1). | +| 2026-08-07 | Versioning = **catalog + directories on main**; git tags pin; branches optional for WIP. | +| 2026-08-08 | H1 measured (CB-EV-0030/0031 → RPT-0004). **Reject as baseline.** Direction (Problem→Stress) confirmed useful; flat +1/end is a solve-rate tax. H2 must change pressure *shape*, not only re-stack. Baseline finding: non-attacking policies never raise Stress above 2. | +| 2026-08-08 | **H2 packaged:** scoped stress (personal / bond / global). See [260808-h2-scoped-problem-stress.md](260808-h2-scoped-problem-stress.md). Bond network shares ticks → joint SOLVE incentive. | + +## 8. Measurement summary (2026-08-08) + +See RPT-0004 for full tables. One-line: + +> H1 reaches the seat that will not regulate; under greedy regulation the table stops winning; H1-B is dead code for competent play. diff --git a/history/260807-inbox-triage-clay-borg.md b/history/260807-inbox-triage-clay-borg.md new file mode 100644 index 0000000..c026ffd --- /dev/null +++ b/history/260807-inbox-triage-clay-borg.md @@ -0,0 +1,18 @@ +# Inbox triage — clay-borg messages (2026-08-07) + +Four unread messages from `clay-borg-custodian` were processed in one +pass. Report files already lived under `reports/` (not `workplans/` as +the message bodies claimed). No kernel or edition change in this pass. + +| date | subject | report | action taken | +|------|---------|--------|--------------| +| 2026-08-03 | SOLVE ruling as GR-P05 + premise correction | (inline in message) | Acknowledged: GR-P05 matches GROUND-WP-0002 T02; face-down vs hand misdescription does not reopen the ruling | +| 2026-08-05 | Withdraw GR-E01 4/6/9; U-items collected | [GROUND-RPT-0001](../reports/260805-clay-borg-findings.md) | Acknowledged: confirms WP-0002 T03/T05; no work from us | +| 2026-08-05 | Difficulty baseline; no threshold proposal | [GROUND-RPT-0002](../reports/260805-clay-borg-difficulty.md) | Receipt noted on [WP-0005](../workplans/GROUND-WP-0005-difficulty-tiers-and-pressure-dial.md); T01 stays `wait` | +| 2026-08-07 | E03/E04 played; ATTACK value; DARVO never arms | [GROUND-RPT-0003](../reports/260807-clay-borg-attack-and-modes.md) | Receipt noted on [WP-0003](../workplans/GROUND-WP-0003-playtest-semi-and-coalitions.md); design question escalated to human | + +## Outstanding human decision + +**Is it intended that ATTACK (and therefore DARVO) is unreachable under +competent play in all three modes?** clay-borg asks this explicitly and +does not call it a defect. Ground-game has not ruled yet. diff --git a/history/260808-deal-end-sequences-design.md b/history/260808-deal-end-sequences-design.md new file mode 100644 index 0000000..d46d2fb --- /dev/null +++ b/history/260808-deal-end-sequences-design.md @@ -0,0 +1,170 @@ +# After H2: deal influx, end conditions, sequence salience + +**Date:** 2026-08-08 +**Context:** H2 measured (RPT-0005) — scoping works; felt “more interesting.” +**Status:** design discussion — not yet a packaged variant + +Maintainer questions: (1) fixed problem deal vs random influx; (2) fixed +5 rounds vs clear-board / stressed-out ends; (3) GROUND/DARVO as sequences +with significant effect — sim artifact or gameplay gap? + +--- + +## 0. What H2 already proved + +- Scoped stress is the right *pressure* shape (all-global control = H1 collapse). +- DARVO can arm for a seat that still sometimes wins (unlike H1). +- ATTACK is affordable under H2, still not profitable. +- Bond joint-SOLVE incentive is **untested by bots** (they do not model scopes). + +H2 does **not** yet answer deal variety, pacing, or “do sequences *feel* +significant.” Those are the next design layer. + +--- + +## 1. Problem deal: start set + random influx + +### Current + +Fixed deal at setup: Surface + hidden 1..k by seats. Owners assigned once. +Solution deck is the only ongoing draw (INVESTIGATE draws Solutions). + +### Proposal + +Keep a **starting set** of Problems, then **random draws** that can add +personal / bond / global Problems to play (or into a hand that can be +played/attached). + +### Strengths + +- Replay variety without new scenarios every time. +- Fiction: issues *arrive* mid-relationship; hand/draw = what lands on you. +- Difficulty dial = composition of the **draw bag** (how many personal vs + bond vs global), cleaner than fixed priority mapping alone. +- Supports “my hand gave *me* a personal problem” without full EXT_PERSONAL + shadow goals. + +### Challenges + +| Risk | Mitigation | +|------|------------| +| Available points / threshold float mid-game | Threshold as % of *currently in play* claimed target, or score only starting set, or drawn problems are stress-only (no point value) | +| Global flood rebuilds H1 | Cap globals in bag; max N open globals | +| Too long / never clears | Soft cap on open Problems; draw only on triggers (missed SOLVE, DENY, Round End if board empty of hidden) | +| Ownership chaos | Drawn personal → drawer is owner; bond → drawer’s network; global → none | +| Teach complexity | Phase 1: **draw adds to board face-down**, not a second hand of problems | + +### Lean experiment shape (if packaged later) + +**H3-deal (sketch):** After setup of Surface + 1–2 starters, remaining scoped +Problems form a **Pressure deck**. At End of round (or on INVESTIGATE +miss), draw 0–1 if open unclaimed count < cap. Drawn card enters play +with scope as printed; owner = drawer or Lead-round-robin. + +Do **not** put Problems in the Solution hand first — that collides with +suit management. Separate “issue arrives” channel is clearer. + +--- + +## 2. End conditions: beyond fixed 5 rounds + +### Current + +Always 5 rounds, then threshold + mode scoring. Compact (5–15 min) was +explicit intent (2026-07-30 exploration). + +### Why 5 feels arbitrary + +It is a **timer**, not a story beat. Under H2 stress, a clear board early +still forces empty rounds; a meltdown at round 3 still limps to 5. + +### Proposal family + +| End | Meaning | Risk | +|-----|---------|------| +| **A. Board clear** | No unclaimed Problems left → immediate group success check | Short games; INVESTIGATE race | +| **B. Group break** | All seats at Stress 5 and/or in DARVO → group fail (or “stressed out”) | Need precise definition; soft lock if one seat holds out | +| **C. Max rounds** | Still a ceiling (4–6) so games terminate | Keeps product length | +| **Hybrid** | End on A or B, else at round max | Best of both | + +### Recommendation + +**Hybrid** is the least arbitrary and keeps the product box promise: + +1. If **no unclaimed Problems** remain after a round’s Solve → end; apply mode scoring (threshold may be automatic success if all claimed value ≥ threshold, or redefine success as “cleared the table”). +2. If **collapse**: e.g. every seat is at Stress ≥4 **or** ≥ half the table is in active DARVO → end as **group failure** (SHARED) / no personal win (semi). +3. Else after **Round Max** (keep 5 or try 6) → current threshold scoring. + +“All stressed out” as pure unanimous Stress 5 is harsh and rare; prefer +**majority in DARVO** or **no seat below Stress 4** as the fail line. + +Threshold vs clear-board: if success = clear all, thresholds become +redundant; if success = clear *enough*, keep threshold and treat early +clear as auto-meet if points ≥ threshold. + +--- + +## 3. GROUND and DARVO as sequences — sim vs design + +### What the rules actually are + +| System | In r0 today | “Sequence”? | +|--------|-------------|-------------| +| **DARVO** | DENY → ATTACK → REVERSE over **consecutive rounds** once armed at Stress 5 | **Yes** — three mandatory stages | +| **GROUND** | One action, **one of three modes** (GR / OU / ND) chosen after reveal | **No** — not a multi-round sequence | +| INTENT / early design | GROUND as G-R-O-U-N-D practices; DARVO as binding multi-turn chain | Aspirational / partial | + +So if the desire is “GROUND is also a sequence,” that is **missing design**, +not a clay-borg bug. + +### Why sequences feel weak in the simulator + +**Mostly gameplay + policy, not “sim is broken.”** + +1. **Competent bots regulate.** Greedy GROUNDs when gated → Stress often + never hits 5 → **no DARVO stage chain to watch**. H2 reactive shows + arms; greedy play will not. +2. **Full DARVO chain needs three rounds.** With max 5, a late arm gets + DENY only (or DENY+ATTACK). REVERSE’s drama is rare. +3. **Exits are strong.** Bond Support cancels the stage and ends the + sequence; GROUND—GR lets current stage fire then ends the rest. So + sequences are designed to be **interruptible** — good for teaching, + bad for “unstoppable set piece” feel. +4. **GROUND modes are situational.** GR (−2 Stress) is the default bot + use. OU/ND only matter if DENY/Attack/Blame already happened — rare + under peaceful greedy play. Sim never “chooses the dramatic mode.” +5. **Bots optimize scores, not narrative.** Sequence significance is a + human-felt property; aggregates report arms and wins, not “that REVERSE + mattered.” + +**Where the sim *is* limited:** no multi-seat-aware bond motivation; no +felt-play; watching greedy H2 underplays DARVO by construction. + +### If we want sequences to *matter* more (gameplay levers) + +| Lever | Effect | +|-------|--------| +| Longer max rounds or early arm | More full DENY→…→REVERSE completions | +| Softer exits (Bond Support cancels only *this* stage, not whole sequence) | Harder to snuff DARVO | +| DARVO stages alter scoring more (Blame already −1; DENY already blocks points) | Make completion costly for the *group* | +| GROUND as optional **multi-step practice** (e.g. commit GR this round, may chain OU next if still regulating) | True GROUND sequence — large design change | +| Scenario “Focus cards” that force a stage | Guaranteed set piece for teaching | + +Prefer measuring **full-sequence completion rate** (DENY+ATTACK+REVERSE all +fired) under H2 before changing exits — if completion ≈ 0 even when arms +> 0, the chain is too long for the clock. + +--- + +## 4. Suggested order (do not stack into one silent H2 edit) + +1. **Keep H2 stress routing** (`keep-as-experiment`; candidate for r1 core). +2. **Table smoke** for bond joint SOLVE (criterion 4). +3. Package **one** next experiment, not three: + - either **H3-end** hybrid end conditions on top of H2, **or** + - **H3-deal** pressure-deck influx on top of H2, + - measure sequence completion rate as a side metric either way. +4. Only then consider GROUND-as-sequence or DARVO exit tuning. + +Promoting H2 into baseline before deal/end redesign is optional; stress +routing can be kept even if deal changes later. diff --git a/history/260808-h2-scoped-problem-stress.md b/history/260808-h2-scoped-problem-stress.md new file mode 100644 index 0000000..b43abcf --- /dev/null +++ b/history/260808-h2-scoped-problem-stress.md @@ -0,0 +1,89 @@ +# H2 — scoped problem stress (personal / bond / global) + +**Date:** 2026-08-08 +**Status:** experiment open — packaged as selectable variant +**Parent:** [H1 design + measurement](260807-attack-darvo-stress-design.md), [RPT-0004](../reports/260808-clay-borg-h1-measured.md) +**Variant:** [`editions/experiments/h2-scoped-problem-stress/`](../editions/experiments/h2-scoped-problem-stress/) +**Workplan:** [GROUND-WP-0007](../workplans/GROUND-WP-0007-h2-scoped-problem-stress.md) + +--- + +## 0. Why H2 (after H1) + +H1 applied **+1 Stress to every seat** whenever any Problem remained unclaimed. Competent play regulated (GROUND); Stress plateaus ~3; SOLVE bandwidth died; group wins collapsed at 3p+. Direction (Problem → Stress) was right; **equal global tax** was wrong. + +H2 keeps inbound problem pressure but **routes** it: + +| scope | who pays | design role | +|-------|----------|-------------| +| **personal** | one owner | asymmetric load; someone can approach DARVO while others SOLVE | +| **bond** | Bond network of owner | shared load → shared **incentive to SOLVE** that card | +| **global** | all seats | rare systemic pressure (Surface only in this package) | + +Difficulty dial (later / WP-0005): vary how many of each scope are in the deal. This package’s first recipe uses **priority mapping** so seat band already changes mix (no bond card at 2p). + +--- + +## 1. Bond scope — the interesting bit + +Bond today is almost pure upside (stress down, cancel DARVO). Bond-scope problems add a **joint liability**: + +- While the card stays unclaimed, **every bonded partner** takes the End tick. +- **Any** seat may SOLVE it (matching suit) — including a non-owner altruist. +- So the network is incentivised to **clear the shared load**, not only to Support through the crisis. + +That is the hypothesis to protect in measurement: + +> Do Bond networks clear bond-scoped Problems faster / more often than equivalent personal cards, and does that keep group success above H1’s floor? + +**Risk to watch:** players avoid Bonding to shed liability. If Bond rate collapses and DARVO rises, magnitude is still wrong (or bond tick needs to be softer than personal). + +**Network definition:** seats reachable from the **owner** by Bond edges only. Rivalries do not connect. Degree 0 → personal behaviour. + +--- + +## 2. Package rules (summary) + +See `rules_delta.yaml` for machine form. + +1. **H2-SCOPE** — `Problems.csv` column `stress_scope`; mapping by `hidden_priority` 0→global, 1–2 personal, 3 bond, 4 personal. +2. **H2-OWN** — owners for personal/bond: ascending priority among in-play non-global, round-robin from Lead. +3. **H2-A** — Round End: each unclaimed Problem → +1 Stress to each seat in its scope; then clamp; then DARVO arm as r0. +4. **H2-SOLVE** — claim rights unchanged by scope (anyone with suit). + +**Not included:** H1-A, H1-B, owner-only solve, shadow goals. + +**Thresholds / deal depth / start Stress 2:** unchanged from r0. + +--- + +## 3. Hypothesis and success criteria + +> Scoped pressure creates stress **variance** and occasional DARVO under mixed policies **without** driving greedy SHARED group wins to ~0 at 3–4p; bond cards create joint SOLVE incentive inside Bond networks. + +| # | criterion | target (directional) | +|---|-----------|----------------------| +| 1 | Group success (greedy SHARED, 3–4p) | **Well above H1’s 0**; not required to match baseline | +| 2 | Stress variance | max−min Stress across seats **higher** than baseline and H1-greedy | +| 3 | DARVO | non-zero for some policy that still sometimes wins; not only pure reactive-never-wins | +| 4 | Bond cards | among bond-scoped unclaimed time, networks show elevated SOLVE rate on those cards vs personal (or qualitative report) | +| 5 | Control | if all scopes forced global, H1-like collapse returns (optional A/B) | + +Instrument caveats from CB-EV-0030/0031 still apply: plural panel; report sample-specific vs invariant; no felt-play substitute. + +--- + +## 4. Safety / scope of fiction + +Cards keep existing scenario language (deadline, ownership, overload). No new trauma-personal content. Full `EXT_PERSONAL` (shadow goals, expose, win rewrite) stays **out**. + +--- + +## 5. Decision log + +| Date | Decision | +|------|----------| +| 2026-08-08 | H1 reject-as-baseline; spawn H2 scoped stress | +| 2026-08-08 | Bond = full Bond network of owner; SOLVE unrestricted by owner | +| 2026-08-08 | Surface global; one bond card (priority 3) enters at 3p+ | +| 2026-08-08 | Do not stack H1-B in H2 until scoped pressure is measured alone | diff --git a/history/260808-mode-playtest-engine-notes.md b/history/260808-mode-playtest-engine-notes.md new file mode 100644 index 0000000..72fe92d --- /dev/null +++ b/history/260808-mode-playtest-engine-notes.md @@ -0,0 +1,91 @@ +# Mode playtest notes — engine (GR-E03 / GR-E04) + +**Date:** 2026-08-08 +**Workplan:** [GROUND-WP-0003](../workplans/GROUND-WP-0003-playtest-semi-and-coalitions.md) +**Source:** [GROUND-RPT-0003](../reports/260807-clay-borg-attack-and-modes.md) (clay-borg attack-value panel + full-mode playouts) +**Variant:** `ground-darvo-r0` (baseline) + +These notes close the **engine** half of WP-0003 (“human table *or* full +engine playout”). They are not a substitute for human felt-play if we want +table texture later; they do answer “do the modes score to the end, and +what does ATTACK do?” + +--- + +## Runs covered + +| Task | Mode | Seats | Evidence | +|------|------|------:|----------| +| T01 | MODE_SEMI | 2p | attack-value cells; modes playable to scoring | +| T02 | MODE_SEMI | 3–4p (and 6p) | same panel | +| T03 | MODE_COALITION | 2p | same | +| T04 | MODE_COALITION | 3–4p (and 6p) | same | +| — | MODE_COOP | all | control cells | + +**Identical-play differentiation (seed 1, 4p, 37 commands):** + +| Mode | Winners | +|------|---------| +| SHARED GROUND | all four (mastery 4) | +| COMMON PROBLEM (semi) | **P3** (top personal) | +| BONDED COALITIONS | **P1+P2** (best Bond network) | + +Encoding of Modes.csv behaves as three distinct games. + +**Driver note (clay-borg):** GR-E03/E04 were previously unplayed because +`cb-play` forced SHARED GROUND — fixed on their side; not a modes defect. + +--- + +## Outcomes checklist + +### Shared total vs threshold / personal scores + +- Group success rates under “never attack” competent-ish policy (wins per + 200 games, 2/3/4/6 seats): + - SHARED: 132 / 165 / 190 / 200 + - SEMI (seat-0 among winners framing differs; personal race present): lower individual “among winners” counts + - COALITION: high “among winners” when not attacking (network still intact) +- Exact seed-by-seed personal score tables were not shipped in RPT-0003; + mode differentiation and ATTACK value are the load-bearing results. + +### Stress / DARVO + +- Under competent non-attacking play on baseline r0: **DARVO armed 0 times** + in the RPT-0003 competent aggregate (500 games cited). +- Later CB-EV-0031: peak Stress *held* never exceeds start **2** when policies + never select ATTACK — Stress only falls. Inbound pressure is ATTACK-only + for those policies. + +### ATTACK value (all three modes) + +| mode | never | sometimes | always | +|------|------:|----------:|-------:| +| SHARED | 132/165/190/200 | identical | 0 | +| SEMI | 59/52/48/44 | 59/52/48/**34** | 0 | +| COALITION | 131/134/132/116 | **59/52/48/34** | 0 | + +*(2/3/4/6 seats.)* ATTACK never improves outcomes; in coalitions it roughly +halves “among winners.” E04 attacking numbers match E03 when Bonds break +(GR-A07 + network scoring). + +### Underdetermined rules exposed? + +- **No new U-items** from mode scoring itself. +- **Design gap (not rules ambiguity):** ATTACK/DARVO irrelevant under + competent baseline play — tracked experimentally via WP-0006 (H1, + reject) → WP-0007 (H2 scoped stress, in flight). + +--- + +## Follow-ups + +| Item | Where | +|------|--------| +| Restore inbound Stress without flat table tax | H2 `h2-scoped-problem-stress` | +| Human felt-play of semi/coalition (optional) | residual note below; not blocking | +| Opening-action economy (INVESTIGATE first) | clay-borg offer; deferred | + +**Residual (optional, not a new workplan unless scheduled):** one human +2p semi and one 3–4p coalition session for “feels like one game” texture. +Engine checklist for T01–T04 is satisfied. diff --git a/history/260808-modular-variants.md b/history/260808-modular-variants.md new file mode 100644 index 0000000..b767b1e --- /dev/null +++ b/history/260808-modular-variants.md @@ -0,0 +1,43 @@ +# Composable rules modules by aspect (catalog schema 2) + +**Date:** 2026-08-08 +**Status:** adopted as catalog contract +**Catalog:** [`editions/CATALOG.md`](../editions/CATALOG.md), [`editions/catalog.yaml`](../editions/catalog.yaml) +**Aspect map:** [`editions/ASPECTS.md`](../editions/ASPECTS.md) +**Simulator research:** clay-borg `research/CB-RES-0010-game-aspects-and-design-space.md` + +--- + +## Decision + +Rules variations are **independent modules on named aspects** (design +dimensions), not only monolithic experiments. Each module can be measured +**alone** or in a **profile** (explicit combination). + +| Aspect | Examples | +|--------|----------| +| `problem_stress` | none / flat_any_open / scoped | +| `attack_relief` | none / self_soothe_ge4 | +| `end_condition` | fixed_rounds_5 / hybrid_clear_collapse (proposed) | +| `problem_deal` | fixed_setup / pressure_deck (proposed) | + +Full aspect inventory (including fixed-in-r0 dimensions): **ASPECTS.md**. + +H1 becomes profile `h1` = flat + attack soothe. +H2 becomes profile `h2` = scoped only. +New work prefers new modules + profiles over `experiments/mega-bundle`. + +**Terminology:** *aspect* replaces earlier *axis* in human docs; YAML field +is `aspect:`. + +## Why + +Maintainer: end-of-game, setup, dealing, stress-boosters should be +tryable alone and in combination. Monolithic H1/H2 hid that H1 mixed two +aspects and that end/deal work should not force a rewrite of stress routing. + +## clay-borg + +Resolve `profile` or `modules[]` → apply deltas in catalog **aspect** +order; record full module list in game state / replays. Evolve selection +UI and panels around **aspects × modules × profiles** (CB-RES-0010). diff --git a/history/260809-scn02-mechanical-distinct.md b/history/260809-scn02-mechanical-distinct.md new file mode 100644 index 0000000..63f3717 --- /dev/null +++ b/history/260809-scn02-mechanical-distinct.md @@ -0,0 +1,35 @@ +# SCN_02 re-tuned for mechanical distinctness + +**Date:** 2026-08-09 +**Source:** GROUND-RPT-0006 / ADHOC-2026-08-08-T02 + +clay-borg measured SCN_01 and SCN_02 as identical on suit and value at +every priority (only titles differed). That was not intentional. + +## Change (SCN_02 only; titles kept) + +| priority | was | now | title (unchanged) | +|---------:|-----|-----|-------------------| +| 0 Surface | Repair | Repair | Shared Task Left Undone | +| 1 | Clarify | **Change** | Different Standards | +| 2 | Boundary | **Clarify** | Invisible Workload | +| 3 | Repair | **Boundary** | Resentment Never Raised | +| 4 | Change | **Repair** | No Ownership Routine | + +Point values **unchanged** (2/2/2/3/3). Thresholds unchanged. + +## 2p suit multiset (Surface + H1–2) + +| board | suits | +|-------|--------| +| SCN_01 | Repair, Clarify, Boundary | +| SCN_02 | Repair, **Change**, Clarify | +| SCN_03 | Boundary, Clarify, Repair | +| SCN_04 | Repair, Clarify, Repair (harder) | + +SCN_02 is no longer a twin of SCN_01. Panels may treat four scenarios as +four mechanical boards again (within suit/value space). + +Fiction note: “Different Standards” as **Change** reads as revising the +shared standard; “Resentment” as **Boundary** as needing a limit — light +theme stretch, acceptable for r0 playtest. diff --git a/reports/260808-clay-borg-boards-and-modes.md b/reports/260808-clay-borg-boards-and-modes.md new file mode 100644 index 0000000..8d5e189 --- /dev/null +++ b/reports/260808-clay-borg-boards-and-modes.md @@ -0,0 +1,171 @@ +--- +id: GROUND-RPT-0006 +type: report +title: "clay-borg: all four Scenarios and all three Modes measured — modes change who wins, not whether the group survives" +domain: consumer +repo: ground-game +status: informational +owner: bernd +topic_slug: whynot +created: "2026-08-08" +extends: GROUND-WP-0003 +--- + +# Boards and Modes measurement receipt (CB-EV-0033) + +Upstream: clay-borg `evidence/CB-EV-0033-boards-and-modes.md`. + +**Context:** clay-borg dealt `SCN_01` and only `SCN_01` for its whole +existence — `deal()` took a scenario id and the one caller passed a +literal, so **15 of the 20 Problem cards had never been dealt by +anything**. Fixed on our side; all four boards and all three modes now +run. 4 × 3 × 3 cells, 100 games each, two bots. Everything below is bots, +no felt play. + +--- + +## 1. SCN_01 and SCN_02 are the same board — is that intended? + +Identical suit **and** value at every priority. Every measured cell +matches exactly, at every seat band, under both bots. + +A reskin is a legitimate choice and we are not calling this a defect. But +it means **"four scenarios" is three boards**, and any study treating them +as four independent samples double-counts one. We have pinned the current +state with a test so a future divergence is a decision rather than a +drift. + +**Ask:** intended reskin, or did one deck get copied and not re-tuned? + +--- + +## 2. SCN_04 is materially harder at 2 players + +| board | 2p group success (/100) | +|---|---| +| SCN_01 / SCN_02 | 67 | +| SCN_03 | 73 | +| **SCN_04** | **52** | + +**Your own data holds everything else fixed.** All four 2p deals are +Surface + priorities 1–2, all four give 6 available points against a +threshold of 5, all four start at Stress 2 over five rounds. The only +difference is the suit multiset: + +| board | 2p suits | +|---|---| +| SCN_01 / SCN_02 | Repair, Clarify, Boundary | +| SCN_03 | Boundary, Clarify, Repair | +| **SCN_04** | **Repair, Clarify, Repair** | + +SCN_04 is the only 2p deal needing **two of one suit**. + +**We are not claiming causation** — nothing here demonstrates the second +Repair is what costs the 15 points. But the seat-band thresholds (5 / 7 / +9) are uniform across boards, and at 2p the boards are not. + +**Ask:** is a ~15-point spread at 2p acceptable board variety, or should +the 2p threshold or SCN_04's priority-2 suit move? + +--- + +## 3. Every board is a formality at 6 players + +100/100 group success in **all twelve** 6p cells, both bots, every mode. +Same shape as F17. Reported, not acted on. + +--- + +## 4. The three Modes change **who wins**, not **whether the group +survives** + +We previously reported that the modes produced identical play. That was +**our instrument, not your game** — the bot never read the Mode card. We +built one that plays its seat's own objective and re-ran everything. + +**Group success: unchanged in 34 of 36 cells.** (SCN_03 at 4p moves 99 → +100 in all three modes — that is a bot refinement, not a mode effect; it +moves under SHARED GROUND too.) + +**Winning seats per game, BONDED COALITIONS:** + +| board | 4p, mode-blind bot | 4p, mode-aware bot | +|---|---|---| +| SCN_01 / SCN_02 | 2.04 | **2.98** | +| SCN_03 | 2.12 | **3.29** | +| SCN_04 | 2.05 | **3.01** | + +A seat whose score is its coalition's sum bonds harder, and coalitions +come out about half again as large. COMMON PROBLEM moves at 6p (1.10 → +1.17). Nothing else moves. + +**Control:** under SHARED GROUND the two bots agree at all but ≤2 +decision points across twelve boards — so the moving columns are +mode-awareness, not "a different bot". + +**Design reading, offered not asserted:** the Mode card currently decides +the *distribution of the win*, and the threshold decides survival +independently of it. If a Mode is meant to make the group's task feel +different — not just the podium — nothing we can measure says it +currently does. + +### The seat-band pattern is the interesting part + +2p: nothing moves in any mode. 4p: the largest effect. 6p: **nothing** +under BONDED COALITIONS. + +Our candidate explanation is that **two relation slots per seat cap +network growth**, so at 6p the incentive exists and cannot be acted on. +**This is untested.** It is cheap for us to test if you want it: run with +a third relation slot and see whether 6p coalition size then moves the +way 4p's does. + +**Ask:** is the two-slot limit meant to bind this hard at 5–6 players? + +--- + +## 5. Two things needing your ruling + +**(a) SHARED GROUND's mastery rating counts cards where the shared score +counts points.** The Mode card reads *"All claimed Problem cards form one +shared score. … For a mastery rating, subtract 1 for each Blame token +still in play and 1 for each Denied Problem."* The shared score is +claimed **value** (what the threshold is compared against); our engine +subtracts those penalties from the claimed **count**. Both readings fit +the sentence and they differ on every game where a 3-point Problem is +claimed. We have not changed it — scoring is yours. + +**(b) A package that adds a *file* is invisible to a consumer.** +`h2-scoped-problem-stress` ships `Rules_Text.csv` — 22 passages of +player-facing rules, including the one that says what a `stress_scope` +does — and clay-borg had **never read the file**. Our freshness check +verifies files it knows about; a file no reader mentions is not stale, it +is unseen. We have since read the passage we needed; the other 21 are +still unread. + +**Ask:** could a package manifest name its own files, so that a consumer +reading none of them is a detectable state rather than a silence? + +--- + +## Standing limits on all of the above + +- **No bot models a rival playing their objective.** A competitive mode + in which nobody anticipates an opponent is a weak test of that mode. +- **Bond-scoped joint SOLVE remains untested** (CB-EV-0032 criterion 4, + unchanged) — these bots read the Mode, not the module. +- **No felt play.** All bots, every number. + +--- + +## Ground-game disposition (2026-08-08 review) + +| # | Finding | Disposition | +|---|---------|-------------| +| 1 | SCN_01 ≡ SCN_02 mechanically | **Not treated as intentional.** Fiction reskin only; three distinct boards, not four. Residual: re-tune SCN_02 suit and/or values (content workplan). | +| 2 | SCN_04 harder at 2p (~52 vs ~67–73) | **Acceptable variety for now** as a harder board; monitor. If table feel is too swingy, first lever is priority-2 suit (drop double Repair), not global thresholds. | +| 3 | 6p 100% group success | **Known pattern** (F17 / difficulty line). Not fixed here; deal/pressure modules and WP-0005 disposition (Standard thresholds stand). | +| 4 | Modes change *who* wins, not *whether* group succeeds | **Accepted as current design property**, not a defect. Threshold = survival; Mode = distribution. Mode-aware bot was clay-borg instrument fix. | +| 5 | 2 relation slots mute 6p coalition effect | **Intentional cap** (complexity/time). Documented; third slot stays extension, not core r0. Optional clay-borg sensitivity run welcome. | +| 6 | Mastery: points vs card count | **RULED: points.** Shared score and mastery penalties use **point values**, not card count. Modes.csv clarified. | +| 7 | Package file manifest | **Accepted process ask.** Catalog/modules should declare `consumed_files` / overlays so unread files are detectable. Tracked under WP-0008 residual. | diff --git a/reports/260808-clay-borg-h1-measured.md b/reports/260808-clay-borg-h1-measured.md new file mode 100644 index 0000000..182e701 --- /dev/null +++ b/reports/260808-clay-borg-h1-measured.md @@ -0,0 +1,78 @@ +--- +id: GROUND-RPT-0004 +type: report +title: "clay-borg: H1 measured — reaches unregulated seats; group success collapses" +domain: consumer +repo: ground-game +status: informational +owner: bernd +topic_slug: whynot +created: "2026-08-08" +extends: GROUND-WP-0006 +--- + +# H1 measurement receipt (clay-borg CB-EV-0030 / CB-EV-0031) + +Upstream: clay-borg `evidence/CB-EV-0030-h1-measured.md`, +`evidence/CB-EV-0031-a-seat-that-does-not-regulate.md`, hub message +2026-08-08. Variant selection + H1-A/H1-B implemented in their kernel from +`rules_delta.yaml`. Baseline `unchanged:` list asserted. + +**Instrument caveat (their words):** three rounds of adversarial review; +twelve defects were in *their* harness, not in H1 design. Stable finding: +**H1 reaches the unregulated seat, and the table stops winning.** Supporting +numbers moved across corrections — treat policy-dependent tables as +directional, not absolute. + +No felt-play. SHARED GROUND dominant for regulation comparison; attack-value +covers three modes for arms. + +--- + +## Criteria §3.2 (design note) + +| # | criterion | verdict | +|---|-----------|---------| +| 1 | DARVO arm rate non-trivial | **Policy-dependent.** 0 for greedy. **Met for unregulated `reactive`** (~1 arm/seat/game at 3p+). Under rank-75, H1 *reduces* arms to 0 at 3p+ | +| 2 | ATTACK rises for some subpopulation | **Met only for unregulated seat.** rank-75 attacks **fall** under H1 (often to 0 at 3p+) | +| 3 | group success does not collapse | **Fails hard.** Greedy SHARED: 165/190/200 → **0** at 3/4/6p; 2p 132 → 68 | +| 4 | Bond/GROUND better than DARVO | Vacuous for winning policies (they never arm) | + +## Mechanism (not what H1 assumed) + +H1-A is answered by **regulation** (GROUND), not by climbing to DARVO: + +- Stress plateaus ~3 under greedy (below gate 4 and arm 5). +- Actions spent on stress hygiene → fewer SOLVEs → **solve-rate tax**. +- **H1-B never fires** under competent play (Stress never ≥4). + +Seed-1 3p illustration: baseline clear board / success; H1 ends Stress 3,3,3 with 2 unclaimed and under threshold. + +Tax scales with open board (harder at 3p+); intended DARVO effect does not. + +## Baseline Stress economy (larger than H1) + +Under greedy **and** reactive on **baseline** r0: peak Stress **held** never exceeds start **2** — Stress only falls — when those policies never select ATTACK. ATTACK appears to be the **sole inbound pressure** for those policies. That is a sharper account of RPT-0003 than “ATTACK never pays”: **the pressure ATTACK would answer never occurs** unless someone already attacks. + +(Always-attack rank-95 *does* drive Stress under baseline — so the economy is reachable; just not by non-attacking competent play.) + +## Invariant (unexplained) + +Under `reactive` + H1 at 3p/4p/6p: DARVO arms **exactly `seats × games`** (one arm per seat per game). clay-borg does not explain it. H1-B disabled → arm count unchanged (withdrawn “H1-B suppresses attacker DARVO” story). + +## Withdrawn by clay-borg + +Story that H1-B suppresses DARVO in the attacker / concentrates it in the target — from a broken multi-preference policy. + +## Their offered tuning directions (not findings) + +If the aim is Stress sometimes reaching 5: pressure scaling with **count** of unclaimed Problems; delay pressure until later rounds; lower DARVO arm threshold. Each is a rules choice for ground-game. + +--- + +## Ground-game reading (for WP-0006-T04/T05) + +1. **Do not promote H1 as packaged** into baseline — criterion 3 fails. +2. **Direction is right:** Problem → Stress coupling addresses the real gap (inbound pressure only via ATTACK). +3. **Shape/magnitude is wrong:** flat +1/end is a board-clear tax that competent players absorb with GROUND before DARVO. +4. **Next experiment** should change *how* pressure is applied (scaled/delayed/targeted), not only add status stress — though Idea 2 last-place (semi) remains a candidate **H2** per design note §6. diff --git a/reports/260808-clay-borg-h2-measured.md b/reports/260808-clay-borg-h2-measured.md new file mode 100644 index 0000000..30e74de --- /dev/null +++ b/reports/260808-clay-borg-h2-measured.md @@ -0,0 +1,30 @@ +--- +id: GROUND-RPT-0005 +type: report +title: "clay-borg: H2 measured — scoping works; bond SOLVE untested by bots" +domain: consumer +repo: ground-game +status: informational +owner: bernd +topic_slug: whynot +created: "2026-08-08" +extends: GROUND-WP-0007 +--- + +# H2 measurement receipt (CB-EV-0032) + +Upstream: clay-borg `evidence/CB-EV-0032-h2-measured.md`, hub 2026-08-08. + +| # | criterion | verdict | +|---|-----------|---------| +| 1 | greedy SHARED 3–4p ≫ H1’s 0 | **met** — 120 / 175 vs 0 / 0 (~73% / 92% of baseline) | +| 2 | stress variance up | **met** 2p/4p/6p; miss 3p 1.50 vs baseline 1.57 | +| 3 | DARVO + still sometimes wins | **met** (reactive 13/13/57 at 3/4/6p) | +| 4 | bond SOLVE elevated | **untested** by panel (bots ignore scope incentives); incidental claim rate lower on bond | +| 5 | all-global control → H1 collapse | **met** — 3p/4p → 0 | + +**ATTACK:** under H2 occasional attack is **affordable** (rank-75 still wins near greedy) but **not profitable** (never beats greedy; always-attack still 0). F17 still open as design judgement. + +**Instrument:** `with_variant()` required for owner assignment; bare `state.variant =` left H2 inert — fixed on their side. + +No felt-play. Bond joint-motivation needs a table or multi-agent-aware policy. diff --git a/reports/260809-clay-borg-attack-relief-correction.md b/reports/260809-clay-borg-attack-relief-correction.md new file mode 100644 index 0000000..fee4ae0 --- /dev/null +++ b/reports/260809-clay-borg-attack-relief-correction.md @@ -0,0 +1,116 @@ +--- +id: GROUND-RPT-0007 +type: report +title: "clay-borg: correction — H1-B was never measured, and it does something" +domain: consumer +repo: ground-game +status: informational +owner: bernd +topic_slug: whynot +created: "2026-08-09" +extends: GROUND-WP-0006 +--- + +# Correction to GROUND-RPT-0004 (H1 measured) + +Upstream: clay-borg `specs/FindingRegister.md` F31, +`games/ground/examples/module-panel.rs`. + +**This is a correction we owe you, not a new result we chose to send.** + +--- + +## 1. What we got wrong + +We reported H1 as measured and rejected. **Half of it was never +measured.** + +H1 is two modules: flat problem→stress pressure (H1-A) and ATTACK +self-soothe at Stress ≥ 4 (H1-B). Every game behind that verdict was +played by bots that **never attacked, in any game, at any seat count**. +H1-B acts only on an uncancelled ATTACK by a seat at the stress gate, so +it had no opportunity in a single one of them. + +**The rejection itself stands** — group success is 0 with or without +H1-B, and that is H1-A's doing. But *"H1-B does nothing"* was never +established, and is now known to be false. + +The cause was on our side and is not subtle: our bot ranked GROUND at +100 when the gate bites and ATTACK at 10, so at exactly the position +where self-soothe would pay, GROUND won the comparison every time. + +--- + +## 2. H1-B is unreachable in the printed game + +We built a probe that attacks at the gate. **Selected on its own, +`attack_relief.self_soothe_ge4` still never fires.** + +Peak Stress in the baseline never exceeds its starting 2. The gate is at +4. So no ATTACK can ever *be* gated, however eagerly a seat attacks — +the baseline has no inbound Stress at all, which is the same observation +as F17 seen from the other side. + +**A module can be unreachable because of an aspect it does not name.** +`attack_relief` needs a `problem_stress` module before it can act, and +nothing in its own declaration says so. That may be worth a field in the +catalog — a module's *preconditions*, distinct from its aspect — so that +"unreachable in this configuration" is detectable rather than discovered. + +--- + +## 3. Once reachable, it does something + +Same probe throughout, varying **only** the module: + +| seats | `problem_stress.scoped` | `+ attack_relief.self_soothe_ge4` | group wins | DARVO arms | +|---|---|---|---|---| +| 3p | 12 | **21** | +9 | 299 → 221 | +| 4p | 19 | **28** | +9 | 294 → 213 | +| 6p | 50 | **57** | +7 | 334 → 164 | + +Under flat pressure the effect shows in DARVO alone: `h1` arms **200** +against `problem_stress.flat_any_open`'s 300 / 400 / 600, with group wins +0 in both. + +**Read this as the conditional it is.** *Given seats that attack at the +gate*, self-soothe raises group success by ~7–9 per 100 and cuts DARVO +arming by a quarter to a half. The probe is deliberately poor play — it +wins 12/100 where our ordinary bot wins 60/100 under the same module — so +this is **not** a claim that attacking is good, and **not** evidence +against F17. + +**Sensitivity:** vary only the ATTACK rank. At 10 and at +55 the module +never fires; at 110 it fires in every game. Nothing about the module +changed — only whether any seat gave it a turn. + +--- + +## 4. What we are not saying + +- **Not** that H1 should be reconsidered. H1-A drives group success to 0 + at every seat band and self-soothe does not move that. +- **Not** that ATTACK is good play. +- **Not** that these numbers describe a table. Every one is bots, and the + seats that produce them play badly on purpose. + +**Ask:** is a *reachability* declaration worth adding to a module — the +conditions under which it can act at all — so a consumer can report "not +reachable in this configuration" instead of a number that looks like a +null result? + +--- + +## 5. Two earlier items still open on your side + +Neither is new; both were in GROUND-RPT-0006 and are unanswered. + +**(a) The competitive modes are weakly tested.** No bot of ours models a +*rival* playing their objective. A mode whose point is that players +compete, measured by seats that never anticipate an opponent, is a weak +test of that mode — and we cannot fix it by measuring harder. + +**(b) `problem_stress.scoped` cannot reach a decision in round one.** +Only the Surface Problem is face up, so there is never a choice between +two Problems for scope to decide. Any read of that module weighted toward +early rounds is measuring a mechanism that has not started. diff --git a/workplans/ADHOC-2026-08-08.md b/workplans/ADHOC-2026-08-08.md new file mode 100644 index 0000000..513dbfa --- /dev/null +++ b/workplans/ADHOC-2026-08-08.md @@ -0,0 +1,65 @@ +--- +id: ADHOC-2026-08-08 +type: adhoc +title: "RPT-0006 boards/modes disposition and small rules clarifications" +domain: consumer +repo: ground-game +status: finished +owner: grok +created: "2026-08-08" +updated: "2026-08-09" +state_hub_workstream_id: "3a4e45a3-2fea-49b7-8104-feb9ec1b521b" +--- + +# Ad hoc from clay-borg boards & modes panel (GROUND-RPT-0006) + +**Finished 2026-08-09.** + +## Task: clarify SHARED GROUND mastery uses points + +```task +id: ADHOC-2026-08-08-T01 +status: done +priority: high +state_hub_task_id: "df9fe896-9461-41bb-aab4-620f6c0fdf7d" +``` + +**Done 2026-08-08.** Modes.csv MODE_COOP: shared score and mastery +penalties use **points**, not card count. + +## Task: re-tune SCN_02 (was mechanical twin of SCN_01) + +```task +id: ADHOC-2026-08-08-T02 +status: done +priority: medium +state_hub_task_id: "2eb85dc8-45ff-4189-8fd2-d4ec8fe5f784" +``` + +**Done 2026-08-09.** SCN_02 suits retuned; values/titles kept. Note: +[`history/260809-scn02-mechanical-distinct.md`](../history/260809-scn02-mechanical-distinct.md). +Scoped module `Problems.csv` rebuilt to match. clay-borg notified to +re-vendor / re-run twin pin. + +## Task: optional SCN_04 2p suit pass + +```task +id: ADHOC-2026-08-08-T03 +status: cancel +priority: low +state_hub_task_id: "b7e5aaab-c518-40fc-8b10-7645cc25fbd3" +``` + +**Cancelled 2026-08-09.** Not requested; SCN_04 stays the harder 2p board +by design (double Repair). Reopen only if table feel complains. + +## Task: consumed_files on modules (process) + +```task +id: ADHOC-2026-08-08-T04 +status: done +priority: medium +state_hub_task_id: "09787097-7677-4422-b61f-9930646bbff3" +``` + +**Done 2026-08-08.** Example on `problem_stress.scoped` + CATALOG rule. diff --git a/workplans/GROUND-WP-0001-statehub-bootstrap.md b/workplans/GROUND-WP-0001-statehub-bootstrap.md index 161a1db..3365de5 100644 --- a/workplans/GROUND-WP-0001-statehub-bootstrap.md +++ b/workplans/GROUND-WP-0001-statehub-bootstrap.md @@ -9,7 +9,7 @@ owner: codex topic_slug: whynot created: "2026-07-31" updated: "2026-08-03" -state_hub_workstream_id: "1e356c32-3a04-43a0-aa02-43cc18cca60a" +state_hub_workstream_id: "221583ba-992a-5ca1-a519-6b100ea90157" --- # Bootstrap State Hub integration @@ -22,7 +22,7 @@ Product repo for GROUND — A Game of Bonds and Rivalry (DARVO Edition): playtes id: GROUND-WP-0001-T01 status: done priority: high -state_hub_task_id: "bde46494-9425-4f1c-8b5d-f01fe705bf9a" +state_hub_task_id: "5a2dd899-1117-5981-ae15-3527c26772e5" ``` Review `INTENT.md`, `SCOPE.md`, `AGENTS.md`, and `.custodian-brief.md`. @@ -47,7 +47,7 @@ rely on before the scope sentence can be written honestly. id: GROUND-WP-0001-T02 status: done priority: high -state_hub_task_id: "d4dbf142-6a5b-4631-923e-9e761f462900" +state_hub_task_id: "481611a1-38bf-586b-92de-9c57afa25f3a" ``` Identify the repo's install, test, lint, build, and run commands. Add or refine @@ -82,7 +82,7 @@ the contract GROUND-WP-0002 T01 defines, not before it. id: GROUND-WP-0001-T03 status: done priority: medium -state_hub_task_id: "7912f74a-1ae3-40c6-a65d-28221beb0f40" +state_hub_task_id: "ab005402-9c7e-5425-be54-53e7eb693ec3" ``` Create the first implementation workplan for the repository's most important diff --git a/workplans/GROUND-WP-0002-rulings-clay-borg-is-blocked-on.md b/workplans/GROUND-WP-0002-rulings-clay-borg-is-blocked-on.md index 84a71da..63d3124 100644 --- a/workplans/GROUND-WP-0002-rulings-clay-borg-is-blocked-on.md +++ b/workplans/GROUND-WP-0002-rulings-clay-borg-is-blocked-on.md @@ -9,7 +9,7 @@ owner: bernd topic_slug: whynot created: "2026-08-03" updated: "2026-08-03" -state_hub_workstream_id: "d8fc3a69-a5ae-4f6e-b4fc-b07d1ff9c783" +state_hub_workstream_id: "b53c9e6d-62b7-5074-a359-43e054c5f989" --- # Rulings the engine is blocked on @@ -61,7 +61,7 @@ dissolve without anyone changing a rule. id: GROUND-WP-0002-T01 status: done priority: high -state_hub_task_id: "431cca12-e6d9-4eba-9360-f4f13ed263c1" +state_hub_task_id: "122c4b64-66c3-5b05-8d03-62ab372f62a0" ``` State whether `editions/ground-darvo-r0/` is the **authoritative** source @@ -106,7 +106,7 @@ clay-borg. id: GROUND-WP-0002-T02 status: done priority: high -state_hub_task_id: "895573ac-d7b9-4160-a118-5bc8866c28c8" +state_hub_task_id: "795a2fdd-d29b-523e-a85a-50bfb9eff260" ``` Three related questions, all raised by play, all currently decided by the @@ -147,7 +147,7 @@ is meant to learn from the waste. id: GROUND-WP-0002-T05 status: done priority: high -state_hub_task_id: "e1d6a548-dedf-473a-9ebd-a2e3a286d510" +state_hub_task_id: "5be3c879-96ef-518e-9cf9-e9863497db57" ``` **This is the oldest item and it has never been read.** `clay-borg` @@ -197,7 +197,7 @@ Answer per item: **confirm**, or **correct with the ruling**. id: GROUND-WP-0002-T03 status: done priority: medium -state_hub_task_id: "52cc157f-8fbd-469d-9da7-a96f1c60b654" +state_hub_task_id: "572dfbe3-2a8a-58f7-8d00-5de00cea4028" ``` Six engine scenarios are tagged `provisional: true` with @@ -235,7 +235,7 @@ T01 may dissolve it. id: GROUND-WP-0002-T04 status: done priority: medium -state_hub_task_id: "6c55eb56-22dc-4ee2-ac1a-4ced0dedfab9" +state_hub_task_id: "107b3b24-4e6d-58ca-98f7-ca2b5a6ded5f" ``` Both scoring modes are implemented and neither has been played through a diff --git a/workplans/GROUND-WP-0003-playtest-semi-and-coalitions.md b/workplans/GROUND-WP-0003-playtest-semi-and-coalitions.md index 300562e..77eafc2 100644 --- a/workplans/GROUND-WP-0003-playtest-semi-and-coalitions.md +++ b/workplans/GROUND-WP-0003-playtest-semi-and-coalitions.md @@ -4,14 +4,14 @@ type: workplan title: "Playtest GR-E03 semi-coop and GR-E04 coalitions to end of game" domain: consumer repo: ground-game -status: ready +status: finished owner: bernd topic_slug: whynot created: "2026-08-03" -updated: "2026-08-03" +updated: "2026-08-08" origin: residual origin_ref: GROUND-WP-0002 -state_hub_workstream_id: "998e00a0-cdc8-4e1d-879b-7df0858d26dc" +state_hub_workstream_id: "a6eb1807-3e79-588f-909c-61c002eb30d5" --- # Playtest semi-coop and coalitions to the end @@ -21,8 +21,35 @@ state_hub_workstream_id: "998e00a0-cdc8-4e1d-879b-7df0858d26dc" missing is a full game — human table or full engine playout — through Round 5 and scoring. -Nothing here changes the kernel unless play exposes a new underdetermined -point; if it does, open a new rulings workplan rather than silent defaults. +**Finished 2026-08-08** on the engine path (RPT-0003 + notes). Human +felt-play remains optional residual prose, not an open blocking task. + +## Engine receipt (2026-08-07) — [GROUND-RPT-0003](../reports/260807-clay-borg-attack-and-modes.md) + +clay-borg closed the mechanical gap: GR-E03 and GR-E04 now play to scoring. +Root cause was theirs (`cb-play` always forced SHARED GROUND), not the modes. + +| finding | implication for this workplan | +|---|---| +| All three modes produce different winners from identical play (seed 1, 4p) | Modes encode distinct games — encoding looks sound | +| ATTACK never improves win rate in any mode (200 games × cells) | Scoring gives no path for ATTACK | +| In 500 competent games, DARVO armed **zero** times | Namesake sequence only from “bad” play on baseline | +| Coalitions attacking numbers = semi-coop when Bonds break | Mechanism matches GR-A07 + GR-E04 network scoring | + +## Design question — disposition + +**Question:** is it intended that ATTACK/DARVO is unreachable under competent +play in all three modes? + +**Disposition 2026-08-08:** treated as **design gap to explore**, not as +“intended / leave forever.” Experimental line: + +1. [GROUND-WP-0006](GROUND-WP-0006-h1-problem-stress-experiment.md) — H1 flat + pressure — **reject-as-baseline** (group wins collapse). +2. [GROUND-WP-0007](GROUND-WP-0007-h2-scoped-problem-stress.md) — H2 scoped + stress — **in flight** (clay-borg). + +Do not reopen WP-0002 for this. ## Modes under test @@ -35,62 +62,84 @@ point; if it does, open a new rulings workplan rather than silent defaults. ```task id: GROUND-WP-0003-T01 -status: todo +status: done priority: high -state_hub_task_id: "dab51b0b-4202-4517-a0a4-e436eef8282c" +state_hub_task_id: "1baa22ee-5cc2-5168-9f55-14375dfacfe5" ``` Play or simulate one complete 2-player game under MODE_SEMI (threshold 5). Record: final shared total vs threshold, personal scores, Stress/DARVO moments that felt broken or unclear, any new underdetermined points. +**Done 2026-08-08 (engine).** clay-borg full-mode panel includes 2p SEMI; +see [history/260808-mode-playtest-engine-notes.md](../history/260808-mode-playtest-engine-notes.md). + ## Task: 4p semi-coop full game ```task id: GROUND-WP-0003-T02 -status: todo +status: done priority: medium -state_hub_task_id: "19ec0937-a001-4819-9916-0c87c9e92993" +state_hub_task_id: "4407f5e5-4389-5871-89e2-bc99ab8b2700" ``` Same checklist at 3–4p (threshold 7). Note whether personal race undercuts group success too hard or too little. +**Done 2026-08-08 (engine).** 3/4/6p SEMI cells in attack-value; personal +race present; ATTACK still never helps. + ## Task: 2p coalitions full game ```task id: GROUND-WP-0003-T03 -status: todo +status: done priority: high -state_hub_task_id: "16c36d63-fc8c-45b7-a423-aec832a616f9" +state_hub_task_id: "bd039513-1eb5-504c-9a14-1c005570fa22" ``` Complete 2p game under MODE_COALITION. At 2p a Bond makes one coalition of two; no Bond is two solo coalitions. Check that end scoring is intelligible. +**Done 2026-08-08 (engine).** COALITION cells include 2p; scoring +differentiates from SEMI/COOP on identical command streams (4p witness). + ## Task: 4p coalitions full game ```task id: GROUND-WP-0003-T04 -status: todo +status: done priority: medium -state_hub_task_id: "9a048533-f572-48cd-b10e-220982016d72" +state_hub_task_id: "ed8df52d-ce5e-53aa-b1c8-6b482980f158" ``` Complete 3–4p game under MODE_COALITION. Watch multi-player Bond networks, whether Rivalries correctly fail to connect, and whether threshold-then- coalition feels like one game or two bolted together. +**Done 2026-08-08 (engine).** Bond-break → E04 degenerates to E03-like +attack numbers (mechanism confirmation). “Feels like one game” remains +optional human residual. + ## Task: write playtest notes back into repo ```task id: GROUND-WP-0003-T05 -status: todo +status: done priority: medium -state_hub_task_id: "0b5d2785-33bf-435d-8e4e-f76b185098ab" +state_hub_task_id: "a551013a-fda3-50bf-9106-0320c0ce2446" ``` For each completed run, leave a short note under `history/` (or append to this workplan) with date, mode, player count, outcome, and any follow-up ruling needs. If a follow-up ruling is needed, spawn a new workplan — do not reopen GROUND-WP-0002. + +**Done 2026-08-08.** Notes: +[history/260808-mode-playtest-engine-notes.md](../history/260808-mode-playtest-engine-notes.md). +Follow-up design work lives in WP-0007 (H2), not a reopened rulings WP. + +## Residuals + +- Optional human table sessions (felt texture only). +- ATTACK/DARVO relevance → WP-0007 (active). diff --git a/workplans/GROUND-WP-0004-the-threshold-ruling-rests-on-a-bad-premise.md b/workplans/GROUND-WP-0004-the-threshold-ruling-rests-on-a-bad-premise.md index ae842d9..beabf65 100644 --- a/workplans/GROUND-WP-0004-the-threshold-ruling-rests-on-a-bad-premise.md +++ b/workplans/GROUND-WP-0004-the-threshold-ruling-rests-on-a-bad-premise.md @@ -11,7 +11,7 @@ created: "2026-08-03" updated: "2026-08-04" origin: correction origin_ref: GROUND-WP-0002 -state_hub_workstream_id: "067434eb-18cc-472f-b4ea-7dd16555629f" +state_hub_workstream_id: "5cc37328-fb8a-5e4f-8d45-eeb806be2359" --- # The GR-E01 ruling was made on a false premise, and clay-borg supplied it @@ -46,7 +46,7 @@ in clay-borg (stand-in / wrong deal depth). id: GROUND-WP-0004-T01 status: done priority: high -state_hub_task_id: "dcd7da12-be3a-4289-8d21-1924401a1259" +state_hub_task_id: "073dc0d9-c48b-5cb2-93f0-0931cdec9999" ``` ### RULED 2026-08-04 (maintainer confirmed direction) @@ -80,7 +80,7 @@ state_hub_task_id: "dcd7da12-be3a-4289-8d21-1924401a1259" id: GROUND-WP-0004-T02 status: done priority: medium -state_hub_task_id: "bd1c7a7d-36a2-4bf4-ab42-8e5489706df4" +state_hub_task_id: "3b95edc7-0e0e-519a-a1b0-4bc4539e4804" ``` ### RULED 2026-08-04 — process hygiene diff --git a/workplans/GROUND-WP-0005-difficulty-tiers-and-pressure-dial.md b/workplans/GROUND-WP-0005-difficulty-tiers-and-pressure-dial.md index ce27678..9b5b1c3 100644 --- a/workplans/GROUND-WP-0005-difficulty-tiers-and-pressure-dial.md +++ b/workplans/GROUND-WP-0005-difficulty-tiers-and-pressure-dial.md @@ -4,48 +4,67 @@ type: workplan title: "Difficulty tiers (threshold ratio) and optional Pressure dial" domain: consumer repo: ground-game -status: active +status: finished owner: bernd topic_slug: whynot created: "2026-08-04" -updated: "2026-08-04" +updated: "2026-08-08" origin: residual origin_ref: GROUND-WP-0004 -state_hub_workstream_id: "e6a26af9-f58d-44b4-89fd-bcb5ecba3e0f" +state_hub_workstream_id: "7a91ccc8-fe04-5831-b427-677b2a49a972" --- # Optional difficulty control after GR-E01 arithmetic is settled **Origin residual of GROUND-WP-0004.** Arithmetic winability is closed: Surface + hidden `1..k` → available 6/9/12; Standard thresholds 5/7/9. -Design for a simple difficulty dial lives in +Design history: [`history/260804-threshold-reachability-and-difficulty.md`](../history/260804-threshold-reachability-and-difficulty.md). -Do **not** start this until playtest on the correct deal shows a need for -Learning / Mastery (or solo) tuning. Standard is already shippable. +**Finished 2026-08-08.** No named Learning/Mastery **threshold** tiers for +now. Pressure / difficulty variation lives on modular **aspects** (see +[ASPECTS.md](../editions/ASPECTS.md) `difficulty_accessibility` and +`problem_stress` / `problem_deal`). + +## Baseline receipt — [GROUND-RPT-0002](../reports/260805-clay-borg-difficulty.md) + +clay-borg proposed **no threshold changes**. Spread 72–100 points means +single-policy win rate is not difficulty. 2p tightest; 5–6p play-matters-more. + +## Dial candidates (disposition) + +| Dial | Disposition | +|------|-------------| +| **L1 Threshold ratios** (Learning / Mastery) | **Not now.** No measured need; RPT-0002 against moving 5/7/9. | +| **L2 Scope / composition** | **Preferred.** `problem_stress.scoped` measured (RPT-0005); further dials via `problem_deal` and profiles under [WP-0008](GROUND-WP-0008-composable-rules-modules.md). | +| **Flat global stress** | **Rejected** as difficulty lever (H1 / RPT-0004). | + +If thresholds are revisited later: new workplan or reopen as residual of +modular difficulty aspect — do not encode into r0 silently. ## Task: decide whether to add named tiers ```task id: GROUND-WP-0005-T01 -status: wait +status: done priority: low -state_hub_task_id: "95dcd233-8ebf-44de-95ee-f69b3d973d26" +state_hub_task_id: "59e584f6-afba-5ac3-aab9-8e793047f3ed" ``` -After competent play on correct GR-S01 import: keep Standard only, or add -Learning / Mastery as **threshold ratios of available** (plus optional -Pressure dial: start Stress / Freedom). If yes, integrate as a third setup -axis (Difficulty card) without changing Mode scoring. +**RULED 2026-08-08:** Keep **Standard thresholds only** (5 / 7 / 9). Do +**not** add named Learning/Mastery threshold-ratio tiers at this time. + +Pressure dial path: modular aspects (`problem_stress`, future +`problem_deal` / setup recipes), not threshold cards in r0. ## Task: encode tiers in edition data (if T01 says yes) ```task id: GROUND-WP-0005-T02 -status: wait +status: cancel priority: low -state_hub_task_id: "1e7202cf-01af-48e6-b71d-029de9ec61e2" +state_hub_task_id: "5569d823-1010-58a7-a97d-a1574c024aa8" ``` -Rules_Text + scenario or difficulty-card data; clay-borg `threshold(seats, -difficulty)` and invariant `threshold ≤ available`. +**Cancelled 2026-08-08.** T01 said no named threshold tiers. Encoding of +scope mix / deal recipes is module/catalog work (WP-0008), not this task. diff --git a/workplans/GROUND-WP-0006-h1-problem-stress-experiment.md b/workplans/GROUND-WP-0006-h1-problem-stress-experiment.md index f390381..6fe70e7 100644 --- a/workplans/GROUND-WP-0006-h1-problem-stress-experiment.md +++ b/workplans/GROUND-WP-0006-h1-problem-stress-experiment.md @@ -4,14 +4,14 @@ type: workplan title: "H1 experiment: problem pressure and high-stress ATTACK self-soothe" domain: consumer repo: ground-game -status: active +status: finished owner: bernd topic_slug: whynot created: "2026-08-07" updated: "2026-08-08" origin: residual origin_ref: GROUND-WP-0003 -state_hub_workstream_id: "0056c739-e31a-459c-bf5c-d67a9bd9b596" +state_hub_workstream_id: "35d47980-4092-55a6-9ba8-4b67c0dc4f18" --- # H1 — measure whether Stress coupling restores ATTACK/DARVO relevance @@ -25,9 +25,9 @@ Design challenge and hypothesis: **Catalog id:** `h1-problem-stress` (selectable; not baseline). **Measurement:** [GROUND-RPT-0004](../reports/260808-clay-borg-h1-measured.md). -Do **not** merge H1 into `ground-darvo-r0` from this workplan. Catalog -`decision: reject-as-baseline` recorded 2026-08-08 (agent recommendation -pending maintainer confirm on T05). +**Finished 2026-08-08.** H1 packaged, measured, **reject-as-baseline**. +Successor residual: [GROUND-WP-0007](GROUND-WP-0007-h2-scoped-problem-stress.md). +Package stays in catalog for regression A/B — do not delete. ## Task: freeze H1 package and catalog entry @@ -35,7 +35,7 @@ pending maintainer confirm on T05). id: GROUND-WP-0006-T01 status: done priority: high -state_hub_task_id: "183e5fef-d350-434f-8ebb-09c8a43e224a" +state_hub_task_id: "9cc1d6a2-ddb9-5d26-a55c-c61242cb520d" ``` Land experiment directory, `rules_delta.yaml`, `editions/catalog.yaml` + @@ -49,7 +49,7 @@ Land experiment directory, `rules_delta.yaml`, `editions/catalog.yaml` + id: GROUND-WP-0006-T02 status: done priority: high -state_hub_task_id: "20ea00ea-c196-4aab-982b-12d5ea79b258" +state_hub_task_id: "1944fdcb-6086-5398-a2e1-2defea01b177" ``` Message clay-borg with: catalog path, `variant_id: h1-problem-stress`, @@ -64,9 +64,9 @@ arm-rate report against H1 vs baseline. ```task id: GROUND-WP-0006-T03 -status: todo +status: cancel priority: medium -state_hub_task_id: "d3430104-fa6e-4a91-999f-0905424c9c2f" +state_hub_task_id: "25682a01-f292-58b9-addc-3404f275eb51" ``` One short game under H1 rules using experiment `Rules_Text` / `Actions`. @@ -74,13 +74,17 @@ Note: stress climb speed, whether ATTACK felt useful at 4–5, whether DARVO appeared, whether group threshold still felt fair. Append notes under `history/` or this workplan. +**Cancelled 2026-08-08.** H1 rejected as baseline; engine measurement +already showed group collapse. Felt-play effort moves to H2 +(GROUND-WP-0007-T03) if needed. + ## Task: record measurement and catalog utility ```task id: GROUND-WP-0006-T04 status: done priority: high -state_hub_task_id: "a6d90fa8-1b95-4856-9642-851d0b0f2ff4" +state_hub_task_id: "050491b8-b62d-52a0-927b-cd1e7ecae1ef" ``` When clay-borg (or table + engine) results exist: update @@ -96,9 +100,9 @@ Package remains `selectable: true` for regression A/B. ```task id: GROUND-WP-0006-T05 -status: wait +status: done priority: medium -state_hub_task_id: "40e74ec4-c006-4411-9259-6277371b2601" +state_hub_task_id: "c0da8011-2791-50f2-b5e1-d17ec75b24ca" ``` Maintainer decision from criteria in the design note §3.2. If reject or @@ -106,25 +110,13 @@ under-deliver: spawn H2 (e.g. last-place status stress) as a **new** experiment package, not an in-place mutation of H1 without a new `variant_id`. -**Agent recommendation 2026-08-08 (needs maintainer confirm):** +**Done 2026-08-08 (maintainer direction: try scoped attachment).** -| choice | recommendation | -|--------|----------------| -| Promote H1 deltas into r0 | **No** — criterion 3 fails hard | -| Keep package in catalog | **Yes** — regression pin, not ship | -| Next experiment | **Yes** — new `variant_id` (H2), not silent H1 edit | +| choice | decision | +|--------|----------| +| Promote H1 into r0 | **No** — `reject-as-baseline` | +| Keep H1 in catalog | **Yes** — A/B control | +| Next experiment | **[GROUND-WP-0007](GROUND-WP-0007-h2-scoped-problem-stress.md)** — `h2-scoped-problem-stress` (personal / bond / global) | -**H2 shape candidates** (pick one or combine carefully): - -1. **Pressure form:** +Stress **per** unclaimed Problem, or only from - Round 3+, or only if ≥2 unclaimed — so tax does not force full clear - every round before SOLVE bandwidth exists. -2. **Who pays:** not always everyone — e.g. Lead, or seats with 0 claims - this game, or last place (semi Idea 2). -3. **Keep or drop H1-B:** H1-B never fired under competent play; either - drop for H2 clarity or lower the self-soothe gate (Stress ≥3) so it is - testable. -4. **Do not** only stack last-place stress on top of flat H1-A without - fixing the solve-rate tax first. - -Confirm T05 → close WP-0006 or spawn H2 workplan. +Bond scope kept because bonded players share stress **and** joint SOLVE +incentive. H1-B not stacked into H2. diff --git a/workplans/GROUND-WP-0007-h2-scoped-problem-stress.md b/workplans/GROUND-WP-0007-h2-scoped-problem-stress.md index 4f33a3b..d8a8b1c 100644 --- a/workplans/GROUND-WP-0007-h2-scoped-problem-stress.md +++ b/workplans/GROUND-WP-0007-h2-scoped-problem-stress.md @@ -4,15 +4,14 @@ type: workplan title: "H2 experiment: scoped problem stress (personal / bond / global)" domain: consumer repo: ground-game -status: active +status: finished owner: bernd topic_slug: whynot created: "2026-08-08" updated: "2026-08-08" -# measurement: GROUND-RPT-0005 origin: residual origin_ref: GROUND-WP-0006 -state_hub_workstream_id: "6a72a7c3-b408-4f3a-9f15-bf204e52653d" +state_hub_workstream_id: "9ed6acaa-50e2-5b2d-987a-d53ebbc3aa8e" --- # H2 — route problem stress by scope; measure bond-network incentive @@ -21,12 +20,14 @@ state_hub_workstream_id: "6a72a7c3-b408-4f3a-9f15-bf204e52653d" (H1 reject-as-baseline). Design: [`history/260808-h2-scoped-problem-stress.md`](../history/260808-h2-scoped-problem-stress.md). -**Package:** [`editions/experiments/h2-scoped-problem-stress/`](../editions/experiments/h2-scoped-problem-stress/) -**Catalog id:** `h2-scoped-problem-stress` -**Base:** `ground-darvo-r0` (do **not** stack H1-A/H1-B). +**Module (preferred):** `problem_stress.scoped` +**Legacy experiment:** `h2-scoped-problem-stress` / profile `h2` +**Measurement:** [GROUND-RPT-0005](../reports/260808-clay-borg-h2-measured.md) -Bond-scope intent: bonded seats share End stress on that card, so the -network is jointly incentivised to SOLVE it (any seat may still SOLVE). +**Finished 2026-08-08.** Scoped routing **kept as experiment module**; not +promoted into baseline `ground-darvo-r0` yet. Follow-ons are **other +aspects** (end, deal) under [WP-0008](GROUND-WP-0008-composable-rules-modules.md), +not silent H2 edits. ## Task: freeze H2 package and catalog entry @@ -34,12 +35,9 @@ network is jointly incentivised to SOLVE it (any seat may still SOLVE). id: GROUND-WP-0007-T01 status: done priority: high -state_hub_task_id: "8e492c40-f0d2-4b26-990d-c01e87f861e5" +state_hub_task_id: "2f197073-ed12-56e5-a3f5-21cbc95ff485" ``` -Land experiment directory, `rules_delta.yaml`, catalog row, design note. -Baseline r0 and H1 package untouched (H1 stays reject-as-baseline control). - **Done 2026-08-08.** ## Task: request clay-borg implementation and panel @@ -48,30 +46,23 @@ Baseline r0 and H1 package untouched (H1 stays reject-as-baseline control). id: GROUND-WP-0007-T02 status: done priority: high -state_hub_task_id: "4b33a9ac-5b97-488f-bf0e-3a352053d1b0" +state_hub_task_id: "4f701446-edba-513b-9b76-19466960003a" ``` -Message clay-borg: select `h2-scoped-problem-stress`; implement H2-SCOPE, -H2-OWN, H2-A, H2-SOLVE; **exclude** H1 deltas. Re-run attack-value / -regulation-style panel vs `ground-darvo-r0` and optionally `h1-problem-stress`. -Ask for: group win rates, stress variance (max−min), DARVO arm rates by -policy, and if cheap **SOLVE rate / time-open on bond-scoped vs personal** -cards under Bonded tables. - -**Done 2026-08-08.** Hub message to clay-borg-custodian requesting panel. +**Done 2026-08-08.** ## Task: human table smoke (optional) ```task id: GROUND-WP-0007-T03 -status: todo +status: cancel priority: medium -state_hub_task_id: "116be9c8-d0e0-4da7-b9e4-15c531fff629" +state_hub_task_id: "30c01c7f-b915-572a-a8a1-f003677f4d7d" ``` -2p (no bond card) and 3–4p (bond card in play). Note: does Bond feel like -shared liability worth clearing; does personal stress create asymmetric -DARVO without whole-table freeze. +**Cancelled 2026-08-08.** Bond joint-SOLVE still needs a table or +scope-aware bots, but that is residual product playtest — not blocking +module keep. Prefer clay-borg aspect integration + later optional table. ## Task: record measurement and catalog utility @@ -79,30 +70,27 @@ DARVO without whole-table freeze. id: GROUND-WP-0007-T04 status: done priority: high -state_hub_task_id: "b26e457e-fa2b-466c-8fb4-3b2cc4ca86db" +state_hub_task_id: "6676133a-36e9-52e6-928d-666e389f8609" ``` -Update catalog `status` / `utility_estimate` / `decision` from results. -File report under `reports/` if clay-borg sends one. - -**Done 2026-08-08.** [GROUND-RPT-0005](../reports/260808-clay-borg-h2-measured.md); -catalog `measured` / `keep-as-experiment` (not promote yet — deal & pacing -open questions). +**Done 2026-08-08.** RPT-0005; catalog `measured` / `keep-as-experiment`. ## Task: decide promote / reject / H3 ```task id: GROUND-WP-0007-T05 -status: wait +status: done priority: medium -state_hub_task_id: "46118988-9421-40ba-812b-46f8b15f8209" +state_hub_task_id: "e7636d0c-f1f4-540e-becf-648521bc3081" ``` -Maintainer decision. Options: promote scopes into r1 design; reject; -tune deal mix (difficulty dial); add ATTACK self-soothe only if seats -reach ≥4 and projection is still dead. +**RULED 2026-08-08:** -**2026-08-08 interim:** Keep H2 stress routing. Do **not** promote until -deal influx / end conditions / sequence salience are decided (see -session design notes). Bond SOLVE incentive still needs table or -scope-aware bots. +| choice | decision | +|--------|----------| +| Promote into `ground-darvo-r0` now | **No** — wait for modular end/deal experiments and aspect-based selection maturity | +| Keep `problem_stress.scoped` | **Yes** — `keep-as-experiment`; candidate for future r1 default on that aspect | +| Reject scoped idea | **No** — RPT-0005 met core criteria; scoping is the mechanism | +| Next work | **Other aspects as independent modules** (WP-0008), not monolithic H3 | + +Profile `h2` remains the name for “only scoped stress on defaults.” diff --git a/workplans/GROUND-WP-0008-composable-rules-modules.md b/workplans/GROUND-WP-0008-composable-rules-modules.md new file mode 100644 index 0000000..d927524 --- /dev/null +++ b/workplans/GROUND-WP-0008-composable-rules-modules.md @@ -0,0 +1,122 @@ +--- +id: GROUND-WP-0008 +type: workplan +title: "Composable rules modules catalog (schema 2)" +domain: consumer +repo: ground-game +status: finished +owner: bernd +topic_slug: whynot +created: "2026-08-08" +updated: "2026-08-08" +origin: residual +origin_ref: GROUND-WP-0007 +state_hub_workstream_id: "b365be0e-ef94-553e-98f2-f50b5dac754c" +--- + +# Independent modules + combinable profiles (by **aspect**) + +**Finished 2026-08-08.** ground-game catalog schema 2, aspect map, modules, +profiles, and ready-for-implement packages are **landed**. Simulator +adoption and multi-aspect panels live on **clay-borg** (CB-WP-0048 / +CB-RES-0010), not as open tasks here. + +**Design:** [`history/260808-modular-variants.md`](../history/260808-modular-variants.md) +**Contract:** [`editions/CATALOG.md`](../editions/CATALOG.md) +**Aspect map:** [`editions/ASPECTS.md`](../editions/ASPECTS.md) +**Simulator digest:** clay-borg `research/CB-RES-0010-game-aspects-and-design-space.md` + +Terminology: **aspect** (not axis) for each design dimension. + +## Delivered (this repo) + +| Artifact | Role | +|----------|------| +| `editions/catalog.yaml` schema 2 | aspects, modules, profiles, legacy map | +| `editions/CATALOG.md` | selection + `consumed_files` rule | +| `editions/ASPECTS.md` | full design-space inventory | +| `editions/modules/**` | defaults + measured + ready-for-implement | +| profiles `h1`, `h2`, `scoped_plus_*` | named compositions | +| CB-RES-0010 (clay-borg) | research handoff for design environment | + +### Modules by status (at finish) + +| module_id | status | +|-----------|--------| +| `problem_stress.none` / `flat_any_open` / `scoped` | baseline-default / measured-reject / measured-keep | +| `attack_relief.none` / `self_soothe_ge4` | baseline-default / measured-as-combo | +| `end_condition.fixed_rounds_5` / `hybrid_clear_collapse` | baseline-default / **ready-for-implement** | +| `problem_deal.fixed_setup` / `pressure_deck` | baseline-default / **ready-for-implement** | + +## Task: land schema 2 catalog and module tree + +```task +id: GROUND-WP-0008-T01 +status: done +priority: high +state_hub_task_id: "9b5e2c3f-5c38-561d-8620-93b1cce53cb4" +``` + +**Done 2026-08-08.** + +## Task: notify clay-borg of selection API change + +```task +id: GROUND-WP-0008-T02 +status: done +priority: high +state_hub_task_id: "36db32d7-1999-5589-a755-38b6ce7fd6e5" +``` + +**Done 2026-08-08.** Aspect terminology + CB-RES-0010 + closeout message +with ready-for-implement modules. + +## Task: first multi-aspect measurement (optional) + +```task +id: GROUND-WP-0008-T03 +status: cancel +priority: medium +state_hub_task_id: "24263940-838e-5676-94a7-192306ab5548" +``` + +**Cancelled 2026-08-08 as ground-game task.** Optional by design; blocked +on simulator selection/panels. Handed off as **residual** to clay-borg +CB-WP-0048 (and follow-on panel work): resolve `scoped_plus_attack_soothe` +vs `h2` vs `h1`; later hybrid end / pressure deck alone then with scoped. + +Not reopened here when those panels land — file a report extending the +relevant module, not this workplan. + +## Task: package next proposed modules (ready-for-implement) + +```task +id: GROUND-WP-0008-T04 +status: done +priority: medium +state_hub_task_id: "bc5dec7f-ec3d-5855-9a16-da42176988e9" +``` + +**Done 2026-08-08.** v0 frozen: + +- `end_condition.hybrid_clear_collapse` +- `problem_deal.pressure_deck` + +Kernel implementation remains clay-borg. + +## Residuals (live work elsewhere — not open tasks here) + +| Residual | Home | +|----------|------| +| Configuration selector (schema 2 parse, persist module list) | clay-borg **CB-WP-0048** | +| Kernel for hybrid end + pressure deck | clay-borg (after CB-WP-0048) | +| Multi-aspect / profile panels | clay-borg evidence / reports → ground-game `reports/` | +| Bond joint-SOLVE table or scope-aware policy | optional human / clay-borg policy work | +| `consumed_files` on every module | opportunistic catalog hygiene | +| Accept `ready-for-implement` (not only `proposed`) in gates | clay-borg catalog reader | + +## Close note + +This workplan’s job was to **define the design-space contract and ship +packages** in ground-game. That is complete. Measuring configurations is +the simulator’s job once CB-WP-0048 finishes the selector.