T08 iter 3: GROUND modes, INVESTIGATE, SOLVE
Fills in resolution steps 1, 4 and 6 (GR-R06): - GR-R05 mode choice: a player who revealed GROUND picks GR/OU/ND after Reveal. Resolution refuses to start while any revealed GROUND lacks a mode, and only that player may choose it. - GR-A10 GROUND-GR: self -2 Stress and Freedom readied. - GR-A01 INVESTIGATE: reveal the chosen hidden non-Denied Problem, then draw one Solution; the draw still happens when nothing is revealable. - GR-A02 SOLVE: spend a Solution of the Problem's suit and claim it; a later resolver the same round spends nothing, per Lead order. - GR-A13 tightened: INVESTIGATE must target a hidden Problem, SOLVE a face-up non-Denied one. Previously any existing Problem was accepted. Deck exhaustion (U4) reshuffles the discard, seeded from the game seed and round so validate stays a pure function of state. The resulting order travels inside DeckReshuffled, so replay never re-derives it. Still pending, each because it needs its own decision command rather than a default: GROUND-OU and GROUND-ND three-way choices (GR-A11/A12) and the DARVO stage machine (GR-D02..D07). No scenario claims coverage of them. Filler picks in existing scenarios moved from GROUND to INVESTIGATE: GROUND now has a real Stress effect, which was polluting the Support and Attack assertions. 11 scenarios pass, 34 rules covered; 17 tests, fmt/clippy green. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
b58a9139aa
commit
27b7fe4329
10 changed files with 417 additions and 13 deletions
43
scenarios/ground/gr-a01-investigate.yaml
Normal file
43
scenarios/ground/gr-a01-investigate.yaml
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
scenario: ground/gr-a01-investigate
|
||||
description: >
|
||||
INVESTIGATE reveals the chosen hidden Problem and draws one Solution
|
||||
(GR-A01). Selecting an already face-up Problem is rejected (GR-A13).
|
||||
covers: [GR-A01, GR-S01]
|
||||
provisional: false
|
||||
seed: 42
|
||||
setup:
|
||||
players: 3
|
||||
preset: standard-3p
|
||||
patch:
|
||||
"lead": 0
|
||||
commands:
|
||||
- actor: P1
|
||||
cmd: select_action
|
||||
args: { action: INVESTIGATE, problem: 2 }
|
||||
# GR-A13: Problem 1 is the Surface Problem, already face up.
|
||||
- actor: P2
|
||||
cmd: select_action
|
||||
args: { action: INVESTIGATE, problem: 1 }
|
||||
- actor: P2
|
||||
cmd: select_action
|
||||
args: { action: INVESTIGATE, problem: 3 }
|
||||
- actor: P3
|
||||
cmd: select_action
|
||||
args: { action: INVESTIGATE, problem: 3 }
|
||||
- actor: SYSTEM
|
||||
cmd: reveal
|
||||
- actor: SYSTEM
|
||||
cmd: resolve
|
||||
expect:
|
||||
events:
|
||||
- kind: ProblemRevealed
|
||||
problem: 2
|
||||
- kind: SolutionDrawn
|
||||
player: 0
|
||||
state:
|
||||
"problems.2.face_up": true
|
||||
"problems.3.face_up": true
|
||||
# GR-S02 dealt two; INVESTIGATE drew a third. The suit is the
|
||||
# golden value for seed 42 under the GR-S04 shuffle.
|
||||
"players.0.hand.2.suit": Change
|
||||
rejects: [1]
|
||||
43
scenarios/ground/gr-a02-solve.yaml
Normal file
43
scenarios/ground/gr-a02-solve.yaml
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
scenario: ground/gr-a02-solve
|
||||
description: >
|
||||
SOLVE discards a Solution of the Problem's suit and claims it
|
||||
(GR-A02). A second solver of the same Problem the same round spends
|
||||
nothing, because an earlier resolver in Lead order already claimed it.
|
||||
covers: [GR-A02, GR-R07, GR-O04]
|
||||
provisional: false
|
||||
seed: 42
|
||||
setup:
|
||||
players: 3
|
||||
preset: standard-3p
|
||||
patch:
|
||||
"lead": 0
|
||||
"players.0.hand": [{ suit: Clarify }]
|
||||
"players.1.hand": [{ suit: Clarify }]
|
||||
commands:
|
||||
- actor: P1
|
||||
cmd: select_action
|
||||
args: { action: SOLVE, problem: 1 }
|
||||
- actor: P2
|
||||
cmd: select_action
|
||||
args: { action: SOLVE, problem: 1 }
|
||||
- actor: P3
|
||||
cmd: select_action
|
||||
args: { action: INVESTIGATE, problem: 3 }
|
||||
- actor: SYSTEM
|
||||
cmd: reveal
|
||||
- actor: SYSTEM
|
||||
cmd: resolve
|
||||
expect:
|
||||
events:
|
||||
- kind: SolutionDiscarded
|
||||
player: 0
|
||||
- kind: ProblemClaimed
|
||||
problem: 1
|
||||
by: 0
|
||||
state:
|
||||
# Problem 1 is the Clarify Surface Problem (GR-S01).
|
||||
"problems.1.claimed_by": 0
|
||||
"players.0.hand": []
|
||||
# GR-A02: P2 resolved second, so its Solution is not spent.
|
||||
"players.1.hand": [{ suit: Clarify }]
|
||||
rejects: []
|
||||
|
|
@ -24,7 +24,7 @@ commands:
|
|||
args: { action: SUPPORT, target: P3 }
|
||||
- actor: P3
|
||||
cmd: select_action
|
||||
args: { action: GROUND }
|
||||
args: { action: INVESTIGATE, problem: 3 }
|
||||
- actor: SYSTEM
|
||||
cmd: reveal
|
||||
- actor: SYSTEM
|
||||
|
|
|
|||
|
|
@ -17,10 +17,10 @@ commands:
|
|||
args: { action: ATTACK, target: P2 }
|
||||
- actor: P2
|
||||
cmd: select_action
|
||||
args: { action: GROUND }
|
||||
args: { action: INVESTIGATE, problem: 3 }
|
||||
- actor: P3
|
||||
cmd: select_action
|
||||
args: { action: GROUND }
|
||||
args: { action: INVESTIGATE, problem: 3 }
|
||||
- actor: SYSTEM
|
||||
cmd: reveal
|
||||
- actor: SYSTEM
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ commands:
|
|||
args: { action: ATTACK, target: P3 }
|
||||
- actor: P3
|
||||
cmd: select_action
|
||||
args: { action: GROUND }
|
||||
args: { action: INVESTIGATE, problem: 3 }
|
||||
- actor: SYSTEM
|
||||
cmd: reveal
|
||||
- actor: SYSTEM
|
||||
|
|
|
|||
55
scenarios/ground/gr-a10-ground-gr.yaml
Normal file
55
scenarios/ground/gr-a10-ground-gr.yaml
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
scenario: ground/gr-a10-ground-gr
|
||||
description: >
|
||||
GROUND—GR (Ground & Restate): the mode is chosen after Reveal
|
||||
(GR-R05), and on resolution the player takes −2 Stress and readies
|
||||
their Freedom token (GR-A10, GR-F04). Resolution refuses to start
|
||||
while any revealed GROUND still lacks a mode.
|
||||
covers: [GR-R05, GR-A10]
|
||||
provisional: false
|
||||
seed: 42
|
||||
setup:
|
||||
players: 3
|
||||
preset: standard-3p
|
||||
patch:
|
||||
"lead": 0
|
||||
"players.0.stress": 5
|
||||
"players.0.freedom_ready": false
|
||||
commands:
|
||||
- actor: P1
|
||||
cmd: select_action
|
||||
args: { action: GROUND }
|
||||
- actor: P2
|
||||
cmd: select_action
|
||||
args: { action: INVESTIGATE, problem: 3 }
|
||||
- actor: P3
|
||||
cmd: select_action
|
||||
args: { action: INVESTIGATE, problem: 3 }
|
||||
- actor: SYSTEM
|
||||
cmd: reveal
|
||||
# GR-R05: no mode chosen yet, so resolution is refused.
|
||||
- actor: SYSTEM
|
||||
cmd: resolve
|
||||
# GR-R05: only a player who revealed GROUND may choose a mode.
|
||||
- actor: P2
|
||||
cmd: choose_ground_mode
|
||||
args: { mode: GR }
|
||||
- actor: P1
|
||||
cmd: choose_ground_mode
|
||||
args: { mode: GR }
|
||||
- actor: SYSTEM
|
||||
cmd: resolve
|
||||
expect:
|
||||
events:
|
||||
- kind: GroundModeChosen
|
||||
player: 0
|
||||
mode: Gr
|
||||
- kind: StressSet
|
||||
player: 0
|
||||
stress: 3
|
||||
- kind: FreedomReadied
|
||||
player: 0
|
||||
state:
|
||||
"players.0.stress": 3
|
||||
"players.0.freedom_ready": true
|
||||
"step": Resolve
|
||||
rejects: [4, 5]
|
||||
|
|
@ -18,10 +18,10 @@ commands:
|
|||
args: { action: ATTACK, target: P2 }
|
||||
- actor: P2
|
||||
cmd: select_action
|
||||
args: { action: GROUND }
|
||||
args: { action: ATTACK, target: P3 }
|
||||
- actor: P3
|
||||
cmd: select_action
|
||||
args: { action: GROUND }
|
||||
args: { action: INVESTIGATE, problem: 3 }
|
||||
- actor: SYSTEM
|
||||
cmd: reveal
|
||||
- actor: SYSTEM
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ commands:
|
|||
# GR-R02: one selection per player per round.
|
||||
- actor: P1
|
||||
cmd: select_action
|
||||
args: { action: GROUND }
|
||||
args: { action: INVESTIGATE, problem: 3 }
|
||||
expect:
|
||||
events:
|
||||
- kind: ActionSelected
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ commands:
|
|||
args: { action: SUPPORT, target: P3 }
|
||||
- actor: P3
|
||||
cmd: select_action
|
||||
args: { action: GROUND }
|
||||
args: { action: INVESTIGATE, problem: 3 }
|
||||
- actor: SYSTEM
|
||||
cmd: reveal
|
||||
- actor: SYSTEM
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue