GROUND-WP-0002 T03 voided gr-e01-threshold-unreachable-2p as a stand-in artifact, on the basis that Problems.csv makes 12 points available. The 12 is wrong and clay-borg supplied it: twelve points exist in the FILE, but GR-S01 deals 2/3/4 of the five Problems, so 4/6/9 are ever in play. clay-borg asserted the 12 in its CB-WP-0021 declaration and corrected itself one commit later, by which time the ruling had been made. The gap survives the authoritative dataset and is now confirmed at the table: the maintainer could not win any 3-player game on 2026-08-03. Three independent forms of evidence -- play, the engine's own constants, and both datasets agreeing -- plus a named reproduction. T06 has been removed from GROUND-WP-0002, which is finished; a new task does not belong in a closed workplan and the hub correctly refused to register it there. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
266 lines
13 KiB
Markdown
266 lines
13 KiB
Markdown
---
|
||
id: GROUND-WP-0002
|
||
type: workplan
|
||
title: "Rulings the engine is blocked on, and the dataset it never loaded"
|
||
domain: consumer
|
||
repo: ground-game
|
||
status: finished
|
||
owner: bernd
|
||
topic_slug: whynot
|
||
created: "2026-08-03"
|
||
updated: "2026-08-03"
|
||
state_hub_workstream_id: "d8fc3a69-a5ae-4f6e-b4fc-b07d1ff9c783"
|
||
---
|
||
|
||
# Rulings the engine is blocked on
|
||
|
||
`clay-borg` implements the engine that simulates GROUND. Its INTENT says
|
||
game-semantics questions defer to **this** repo. Ten underdetermined rules points, six provisional scenarios and three
|
||
questions raised by play have accumulated there, and none has been
|
||
answered, because none had a home.
|
||
This is their home.
|
||
|
||
**Nothing here is a clay-borg change.** Every item is a ruling only the
|
||
game's owner can make; the engine already carries a provisional default
|
||
for each and will flip it when the ruling lands.
|
||
|
||
**Session 2026-08-03:** all rulings below were decided with the maintainer
|
||
in a guided pass. Residual playtest work handed to
|
||
[GROUND-WP-0003](GROUND-WP-0003-playtest-semi-and-coalitions.md).
|
||
|
||
## The finding that reframes most of this
|
||
|
||
**The engine has never loaded this repository's edition data.**
|
||
|
||
`games/ground/src/lib.rs:1839` builds Problems with `value: priority` and
|
||
suits cycled by index — a stand-in it has always labelled as such. Mean-
|
||
while `editions/ground-darvo-r0/Problems.csv` has carried the real thing
|
||
since 2026-07-31:
|
||
|
||
| | problems per scenario | values | total available |
|
||
|---|---:|---|---:|
|
||
| `Problems.csv` (real) | **5** | 2, 2, 2, 3, 3 | **12** |
|
||
| the engine's stand-in | 3 | 1, 2, 3 | **6** |
|
||
|
||
The dataset also defines `required_solution` (Repair / Clarify /
|
||
Boundary), `visibility` (Surface / Hidden) and `hidden_priority` (0–4) —
|
||
all of which the engine currently invents.
|
||
|
||
**GR-E01's thresholds are 2p → 5, 3–4p → 7, 5–6p → 9.** Against 12
|
||
available points those are ordinary targets. Against a stand-in worth 6
|
||
they are unreachable, which is exactly what clay-borg reported as a rules
|
||
gap needing a ruling here.
|
||
|
||
**So the first question is not a rules question at all.** It is whether
|
||
this dataset is authoritative — and if it is, several of the items below
|
||
dissolve without anyone changing a rule.
|
||
|
||
## Task: declare the dataset authoritative, and say what the engine may rely on
|
||
|
||
```task
|
||
id: GROUND-WP-0002-T01
|
||
status: done
|
||
priority: high
|
||
state_hub_task_id: "431cca12-e6d9-4eba-9360-f4f13ed263c1"
|
||
```
|
||
|
||
State whether `editions/ground-darvo-r0/` is the **authoritative** source
|
||
for Problem values, required solutions, visibility and priority — and what
|
||
the engine may treat as stable.
|
||
|
||
`SCOPE.md` already promises *"stable IDs suitable for layout templates,
|
||
print merges, and later digital import."* This task turns that into a
|
||
contract clay-borg can build against:
|
||
|
||
- which columns are authoritative vs presentational;
|
||
- whether `point_value` and `required_solution` may change between `r0`
|
||
and a later revision without a version bump;
|
||
- what a version bump looks like, so the engine can pin one.
|
||
|
||
**Until this is answered the engine cannot import the data, and every
|
||
threshold question below stays unanswerable.**
|
||
|
||
**RULED 2026-08-03, by the maintainer:** *"The edition dataset is
|
||
authoritative."*
|
||
|
||
So `editions/ground-darvo-r0/` is the source of truth for Problem values,
|
||
required solutions, visibility and priority, and **the engine must import
|
||
it rather than invent them**. That unblocks clay-borg and it very likely
|
||
dissolves `gr-e01-threshold-unreachable-2p` — see T03.
|
||
|
||
### Dataset contract (confirmed 2026-08-03)
|
||
|
||
| question | ruling |
|
||
|---|---|
|
||
| authoritative vs presentational columns | **Authoritative:** `problem_id`, `scenario_id`, `visibility`, `hidden_priority`, `required_solution`, `point_value`. **Presentational:** `title`, `problem_text`, `symbol_id`, `front_rules`, `reveal_effect`, `unresolved_effect`, `back_design_id` |
|
||
| may `point_value` / `required_solution` change within `r0`? | **No** — a change to either is a new revision |
|
||
| what a version bump looks like | the directory name: `ground-darvo-r0` → `-r1`. The engine pins a directory, so a bump is visible in a diff and never silent |
|
||
|
||
**Rationale:** Problem value and required suit are *in* hashed game state.
|
||
Silent in-revision edits would rot every recorded scenario hash in
|
||
clay-borg.
|
||
|
||
## Task: rule on SOLVE's legality
|
||
|
||
```task
|
||
id: GROUND-WP-0002-T02
|
||
status: done
|
||
priority: high
|
||
state_hub_task_id: "895573ac-d7b9-4160-a118-5bc8866c28c8"
|
||
```
|
||
|
||
Three related questions, all raised by play, all currently decided by the
|
||
engine's default rather than by the rules.
|
||
|
||
**(a) May SOLVE be selected against a *face-down* Problem?** Measured in
|
||
the browser on 2026-08-03: a player selected SOLVE on a face-down Problem
|
||
in three consecutive rounds. Nothing happened, three times, because
|
||
GR-A02's resolver skips a Problem that is not face up. The engine offered
|
||
the move each time.
|
||
|
||
A face-down commit you cannot fulfil is a plausible **bluff** in a
|
||
commit/reveal game with DARVO — which is why this is a ruling and not a
|
||
bug. But if it is a bluff it should be *intended*; if it is not, the move
|
||
should not be offered.
|
||
|
||
**(b) May SOLVE be selected when the seat holds no Solution of the
|
||
required suit?** Same shape: currently offered, silently does nothing.
|
||
|
||
**(c) GR-A13 — SOLVE against an already-claimed Problem.** Long-standing
|
||
in clay-borg's evidence as *"wasted SOLVE"*. Intended cost of a bad read,
|
||
or a gap?
|
||
|
||
For each: **intended, or not offered.** If intended, say what the player
|
||
is meant to learn from the waste.
|
||
|
||
### RULED 2026-08-03
|
||
|
||
| sub | ruling | what the player learns |
|
||
|---|---|---|
|
||
| **(a)** face-down Problem | **Not offered** — illegal target | Matches ACT_SOLVE target and Rules §Problems: only face-up, non-Denied. Browser no-ops were a filter bug, not a bluff mechanic. |
|
||
| **(b)** no matching Solution in hand | **Not offered** — digital legality filter | Player always knows their hand; engine only offers SOLVE when a matching suit is held. Physical tables self-police the same way. |
|
||
| **(c)** already-claimed Problem | **Same-round race legal; prior-round claim not offered** | Competing SOLVEs resolve Lead-then-clockwise; losers keep their Solution. That race is the intended cost of a bad read. Targeting a Problem claimed in a prior round is illegal (nothing left to race for). |
|
||
|
||
## Task: answer the ten underdetermined points (U1–U10)
|
||
|
||
```task
|
||
id: GROUND-WP-0002-T05
|
||
status: done
|
||
priority: high
|
||
state_hub_task_id: "e1d6a548-dedf-473a-9ebd-a2e3a286d510"
|
||
```
|
||
|
||
**This is the oldest item and it has never been read.** `clay-borg`
|
||
messaged this repo on **2026-07-30** with ten points the dataset does not
|
||
decide, each simulated under a provisional default, asking for *"confirm /
|
||
correct (with ruling)"* per item. Four days later the message was still
|
||
unopened, because there was nowhere for it to land. Now there is.
|
||
|
||
| | question | the default clay-borg simulates |
|
||
|---|---|---|
|
||
| **U1** | Bond-acceptance timing | the target decides during Support resolution, post-reveal |
|
||
| **U2** | Stress clamping | clamp on **every** application, not only at End — this changes when DARVO triggers mid-round |
|
||
| **U3** | DENY with no legal target | no-op; the sequence still advances |
|
||
| **U4** | Solution deck exhaustion | deterministic reshuffle of the discard, else skip the draw |
|
||
| **U5** | rejected REVERSE self-effects | owner still gets −2 Stress and the sequence ends; no Blame, no +1, no Protection |
|
||
| **U6** | same-round Bond-Support vs DARVO | the Support cancels that round's DARVO stage **before it fires** (step order 2 before 3) |
|
||
| **U7** | player elimination | none exists — **confirm** |
|
||
| **U8** | GROUND—OU vs Attack | OU cancels the Attack **before** Protection is consumed |
|
||
| **U9** | simultaneous double DARVO trigger | needs no extra rule — **confirm** |
|
||
| **U10** | hand limit | none |
|
||
|
||
Full text of each default is in `clay-borg/specs/GroundRules.md`
|
||
§Underdetermined. **U2, U6 and U8 are the ones that change play**, because
|
||
each decides whether a DARVO stage fires at all; the rest are edge cases
|
||
or confirmations.
|
||
|
||
Answer per item: **confirm**, or **correct with the ruling**.
|
||
|
||
### RULED 2026-08-03 — all ten confirmed as clay-borg defaults
|
||
|
||
| | ruling | note |
|
||
|---|---|---|
|
||
| **U1** | **Confirm** | Target accepts during Support resolution, with full knowledge of revealed Actions. Bond formed by *this* Support still does not cancel DARVO (printed designer note). |
|
||
| **U2** | **Confirm** | Clamp Stress to 0–5 on **every** application. Matches physical mats. DARVO still arms only at End when at Stress 5 (GR-R08). |
|
||
| **U3** | **Confirm** | DENY with no legal target is a no-op; sequence still advances. |
|
||
| **U4** | **Confirm** | Deterministic reshuffle of discard into new deck; if both empty, skip the draw. |
|
||
| **U5** | **Confirm** | GROUND—ND rejection cancels target effects (no Blame, no +1, no Protection) **and** owner still gets −2 Stress and the sequence ends. |
|
||
| **U6** | **Confirm** | Pre-existing Bond Support (step 2) cancels that round's DARVO stage before it fires (step 3) and ends the sequence. |
|
||
| **U7** | **Confirm** | No player elimination. |
|
||
| **U8** | **Confirm** | When both GROUND—OU and Protection could cancel the same Attack: OU applies first; Protection is consumed only if it actually cancels. |
|
||
| **U9** | **Confirm** | Two players at Stress 5 at the same End both trigger; later stages resolve in Lead order. No extra interaction rule. |
|
||
| **U10** | **Confirm** | No hand limit in r0. Revisit only if playtest shows bloat. |
|
||
|
||
## Task: confirm or overturn the six provisional defaults
|
||
|
||
```task
|
||
id: GROUND-WP-0002-T03
|
||
status: done
|
||
priority: medium
|
||
state_hub_task_id: "52cc157f-8fbd-469d-9da7-a96f1c60b654"
|
||
```
|
||
|
||
Six engine scenarios are tagged `provisional: true` with
|
||
`provisional_owner: ground-game`. These are the **scenarios** that encode
|
||
T05's defaults — answering U1–U10 will settle most of them, so take T05
|
||
first and use this list to check nothing was missed. A ruling flips the
|
||
scenario; it does not change the kernel.
|
||
|
||
| scenario | the default currently in force |
|
||
|---|---|
|
||
| `gr-a04-bond-support` | a Support with no existing relation forms **no** Bond, because GR-L02 requires the target's consent |
|
||
| `gr-d01-darvo-trigger` | Stress **clamps** at 5 on every application (GR-F01 under the U2 default) |
|
||
| `gr-d05-darvo-reverse` | the REVERSE stage's default resolution |
|
||
| `gr-e01-threshold-unreachable-2p` | thresholds measured against the **stand-in** values — see the finding above |
|
||
| `gr-e02-shared-ground` | SHARED GROUND scoring default |
|
||
| `gr-e04-coalitions` | Bond networks score together; Rivalries do not connect; an unbonded player is a coalition of one |
|
||
|
||
Confirm each or overturn it. **`gr-e01` should be taken last**, because
|
||
T01 may dissolve it.
|
||
|
||
### RULED 2026-08-03
|
||
|
||
| scenario | ruling |
|
||
|---|---|
|
||
| `gr-a04-bond-support` | **Confirm** — consent required; no auto-Bond from no-relation Support |
|
||
| `gr-d01-darvo-trigger` | **Confirm** — follows U2 |
|
||
| `gr-d05-darvo-reverse` | **Confirm** — follows printed REVERSE + U5 |
|
||
| `gr-e01-threshold-unreachable-2p` | **Void / overturn as a rules gap** — stand-in artifact. With authoritative `Problems.csv` (12 pts available) the printed thresholds (2p→5, 3–4p→7, 5–6p→9) stand. Retire or rewrite the scenario as a non-provisional data-import check, not a design ruling. |
|
||
| `gr-e02-shared-ground` | **Confirm** — encode `Modes.csv` MODE_COOP as printed |
|
||
| `gr-e04-coalitions` | **Confirm** — encode `Modes.csv` MODE_COALITION as printed |
|
||
|
||
## Task: GR-E03 and GR-E04 have never been played to the end
|
||
|
||
```task
|
||
id: GROUND-WP-0002-T04
|
||
status: done
|
||
priority: medium
|
||
state_hub_task_id: "6c55eb56-22dc-4ee2-ac1a-4ced0dedfab9"
|
||
```
|
||
|
||
Both scoring modes are implemented and neither has been played through a
|
||
full game — by a person or by the engine. Whatever the rules say, nobody
|
||
knows what these modes feel like at the table.
|
||
|
||
This is a **playtest** task, not an engine task, and it belongs here.
|
||
|
||
### Handed off 2026-08-03 (residual)
|
||
|
||
Rules encoding for both modes is confirmed under T03 (`gr-e02`,
|
||
`gr-e04`). Full-game felt experience is **not** a ruling and is residual
|
||
work:
|
||
|
||
- **Residual workplan:** [GROUND-WP-0003](GROUND-WP-0003-playtest-semi-and-coalitions.md)
|
||
- **origin:** residual of GROUND-WP-0002-T04
|
||
|
||
This task is **done** as a handoff, not as a completed playtest.
|
||
|
||
## Ruling index (for clay-borg)
|
||
|
||
One-page flip list. Engine may clear `provisional: true` against these.
|
||
|
||
1. **Dataset** — `editions/ground-darvo-r0/` authoritative; contract rows under T01.
|
||
2. **SOLVE legality** — offer only face-up non-Denied, unclaimed (or same-round race), with matching suit in hand.
|
||
3. **U1–U10** — all confirmed as prior clay-borg defaults (table under T05).
|
||
4. **Provisional scenarios** — confirm five; void `gr-e01` as stand-in artifact.
|
||
5. **Playtest residual** — GROUND-WP-0003.
|