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.
This commit is contained in:
tegwick 2026-08-04 00:21:13 +02:00
parent b8ff288f3d
commit 8886543aa0
8 changed files with 440 additions and 84 deletions

View file

@ -4,11 +4,11 @@ type: workplan
title: "Reopen GR-E01: the void ruling rests on a premise clay-borg has corrected"
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-04"
origin: correction
origin_ref: GROUND-WP-0002
state_hub_workstream_id: "067434eb-18cc-472f-b4ea-7dd16555629f"
@ -23,82 +23,91 @@ GROUND-WP-0002 T03 ruled `gr-e01-threshold-unreachable-2p`:
> thresholds (2p→5, 3–4p→7, 5–6p→9) stand.
**The 12 is wrong, and clay-borg is where it came from.** Twelve points
exist *in the file*; **GR-S01 deals 2 / 3 / 4 of the five Problems**, so
the points ever in play are 4 / 6 / 9. clay-borg asserted the 12 in its
CB-WP-0021 declaration, corrected itself one commit later after actually
running the arithmetic, and by then the ruling had been made.
exist *in the file*; clay-borg then “corrected” to 4 / 6 / 9 by treating
GR-S01 as dealing 2 / 3 / 4 *total* problems from Surface upward. That
undercount still drops the explicit Surface + hidden split in the rules.
**The gap is not a stand-in artifact. It survives the authoritative
dataset**, and it has now been confirmed at the table.
## The evidence, in three independent forms
## The evidence that reopened this
**1. Play.** The maintainer played several 3-player games on 2026-08-03
and could not win any of them.
and could not win any of them (engine stand-in / undercount shape).
**2. The engine's own constants.**
**2. Engine constants (stand-in):** max 3 / 6 / 10 vs thresholds 5 / 7 / 9
— unreachable at 2–4 seats.
| seats | dealt (GR-S01) | max achievable | GR-E01 threshold | |
|---:|---:|---:|---:|---|
| 2 | 2 | 3 | 5 | **unreachable** |
| 3 | 3 | 6 | 7 | **unreachable** |
| 4 | 3 | 6 | 7 | **unreachable** |
| 5 | 4 | 10 | 9 | reachable |
| 6 | 4 | 10 | 9 | reachable |
Claim every Problem in play, concede nothing, play perfectly — at 2, 3 and
4 seats the group still loses. In SHARED GROUND, where the group total
*is* the outcome, those games cannot be won.
**3. Both datasets agree.** The stand-in gives 3 / 6 / 10; `Problems.csv`
gives 4 / 6 / 9. Both fall short of 5 / 7 / 9. **No edition data
reconciles them**, which is the part the void ruling turned on.
**3. clay-borg “CSV deal”:** max 4 / 6 / 9 — still unreachable at 2–4.
**Reproduction:** `gd0001_group_success_is_unreachable_below_five_seats`
in clay-borg —
`cargo test -p games-ground --all-features gd0001 -- --nocapture`. It
reads `problem_priorities` and `threshold` out of the engine, so it cannot
drift from the rules it tests.
in clay-borg (stand-in / wrong deal depth).
## Task: rule again, on the corrected numbers
```task
id: GROUND-WP-0004-T01
status: todo
status: done
priority: high
state_hub_task_id: "dcd7da12-be3a-4289-8d21-1924401a1259"
```
Two numbers disagree and only one can be right:
### RULED 2026-08-04 (maintainer confirmed direction)
- **GR-S01's deal** — 2 / 3 / 4 of five Problems. Should more be in play
at low seat counts?
- **GR-E01's thresholds** — 5 / 7 / 9. Were they set for a deal larger
than GR-S01 makes?
| question | ruling |
|---|---|
| **GR-S01 deal** | **Surface always** ∪ **hidden priorities `1..k`**, with `k = 2` (2p), `3` (3–4p), `4` (5–6p). Surface is never one of the hidden priority slots. |
| **Available points** (`Problems.csv` values) | **6 / 9 / 12** for those seat bands — not 12-always, not 4/6/9. |
| **GR-E01 thresholds** | **5 / 7 / 9 stand** as the **Standard** target. All are ≤ available. |
| **SHARED GROUND seat range** | **2–6 players**, same as the box. Not a 5–6p-only mode. |
| **`gr-e01-threshold-unreachable-2p`** | **Not a design gap.** Rewrite as a non-provisional **import/fixture check**: for every seat band, `sum(point_value of dealt Problems) ≥ threshold`. Invert/retire `gd0001` when the engine deals Surface + hidden correctly. |
| **Difficulty tiers** | Not required to close this. Design parked as residual [GROUND-WP-0005](GROUND-WP-0005-difficulty-tiers-and-pressure-dial.md). |
A third possibility to rule out **explicitly**, because nothing currently
does: the thresholds may be *intended* to be unreachable at low seat
counts, with SHARED GROUND being a 5–6 player mode. If that is the
design, say so — the engine will otherwise keep offering a game that
cannot be won, and a player will keep concluding they played badly.
**Subtlety retained:** at 2p, values 2+2+2 mean need 5 still requires a
**full clear** (any two cards sum to 4). Reachable ≠ forgiving.
`gr-e01-threshold-unreachable-2p` stays as a failing-in-fact record until
this is answered. It is **not** retired on the previous ruling.
**Edition encoding (this session):**
- `Rules_Text.csv` — explicit Surface-vs-hidden deal, available 6/9/12,
threshold ≤ available invariant, 2–6 all modes.
- `Scenarios.csv` — setup columns spell Surface + hidden + available +
threshold (columns 5/7/9 unchanged).
- `Modes.csv` — SHARED GROUND explicitly 2–6; semi/coalition note
threshold ≤ available.
- `README.csv` — one-line deal/threshold contract.
- Analysis: [`history/260804-threshold-reachability-and-difficulty.md`](../history/260804-threshold-reachability-and-difficulty.md).
## Task: how a clay-borg premise reached a ruling unchecked
```task
id: GROUND-WP-0004-T02
status: todo
status: done
priority: medium
state_hub_task_id: "bd1c7a7d-36a2-4bf4-ab42-8e5489706df4"
```
Worth one paragraph, not a project: the ruling was sound reasoning on a
supplied number, and the number was wrong. The engine now attaches a
**runnable reproduction** to findings of this kind (clay-borg CB-WP-0022),
so a future ruling can be checked against an artifact rather than a
sentence.
### RULED 2026-08-04 — process hygiene
State whether that is sufficient from this side, or whether rulings should
cite the reproduction they relied on.
The original void ruling was **sound reasoning on a bad input**. clay-borg
supplying a single aggregate (“12 in the file”) without a **Surface-
separated deal table** made the error cheap to accept.
**From this side, sufficient going forward:**
1. Arithmetic findings must ship a **runnable reproduction** (clay-borg’s
CB-WP-0022 practice) **and** a row-level deal table that lists Surface
and each hidden priority separately — never only “sum of file” or
“deal depth N”.
2. ground-game rulings that depend on arithmetic **should cite** that
reproduction id (or path) in the workplan ruling block so a later
reader can re-run it.
3. ground-game will **spot-check** deal tables against
`Rules_Text` + `Problems.csv` before treating a gap as design vs
import. A second wrong total (4/6/9) is how this reopened.
Runnable repro alone is not enough if the engine under test encodes the
wrong deal; the edition text remains authority for GR-S01.
## Residuals
- **[GROUND-WP-0005](GROUND-WP-0005-difficulty-tiers-and-pressure-dial.md)**
— optional Learning/Mastery tiers + Pressure dial after playtest on
correct deal (`origin: residual`, `origin_ref: GROUND-WP-0004`).
- clay-borg: import Surface + hidden; rewrite `gr-e01` / invert `gd0001`.

View file

@ -0,0 +1,51 @@
---
id: GROUND-WP-0005
type: workplan
title: "Difficulty tiers (threshold ratio) and optional Pressure dial"
domain: consumer
repo: ground-game
status: backlog
owner: bernd
topic_slug: whynot
created: "2026-08-04"
updated: "2026-08-04"
origin: residual
origin_ref: GROUND-WP-0004
state_hub_workstream_id: "e6a26af9-f58d-44b4-89fd-bcb5ecba3e0f"
---
# 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
[`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.
## Task: decide whether to add named tiers
```task
id: GROUND-WP-0005-T01
status: wait
priority: low
state_hub_task_id: "95dcd233-8ebf-44de-95ee-f69b3d973d26"
```
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.
## Task: encode tiers in edition data (if T01 says yes)
```task
id: GROUND-WP-0005-T02
status: wait
priority: low
state_hub_task_id: "1e7202cf-01af-48e6-b71d-029de9ec61e2"
```
Rules_Text + scenario or difficulty-card data; clay-borg `threshold(seats,
difficulty)` and invariant `threshold ≤ available`.