CB-WP-0008-T03: prove the 2-6 player range

GR-O01 states 2-6 players; every scenario in the corpus was 3-player.
Now all five counts play to GameEnded under both policies and reproduce
at the same seed, with scenarios at both boundaries and the CLI
transcript run at 2p, 3p and 6p.

Nothing broke — the rules are seat-count-generic. What the boundaries
exposed is arithmetic: with the standard preset's placeholder Problem
values (value = priority), the best total any game can reach is 3 at 2p,
6 at 3-4p, 10 at 5-6p, against GR-E01 thresholds of 5, 7 and 9. Group
success is unreachable below five seats regardless of play, and no
scenario noticed because none had played to scoring with everything
claimed.

GR-S01 calls the fixture a stand-in for scenario Problem data, so this
is evidence the stand-in is not neutral, not that GR-E01 is wrong. It is
pinned by a passing scenario, an arithmetic test, and a provisional
marker owned by ground-game so it ages in `make coverage`. The test
states its own delete-by: it is expected to fail when Problem values
become real data, and that failure is the signal to delete it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
tegwick 2026-08-01 15:20:04 +02:00
parent 25531e9d01
commit d97e8e825d
7 changed files with 289 additions and 28 deletions

View file

@ -0,0 +1,53 @@
scenario: ground/gr-e01-threshold-unreachable-2p
description: >
GR-E01's threshold against the standard preset's Problem values, at the
2-player boundary. Both Problems are claimed — the best case available
— and the total is 3 against a threshold of 5. With the placeholder
fixture (value = priority) group success is unreachable at 2, 3 and 4
players; only 56p can reach its 9. Recorded here so the gap has a
failing-in-fact scenario rather than a paragraph, and marked provisional
because the fixture is explicitly a stand-in for scenario Problem data.
covers: [GR-E01, GR-E02, GR-O01]
provisional: true
provisional_owner: ground-game
provisional_raised: 2026-08-01
seed: 42
setup:
players: 2
preset: standard-2p
patch:
"round": 5
"mode": SharedGround
"problems.1.claimed_by": 0
"problems.2.claimed_by": 1
"problems.2.face_up": true
commands:
- actor: P1
cmd: select_action
args: { action: GROUND }
- actor: P2
cmd: select_action
args: { action: GROUND }
- actor: SYSTEM
cmd: reveal
- actor: P1
cmd: choose_ground_mode
args: { mode: GR }
- actor: P2
cmd: choose_ground_mode
args: { mode: GR }
- actor: SYSTEM
cmd: resolve
- actor: SYSTEM
cmd: end_round
expect:
events:
- kind: GameEnded
state:
# 1 + 2 = 3, the maximum any 2-player game of this preset can score.
"outcome.total": 3
"outcome.threshold": 5
"outcome.group_success": false
"round": 5
"step": End
rejects: []

View file

@ -0,0 +1,51 @@
scenario: ground/gr-o01-six-player
description: >
GR-O01's upper boundary, the counterpart to gr-o01-two-player. Six
seats exercise the 56p Problem set (GR-S01, four priorities) and the
longest resolution order (GR-R07, Lead first then clockwise with a
wrap).
covers: [GR-O01, GR-S01, GR-R07]
seed: 42
setup:
players: 6
preset: standard-6p
commands:
- actor: P1
cmd: select_action
args: { action: INVESTIGATE, problem: 2 }
- actor: P2
cmd: select_action
args: { action: INVESTIGATE, problem: 3 }
- actor: P3
cmd: select_action
args: { action: INVESTIGATE, problem: 4 }
- actor: P4
cmd: select_action
args: { action: SUPPORT, target: P5 }
- actor: P5
cmd: select_action
args: { action: GROUND }
- actor: P6
cmd: select_action
args: { action: ATTACK, target: P1 }
- actor: SYSTEM
cmd: reveal
- actor: P5
cmd: choose_ground_mode
args: { mode: GR }
- actor: P5
cmd: respond_to_support
args: { response: accept_bond }
- actor: SYSTEM
cmd: resolve
- actor: SYSTEM
cmd: end_round
expect:
events:
- kind: ProblemRevealed
- kind: RoundEnded
state:
# GR-S01: four Problems at six players.
"problems.4.face_up": true
"round": 2
rejects: []

View file

@ -0,0 +1,40 @@
scenario: ground/gr-o01-two-player
description: >
GR-O01's lower boundary. Every scenario in this corpus before
CB-WP-0008 T03 was 3-player, so a rule stated for a range (26) was
tested at one point. A full round at two seats: setup deals the 2p
Problem set (GR-S01), both seats select, and resolution runs with the
smallest possible seat order.
covers: [GR-O01, GR-S01, GR-R01, GR-R07]
seed: 42
setup:
players: 2
preset: standard-2p
commands:
- actor: P1
cmd: select_action
args: { action: INVESTIGATE, problem: 2 }
- actor: P2
cmd: select_action
args: { action: SUPPORT, target: P1 }
- actor: SYSTEM
cmd: reveal
- actor: P1
cmd: respond_to_support
args: { response: accept_bond }
- actor: SYSTEM
cmd: resolve
- actor: SYSTEM
cmd: end_round
expect:
events:
# GR-R06 order: Support (step 2) resolves before INVESTIGATE (step 4).
- kind: RelationFormed
- kind: ProblemRevealed
- kind: RoundEnded
state:
# GR-S01: two Problems at two players, not three.
"problems.2.face_up": true
"round": 2
"step": Select
rejects: []