T08 iter 5: the DARVO sequence machine

Resolution step 3 (GR-R06), the last unimplemented step:

- GR-D02 binding: one stage per consecutive round, DENY then ATTACK
  then REVERSE, regardless of the player's later Stress.
- GR-D03 DENY: turn one face-up, unsolved, unprotected Problem face
  down and Deny it. Under the U3 default no legal target is a no-op and
  the sequence still advances.
- GR-D04 ATTACK: one extra Attack under the normal relation rules, then
  place the Focus token beside the target even if it was cancelled.
- GR-D05 REVERSE: flip Focus to Blame, +1 Stress to the holder, one
  Protection to the owner, unless the holder's GROUND-ND rejects it.
  Under the U5 default the owner takes -2 either way and the sequence
  ends.
- GR-D06 early end: a Support through a Bond that predates this round's
  Support step cancels the stage and ends the sequence, and the placed
  Focus token is removed. GROUND-GR ends it after the stage resolves.
- GR-D07: the marker returns to OFF, so a later End can re-trigger.

The Attack rules are now one routine shared by the chosen ATTACK Action
and the DARVO extra Attack, so GR-A06..A09 cannot drift between them.

Stage targets are named by their own command during Reveal, validated
against what the stage admits: DENY needs an eligible Problem, ATTACK
another player, and only a player with a live sequence may choose.

18 scenarios pass; AM-1 coverage 47/58 (81%), up from 41/58.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
tegwick 2026-07-31 02:30:58 +02:00
parent 290ad06c31
commit 0e92535f11
5 changed files with 513 additions and 61 deletions

View file

@ -0,0 +1,54 @@
scenario: ground/gr-d05-darvo-reverse
description: >
The REVERSE stage flips Focus to Blame in front of the Focus holder,
gives them +1 Stress and the owner one Protection token, then the
owner takes −2 Stress and the sequence ends (GR-D05, GR-D07).
covers: [GR-D05, GR-D07, GR-T01]
provisional: true
seed: 42
setup:
players: 3
preset: standard-3p
patch:
"lead": 0
"players.0.darvo": Reverse
"players.0.stress": 3
"focus.0": 1
commands:
- actor: P1
cmd: select_action
args: { action: INVESTIGATE, problem: 3 }
- 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: FocusFlippedToBlame
owner: 0
target: 1
- kind: StressSet
player: 1
stress: 3
- kind: ProtectionGained
player: 0
- kind: StressSet
player: 0
stress: 1
- kind: DarvoEnded
player: 0
state:
"players.1.blame_from": [0]
"players.1.stress": 3
"players.0.protection": 1
"players.0.stress": 1
# GR-D07: the marker is OFF, so a new sequence can trigger later.
"players.0.darvo": Off
"focus": {}
rejects: []