Adapt CB-WP-0021 and CB-WP-0022 to ground-game's rulings
Some checks failed
ci / check (push) Has been cancelled

GR-S01 was ruled 2026-08-04: Surface always, union hidden priorities
1..k, k = 2/3/4. So the deal is 3/4/5 Problems, not 2/3/4; available
points 6/9/12; thresholds 5/7/9 stand; SHARED GROUND is 2-6p as printed.
The question CB-WP-0021 was going to send has been answered, and it was
the deal.

CB-WP-0021 is re-scoped. The import is now LOAD-BEARING rather than
merely correct: the ruled 6/9/12 holds only with Problems.csv values, and
the same deal with the stand-in gives 6/10/15 -- a different game that
happens to also be winnable. Fixing the deal without importing the data
would produce numbers nobody ruled on, so T05 (deal) and T02 (import)
must land together. gd0001 is to be INVERTED, not deleted: it is the
record of why this changed. gr-e01 is rewritten as a non-provisional
import check, per the ruling's own wording, and loses its provisional
owner because ground-game has now ruled.

CB-WP-0022 absorbs ground-game's process ruling, which is stricter than
this pass proposed: arithmetic findings need a runnable reproduction AND
a row-level deal table listing Surface and each hidden priority
separately, never only a sum or a deal depth. That is a direct
consequence of both premises we got wrong. So the reproduction rule gains
a SHAPE requirement, not just an existence one -- a finding that ships a
passing test but describes the wrong quantity is still a bad finding, and
that is what happened twice. T02's review brief is flipped accordingly:
press whether the rule is SUFFICIENT, not whether it is affordable.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
tegwick 2026-08-04 00:29:45 +02:00
parent 4e80a65742
commit e5a0796f2b
2 changed files with 87 additions and 8 deletions

View file

