Some checks failed
ci / check (push) Failing after 4s
H2 is ground-game's answer to our H1 reading — that a flat +1 to every seat is a solve-rate tax scaling with the number of Problems. Unclaimed Problems now tick only the seats in scope: global (all), personal (the owner), bond (the owner's Bond network over Bond edges only, degree 0 falling back to personal), assigned by hidden priority so 2p never has the bond card in play. T01: the package is vendored with digests, and H2's Problems.csv is r0's with one column added and NOTHING else changed — checked, not assumed, because the delta claims deal_and_thresholds unchanged and a silent difference would make every H2-vs-baseline comparison a comparison of two boards as well as two rule sets. Scopes are read from the column, not derived from the priority in Rust: F25 exists because we hardcoded numbers the edition already carried. T02: owner and scope are new ProblemState fields, both Option and both skipped when None, so a baseline state serialises without them and every recorded scenario's hash is untouched — asserted on the JSON, not assumed. with_variant() replaces the bare field write, because state.variant = v would leave owners unassigned: a silently wrong game rather than a failing one. T03: every named defect is mutation-proven — traversing Rivalry edges, applying stacking once, a degree-0 owner ticking everyone, personal hitting everyone. The degree-0 mutation MISSED first: the fallback lives inside bond_network and the mutation broke the None-owner arm instead, a different branch. It stayed green until aimed at the path the test exercises. A mutation that misses is not evidence the test works. T04: ownership is not a permission. Filtering SOLVE to the owner turns it red, which is the regression this task exists for — the engine had no owner concept before T02 added one. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
93 lines
2.9 KiB
YAML
93 lines
2.9 KiB
YAML
# Machine-oriented rules deltas for clay-borg / simulators.
|
||
# Human prose: VARIANT.md and history/260808-h2-scoped-problem-stress.md
|
||
# Apply on top of base variant ground-darvo-r0 (not on H1).
|
||
|
||
variant_id: h2-scoped-problem-stress
|
||
base: ground-darvo-r0
|
||
schema_version: 1
|
||
replaces_experiments:
|
||
# H2 is a new package, not a silent edit of H1. Do not stack H1-A/H1-B.
|
||
- h1-problem-stress
|
||
|
||
deltas:
|
||
- id: H2-SCOPE
|
||
name: problem_stress_scope_field
|
||
phase: data
|
||
effect:
|
||
problems_csv_column: stress_scope
|
||
allowed_values: [global, personal, bond]
|
||
edition_assignment_by_hidden_priority:
|
||
0: global # Surface
|
||
1: personal
|
||
2: personal
|
||
3: bond
|
||
4: personal
|
||
notes: >
|
||
Seat-band dial without a difficulty card: 2p deal (S+1..2) has no bond
|
||
card in play; 3–4p introduces one bond; 5–6p still one bond + more personal.
|
||
|
||
- id: H2-OWN
|
||
name: assign_owners_at_setup
|
||
phase: setup_after_deal
|
||
when:
|
||
problem_stress_scope_in: [personal, bond]
|
||
effect:
|
||
assign_owner:
|
||
order: ascending_hidden_priority_among_in_play_non_global
|
||
start: lead
|
||
step: clockwise_next_seat
|
||
# Each such Problem gets exactly one owner seat.
|
||
notes: >
|
||
Deterministic for sims. Table: place owner marker on the card.
|
||
Global Problems have owner = none.
|
||
|
||
- id: H2-A
|
||
name: scoped_problem_pressure_end_of_round
|
||
phase: round_end
|
||
# Order:
|
||
# 1) for each unclaimed Problem in play, +1 Stress to each seat in scope
|
||
# 2) clamp 0–5
|
||
# 3) arm DARVO at 5 as baseline
|
||
# 4) rotate Lead; advance Round
|
||
when:
|
||
problem_unclaimed: true
|
||
effect:
|
||
stress_delta_per_matching_problem: +1
|
||
recipients: stress_scope_of_that_problem
|
||
scope_resolution:
|
||
global: all_seats
|
||
personal: [owner]
|
||
bond: bond_network_of_owner
|
||
bond_network: >
|
||
owner plus every seat reachable from owner by traversing Bond
|
||
edges only (not Rivalry). If owner has degree 0, treat as personal.
|
||
stacking: true # two open bond problems both hit the network
|
||
notes: >
|
||
Bond incentive: every bonded partner shares the tick, so the network
|
||
is jointly motivated to SOLVE that card (anyone may still SOLVE).
|
||
|
||
- id: H2-SOLVE
|
||
name: claim_not_restricted_by_scope
|
||
phase: resolve_solve
|
||
effect:
|
||
any_seat_with_matching_suit_may_solve: true
|
||
owner_need_not_be_solver: true
|
||
notes: >
|
||
Altruistic clear is legal and intended — especially on bond-scope cards.
|
||
|
||
unchanged:
|
||
- deal_and_thresholds
|
||
- solve_legality_suit_faceup_unclaimed_race
|
||
- support
|
||
- ground_modes
|
||
- darvo_stage_table
|
||
- attack_resolution # no H1-B self-soothe in H2
|
||
- start_stress: 2
|
||
- relation_slots: 2
|
||
|
||
not_in_this_variant:
|
||
- H1-A_flat_global_plus_one
|
||
- H1-B_attack_self_soothe
|
||
- owner_only_solve
|
||
- shadow_goals
|
||
- competence_track
|