2026-07-31 01:33:54 +02:00
# GROUND Rules — simulation specification
Status: **v0.1 draft** , derived 2026-07-31 from the authoritative sister
repo `ground-game` , edition dataset **GROUND-DARVO-CORE-0.1**
(`editions/ground-darvo-r0/` : Rules_Text, Actions, DARVO, Relations,
Problems, Solutions, Scenarios, Modes, Tokens, Player_Mats, Glossary).
This is a derivation, not a design: where the dataset is silent, the gap
is listed in §Underdetermined with a PROVISIONAL simulation default and
must be flagged back to ground-game, never silently canonized.
Every rule is numbered and individually testable; scenario files cover
rules via their `covers:` list (M-D1-COV). Names in `CAPS` are dataset
terms.
---
## 1. Objects and state (GR-O)
- **GR-O01** A game has 2– 6 players, exactly 5 rounds, one Scenario card,
and one Mode card.
- **GR-O02** Per-player state: Stress (integer 0– 5), Freedom token
(READY/SPENT), DARVO marker (OFF/DENY/ATTACK/REVERSE), Focus/Blame token
(with owner and location), 2 relation slots, a hand of Solution cards,
a set of 5 Action cards, claimed Problems, and 0+ Protection tokens.
- **GR-O03** Table state: Surface Problem (face up), hidden Problems (face
down), Denied tokens on Problems, Solution deck and discard, Lead marker
(one player), Round marker (1– 5), relation tiles (Bond/Rivalry side)
between player pairs.
- **GR-O04** A Problem has: required Solution suit (Clarify, Repair,
Boundary, or Change), point value, visibility (face up / face down),
Denied flag, and claimed-by (a player or nobody).
- **GR-O05** A relation between two players is exactly one of Bond or
Rivalry; at most one relation may exist between the same two players.
## 2. Setup (GR-S)
- **GR-S01** Setup uses the chosen Scenario's Surface Problem face up and
its hidden Problems face down, filtered by player count: priorities 1– 2
for 2 players, 1– 3 for 3– 4 players, 1– 4 for 5– 6 players.
- **GR-S02** Each player starts with: Stress 2, Freedom READY, DARVO
marker OFF, Focus/Blame token (Focus side, unplaced), two free relation
slots, and two dealt Solution cards.
- **GR-S03** The Lead marker starts with a (seeded-)random player; the
Round marker starts at 1.
- **GR-S04** The Solution deck is the 24 core Solution cards (6 per suit)
minus those dealt, shuffled deterministically from the game seed.
## 3. Round structure (GR-R)
- **GR-R01** Each round has four steps in order: Select, Reveal, Resolve,
End.
- **GR-R02 (Select)** Every player simultaneously chooses exactly one of
their five Actions face down, with target designation where the Action
requires one. Choices are hidden from other players until Reveal
(commit/reveal).
- **GR-R03 (Select, stress gate)** A player at Stress 4 or 5 may select
only ATTACK or GROUND, unless they spend their READY Freedom token
during Select (before Reveal), which permits any one Action and turns
the token to SPENT.
- **GR-R04 (Reveal)** All selected Actions are revealed simultaneously.
- **GR-R05 (Reveal, GROUND mode)** A player who revealed GROUND chooses
its mode (GR / OU / ND) and its target *after* seeing all revealed
Actions, before resolution begins.
- **GR-R06 (Resolve)** Resolution proceeds in fixed step order:
1 GROUND, 2 Support, 3 active DARVO stages, 4 Investigate, 5 Attack,
6 Solve.
- **GR-R07 (Resolve, ties)** Within the same step, resolve starting with
the Lead player, continuing clockwise.
- **GR-R08 (End)** At End: clamp all Stress to 0– 5; any player at Stress 5
whose DARVO marker is OFF sets it to DENY (their sequence begins next
round); rotate Lead clockwise; advance the Round marker.
- **GR-R09** After Round 5's End step, the game ends and scoring applies
(GR-E).
## 4. Stress and Freedom (GR-F)
- **GR-F01** Stress is always an integer clamped to 0– 5.
- **GR-F02** At Stress 0– 3 all five Actions are selectable.
- **GR-F03** A Freedom token is READY or SPENT; spending is only possible
when READY, and only during Select (GR-R03).
- **GR-F04** GROUND—GR readies its player's Freedom token. Support
received through an existing Bond readies the target's Freedom token.
## 5. Actions (GR-A)
- **GR-A01 (INVESTIGATE)** Reveal one chosen hidden, non-Denied Problem,
then draw one Solution. If no hidden non-Denied Problems remain, draw
one Solution only.
- **GR-A02 (SOLVE)** Targeting one face-up, non-Denied Problem: when Solve
resolves, discard one Solution matching the Problem's required suit and
claim the Problem. If the Problem was already claimed by an earlier
resolver this round (Lead order), the Solution is not discarded and
nothing happens.
- **GR-A03 (SUPPORT, no relation)** Target gets − 1 Stress; a Bond may then
form per GR-L02.
- **GR-A04 (SUPPORT, existing Bond)** Target gets − 2 Stress, target's
Freedom becomes READY, and if the target is in an active DARVO sequence
its current stage is cancelled and the whole sequence ends (marker to
OFF).
- **GR-A05 (SUPPORT, existing Rivalry)** Target gets − 1 Stress; the target
chooses: flip the relation to Bond, or break it.
- **GR-A06 (ATTACK, no relation)** Target gets +1 Stress; a Rivalry forms
automatically if both players have a free slot (GR-L03).
- **GR-A07 (ATTACK, existing Bond)** Target gets +2 Stress and the Bond
flips to Rivalry.
- **GR-A08 (ATTACK, existing Rivalry)** Target gets +2 Stress and the
relation breaks (both link tokens return).
- **GR-A09 (ATTACK, cancellation)** Protection or GROUND—OU may cancel an
Attack. A cancelled Attack changes neither Stress nor relations.
- **GR-A10 (GROUND—GR, Ground & Restate)** Self: − 2 Stress and Freedom
becomes READY. If the player is in an active DARVO sequence, the current
stage still resolves this round, then the remaining sequence ends.
- **GR-A11 (GROUND—OU, Observe & Uphold)** Choose one: restore one Denied
Problem (face up, remove Denied token); cancel one Attack targeting the
player this round; or protect one face-up Problem from Deny this round.
- **GR-A12 (GROUND—ND, Name & Decide)** Choose one: remove one Blame token
from the player; break one relation involving the player; or reject one
Reverse targeting the player this round.
- **GR-A13** SUPPORT and ATTACK target one *other* player; INVESTIGATE
targets a hidden Problem; SOLVE targets a face-up non-Denied Problem.
## 6. Relations (GR-L)
- **GR-L01** Each player has exactly 2 relation slots; each relation
consumes one slot from each endpoint. If either endpoint lacks a free
slot, the immediate Support/Attack effect still applies but no relation
forms.
- **GR-L02 (Bond formation)** A no-relation Support creates a Bond only if
both players have a free slot **and the target accepts** .
- **GR-L03 (Rivalry formation)** A no-relation Attack creates a Rivalry
automatically (no consent) if both players have a free slot.
- **GR-L04 (Flip/break)** Bond→Rivalry on Attack-through-Bond (GR-A07);
Rivalry→Bond or break by target's choice on Support-through-Rivalry
(GR-A05); break on Attack-through-Rivalry (GR-A08); GROUND—ND may break
any relation involving its player (GR-A12).
- **GR-L05** A Bond formed this round by a Support does not itself cancel
DARVO; only Support through a Bond that existed before this round's
Support step regulates DARVO (GR-A04).
## 7. DARVO sequence (GR-D)
- **GR-D01 (Trigger)** At End, a player at Stress 5 with marker OFF sets
the marker to DENY; their DENY stage resolves in the next round's DARVO
step (GR-R08).
- **GR-D02 (Binding)** Once triggered, the sequence advances one stage per
consecutive round — DENY, then ATTACK, then REVERSE — regardless of the
player's later Stress, unless ended early (GR-D06/GR-A04/GR-A10).
- **GR-D03 (DENY)** Mandatory effect in the DARVO step: choose one
face-up, unsolved Problem not protected by GROUND—OU this round; turn it
face down and place a Denied token. A Denied Problem cannot be solved or
revealed by ordinary Investigate; only GROUND—OU restores it.
- **GR-D04 (ATTACK stage)** Mandatory effect: make one extra Attack
against any other player, resolved with the normal relation rules
(GR-A06..A09), in addition to the player's chosen Action. Then place the
player's Focus token beside the target — even if the extra Attack was
cancelled. The Focus target is remembered as the REVERSE target.
- **GR-D05 (REVERSE)** Mandatory effect targeting the Focus holder: unless
rejected by that player's GROUND—ND this round, flip Focus to Blame in
front of them, give them +1 Stress, and gain one Protection token. Then
(rejected or not — see §Underdetermined U5) the sequence owner reduces
own Stress by 2 and the sequence ends (marker OFF).
- **GR-D06 (Early end)** The sequence ends immediately when: an existing
Bond's Support cancels the current stage (GR-A04), or GROUND—GR ends it
after the current stage resolves (GR-A10). If it ends before REVERSE,
the placed Focus token is removed.
- **GR-D07** A player whose marker is not OFF cannot trigger a new
sequence (GR-R08); after the sequence ends, the marker is OFF and
re-triggering is possible at a later End.
## 8. Problems and solving (GR-P)
- **GR-P01** Only face-up, non-Denied Problems can be targeted by SOLVE or
claimed.
- **GR-P02** Hidden (face-down, non-Denied) Problems can only be revealed
by INVESTIGATE (GR-A01); Denied Problems only by GROUND—OU (GR-A11).
- **GR-P03** A claimed Problem belongs to its claimant and counts its
printed value for scoring; a Problem can be claimed at most once.
- **GR-P04** Competing SOLVEs on the same Problem in the same round
resolve in Lead order (GR-R07); losers keep their Solution (GR-A02).
CB-WP-0023: SOLVE is legal only where it can do something
Implements ground-game's ruling of 2026-08-03. make all exits 0, 26
scenarios, rule coverage 59/59, and no scenario encoded the bug.
The rule ended up somewhere other than where I put it, and a gate moved
it. It went into legal_commands first; the AM-1 coverage gate then
demanded a scenario for the new GR-P05, and scenarios drive validate, not
the offer layer. A rule enforced only by the offer is enforced only for
clients that ask what is legal -- the browser would be filtered and a
scenario file would walk straight past it. Once GR-P05 moved into
validate, every condition in legal_commands was dead code, and the
layering test said so in those words.
And the reported case was not the one I reported. CB-WP-0018 and the
message to ground-game described SOLVE offered on a FACE-DOWN Problem.
Measured: validate already rejected face-down, so it never was offered.
Problem 1 is the Surface Problem, face-up from the deal -- the
maintainer's three inert SOLVEs were the HAND case, holding no Clarify
for a Clarify Problem. The ruling covers both so nothing is invalidated,
but the record was wrong.
Four conditions asserted separately, because one 'SOLVE is filtered' test
would pass with three of four implemented.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-04 00:18:40 +02:00
- **GR-P05** *(ruled by ground-game 2026-08-03, GROUND-WP-0002 T02)*
**SOLVE is offered only where it can do something.** A seat may select
SOLVE on a Problem only if it is face-up, non-Denied, **unclaimed** , and
the seat **holds a Solution of the required suit** . A Problem claimed in
a *prior* round is not a legal target; the same-round race of GR-P04 is
unaffected, because both seats select before either resolves.
*Not a bluff mechanic.* CB-WP-0018 raised the possibility that
selecting an unfulfillable SOLVE was an intended face-down bluff. The
ruling is that it was a filter bug: *"the player always knows their
hand… physical tables self-police the same way."*
2026-07-31 01:33:54 +02:00
## 9. Protection, Focus and Blame (GR-T)
- **GR-T01** A Protection token cancels the next Attack against its
holder (including a DARVO extra Attack), then returns to the supply.
- **GR-T02** A Blame token in front of a player is worth − 1 to that
player's personal score and stays until removed by GROUND—ND.
- **GR-T03** Each player has exactly one Focus/Blame token; it is either
unplaced (Focus, with owner), placed Focus-side (during own DARVO), or
flipped to Blame in front of the REVERSE target.
## 10. Game end and scoring (GR-E)
- **GR-E01** After Round 5, sum the printed values of all claimed
Problems; the Scenario's threshold (by player count: 2p → 5, 3– 4p → 7,
5– 6p → 9 in dataset 0.1) decides group success where the Mode uses it.
- **GR-E02 (SHARED GROUND, co-op)** One shared score; group succeeds iff
total ≥ threshold. Mastery rating = successes minus 1 per Blame token in
play and 1 per Denied Problem.
- **GR-E03 (COMMON PROBLEM, PERSONAL EDGE, semi-co-op)** Group must meet
the threshold; if it does, each player scores claimed value − 1 per Blame
they hold; highest wins. Tiebreak: lower Stress, then more Bonds, then
shared victory.
- **GR-E04 (BONDED COALITIONS)** Group must meet the threshold; each
connected Bond network is a coalition (unbonded players are solo);
coalition score = sum of members' personal scores; highest coalition
wins. Rivalries do not connect. Tiebreak: lower combined Stress, then
fewer Blame tokens, then shared victory.
---
CB-WP-0022 T05/T06/T07: the register, and what its first run found
T05. tools/design.py, make design, and the register in GroundRules.md --
14 rows, no new file, because ADR-0012 D2 made §Underdetermined the
register rather than building one beside it.
Backfill was the test and it caught two things the ADR did not have.
First, a `role` column. The first report alarmed on U2 and was wrong to:
U2's scenario is green BECAUSE the provisional default it documents is
implemented, which says nothing about whether ground-game agrees. GR-E01's
was a counterexample that went green. Same colour, opposite meaning -- a
register that cannot tell them apart either alarms constantly or never.
Only a green counterexample alarms. Folded back into GameDesign §1.3.
Second, it contradicted the survey. CB-RES-0007 said "six of the ten
already have provisional scenarios." Measured -- grep -lE "\bU<n>\b" over
scenarios/ground -- exactly ONE U-item names itself. Five provisional
scenarios exist and four probably encode U-item defaults, but the mapping
is not written down, so it is not checkable. Same defect class as the
wrong premises, found inside the survey that proposed the fix. Now a
reported debt: open, lacking a reproduction: 9, target 0.
design.py carries the control design-baseline.py never had, asserted
directly: a row citing a nonexistent file must not count as reproduced,
using the exact path 2da19a4 deleted -- which the old tool called green.
design-baseline.py is marked superseded rather than deleted; it is the
evidence for how a wrong number got into a survey.
T06. The report is a FILE in ground-game under GROUND-WP-0002, committed
there, with a hub message that only points at it. It asks for no ruling:
it carries GR-E01's withdrawal, our reproduction debt, and two notes that
are explicitly not findings.
And it had to acknowledge something nobody anticipated. GROUND-WP-0002 is
finished -- all ten U-items were RULED 2026-08-03, every one confirmed as
the default we simulate, plus five of six provisional scenarios. The
survey said "0 of 10 ruled" two days later and this register was built
saying `reported`. That is the unread-inbox failure running in the
opposite direction: they answered and we did not collect it. The
instrument's first run surfaced it. They are `ruled`, not `applied` --
lifting the now-settled provisional flags is owed and is not done, and
make design shows them open until it is.
T07. evidence/CB-EV-0021. Two of six catches in this pass came from
execution rather than process (the role distinction from building it, the
ten uncollected rulings from running it), which is InnerLoop §Design
goal's prediction holding.
make self-tests, facts-check, loop-lint: clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 15:22:33 +02:00
## The finding register
CB-WP-0026: collect the rulings -- ten answers that arrived and were never applied
ground-game ruled all ten U-items on 2026-08-03, every one CONFIRMED as
the default clay-borg simulates, and confirmed five of six provisional
scenarios. clay-borg never collected the answers: CB-RES-0007 reported "0
of 10 ruled" the same day, and CB-WP-0022 built the finding register two
days later still recording them as `reported`. make design's first run is
what noticed -- not a human, not the adversarial review that found four
other things.
That is the unread-inbox failure running in the opposite direction, and it
appears nowhere in the declaration, survey, ADR or spec of the pass that
was built entirely around the forward version. It is arguably worse: an
unread message is visible as silence, while a collected-but-unapplied
ruling looks exactly like work in progress.
Ten rulings quoted into §Underdetermined (the three conditional ones
verbatim -- U1's designer note, U2's End-only trigger, U8's
consume-only-if-it-cancels). Five provisional flags lifted, replaced by
ruled/ruled_by/ruled_note so the flag went and the provenance stayed.
Register queue 9 -> 0.
T02's control came back clean: make sim is 26 passed, 59 rules covered,
nothing red. Had a scenario gone red it would have meant we described our
own behaviour incorrectly to ground-game.
I wrote two U-item mappings and both were wrong. gr-a04 -> U1 (it asserts
consent is REQUIRED; U1 asks WHEN the target accepts) and gr-d05 -> U5 (it
exercises the UNREJECTED Reverse; U5 is the rejected one). Both plausible
from covers:, neither survived reading the description. Third and fourth
instance of this defect; the first two reached ground-game. So encodes_u_item
is now a declaration and design.py asserts the file names what it claims --
and that check's own first version grepped for mentions and went red when
two files recorded why they do NOT encode U1 and U5. A mention is not a
claim, which is exactly the looseness that let "six of the ten have
provisional scenarios" stand.
Two positive controls went red for the best possible reason, both broken
the same way -- asserting against live repo data instead of constructing
their condition. rule-coverage.py required at least one provisional item
to EXIST; it now builds a fixture and reports the live count as a
diagnostic, because there is no number of provisional items this project
should have. design-baseline.py pinned "2 of 6" while recomputing one row
from a live glob, so the dated snapshot was never a snapshot; frozen to
its 2026-08-03 list and unwired from self-tests, since per ADR-0012 D8 it
is no longer a reporting tool.
ScenarioFile is deny_unknown_fields and refused the four new fields until
declared -- correct: a corpus accepting unknown metadata would let a typo'd
encodes_u_iem sit there claiming nothing.
DEVIATION: ADR-0012 D2 said "no new file". GroundRules.md crossed the
loadability limit, so the register moved to specs/FindingRegister.md. D2's
substance holds -- one register, same machinery, nothing competing -- but
the literal instruction did not, and it resolves an awkwardness D2 named
itself.
make all: exit 0. loop-lint clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 16:13:37 +02:00
Moved to [`FindingRegister.md` ](FindingRegister.md ) on 2026-08-05 — this
file crossed the loadability limit. The U-items below are its
`underdetermined` rows; `make design` reports over it.
## Underdetermined in dataset 0.1 — RULED 2026-08-03, applied 2026-08-05
**Owner: ground-game. Raised: 2026-07-31. Ruled 2026-08-03**
(GROUND-WP-0002 T05): **all ten confirmed** as the defaults clay-borg
already simulates. Applied here 2026-08-05 (CB-WP-0026).
**Nothing below awaits a ruling.** The defaults are now the rules for
dataset 0.1, and the `provisional: true` flags they carried have been
lifted — a flag that outlives its question is a lie with a timestamp.
**No kernel behaviour changed**, because every ruling was a confirmation.
What changed is that these stopped being our guesses.
> **Three rulings carry more than "confirm", quoted rather than
> paraphrased.** **U1**: the Bond formed by *this* Support still does not
> cancel DARVO (printed designer note — this is what GR-L05 encodes).
> **U2**: clamp on every application, but **DARVO still arms only at End**
> when at Stress 5 (GR-R08) — the clamping rule and the trigger rule are
> separate. **U8**: GROUND—OU applies first and **Protection is consumed
> only if it actually cancels**.
>
> ground-game flagged **U2, U6 and U8** as the three that change play,
> because each decides whether a DARVO stage fires at all.
Formalization exposed points the dataset did not decide. Each is stated
with its default and the ruling that settled it.
2026-07-31 01:33:54 +02:00
- **U1 Bond acceptance timing (GR-L02):** when does the target "accept"?
Default: a decision point during the Support resolution, target decides
with full knowledge of revealed Actions.
CB-WP-0026: collect the rulings -- ten answers that arrived and were never applied
ground-game ruled all ten U-items on 2026-08-03, every one CONFIRMED as
the default clay-borg simulates, and confirmed five of six provisional
scenarios. clay-borg never collected the answers: CB-RES-0007 reported "0
of 10 ruled" the same day, and CB-WP-0022 built the finding register two
days later still recording them as `reported`. make design's first run is
what noticed -- not a human, not the adversarial review that found four
other things.
That is the unread-inbox failure running in the opposite direction, and it
appears nowhere in the declaration, survey, ADR or spec of the pass that
was built entirely around the forward version. It is arguably worse: an
unread message is visible as silence, while a collected-but-unapplied
ruling looks exactly like work in progress.
Ten rulings quoted into §Underdetermined (the three conditional ones
verbatim -- U1's designer note, U2's End-only trigger, U8's
consume-only-if-it-cancels). Five provisional flags lifted, replaced by
ruled/ruled_by/ruled_note so the flag went and the provenance stayed.
Register queue 9 -> 0.
T02's control came back clean: make sim is 26 passed, 59 rules covered,
nothing red. Had a scenario gone red it would have meant we described our
own behaviour incorrectly to ground-game.
I wrote two U-item mappings and both were wrong. gr-a04 -> U1 (it asserts
consent is REQUIRED; U1 asks WHEN the target accepts) and gr-d05 -> U5 (it
exercises the UNREJECTED Reverse; U5 is the rejected one). Both plausible
from covers:, neither survived reading the description. Third and fourth
instance of this defect; the first two reached ground-game. So encodes_u_item
is now a declaration and design.py asserts the file names what it claims --
and that check's own first version grepped for mentions and went red when
two files recorded why they do NOT encode U1 and U5. A mention is not a
claim, which is exactly the looseness that let "six of the ten have
provisional scenarios" stand.
Two positive controls went red for the best possible reason, both broken
the same way -- asserting against live repo data instead of constructing
their condition. rule-coverage.py required at least one provisional item
to EXIST; it now builds a fixture and reports the live count as a
diagnostic, because there is no number of provisional items this project
should have. design-baseline.py pinned "2 of 6" while recomputing one row
from a live glob, so the dated snapshot was never a snapshot; frozen to
its 2026-08-03 list and unwired from self-tests, since per ADR-0012 D8 it
is no longer a reporting tool.
ScenarioFile is deny_unknown_fields and refused the four new fields until
declared -- correct: a corpus accepting unknown metadata would let a typo'd
encodes_u_iem sit there claiming nothing.
DEVIATION: ADR-0012 D2 said "no new file". GroundRules.md crossed the
loadability limit, so the register moved to specs/FindingRegister.md. D2's
substance holds -- one register, same machinery, nothing competing -- but
the literal instruction did not, and it resolves an awkwardness D2 named
itself.
make all: exit 0. loop-lint clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 16:13:37 +02:00
**RULED 2026-08-03 — confirm.** Target accepts during Support resolution, with full knowledge of revealed Actions. A Bond formed by *this* Support still does not cancel DARVO (printed designer note; GR-L05).
2026-07-31 01:33:54 +02:00
- **U2 Stress clamping during resolution (GR-F01):** dataset caps Stress
at End; mats physically cap at 0– 5. Default: clamp on every
application (no intermediate values above 5/below 0). Note this
interacts with DARVO triggering (a mid-round spike to 5 that is reduced
again before End does not trigger).
CB-WP-0026: collect the rulings -- ten answers that arrived and were never applied
ground-game ruled all ten U-items on 2026-08-03, every one CONFIRMED as
the default clay-borg simulates, and confirmed five of six provisional
scenarios. clay-borg never collected the answers: CB-RES-0007 reported "0
of 10 ruled" the same day, and CB-WP-0022 built the finding register two
days later still recording them as `reported`. make design's first run is
what noticed -- not a human, not the adversarial review that found four
other things.
That is the unread-inbox failure running in the opposite direction, and it
appears nowhere in the declaration, survey, ADR or spec of the pass that
was built entirely around the forward version. It is arguably worse: an
unread message is visible as silence, while a collected-but-unapplied
ruling looks exactly like work in progress.
Ten rulings quoted into §Underdetermined (the three conditional ones
verbatim -- U1's designer note, U2's End-only trigger, U8's
consume-only-if-it-cancels). Five provisional flags lifted, replaced by
ruled/ruled_by/ruled_note so the flag went and the provenance stayed.
Register queue 9 -> 0.
T02's control came back clean: make sim is 26 passed, 59 rules covered,
nothing red. Had a scenario gone red it would have meant we described our
own behaviour incorrectly to ground-game.
I wrote two U-item mappings and both were wrong. gr-a04 -> U1 (it asserts
consent is REQUIRED; U1 asks WHEN the target accepts) and gr-d05 -> U5 (it
exercises the UNREJECTED Reverse; U5 is the rejected one). Both plausible
from covers:, neither survived reading the description. Third and fourth
instance of this defect; the first two reached ground-game. So encodes_u_item
is now a declaration and design.py asserts the file names what it claims --
and that check's own first version grepped for mentions and went red when
two files recorded why they do NOT encode U1 and U5. A mention is not a
claim, which is exactly the looseness that let "six of the ten have
provisional scenarios" stand.
Two positive controls went red for the best possible reason, both broken
the same way -- asserting against live repo data instead of constructing
their condition. rule-coverage.py required at least one provisional item
to EXIST; it now builds a fixture and reports the live count as a
diagnostic, because there is no number of provisional items this project
should have. design-baseline.py pinned "2 of 6" while recomputing one row
from a live glob, so the dated snapshot was never a snapshot; frozen to
its 2026-08-03 list and unwired from self-tests, since per ADR-0012 D8 it
is no longer a reporting tool.
ScenarioFile is deny_unknown_fields and refused the four new fields until
declared -- correct: a corpus accepting unknown metadata would let a typo'd
encodes_u_iem sit there claiming nothing.
DEVIATION: ADR-0012 D2 said "no new file". GroundRules.md crossed the
loadability limit, so the register moved to specs/FindingRegister.md. D2's
substance holds -- one register, same machinery, nothing competing -- but
the literal instruction did not, and it resolves an awkwardness D2 named
itself.
make all: exit 0. loop-lint clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 16:13:37 +02:00
**RULED 2026-08-03 — confirm.** Clamp Stress to 0– 5 on **every** application; matches the physical mats. DARVO still arms **only at End** when at Stress 5 (GR-R08).
2026-07-31 01:33:54 +02:00
- **U3 DENY with no legal target (GR-D03):** if no face-up unsolved
unprotected Problem exists, default: the stage resolves as a no-op and
the sequence still advances.
CB-WP-0026: collect the rulings -- ten answers that arrived and were never applied
ground-game ruled all ten U-items on 2026-08-03, every one CONFIRMED as
the default clay-borg simulates, and confirmed five of six provisional
scenarios. clay-borg never collected the answers: CB-RES-0007 reported "0
of 10 ruled" the same day, and CB-WP-0022 built the finding register two
days later still recording them as `reported`. make design's first run is
what noticed -- not a human, not the adversarial review that found four
other things.
That is the unread-inbox failure running in the opposite direction, and it
appears nowhere in the declaration, survey, ADR or spec of the pass that
was built entirely around the forward version. It is arguably worse: an
unread message is visible as silence, while a collected-but-unapplied
ruling looks exactly like work in progress.
Ten rulings quoted into §Underdetermined (the three conditional ones
verbatim -- U1's designer note, U2's End-only trigger, U8's
consume-only-if-it-cancels). Five provisional flags lifted, replaced by
ruled/ruled_by/ruled_note so the flag went and the provenance stayed.
Register queue 9 -> 0.
T02's control came back clean: make sim is 26 passed, 59 rules covered,
nothing red. Had a scenario gone red it would have meant we described our
own behaviour incorrectly to ground-game.
I wrote two U-item mappings and both were wrong. gr-a04 -> U1 (it asserts
consent is REQUIRED; U1 asks WHEN the target accepts) and gr-d05 -> U5 (it
exercises the UNREJECTED Reverse; U5 is the rejected one). Both plausible
from covers:, neither survived reading the description. Third and fourth
instance of this defect; the first two reached ground-game. So encodes_u_item
is now a declaration and design.py asserts the file names what it claims --
and that check's own first version grepped for mentions and went red when
two files recorded why they do NOT encode U1 and U5. A mention is not a
claim, which is exactly the looseness that let "six of the ten have
provisional scenarios" stand.
Two positive controls went red for the best possible reason, both broken
the same way -- asserting against live repo data instead of constructing
their condition. rule-coverage.py required at least one provisional item
to EXIST; it now builds a fixture and reports the live count as a
diagnostic, because there is no number of provisional items this project
should have. design-baseline.py pinned "2 of 6" while recomputing one row
from a live glob, so the dated snapshot was never a snapshot; frozen to
its 2026-08-03 list and unwired from self-tests, since per ADR-0012 D8 it
is no longer a reporting tool.
ScenarioFile is deny_unknown_fields and refused the four new fields until
declared -- correct: a corpus accepting unknown metadata would let a typo'd
encodes_u_iem sit there claiming nothing.
DEVIATION: ADR-0012 D2 said "no new file". GroundRules.md crossed the
loadability limit, so the register moved to specs/FindingRegister.md. D2's
substance holds -- one register, same machinery, nothing competing -- but
the literal instruction did not, and it resolves an awkwardness D2 named
itself.
make all: exit 0. loop-lint clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 16:13:37 +02:00
**RULED 2026-08-03 — confirm.** No-op; the sequence still advances.
2026-07-31 01:33:54 +02:00
- **U4 Solution deck exhaustion (GR-A01):** default: reshuffle the discard
into a new deck deterministically; if both are empty, the draw is
skipped.
CB-WP-0026: collect the rulings -- ten answers that arrived and were never applied
ground-game ruled all ten U-items on 2026-08-03, every one CONFIRMED as
the default clay-borg simulates, and confirmed five of six provisional
scenarios. clay-borg never collected the answers: CB-RES-0007 reported "0
of 10 ruled" the same day, and CB-WP-0022 built the finding register two
days later still recording them as `reported`. make design's first run is
what noticed -- not a human, not the adversarial review that found four
other things.
That is the unread-inbox failure running in the opposite direction, and it
appears nowhere in the declaration, survey, ADR or spec of the pass that
was built entirely around the forward version. It is arguably worse: an
unread message is visible as silence, while a collected-but-unapplied
ruling looks exactly like work in progress.
Ten rulings quoted into §Underdetermined (the three conditional ones
verbatim -- U1's designer note, U2's End-only trigger, U8's
consume-only-if-it-cancels). Five provisional flags lifted, replaced by
ruled/ruled_by/ruled_note so the flag went and the provenance stayed.
Register queue 9 -> 0.
T02's control came back clean: make sim is 26 passed, 59 rules covered,
nothing red. Had a scenario gone red it would have meant we described our
own behaviour incorrectly to ground-game.
I wrote two U-item mappings and both were wrong. gr-a04 -> U1 (it asserts
consent is REQUIRED; U1 asks WHEN the target accepts) and gr-d05 -> U5 (it
exercises the UNREJECTED Reverse; U5 is the rejected one). Both plausible
from covers:, neither survived reading the description. Third and fourth
instance of this defect; the first two reached ground-game. So encodes_u_item
is now a declaration and design.py asserts the file names what it claims --
and that check's own first version grepped for mentions and went red when
two files recorded why they do NOT encode U1 and U5. A mention is not a
claim, which is exactly the looseness that let "six of the ten have
provisional scenarios" stand.
Two positive controls went red for the best possible reason, both broken
the same way -- asserting against live repo data instead of constructing
their condition. rule-coverage.py required at least one provisional item
to EXIST; it now builds a fixture and reports the live count as a
diagnostic, because there is no number of provisional items this project
should have. design-baseline.py pinned "2 of 6" while recomputing one row
from a live glob, so the dated snapshot was never a snapshot; frozen to
its 2026-08-03 list and unwired from self-tests, since per ADR-0012 D8 it
is no longer a reporting tool.
ScenarioFile is deny_unknown_fields and refused the four new fields until
declared -- correct: a corpus accepting unknown metadata would let a typo'd
encodes_u_iem sit there claiming nothing.
DEVIATION: ADR-0012 D2 said "no new file". GroundRules.md crossed the
loadability limit, so the register moved to specs/FindingRegister.md. D2's
substance holds -- one register, same machinery, nothing competing -- but
the literal instruction did not, and it resolves an awkwardness D2 named
itself.
make all: exit 0. loop-lint clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 16:13:37 +02:00
**RULED 2026-08-03 — confirm.** Deterministic reshuffle of the discard into a new deck; if both are empty, skip the draw.
2026-07-31 01:33:54 +02:00
- **U5 Rejected REVERSE — self-effects (GR-D05):** the Actions sheet says
GROUND—ND "rejects one Reverse"; the DARVO sheet orders the − 2
self-Stress after the flip/+1/Protection block. Default: rejection
cancels the effects on the target (no Blame, no +1) **and** the
Protection gain, but the sequence owner still takes − 2 Stress and the
sequence still ends; the Focus token returns unflipped.
CB-WP-0026: collect the rulings -- ten answers that arrived and were never applied
ground-game ruled all ten U-items on 2026-08-03, every one CONFIRMED as
the default clay-borg simulates, and confirmed five of six provisional
scenarios. clay-borg never collected the answers: CB-RES-0007 reported "0
of 10 ruled" the same day, and CB-WP-0022 built the finding register two
days later still recording them as `reported`. make design's first run is
what noticed -- not a human, not the adversarial review that found four
other things.
That is the unread-inbox failure running in the opposite direction, and it
appears nowhere in the declaration, survey, ADR or spec of the pass that
was built entirely around the forward version. It is arguably worse: an
unread message is visible as silence, while a collected-but-unapplied
ruling looks exactly like work in progress.
Ten rulings quoted into §Underdetermined (the three conditional ones
verbatim -- U1's designer note, U2's End-only trigger, U8's
consume-only-if-it-cancels). Five provisional flags lifted, replaced by
ruled/ruled_by/ruled_note so the flag went and the provenance stayed.
Register queue 9 -> 0.
T02's control came back clean: make sim is 26 passed, 59 rules covered,
nothing red. Had a scenario gone red it would have meant we described our
own behaviour incorrectly to ground-game.
I wrote two U-item mappings and both were wrong. gr-a04 -> U1 (it asserts
consent is REQUIRED; U1 asks WHEN the target accepts) and gr-d05 -> U5 (it
exercises the UNREJECTED Reverse; U5 is the rejected one). Both plausible
from covers:, neither survived reading the description. Third and fourth
instance of this defect; the first two reached ground-game. So encodes_u_item
is now a declaration and design.py asserts the file names what it claims --
and that check's own first version grepped for mentions and went red when
two files recorded why they do NOT encode U1 and U5. A mention is not a
claim, which is exactly the looseness that let "six of the ten have
provisional scenarios" stand.
Two positive controls went red for the best possible reason, both broken
the same way -- asserting against live repo data instead of constructing
their condition. rule-coverage.py required at least one provisional item
to EXIST; it now builds a fixture and reports the live count as a
diagnostic, because there is no number of provisional items this project
should have. design-baseline.py pinned "2 of 6" while recomputing one row
from a live glob, so the dated snapshot was never a snapshot; frozen to
its 2026-08-03 list and unwired from self-tests, since per ADR-0012 D8 it
is no longer a reporting tool.
ScenarioFile is deny_unknown_fields and refused the four new fields until
declared -- correct: a corpus accepting unknown metadata would let a typo'd
encodes_u_iem sit there claiming nothing.
DEVIATION: ADR-0012 D2 said "no new file". GroundRules.md crossed the
loadability limit, so the register moved to specs/FindingRegister.md. D2's
substance holds -- one register, same machinery, nothing competing -- but
the literal instruction did not, and it resolves an awkwardness D2 named
itself.
make all: exit 0. loop-lint clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 16:13:37 +02:00
**RULED 2026-08-03 — confirm.** Rejection cancels the target effects (no Blame, no +1, no Protection) **and** the owner still takes − 2 Stress and the sequence ends.
2026-07-31 01:33:54 +02:00
- **U6 Simultaneous Bond-Support and stage cancellation (GR-A04, GR-R06):**
Support (step 2) resolves before DARVO stages (step 3), so a Bond
Support in the same round cancels that round's stage before it fires.
Stated as the intended reading; confirm.
CB-WP-0026: collect the rulings -- ten answers that arrived and were never applied
ground-game ruled all ten U-items on 2026-08-03, every one CONFIRMED as
the default clay-borg simulates, and confirmed five of six provisional
scenarios. clay-borg never collected the answers: CB-RES-0007 reported "0
of 10 ruled" the same day, and CB-WP-0022 built the finding register two
days later still recording them as `reported`. make design's first run is
what noticed -- not a human, not the adversarial review that found four
other things.
That is the unread-inbox failure running in the opposite direction, and it
appears nowhere in the declaration, survey, ADR or spec of the pass that
was built entirely around the forward version. It is arguably worse: an
unread message is visible as silence, while a collected-but-unapplied
ruling looks exactly like work in progress.
Ten rulings quoted into §Underdetermined (the three conditional ones
verbatim -- U1's designer note, U2's End-only trigger, U8's
consume-only-if-it-cancels). Five provisional flags lifted, replaced by
ruled/ruled_by/ruled_note so the flag went and the provenance stayed.
Register queue 9 -> 0.
T02's control came back clean: make sim is 26 passed, 59 rules covered,
nothing red. Had a scenario gone red it would have meant we described our
own behaviour incorrectly to ground-game.
I wrote two U-item mappings and both were wrong. gr-a04 -> U1 (it asserts
consent is REQUIRED; U1 asks WHEN the target accepts) and gr-d05 -> U5 (it
exercises the UNREJECTED Reverse; U5 is the rejected one). Both plausible
from covers:, neither survived reading the description. Third and fourth
instance of this defect; the first two reached ground-game. So encodes_u_item
is now a declaration and design.py asserts the file names what it claims --
and that check's own first version grepped for mentions and went red when
two files recorded why they do NOT encode U1 and U5. A mention is not a
claim, which is exactly the looseness that let "six of the ten have
provisional scenarios" stand.
Two positive controls went red for the best possible reason, both broken
the same way -- asserting against live repo data instead of constructing
their condition. rule-coverage.py required at least one provisional item
to EXIST; it now builds a fixture and reports the live count as a
diagnostic, because there is no number of provisional items this project
should have. design-baseline.py pinned "2 of 6" while recomputing one row
from a live glob, so the dated snapshot was never a snapshot; frozen to
its 2026-08-03 list and unwired from self-tests, since per ADR-0012 D8 it
is no longer a reporting tool.
ScenarioFile is deny_unknown_fields and refused the four new fields until
declared -- correct: a corpus accepting unknown metadata would let a typo'd
encodes_u_iem sit there claiming nothing.
DEVIATION: ADR-0012 D2 said "no new file". GroundRules.md crossed the
loadability limit, so the register moved to specs/FindingRegister.md. D2's
substance holds -- one register, same machinery, nothing competing -- but
the literal instruction did not, and it resolves an awkwardness D2 named
itself.
make all: exit 0. loop-lint clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 16:13:37 +02:00
**RULED 2026-08-03 — confirm.** A pre-existing Bond Support (step 2) cancels that round's DARVO stage before it fires (step 3) and ends the sequence.
2026-07-31 01:33:54 +02:00
- **U7 Focus target elimination:** dataset has no player elimination, so
no rule needed; confirm none exists.
CB-WP-0026: collect the rulings -- ten answers that arrived and were never applied
ground-game ruled all ten U-items on 2026-08-03, every one CONFIRMED as
the default clay-borg simulates, and confirmed five of six provisional
scenarios. clay-borg never collected the answers: CB-RES-0007 reported "0
of 10 ruled" the same day, and CB-WP-0022 built the finding register two
days later still recording them as `reported`. make design's first run is
what noticed -- not a human, not the adversarial review that found four
other things.
That is the unread-inbox failure running in the opposite direction, and it
appears nowhere in the declaration, survey, ADR or spec of the pass that
was built entirely around the forward version. It is arguably worse: an
unread message is visible as silence, while a collected-but-unapplied
ruling looks exactly like work in progress.
Ten rulings quoted into §Underdetermined (the three conditional ones
verbatim -- U1's designer note, U2's End-only trigger, U8's
consume-only-if-it-cancels). Five provisional flags lifted, replaced by
ruled/ruled_by/ruled_note so the flag went and the provenance stayed.
Register queue 9 -> 0.
T02's control came back clean: make sim is 26 passed, 59 rules covered,
nothing red. Had a scenario gone red it would have meant we described our
own behaviour incorrectly to ground-game.
I wrote two U-item mappings and both were wrong. gr-a04 -> U1 (it asserts
consent is REQUIRED; U1 asks WHEN the target accepts) and gr-d05 -> U5 (it
exercises the UNREJECTED Reverse; U5 is the rejected one). Both plausible
from covers:, neither survived reading the description. Third and fourth
instance of this defect; the first two reached ground-game. So encodes_u_item
is now a declaration and design.py asserts the file names what it claims --
and that check's own first version grepped for mentions and went red when
two files recorded why they do NOT encode U1 and U5. A mention is not a
claim, which is exactly the looseness that let "six of the ten have
provisional scenarios" stand.
Two positive controls went red for the best possible reason, both broken
the same way -- asserting against live repo data instead of constructing
their condition. rule-coverage.py required at least one provisional item
to EXIST; it now builds a fixture and reports the live count as a
diagnostic, because there is no number of provisional items this project
should have. design-baseline.py pinned "2 of 6" while recomputing one row
from a live glob, so the dated snapshot was never a snapshot; frozen to
its 2026-08-03 list and unwired from self-tests, since per ADR-0012 D8 it
is no longer a reporting tool.
ScenarioFile is deny_unknown_fields and refused the four new fields until
declared -- correct: a corpus accepting unknown metadata would let a typo'd
encodes_u_iem sit there claiming nothing.
DEVIATION: ADR-0012 D2 said "no new file". GroundRules.md crossed the
loadability limit, so the register moved to specs/FindingRegister.md. D2's
substance holds -- one register, same machinery, nothing competing -- but
the literal instruction did not, and it resolves an awkwardness D2 named
itself.
make all: exit 0. loop-lint clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 16:13:37 +02:00
**RULED 2026-08-03 — confirm.** No player elimination.
2026-07-31 01:33:54 +02:00
- **U8 Multiple Attack cancellation sources (GR-A09):** if both Protection
and GROUND—OU could cancel the same Attack, default: GROUND—OU (chosen
at step 1) applies first; Protection is consumed only if it actually
cancels.
CB-WP-0026: collect the rulings -- ten answers that arrived and were never applied
ground-game ruled all ten U-items on 2026-08-03, every one CONFIRMED as
the default clay-borg simulates, and confirmed five of six provisional
scenarios. clay-borg never collected the answers: CB-RES-0007 reported "0
of 10 ruled" the same day, and CB-WP-0022 built the finding register two
days later still recording them as `reported`. make design's first run is
what noticed -- not a human, not the adversarial review that found four
other things.
That is the unread-inbox failure running in the opposite direction, and it
appears nowhere in the declaration, survey, ADR or spec of the pass that
was built entirely around the forward version. It is arguably worse: an
unread message is visible as silence, while a collected-but-unapplied
ruling looks exactly like work in progress.
Ten rulings quoted into §Underdetermined (the three conditional ones
verbatim -- U1's designer note, U2's End-only trigger, U8's
consume-only-if-it-cancels). Five provisional flags lifted, replaced by
ruled/ruled_by/ruled_note so the flag went and the provenance stayed.
Register queue 9 -> 0.
T02's control came back clean: make sim is 26 passed, 59 rules covered,
nothing red. Had a scenario gone red it would have meant we described our
own behaviour incorrectly to ground-game.
I wrote two U-item mappings and both were wrong. gr-a04 -> U1 (it asserts
consent is REQUIRED; U1 asks WHEN the target accepts) and gr-d05 -> U5 (it
exercises the UNREJECTED Reverse; U5 is the rejected one). Both plausible
from covers:, neither survived reading the description. Third and fourth
instance of this defect; the first two reached ground-game. So encodes_u_item
is now a declaration and design.py asserts the file names what it claims --
and that check's own first version grepped for mentions and went red when
two files recorded why they do NOT encode U1 and U5. A mention is not a
claim, which is exactly the looseness that let "six of the ten have
provisional scenarios" stand.
Two positive controls went red for the best possible reason, both broken
the same way -- asserting against live repo data instead of constructing
their condition. rule-coverage.py required at least one provisional item
to EXIST; it now builds a fixture and reports the live count as a
diagnostic, because there is no number of provisional items this project
should have. design-baseline.py pinned "2 of 6" while recomputing one row
from a live glob, so the dated snapshot was never a snapshot; frozen to
its 2026-08-03 list and unwired from self-tests, since per ADR-0012 D8 it
is no longer a reporting tool.
ScenarioFile is deny_unknown_fields and refused the four new fields until
declared -- correct: a corpus accepting unknown metadata would let a typo'd
encodes_u_iem sit there claiming nothing.
DEVIATION: ADR-0012 D2 said "no new file". GroundRules.md crossed the
loadability limit, so the register moved to specs/FindingRegister.md. D2's
substance holds -- one register, same machinery, nothing competing -- but
the literal instruction did not, and it resolves an awkwardness D2 named
itself.
make all: exit 0. loop-lint clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 16:13:37 +02:00
**RULED 2026-08-03 — confirm.** GROUND—OU applies first; Protection is consumed **only if it actually cancels** .
2026-07-31 01:33:54 +02:00
- **U9 Two players at Stress 5 at the same End (GR-R08):** both trigger;
their stages resolve in Lead order in later rounds. No interaction rule
needed; confirm.
CB-WP-0026: collect the rulings -- ten answers that arrived and were never applied
ground-game ruled all ten U-items on 2026-08-03, every one CONFIRMED as
the default clay-borg simulates, and confirmed five of six provisional
scenarios. clay-borg never collected the answers: CB-RES-0007 reported "0
of 10 ruled" the same day, and CB-WP-0022 built the finding register two
days later still recording them as `reported`. make design's first run is
what noticed -- not a human, not the adversarial review that found four
other things.
That is the unread-inbox failure running in the opposite direction, and it
appears nowhere in the declaration, survey, ADR or spec of the pass that
was built entirely around the forward version. It is arguably worse: an
unread message is visible as silence, while a collected-but-unapplied
ruling looks exactly like work in progress.
Ten rulings quoted into §Underdetermined (the three conditional ones
verbatim -- U1's designer note, U2's End-only trigger, U8's
consume-only-if-it-cancels). Five provisional flags lifted, replaced by
ruled/ruled_by/ruled_note so the flag went and the provenance stayed.
Register queue 9 -> 0.
T02's control came back clean: make sim is 26 passed, 59 rules covered,
nothing red. Had a scenario gone red it would have meant we described our
own behaviour incorrectly to ground-game.
I wrote two U-item mappings and both were wrong. gr-a04 -> U1 (it asserts
consent is REQUIRED; U1 asks WHEN the target accepts) and gr-d05 -> U5 (it
exercises the UNREJECTED Reverse; U5 is the rejected one). Both plausible
from covers:, neither survived reading the description. Third and fourth
instance of this defect; the first two reached ground-game. So encodes_u_item
is now a declaration and design.py asserts the file names what it claims --
and that check's own first version grepped for mentions and went red when
two files recorded why they do NOT encode U1 and U5. A mention is not a
claim, which is exactly the looseness that let "six of the ten have
provisional scenarios" stand.
Two positive controls went red for the best possible reason, both broken
the same way -- asserting against live repo data instead of constructing
their condition. rule-coverage.py required at least one provisional item
to EXIST; it now builds a fixture and reports the live count as a
diagnostic, because there is no number of provisional items this project
should have. design-baseline.py pinned "2 of 6" while recomputing one row
from a live glob, so the dated snapshot was never a snapshot; frozen to
its 2026-08-03 list and unwired from self-tests, since per ADR-0012 D8 it
is no longer a reporting tool.
ScenarioFile is deny_unknown_fields and refused the four new fields until
declared -- correct: a corpus accepting unknown metadata would let a typo'd
encodes_u_iem sit there claiming nothing.
DEVIATION: ADR-0012 D2 said "no new file". GroundRules.md crossed the
loadability limit, so the register moved to specs/FindingRegister.md. D2's
substance holds -- one register, same machinery, nothing competing -- but
the literal instruction did not, and it resolves an awkwardness D2 named
itself.
make all: exit 0. loop-lint clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 16:13:37 +02:00
**RULED 2026-08-03 — confirm.** Both trigger; later stages resolve in Lead order. No extra interaction rule.
2026-07-31 01:33:54 +02:00
- **U10 Hand limits:** none stated. Default: no hand limit.
CB-WP-0026: collect the rulings -- ten answers that arrived and were never applied
ground-game ruled all ten U-items on 2026-08-03, every one CONFIRMED as
the default clay-borg simulates, and confirmed five of six provisional
scenarios. clay-borg never collected the answers: CB-RES-0007 reported "0
of 10 ruled" the same day, and CB-WP-0022 built the finding register two
days later still recording them as `reported`. make design's first run is
what noticed -- not a human, not the adversarial review that found four
other things.
That is the unread-inbox failure running in the opposite direction, and it
appears nowhere in the declaration, survey, ADR or spec of the pass that
was built entirely around the forward version. It is arguably worse: an
unread message is visible as silence, while a collected-but-unapplied
ruling looks exactly like work in progress.
Ten rulings quoted into §Underdetermined (the three conditional ones
verbatim -- U1's designer note, U2's End-only trigger, U8's
consume-only-if-it-cancels). Five provisional flags lifted, replaced by
ruled/ruled_by/ruled_note so the flag went and the provenance stayed.
Register queue 9 -> 0.
T02's control came back clean: make sim is 26 passed, 59 rules covered,
nothing red. Had a scenario gone red it would have meant we described our
own behaviour incorrectly to ground-game.
I wrote two U-item mappings and both were wrong. gr-a04 -> U1 (it asserts
consent is REQUIRED; U1 asks WHEN the target accepts) and gr-d05 -> U5 (it
exercises the UNREJECTED Reverse; U5 is the rejected one). Both plausible
from covers:, neither survived reading the description. Third and fourth
instance of this defect; the first two reached ground-game. So encodes_u_item
is now a declaration and design.py asserts the file names what it claims --
and that check's own first version grepped for mentions and went red when
two files recorded why they do NOT encode U1 and U5. A mention is not a
claim, which is exactly the looseness that let "six of the ten have
provisional scenarios" stand.
Two positive controls went red for the best possible reason, both broken
the same way -- asserting against live repo data instead of constructing
their condition. rule-coverage.py required at least one provisional item
to EXIST; it now builds a fixture and reports the live count as a
diagnostic, because there is no number of provisional items this project
should have. design-baseline.py pinned "2 of 6" while recomputing one row
from a live glob, so the dated snapshot was never a snapshot; frozen to
its 2026-08-03 list and unwired from self-tests, since per ADR-0012 D8 it
is no longer a reporting tool.
ScenarioFile is deny_unknown_fields and refused the four new fields until
declared -- correct: a corpus accepting unknown metadata would let a typo'd
encodes_u_iem sit there claiming nothing.
DEVIATION: ADR-0012 D2 said "no new file". GroundRules.md crossed the
loadability limit, so the register moved to specs/FindingRegister.md. D2's
substance holds -- one register, same machinery, nothing competing -- but
the literal instruction did not, and it resolves an awkwardness D2 named
itself.
make all: exit 0. loop-lint clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 16:13:37 +02:00
**RULED 2026-08-03 — confirm.** No hand limit in r0. Revisit only if playtest shows bloat.
2026-07-31 01:33:54 +02:00
## Scenario coverage obligation
Every GR-rule above must be covered by ≥1 scenario under
`scenarios/ground/` (M-D1-COV); every U-item's default must be covered by
a scenario tagged `provisional: true` so a ground-game correction flips
the scenario, not the kernel.