@ -66,6 +66,30 @@ But it resolves nothing about GR-E01, and T03 must send ground-game a
*sharper* question rather than a retirement: **either GR-S01's deal count
is wrong or GR-E01's thresholds are, and no dataset can reconcile them.**
## SUPERSEDED 2026-08-04 — ground-game ruled, and it was the deal
The question above was sent and **answered** (GROUND-WP-0004, ruled
2026-08-04). It was GR-S01:
> **Surface always hidden priorities `1..k`**, with `k` = 2 (2p), 3
> (34p), 4 (56p). *"Surface is never one of the hidden priority slots."*
So the deal is **3 / 4 / 5** Problems, not 2 / 3 / 4. Available points
become **6 / 9 / 12**, thresholds **5 / 7 / 9 stand**, and SHARED GROUND
is a **26 player** mode as printed — not 56p only.
**The import is now load-bearing rather than merely correct.** The ruled
6 / 9 / 12 holds *only* with `Problems.csv` values (2,2,2,3,3). With the
stand-in's `value = priority` the same deal gives **6 / 10 / 15** — a
different game that happens to also be winnable. **Fixing the deal without
importing the data would produce numbers ground-game did not rule on.**
The two are therefore one pass, and this workplan is re-scoped to do both.
**A subtlety the ruling keeps, worth not smoothing away:** at 2p, values
2+2+2 against a threshold of 5 still require a **full clear** — any two
cards sum to 4. *"Reachable ≠ forgiving."*
## The constraint, measured before declaring
**AM-4a has 3,798 lines of headroom.** A CSV crate costs, marginally
@ -127,6 +151,32 @@ content change.
invalidates every recorded hash, in a project whose central invariant is
replay determinism, is not a data-loading change.
## Task: deal what GR-S01 now says
```task
id: CB-WP-0021-T05
status: todo
priority: high
```
`problem_priorities` returns 2 / 3 / 4 and `setup` deals priorities
`1..=N` with priority 1 as the face-up Surface. That is **Surface +
(N1) hidden**. The ruling is **Surface + k hidden**, k = 2 / 3 / 4.
Do this **with** T02, not before it: the ruled arithmetic is a property of
the deal *and* the data together, and landing one without the other gives
numbers nobody ruled on.
**Controls:**
- for every seat band, `sum(point_value of dealt) ≥ threshold` — this is
the check ground-game asked for by name, and it replaces
`gr-e01-threshold-unreachable-2p`;
- the Surface Problem is dealt at every seat count and is **never** one of
the hidden slots;
- **`gd0001` must be inverted**, not deleted. It asserts unreachability at
2/3/4 seats and is the record of why this changed; inverting it is how a
reader learns the game became winnable rather than that a test vanished.
## Task: import it, and let the thresholds mean something
```task
@ -147,9 +197,10 @@ Hidden → face down) and `hidden_priority`.
again.
- **A scenario must be able to reach GR-E01's threshold at 2 players**,
which is the specific thing that was impossible. Assert the arithmetic,
not just that a game runs.
- The 5-problem shape must survive: the stand-in dealt 3, and code that
assumed 3 will not announce itself.
not just that a game runs — and at 2p that means a **full clear**, since
2+2+2 against 5 leaves no slack.
- The deal shape must survive: code that assumed 2/3/4 Problems will not
announce itself when it becomes 3/4/5.
## Task: retire the rules gap that was never one
@ -165,10 +216,13 @@ state_hub_task_id: "ff3bd923-9066-49ce-aadd-a3552e4964ff"
*"is unreachable at 2, 3 and 4 players"*. If T02 lands, that scenario is
asserting a property of the **stand-in**, not of the game.
Retire or rewrite it, and **say which of the six provisional items this
resolves**, so GROUND-WP-0002 T03 shrinks rather than being left to
rediscover it. Message `ground-game` with the outcome — the last such
message sat unread for four days because nothing pointed at it.
**Ruled 2026-08-04:** *"Not a design gap. Rewrite as a non-provisional
import/fixture check: for every seat band, `sum(point_value of dealt
Problems) ≥ threshold`."*
So it is **rewritten, not retired**, and it stops being provisional —
`provisional_owner: ground-game` comes off because ground-game has now
ruled. Message `ground-game` with the outcome.
Do **not** quietly delete a failing-in-fact scenario. CB-EV-0005: *a score
improved by deleting the question is not an improvement.*

View file

@ -161,7 +161,12 @@ above, and require an attempt at:
third thing;
- **that "carries its reproduction" is affordable** — if half the real
findings cannot be reproduced cheaply, the rule will be quietly dropped
and the register becomes a suggestion box anyway;
and the register becomes a suggestion box anyway. *(Since this task was
written the answer has hardened: two findings reached ground-game on
wrong premises, and ground-game has itself ruled that reproductions are
required. The reviewer should now press the opposite way — whether the
rule is **sufficient**, given both bad premises would have shipped a
passing test alongside a wrong description.)*
- **that a register is needed at all**, rather than one more section in
`GroundRules.md §Underdetermined`, which already exists and already
works.
@ -212,6 +217,26 @@ Candidate measures, to be argued not adopted:
*read*; that is the number this exists to fix;
- **findings closed by a ruling** vs **findings still open**, with age.
**ground-game has ruled on what a finding must carry** (GROUND-WP-0004
T02, 2026-08-04), and it is stricter than this pass proposed. Adopt it:
> 1. Arithmetic findings must ship a **runnable reproduction** *and* a
> **row-level deal table** listing 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, so a later reader can re-run it.
The second half is theirs to keep. The first is ours, and it is a direct
consequence of both premises we got wrong: *"12 in the file"* was a sum
without a deal table, and *"offered on a face-down Problem"* was a
condition named without checking which one actually fired.
**So the reproduction rule gains a shape requirement, not just an
existence one.** A finding that ships a passing test but describes the
wrong quantity is still a bad finding — which is exactly what happened
twice. The spec must say what a reproduction has to *show*, not only that
one exists.
Also specify the **trial protocol**, which is the part with no precedent
here: a trial game is a `--record`ed session plus an observation log, so
*"we played it and X happened"* is replayable rather than remembered. The