Some checks failed
ci / check (push) Failing after 4s
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>
48 lines
1.5 KiB
YAML
48 lines
1.5 KiB
YAML
scenario: ground/gr-p05-solve-legality
|
|
description: >
|
|
GR-P05, ruled by ground-game 2026-08-03: SOLVE is legal only where it
|
|
can do something. P1 holds no Clarify and is refused Problem 1; P2
|
|
holds one, is admitted, and claims it.
|
|
|
|
The prior-round-claim half of GR-P05 is asserted in
|
|
`bot::tests::validate_enforces_all_four_solve_conditions` rather than
|
|
here, because reaching a second round costs a dozen commands to test
|
|
one rejection.
|
|
|
|
The rule is asserted here rather than only in `legal_commands`, because
|
|
a rule enforced by the offer alone constrains only clients that ask what
|
|
is legal — a scenario file would walk straight past it. That is what the
|
|
AM-1 coverage gate surfaced when GR-P05 was added with no scenario.
|
|
covers: [GR-P05, GR-A02, GR-P03]
|
|
provisional: false
|
|
seed: 42
|
|
setup:
|
|
players: 3
|
|
preset: standard-3p
|
|
patch:
|
|
"lead": 1
|
|
"players.0.hand": [{ suit: Change }]
|
|
"players.1.hand": [{ suit: Clarify }]
|
|
commands:
|
|
# 0 — P1 holds no Clarify: refused.
|
|
- actor: P1
|
|
cmd: select_action
|
|
args: { action: SOLVE, problem: 1 }
|
|
# 1 — P2 holds one: admitted.
|
|
- actor: P2
|
|
cmd: select_action
|
|
args: { action: SOLVE, problem: 1 }
|
|
- actor: P1
|
|
cmd: select_action
|
|
args: { action: INVESTIGATE, problem: 2 }
|
|
- actor: P3
|
|
cmd: select_action
|
|
args: { action: INVESTIGATE, problem: 3 }
|
|
- actor: SYSTEM
|
|
cmd: reveal
|
|
- actor: SYSTEM
|
|
cmd: resolve
|
|
expect:
|
|
rejects: [0]
|
|
state:
|
|
"problems.1.claimed_by": 1
|