clay-borg/editions/experiments/h2-scoped-problem-stress/rules_delta.yaml

94 lines
2.9 KiB
YAML
Raw Normal View History

CB-WP-0042 T01-T04: H2's scoped stress, with the named defects caught 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>
2026-08-08 16:06:21 +02:00
# 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; 34p introduces one bond; 56p 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 05
# 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