clay-borg/editions/modules/problem_deal/pressure_deck/MODULE.md
tegwick 3045eb03f8
Some checks failed
ci / check (push) Has been cancelled
CB-WP-0049 T02/T03: a seat that plays its objective, and F27 splits in two
objective() reads GroundState::score (now public) rather than restating
what winning is; a copy in the bot would disagree with the kernel the
first time ground-game rules on F28.

Working out WHERE the modes can differ was most of the task and it
bounds the result: SOLVE always claims for the actor, so own-score and
group-score want the same SOLVE nearly everywhere. That is a fact about
GROUND's action set, not a shortcoming of the bot. Two real divergences,
both readable off the table: SUPPORT regulates someone else (worth less
against a rival, worth MORE under coalitions where a Bond merges them
into my side), and SOLVE's value is the card's value, which greedy
ignores entirely.

THE RESULT — F27 splits in two:
  group success  UNCHANGED in 34 of 36 cells
  who wins       MOVES: BONDED COALITIONS at 4p goes 2.04 -> 2.98,
                 2.12 -> 3.29, 2.05 -> 3.01 winning seats per game

So "the competitive modes are scoring lenses over cooperative play" was
too strong and is withdrawn. The sharper claim: GROUND's scoring modes
change WHO WINS, not WHETHER THE GROUP SUCCEEDS. And the effect is
seat-band dependent -- 2p none, 4p largest, 6p none under coalitions;
two relation slots capping network growth is a candidate explanation and
is untested.

The panel now prints BOTH policies side by side. That was a correction
mid-task: the first version printed only the new one and I compared it
against a figure remembered from CB-WP-0047 -- a comparison against a
board nobody re-ran.

Control that makes the numbers mean anything: under SHARED GROUND the
two policies agree at all but <=2 decision points across 12 boards, so a
moving column is mode-awareness and not simply a different bot.

Also: two T01 tests keyed on `status: proposed`, which ground-game
renamed to `ready-for-implement` mid-session. They now find the module
by asking resolve() -- the structural property is ours and does not move
when another repo edits its vocabulary.

Also: `make vendor` replaces three hand re-vendors with a tool that
regenerates digests by walking editions/, and reports one-sided files
rather than resolving them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 23:31:11 +02:00

2.9 KiB
Raw Blame History

Module: problem_deal.pressure_deck

aspect problem_deal
module_id problem_deal.pressure_deck
role Small start set + mid-game Pressure deck draws
status ready-for-implement (draft frozen for v0 kernel)
rules_delta rules_delta.yaml
design history/260808-deal-end-sequences-design.md

Independent of end_condition. Recommended compose with problem_stress.scoped so drawn scopes matter. Measure alone first if possible (with default problem_stress.none, influx still adds board clutter).

Frozen v0 rules

DEAL-START

  • Always in play at setup: Surface Problem (priority 0).
  • Also deal face-down: hidden priority 1 (and priority 2 only if seats ≥ 4).
  • All other scenario Problems for that scenario go into the Pressure deck, shuffled with the game seed (deterministic).
  • Seat-band k from r0 does not bulk-deal the rest; influx replaces “deal all k at once.”
seats starters in play rest → pressure deck
23 Surface + H1 H2…
46 Surface + H1 + H2 H3…

DEAL-INFLUX

At Round End (after problem-stress ticks if any, before DARVO arm):

  • If Pressure deck non-empty and unclaimed Problems in play < open_cap, draw 1 card into play.
  • open_cap = number of seats.
  • Placement: face-down if hidden/personal/bond as printed; Surface-like global face-up if scope is global.
  • Stop drawing for that End once one card is drawn (v0: max 1 per round).

DEAL-OWN (if problem_stress.scoped also active)

  • personal: owner = Lead at time of draw (or next free seat clockwise if Lead already owns ≥2 personal — v0 simplify: drawer seat = current Lead).
  • bond: same owner rule; network = Bond network of owner.
  • global: no owner.

If problem_stress.none, owners may still be recorded for table clarity but have no stress effect.

DEAL-POINTS (v0)

  • Cards that entered via Pressure deck draw have point_value 0 for scoring (stress / fiction only).
  • Starters keep printed point_value.
  • Scenario thresholds unchanged (5/7/9) and apply only to starter claims
    • any printed values that were starters.

This avoids reopening GR-E01 arithmetic while testing influx.

Non-goals (v0)

  • Problems in Solution hand.
  • Multiple draws per round.
  • Owner-only SOLVE.
  • Changing thresholds mid-game.

Success criteria (when clay-borg implements)

  1. Games show mid-game influx (deck depletes or open_cap binds).
  2. With scoped stress: variance and DARVO still possible; greedy SHARED 34p wins not collapsed to H1-zero.
  3. Threshold success still well-defined (starter points only).
  4. Composable: works with default end_condition and with hybrid end.