ground-game/history/260804-threshold-reachability-and-difficulty.md
tegwick 8886543aa0 Rule GR-S01 deal and close GROUND-WP-0004 threshold gap
Surface is always in play with hidden priorities 1..k, so available
points are 6/9/12 against Standard thresholds 5/7/9 — every seat band
is winnable. Encode the contract in edition rules, finish the workplan,
and park optional difficulty tiers as GROUND-WP-0005.
2026-08-04 00:21:13 +02:00

292 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Threshold reachability and difficulty levers
**Date:** 2026-08-04
**Status:** **Ruled** under GROUND-WP-0004-T01 (deal 6/9/12, thresholds 5/7/9 Standard, SHARED GROUND 26). Difficulty tiers residual → GROUND-WP-0005.
**Context:** GROUND-WP-0004 (reopen of GR-E01 after clay-borg's premise correction); table confirmation that 3p SHARED GROUND felt unwinnable.
**Purpose:** (1) make every seat count arithmetically winnable; (2) map mechanical bottlenecks and propose difficulty control that fits existing rules.
---
## 0. What the numbers actually are
Three different point totals have been used. Only one matches the printed rules plus `Problems.csv`.
### Authoritative problem values (every scenario)
| card | `hidden_priority` | `point_value` | suit |
|------|------------------:|--------------:|------|
| Surface | 0 | 2 | Repair (varies by scenario pattern; see Problems.csv) |
| Hidden 1 | 1 | 2 | Clarify |
| Hidden 2 | 2 | 2 | Boundary |
| Hidden 3 | 3 | 3 | Repair |
| Hidden 4 | 4 | 3 | Change |
| **file total** | | **12** | |
### GR-S01 as printed (`Rules_Text.csv` §Setup + `Scenarios.csv`)
> Use the **Surface Problem**. Add **hidden** Problems: priorities **12** (2p), **13** (34p), **14** (56p).
Surface is **always** in play; the priority filter only selects which *hidden* cards join it.
| seats | in play | max points | GR-E01 threshold | margin | need % of max |
|------:|--------:|-----------:|-----------------:|-------:|--------------:|
| 2 | S + H12 (3) | **6** | 5 | +1 | 83% |
| 34 | S + H13 (4) | **9** | 7 | +2 | 78% |
| 56 | S + H14 (5) | **12** | 9 | +3 | 75% |
**Under a correct import of GR-S01 + Problems.csv, every seat count is arithmetically winnable.**
### Where clay-borg's 4 / 6 / 9 came from
After correcting the false "12 always available" claim, CB-WP-0021 treated GR-S01 as dealing **2 / 3 / 4 total** problems counted from the Surface upward (Surface + first *n1* hidden). That drops one card vs the printed setup and yields:
| seats | their deal | their max | threshold | |
|------:|-----------:|----------:|----------:|---|
| 2 | 2 | 4 | 5 | impossible |
| 34 | 3 | 6 | 7 | impossible |
| 56 | 4 | 9 | 9 | exact only |
That matches the engine **stand-in** shape (deal depth 2/3/4, Surface = priority 1), not the edition text. The stand-in itself (values = priority: 1+2+3 = 6 at 3p vs threshold 7) is what table play and `gd0001` measured.
| source | 2p max | 34p max | 56p max | vs 5/7/9 |
|--------|-------:|---------:|---------:|----------|
| Engine stand-in | 3 | 6 | 10 | fail / fail / ok |
| clay-borg "CSV deal" | 4 | 6 | 9 | fail / fail / exact |
| **Printed GR-S01 + CSV** | **6** | **9** | **12** | **ok / ok / ok** |
**Implication for the ruling:** the void of `gr-e01-threshold-unreachable-2p` was wrong for the *wrong reason* (claimed 12 in play). The reopened claim that low seats are *arithmetically* impossible is also wrong for the *correct* dataset + setup. What remains real is:
1. The engine has been simulating an impossible game at 24p.
2. Even with correct 6/9/12, thresholds demand **~7583% of all available points** — little room for DENY, missed suits, or social friction. That matches "I played well and still lost" without true impossibility.
---
## 1. Easy adaptation — make every setup winnable
### Recommended default (no rebalance, rules already allow it)
**Rule the deal explicitly, once, for clay-borg and print:**
- Problems in play = **Surface (always)** **hidden priorities `1..k`**, with `k ∈ {2,3,4}` by seat band.
- Available value = **6 / 9 / 12** (not 4 / 6 / 9, not 12-always).
- Thresholds **5 / 7 / 9 stand**.
- `gr-e01-threshold-unreachable-2p` becomes an **engine import / fixture bug**, not a design gap — rewrite the scenario as a non-provisional check that `sum(point_value of dealt) ≥ threshold` for every seat band.
- Explicitly **reject** "SHARED GROUND is 56p only": README and Modes advertise 26.
**Dataset touch (optional but clarifying):** add a one-line setup formula to `Rules_Text` / scenario microcopy:
> *In play: Surface + hidden priorities 1k. Available points: 6 (2p) / 9 (34p) / 12 (56p). Threshold: 5 / 7 / 9.*
No threshold column change required for step 1.
### If table feel still fails after correct deal (fallback knobs)
Use only if playtest after correct import still loses too often when play is competent:
| knob | change | effect |
|------|--------|--------|
| **A. Soften thresholds** | 2p→4, 34p→6, 56p→8 | ~67% of max; one mid-value miss still ok |
| **B. Always deal full five** | k=4 at all seats | max always 12; scale threshold by seats or difficulty |
| **C. Extra round at low seats** | 2p: 6 rounds | more Investigate/Solve bandwidth when action total is 10 |
Prefer **A** only after measuring with correct deal; do not pre-emptively lower numbers that already work on paper.
### What not to do for step 1
- Do **not** declare low-seat SHARED GROUND intentionally unwinnable (user requirement: every setup must allow player win).
- Do **not** raise problem values silently inside `r0` (GROUND-WP-0002 contract: `point_value` change = revision bump).
- Do **not** leave clay-borg on stand-in values while print says otherwise.
---
## 2. Structural analysis — limits and bottlenecks
### 2.1 Win pipeline (per Problem)
```
[hidden?] --INVESTIGATE--> face-up --SOLVE + matching suit--> claimed (points)
^ ^
| |
DENY can reverse Stress 45 gates SOLVE
(needs GROUND—OU) (needs Freedom or calm)
```
Only **face-up, non-Denied** Problems can be claimed. Surface starts face up; every hidden card costs at least one Investigate somewhere in the five rounds.
### 2.2 Action budget (5 rounds, simultaneous)
| seats | total actions | min INV (full clear) | min SOLVE | productive floor | slack |
|------:|--------------:|---------------------:|----------:|-----------------:|------:|
| 2 | 10 | 2 | 3 | 5 | 5 |
| 3 | 15 | 3 | 4 | 7 | 8 |
| 4 | 20 | 3 | 4 | 7 | 13 |
| 5 | 25 | 4 | 5 | 9 | 16 |
| 6 | 30 | 4 | 5 | 9 | 21 |
Slack looks generous, but it is **not free**: Support, Attack, GROUND, DARVO recovery, and failed suit races all consume the same action slot. At 2p, half the game *must* be pure problem work if the table wants a full clear; any DARVO episode that forces GROUND/Support eats the margin that threshold 5-of-6 already requires.
### 2.3 Bottleneck map
| # | bottleneck | mechanism | how it blocks the win |
|---|------------|-----------|------------------------|
| **B1** | **Reveal chain** | Only Investigate reveals non-Denied hidden Problems | Unrevealed cards contribute 0; DENY undoes prior Investigates until OU |
| **B2** | **Suit match** | SOLVE needs exact suit in hand; only Investigate (and starting deal) add Solutions | Dead hands; wasted rounds fishing the deck |
| **B3** | **Stress gate** | Stress 45 → only ATTACK/GROUND free; Investigate/Solve need ready Freedom | Productive actions disappear exactly when the table is on fire |
| **B4** | **Freedom scarcity** | One binary token; ready via GROUND—GR or Bond Support | Serializes recovery; no hand limit but Freedom is the real scarce resource |
| **B5** | **DARVO tax** | 3-stage binding sequence; DENY steals a face-up Problem | Multi-round opportunity cost; can deny the exact card needed for threshold |
| **B6** | **Relation slots** | 2 slots/player; Bond Support is the strong DARVO cancel | Support network is capacity-limited; Rivalry burns slots |
| **B7** | **Solve race** | Same-round Lead order; loser keeps Solution but burns the Action | Coordination tax in semi-coop / coalitions |
| **B8** | **Fixed horizon** | Exactly 5 rounds | No catch-up time after a late DENY or late reveal of a 3-point card |
| **B9** | **Threshold density** | Need ~7583% of all points in play | Losing any 3-value card (or two 2-value) often ends the group |
### 2.4 Suit demand (full clear, typical scenario shape)
| seats | suits required |
|------:|----------------|
| 2 | Repair, Clarify, Boundary (one each) |
| 34 | Repair ×2, Clarify, Boundary |
| 56 | Repair ×2, Clarify, Boundary, Change |
Deck is 6 per suit / 24 total; opening deal is 2 per seat (random). **Investigate is both the reveal engine and the only steady suit pump.** That double duty is the deepest structural coupling: the action that opens problems also feeds the action that closes them.
### 2.5 Seat-count dynamics (why low seats feel worse)
- **Absolute slack** is lowest at 2p, but **threshold %** is also highest (83%).
- Fewer seats ⇒ fewer parallel Investigates and fewer Bond partners to cancel DARVO.
- More seats ⇒ more Attacks and more DARVO triggers, but more total actions and more Support bandwidth.
- Semi-coop / coalitions add **incentive to race SOLVE** and to Attack for personal edge, which steals actions from the group pipeline — thresholds that are tight in pure co-op become brutal when players partially defect.
Solo (not in core; `EXT_SOLO` noted) inherits the 2p action poverty without a Bond partner: DENY cannot be cancelled by Bond Support; only GROUND—GR after the stage / OU for Denied cards. Solo difficulty is dominated by **B3B5**, not by multiplayer politics.
---
## 3. Mechanisms to control difficulty of winning
Goal: every setup remains **winnable in principle**; harder settings demand luck, persistence, and tighter coordination — not arithmetic impossibility.
### 3.1 Candidate levers (ordered by simplicity / fit)
#### L1 — **Target ratio of available points** (recommended primary dial)
Define:
```
available = sum(point_value of Problems in play) # 6 / 9 / 12 under GR-S01
threshold = ceil(available × ratio) # or a printed table per band
```
| tier | ratio | 2p thr | 34p thr | 56p thr | feel |
|------|------:|-------:|---------:|---------:|------|
| Learning | ~50% | 3 | 5 | 6 | room for one serious mistake |
| Standard (≈ current) | ~7583% | 5 | 7 | 9 | competent group, little waste |
| Mastery / Hard | 100% | 6 | 9 | 12 | claim everything; DENY is lethal |
| Impossible (forbidden) | >100% | — | — | — | never ship |
**Why this fits:** thresholds already scale with seat band; this only *names* the relationship to available value and makes difficulty a first-class setup choice instead of a hidden property of three magic numbers. Solo and multiplayer share one concept. clay-borg can assert `threshold ≤ available` as an invariant for every tier except an explicit "impossible" test fixture.
#### L2 — **Pressure dial** (starting Stress / Freedom / DARVO aggressiveness)
| tier | start Stress | Freedom | note |
|------|-------------:|---------|------|
| Calm | 1 | READY | more rounds of free Investigate/Solve |
| Standard | 2 | READY | current |
| Frayed | 3 | READY | gate approaches sooner |
| Solo Hard | 2 | SPENT or none | Freedom scarcity as difficulty |
Thematic fit is excellent (individual layer). Does not by itself fix a bad threshold; pairs with L1.
#### L3 — **Problem depth (k)**
Today `k` is tied only to seat count. Untie slightly:
- Learning: always `k=2` (max 6) even at 56p, lower absolute complexity.
- Standard: current seat scaling.
- Deep dive: always `k=4` (max 12) at any seat count — more to discover, longer pipeline; threshold from L1.
This is the original design note in history ("complexity control: number of active problems and relationship slots").
#### L4 — **Round track length**
6 rounds at 2p / solo increases slack without changing card data. Simple but changes the Scenario card layout and "5 rounds" product promise.
#### L5 — **Solution economy**
Guaranteed opening suits, extra starting Solutions, or "Investigate draws 2" on easy tiers. Effective but blunts B2 and risks making SOLVE automatic.
#### L6 — **DENY severity**
Easy: DENY only flips face down without Denied token (Investigate can re-open). Hard: current Denied rules. Changes the antagonist's teeth; high thematic cost if softened too much for the DARVO edition identity.
### 3.2 Recommended package
| layer | rule |
|-------|------|
| **Invariant** | For every published setup: `threshold ≤ available_points` (hard). |
| **Default (r0 print)** | Keep seat bands and 5/7/9 once deal is correctly 6/9/12; document as **Standard** (~7583%). |
| **Difficulty (setup choice)** | Optional third setup axis beside Scenario + Mode: **Learning / Standard / Mastery**, implemented primarily as **L1 ratios** (and optionally L2 start Stress for solo). |
| **Solo** | Same L1 tiers; default slightly easier ratio or Calm start Stress until automa exists; Bond-less cancel path is only GROUND. |
### 3.3 Integration with existing rules (how it would look on the table)
Current setup sentence:
> Choose one Scenario card and one Mode card. … Add hidden Problems by player count …
Proposed addition (minimal):
> Optionally choose a **Difficulty** (Learning / Standard / Mastery). Standard uses the Scenario's printed thresholds. Learning / Mastery replace the threshold with the tier table (or: with ⌈available × ratio⌉). Available points are always Surface + selected hidden priorities.
**Where it lives in data:**
| artifact | change |
|----------|--------|
| `Scenarios.csv` | Keep `threshold_*` as **Standard**; *or* replace with `available_*` + document ratios in Modes/Rules |
| `Modes.csv` | Unaffected (still who wins *after* group success) |
| `Rules_Text.csv` | One Setup row: available formula + difficulty tiers |
| `Extensions.csv` / solo | `EXT_SOLO` can reference the same tiers |
| clay-borg | `threshold()` becomes `f(seats, difficulty)`; setup asserts reachability |
**Print economy:** Scenario already has three threshold columns. Learning/Mastery can be:
- a small **Difficulty card** (3 cards) with three numbers each, or
- a second row of numbers on the Scenario (busy), or
- a single lookup: "Learning = Standard 2 (min 1); Mastery = available".
Simplest physical form: **one Difficulty card** used with every Scenario — three numbers for the three seat bands — so Scenario text stays clean.
**Interaction with mastery rating (MODE_COOP):** already subtracts Blame and Denied Problems. That remains a *quality* score after a win; difficulty tiers change *whether* the win is possible under waste. Keep them separate: tier = gate hardness; mastery = cleanliness of the win.
**Interaction with semi-coop / coalitions:** group gate is shared; personal race sits on top. Harder L1 increases cooperation pressure (defecting into pure Attack becomes more self-defeating). That is desirable tension, not a conflict with L1.
### 3.4 Worked examples
**2p Standard (current intent, correct deal):** available 6, need 5. May leave one 1-point miss — but all cards are 2+, so must claim 3 of 3 cards *or* claim two cards only if values were uneven — with values 2+2+2, **must claim all three** to reach 5? 2+2=4 < 5, so **must claim all three (6)**. Margin +1 is illusory for discrete 2-point cards: **2p Standard requires a full clear.**
That is an important subtlety: integer card values mean **margin +1 with all-even values still forces 100% claim rate**. True slack appears only when a 3-value card can be left unsolved while two others cover the threshold which starts at 34p (e.g. claim 2+2+3=7 exactly, leave a 2).
So even "arithmetically reachable" 2p Standard is **full-clear or lose**. That may be intended hardness or a reason to set Learning at 4 (any two cards) and Standard at 5 only if a 1-point card exists or accept full-clear as the 2p identity.
**3p Standard:** available 9, need 7. Patterns that win: drop one 2-value (claim 7) or claim all. Drop a 3-value (claim 6) lose. DENY on a 3 without OU recovery often ends the game.
**Mastery any seats:** claim all; every DENY must be undone.
---
## 4. Decisions (GROUND-WP-0004-T01/T02 — ruled 2026-08-04)
1. **Deal arithmetic:** Surface + hidden 1..k available **6 / 9 / 12**. Confirmed.
2. **Thresholds 5 / 7 / 9** stand as **Standard** (2p Standard = full clear). Confirmed.
3. **Difficulty tiers:** not in r0 close-out; residual **GROUND-WP-0005** after playtest on correct deal.
4. **SHARED GROUND** is **26**, not 56p only. Confirmed.
5. **Hygiene (T02):** arithmetic findings need runnable repro **and** Surface-separated deal table; rulings should cite the repro; edition text is authority for GR-S01 if the engine under-tests the wrong deal.
---
## 5. Summary
| step | outcome |
|------|---------|
| **1. Easy winability** | Correct GR-S01 counting already makes all seats winnable (6/9/12 5/7/9). Fix is primarily a **deal specification + engine import**, not new thresholds. Optionally soften later if full-clear 2p is too sharp. |
| **2. Difficulty control** | Best simple concept: **threshold as a ratio of available problem value**, with optional **Pressure dial** (start Stress/Freedom) for solo and mastery. Integrates as a third setup card or a tier table; preserves Modes, DARVO, and edition IDs. |
Until Standard is played on the **correct** deal, do not rebalance point values or lower printed thresholds solely on stand-in or undercounted evidence.