From 88917119d3c230b5e9cad8fa88e74dd3ac04df0a Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Tue, 28 Jul 2026 01:12:54 -0500 Subject: [PATCH 01/62] feat(engine): pin per-iteration decision slots for bounded-loop shortcut MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A bounded cycle can only be fast-forwarded when every player choice it repeats is forced. Publish the pinned slots for the one class where that provably holds — a "target opponent" triggered ability — and let the loop-window scope discharge exactly those, and only those. The published legal set is MOVED from the announcement authority (`build_target_slots`, CR 601.2c: the ability's controller announces), never re-derived from the head effect's target filter. Re-deriving it published [Player(1), Player(2)] where the builder said [Player(0), Player(1), Player(2)] on a chained "target player" sub-ability — measured, not hypothetical. The head filter is now a shape gate only, enforced by a `bool` return rather than by comment, so re-deriving it is unrepresentable. The relief returns a residual verdict instead of a blanket `continue`, so it discharges only what the pin specifies and re-arms the life guard; and the re-check delegates to the same authority that minted the value, so the two cannot drift. CR 601.2c / CR 603.3d / CR 115.2 (each grepped in docs/MagicCompRules.txt) Tests: 22036 passed / 0 failed / 15 ignored (`cargo test -p engine`; the 15 is 8 #[ignore] + 7 doc-test fences. `cargo nextest run -p engine` reports 22036 passed / 8 skipped — it does not run doc-tests, so cite the runner). clippy --workspace --all-targets -D warnings: clean. Assisted-by: ClaudeCode:claude-opus-4.8 --- .../engine/src/analysis/decision_template.rs | 123 ++- crates/engine/src/analysis/resource.rs | 957 +++++++++++++++++- crates/engine/src/game/engine.rs | 896 +++++++++++++++- .../engine/tests/integration/loop_shortcut.rs | 143 +++ 4 files changed, 2059 insertions(+), 60 deletions(-) diff --git a/crates/engine/src/analysis/decision_template.rs b/crates/engine/src/analysis/decision_template.rs index f8546e9211..c4db106b43 100644 --- a/crates/engine/src/analysis/decision_template.rs +++ b/crates/engine/src/analysis/decision_template.rs @@ -308,6 +308,10 @@ pub enum DecisionPointKind { #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] pub enum TargetPin { ByIdentity(DecisionSource), + /// A CONSTANT target (CR 732.2a): this pin answers EVERY firing of its source within + /// the period with the declared player. A seat is state-independent by construction — + /// it can never denote "the newest copy" — so no iteration can turn the pin into the + /// conditional action CR 732.2a forbids. Player(PlayerId), Scheduled(TargetSchedule), } @@ -411,15 +415,17 @@ pub enum ConcreteTarget { /// `Static` or `Scheduled`. #[derive(Debug, Clone, PartialEq, Eq)] pub enum ReplayFailure { - /// CR 608.2b: a TARGET pin (`Targets`'s `ByIdentity`, or a `Scheduled` schedule) no - /// longer resolves to a legal live object (left its zone / ceased to exist). Raised - /// whenever a *target* is illegal-or-absent, in ANY `ReplayMode` — a `Static`-mode - /// `Targets` pin with a removed target yields THIS, not `MissingSource`. ⇒ abort the - /// auto-shortcut, hand back to manual. - IllegalTarget { - slot: DecisionSlot, - source: DecisionSource, - }, + /// CR 608.2b: a TARGET pin no longer resolves to a legal live target (left its zone / + /// ceased to exist / CR 800.4a left the game). Raised whenever a *target* is + /// illegal-or-absent, in ANY `ReplayMode` — a `Static`-mode `Targets` pin with a + /// removed target yields THIS, not `MissingSource`. ⇒ abort the auto-shortcut, hand + /// back to manual. + /// + /// Carries the [`TargetPin`] itself rather than a `DecisionSource`: `Player` and + /// `Scheduled` pins are equally capable of going illegal, and a `DecisionSource` can + /// name neither. Parameterizing the existing variant keeps ONE "target went illegal" + /// failure instead of growing a per-pin-kind sibling cluster. + IllegalTarget { slot: DecisionSlot, pin: TargetPin }, /// CR 400.7: an ORDER pin's source (`Order`) is absent from the current battlefield /// ⇒ the ordering template no longer matches ⇒ fall through to a normal manual /// prompt. Raised ONLY for the `Order` pin kind, in any `ReplayMode`. @@ -538,22 +544,49 @@ fn resolve_pin( } } -/// Resolve one target pin. CR 608.2b: a by-identity or scheduled target must still be a -/// legal live object; an absent one is `IllegalTarget`. +/// Resolve one target pin. CR 608.2b: a by-identity, player, or scheduled target must +/// still be a legal live target; an absent or departed one is `IllegalTarget`. fn resolve_target( pin: &TargetPin, slot: &DecisionSlot, iteration: IterationIndex, state: &GameState, ) -> Result { + let illegal = || ReplayFailure::IllegalTarget { + slot: slot.clone(), + pin: pin.clone(), + }; match pin { TargetPin::ByIdentity(source) => resolve_source(source, state) .map(ConcreteTarget::Object) - .ok_or_else(|| ReplayFailure::IllegalTarget { - slot: slot.clone(), - source: source.clone(), - }), - TargetPin::Player(p) => Ok(ConcreteTarget::Player(*p)), + .ok_or_else(illegal), + // CR 800.4a: eliminated players are not legal targets. A pin declared against a seat + // that has since left the game must fail the CR 608.2b per-iteration re-check rather + // than silently resolving to a departed player. `game::players::is_alive` is the + // shipped "in the game and not eliminated" authority, and it mirrors exactly ONE of + // the exclusions `game::targeting::find_legal_targets` applies when it enumerates + // the offer's legal set: `targeting.rs:200-201`. + // + // NOT PARITY, and deliberately so. That authority's player branch + // (`targeting.rs:196-213`) excludes on THREE grounds; this conjunct covers one: + // * `player.is_eliminated` (CR 800.4a) — covered here + // * `player.is_phased_out()` — NOT checked here. The CR defines phasing + // for PERMANENTS only (CR 702.26a-p); the engine's player-level flag is a + // mirror of CR 702.26b's "treated as though it does not exist", not a citation. + // * `player_cannot_be_targeted_by(..)` (CR 702.11c / CR 702.18a / CR 702.16b, + // player-scope hexproof / shroud / protection) — NOT checked here + // Widening this to a shared predicate factored out of `targeting.rs:196-213` is the + // recorded OWED ITEM 1 in `.combofb-pr-followups.md` ("Phase 5a — `TargetPin::Player`'s + // CR 608.2b re-check covers elimination only"), assigned to the FIRST commit of the + // phase that builds the drive: this phase mints `TargetPin::Player` only behind + // `#[cfg(any(test, feature = "test-support"))]`, so no shipped path reaches the gap. + // Measured there: a phased-out declared target survives THIS check and is killed + // downstream by `apply_action`'s spec-aware CR 608.2b re-validation, so the gap is a + // drift/attribution defect rather than a silent wrong answer — conditional on every + // pin consumer routing through `apply_action`. + TargetPin::Player(p) => crate::game::players::is_alive(state, *p) + .then_some(ConcreteTarget::Player(*p)) + .ok_or_else(illegal), TargetPin::Scheduled(sched) => evaluate_schedule(sched, slot, iteration, state), } } @@ -621,7 +654,7 @@ fn evaluate_schedule( .map(ConcreteTarget::Object) .ok_or_else(|| ReplayFailure::IllegalTarget { slot: slot.clone(), - source: source.clone(), + pin: TargetPin::Scheduled(sched.clone()), }) } @@ -1219,6 +1252,62 @@ mod tests { assert!(resolve(&template, 0, &present).is_ok()); } + /// CR 800.4a + CR 608.2b: a `TargetPin::Player` aimed at a seat that has LEFT THE GAME + /// is not a legal target, so the per-iteration re-check must raise + /// `IllegalTarget{pin}` — mirroring `game::targeting::find_legal_targets`'s own + /// exclusion (`crates/engine/src/game/targeting.rs:200-201`). This row is the sole + /// owner of `IllegalTarget{pin}` for the `Player` kind, and it is reachable by + /// construction. + /// + /// MATCHED PAIR, one variable (`is_eliminated`): the LIVE half resolves, the DEAD half + /// fails. REVERT-PROBE: drop the `!is_eliminated` conjunct in `resolve_target`'s + /// `TargetPin::Player` arm ⇒ the dead half resolves ⇒ FAILS. + #[test] + fn a_dead_player_pin_is_illegal() { + let pin_slot = DecisionSlot { + source: this_obj(70, Some(0)), + index: 0, + }; + let template = |victim: u8| DecisionTemplate { + owner: PlayerId(0), + decisions: vec![PinnedDecision::Targets { + slot: pin_slot.clone(), + targets: vec![TargetPin::Player(PlayerId(victim))], + }], + replay: ReplayMode::Scheduled { + count: IterationCount::Fixed(1), + }, + key: tri_key(), + }; + + // LIVE half — the positive reach-guard: nothing upstream of the liveness check + // rejects this pin, so the dead half's failure is attributable to liveness alone. + let live = GameState::new_two_player(7); + assert!(!live.players[1].is_eliminated, "fixture: P1 starts alive"); + assert_eq!( + resolve(&template(1), 0, &live).unwrap(), + vec![ConcreteDecision::Targets { + slot: pin_slot.clone(), + targets: vec![ConcreteTarget::Player(PlayerId(1))], + }], + "a live player pin resolves unchanged" + ); + + // DEAD half — the identical board with exactly one field flipped. + let mut dead = live.clone(); + dead.players[1].is_eliminated = true; + let err = resolve(&template(1), 0, &dead).unwrap_err(); + assert_eq!( + err, + ReplayFailure::IllegalTarget { + slot: pin_slot, + pin: TargetPin::Player(PlayerId(1)), + }, + "CR 800.4a: a departed seat is not a legal target — and the failure NAMES the \ + pin, which a `source: DecisionSource` payload could not express" + ); + } + /// T5b (G2 sibling): the SAME `Static` mode with an `Order` pin (different pin kind) /// whose source is removed yields `MissingSource` (CR 400.7), NOT `IllegalTarget`. /// Together T5+T5b prove failure selection is per pin kind, not per mode. diff --git a/crates/engine/src/analysis/resource.rs b/crates/engine/src/analysis/resource.rs index 0618f6a823..08dadc7567 100644 --- a/crates/engine/src/analysis/resource.rs +++ b/crates/engine/src/analysis/resource.rs @@ -977,10 +977,10 @@ pub fn board_delta(before: &GameState, after: &GameState) -> BoardDelta { /// /// The `_scoped` predicates below stay identity for [`LoopWindowScope::unproven`] /// (asserted by `scoped_wrappers_are_identity`) because every guard that reads a field -/// sits inside an `if let Some(..)` / `is_some_and`. `phase_invariant` and `sole_driver` -/// ARE now read — by the growing-class firewall's CR 510.2 / CR 506.1 and CR 117.1b -/// guards — and `cast_card_ids` by the projected firewall's CR 601.2f cost guard, so the -/// scope is no longer write-only; `pinned_slots` is the remaining unread field. +/// sits inside an `if let Some(..)` / `is_some_and`. EVERY field is now read: +/// `phase_invariant` and `sole_driver` by the growing-class firewall's CR 510.2 / CR 506.1 +/// and CR 117.1b guards, `cast_card_ids` by the projected firewall's CR 601.2f cost guard, +/// and `pinned` by [`loop_states_cover_modulo_growth_scoped`]'s CR 732.2a gates (3) and (6). #[derive(Debug, Clone, Copy)] pub(crate) struct LoopWindowScope<'a> { /// `Some(phase)` iff the caller proved both frames are equal on turn number AND @@ -993,17 +993,34 @@ pub(crate) struct LoopWindowScope<'a> { /// activate an ability only with priority; CR 732.2c: the shortcut advances to /// the proposed ending point once every player has accepted). sole_driver: Option, - /// CR 732.2a: the per-iteration choice slots the OFFER publishes, which - /// `decision_template::predictability_gate` then FORCES the declaration to pin. - /// A slot listed here is a *specified* choice in CR 732.2a's sense, not a free one. - #[allow(dead_code)] // write-only until the phase that consumes pinned slots. - pinned_slots: &'a [DecisionSlot], + /// `Some(pins)` iff the caller proved an OFFER published exactly these per-iteration + /// choice slots. READ by [`loop_states_cover_modulo_growth_scoped`]'s gates (3)/(6). + pinned: Option>, /// CR 601.2f (cost determination reads static cost modifiers): `Some(ids)` iff the /// caller proved the EXACT set of card ids this window casts — `Some(&[])` for a /// window that provably casts nothing. `None` means NO PROOF, i.e. scan everything. cast_card_ids: Option<&'a [CardId]>, } +/// CR 732.2a: the per-iteration choice slots ONE offer published, carried together with the +/// seat whose offer minted them. +/// +/// The proposer travels WITH the slots because the relief side re-runs the MINT's own +/// per-entry acceptance test (`game::engine::entry_publishes_pin_slots`), whose first +/// conjunct is `entry.controller == proposer` — the EXTENSION POINT's precondition (c), +/// "only the acting player's own choices are pinnable". A bare slot list cannot express +/// that conjunct, and a SECOND scope field could disagree with the first; one field +/// carrying both makes the pair unable to drift. +#[derive(Debug, Clone, Copy)] +pub(crate) struct PinnedChoices<'a> { + /// The offer's proposer. Every slot in `slots` was minted for this seat. + pub(crate) proposer: PlayerId, + /// The published slots, which `decision_template::predictability_gate` then FORCES the + /// declaration to pin. A slot listed here is a *specified* choice in CR 732.2a's sense, + /// not a free one. + pub(crate) slots: &'a [DecisionSlot], +} + impl LoopWindowScope<'static> { /// The zero-proof scope. Every 2-arg wrapper passes this, which is what makes the /// wrappers structurally identity rather than conditionally so. @@ -1011,7 +1028,7 @@ impl LoopWindowScope<'static> { Self { phase_invariant: None, sole_driver: None, - pinned_slots: &[], + pinned: None, cast_card_ids: None, } } @@ -1043,7 +1060,7 @@ impl LoopWindowScope<'static> { fn window_scope_from_cover_frames<'a>( pa: &GameState, pb: &GameState, - pinned_slots: &'a [DecisionSlot], + pinned: Option>, ) -> LoopWindowScope<'a> { // (p1) same turn, (p2) same step-granular phase, (p3) no pending extra phase in // either frame (CR 500.8). @@ -1073,12 +1090,93 @@ fn window_scope_from_cover_frames<'a>( LoopWindowScope { phase_invariant, sole_driver, - pinned_slots, + pinned, // 2b's axis (the PROJECTED covers), derived at its own call site. cast_card_ids: None, } } +/// CR 732.2a: is this stack entry's ANNOUNCEMENT-time target choice (gate (3)) already +/// SPECIFIED by a slot the offer published? +/// +/// The acceptance test is NOT re-derived here: it is the mint's own, +/// [`crate::game::engine::entry_publishes_pin_slots`], called for this one entry with the +/// pins' own proposer. That is what keeps the relief predicate from being coarser than the +/// mint predicate — controller (precondition (c)), entry kind, target shape and the +/// CR 400.7 incarnation binding are all one function, so a slot can never be *matched* +/// here on terms it was not *minted* on. +/// +/// SCOPE OF DISCHARGE. The caller's relief is a bare `continue`, so a `true` here skips +/// ALL FOUR facts [`stack_entry_has_no_ordering_input`] rejects on, while the pin answers +/// exactly one of them (the target). Three of the other three are ability facts the mint +/// itself now refuses to publish on (`multi_target` / `distribution` / +/// `target_constraints`). The fourth, `pending_trigger_entry` (CR 603.3c mid-construction), +/// is a property of THIS state rather than of the offer's schema, so it is enforced HERE — +/// the mint is documented pure over `(stack, objects, proposer)` and must not read a +/// prompt-coupled field. That makes this predicate strictly NARROWER than the mint's, which +/// is the safe direction; the forbidden direction is coarser. +/// +/// Fail-closed in every branch: no published pins, a non-qualifying entry, a missing source +/// object, or a mid-construction entry ⇒ not pinned ⇒ the gate that called this keeps +/// rejecting. +fn entry_target_choice_is_pinned( + state: &GameState, + entry: &StackEntry, + scope: LoopWindowScope<'_>, +) -> bool { + let Some(pins) = scope.pinned else { + return false; + }; + if state.pending_trigger_entry == Some(entry.id) { + return false; + } + crate::game::engine::entry_publishes_pin_slots(state, entry, pins.proposer) + .is_some_and(|e| pins.slots.contains(&e.target)) +} + +/// CR 732.2a + CR 603.5: is this entry's RESOLUTION-time `MayPrompt` (gate (6)) fully +/// explained by an optional gate the offer published — and if so, what verdict does the +/// entry carry once that one axis is discharged? +/// +/// `Some(residual)` ⇒ relieved, and `residual` is the classification the entry would have +/// had WITHOUT its CR 603.5 gate, which the caller must go on to gate exactly like any +/// unpinned entry's (a pinned "may" says nothing about the CR 616.1 life-event replacement +/// surface). `None` ⇒ no relief. +/// +/// ATTRIBUTION is the load-bearing part. `ability_resolution_choice_freedom` returns +/// `MayPrompt` for SIX independent reasons (`game/ability_scan.rs:6534-6560` plus the +/// sub/else effect join), and the offer publishes a `MayChoice` point for exactly ONE of +/// them — `ability.optional`. So relief requires both published slots to be pinned AND the +/// same ability, re-classified with `optional` cleared, to come back choice-free: an +/// `unless_pay`, a resolution-time target chooser, a modal header, a controller-choice +/// repeat, or a CR 701.34a proliferate sub-ability keeps returning `MayPrompt` and gets no +/// relief, because no published pin specifies it. +fn pinned_may_choice_relief( + state: &GameState, + entry: &StackEntry, + scope: LoopWindowScope<'_>, +) -> Option { + use crate::game::ability_scan::ResolutionChoiceFreedom; + let pins = scope.pinned?; + let published = crate::game::engine::entry_publishes_pin_slots(state, entry, pins.proposer)?; + let may = published.may?; + if !pins.slots.contains(&may) || !pins.slots.contains(&published.target) { + return None; + } + let StackEntryKind::TriggeredAbility { ability, .. } = &entry.kind else { + return None; + }; + // The clone is confined to this path (a published-and-pinned optional entry, so never + // reached while `scope.pinned` is `None`) and is what lets the ONE classifier answer + // the counterfactual instead of this module re-implementing its six reasons. + let mut without_may_gate = (**ability).clone(); + without_may_gate.optional = false; + match crate::game::ability_scan::ability_resolution_choice_freedom(&without_may_gate) { + ResolutionChoiceFreedom::MayPrompt => None, + residual @ ResolutionChoiceFreedom::FreeUnlessLifeReplacements => Some(residual), + } +} + /// Karp–Miller-style ω-acceleration (Karp–Miller 1969; Finkel et al. 2021), sound /// GIVEN the in-loop transition relation — the WHOLE beat: top-of-stack resolution /// (CR 608.1) with its resolution-time payments (CR 605.3a / CR 608.2g), trigger @@ -1140,15 +1238,26 @@ fn window_cast_card_ids(state: &GameState) -> Option> { } /// Scoped sibling of [`loop_states_cover_modulo_growth`] — see [`LoopWindowScope`]. -/// The `_scope` PARAMETER is still unread: this body's own axis is the PROJECTED -/// firewall, and the scope parameter is the seam for the SIBLING covers. The projected -/// scope conjunct (5) passes downstream is therefore derived LOCALLY, from `current`'s -/// own driving sequence ([`window_cast_card_ids`]) — so behaviour does move through -/// this body even though the parameter does not carry it. +/// The `scope` parameter now carries CR 732.2a pin proofs INTO this body: gate (3) +/// skips an entry whose published target [`DecisionSlot`] the offer pinned +/// ([`entry_target_choice_is_pinned`]) and gate (6) discharges a `MayPrompt` that is +/// wholly attributable to a published CR 603.5 gate ([`pinned_may_choice_relief`]), per +/// the EXTENSION POINT's three preconditions. That is this body's own use of the +/// parameter. +/// +/// The parameter is ALSO the seam for the SIBLING covers, which build their scope +/// through the single authority [`window_scope_from_cover_frames`] — its third +/// argument is `pinned`, passed `None` at both live sibling call sites today. +/// +/// Not carried by the parameter: the PROJECTED conjunct (5) this body passes +/// downstream is derived LOCALLY from `current`'s own driving sequence +/// ([`window_cast_card_ids`]), and the `projected_scope` built for that call +/// deliberately holds `pinned: None` — the projected firewall is a different +/// axis and must not inherit the caller's pins. pub(crate) fn loop_states_cover_modulo_growth_scoped( prior: &GameState, current: &GameState, - _scope: LoopWindowScope<'_>, + scope: LoopWindowScope<'_>, ) -> bool { // (1) Board equal modulo the NARROWED projection AND modulo the stack, with the // object resource axes STRICT-COMPARED (R5-B1). Project both, clear both stacks @@ -1180,6 +1289,12 @@ pub(crate) fn loop_states_cover_modulo_growth_scoped( // Iterate the ORIGINAL current-stack entries (so the mid-construction firewall // sees real stack-entry ids) and check each whose normalized kind strictly grew. for (orig, norm) in current.stack.iter().zip(cur_stack.iter()) { + // CR 732.2a EXTENSION POINT (see item 6's block): a slot the OFFER publishes is + // a SPECIFIED choice, not a free one, so its announcement-time target input is + // no longer player ordering input. + if entry_target_choice_is_pinned(current, orig, scope) { + continue; + } let cn = cur_stack.iter().filter(|e| *e == norm).count(); let pn = prior_stack.iter().filter(|e| *e == norm).count(); if cn > pn && !stack_entry_has_no_ordering_input(current, orig) { @@ -1210,7 +1325,7 @@ pub(crate) fn loop_states_cover_modulo_growth_scoped( let projected_scope = LoopWindowScope { phase_invariant: None, sole_driver: None, - pinned_slots: &[], + pinned: None, cast_card_ids: cast_ids.as_deref(), }; if fire_time_conditions_read_projected_resource_scoped(current, projected_scope) { @@ -1241,10 +1356,32 @@ pub(crate) fn loop_states_cover_modulo_growth_scoped( // option preserves the certificate (the win stays forced per the // CR 104.2a-grounded winner predicate). Plug pins in at THIS seam as an // additional input; do not rewire the classifiers or spread the decision. + // + // PINS ARE PLUGGED IN HERE (`scope.pinned`, minted by the single authority + // `game::engine::bounded_cycle_pin_slots`). Precondition (a) holds by construction: + // the pins that channel carries are `TargetPin::Player` / `MayChoice` designations, + // both state-independent (never "the newest copy"). Precondition (c) is NOT taken on + // trust from the mint site: [`pinned_may_choice_relief`] re-runs the mint's own + // per-entry acceptance test — controller conjunct included — for THIS entry, so the + // relief predicate is the mint predicate rather than a coarser sibling of it. + // Precondition (b) is why relief is not a `continue`: the entry's RESIDUAL verdict + // (its classification with the published CR 603.5 gate discharged) re-enters the same + // gating an unpinned entry gets, so `FreeUnlessLifeReplacements` still arms the + // CR 616.1 environmental guard below — a pinned target/"may" says nothing about whose + // life-event replacements might prompt. let mut needs_life_guard = false; for entry in ¤t.stack { match stack_entry_resolution_choice_freedom(entry) { - crate::game::ability_scan::ResolutionChoiceFreedom::MayPrompt => return false, + crate::game::ability_scan::ResolutionChoiceFreedom::MayPrompt => { + match pinned_may_choice_relief(current, entry, scope) { + Some( + crate::game::ability_scan::ResolutionChoiceFreedom::FreeUnlessLifeReplacements, + ) => needs_life_guard = true, + Some(crate::game::ability_scan::ResolutionChoiceFreedom::MayPrompt) | None => { + return false + } + } + } crate::game::ability_scan::ResolutionChoiceFreedom::FreeUnlessLifeReplacements => { needs_life_guard = true } @@ -1381,7 +1518,7 @@ pub(crate) fn loop_states_cover_modulo_object_growth( if fire_time_conditions_read_growing_class_scoped( &cf, None, - window_scope_from_cover_frames(&pa, &pb, &[]), + window_scope_from_cover_frames(&pa, &pb, None), ) { return false; } @@ -1589,7 +1726,7 @@ pub(crate) fn loop_states_cover_modulo_fodder_growth( if fire_time_conditions_read_growing_class_scoped( &cf, Some(&class_members), - window_scope_from_cover_frames(&pa, &pb, &[]), + window_scope_from_cover_frames(&pa, &pb, None), ) { return false; } @@ -5468,6 +5605,750 @@ mod tests { ); } + /// CR 601.2c (reached for a triggered ability via CR 603.3d): the mint must ask the + /// ANNOUNCEMENT authority how many choices announcing an entry requires — never a proxy + /// for it. `Effect::target_filter()` answers a DIFFERENT question ("is there a + /// player-target filter on the head effect?"); `ability_utils::build_target_slots` + /// answers this one, and is the same function the relief's own `forced_unique_targeting` + /// rebuilds slots with. Three rows, each a shape where the two answers DIVERGE, plus a + /// positive control so the conjunct cannot be constant-false. + /// + /// MEASURED REVERT-PROBE (delete the `build_target_slots` conjunct in + /// `entry_publishes_pin_slots`), on row (a)'s board: + /// `mint_publishes` false→TRUE, `bounded_cycle_pin_slots(..).len()` 0→1 (ONE point with + /// `min/max_targets: 1` for a TWO-choice announcement), and the pinned cover false→TRUE. + /// That last flip is the fail-open: gate (3)'s bare `continue` discharges a slot no pin + /// specifies. Rows (b) and (c) flip `mint_publishes` false→TRUE on the same probe. + #[test] + fn bounded_cycle_pin_slots_requires_a_single_mandatory_announcement_slot() { + use crate::game::ability_utils::build_target_slots; + use crate::game::engine::{bounded_cycle_pin_slots, entry_publishes_pin_slots}; + + // ── (a) TWO announcement choices: a chained sub-ability that also drains + // `target opponent`. CR 601.2c: "if the spell uses the word `target` in multiple + // places, the same object or player can be chosen once for each instance." + let (prior, current) = grown_window(3, |id| { + let mut ability = lose_life_targeting(event_amount(), opp_typed(vec![])); + ability.targets = vec![TargetRef::Player(PlayerId(1))]; + ability.sub_ability = Some(Box::new(lose_life_targeting( + event_amount(), + opp_typed(vec![]), + ))); + churn_entry(id, 0, ability, None) + }); + let ability = current.stack[2].ability().unwrap(); + assert_eq!( + build_target_slots(¤t, ability).map(|s| s.len()).ok(), + Some(2), + "reach-guard: `collect_target_slots_inner` recurses into `sub_ability`, so the \ + runtime announcement carries two independent CR 601.2c choices" + ); + assert!( + ability.effect.target_filter().is_some(), + "reach-guard: the PROXY still reports a single head-effect filter — that is the \ + whole divergence" + ); + // Reach-guards that gate (3) is the SOLE rejector here (gates (4)/(6) clean), so the + // cover assertions below are attributable to the pin relief and nothing else. + assert!( + !forced_unique_targeting(¤t, ability), + "reach-guard: three opponents ⇒ not forced-unique ⇒ gate (3) rejects" + ); + assert!( + !crate::game::ability_scan::ability_reads_projected_resource(ability), + "reach-guard: gate (4) passes" + ); + assert!( + entry_publishes_pin_slots(¤t, ¤t.stack[2], PlayerId(0)).is_none(), + "a published point says `min/max_targets: 1`; this announcement has TWO choices" + ); + assert!( + bounded_cycle_pin_slots(¤t, PlayerId(0)).is_empty(), + "and the mint therefore publishes nothing rather than under-describing it" + ); + let slot = churn_src_slot(¤t, 0); + for pinned in [&[][..], std::slice::from_ref(&slot)] { + assert!( + !loop_states_cover_modulo_growth_scoped(&prior, ¤t, pinned_scope(pinned)), + "gate (3)'s relief is a bare `continue`: an unpublished second target choice \ + must keep rejecting ({} pinned slot(s))", + pinned.len() + ); + } + + // ── (b) ZERO announcement choices, two ways. `Effect::target_filter()` returns + // `Some` for both, but the SLOT BUILDER surfaces no stack slot: CR 701.21a + // `Sacrifice` is carved out of `triggers::extract_target_filter_from_effect` (the + // accessor the builder actually uses), and a CR 601.2c choice made at resolution + // (`TargetChoiceTiming::Resolution`) is not announced at all. + let zero_slot_cases: [(&str, ResolvedAbility); 2] = [ + ("CR 701.21a Sacrifice — not a target", { + ResolvedAbility::new( + Effect::Sacrifice { + target: opp_typed(vec![]), + count: QuantityExpr::Fixed { value: 1 }, + min_count: 0, + }, + vec![], + ObjectId(CHURN_SRC), + PlayerId(0), + ) + }), + ("CR 601.2c — chosen at resolution, not announcement", { + let mut a = lose_life_targeting(event_amount(), opp_typed(vec![])); + a.targets = vec![TargetRef::Player(PlayerId(1))]; + a.target_choice_timing = crate::types::ability::TargetChoiceTiming::Resolution; + a + }), + ]; + for (label, ability) in zero_slot_cases { + let (_p, c) = grown_window(3, |id| churn_entry(id, 0, ability.clone(), None)); + let live = c.stack[2].ability().unwrap(); + assert!( + live.effect.target_filter().is_some(), + "reach-guard: the PROXY says `Some` ({label})" + ); + assert_eq!( + build_target_slots(&c, live).map(|s| s.len()).ok(), + Some(0), + "reach-guard: the ANNOUNCEMENT authority says zero ({label})" + ); + assert!( + entry_publishes_pin_slots(&c, &c.stack[2], PlayerId(0)).is_none(), + "no announcement choice ⇒ no published point ({label})" + ); + } + + // ── (c) an "up to one target" announcement: CR 601.2c makes the real minimum ZERO, + // and the slot may legally carry an EMPTY legal set, so `min_targets: 1` overstates + // it. One slot — the count half of the conjunct does NOT catch this; `!optional` does. + let (_p_opt, c_opt) = grown_window(3, |id| { + let mut ability = lose_life_targeting(event_amount(), opp_typed(vec![])); + ability.targets = vec![TargetRef::Player(PlayerId(1))]; + ability.optional_targeting = true; + churn_entry(id, 0, ability, None) + }); + assert_eq!( + build_target_slots(&c_opt, c_opt.stack[2].ability().unwrap()) + .map(|s| s.iter().map(|slot| slot.optional).collect::>()) + .ok(), + Some(vec![true]), + "reach-guard: exactly ONE slot, and it is OPTIONAL — so only the `!optional` \ + half of the conjunct can reject this row" + ); + assert!( + entry_publishes_pin_slots(&c_opt, &c_opt.stack[2], PlayerId(0)).is_none(), + "CR 601.2c: an `up to one target` announcement's minimum is 0, not the \ + published 1" + ); + + // ── positive control: the shipped drain still publishes, so none of the above is a + // constant-false conjunct. Same board as arm 1 of + // `a_pinned_slot_skips_gate_three_and_six`. + let (_p_ok, c_ok) = grown_window(3, |id| drain_entry(id, vec![])); + assert_eq!( + build_target_slots(&c_ok, c_ok.stack[2].ability().unwrap()) + .map(|s| s.len()) + .ok(), + Some(1), + "control: one mandatory announcement choice" + ); + assert_eq!( + bounded_cycle_pin_slots(&c_ok, PlayerId(0)).len(), + 1, + "control: the instrument still returns a NON-zero point set" + ); + } + + /// CR 115.2 + CR 601.2c (via CR 603.3d): the mint must take *which* choice it publishes + /// from the ANNOUNCEMENT authority too — not just *how many*. + /// + /// The sibling row above closed the cardinality axis. This is the same divergence on the + /// legal-SET axis, and it is the shape the cardinality conjunct cannot see: the head + /// effect declares the CR 115.2 player filter but announces NOTHING + /// (`TargetChoiceTiming::Resolution` ⇒ 0 slots), while a chained sub-ability announces + /// the one mandatory slot — over CREATURES. `Effect::target_filter()` answers + /// `Typed{[], Opponent, []}`; `build_target_slots` answers "one mandatory slot, + /// `[Object(500), Object(901), Object(902)]`" (measured, both). + /// + /// MEASURED REVERT-PROBE (drop the all-`Player` conjunct in + /// `entry_publishes_pin_slots`): `entry_publishes_pin_slots(..).is_some()` false→TRUE and + /// `bounded_cycle_pin_slots(..)` 0→1 point, whose `legal_targets` before the fix was the + /// re-derived `[Player(1), Player(2)]` — a published point claiming a PLAYER set for a + /// three-OBJECT announcement, which no `TargetPin::Player` can specify and which gate + /// (3)'s bare `continue` would discharge anyway. + /// + /// The positive control asserts the published set EQUALS the builder's slot rather than + /// a literal, so it fails if the mint ever re-derives the set from the accessor again. + #[test] + fn bounded_cycle_pin_slots_legal_set_comes_from_the_announcement_authority() { + use crate::game::ability_utils::build_target_slots; + use crate::game::engine::{bounded_cycle_pin_slots, entry_publishes_pin_slots}; + use crate::types::ability::{TargetChoiceTiming, TypeFilter}; + + // A chained sub-ability targeting CREATURES: the one slot the announcement really + // surfaces. `controller: None` so the set spans all three seats' creatures. + let creature_filter = TargetFilter::Typed(TypedFilter { + type_filters: vec![TypeFilter::Creature], + controller: None, + properties: vec![], + }); + let (mut prior, mut current) = grown_window(3, |id| { + let mut ability = lose_life_targeting(event_amount(), opp_typed(vec![])); + ability.targets = vec![TargetRef::Player(PlayerId(1))]; + // CR 601.2c: chosen at RESOLUTION ⇒ the head contributes no announcement slot. + ability.target_choice_timing = TargetChoiceTiming::Resolution; + ability.sub_ability = Some(Box::new(lose_life_targeting( + event_amount(), + creature_filter.clone(), + ))); + churn_entry(id, 0, ability, None) + }); + // Added to BOTH windows: the object axes are STRICT-compared, so a creature present + // only in `current` would make the cover false for an unrelated reason. + for state in [&mut prior, &mut current] { + for (id, controller) in [(901u64, 1u8), (902, 2)] { + let oid = ObjectId(id); + let mut obj = GameObject::new( + oid, + CardId(9), + PlayerId(controller), + format!("Bystander {id}"), + Zone::Battlefield, + ); + obj.card_types.core_types.push(CoreType::Creature); + state.objects.insert(oid, obj); + state.battlefield.push_back(oid); + } + } + + let ability = current.stack[2].ability().unwrap(); + assert!( + ability.effect.target_filter().is_some(), + "reach-guard: the PROXY still reports the head effect's player filter — that is \ + the whole divergence" + ); + let announced = build_target_slots(¤t, ability).expect("one announcement slot"); + assert_eq!( + announced + .iter() + .map(|slot| (slot.optional, slot.legal_targets.clone())) + .collect::>(), + vec![( + false, + vec![ + TargetRef::Object(ObjectId(CHURN_SRC)), + TargetRef::Object(ObjectId(901)), + TargetRef::Object(ObjectId(902)), + ] + )], + "reach-guard: the CARDINALITY conjunct passes here (exactly one MANDATORY slot), \ + so the all-`Player` conjunct is the sole rejector — and the announced set is \ + three OBJECTS, not the head filter's players" + ); + assert!( + !forced_unique_targeting(¤t, ability), + "reach-guard: three legal creatures ⇒ not forced-unique ⇒ gate (3) rejects" + ); + assert!( + !crate::game::ability_scan::ability_reads_projected_resource(ability), + "reach-guard: gate (4) passes, so the cover rows below are gate (3)'s" + ); + + assert!( + entry_publishes_pin_slots(¤t, ¤t.stack[2], PlayerId(0)).is_none(), + "the announced choice is among OBJECTS; a `TargetPin::Player` cannot specify it, \ + so nothing may be published" + ); + assert!( + bounded_cycle_pin_slots(¤t, PlayerId(0)).is_empty(), + "and the mint publishes no point rather than one describing a different choice" + ); + let slot = churn_src_slot(¤t, 0); + for pinned in [&[][..], std::slice::from_ref(&slot)] { + assert!( + !loop_states_cover_modulo_growth_scoped(&prior, ¤t, pinned_scope(pinned)), + "gate (3)'s relief is a bare `continue`: an object-valued announcement choice \ + must keep rejecting ({} pinned slot(s))", + pinned.len() + ); + } + + // ── the RESIDUAL divergence the all-`Player` conjunct alone does NOT close: a + // chained sub-ability that announces a choice among ALL players (CR 115.2 "target + // player") under the same "target opponent" head. Every conjunct passes — one + // mandatory slot, every candidate a player, head shape accepted — so the mint + // publishes, and the ONLY thing that keeps the point honest is that the set is + // carried through from the builder instead of re-derived from the head filter. + let (_p_any, any_player) = grown_window(3, |id| { + let mut ability = lose_life_targeting(event_amount(), opp_typed(vec![])); + ability.targets = vec![TargetRef::Player(PlayerId(1))]; + ability.target_choice_timing = TargetChoiceTiming::Resolution; + ability.sub_ability = Some(Box::new(lose_life_targeting( + event_amount(), + TargetFilter::Typed(TypedFilter { + type_filters: vec![], + controller: None, + properties: vec![], + }), + ))); + churn_entry(id, 0, ability, None) + }); + let all_seats = vec![ + TargetRef::Player(PlayerId(0)), + TargetRef::Player(PlayerId(1)), + TargetRef::Player(PlayerId(2)), + ]; + assert_eq!( + build_target_slots(&any_player, any_player.stack[2].ability().unwrap()) + .map(|slots| slots + .iter() + .map(|s| (s.optional, s.legal_targets.clone())) + .collect::>()) + .ok(), + Some(vec![(false, all_seats.clone())]), + "reach-guard: ONE mandatory slot whose candidates are all PLAYERS — so every \ + acceptance conjunct passes and only the publication path can still be wrong" + ); + let any_points = bounded_cycle_pin_slots(&any_player, PlayerId(0)); + assert_eq!( + any_points.len(), + 1, + "reach-guard: the mint accepts this entry" + ); + assert_eq!( + any_points[0].kind, + crate::analysis::decision_template::DecisionPointKind::Targets { + legal_targets: all_seats, + min_targets: 1, + max_targets: 1, + ordered: false, + }, + "the point describes the choice the ANNOUNCEMENT offers (three seats); \ + re-deriving from the head filter would publish the two opponents" + ); + + // ── positive control + EQUIVALENCE: the shipped drain publishes, and the published + // legal set is the BUILDER's, asserted against it rather than against a literal. + let (_p_ok, c_ok) = grown_window(3, |id| drain_entry(id, vec![])); + let mut control_slots = + build_target_slots(&c_ok, c_ok.stack[2].ability().unwrap()).expect("control announces"); + assert_eq!(control_slots.len(), 1, "control: one announcement slot"); + let builder_set = control_slots.swap_remove(0).legal_targets; + assert_eq!( + builder_set, + vec![ + TargetRef::Player(PlayerId(1)), + TargetRef::Player(PlayerId(2)) + ], + "control: the builder enumerates the two opponents" + ); + let published = bounded_cycle_pin_slots(&c_ok, PlayerId(0)); + assert_eq!( + published.len(), + 1, + "control: the instrument returns non-zero" + ); + assert_eq!( + published[0].kind, + crate::analysis::decision_template::DecisionPointKind::Targets { + legal_targets: builder_set, + min_targets: 1, + max_targets: 1, + ordered: false, + }, + "the published legal set IS the announcement authority's slot" + ); + } + + /// A slot an OFFER would publish for `CHURN_SRC`'s entries — built through the same + /// authority the gates rebuild it with, so the rows prove the KEY matches rather than + /// asserting a hand-written literal. `index: 0` is the CR 115.2 target choice, + /// `index: 1` the CR 603.5 "may" gate. + fn churn_src_slot(state: &GameState, index: u8) -> DecisionSlot { + DecisionSlot { + source: crate::game::engine::object_decision_source(state, ObjectId(CHURN_SRC)) + .expect("fixture: the churn source is on the battlefield"), + index, + } + } + + /// The published-pin channel as a P0 offer would carry it. + fn pinned_scope(slots: &[DecisionSlot]) -> LoopWindowScope<'_> { + LoopWindowScope { + phase_invariant: None, + sole_driver: None, + pinned: Some(PinnedChoices { + proposer: PlayerId(0), + slots, + }), + cast_card_ids: None, + } + } + + /// An optional (CR 603.5 "may") forced-unique drain — `MayPrompt` at + /// `ability_scan.rs:6534` for exactly ONE reason, the one the offer publishes a + /// `MayChoice` point for. + fn optional_drain(id: u64) -> StackEntry { + let mut ability = lose_life_targeting(event_amount(), opp_typed(vec![])); + ability.targets = vec![TargetRef::Player(PlayerId(1))]; + ability.optional = true; + churn_entry(id, 0, ability, None) + } + + /// The same drain whose `MayPrompt` ALSO has a second, unpublished cause: a + /// CR 701.34a proliferate sub-ability. + fn proliferate_drain(id: u64, optional: bool) -> StackEntry { + let mut ability = lose_life_targeting(event_amount(), opp_typed(vec![])); + ability.targets = vec![TargetRef::Player(PlayerId(1))]; + ability.optional = optional; + ability.sub_ability = Some(Box::new(ResolvedAbility::new( + Effect::Proliferate, + vec![], + ObjectId(CHURN_SRC), + PlayerId(0), + ))); + churn_entry(id, 0, ability, None) + } + + /// Grow a 2-entry window to 3 of the same kind: `[e(10),e(11)] → [e(20),e(21),e(22)]`. + fn grown_window(players: u8, entry: impl Fn(u64) -> StackEntry) -> (GameState, GameState) { + let mut prior = drain_state(players); + prior.stack.push_back(entry(10)); + prior.stack.push_back(entry(11)); + let mut current = prior.clone(); + current.stack.clear(); + current.stack.push_back(entry(20)); + current.stack.push_back(entry(21)); + current.stack.push_back(entry(22)); + (prior, current) + } + + /// CR 732.2a EXTENSION POINT: a per-iteration choice the OFFER publishes is a + /// *specified* choice, not a free one, so gates (3) and (6) must stop rejecting on it — + /// and ONLY on it. Every relief runs the MINT's own per-entry acceptance test + /// (`game::engine::entry_publishes_pin_slots`), so the relief predicate cannot be + /// coarser than the mint predicate. + /// + /// SIX ARMS. Arms 1–2 are matched pairs whose only variable is `scope.pinned`; arms + /// 3–6 are the over-match controls that a coarser relief would fail. + /// * arm 1 — gate (3), 3p open targeting (two legal opponents ⇒ `auto_select => + /// Ok(None)` ⇒ NOT forced-unique). Same board as + /// `n1_open_target_growing_still_rejected`. + /// * arm 2 — gate (6), an OPTIONAL drain: `MayPrompt` caused solely by CR 603.5 + /// `optional`, the one axis the offer publishes a `MayChoice` point for. + /// * arm 3 — gate (6) NON-ATTRIBUTION: a CR 701.34a proliferate choice is NOT relieved, + /// with or without an optional gate pinned on top of it. The proliferate board is + /// `item6_still_vetoes_under_forced_unique_targets`' board. + /// * arm 4 — precondition (c): an entry the PROPOSER does not control is never relieved + /// by the proposer's pin, even when it shares the pinned source. + /// * arm 5 — gate (3) SCOPE: the relief is a `continue`, so it discharges the whole + /// item-3 predicate — but a slot answers ONE target. `multi_target` (CR 601.2c), + /// `distribution` (CR 601.2d) and `target_constraints` (CR 601.2c) are separate + /// announcement-time facts no published slot specifies, each isolated as the sole + /// rejector on a forced-unique board. Its tail row covers the fourth such fact, + /// `pending_trigger_entry` (CR 603.3c), through the cover as well, with its own + /// gate-(1) control (see there). + /// * arm 6 — gate (6) RESIDUAL: arm 2's relieved board plus an optional life + /// replacement still rejects, because a discharged CR 603.5 gate does not discharge + /// the CR 616.1 environmental surface. + /// + /// REVERT-PROBES (each measured; see the impl report): + /// * drop the `entry_target_choice_is_pinned` guard at gate (3) ⇒ arm 1's PINNED half + /// stays `false` ⇒ FAILS. + /// * drop the `pinned_may_choice_relief` arm at gate (6) ⇒ arm 2's PINNED half ⇒ FAILS. + /// * drop the residual re-classification in `pinned_may_choice_relief` (relieve whenever + /// the may slot is pinned) ⇒ arm 3's optional+proliferate half ⇒ FAILS. + /// * drop the `entry.controller != proposer` conjunct in `entry_publishes_pin_slots` + /// ⇒ arm 4 ⇒ FAILS. + /// * drop the ordering-input block in `entry_publishes_pin_slots` ⇒ arm 5's PINNED + /// half covers ⇒ FAILS (once per mutated field). + /// * turn gate (6)'s `needs_life_guard = true` re-arm back into a `continue` ⇒ arm 6 + /// covers ⇒ FAILS. + /// + /// Non-vacuity: every arm asserts BOTH directions (or pairs its negative with arm 1/2's + /// positive on the same predicate), so neither a constant-`true` nor a constant-`false` + /// relief survives. + #[test] + fn a_pinned_slot_skips_gate_three_and_six() { + // ── arm 1: gate (3), open (≥2-legal) targeting ── + let (prior, current) = grown_window(3, |id| drain_entry(id, vec![])); + + // Reach-guard: the rejector really is gate (3) on this board. + assert!( + !forced_unique_targeting(¤t, current.stack[2].ability().unwrap()), + "reach-guard: two opponents ⇒ not forced-unique ⇒ gate (3) is the rejector" + ); + assert!( + !loop_states_cover_modulo_growth_scoped(&prior, ¤t, pinned_scope(&[])), + "UNPINNED: an open per-opponent target choice is a free choice ⇒ reject" + ); + let target_slot = churn_src_slot(¤t, 0); + assert!( + loop_states_cover_modulo_growth_scoped( + &prior, + ¤t, + pinned_scope(std::slice::from_ref(&target_slot)) + ), + "PINNED: the offer published this slot ⇒ CR 732.2a specified choice ⇒ cover" + ); + + // ── arm 2: gate (6), a CR 603.5 "may" gate — the published resolution choice ── + let (p_may, c_may) = grown_window(2, optional_drain); + let may_ability = c_may.stack[2].ability().unwrap(); + // Reach-guards: gates (3) and (4) PASS here, so gate (6) is the rejector, and its + // MayPrompt is the `optional` one. + assert!( + forced_unique_targeting(&c_may, may_ability), + "reach-guard: the single opponent is forced-unique ⇒ gate (3) passes" + ); + assert!( + !crate::game::ability_scan::ability_reads_projected_resource(may_ability), + "reach-guard: gate (4) passes ⇒ gate (6) is the rejector" + ); + assert_eq!( + crate::game::ability_scan::ability_resolution_choice_freedom(may_ability), + crate::game::ability_scan::ResolutionChoiceFreedom::MayPrompt, + "reach-guard: CR 603.5 `optional` is what makes this entry MayPrompt" + ); + assert!( + !loop_states_cover_modulo_growth_scoped(&p_may, &c_may, pinned_scope(&[])), + "UNPINNED: an optional trigger's take/decline is a free choice ⇒ reject" + ); + let may_slots = [churn_src_slot(&c_may, 0), churn_src_slot(&c_may, 1)]; + assert!( + loop_states_cover_modulo_growth_scoped(&p_may, &c_may, pinned_scope(&may_slots)), + "PINNED: the published CR 603.5 gate specifies that choice ⇒ cover" + ); + // The MayChoice point is load-bearing on its own: pinning only the target slot + // leaves the resolution choice unspecified. + assert!( + !loop_states_cover_modulo_growth_scoped(&p_may, &c_may, pinned_scope(&may_slots[..1])), + "a pinned TARGET does not specify the CR 603.5 take/decline choice" + ); + + // ── arm 3: gate (6) NON-ATTRIBUTION — CR 701.34a proliferate is never relieved ── + for optional in [false, true] { + let (p6, c6) = grown_window(2, |id| proliferate_drain(id, optional)); + let ability = c6.stack[2].ability().unwrap(); + assert!( + forced_unique_targeting(&c6, ability), + "reach-guard: gate (3) passes ⇒ gate (6) is the rejector (optional={optional})" + ); + assert!( + !crate::game::ability_scan::ability_reads_projected_resource(ability), + "reach-guard: gate (4) passes (optional={optional})" + ); + // Publish EVERYTHING this entry could publish — target slot and, when the + // ability is optional, its CR 603.5 gate. The proliferate choice still has no + // published pin, so no relief may be granted. + let slots = [churn_src_slot(&c6, 0), churn_src_slot(&c6, 1)]; + for pinned in [&slots[..0], &slots[..1], &slots[..]] { + assert!( + !loop_states_cover_modulo_growth_scoped(&p6, &c6, pinned_scope(pinned)), + "CR 701.34a proliferate is a resolution-time choice NO published slot \ + specifies (optional={optional}, {} pinned slot(s))", + pinned.len() + ); + } + } + + // ── arm 4: precondition (c) — a non-proposer entry sharing the pinned source ── + let foreign_drain = |id| { + let mut ability = lose_life_targeting(event_amount(), opp_typed(vec![])); + ability.controller = PlayerId(1); + ability.targets = vec![TargetRef::Player(PlayerId(0))]; + churn_entry(id, 1, ability, None) + }; + let (p_foreign, c_foreign) = grown_window(3, foreign_drain); + assert!( + !forced_unique_targeting(&c_foreign, c_foreign.stack[2].ability().unwrap()), + "reach-guard: P1 has two opponents ⇒ not forced-unique ⇒ gate (3) rejects" + ); + assert_eq!( + churn_src_slot(&c_foreign, 0), + target_slot, + "the foreign entry's source is BYTE-IDENTICAL to arm 1's pinned slot — the pin \ + list cannot discriminate it, only the controller conjunct can" + ); + assert!( + !loop_states_cover_modulo_growth_scoped( + &p_foreign, + &c_foreign, + pinned_scope(std::slice::from_ref(&target_slot)) + ), + "CR 732.2a precondition (c): P0's offer specifies none of P1's choices" + ); + + // ── arm 5: gate (3) SCOPE OF DISCHARGE ── + // The relief is a bare `continue`, so it skips the WHOLE item-3 predicate — but a + // published slot answers ONE target. Each row mutates exactly one of the other + // announcement-time facts `stack_entry_has_no_ordering_input` rejects on, on a 2p + // board where the target fact PASSES, so the mutated field is the sole rejector. + { + use crate::types::ability::MultiTargetSpec; + use crate::types::game_state::TargetSelectionConstraint; + type Mutate = fn(&mut ResolvedAbility); + let mutations: [(&str, Mutate); 3] = [ + ("multi_target — CR 601.2c variable target count", |a| { + a.multi_target = Some(MultiTargetSpec::fixed(1, 2)) + }), + ("distribution — CR 601.2d divide-among", |a| { + a.distribution = Some(vec![(TargetRef::Player(PlayerId(1)), 1)]) + }), + ("target_constraints — CR 601.2c cross-target", |a| { + a.target_constraints = vec![TargetSelectionConstraint::DifferentTargetPlayers] + }), + ]; + for (label, mutate) in mutations { + let (p5, c5) = grown_window(2, |id| { + let mut e = drain_entry(id, vec![]); + let StackEntryKind::TriggeredAbility { ability, .. } = &mut e.kind else { + unreachable!("drain_entry builds a TriggeredAbility") + }; + mutate(ability.as_mut()); + e + }); + assert!( + forced_unique_targeting(&c5, c5.stack[2].ability().unwrap()), + "reach-guard: the single opponent is forced-unique ⇒ the TARGET fact is \ + not what rejects ({label})" + ); + assert!( + !stack_entry_has_no_ordering_input(&c5, &c5.stack[2]), + "reach-guard: {label} is therefore item 3's SOLE rejector" + ); + let slot = churn_src_slot(&c5, 0); + for pinned in [&[][..], std::slice::from_ref(&slot)] { + assert!( + !loop_states_cover_modulo_growth_scoped(&p5, &c5, pinned_scope(pinned)), + "a published slot specifies ONE target; {label} is announcement-time \ + ordering input no slot specifies ({} pinned)", + pinned.len() + ); + } + } + + // The FOURTH fact, `pending_trigger_entry` (CR 603.3c mid-construction), is + // state-dependent, so it lives on the relief predicate rather than in the pure + // mint — and it is REACHABLE through the cover, so the row is written there. + // Measured: `normalize_for_loop` leaves the field AS-IS, so a `current` carrying + // one that `prior` lacks does fail gate (1) — but when BOTH frames carry it, + // gate (1) passes and gate (3) is the sole rejector. Both controls below. + // (Both production call sites compare states at `WaitingFor::Priority`, where + // the field is `None`; that bounds the exposure, it does not make it + // unreachable.) + let (p_pend, c_pend) = grown_window(2, |id| drain_entry(id, vec![])); + let pend_slot = churn_src_slot(&c_pend, 0); + assert!( + loop_states_cover_modulo_growth_scoped( + &p_pend, + &c_pend, + pinned_scope(std::slice::from_ref(&pend_slot)) + ), + "positive control: this entry's published slot IS otherwise matched" + ); + let (mut p_mid, mut c_mid) = (p_pend.clone(), c_pend.clone()); + let mid = c_mid.stack[2].id; + for s in [&mut p_mid, &mut c_mid] { + s.pending_trigger_entry = Some(mid); + } + assert!( + !loop_states_cover_modulo_growth_scoped( + &p_mid, + &c_mid, + pinned_scope(std::slice::from_ref(&pend_slot)) + ), + "CR 603.3c: a mid-construction announcement is not specified by any \ + published slot — the relief must not discharge item 3's firewall" + ); + // The gate-(1) control for the row above: the SAME both-frames shape naming no + // live entry still covers, so the rejection there is gate (3), not the mere + // presence of a non-`None` field. + let (mut p_other, mut c_other) = (p_pend, c_pend); + for s in [&mut p_other, &mut c_other] { + s.pending_trigger_entry = Some(ObjectId(u64::MAX)); + } + assert!( + loop_states_cover_modulo_growth_scoped( + &p_other, + &c_other, + pinned_scope(std::slice::from_ref(&pend_slot)) + ), + "gate-(1) control: a `pending_trigger_entry` naming no live entry is not \ + what rejects — CR 603.3c's firewall is entry-scoped" + ); + } + + // ── arm 6: gate (6) RESIDUAL re-arms the CR 616.1 environmental guard ── + // Arm 2's board (relief GRANTED there) plus one optional life replacement. A + // pinned CR 603.5 gate says nothing about whose life-event replacements prompt. + { + use crate::types::ability::ReplacementMode; + let (mut p_life, mut c_life) = grown_window(2, optional_drain); + let mut def = ReplacementDefinition::new(ReplacementEvent::LoseLife); + def.mode = ReplacementMode::Optional { decline: None }; + for state in [&mut p_life, &mut c_life] { + let oid = bf_object(state, 812); + state + .objects + .get_mut(&oid) + .unwrap() + .replacement_definitions + .push(def.clone()); + } + assert!( + life_event_replacements_may_prompt(&c_life), + "reach-guard: the installed optional def makes the CR 616.1 surface \ + prompt-capable (arm 2's bare board does not)" + ); + let slots = [churn_src_slot(&c_life, 0), churn_src_slot(&c_life, 1)]; + assert!( + !loop_states_cover_modulo_growth_scoped(&p_life, &c_life, pinned_scope(&slots)), + "the discharged `may` leaves a FreeUnlessLifeReplacements RESIDUAL that must \ + re-arm the CR 616.1 guard — relief is not a `continue`" + ); + } + + // ── non-widening control: an unrelated slot relieves nothing ── + let unrelated = DecisionSlot { + source: crate::types::game_state::YieldTarget::ThisObject { + source_id: ObjectId(CHURN_SRC + 1), + incarnation: Some(0), + trigger_description: None, + }, + index: 0, + }; + for (p, c, label) in [(&prior, ¤t, "gate (3)"), (&p_may, &c_may, "gate (6)")] { + assert!( + !loop_states_cover_modulo_growth_scoped( + p, + c, + pinned_scope(std::slice::from_ref(&unrelated)) + ), + "{label}: a pin on a DIFFERENT source must not relieve this entry" + ); + } + + // ── CR 400.7 control: a stale incarnation is a different slot ── + let stale = DecisionSlot { + source: crate::types::game_state::YieldTarget::ThisObject { + source_id: ObjectId(CHURN_SRC), + incarnation: Some(u64::MAX), + trigger_description: None, + }, + index: 0, + }; + assert!( + !loop_states_cover_modulo_growth_scoped( + &prior, + ¤t, + pinned_scope(std::slice::from_ref(&stale)) + ), + "CR 400.7: a pin latched to a stale incarnation does not match the live source" + ); + } + /// CONSTRAINT-3 ORTHOGONALITY: an item-3-passing, item-4-clean forced-unique /// drain that ALSO carries a `Proliferate` sub_ability (CR 701.34a resolution /// choice ⇒ `MayPrompt`) is vetoed by item-6. Revert-probe: dropping the @@ -6882,7 +7763,7 @@ mod tests { let driver_scope = LoopWindowScope { phase_invariant: None, sole_driver: Some(PlayerId(0)), - pinned_slots: &[], + pinned: None, cast_card_ids: None, }; @@ -6957,7 +7838,7 @@ mod tests { let driver_scope = LoopWindowScope { phase_invariant: None, sole_driver: Some(PlayerId(0)), - pinned_slots: &[], + pinned: None, cast_card_ids: None, }; @@ -8804,7 +9685,7 @@ mod tests { let scope = LoopWindowScope { phase_invariant: None, sole_driver: None, - pinned_slots: &[], + pinned: None, cast_card_ids: Some(&never_cast), }; assert!( @@ -8826,7 +9707,7 @@ mod tests { let scope = LoopWindowScope { phase_invariant: None, sole_driver: None, - pinned_slots: &[], + pinned: None, cast_card_ids: Some(&never_cast), }; assert!( @@ -8861,7 +9742,7 @@ mod tests { let scope = LoopWindowScope { phase_invariant: None, sole_driver: None, - pinned_slots: &[], + pinned: None, cast_card_ids: Some(&recast), }; assert!( @@ -8876,7 +9757,7 @@ mod tests { let relieved_scope = LoopWindowScope { phase_invariant: None, sole_driver: None, - pinned_slots: &[], + pinned: None, cast_card_ids: Some(&other), }; assert!( @@ -9126,7 +10007,7 @@ mod tests { let scope = LoopWindowScope { phase_invariant: None, sole_driver: None, - pinned_slots: &[], + pinned: None, cast_card_ids: Some(&cast), }; assert!( @@ -9144,7 +10025,7 @@ mod tests { let recast_scope = LoopWindowScope { phase_invariant: None, sole_driver: None, - pinned_slots: &[], + pinned: None, cast_card_ids: Some(&recast), }; assert!( @@ -9832,7 +10713,7 @@ mod tests { // ── `sole_driver` — CR 117.1 ── let (pa, pb) = (base(), base()); assert_eq!( - window_scope_from_cover_frames(&pa, &pb, &[]).sole_driver, + window_scope_from_cover_frames(&pa, &pb, None).sole_driver, Some(PlayerId(0)), "PAIRED POSITIVE: a homogeneous single-driver window proves CR 117.1's premise" ); @@ -9842,7 +10723,7 @@ mod tests { let mut pb_other = base(); pb_other.last_loop_action_sequence = vec![ctx(1)]; assert_eq!( - window_scope_from_cover_frames(&pa, &pb_other, &[]).sole_driver, + window_scope_from_cover_frames(&pa, &pb_other, None).sole_driver, None, "(s2) a two-controller window proves nothing about who holds priority" ); @@ -9851,7 +10732,7 @@ mod tests { let mut pa_mixed = base(); pa_mixed.last_loop_action_sequence = vec![ctx(0), ctx(1)]; assert_eq!( - window_scope_from_cover_frames(&pa_mixed, &pb, &[]).sole_driver, + window_scope_from_cover_frames(&pa_mixed, &pb, None).sole_driver, None, "(s2) an interleaved sequence is fail-closed" ); @@ -9860,14 +10741,14 @@ mod tests { let mut pb_empty = base(); pb_empty.last_loop_action_sequence.clear(); assert_eq!( - window_scope_from_cover_frames(&pa, &pb_empty, &[]).sole_driver, + window_scope_from_cover_frames(&pa, &pb_empty, None).sole_driver, None, "(s1) an empty driving sequence is NO PROOF, so it cannot relieve anything" ); // ── `phase_invariant` — CR 500.1 / CR 506.1 / CR 500.8 ── assert_eq!( - window_scope_from_cover_frames(&pa, &pb, &[]).phase_invariant, + window_scope_from_cover_frames(&pa, &pb, None).phase_invariant, Some(Phase::PreCombatMain), "PAIRED POSITIVE: agreeing frames with no extra phase prove the window's phase" ); @@ -9884,7 +10765,7 @@ mod tests { attacker_restriction_source: None, }); assert_eq!( - window_scope_from_cover_frames(&pa, &pb_extra, &[]).phase_invariant, + window_scope_from_cover_frames(&pa, &pb_extra, None).phase_invariant, None, "(p3) CR 500.8: a pending extra phase breaks `equal phase ⇒ never left it`" ); @@ -9893,7 +10774,7 @@ mod tests { let mut pb_turn = base(); pb_turn.turn_number = 14; assert_eq!( - window_scope_from_cover_frames(&pa, &pb_turn, &[]).phase_invariant, + window_scope_from_cover_frames(&pa, &pb_turn, None).phase_invariant, None, "(p1) frames from different turns bound nothing about one window's phase" ); @@ -9902,7 +10783,7 @@ mod tests { let mut pb_phase = base(); pb_phase.phase = Phase::PostCombatMain; assert_eq!( - window_scope_from_cover_frames(&pa, &pb_phase, &[]).phase_invariant, + window_scope_from_cover_frames(&pa, &pb_phase, None).phase_invariant, None, "(p2) a window that crosses a phase boundary is not phase-invariant" ); diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index a753858b5a..3bbc0cdedb 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -1075,6 +1075,291 @@ fn pinned_decisions_to_points( .collect() } +/// CR 115.2 + CR 732.2a: does the ability's HEAD effect declare the "target opponent" PLAYER +/// filter — a `Typed` filter with no type constraints, no object properties, and +/// `controller: Opponent`, the shape `game::targeting::find_legal_targets` collapses to +/// players-only (`crates/engine/src/game/targeting.rs:192-193`)? +/// +/// SHAPE ACCEPTANCE ONLY, and the `bool` return is what enforces it: the published legal +/// set must come from the announcement authority (`ability_utils::build_target_slots`), never +/// from here, because this predicate reads the HEAD effect's filter while the choice being +/// announced can belong to a CHAINED sub-ability (CR 601.2c reached via CR 603.3d). Handing +/// the filter back would re-open exactly that divergence, so it is not handed back. +/// +/// What the `controller` conjunct contributes, and nothing else does: `controller: You` / +/// `None` ALSO collapses to players, so an all-`Player` legal set alone would admit a single +/// forced seat, which is not the per-opponent choice a bounded drain cycle pins. Measured on +/// the 3p drain board: `Typed{[], You, []}` builds ONE mandatory slot whose legal set is +/// `[Player(0)]`, and only this conjunct rejects it. +/// +/// What the `type_filters` / `properties` conjuncts contribute (issue #2004 — "target token +/// you control" must not collapse to a player) is the MIRROR of that chained-slot +/// divergence: an object-shaped HEAD effect whose single announced slot is nonetheless a +/// player choice. When the head announces its own slot, an object-shaped filter is already +/// rejected upstream — it either enumerates OBJECTS (the caller's all-`Player` conjunct) or +/// enumerates nothing, making `build_target_slots` return `Err` (the caller's cardinality +/// conjunct). It is only when the head announces NOTHING +/// (`TargetChoiceTiming::Resolution`) and a chained `target opponent` sub-ability supplies +/// the one slot that these two conjuncts become the sole rejector — which is the board +/// `bounded_cycle_pin_slots_conjuncts_are_each_load_bearing` measures them on. +fn declares_opponent_player_target(ability: &crate::types::ability::ResolvedAbility) -> bool { + use crate::types::ability::{ControllerRef, TargetFilter}; + let Some(TargetFilter::Typed(tf)) = ability.effect.target_filter() else { + return false; + }; + tf.type_filters.is_empty() + && tf.properties.is_empty() + && tf.controller == Some(ControllerRef::Opponent) +} + +/// What ONE accepted stack entry publishes: the slot keys, plus the legal set the +/// ANNOUNCEMENT authority itself built for the target slot. +pub(crate) struct EntryPinSlots { + /// CR 115.2 target choice — `index: 0`. + pub(crate) target: crate::analysis::decision_template::DecisionSlot, + /// CR 603.5 "may" gate — `index: 1`, `Some` iff `ability.optional`. `DecisionSlot`'s + /// sub-index disambiguates two choices of ONE ability instance (target vs. may gate). + pub(crate) may: Option, + /// The legal set of the ONE announcement slot, taken VERBATIM from + /// `ability_utils::build_target_slots` — the same authority that decided there is + /// exactly one mandatory choice. Deriving it a second time from the head effect's + /// filter would let the two disagree about WHICH choice is being published, which is + /// the same class of divergence the cardinality conjunct closes about HOW MANY. + pub(crate) legal_targets: Vec, +} + +/// CR 732.2a: the per-iteration choice slots ONE stack entry publishes for `proposer`, or +/// `None` when it publishes none. +/// +/// SINGLE AUTHORITY, and that is the whole point of its existence: the MINT +/// ([`bounded_cycle_pin_slots`]) maps it over `state.stack`, and the RELIEF +/// (`analysis::resource`'s CR 732.2a gate-(3)/(6) pin skip) calls it for one entry. Because +/// both sides ask the same function, the relief predicate cannot be COARSER than the mint +/// predicate — relieving a verdict the published pin does not specify is impossible by +/// construction rather than by convention. +/// +/// The acceptance conjuncts, in the order the EXTENSION POINT's preconditions name them: +/// (c) `entry.controller == proposer` — CR 732.2a leaves every OTHER player owning their own +/// choices, so an opponent-controlled entry is never pinnable; the entry is a triggered +/// ability (a spell / activated ability re-announces from scratch); ANNOUNCING it requires +/// exactly one mandatory choice OVER PLAYERS, asked of the announcement authority itself +/// (`ability_utils::build_target_slots`, the function the relief's own +/// `forced_unique_targeting` rebuilds slots with) rather than of a proxy; its head effect +/// declares the player-target shape ([`declares_opponent_player_target`]); and its source +/// object still exists, so the slot can re-bind (CR 400.7 incarnation, fail-closed on +/// absence). +/// +/// SCOPE OF THE ANSWER: because the relief is a `continue` at gate (3), the relief +/// predicate must be no coarser than EVERY fact `stack_entry_has_no_ordering_input` +/// rejects on — not just the target one. Correspondence, in that function's own order: +/// entry kind (the destructure below), `pending_trigger_entry` (the ONE state-dependent +/// fact, enforced at the relief so this enumerator stays pure — see the block below), +/// `multi_target` / `distribution` / `target_constraints` (the block below), and the +/// target choice itself, which is the one fact the published slot actually answers. +pub(crate) fn entry_publishes_pin_slots( + state: &GameState, + entry: &StackEntry, + proposer: PlayerId, +) -> Option { + use crate::analysis::decision_template::DecisionSlot; + if entry.controller != proposer { + return None; + } + let StackEntryKind::TriggeredAbility { ability, .. } = &entry.kind else { + return None; + }; + // The published slot answers ONE target (`min_targets: 1, max_targets: 1` below). A + // variable-count choice (CR 601.2c "if the spell has a variable number of targets, the + // player announces how many"), a divide/distribute assignment (CR 601.2d), or a + // cross-target constraint (CR 601.2c "the same target can't be chosen multiple times" / + // "must be chosen") — all reached for a triggered ability via CR 603.3d — is + // announcement-time ordering input NO published slot specifies. These are the ABILITY's + // own facts, so they live here, where mint and relief share them: the gate-(3) relief + // is a `continue` that discharges the whole of `stack_entry_has_no_ordering_input`, + // which rejects on each of them independently of its target check. + // + // The fourth fact that function rejects on — `pending_trigger_entry == entry.id`, + // CR 603.3c mid-construction — is deliberately NOT here: it is a property of the + // COMPARED STATE, not of the offer's schema, and reading it would break this + // enumerator's purity contract (see [`bounded_cycle_pin_slots`]: pure over + // `(state.stack, state.objects, proposer)`, never `waiting_for`). It is set exactly + // while a `TriggerTargetSelection` prompt is up, so a mint that read it would publish + // nothing on a prompted board — measured on dump B, where it zeroes the emblem slot. + // It is enforced at the relief instead (`analysis::resource::entry_target_choice_is_pinned`), + // which makes the relief strictly NARROWER than the mint — never coarser. + if ability.multi_target.is_some() + || ability.distribution.is_some() + || !ability.target_constraints.is_empty() + { + return None; + } + // THE ANNOUNCEMENT AUTHORITY, not a proxy for it. Everything above is an ability FACT; + // this is the only conjunct that asks the questions the published point actually + // answers — "how many choices does announcing this entry require, is each one + // mandatory, and WHICH objects or players may be chosen?" `Effect::target_filter()` + // (below) cannot answer any of them: it reports the head effect's filter, while + // CR 601.2c ("if the spell uses the word 'target' in multiple places, the same object + // or player can be chosen once for each instance") — reached for a triggered ability + // via CR 603.3d — makes a CHAINED sub-ability's own target a SECOND independent choice, + // with its OWN legal set. `build_target_slots` is the function + // `stack_entry_has_no_ordering_input` itself rebuilds slots with (via + // `forced_unique_targeting`), so mint and relief now measure the same quantities. + // + // Exactly one MANDATORY slot over PLAYERS, and each of the three parts is load-bearing + // — the first two discriminated by + // `bounded_cycle_pin_slots_requires_a_single_mandatory_announcement_slot`, the third by + // `bounded_cycle_pin_slots_legal_set_comes_from_the_announcement_authority`: + // * `len() == 1` — a chained second "target" (2 slots) or an effect whose filter the + // SLOT BUILDER declines (0 slots: `triggers::extract_target_filter_from_effect` + // carves out `Sacrifice`/`UnattachAll`/… for which `Effect::target_filter()` still + // returns `Some`, and `target_choice_timing == Resolution` surfaces no stack slot at + // all) would leave the published `min/max_targets: 1` contradicting the announcement. + // * `!optional` — `ability.optional_targeting` ("up to one target") makes the real + // minimum ZERO (CR 601.2c), and its slot may legally carry an EMPTY legal set, so a + // `min_targets: 1` point would over-state the choice the offer specifies. + // * every legal target is a PLAYER (CR 115.2) — the head effect can declare the + // player shape while the ONE slot the announcement actually surfaces belongs to a + // chained sub-ability targeting OBJECTS (measured: head `LoseLife` at + // `TargetChoiceTiming::Resolution` contributing 0 slots + a chained + // `LoseLife{Typed{[Creature]}}` contributing 1, legal set three objects). A + // `TargetPin::Player` cannot specify such a choice, so publishing it would hand + // gate (3)'s `continue` a slot no pin can answer. + // + // `Err` (no legal target, CR 603.3d) also yields `None` — fail-closed, matching this + // function's contract that the schema can only ever UNDER-publish. Purity survives: + // `build_target_slots` never reads `state.waiting_for` (its only hit in + // `ability_utils.rs` is a test at `:7722`). + let mut slots = super::ability_utils::build_target_slots(state, ability).ok()?; + if slots.len() != 1 { + return None; + } + let slot = slots.swap_remove(0); + if slot.optional + || !slot + .legal_targets + .iter() + .all(|target| matches!(target, crate::types::ability::TargetRef::Player(_))) + { + return None; + } + // SHAPE conjunct only — the legal set above is already the announcement authority's, and + // the predicate's `bool` return makes re-deriving one from the head filter impossible + // rather than merely discouraged. This rejects a head effect that is not the CR 115.2 + // "target opponent" declaration, which an all-`Player` legal set alone does not + // (`controller: You` builds exactly one mandatory slot whose legal set is the + // controller — measured). + if !declares_opponent_player_target(ability) { + return None; + } + let source = object_decision_source(state, entry.source_id)?; + Some(EntryPinSlots { + target: DecisionSlot { + source: source.clone(), + index: 0, + }, + may: ability + .optional + .then_some(DecisionSlot { source, index: 1 }), + legal_targets: slot.legal_targets, + }) +} + +/// CR 732.2a: the per-iteration decision points a BOUNDED cycle shortcut must publish for +/// `proposer` — one `Targets` point per proposer-controlled triggered-ability SOURCE that +/// declares a single *player* target (CR 115.2), plus a `MayChoice` point (CR 603.5) when +/// that ability is optional. +/// +/// Only a *published* slot is a "specified choice" in CR 732.2a's sense; an unpublished +/// per-opponent choice would make the proposal a conditional action. This is the SINGLE +/// authority for that slot set — the offer's cover call, its schema, the drive's cover call +/// and the per-cycle `predictability_gate` all read the same list. +/// +/// PURE function of `(state.stack, state.objects, proposer)`. It deliberately does **not** +/// read `state.waiting_for`, and it cannot: both production call sites run at +/// `WaitingFor::Priority` (`interactive_loop_bridge`'s destructure, and the drive's +/// `Priority{active}` settle arm), where no prompt and no materialized `legal_targets` +/// exist. The legal set is the one `ability_utils::build_target_slots` built for the +/// accepted announcement slot, carried through verbatim — so the SAME authority answers +/// how many choices exist and which targets each admits. That builder routes this filter +/// shape to the native authority [`crate::game::targeting::find_legal_targets`] +/// (`ability_utils.rs:4382-4402`: no ability-context ref, no relative controller), which +/// already excludes eliminated players (CR 800.4a, `targeting.rs:200-201`) — never a +/// declaration, so the offer still cannot ratify its own pin. Note the enumeration context +/// shifts with the authority: it is now the ABILITY's own `controller`/`source_id` +/// (CR 601.2c — the ability's controller announces its targets) rather than the offer's +/// `proposer` and the stack entry's `source_id`. +/// +/// Fail-closed: an entry whose source object is gone yields NO point (rather than a point +/// with an unbindable slot), so the schema can only ever under-publish. +/// +/// Class served: every proposer-controlled triggered ability on the stack whose declared +/// target is a player — never a named card. Command-zone sources (CR 114.2 emblems) are +/// included; [`slot_source_prompted`] is the matching half at replay time. +/// +/// PER SOURCE, NOT PER ENTRY: N stack entries from ONE source mint N byte-identical +/// `DecisionSlot`s (real boards reach 35 entries on one source), and the sub-index +/// disambiguates choices WITHIN an ability instance, not instances of it +/// ([`crate::analysis::decision_template::DecisionSlot`]'s own doc). Publishing the same +/// slot N times would make the frontend render N identical pickers and +/// `predictability_gate` demand N pins for a choice [`inject_pinned_answer`] answers ONCE +/// per source (its `find_map` matches on the slot's SOURCE and is index-blind). So the +/// offer publishes the SET of open choices; one state-independent pin ("always target +/// P1") specifies every instance of it. +/// +/// VISIBILITY GATE: this phase ships the enumerator with NO production caller — an offer +/// that publishes these slots is a later commit — so it is gated behind the repo's +/// `test-support` boundary (the same one `game::scenario` uses) rather than widening the +/// crate's public surface for an unused item. The gate lifts, unchanged, when the bounded +/// offer that consumes it lands. +#[cfg(any(test, feature = "test-support"))] +pub fn bounded_cycle_pin_slots( + state: &GameState, + proposer: PlayerId, +) -> Vec { + use crate::analysis::decision_template::{DecisionPoint, DecisionPointKind}; + let mut points: Vec = Vec::new(); + for entry in &state.stack { + let Some(pins) = entry_publishes_pin_slots(state, entry, proposer) else { + continue; + }; + if !points.iter().any(|p| p.slot == pins.target) { + points.push(DecisionPoint { + slot: pins.target, + kind: DecisionPointKind::Targets { + // VERBATIM the slot `ability_utils::build_target_slots` built for this + // announcement — not a second derivation. That is what makes WHICH + // choice is published and HOW MANY choices are published the same + // authority's answers, so they cannot disagree. + legal_targets: pins.legal_targets, + // Exactly one, and that cannot contradict the ANNOUNCEMENT: the + // acceptance test admits an entry only when + // `ability_utils::build_target_slots` — the authority that decides how + // many choices announcing it actually requires (CR 601.2c via + // CR 603.3d) — yields exactly one MANDATORY slot. An ability-fact + // check alone (`multi_target` / CR 601.2d division) does NOT bound + // the slot count: a chained sub-ability's own "target" is a second + // instance of the word and a second slot. + min_targets: 1, + max_targets: 1, + ordered: false, + }, + }); + } + // CR 603.5: "the choice is made when the ability resolves" — a "may" gate on the + // same source is a SECOND per-iteration choice, published so the declaration must + // pin it too. + if let Some(may) = pins.may { + if !points.iter().any(|p| p.slot == may) { + points.push(DecisionPoint { + slot: may, + kind: DecisionPointKind::MayChoice, + }); + } + } + } + points +} + /// CR 732.2a: assemble a loop-shortcut offer's READ-side schema from its already-reified /// decision `points`, its proposed repeat mode, and its CR 704 count bound. /// @@ -1584,10 +1869,7 @@ fn inject_pinned_answer( .into_iter() .find_map(|d| match d { ConcreteDecision::Targets { slot, targets } - if crate::analysis::decision_template::resolve_source( - &slot.source, - work, - ) == Some(source_id) => + if slot_source_prompted(work, &slot.source, source_id) => { Some(targets) } @@ -1616,6 +1898,44 @@ fn inject_pinned_answer( } } +/// CR 608.2b + CR 114.2: does this SLOT's source identify the ability instance that raised +/// the prompt carrying `source_id`? +/// +/// [`crate::analysis::decision_template::resolve_source`] is deliberately BATTLEFIELD-ONLY, +/// and that filter IS the CR 608.2b (`docs/MagicCompRules.txt:2789`) legality re-check for +/// `ByIdentity` **target** pins — a pinned target that left the battlefield must stop +/// matching. It must not be widened. But a SLOT's source only identifies WHICH ability +/// instance prompts, and CR 114.2 (`:828`) puts a planeswalker EMBLEM — "both owned and +/// controlled by that player" — in the **command zone**, where it stays for the whole game +/// and raises its triggers from. So the command-zone disjunct lives HERE, at the caller, +/// scoped to object identity + the pinned CR 400.7 incarnation. +/// +/// Graveyard / exile / hand sources still fail ⇒ the caller aborts to manual play. +fn slot_source_prompted( + state: &GameState, + src: &crate::analysis::decision_template::DecisionSource, + source_id: ObjectId, +) -> bool { + if crate::analysis::decision_template::resolve_source(src, state) == Some(source_id) { + return true; + } + // CR 114.2: the command-zone arm. `AllCopies` is card-identity matching and an emblem + // has no card, so only `ThisObject` participates. + let crate::types::game_state::YieldTarget::ThisObject { + source_id: pinned_id, + incarnation, + .. + } = src + else { + return false; + }; + *pinned_id == source_id + && state.objects.get(pinned_id).is_some_and(|o| { + o.zone == crate::types::zones::Zone::Command + && (incarnation.is_none() || *incarnation == Some(o.incarnation)) + }) +} + /// PR-7 Phase 4b: CR 732.2a finite materialization of a confirmed `Fixed(N)` loop /// shortcut. Drives `n` whole cycles of the constant-depth (or ω-covering) loop, /// committing atomically per cycle. If a cycle crosses lethal, the win arrives @@ -1931,7 +2251,7 @@ fn pinnable_mana_color( /// FIX-1 (CR 400.7): a live-object identity source for a pin — `ThisObject` bound to the object's /// CURRENT incarnation, so a re-entered permanent (new incarnation) stops matching and the loop is /// correctly re-detected rather than falsely replayed. `None` if the object is absent. -fn object_decision_source( +pub(crate) fn object_decision_source( state: &GameState, id: ObjectId, ) -> Option { @@ -11780,6 +12100,572 @@ mod stage2_injector_tests { "RoundRobin(MAX+5) clamps to MAX_SHORTCUT_CYCLES" ); } + + /// Place a bare object in `zone` without touching the zone vectors — enough for the + /// identity/zone predicates under test, which read `state.objects` only. + fn place(state: &mut GameState, id: u64, zone: crate::types::zones::Zone) -> ObjectId { + let oid = ObjectId(id); + let mut o = crate::game::game_object::GameObject::new( + oid, + CardId(0), + P0, + "Emblem".to_string(), + zone, + ); + o.incarnation = 3; + state.objects.insert(oid, o); + oid + } + + /// CR 114.2 + CR 608.2b: a pinned SLOT whose source is a command-zone emblem must match + /// the prompt that emblem raised; a graveyard or exile source must NOT. + /// + /// This is the zone predicate `inject_pinned_answer`'s `TriggerTargetSelection` arm + /// dispatches on. Its production drive lands with the bounded offer in a later commit, + /// so it is pinned here at the seam — the shipped BATTLEFIELD arm is exercised + /// end-to-end by `injector_routes_pinned_targets_per_source` above and by the + /// `kilo_live_offer_from_real_dump` rows, and this row asserts that arm is unchanged. + /// + /// REVERT-PROBES: (a) delete the command-zone disjunct in `slot_source_prompted` ⇒ the + /// Command assertion FAILS (and `inject_pinned_answer` would `RecastAbort` on an + /// emblem-pinned drive); (b) widen the disjunct to accept any zone ⇒ the graveyard and + /// exile assertions FAIL; (c) drop the incarnation conjunct ⇒ the CR 400.7 assertion + /// FAILS. + #[test] + fn command_zone_sourced_slot_matches_and_graveyard_still_aborts() { + use crate::types::zones::Zone; + let mut state = GameScenario::new_n_player(2, 7).build().state().clone(); + let battlefield = place(&mut state, 900, Zone::Battlefield); + let emblem = place(&mut state, 901, Zone::Command); + let graveyard = place(&mut state, 902, Zone::Graveyard); + let exiled = place(&mut state, 903, Zone::Exile); + + let pin = |id: ObjectId, inc: Option| YieldTarget::ThisObject { + source_id: id, + incarnation: inc, + trigger_description: None, + }; + + // Shipped behaviour, unchanged: the battlefield arm still matches. + assert!( + slot_source_prompted(&state, &pin(battlefield, Some(3)), battlefield), + "the shipped CR 608.2b battlefield arm must be untouched" + ); + // NEW: CR 114.2 — an emblem lives in the command zone and prompts from there. + assert!( + slot_source_prompted(&state, &pin(emblem, Some(3)), emblem), + "CR 114.2: a command-zone emblem's slot must match the prompt it raised" + ); + // Fail-closed: every other off-battlefield zone still misses ⇒ `RecastAbort`. + assert!( + !slot_source_prompted(&state, &pin(graveyard, Some(3)), graveyard), + "a graveyard-sourced slot must NOT match — the drive aborts to manual" + ); + assert!( + !slot_source_prompted(&state, &pin(exiled, Some(3)), exiled), + "an exile-sourced slot must NOT match" + ); + // CR 400.7: the command arm re-binds ONE incarnation, exactly like the + // battlefield arm — a re-created emblem does not answer the old pin. + assert!( + !slot_source_prompted(&state, &pin(emblem, Some(2)), emblem), + "CR 400.7: a stale incarnation must not match even in the command zone" + ); + // A pin naming a DIFFERENT object never answers this prompt. + assert!( + !slot_source_prompted(&state, &pin(emblem, Some(3)), battlefield), + "the matcher is keyed on identity, not merely on zone" + ); + } + + /// CR 732.2a + CR 603.5: `bounded_cycle_pin_slots` publishes the per-iteration TARGET + /// choice for a proposer-controlled player-targeting trigger, plus a second `MayChoice` + /// point (disambiguated by `slot.index`) when that trigger is optional. + /// + /// MATCHED PAIRS, one variable each: + /// * `optional` false ⇒ 1 point; true ⇒ 2 points. REVERT-PROBE: delete the `optional` + /// branch ⇒ the 2-point assertion FAILS. + /// * controller == proposer ⇒ published; a bystander proposer gets nothing. + /// REVERT-PROBE: delete the `entry.controller != proposer` filter ⇒ the bystander + /// assertion FAILS. + #[test] + fn bounded_cycle_pin_slots_publishes_the_may_gate_of_an_optional_trigger() { + use crate::analysis::decision_template::{DecisionPointKind, DecisionSlot}; + use crate::types::ability::{ + ControllerRef, Effect, QuantityExpr, ResolvedAbility, TargetFilter, TypedFilter, + }; + + let mut state = GameScenario::new_n_player(3, 7).build().state().clone(); + let src = place(&mut state, 910, crate::types::zones::Zone::Battlefield); + + let entry = |id: u64, controller: PlayerId, optional: bool| { + let mut ability = ResolvedAbility::new( + Effect::LoseLife { + amount: QuantityExpr::Fixed { value: 1 }, + target: Some(TargetFilter::Typed(TypedFilter { + type_filters: vec![], + controller: Some(ControllerRef::Opponent), + properties: vec![], + })), + }, + vec![], + src, + controller, + ); + ability.optional = optional; + StackEntry { + id: ObjectId(id), + source_id: src, + controller, + kind: StackEntryKind::TriggeredAbility { + source_id: src, + ability: Box::new(ability), + condition: None, + trigger_event: None, + description: None, + source_name: String::new(), + subject_match_count: None, + die_result: None, + }, + } + }; + let live_source = + object_decision_source(&state, src).expect("the source is on the battlefield"); + let expected_slot = |index: u8| DecisionSlot { + source: live_source.clone(), + index, + }; + + // Mandatory: exactly one point, the target choice. + state.stack.push_back(entry(920, P0, false)); + let mandatory = bounded_cycle_pin_slots(&state, P0); + assert_eq!( + mandatory.len(), + 1, + "a mandatory trigger publishes one point" + ); + assert_eq!(mandatory[0].slot, expected_slot(0)); + assert!( + matches!( + &mandatory[0].kind, + DecisionPointKind::Targets { legal_targets, .. } + if *legal_targets == vec![TargetRef::Player(P1), TargetRef::Player(P2)] + ), + "the legal set comes from `find_legal_targets`, not from a declaration: {:?}", + mandatory[0].kind + ); + + // Bystander proposer: the same board publishes nothing for a seat that controls + // none of the entries (CR 732.2a — the proposer specifies their OWN choices). + assert!( + bounded_cycle_pin_slots(&state, P1).is_empty(), + "a bystander proposer controls none of these choices" + ); + + // Optional: the SAME entry with one field flipped publishes the CR 603.5 gate too. + state.stack.clear(); + state.stack.push_back(entry(921, P0, true)); + let optional = bounded_cycle_pin_slots(&state, P0); + assert_eq!( + optional.len(), + 2, + "an optional trigger publishes two points" + ); + assert_eq!( + optional[1].slot, + expected_slot(1), + "`slot.index` disambiguates" + ); + assert_eq!(optional[1].kind, DecisionPointKind::MayChoice); + + // Fail-closed: no source object ⇒ no point (never a slot that cannot re-bind). + state.objects.remove(&src); + assert!( + bounded_cycle_pin_slots(&state, P0).is_empty(), + "an absent source emits nothing rather than an unbindable slot" + ); + } + + /// Each of [`declares_opponent_player_target`]'s three conjuncts, discriminated + /// SEPARATELY. The gross "accept any `Typed`" widening is caught by the row above; this + /// row is what fails when ONE conjunct is dropped. + /// + /// Why each matters: `find_legal_targets` collapses a `Typed` filter to PLAYERS ONLY + /// when both `type_filters` and `properties` are empty (`targeting.rs:192-193`, issue + /// #2004). A type- or property-bearing filter therefore falls through to OBJECT + /// enumeration — publishing it would put a point whose legal set is object refs into + /// player-pin machinery. `controller: You` does collapse to players, but to exactly ONE + /// (the controller), which is not the per-opponent choice a bounded drain cycle pins. + /// + /// THE BOARD IS LOAD-BEARING, and picking the wrong one is what hollows this row out. + /// On a head-announced board an object-shaped filter enumerates NOTHING, so + /// `build_target_slots` returns `Err` and the caller's CARDINALITY conjunct rejects + /// first — measured: with both arms on that board, dropping `type_filters.is_empty()` or + /// `properties.is_empty()` left the row GREEN. Those two arms therefore run on the + /// MIRROR shape, the one thing they alone reject: an object-shaped head at + /// `TargetChoiceTiming::Resolution` (announces nothing) chained to a `target opponent` + /// sub-ability (announces the one slot). Cardinality and all-`Player` both pass there. + /// The per-arm reach-guard asserts that announced slot verbatim, so a future change that + /// re-hollows an arm fails the reach-guard instead of passing silently. + /// + /// REVERT-PROBES (each measured on the boards below): drop `type_filters.is_empty()` ⇒ + /// ONLY the Creature arm publishes; drop `properties.is_empty()` ⇒ ONLY the Token arm; + /// drop `controller == Some(Opponent)` ⇒ ONLY the `You` arm. The accepted shape is + /// asserted to publish in the SAME row, so a constant-`false` predicate cannot pass. + #[test] + fn bounded_cycle_pin_slots_conjuncts_are_each_load_bearing() { + use crate::types::ability::{ + ControllerRef, Effect, FilterProp, QuantityExpr, ResolvedAbility, TargetChoiceTiming, + TargetFilter, TargetRef, TypeFilter, TypedFilter, + }; + + let mut base = GameScenario::new_n_player(3, 7).build().state().clone(); + let src = place(&mut base, 940, crate::types::zones::Zone::Battlefield); + + let board = |ability: ResolvedAbility| { + let mut state = base.clone(); + state.stack.push_back(StackEntry { + id: ObjectId(950), + source_id: src, + controller: P0, + kind: StackEntryKind::TriggeredAbility { + source_id: src, + ability: Box::new(ability), + condition: None, + trigger_event: None, + description: None, + source_name: String::new(), + subject_match_count: None, + die_result: None, + }, + }); + state + }; + let accepted = TypedFilter { + type_filters: vec![], + controller: Some(ControllerRef::Opponent), + properties: vec![], + }; + let head_only = |tf: TypedFilter| { + ResolvedAbility::new( + Effect::LoseLife { + amount: QuantityExpr::Fixed { value: 1 }, + target: Some(TargetFilter::Typed(tf)), + }, + vec![], + src, + P0, + ) + }; + // The head's own choice is made on resolution, so CR 601.2c is never reached for it + // and it announces no slot; the ONE announced slot is the chained sub-ability's + // `target opponent` player choice (CR 603.3d). Cardinality and all-`Player` pass + // whatever shape the head declares — which is what leaves the head-shape conjunct + // alone to reject. + let chained = |head: TypedFilter| { + let mut ability = head_only(head); + ability.target_choice_timing = TargetChoiceTiming::Resolution; + ability.sub_ability = Some(Box::new(head_only(accepted.clone()))); + ability + }; + + // POSITIVE CONTROL, same row: the accepted "target opponent" shape publishes. + assert_eq!( + bounded_cycle_pin_slots(&board(head_only(accepted.clone())), P0).len(), + 1, + "the accepted CR 115.2 player shape must publish — otherwise the three zeros \ + below are vacuous" + ); + + let opponents = vec![TargetRef::Player(P1), TargetRef::Player(P2)]; + // Collected, not asserted per-arm: a revert-probe must show which arms flipped, and + // a bare `assert!` in the loop would abort at the first and hide the rest. + let mut still_published: Vec<&str> = Vec::new(); + for (label, ability, announced) in [ + ( + "type_filters: a creature filter enumerates OBJECTS, not players", + chained(TypedFilter { + type_filters: vec![TypeFilter::Creature], + ..accepted.clone() + }), + opponents.clone(), + ), + ( + "properties: issue #2004 — `token` is an object characteristic", + chained(TypedFilter { + properties: vec![FilterProp::Token], + ..accepted.clone() + }), + opponents.clone(), + ), + ( + "controller: `You` is a single forced seat, not a per-opponent choice", + head_only(TypedFilter { + controller: Some(ControllerRef::You), + ..accepted.clone() + }), + vec![TargetRef::Player(P0)], + ), + ] { + let state = board(ability); + let announcement = crate::game::ability_utils::build_target_slots( + &state, + state.stack[0] + .ability() + .expect("the board pushes a trigger"), + ) + .map(|slots| { + slots + .iter() + .map(|slot| (slot.optional, slot.legal_targets.clone())) + .collect::>() + }) + .ok(); + assert_eq!( + announcement, + Some(vec![(false, announced)]), + "reach-guard [{label}]: exactly ONE mandatory slot and every candidate a \ + PLAYER — so the cardinality and all-`Player` conjuncts both PASS on this \ + board and the head-shape conjunct under test is the SOLE rejector" + ); + if !bounded_cycle_pin_slots(&state, P0).is_empty() { + still_published.push(label); + } + } + assert!( + still_published.is_empty(), + "each conjunct must reject its own arm ALONE; these arms published anyway: \ + {still_published:?}" + ); + + // ORDERING-INPUT CONJUNCTS. The published point declares `min/max_targets: 1`, and + // the gate-(3) relief is a bare `continue` that discharges the WHOLE of + // `stack_entry_has_no_ordering_input` (analysis/resource.rs) — which rejects on + // four facts, only one of which a slot answers. The three ABILITY facts must block + // publication outright (the state-dependent fourth, `pending_trigger_entry`, is the + // relief's, pinned by `a_pinned_slot_skips_gate_three_and_six`'s arm 5). Shares the + // positive control above. + { + use crate::types::ability::MultiTargetSpec; + use crate::types::game_state::TargetSelectionConstraint; + + fn ability_of(state: &mut GameState) -> &mut ResolvedAbility { + let StackEntryKind::TriggeredAbility { ability, .. } = &mut state.stack[0].kind + else { + unreachable!("the fixture board pushes a TriggeredAbility") + }; + ability.as_mut() + } + + type Mutate = fn(&mut GameState); + let ordering_input: [(&str, Mutate); 3] = [ + ("multi_target — CR 601.2c variable target count", |s| { + ability_of(s).multi_target = Some(MultiTargetSpec::fixed(1, 2)) + }), + ("distribution — CR 601.2d divide-among", |s| { + ability_of(s).distribution = Some(vec![(TargetRef::Player(P1), 1)]) + }), + ("target_constraints — CR 601.2c cross-target", |s| { + ability_of(s).target_constraints = + vec![TargetSelectionConstraint::DifferentTargetPlayers] + }), + ]; + for (label, mutate) in ordering_input { + let mut state = board(head_only(accepted.clone())); + mutate(&mut state); + assert!( + bounded_cycle_pin_slots(&state, P0).is_empty(), + "{label}: announcement-time ordering input NO published slot specifies \ + ⇒ the mint must not publish" + ); + } + } + } + + /// The real 4p acceptance board (dump B): a CR 114.2 emblem in the COMMAND zone + /// (obj 541, incarnation 0) whose triggered ability drains `target opponent`. + fn load_dellian_dump() -> GameState { + use crate::types::game_state::PersistedGameState; + use std::io::Read; + let gz: &[u8] = include_bytes!("../../tests/fixtures/dellian_emblem_conqueror_4p.json.gz"); + let mut json = String::new(); + flate2::read::GzDecoder::new(gz) + .read_to_string(&mut json) + .expect("fixture inflates"); + let envelope: serde_json::Value = serde_json::from_str(&json).expect("envelope parses"); + let raw: GameState = + serde_json::from_value(envelope["gameState"].clone()).expect("gameState deserializes"); + PersistedGameState::Raw(Box::new(raw)).into_game_state() + } + + const EMBLEM: ObjectId = ObjectId(541); + + /// CR 732.2a: the offer publishes the SET of open per-iteration choices — one point per + /// SOURCE, not one per stack ENTRY. + /// + /// `DecisionSlot`'s sub-index disambiguates two choices of ONE ability instance, so N + /// entries from one source would mint N byte-identical slots: N identical frontend + /// pickers, and `predictability_gate` demanding N pins for a choice + /// `inject_pinned_answer` answers ONCE per source (its `find_map` matches on the slot's + /// SOURCE and is index-blind). Real boards reach this shape — this very dump carries 35 + /// entries on source 25, 34 on 126 and 34 on 208. + /// + /// Built on the LOADED 4p board plus ONE measured mutation: a byte-copy of the real + /// emblem entry under a fresh stack-entry id, which is exactly what a second loop + /// iteration puts there. + /// + /// REVERT-PROBE: drop either `points.iter().any(|p| p.slot == ..)` dedupe guard ⇒ the + /// two-entry board publishes 2 points ⇒ FAILS. + #[test] + fn bounded_cycle_pin_slots_publishes_one_point_per_source_not_per_entry() { + let mut state = load_dellian_dump(); + let emblem_entry = state + .stack + .iter() + .find(|e| e.source_id == EMBLEM) + .expect("reach-guard: the dump carries the emblem's trigger") + .clone(); + let single = bounded_cycle_pin_slots(&state, P0); + assert_eq!( + single.len(), + 1, + "reach-guard: the shipped board qualifies exactly one source" + ); + + let mut second = emblem_entry; + second.id = ObjectId(9_001); + state.stack.push_back(second); + assert_eq!( + state.stack.iter().filter(|e| e.source_id == EMBLEM).count(), + 2, + "reach-guard: two live entries now share one source" + ); + + assert_eq!( + bounded_cycle_pin_slots(&state, P0), + single, + "a second entry from the SAME source is the same open choice — one published \ + point, byte-identical to the one-entry board's" + ); + } + + /// CR 114.2 + CR 608.2b, on a REAL restored 4p board: `inject_pinned_answer` accepts a + /// pin whose slot source is the COMMAND-zone emblem (obj 541) that raised the prompt. + /// + /// This is the production-path row for [`slot_source_prompted`]. The seam is live + /// TODAY: `inject_pinned_answer` calls it, and every pin-recording site builds its slot + /// source with the zone-agnostic `object_decision_source`, so a command-zone-sourced pin + /// already flips from `RecastAbort` (safe handback) to accepted injection. + /// + /// The dump ships AT that prompt (`TriggerTargetSelection { source_id: 541 }`), so no + /// synthetic placement is involved. + /// + /// REVERT-PROBES (each measured): delete the command-zone disjunct ⇒ the accept arm + /// raises `RecastAbort` ⇒ FAILS; drop the incarnation conjunct ⇒ the stale-pin arm is + /// accepted ⇒ FAILS. The negative arms are paired with a positive on the SAME board, so + /// neither an always-accept nor an always-abort matcher survives. + #[test] + fn a_command_zone_pin_answers_a_real_restored_boards_prompt() { + let state = load_dellian_dump(); + + // ── reach guards, all read off the loaded board ── + let emblem = state + .objects + .get(&EMBLEM) + .expect("reach-guard: dump B carries the emblem object"); + assert_eq!( + emblem.zone, + crate::types::zones::Zone::Command, + "reach-guard: CR 114.2 puts the emblem in the command zone" + ); + let emblem_incarnation = emblem.incarnation; + let WaitingFor::TriggerTargetSelection { + source_id: Some(prompt_source), + .. + } = &state.waiting_for + else { + panic!( + "reach-guard: the dump ships at the emblem's target prompt; got {:?}", + state.waiting_for + ); + }; + assert_eq!( + *prompt_source, EMBLEM, + "reach-guard: it is the EMBLEM's prompt that is up" + ); + + let src = object_decision_source(&state, EMBLEM).expect("the emblem object exists"); + // The control that makes this row non-vacuous: the shipped battlefield-only + // `resolve_source` does NOT match this source, so an accept can only come from the + // CR 114.2 disjunct. + assert_eq!( + crate::analysis::decision_template::resolve_source(&src, &state), + None, + "CR 608.2b: `resolve_source` is battlefield-only and must stay so" + ); + + let template = |source: YieldTarget| DecisionTemplate { + owner: P0, + decisions: vec![PinnedDecision::Targets { + slot: DecisionSlot { + source: source.clone(), + index: 0, + }, + targets: vec![TargetPin::Player(P1)], + }], + replay: ReplayMode::Scheduled { + count: IterationCount::UntilLethal, + }, + key: DecisionGroupKey::from_sources(&[source], DecisionKind::LoopChoice), + }; + let prompt = state.waiting_for.clone(); + + // ── ACCEPT: the command-zone pin answers the prompt on the real board ── + let mut work = state.clone(); + inject_pinned_answer(&mut work, Some(&template(src.clone())), 0, &prompt) + .expect("CR 114.2: the emblem's own pin must answer the prompt it raised"); + assert_ne!( + work.waiting_for, prompt, + "the prompt was actually consumed, not silently skipped" + ); + assert!( + !matches!( + &work.waiting_for, + WaitingFor::TriggerTargetSelection { + source_id: Some(id), + .. + } if *id == EMBLEM + ), + "the emblem's target prompt is answered; got {:?}", + work.waiting_for + ); + + // ── CR 400.7: a pin latched to a stale incarnation must NOT answer it ── + let stale = YieldTarget::ThisObject { + source_id: EMBLEM, + incarnation: Some(emblem_incarnation + 1), + trigger_description: None, + }; + let mut stale_work = state.clone(); + assert!( + inject_pinned_answer(&mut stale_work, Some(&template(stale)), 0, &prompt).is_err(), + "CR 400.7: a stale-incarnation pin hands back to manual play" + ); + + // ── fail-closed: a pin naming a DIFFERENT object never answers this prompt ── + let other = state + .stack + .iter() + .map(|e| e.source_id) + .find(|id| *id != EMBLEM) + .expect("the 152-deep stack carries other sources"); + let other_src = object_decision_source(&state, other).expect("that source exists"); + let mut other_work = state.clone(); + assert!( + inject_pinned_answer(&mut other_work, Some(&template(other_src)), 0, &prompt).is_err(), + "a pin for another source does not answer the emblem's prompt" + ); + } } /// FIX-1 interruptibility (memory: combo-interruptibility-acceptance-criterion) — the Kilo loop's diff --git a/crates/engine/tests/integration/loop_shortcut.rs b/crates/engine/tests/integration/loop_shortcut.rs index e77f9aea16..5d71661f66 100644 --- a/crates/engine/tests/integration/loop_shortcut.rs +++ b/crates/engine/tests/integration/loop_shortcut.rs @@ -5155,6 +5155,149 @@ fn two_site_retention_survives_a_prompt_and_its_answer() { ); } +/// PR-7 Phase 5a — CR 732.2a per-iteration pin enumeration, on a REAL 4p board. +/// +/// `bounded_cycle_pin_slots` is the single authority for the choice slots a bounded cycle +/// offer must publish. Dump B is the acceptance population: obj **541** is a CR 114.2 +/// emblem (command zone, "both owned and controlled by that player") whose triggered +/// ability drains `target opponent`, i.e. the +/// `Typed{type_filters: [], controller: Opponent, properties: []}` player shape. +/// +/// **TWO ARMS, and the pairing is the whole point.** The dump ships with the prompt UP +/// (`TriggerTargetSelection` carrying already-materialized `legal_targets`), so arm ⓐ alone +/// would pass against a prompt-READING implementation — which returns ZERO slots at the +/// real offer beat, where `waiting_for` is `Priority`. Arm ⓑ is the identical state with +/// exactly one field reassigned. +/// +/// REVERT-PROBES (both must flip): +/// * ⓘ narrow the AST predicate so `Typed{[], Opponent, []}` is rejected ⇒ BOTH arms return +/// zero ⇒ FAILS. +/// * ⓙ re-implement the enumerator to read `state.waiting_for`'s +/// `target_slots[..].legal_targets` ⇒ arm ⓐ still passes, arm ⓑ returns zero ⇒ FAILS. +/// * ⓐ' delete the `entry.controller != proposer` filter ⇒ the bystander-proposer +/// assertion FAILS. (On THIS board every one of the 152 stack entries is P0-controlled — +/// measured — so the honest form of that probe is a bystander proposer, not a rising +/// count for P0.) +/// +/// MUST-NOT-FLIP: `bounded_cycle_pin_slots(..).is_empty()` on the shipped +/// `b3_materialize_stop_short` offer board — asserted, not assumed. That zero is the +/// byte-identity pin for every shipped `Fixed(N)` drive, and pairing it with dump B's +/// non-zero in the SAME row proves the instrument returns both values. +#[test] +fn bounded_cycle_pin_slots_enumerates_the_emblem_slot() { + use engine::game::engine::bounded_cycle_pin_slots; + use engine::types::zones::Zone; + + const EMBLEM: ObjectId = ObjectId(541); + const P3: PlayerId = PlayerId(3); + + let mut state = restore_dump(&gunzip_dump(include_bytes!( + "../fixtures/dellian_emblem_conqueror_4p.json.gz" + ))); + + // ── reach guards, all derived from the loaded board, none from the predicate ── + let emblem = state + .objects + .get(&EMBLEM) + .expect("reach-guard: dump B carries the emblem object"); + assert_eq!( + emblem.zone, + Zone::Command, + "reach-guard: CR 114.2 puts the emblem in the command zone — the whole reason this \ + row exists (a battlefield-only slot builder would be untested by it)" + ); + let emblem_incarnation = emblem.incarnation; + let emblem_entries = state.stack.iter().filter(|e| e.source_id == EMBLEM).count(); + assert_eq!( + emblem_entries, 1, + "reach-guard, measured off the loaded 152-deep stack: the emblem has exactly one \ + live entry here, so this row's COUNT carries no claim about the per-SOURCE dedupe \ + — that is \ + `bounded_cycle_pin_slots_publishes_one_point_per_source_not_per_entry`'s job" + ); + assert_eq!( + engine_live_opponents(&state, P0), + vec![P1, P2, P3], + "reach-guard: three living opponents, so the per-iteration choice is REAL" + ); + + let expected_slot = DecisionSlot { + source: YieldTarget::ThisObject { + source_id: EMBLEM, + incarnation: Some(emblem_incarnation), + trigger_description: None, + }, + index: 0, + }; + let expected_legal = vec![ + TargetRef::Player(P1), + TargetRef::Player(P2), + TargetRef::Player(P3), + ]; + + // ── arm ⓐ: the shipped board, prompt UP ── + assert!( + matches!(state.waiting_for, WaitingFor::TriggerTargetSelection { .. }), + "arm ⓐ precondition: the dump ships AT the prompt; got {:?}", + state.waiting_for + ); + let with_prompt = bounded_cycle_pin_slots(&state, P0); + assert_eq!( + with_prompt.len(), + emblem_entries, + "one point per qualifying SOURCE; on this board that count coincides with the \ + emblem's single entry, which is asserted above rather than assumed" + ); + for point in &with_prompt { + assert_eq!( + point.slot, expected_slot, + "the slot names the CR 114.2 command-zone emblem at its CR 400.7 incarnation" + ); + assert_eq!( + point.kind, + DecisionPointKind::Targets { + legal_targets: expected_legal.clone(), + min_targets: 1, + max_targets: 1, + ordered: false, + }, + "the legal set is `find_legal_targets`' native output (CR 115.2), not a \ + declaration echo" + ); + } + + // ── arm ⓑ: the SAME state at the real offer beat — one field reassigned ── + state.waiting_for = WaitingFor::Priority { player: P0 }; + assert_eq!( + bounded_cycle_pin_slots(&state, P0), + with_prompt, + "arm ⓑ: byte-for-byte the same slot set with NO prompt to read. Both production \ + call sites run at `WaitingFor::Priority`, so an implementation that reads \ + `target_slots[..].legal_targets` publishes nothing when it matters" + ); + + // ── ⓐ': a bystander proposer specifies none of these choices (CR 732.2a) ── + assert!( + state.stack.iter().all(|e| e.controller == P0), + "measured: every dump-B stack entry is P0-controlled, so the controller filter is \ + probed from the PROPOSER side" + ); + for bystander in [P1, P2, P3] { + assert!( + bounded_cycle_pin_slots(&state, bystander).is_empty(), + "a bystander ({bystander:?}) controls none of these entries" + ); + } + + // ── must-NOT-flip: the shipped Fixed(N) drive board publishes NOTHING ── + let (shipped, _l0, _cleric) = reach_2p_optional_drain_offer(); + assert!( + bounded_cycle_pin_slots(shipped.state(), P0).is_empty(), + "the untargeted `each opponent loses 1 life` drain reifies no per-iteration player \ + choice — every shipped Fixed(N) drive must stay byte-identical" + ); +} + /// Phase 1b crown-safety row. Retention only ADDS older frames to the ring, and /// `find_live_loop_winner` scans every suffix, so a window that crowns today must still /// crown after the exemption. Dump C is the population where that is measurable: it ships From a2a64ff2f2ee0ca46a049094b716c20397ec3bae Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Tue, 28 Jul 2026 07:54:23 -0500 Subject: [PATCH 02/62] feat(engine): bounded CR 732.2a cycle fast-forward for a multiplayer drain MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A draining loop never returns the board to a prior state, so board-recurrence alone cannot certify it. Add a second, board-blind basis: a periodic resource signature derived from the retained ring, which certifies a period only after seeing it twice, and publish a bounded shortcut whose iteration cap is the CR 704.5a elimination minimum computed from the live board. The board-blind basis needs a discriminant the board-based one gets for free. Without one it accepts the game's own turn structure — two players each drawing once per turn is a genuine repeating resource signature, and it minted a shortcut offer on a board with no loop at all. CR 732.2a permits a shortcut to cross turns, so the fix is scoped to the board-blind basis only: its certifying window must be turn-position invariant, expressed through the same window_scope_from_cover_frames authority the growing-class firewall already uses. Zero new predicates, types, or fields. Basis attribution is by discriminating probe, never by frames_per_period: basis A publishes 1 unconditionally and the board-blind basis at k==1 publishes the identical value, so equality discriminates nothing. That inference had already mislabeled a real four-player drain dump as board-recurrent; it is in fact the board-blind basis, and it is this feature's real-dump control. On a growing cascade the two bases are separated by whether the board carries a fire-time condition reading a projected resource axis -- not by which resources move. Recorded at the dispatch site, since both shipped row docs had asserted a resource-purity rule that measurement refuted on their own fixtures. CR 732.2a / CR 704.5a / CR 703.1a / CR 601.2c (each grepped in docs/MagicCompRules.txt) Tests: 22046 passed / 0 failed / 15 ignored (cargo test -p engine); cargo nextest run -p engine reports 22046 passed / 8 skipped -- it does not run doc-tests, so cite the runner. clippy --workspace --all-targets -D warnings clean. Assisted-by: ClaudeCode:claude-opus-4.8 --- crates/engine/src/ai_support/candidates.rs | 35 +- crates/engine/src/analysis/corpus_tests.rs | 3 + .../engine/src/analysis/decision_template.rs | 17 + crates/engine/src/analysis/loop_check.rs | 16 + crates/engine/src/analysis/resource.rs | 822 ++++++++++++++- crates/engine/src/game/engine.rs | 328 +++++- crates/engine/src/types/game_state.rs | 2 + .../tests/integration/interaction_contract.rs | 4 + .../engine/tests/integration/loop_shortcut.rs | 997 +++++++++++++++++- .../integration/loop_shortcut_mana_engine.rs | 1 + crates/phase-ai/src/policies/loop_shortcut.rs | 183 +++- crates/phase-ai/src/projection.rs | 1 + crates/phase-ai/src/search.rs | 1 + 13 files changed, 2356 insertions(+), 54 deletions(-) diff --git a/crates/engine/src/ai_support/candidates.rs b/crates/engine/src/ai_support/candidates.rs index 3b7281ae98..91bb60ac93 100644 --- a/crates/engine/src/ai_support/candidates.rs +++ b/crates/engine/src/ai_support/candidates.rs @@ -3232,21 +3232,43 @@ pub fn candidate_actions_broad_with_probe( // policy/search layer, rather than the candidate generator, decides whether an AI // proposer declares or returns to ordinary priority. // (Scored by `phase_ai::policies::loop_shortcut::LoopShortcutPolicy`.) - WaitingFor::LoopShortcut { proposer, .. } => vec![ - candidate( + WaitingFor::LoopShortcut { + proposer, schema, .. + } => { + let mut v = vec![candidate( GameAction::DeclareShortcut { count: crate::analysis::decision_template::IterationCount::UntilLethal, template: None, }, TacticalClass::Utility, Some(*proposer), - ), - candidate( + )]; + // CR 732.2a: a BOUNDED offer states a legal repetition count, and the declare + // handler rejects `UntilLethal` against one outright — so without this candidate + // the AI's only non-declining option at such a node is an answer the engine + // refuses. `ShortcutDecisionSchema::is_bounded()` is the engine's single + // authority for "this producer narrowed the bound"; do NOT re-spell it as a + // comparison against `MAX_SHORTCUT_CYCLES`. Gated on empty `points` because this + // candidate carries `template: None`, which a published pin set fail-closes on. + if schema.points.is_empty() && schema.is_bounded() { + v.push(candidate( + GameAction::DeclareShortcut { + count: crate::analysis::decision_template::IterationCount::Fixed( + schema.max_iterations, + ), + template: None, + }, + TacticalClass::Utility, + Some(*proposer), + )); + } + v.push(candidate( GameAction::DeclineShortcut, TacticalClass::Pass, Some(*proposer), - ), - ], + )); + v + } // CR 732.2b/c: an opponent answers a loop-shortcut offer. PR-7 Phase 4c (LOW-2): // self-preservation via the single-authority `smart_shortcut_response` — Shorten // when the polled player has a meaningful way to break the loop, else Accept. @@ -5234,6 +5256,7 @@ mod tests { win_kind: crate::analysis::loop_check::WinKind::LethalDamage, mandatory: false, residual_board_delta: crate::analysis::resource::BoardDelta::default(), + per_cycle: None, }, schema: crate::analysis::decision_template::ShortcutDecisionSchema::default(), }; diff --git a/crates/engine/src/analysis/corpus_tests.rs b/crates/engine/src/analysis/corpus_tests.rs index bd9d14d72b..7f2c6524bd 100644 --- a/crates/engine/src/analysis/corpus_tests.rs +++ b/crates/engine/src/analysis/corpus_tests.rs @@ -305,6 +305,7 @@ fn classify_status_compares_against_spec_not_rubber_stamp() { win_kind: WinKind::LethalDamage, mandatory: false, residual_board_delta: BoardDelta::default(), + per_cycle: None, }; assert!( matches!( @@ -320,6 +321,7 @@ fn classify_status_compares_against_spec_not_rubber_stamp() { win_kind: WinKind::Advantage, mandatory: false, residual_board_delta: BoardDelta::default(), + per_cycle: None, }; assert!( matches!( @@ -345,6 +347,7 @@ fn classify_status_compares_against_spec_not_rubber_stamp() { win_kind: WinKind::Advantage, mandatory: false, residual_board_delta: BoardDelta::default(), + per_cycle: None, }; assert!( matches!( diff --git a/crates/engine/src/analysis/decision_template.rs b/crates/engine/src/analysis/decision_template.rs index c4db106b43..92dfccfa7a 100644 --- a/crates/engine/src/analysis/decision_template.rs +++ b/crates/engine/src/analysis/decision_template.rs @@ -262,6 +262,23 @@ impl Default for ShortcutDecisionSchema { } } +impl ShortcutDecisionSchema { + /// CR 732.2a: `true` iff this offer's producer NARROWED the repetition bound below the + /// engine-wide safety cap — i.e. it measured a CR 704.5a / CR 704.5c / CR 104.3c + /// threshold inside the loop. A producer that cannot compute a real bound publishes + /// `MAX_SHORTCUT_CYCLES` (see `max_iterations` above), so an unnarrowed offer is NOT + /// bounded in this sense. + /// + /// The SINGLE AUTHORITY for that question, and the reason it is a method rather than + /// an inline comparison repeated at each caller: `MAX_SHORTCUT_CYCLES` is `pub(crate)` + /// to the engine, so `phase-ai`'s declare policy cannot name it and would otherwise + /// hard-code the literal. This predicate crosses the crate boundary; the constant does + /// not. + pub fn is_bounded(&self) -> bool { + self.max_iterations < crate::game::engine::MAX_SHORTCUT_CYCLES + } +} + /// One open decision-point. `slot` is the same [`DecisionSlot`] the frontend echoes on the /// [`PinnedDecision`] it produces; `kind` carries that decision's legal option set. #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] diff --git a/crates/engine/src/analysis/loop_check.rs b/crates/engine/src/analysis/loop_check.rs index 977230efc6..f4d1f42a3f 100644 --- a/crates/engine/src/analysis/loop_check.rs +++ b/crates/engine/src/analysis/loop_check.rs @@ -134,6 +134,13 @@ pub struct LoopCertificate { /// paths require an identical battlefield); wired now so an object-growth path /// populates it with no further change. NOT a `ResourceAxis` — concrete permanents. pub residual_board_delta: BoardDelta, + /// CR 732.2a: the measured resource signature of ONE repetition, published only by a + /// producer that narrowed the CR 704 repetition bound (the bounded cycle offer). + /// `None` for every other offer, and for every save written before this field existed + /// — in which case a drive falls back to the recurrence disjunct, i.e. exactly shipped + /// behaviour. `skip_serializing_if` keeps the existing payload byte-identical. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub per_cycle: Option, } impl LoopCertificate { @@ -173,6 +180,11 @@ pub struct ShortcutProposal { /// streams (skip-if-none), so this is a byte-preserving addition. #[serde(default, skip_serializing_if = "Option::is_none")] pub template: Option, + /// CR 732.2a: copied verbatim off the confirmed certificate so the drive reads ONE + /// authority for what a conformant cycle looks like. `None` for every offer whose + /// producer states no per-period signature (see [`LoopCertificate::per_cycle`]). + #[serde(default, skip_serializing_if = "Option::is_none")] + pub per_cycle: Option, } /// CR 732.2b/c: an opponent's answer to a proposed loop shortcut. `Accept` lets the @@ -271,6 +283,9 @@ pub fn detect_loop( // Invariant pinned by `residual_empty_for_constant_depth` (T12). (No CR // annotation: this is an invariant/plumbing comment, not rule-implementing code.) residual_board_delta: crate::analysis::resource::board_delta(cycle_start, cycle_end), + // CR 732.2a: `detect_loop` states no CR 704 repetition bound, so it publishes no + // per-period signature either. Only the bounded-cycle offer does. + per_cycle: None, }) } @@ -932,6 +947,7 @@ mod tests { win_kind: WinKind::LethalDamage, mandatory: true, residual_board_delta: BoardDelta::default(), + per_cycle: None, }; assert!(cert.covers(&[ResourceAxis::DamageDealt(pid(1))])); assert!(cert.covers(&[ diff --git a/crates/engine/src/analysis/resource.rs b/crates/engine/src/analysis/resource.rs index 08dadc7567..f47b0e5494 100644 --- a/crates/engine/src/analysis/resource.rs +++ b/crates/engine/src/analysis/resource.rs @@ -157,7 +157,11 @@ pub enum TriggerKind { /// Compare two snapshots with [`ResourceVector::delta`] to get the per-cycle /// change; [`ResourceVector::is_net_progress`] then decides whether the cycle is /// a beneficial (CR 732.2) loop. -#[derive(Debug, Clone, Default, PartialEq, Eq)] +/// +/// `Serialize`/`Deserialize` exist because a per-cycle delta rides +/// [`PeriodicDelta`] on the `WaitingFor::LoopShortcut` wire. One field needs an +/// adaptor to get there — see [`counter_key_pairs`]. +#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] pub struct ResourceVector { /// CR 106.1: floating mana by color, indexed `[W, U, B, R, G, C]` (see /// [`MANA_INDEX`]). Summed across all players' pools. **State-readable.** @@ -223,6 +227,7 @@ pub struct ResourceVector { /// CR 122.1: counters by `(kind, object class)`. Includes +1/+1, loyalty, /// and poison (poison/energy are keyed under [`ObjectClass::Player`]). /// **State-readable.** + #[serde(with = "counter_key_pairs")] pub counters: BTreeMap<(CounterClass, ObjectClass), i64>, /// Generic trigger/keyword-action firings by family (proliferate, magecraft, @@ -230,6 +235,63 @@ pub struct ResourceVector { pub generic_triggers: BTreeMap, } +/// Serde adaptor for [`ResourceVector::counters`], whose key is the +/// `(CounterClass, ObjectClass)` TUPLE. `serde_json` accepts only string-like map +/// keys, and `crates/engine-wasm/src/lib.rs` PANICS on a serialization error, so an +/// unadapted tuple key is a browser crash rather than a soft failure. Ride the wire as +/// a pair SEQUENCE — the shape `ShortcutDecisionSchema.points` already uses. +/// +/// Not reusing `types::game_state::tuple_key_map` (the repo's other adaptor, which +/// stringifies instead): it is monomorphic over `HashMap<(ObjectId, usize), u32>`. +/// The two sibling maps need no adaptor — `PlayerId` is a newtype over an integer and +/// `TriggerKind` is a unit-variant enum, both of which `serde_json` accepts as keys. +mod counter_key_pairs { + use super::{BTreeMap, CounterClass, ObjectClass}; + use serde::{Deserialize, Deserializer, Serialize, Serializer}; + + pub(super) fn serialize( + map: &BTreeMap<(CounterClass, ObjectClass), i64>, + serializer: S, + ) -> Result { + map.iter().collect::>().serialize(serializer) + } + + pub(super) fn deserialize<'de, D: Deserializer<'de>>( + deserializer: D, + ) -> Result, D::Error> { + Ok( + Vec::<((CounterClass, ObjectClass), i64)>::deserialize(deserializer)? + .into_iter() + .collect(), + ) + } +} + +/// CR 732.2a: the resource signature of ONE repetition of a certified loop — what the +/// offer publishes so a bounded drive can check that each committed cycle actually +/// conformed, and so the CR 704 count bound has a per-period magnitude to divide by. +/// +/// The `Vec` victim term (rather than a `BTreeMap` keyed by [`DecisionSlot`]) is +/// deliberate: a struct map key hits exactly the `serde_json` restriction +/// [`counter_key_pairs`] exists for, and the single consumer +/// ([`ResourceVector::elimination_bounds`]) collects at its call site. +#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] +pub struct PeriodicDelta { + /// How many RETAINED RING FRAMES one repetition spans. `1` for a pair certified by + /// direct recurrence; `k` for a signature derived by [`ring_delta_signature`]. + /// + /// Named for its unit on purpose: `game::engine::shortcut_drive_period` maps a + /// TEMPLATE to a repeat count, which is a different quantity in the same subsystem. + pub frames_per_period: u32, + /// The whole-game resource change across one repetition, measured from the very + /// frame pair that certified it. + pub delta: ResourceVector, + /// CR 704.5a: per published choice slot, the life magnitude one repetition charges + /// to whichever player that slot's pin names. EMPTY for the untargeted class, where + /// the victims are already visible in `delta.life`. + pub victim_slot: Vec<(DecisionSlot, i64)>, +} + impl ResourceVector { /// Snapshot the **state-readable** resource levels directly out of a /// `GameState`: floating mana, per-player life, per-player library size, and @@ -602,10 +664,30 @@ impl ResourceVector { /// /// Clamped to `MAX_SHORTCUT_CYCLES`. A return of `0` means no legal repetition exists /// and the caller must not offer; callers require `N >= 1`. - // The first production consumer is the bounded offer, which lands in a later phase; the - // bound ships ahead of it so its conventions are pinned by a unit row before any producer - // depends on them. - #[allow(dead_code)] + /// CR 704.5a: the per-period life loss ONE published pin slot may charge to whichever + /// seat its declaration names — the `slot_magnitude` term + /// [`ResourceVector::elimination_bounds`] divides the headroom by. + /// + /// **MAX over seats, not SUM, and not the observed spread.** A pin is a + /// STATE-INDEPENDENT designation (CR 732.2a), so a declaration may aim *every* + /// iteration of a slot at *one* seat. Charging what the observed — unpinned — iteration + /// happened to spread around would UNDER-charge and overstate the bound, which fails + /// OPEN. Charging the sum over seats is not a loss any single seat can suffer from one + /// slot; it over-charges, which only SHRINKS the bound and is the fail-closed direction + /// this repo takes when the two disagree. + /// + /// Life GAINS contribute nothing (`(-n).max(0)`), so a proposer gaining 5 while three + /// opponents lose 1, 2 and 3 yields 3 — never 5, and never 6. + /// + /// Extracted from `game::engine::try_offer_bounded_cycle_shortcut` so the max-vs-sum + /// fork has a callable seam: `victim_slot` is empty on every trajectory that offers + /// today, so this expression's value is dropped in production and no fixture reaches + /// it. `worst_seat_life_loss_is_the_max_seat_never_the_sum` is its only discriminator. + pub(crate) fn worst_seat_life_loss(&self) -> i64 { + self.life.values().map(|&n| (-n).max(0)).max().unwrap_or(0) + } + + // The first production consumer is `game::engine::try_offer_bounded_cycle_shortcut`. pub(crate) fn elimination_bounds( &self, state: &GameState, @@ -824,6 +906,101 @@ fn map_delta( out } +/// CR 732.2a: the per-period resource signature of the RETAINED RING, derived — the +/// second certification basis for a bounded cycle offer, and the one that consults no +/// **board** predicate (objects / zones / tap-state) at all. +/// +/// Searches `k` in `1..=(frames - 1) / 2`, smallest first, for a period whose consecutive +/// frame-deltas repeat, and certifies only a period it has observed **twice** (`2k` deltas +/// ⇒ `2k + 1` frames). `k` is an OUTPUT, never an input: no period constant exists in this +/// subsystem — `game::engine::shortcut_drive_period` derives its period from the template +/// schedule and `LOOP_DETECT_RING_CAP` merely CAPS how large a derivable `k` can be +/// (16 frames ⇒ `k <= 7`). +/// +/// Fail-closed in FOUR places. Fewer than `2k + 1` frames for every candidate `k` ⇒ `None` +/// (a period seen once is a coincidence, not a signature). A smallest repeating period whose +/// delta is the zero vector ⇒ `None`, because every multiple of it is zero too and a cycle +/// that moves no resource states no CR 704 threshold to bound. A certifying window that is +/// not TURN-POSITION invariant ⇒ `None` (the CR 703.1 conjunct below). Reading the RING only +/// — never the live `state` — keeps the compared frames homogeneous: every ring frame is a +/// `normalize_for_loop` snapshot taken at `WaitingFor::Priority{active_player}` +/// (`game::engine`'s sole `record_loop_detect_sample` call site), while the live state is not +/// normalized. It does not consult a board predicate, but it DOES require the frames it +/// compares to be homogeneous in turn position, which is what "homogeneous" above now means +/// in full. +pub(crate) fn ring_delta_signature(state: &GameState) -> Option<(u32, ResourceVector)> { + let frames = state.loop_detect_ring.len(); + // 2k + 1 with k >= 1. + if frames < 3 { + return None; + } + let snaps: Vec = state + .loop_detect_ring + .iter() + .map(|f| ResourceVector::snapshot(f)) + .collect(); + let deltas: Vec = snaps + .windows(2) + .map(|w| ResourceVector::delta(&w[0], &w[1])) + .collect(); + for k in 1..=(frames - 1) / 2 { + // The MOST RECENT 2k deltas: a stale repeat in an older stretch of the ring says + // nothing about the period the loop is running now. + let recent = &deltas[deltas.len() - 2 * k..]; + if recent[..k] != recent[k..] { + continue; + } + let per_period = ResourceVector::delta(&snaps[frames - 1 - k], &snaps[frames - 1]); + // Smallest repeating period, so every longer one is a whole number of copies of + // this one — a zero here cannot become non-zero at a larger `k`. + if per_period == ResourceVector::default() { + return None; + } + // CR 703.1 + CR 703.3: turn-based actions "happen automatically when certain steps + // or phases begin, or when each step and phase ends", and CR 703.2 says they are + // "not controlled by any player". CR 732.2a licenses a shortcut only over "a + // sequence of game choices, for all players" — so a period whose repetition is paved + // by step/phase boundaries is not a sequence that rule can describe. A 2-player + // draw-go board is exactly periodic in `library_delta` and in an upkeep life ticker, + // and without this conjunct that turn structure certifies as a "loop". + // + // Basis A cannot make that mistake: `loop_states_equal` delegates to + // `impl PartialEq for GameState`, which compares `turn_number`, `active_player` and + // `phase`, and neither `normalize_for_loop` nor `project_out_resources` neutralizes + // any of the three — the deliberate, ratified design recorded at + // `types::game_state::WaitingFor::is_forced_cascade_window`'s doc. Basis B compares + // only resource deltas, so it escaped that discipline silently; this restores parity. + // It is NOT a new policy and NOT a claim that shortcuts may not cross turns — + // CR 732.2a says verbatim that a shortcut "may even cross multiple turns". What is + // refused is a cross-turn certification by the BOARD-BLIND basis. + // + // KNOWINGLY ACCEPTED FALSE NEGATIVE, and it is the price of reusing the shipped + // authority instead of forking a second turn-position predicate: + // `window_scope_from_cover_frames` requires `extra_phases.is_empty()` on BOTH frames + // (CR 500.8 — effects can add phases to a turn), not merely equal counts. So a + // legitimate WITHIN-turn loop running while an extra phase is queued (the + // extra-combat class) mints no basis-B offer. That is the fail-closed direction — a + // missed offer, never a wrong one. If that class ever needs to certify, widen + // `window_scope_from_cover_frames` ITSELF, where both suppressing firewall callers + // see the change too; do not add a second local test here. + let window: Vec<&GameState> = state + .loop_detect_ring + .iter() + .skip(frames - (2 * k + 1)) + .map(|f| f.as_ref()) + .collect(); + if !window.windows(2).all(|w| { + window_scope_from_cover_frames(w[0], w[1], None) + .phase_invariant + .is_some() + }) { + return None; + } + return Some((k as u32, per_period)); + } + None +} + /// CR 732.2a vs CR 104.4b: the **complement** of the engine's strict loop /// equality (`types::game_state::loop_states_equal`). /// @@ -1213,6 +1390,97 @@ pub(crate) fn loop_states_cover_modulo_growth(prior: &GameState, current: &GameS loop_states_cover_modulo_growth_scoped(prior, current, LoopWindowScope::unproven()) } +/// CR 732.2a "predictable results": is EVERY per-iteration choice this stack can open a +/// SPECIFIED one — published by the offer's pins, or absent altogether? +/// +/// The conjunct a BOUNDED offer needs, and the reason it is not +/// [`loop_states_cover_modulo_growth_scoped`]: that predicate answers whether one frame +/// COVERS another, and its item (1) additionally requires `object_resource_axes_match` +/// STRICTLY — an axis [`loop_states_equal_modulo_resources`] deliberately projects OUT. An +/// offer certified by exact recurrence would therefore be refused by an unrelated BOARD fact +/// while its choice surface was never examined. Cover is the authority for cover; this is the +/// authority for choices. +/// +/// SINGLE AUTHORITY nonetheless, shared verbatim with that predicate's gates (3) and (6) — +/// the same [`stack_entry_has_no_ordering_input`] (CR 601.2c announcement-time input, reached +/// for a triggered ability via CR 603.3d), the same +/// [`stack_entry_resolution_choice_freedom`] (CR 608.2d resolution-time prompts), the same +/// [`entry_target_choice_is_pinned`] / [`pinned_may_choice_relief`] pin relief, and the same +/// CR 616.1 [`life_event_replacements_may_prompt`] environmental guard the +/// `FreeUnlessLifeReplacements` verdict's own contract requires. Nothing is re-derived here. +/// +/// STRICTER than gate (3) in one deliberate way: gate (3) examines only entries whose +/// normalized kind strictly GREW, because a non-grown place is one the window already +/// observed resolving. An offer makes a stronger claim — that N FUTURE repetitions are +/// predictable — and in an exact-recurrence window every entry re-announces each cycle, so +/// every entry is examined. +pub(crate) fn stack_choices_are_all_specified( + state: &GameState, + proposer: PlayerId, + slots: &[DecisionSlot], +) -> bool { + // Only `pinned` is read by the two relief predicates below; the other three proofs belong + // to the cover axes and this predicate makes no claim about them. Written out in full so a + // future FIFTH field is a compile error that forces a decision rather than a silent + // default. + let scope = LoopWindowScope { + phase_invariant: None, + sole_driver: None, + pinned: Some(PinnedChoices { proposer, slots }), + cast_card_ids: None, + }; + // Announcement-time (gate (3)'s fact). + for entry in &state.stack { + if !(entry_target_choice_is_pinned(state, entry, scope) + || stack_entry_has_no_ordering_input(state, entry)) + { + return false; + } + } + // Resolution-time (gate (6)'s fact), including its paired CR 616.1 obligation. + let mut needs_life_guard = false; + for entry in &state.stack { + match stack_entry_resolution_choice_freedom(entry) { + crate::game::ability_scan::ResolutionChoiceFreedom::MayPrompt => { + match pinned_may_choice_relief(state, entry, scope) { + Some( + crate::game::ability_scan::ResolutionChoiceFreedom::FreeUnlessLifeReplacements, + ) => needs_life_guard = true, + Some(crate::game::ability_scan::ResolutionChoiceFreedom::MayPrompt) | None => { + return false + } + } + } + crate::game::ability_scan::ResolutionChoiceFreedom::FreeUnlessLifeReplacements => { + needs_life_guard = true + } + } + } + !(needs_life_guard && life_event_replacements_may_prompt(state)) +} + +/// CR 732.2a: [`loop_states_cover_modulo_growth`] with an OFFER's published pin slots in +/// scope — the entry point `game::engine`'s bounded-cycle offer uses for both its +/// certification disjunct and its pin-coverage conjunct. +/// +/// This wrapper exists so the pins reach the gates through the SINGLE AUTHORITY +/// [`window_scope_from_cover_frames`] rather than through a [`LoopWindowScope`] a caller +/// in another module assembled itself; the scope's fields are private for exactly that +/// reason. Passing `slots` empty is NOT the same as passing no proof: `Some(PinnedChoices +/// { slots: &[] })` still names a proposer whose entries the relief tests, and every such +/// test fails on an empty slot list, so an empty publication is byte-identically as strict +/// as [`LoopWindowScope::unproven`]. +pub(crate) fn loop_states_cover_modulo_growth_pinned( + prior: &GameState, + current: &GameState, + proposer: PlayerId, + slots: &[DecisionSlot], +) -> bool { + let scope = + window_scope_from_cover_frames(prior, current, Some(PinnedChoices { proposer, slots })); + loop_states_cover_modulo_growth_scoped(prior, current, scope) +} + /// CR 601.2f + CR 601.2a: the set of card ids this loop window's recorded driving /// sequence touches — a SUPERSET of the true cast set (only `LoopAction::Recast` /// genuinely casts, CR 601.2a; `Activate` and `TapLandForMana` do not), which is the @@ -9351,6 +9619,98 @@ mod tests { .collect() } + /// PR-7 Phase 5b (PA-2A(e)) — CR 704.5a: the MAX-vs-SUM fork in `victim_slot`'s magnitude + /// derivation, which is otherwise UNTESTED and whose wrong answer surfaces in playtesting + /// as a wrong elimination bound rather than as a failure. + /// + /// WHY IT NEEDS ITS OWN ROW: `victim_slot` is EMPTY on every trajectory that offers today + /// — dina, the ≥3p life drain and the F4 predicate all publish `points == 0` — so in + /// production `worst_seat_life_loss` is evaluated only where its value is collected into + /// an empty `Vec` and dropped. No fixture reaches the fork. Stated as a coverage hole in + /// the PR body; 5d's targeted class is its first production-path consumer. + /// + /// O4 DERIVE conformance — all THREE legs, not one: + /// 1. **DERIVED, never compared to a literal.** `m` is bound from the return value and + /// asserted only against structural invariants of the input map. No expected magnitude + /// is written in arm ⓐ, and the function is CALLED, never re-derived. + /// 2. **NON-ZERO POPULATION + a fork reach-guard.** `losses` must be non-empty (else every + /// ∀ below is vacuously true over an empty seat set) and must hold ≥2 STRICTLY POSITIVE + /// entries — which is what makes the sum strictly exceed every single seat's loss. A + /// single-seat fixture would make max and sum COINCIDE and the row would pass under + /// both derivations, i.e. the degenerate-fixture trap this leg exists to catch. + /// 3. **POSITIVE CONTROL on the same instrument.** Arms ⓑ and ⓒ assert the OPPOSITE + /// outcome (`0`) on the same function, so no constant implementation passes: ⓐ alone + /// would be satisfied by anything that always returns a large number, and ⓑ/ⓒ alone by + /// anything that always returns zero. + /// + /// MAX-vs-SUM DISCRIMINATION, structural rather than numeric. `m` is asserted to be + /// (i) an UPPER BOUND on every seat's clamped loss and (ii) ATTAINED by a seat that + /// actually LOST life. Together those two are the definition of `max` with no number + /// named. Switching the derivation to `sum` keeps (i) and breaks (ii) — no single seat + /// suffers the total of an asymmetric map (it reports 6; the seats lose 1, 2 and 3). + /// `first`/`last`/`min` break (i), because arm ⓐ's map is keyed so the first entry is the + /// proposer's GAIN and clamps to 0. `abs()` breaks (ii) in ⓐ (it reports the proposer's 5, + /// which no seat lost) and breaks ⓑ outright (it reports 7 where the contract says 0). + /// Arms ⓑ/ⓒ do NOT kill `sum` — a gain-only map sums to 0 either way; killing `sum` is + /// arm ⓐ's job alone, which is why ⓐ's asymmetry reach-guard is load-bearing. + #[test] + fn worst_seat_life_loss_is_the_max_seat_never_the_sum() { + // ⓐ asymmetric multi-seat losses PLUS a proposer GAIN larger than any of them. + let mut v = life_loss_delta(&[(1, 1), (2, 3), (3, 2)]); + v.life.insert(pid(0), 5); + + let m = v.worst_seat_life_loss(); + + // O4(2): non-zero population, and the fixture really does separate max from sum. + let losses: Vec = v.life.values().map(|&n| (-n).max(0)).collect(); + assert!( + losses.iter().filter(|&&l| l > 0).count() >= 2, + "reach-guard: with fewer than two seats LOSING life the sum equals the max and \ + this row passes under either derivation, proving nothing; got {losses:?}" + ); + + // (i) UPPER BOUND — kills `first`, `last`, `min`, and any non-largest per-seat pick. + assert!( + v.life.values().all(|&n| (-n).max(0) <= m), + "CR 704.5a: a slot aimed at ANY one seat must be charged at least what that seat \ + loses per period, else the bound overstates the legal repetition count and the \ + drive can cross a threshold inside the proposal. m = {m}, losses = {losses:?}" + ); + // (ii) ATTAINED BY A LOSER — kills `sum` (no seat suffers the total) and kills + // `abs()`/gain-inclusive forms (the proposer's +5 is not a loss anyone suffers). + assert!( + v.life.iter().any(|(_, &n)| n < 0 && -n == m), + "the magnitude must be a loss some single seat actually took: `sum` reports a \ + total no seat suffers, and a gains-inclusive derivation reports the proposer's \ + own gain. m = {m}, life = {:?}", + v.life + ); + + // ⓑ POSITIVE CONTROL — the refusing value IS reachable on a NON-EMPTY map, which is + // what proves the `(-n).max(0)` clamp is doing the work rather than `unwrap_or(0)`. + let mut gains_only = ResourceVector::default(); + gains_only.life.insert(pid(0), 7); + gains_only.life.insert(pid(1), 2); + assert!( + !gains_only.life.is_empty(), + "reach-guard: an EMPTY map returns 0 through `unwrap_or`, a different arm; this \ + control is about the clamp" + ); + assert_eq!( + gains_only.worst_seat_life_loss(), + 0, + "a period in which nobody LOSES life charges nothing — 0 is the contract's \ + no-repetition sentinel, not a fixture number" + ); + + // ⓒ the empty arm, the other way to reach 0 (`max()` yields None). + assert_eq!( + ResourceVector::default().worst_seat_life_loss(), + 0, + "a delta with no life term charges nothing" + ); + } + /// CR 704.5a / CR 704.5c / CR 104.3c + CR 121.4 + CR 732.2a: the bound's conventions, /// case by case. Every case names the WRONG implementation it kills, so this row is a /// battery of discriminators rather than one assertion repeated. @@ -10788,4 +11148,456 @@ mod tests { "(p2) a window that crosses a phase boundary is not phase-invariant" ); } + /// CR 732.2a — `ring_delta_signature`'s "seen TWICE" contract, at the building-block + /// level: five arms over synthetically-built rings, so every input shape the function can + /// meet is exercised rather than whichever one a fixture happens to produce. + /// + /// `k` is an OUTPUT here, exactly as O4 requires of production: no period constant exists + /// in the function, and the only numbers in this row are the periods THIS TEST + /// CONSTRUCTED. Comparing a derived period against a constructed one is the discriminator + /// for "smallest repeating period"; it is not fixture-brittleness, because the input is + /// built two lines above the assertion. + /// + /// PRODUCTION-PATH COMPANIONS, both in `tests/integration/loop_shortcut.rs`: + /// `bounded_offer_on_a_within_turn_draw_drain_is_basis_b`, where the ENGINE writes a + /// basis-B offer whose published `frames_per_period != 1` on a within-turn draw↔drain + /// cascade; and `dina_untargeted_drain_4p_offers_at_three_live_opponents`, measured to + /// certify through this function with a derived `k == 1` on a REAL 4-player dump (see that + /// row's doc for the two measurements, and for why a `k == 1` basis-B offer is + /// indistinguishable from a basis-A one in the published payload). + /// + /// RETRACTION, kept on the record: this doc previously named + /// `fantastic_four_bounded_loop_4p` as that companion, "a DERIVED `k == 2` and a bound of + /// 35". Both numbers reproduce, and the reading was wrong — measured, F4's δ carries + /// `library -1` for ALL FOUR players and its certifying frames sit at turns + /// `[5, 9, 9, 13, 13]`, so the "period" is one 4-player TURN CYCLE (CR 703.4d: only the + /// active player draws in a draw step) and the "35" is 35 turn cycles, not 35 loop + /// iterations. That certificate is the same artifact as the drawgo false positive, which + /// is why `ring_delta_signature` now refuses it outright. + /// + /// REVERT-PROBES, each flipping a DIFFERENT arm so none dominates another: + /// * accept a period seen ONCE (search `k` up to `frames - 1` and compare only one + /// window) ⇒ arm ⓐ's `None` at 2 frames becomes `Some` ⇒ FAILS. + /// * drop the zero-delta refusal ⇒ arm ⓓ returns `Some` ⇒ FAILS. + /// * scan the OLDEST `2k` deltas instead of the most recent ⇒ arm ⓔ (a ring whose old + /// stretch repeats and whose recent stretch does not) returns `Some` ⇒ FAILS. + /// * take the LARGEST repeating `k` instead of the smallest ⇒ arm ⓑ returns `k = 2` for a + /// constant-delta ring ⇒ FAILS. + /// * delete the CR 703.1 turn-position conjunct ⇒ arm ⓕ returns `Some` ⇒ FAILS. + #[test] + fn ring_delta_signature_certifies_only_a_period_seen_twice() { + /// A ring whose frames carry the given life totals for P1, in order. Everything else + /// is held identical, so the frame-deltas are exactly the successive differences. + fn ring_of(lives: &[i32]) -> GameState { + let mut state = GameState::new_two_player(0); + for &life in lives { + let mut frame = GameState::new_two_player(0); + frame.players[1].life = life; + state + .loop_detect_ring + .push_back(std::sync::Arc::new(frame.normalize_for_loop())); + } + state + } + + // ⓐ REFUSING: 2 frames is one delta — a period seen ONCE. `2k + 1 = 3` is the + // threshold at the smallest possible `k`, and it is an EXPRESSION, never a literal + // in the function. + let short = ring_of(&[40, 39]); + assert_eq!( + short.loop_detect_ring.len(), + 2, + "reach-guard on the built ring" + ); + assert_eq!( + ring_delta_signature(&short), + None, + "a period observed once is a coincidence; certifying it would let an offer be \ + minted off a single frame pair" + ); + + // ⓑ POSITIVE CONTROL, same shape one frame longer: the instrument provably returns + // `Some`, so ⓐ is not a function that always refuses. + let steady = ring_of(&[40, 39, 38]); + let (k, delta) = ring_delta_signature(&steady) + .expect("three frames observe a 1-frame period TWICE, which is the contract"); + assert_eq!( + k, 1, + "the SMALLEST repeating period, derived — a constant per-frame delta has period 1" + ); + // Bound to a local rather than inlined: `2k + 1` is the CONTRACT expression (2k deltas + // ⇒ the period was observed twice), and clippy's `int_plus_one` would otherwise push it + // to a `> 2k` that no longer reads as the rule. + let frames_needed = 2 * k as usize + 1; + assert!( + steady.loop_detect_ring.len() >= frames_needed, + "the structural invariant every certified period satisfies: 2k+1 frames" + ); + assert_ne!( + delta, + ResourceVector::default(), + "a certified period moves some resource" + ); + assert_eq!( + delta.life.get(&PlayerId(1)).copied(), + Some(-1), + "and the published delta is the one measured across ONE period" + ); + + // ⓒ a 2-frame period, seen twice: 5 frames. The derived `k` must be the constructed + // one, and the delta must span the WHOLE period, not one frame of it. + let period_two = ring_of(&[40, 39, 36, 35, 32]); + let (k2, delta2) = ring_delta_signature(&period_two) + .expect("(-1, -3) repeated twice over 5 frames is a period seen twice"); + assert_eq!( + k2, 2, + "derived from the ring, and equal to the period this test BUILT two lines above" + ); + assert_eq!( + delta2.life.get(&PlayerId(1)).copied(), + Some(-4), + "one whole period is -1 + -3, not either half" + ); + + // ⓓ a ring that repeats perfectly but moves NOTHING: no CR 704 threshold to bound, so + // no signature. Without this the offer's bound would be the safety cap. + let flat = ring_of(&[40, 40, 40, 40, 40]); + assert_eq!( + ring_delta_signature(&flat), + None, + "a zero-delta cycle states no threshold; every multiple of a zero period is zero \ + too, which is why this refuses outright rather than searching on" + ); + + // ⓕ the CR 703.1 turn-position conjunct, at the building-block level: the SAME ring as + // ⓑ, with only the newest frame's turn number moved on. Nothing about the deltas + // changes (`ResourceVector::snapshot` never reads `turn_number` or `phase`), so a + // `None` here is attributable to the conjunct alone. + let mut turn_crossing = ring_of(&[40, 39, 38]); + { + let last = turn_crossing + .loop_detect_ring + .back_mut() + .expect("the ring was just built with three frames"); + std::sync::Arc::make_mut(last).turn_number += 1; + } + assert_eq!( + ring_delta_signature(&turn_crossing), + None, + "a period paved by a turn boundary is the game advancing, not a CR 732.2a loop — \ + the board-blind basis must refuse it (the ⓑ ring differs from this one in \ + `turn_number` and nothing else)" + ); + + // ⓔ the OLD stretch repeats, the RECENT one does not. A scan anchored at the oldest + // deltas would certify a period the loop is no longer running. + let stale = ring_of(&[40, 39, 38, 37, 30]); + assert_eq!( + ring_delta_signature(&stale), + None, + "the certified period must be the one the loop is running NOW: the most recent \ + 2k deltas are (-1, -7) at k=1 and (-1,-1),(-1,-7) at k=2, neither of which repeats" + ); + } + + /// CR 703.1 / CR 732.2a — the PRODUCTION-DRIVEN half of the turn-position conjunct: on a + /// board with NO loop at all, the game's own turn structure is exactly periodic in the + /// resource axes basis B reads, and this row asserts the board-blind basis derives no + /// signature from it at any beat. + /// + /// HOME. This lives in `resource.rs`'s unit module and NOT in + /// `tests/integration/loop_shortcut.rs` because `ring_delta_signature` is `pub(crate)`: + /// an integration test is a separate crate and cannot name it. The only alternative — a + /// re-derivation of the period search inside the test — is prohibited: it would be a + /// second copy of the very algorithm this row exists to pin, and it would stay green + /// while production drifted. What is copied here is a test HARNESS (the drawgo fixture + /// builder from `drawgo_ring_spans_turns_but_never_offers` and a beat driver), never the + /// thing under test, which is CALLED. + /// + /// FIXTURE, loop-free by construction: P0 has an upkeep ticker, a drain cleric and a + /// "may draw" scribe. Each of P0's upkeeps runs a FINITE 3-deep cascade — nothing + /// re-triggers the ticker — yet the per-turn shape is drain-like, which is exactly what a + /// board-blind periodicity test mistakes for a loop. MEASURED, on this tree: with the + /// conjunct absent the engine minted offers on this board (the sibling integration row + /// `drawgo_ring_spans_turns_but_never_offers` failed on its `offer_at.is_none()` + /// assertion); with it, that row is green and a seam probe over 400 beats counts ZERO + /// engine offers. + /// + /// THE FLATTEN ARM discharges two obligations at once, on the SAME trajectory and the + /// SAME ring, with exactly ONE axis neutralized: + /// * NON-ZERO POPULATION — a `∀ beats: is_none()` over an empty beat set is vacuously + /// true, so the row must prove its quantifier ranged over beats where a signature was + /// actually derivable. `flattened_some > 0` is that proof. + /// * SAME-TRAJECTORY POSITIVE CONTROL — the instrument is shown returning the + /// non-refusing value on drawgo's own data, so the `None`s above are a measured refusal + /// rather than an inert instrument. + /// * ATTRIBUTION — `ResourceVector::snapshot` reads life / library / poison / energy / + /// mana / battlefield counters / `combat_phases_started_this_turn` / `extra_phases`, and + /// never `turn_number` or `phase`, so δ and the derived `k` are unchanged by the + /// flattening and the `None` → `Some` flip is attributable to the turn-position + /// conjunct alone. + /// + /// MEASURED on this tree: 253 of the 300 driven beats hold >= 3 frames, and the flatten + /// arm derives a signature at **225** of them, over 22 turns. + /// + /// REVERT-PROBE (must FLIP): delete the CR 703.1 conjunct from `ring_delta_signature` ⇒ + /// the `is_none()` assertion fires on the first signature-bearing beat. + #[test] + fn drawgo_turn_structure_yields_no_basis_b_signature() { + use crate::game::scenario::GameScenario; + use crate::types::actions::GameAction; + use crate::types::game_state::{LoopDetectionMode, WaitingFor}; + + /// One beat of the shared dump drive policy (`tests/integration/loop_shortcut.rs`'s + /// `dump_drive_one_beat`): at `Priority` always pass — the mandatory triggers resolve + /// and re-trigger, which IS the loop when there is one — and otherwise take the first + /// legal non-terminal action. + fn drive_one_beat(state: &mut GameState) -> Result<(), String> { + let actor = state + .waiting_for + .acting_player() + .into_iter() + .chain(state.players.iter().map(|p| p.id)) + .find_map(|p| { + let (actions, _costs, _grouped) = + crate::ai_support::legal_actions_for_viewer(state, p); + (!actions.is_empty()).then_some((p, actions)) + }); + let Some((who, actions)) = actor else { + return Err(format!("no legal actor at {:?}", state.waiting_for)); + }; + let forbidden = + |a: &GameAction| matches!(a, GameAction::Concede { .. } | GameAction::Debug(_)); + let chosen = if matches!(state.waiting_for, WaitingFor::Priority { .. }) { + actions + .iter() + .find(|a| matches!(a, GameAction::PassPriority)) + } else { + actions + .iter() + .find(|a| !matches!(a, GameAction::PassPriority) && !forbidden(a)) + .or_else(|| actions.iter().find(|a| !forbidden(a))) + }; + let Some(action) = chosen.cloned() else { + return Err(format!("empty action list at {:?}", state.waiting_for)); + }; + crate::game::engine::apply(state, who, action.clone()) + .map(|_| ()) + .map_err(|e| format!("apply err ({action:?}): {e:?}")) + } + + let mut scenario = GameScenario::new_n_player(2, 7); + scenario.at_phase(Phase::PreCombatMain); + scenario.with_life(PlayerId(0), 20); + scenario.with_life(PlayerId(1), 20); + scenario.add_creature_from_oracle( + PlayerId(0), + "Test Upkeep Ticker", + 2, + 2, + "At the beginning of your upkeep, you gain 1 life.", + ); + scenario.add_creature_from_oracle( + PlayerId(0), + "Test Drain Cleric", + 2, + 2, + "Whenever you gain life, each opponent loses 1 life.", + ); + scenario.add_creature_from_oracle( + PlayerId(0), + "Test May Scribe", + 2, + 2, + "Whenever an opponent loses life, you may draw a card.", + ); + // CR 504.1: both players draw every turn, so the libraries must outlast the drive — a + // deck-out would end the game and silently truncate every assertion below. + let names: Vec = (0..60).map(|i| format!("Filler {i}")).collect(); + let refs: Vec<&str> = names.iter().map(|s| s.as_str()).collect(); + scenario.with_library_top(PlayerId(0), &refs); + scenario.with_library_top(PlayerId(1), &refs); + let mut runner = scenario.build(); + runner.state_mut().loop_detection = LoopDetectionMode::Interactive; + let mut state = runner.state().clone(); + + assert!( + state.loop_detection.samples(), + "reach-guard: a non-sampling mode never populates the ring, which would make the \ + per-beat `is_none()` below vacuous; got {:?}", + state.loop_detection + ); + assert_eq!( + state.loop_detect_ring.len(), + 0, + "reach-guard: every frame the assertions below read was accumulated by THIS drive" + ); + + let mut long_ring_beats = 0usize; + let mut flattened_some = 0usize; + let mut turns_seen: Vec = Vec::new(); + for beat in 0..300usize { + if !turns_seen.contains(&state.turn_number) { + turns_seen.push(state.turn_number); + } + // 2k + 1 at the smallest derivable k: below three frames the refusal is the + // short-ring one, which says nothing about turn position. + if state.loop_detect_ring.len() >= 3 { + long_ring_beats += 1; + assert_eq!( + ring_delta_signature(&state), + None, + "beat {beat} (turn {}, {} frames): this board has no loop — each upkeep \ + runs a FINITE cascade and nothing re-triggers the ticker — so the \ + board-blind basis must derive no period from the game's own turn \ + structure", + state.turn_number, + state.loop_detect_ring.len() + ); + + // Same trajectory, same ring, ONE axis neutralized. + let mut flat = state.clone(); + for frame in flat.loop_detect_ring.iter_mut() { + let f = std::sync::Arc::make_mut(frame); + f.turn_number = 1; + f.phase = Phase::Upkeep; + } + if ring_delta_signature(&flat).is_some() { + flattened_some += 1; + } + } + if drive_one_beat(&mut state).is_err() { + break; + } + } + + assert!( + turns_seen.len() >= 3, + "reach-guard: the drive must cross at least two full turn boundaries for a \ + turn-position claim to mean anything; saw turns {turns_seen:?}" + ); + assert!( + long_ring_beats > 0, + "reach-guard: the ∀ above ranged over ZERO beats holding 2k+1 frames, so it was \ + vacuously true" + ); + assert!( + flattened_some > 0, + "O4(2) + O4(3): with `turn_number` and `phase` flattened on a clone of THIS \ + trajectory's own ring — and nothing else changed — a signature must appear at \ + some beat. It appeared at {flattened_some} of {long_ring_beats} long-ring beats. \ + A zero here would mean the `None`s above are attributable to a short ring or a \ + non-repeating delta rather than to the CR 703.1 conjunct, and the row would not \ + be sound" + ); + } + + /// CR 732.2a — `PeriodicDelta` rides `WaitingFor::LoopShortcut` over the wire, so the + /// whole payload must survive `serde_json`. TWO map-key hazards, both real: a + /// `ResourceVector.counters` key is the `(CounterClass, ObjectClass)` TUPLE, and a + /// `BTreeMap` keyed by `DecisionSlot` (a struct) would be the same failure — which is + /// why `victim_slot` is a `Vec` of pairs and not a map at all. + /// + /// The runtime symptom of getting this wrong is NOT a soft failure: + /// `crates/engine-wasm/src/lib.rs`'s serializer `panic!`s on the error, i.e. a browser + /// crash. + /// + /// ARM (ii) ALONE WOULD PASS AGAINST A BROKEN MAP — an empty map serializes fine + /// whatever its key type. Arm (i) is what discriminates, and both are asserted here. + /// + /// REVERT-PROBES: drop `#[serde(with = "counter_key_pairs")]` from + /// `ResourceVector.counters` ⇒ arm (i) and the payload arm both fail with "key must be a + /// string"; change `PeriodicDelta.victim_slot` to a `BTreeMap` ⇒ same. + /// MUST-NOT-FLIP: a `LoopShortcut` payload with `per_cycle: None` stays byte-identical + /// (`skip_serializing_if`), asserted in the third block. + #[test] + fn periodic_delta_survives_the_serde_json_wire() { + use crate::analysis::decision_template::{DecisionSlot, ShortcutDecisionSchema}; + use crate::analysis::loop_check::{LoopCertificate, WinKind}; + use crate::types::game_state::{WaitingFor, YieldTarget}; + + let slot = DecisionSlot { + source: YieldTarget::ThisObject { + source_id: ObjectId(403), + incarnation: Some(7), + trigger_description: None, + }, + index: 0, + }; + + // (i) POPULATED — a non-empty tuple-keyed `counters` map is the discriminating input. + let mut delta = ResourceVector::default(); + delta.life.insert(PlayerId(1), -3); + delta.life.insert(PlayerId(0), 3); + delta + .counters + .insert((CounterClass::Plus1Plus1, ObjectClass::Creature), 2); + delta + .counters + .insert((CounterClass::Poison, ObjectClass::Player), 1); + delta.generic_triggers.insert(TriggerKind::Proliferate, 4); + assert!( + !delta.counters.is_empty() && !delta.life.is_empty(), + "reach-guard: arm (i) is only discriminating while `counters` is NON-EMPTY — an \ + empty map round-trips whatever the key type" + ); + let populated = PeriodicDelta { + frames_per_period: 2, + delta, + victim_slot: vec![(slot.clone(), 1)], + }; + let json = serde_json::to_string(&populated) + .expect("a populated PeriodicDelta must serialize (engine-wasm PANICS otherwise)"); + assert_eq!( + serde_json::from_str::(&json).expect("and round-trip"), + populated + ); + + // (ii) EMPTY — the degenerate arm, kept only so the pair is visible. + let empty = PeriodicDelta::default(); + let empty_json = serde_json::to_string(&empty).expect("an empty PeriodicDelta too"); + assert_eq!( + serde_json::from_str::(&empty_json).expect("and round-trip"), + empty + ); + + // The ACTUAL wire payload: the `WaitingFor` variant that carries it. + let cert = LoopCertificate { + unbounded: vec![], + win_kind: WinKind::LethalDamage, + mandatory: false, + residual_board_delta: BoardDelta::default(), + per_cycle: Some(populated), + }; + let offer = WaitingFor::LoopShortcut { + proposer: PlayerId(0), + predicted_winner: None, + certificate: cert.clone(), + schema: ShortcutDecisionSchema::default(), + }; + let offer_json = + serde_json::to_string(&offer).expect("the LoopShortcut payload carrying it must too"); + assert_eq!( + serde_json::from_str::(&offer_json).expect("and round-trip"), + offer + ); + + // MUST-NOT-FLIP: `skip_serializing_if` keeps the shipped payload byte-identical — + // `per_cycle` appears nowhere in the JSON of an offer that states none. + let shipped = WaitingFor::LoopShortcut { + proposer: PlayerId(0), + predicted_winner: None, + certificate: LoopCertificate { + per_cycle: None, + ..cert + }, + schema: ShortcutDecisionSchema::default(), + }; + let shipped_json = serde_json::to_string(&shipped).expect("serializes"); + assert!( + !shipped_json.contains("per_cycle"), + "an offer stating no per-period signature must be byte-identical to BASE; got \ + {shipped_json}" + ); + } } diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index 3bbc0cdedb..753d62c82c 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -776,6 +776,24 @@ fn interactive_loop_bridge(state: &mut GameState, result: &mut ActionResult) { return; } + // Path D: CR 732.2a BOUNDED cycle fast-forward. Only reached when Path A found no + // determinate winner — a drain lethal to SOME opponents leaves a second non-faller, so + // CR 104.2a's determinacy requirement (`loop_check`'s crown gate) refuses to crown and + // Path A returns `None`. This seam routes AROUND that gate rather than weakening it: it + // never calls `live_mandatory_loop_winner` and writes `predicted_winner: None`. + // Placed before Path B because Path B's CR 732.4 verdict is TERMINAL (it writes + // `GameOver` and returns), so a seam ordered after it could never be reached on a state + // Path B accepts. The two are disjoint anyway and the ordering does not paper over an + // overlap: Path B requires `has_no_loss_axis(&delta)`, while this seam only offers when + // `elimination_bounds` NARROWED below `MAX_SHORTCUT_CYCLES`, which happens only when the + // cycle drives some living seat toward a CR 704.5a / CR 704.5c / CR 104.3c threshold — + // i.e. exactly a loss axis. + if let Ok(offer) = try_offer_bounded_cycle_shortcut(state, mandatory) { + state.waiting_for = offer; + result.waiting_for = state.waiting_for.clone(); + return; + } + // Path B: CR 732.4 all-mandatory, net-progress, no-loss draw. Only reached when Path A // found no determinate winner. `mandatory` gates it (CR 732.5); a loss axis or an // optional loop falls through to the pre-feature halt. @@ -966,7 +984,302 @@ fn build_cert( // The offer is only reached for an OPTIONAL loop. mandatory: false, residual_board_delta: crate::analysis::resource::board_delta(prior, state), + // CR 732.2a: only a producer that NARROWED the repetition bound states a per-period + // signature. The bounded-cycle offer overrides this field with functional-update + // syntax at its own call site; every other producer publishes none. + per_cycle: None, + } +} + +/// CR 732.2a: which conjunct of [`try_offer_bounded_cycle_shortcut`] refused to offer. +/// +/// Exhaustive and typed, in the order the conjuncts run. Production ignores the value (a +/// refusal is a refusal), but a negative test row must be able to say WHICH conjunct it is +/// about: an assertion that merely observes "no offer" silently stops testing its own +/// conjunct the moment an earlier one starts refusing first. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum BoundedOfferRefusal { + /// (1) Not a `WaitingFor::Priority` beat, so nobody may suggest a shortcut. + NotAtPriority, + /// (1b) A non-empty `last_loop_action_sequence` routes an accepted proposal to the + /// object-growth materializer, which commits zero bounded cycles. + DrivingSequenceNotEmpty, + /// (2) The priority holder is not the active player the ring sampler gates on. + ProposerIsNotActivePlayer, + /// (4) Neither certification basis matched. + NoCertification, + /// (5) `WinKind::Advantage` — no CR 704 threshold, so this is Path C's class. + AdvantageOnlyCycle, + /// (6) A per-iteration choice the cycle opens is not specified by a published slot. + UnspecifiedChoiceWindow, + /// (7) `elimination_bounds` produced no count in `1..MAX_SHORTCUT_CYCLES`. + NoNarrowedLegalCount, +} + +/// CR 732.2a: the THIRD entry predicate into the loop-shortcut pipeline — a BOUNDED cycle +/// fast-forward for a loop that is lethal to SOME opponents but crowns nobody. +/// +/// Path A ([`find_live_loop_winner`]) needs a determinate single winner, which CR 104.2a +/// makes impossible while two non-fallers live; Path B needs an all-mandatory no-loss draw. +/// A 4-player drain that kills two seats and leaves two is neither, so both fall through +/// and the loop grinds by hand. CR 732.2a still licenses a shortcut for it, PROVIDED the +/// proposal names a repetition count whose results are *predictable* — which is exactly what +/// this predicate establishes and refuses to offer without. +/// +/// Everything downstream of the `WaitingFor::LoopShortcut` this returns is shipped and +/// unchanged: the same offer shape Path A writes, the same declare handler, the same APNAP +/// window, the same materializer. Two field values keep the classes apart BY CONSTRUCTION +/// rather than by review vigilance: +/// * `predicted_winner: None` — this seam never calls `live_mandatory_loop_winner`, so it +/// neither consults nor weakens the CR 104.2a crown gate (`loop_check.rs`'s +/// `nonfallers.len() != 1`); it routes around it. +/// * an EMPTY `last_loop_action_sequence` (step 1b) — the object-growth producer's class is +/// the complement, and `materialize_fixed_shortcut` dispatches on that same discriminant. +/// +/// Returns the offer to write, or the FIRST conjunct that refused. Pure: it reads `state` and +/// writes nothing. The refusal is typed rather than a bare `None` because nine fail-closed +/// conjuncts that all collapse to "no offer" are neither diagnosable nor testable: a negative +/// row asserting only the absence of an offer passes for the wrong reason as soon as an +/// upstream conjunct starts refusing first (domination), and `BoundedOfferRefusal` is what +/// lets such a row name the conjunct it is actually about. +pub fn try_offer_bounded_cycle_shortcut( + state: &GameState, + mandatory: bool, +) -> Result { + use crate::analysis::decision_template::{DecisionPointKind, DecisionSlot, IterationCount}; + use crate::analysis::resource::{PeriodicDelta, ResourceVector}; + use crate::types::ability::TargetRef; + + // (1) CR 732.2a: "the player with priority may suggest a shortcut." + let WaitingFor::Priority { player: proposer } = state.waiting_for else { + return Err(BoundedOfferRefusal::NotAtPriority); + }; + // (1b) The bounded drain mints nothing, so it is reachable in `materialize_fixed_shortcut` + // ONLY below that function's object-growth dispatch — and that dispatch is an EARLY + // RETURN gated on `!state.last_loop_action_sequence.is_empty()`. An offer minted with a + // non-empty sequence would be accepted and routed to the object-growth materializer, + // committing ZERO bounded cycles and making this whole path silently dead. The two + // conjuncts are not disjoint — a mana activation arms a period and a same-controller + // on-stack activation both appends to it and leaves the stack non-empty, which is the + // bridge's own entry condition — so this guard is load-bearing, not a restatement of an + // invariant. It converts a silent misroute into an observable refusal. + if !state.last_loop_action_sequence.is_empty() { + return Err(BoundedOfferRefusal::DrivingSequenceNotEmpty); + } + // (2) The ring sampler gates on `Priority{active_player}`, so requiring the proposer to + // BE the active player is what establishes they held priority at every sampled frame. + // It deliberately does NOT claim the proposer benefits from or controls the loop: + // CR 732.2a is explicit that the ending point "need not be the player proposing the + // shortcut" and that the described sequence is "for all players" (both verbatim). That a + // non-benefiting BYSTANDER may therefore propose is an inference from those clauses, not + // a quotation of them; its in-tree precedent is `analysis::loop_check::ShortcutProposal`'s + // own doc — "a player may propose a shortcut whose deterministic outcome wins the game + // for another player." (CR 732.3's fragmented-loop rule is a CONTRAST, not support.) + if proposer != state.active_player { + return Err(BoundedOfferRefusal::ProposerIsNotActivePlayer); + } + // (3) The published per-iteration choices (5a's single authority). + let points = bounded_cycle_pin_slots(state, proposer); + let slots: Vec = points.iter().map(|p| p.slot.clone()).collect(); + + // (4) CERTIFICATION — two bases, first match wins, NEVER combined. + // + // Basis A is a fifth copy of the ring `find_map` scan (`:481` the `On` reconcile, `:668` + // Path B, `:710` Path C, `:808` `find_live_loop_winner`). Recorded, not hidden: the repo + // already made this call at `find_live_loop_winner`'s own doc — "a deliberate, isolated + // copy … the `On` arm stays VERBATIM (byte-identity gate)" — and retargeting the four + // shipped walks would edit byte-identity-gated paths inside a feature commit. Newest + // prior first: the most recent recurrence is the least extrapolation. + let ring: Vec<&GameState> = state.loop_detect_ring.iter().map(|f| f.as_ref()).collect(); + let cur = ResourceVector::snapshot(state); + let basis_a = ring.iter().rev().find_map(|&prior| { + let delta = ResourceVector::delta(&ResourceVector::snapshot(prior), &cur); + ((crate::analysis::resource::loop_states_equal_modulo_resources(prior, state) + || crate::analysis::resource::loop_states_cover_modulo_growth_pinned( + prior, state, proposer, &slots, + )) + && delta.net_progress_for(proposer)) + .then(|| { + ( + prior, + state, + PeriodicDelta { + frames_per_period: 1, + delta, + victim_slot: Vec::new(), + }, + ) + }) + }); + // Basis B consults NO board predicate: a period whose frame-deltas repeated twice in the + // retained ring is a signature on its own. Its certifying pair is the ring frame one + // period back and the ring's newest frame — the very pair `ring_delta_signature` + // measured, so the certificate's residual is derived from the same window as the delta. + // + // ⚠ WHAT ACTUALLY DECIDES A vs B ON A GROWING CASCADE — measured, because the intuitive + // answer is wrong and cost this lane a mislabelled row. It is NOT "resource-purity": a + // pure life↔life drain does not take basis A by recurring. BOTH known life-drain + // fixtures GROW their stack every period, so `loop_states_equal_modulo_resources` is + // FALSE on the certifying pair of each, and NEITHER certifies through the equal disjunct: + // + // * the basis-A fixture (`multiplayer_pure_life_drain_offers_at_three_and_four_players`, + // Blight-Priest + Exquisite Blood) certifies through + // `loop_states_cover_modulo_growth_pinned` at `ring[1]` — `stack[2->3]` at 3 players, + // `stack[3->5]` at 4. The one `eq == true` pair on its ring carries a zero δ and dies on + // `net_progress_for`, not on the board predicate. + // * the basis-B fixture (`dina_untargeted_drain_4p_offers_at_three_live_opponents`) has + // that SAME disjunct vetoed at cover **gate (5)** — the off-stack fire-time condition + // guard — by a `ModifyCost { Reduce, {2} }` static on a library card, gated on + // `LifeGainedThisTurn { Controller } >= 1`: a projected axis read at fire time. + // + // So the discriminant is a FIRE-TIME CONDITION READING A PROJECTED AXIS, not the shape of + // the resources the loop moves. And the composition worth remembering: gate (5)'s + // `scope.cast_card_ids` relief — which exists precisely to excuse a self-cost modifier on + // a card the window provably never casts — CANNOT fire for this class, because step (1b) + // requires `last_loop_action_sequence` to be EMPTY, so `window_cast_card_ids` returns + // `None` (no proof ⇒ scan everything). The requirement that DEFINES the bounded class is + // exactly what disables the relief that would otherwise let cover succeed. Two + // individually-correct constraints composing into a refusal neither intended. + // + // ⚠ NEVER attribute the basis from `frames_per_period`. Basis A publishes `1` + // unconditionally and basis B publishes the same `1` whenever its derived `k` is 1, so + // `== 1` discriminates nothing. `!= 1` is sufficient for "not basis A" and never + // necessary. The only sound attribution is a discriminating probe: force + // `ring_delta_signature` to return `None` (basis B's sole entry point is the `None =>` + // arm below) — the rows that survive are basis A, the rows that fail are basis B. + let (cert_prior, cert_current, mut periodic) = match basis_a { + Some(hit) => hit, + None => { + let (k, delta) = crate::analysis::resource::ring_delta_signature(state) + .ok_or(BoundedOfferRefusal::NoCertification)?; + let n = ring.len(); + ( + *ring + .get( + n.checked_sub(1 + k as usize) + .ok_or(BoundedOfferRefusal::NoCertification)?, + ) + .ok_or(BoundedOfferRefusal::NoCertification)?, + *ring.last().ok_or(BoundedOfferRefusal::NoCertification)?, + PeriodicDelta { + frames_per_period: k, + delta, + victim_slot: Vec::new(), + }, + ) + } + }; + + // (5) CR 732.2a: the conjunct that proves this class is DISJOINT from Path C's + // revocable-∞ advantage mark. An `Advantage` cycle drives nobody toward a CR 704 + // threshold, so it has no bound to state and belongs to the other seam. + if crate::analysis::loop_check::classify_win_kind(proposer, &periodic.delta) + == crate::analysis::loop_check::WinKind::Advantage + { + return Err(BoundedOfferRefusal::AdvantageOnlyCycle); } + + // (6) CR 732.2a "predictable results": every per-iteration choice the cycle opens must be + // a SPECIFIED one. `stack_choices_are_all_specified` is that question's authority — it + // shares gates (3)/(6)'s own predicates and pin relief verbatim, so the relief here can + // never be coarser than the mint that published the slots. + // + // Its own conjunct, not folded into step 4: basis A's disjunction may have matched on + // exact recurrence (which says nothing about choices) and basis B consults no board + // predicate at all. And deliberately NOT a second `loop_states_cover_modulo_growth_pinned` + // call: on the dina 4p drain that predicate refuses 66 of the beats this seam reaches, + // on a BOARD fact, without ever examining a choice. + // + // ⚠ ATTRIBUTION CORRECTED, and deliberately scoped to what was RE-MEASURED. An earlier + // revision named the refuser as the cover predicate's item (1) `object_resource_axes_match` + // STRICT compare. At the MINT/OFFER beat that is FALSE: instrumenting the cover gates on + // dina's offer beat shows `object_resource_axes_match == true` at every gate-(1) refusal + // observed (187 of 187 across the dina and the ≥3p life-drain drives); the actual refusals + // are gate (5) (an off-stack fire-time condition reading a projected axis) and, on older + // ring pairs, gate (1)'s `loop_states_equal` on the stack-cleared projected board. The 66 + // NON-OFFERING beats the original count came from were NOT re-measured in that round, so + // the item-(1) attribution may still hold for them — it is left standing for that + // population rather than overwritten with an unmeasured claim. Either way the conjunct's + // JUSTIFICATION is unchanged: cover refuses on board facts, and this seam asks about + // choices. + if !crate::analysis::resource::stack_choices_are_all_specified(state, proposer, &slots) { + return Err(BoundedOfferRefusal::UnspecifiedChoiceWindow); + } + + // (7) THE BOUND. `declarable_victims` is the union of the published slots' legal targets + // — EMPTY for the untargeted class, where the victims are already in `delta.life`. + let declarable_victims: Vec = { + let mut v: Vec = points + .iter() + .filter_map(|p| match &p.kind { + DecisionPointKind::Targets { legal_targets, .. } => Some(legal_targets), + _ => None, + }) + .flatten() + .filter_map(|t| match t { + TargetRef::Player(p) => Some(*p), + _ => None, + }) + .collect(); + v.sort_unstable(); + v.dedup(); + v + }; + // CR 704.5a: what ONE repetition charges to whichever seat a slot's pin names. The + // max-vs-sum reasoning, the gain clamp and the fail-closed direction live on the + // function; `elimination_bounds` then sums the published slots per declarable victim. + // Extracted rather than inlined so the fork has a callable seam — `victim_slot` is empty + // on every trajectory that offers today, so this value is dropped in production and only + // `worst_seat_life_loss_is_the_max_seat_never_the_sum` discriminates max from sum. + let worst_seat_life_loss: i64 = periodic.delta.worst_seat_life_loss(); + periodic.victim_slot = points + .iter() + .filter(|p| matches!(p.kind, DecisionPointKind::Targets { .. })) + .map(|p| (p.slot.clone(), worst_seat_life_loss)) + .collect(); + // `.cloned()`, not `.copied()`: `(DecisionSlot, i64)` is not `Copy`. + let slot_magnitude: std::collections::BTreeMap = + periodic.victim_slot.iter().cloned().collect(); + let max_iterations = + periodic + .delta + .elimination_bounds(state, &declarable_victims, &slot_magnitude); + // A bound of 0 states no legal repetition. A bound AT the cap states no narrowing at all + // — this producer's whole claim is that it measured a CR 704.5a / CR 704.5c / CR 104.3c + // threshold inside the loop, so an unnarrowed result belongs to another seam. Checking + // the closed range here makes `schema.is_bounded()` true BY CONSTRUCTION for every offer + // this function mints, instead of an inference from step 5's `Advantage` rejection. + if !(1..MAX_SHORTCUT_CYCLES).contains(&max_iterations) { + return Err(BoundedOfferRefusal::NoNarrowedLegalCount); + } + + // (8) The certificate, with the two fields the bounded class states differently from + // Path A's spelled out at the site rather than mutated after the fact. + let base = build_cert(cert_prior, cert_current, &periodic.delta, proposer); + let certificate = crate::analysis::loop_check::LoopCertificate { + per_cycle: Some(periodic), + // CR 732.5: honest, and currently read by nothing in production — a loop nobody can + // break is still not forced to end, so this records the fact without acting on it. + mandatory, + ..base + }; + + // (9) The schema. `Fixed(max_iterations)` is the SUGGESTION and `max_iterations` the + // CEILING; the declare handler rejects any `Fixed(n)` above it and rejects `UntilLethal` + // outright, both already shipped. The pre-built `points` go in directly — the bounded + // path never calls `pinned_decisions_to_points`, whose legal sets are derived FROM the + // declared pins and would let a declaration ratify itself. + let schema = build_shortcut_schema( + points, + IterationCount::Fixed(max_iterations), + max_iterations, + ); + Ok(WaitingFor::LoopShortcut { + proposer, + predicted_winner: None, + certificate, + schema, + }) } /// CR 704.5a / CR 704.5c: a determinate lethal drain (0-or-less life / 10-poison) repeats @@ -1306,12 +1619,10 @@ pub(crate) fn entry_publishes_pin_slots( /// offer publishes the SET of open choices; one state-independent pin ("always target /// P1") specifies every instance of it. /// -/// VISIBILITY GATE: this phase ships the enumerator with NO production caller — an offer -/// that publishes these slots is a later commit — so it is gated behind the repo's -/// `test-support` boundary (the same one `game::scenario` uses) rather than widening the -/// crate's public surface for an unused item. The gate lifts, unchanged, when the bounded -/// offer that consumes it lands. -#[cfg(any(test, feature = "test-support"))] +/// VISIBILITY: the `#[cfg(any(test, feature = "test-support"))]` gate this shipped behind +/// has LIFTED, exactly as its own note said it would — [`try_offer_bounded_cycle_shortcut`] +/// is the production caller the gate was waiting for. It stays `pub` because the +/// integration suite that pins its behaviour links the library. pub fn bounded_cycle_pin_slots( state: &GameState, proposer: PlayerId, @@ -3411,7 +3722,7 @@ fn handle_declare_shortcut( // producer measured a CR 704 threshold inside the loop; running it "until lethal" // would run past that threshold. crate::analysis::decision_template::IterationCount::UntilLethal - if offer.schema.max_iterations < MAX_SHORTCUT_CYCLES => + if offer.schema.is_bounded() => { reject_shortcut_declaration(state, &mut result); return Ok(result); @@ -3428,6 +3739,9 @@ fn handle_declare_shortcut( unbounded: offer.certificate.unbounded.clone(), win_kind: offer.certificate.win_kind, template, + // CR 732.2a: the drive reads ONE authority for what a conformant cycle looks like — + // the confirmed certificate's own signature, copied, never re-derived. + per_cycle: offer.certificate.per_cycle.clone(), }; // CR 732.2b: living opponents in APNAP turn order, starting after the proposer. let opps: Vec = crate::game::players::apnap_order_from( diff --git a/crates/engine/src/types/game_state.rs b/crates/engine/src/types/game_state.rs index f718d45b5b..01683e24a7 100644 --- a/crates/engine/src/types/game_state.rs +++ b/crates/engine/src/types/game_state.rs @@ -20336,6 +20336,7 @@ mod forced_cascade_window_tests { win_kind: crate::analysis::loop_check::WinKind::LethalDamage, mandatory: false, residual_board_delta: crate::analysis::resource::BoardDelta::default(), + per_cycle: None, } } @@ -20607,6 +20608,7 @@ mod forced_cascade_window_tests { unbounded: vec![crate::analysis::resource::ResourceAxis::Life(PlayerId(1))], win_kind: crate::analysis::loop_check::WinKind::LethalDamage, template: None, + per_cycle: None, }, }, ), diff --git a/crates/engine/tests/integration/interaction_contract.rs b/crates/engine/tests/integration/interaction_contract.rs index 30e8179b51..7ef0959999 100644 --- a/crates/engine/tests/integration/interaction_contract.rs +++ b/crates/engine/tests/integration/interaction_contract.rs @@ -2358,6 +2358,7 @@ fn loop_shortcut_zero_max_iterations_is_rejected_not_clamped() { win_kind: engine::analysis::loop_check::WinKind::LethalDamage, mandatory: false, residual_board_delta: engine::analysis::resource::BoardDelta::default(), + per_cycle: None, }, schema: engine::analysis::decision_template::ShortcutDecisionSchema { iteration_count: engine::analysis::decision_template::IterationCount::Fixed(2), @@ -2417,6 +2418,7 @@ fn loop_shortcut_narrowed_max_iterations_bounds_the_picker() { win_kind: engine::analysis::loop_check::WinKind::LethalDamage, mandatory: false, residual_board_delta: engine::analysis::resource::BoardDelta::default(), + per_cycle: None, }, schema: engine::analysis::decision_template::ShortcutDecisionSchema { // A NARROWED bound, i.e. what `elimination_bounds` produces on a real board. @@ -2465,6 +2467,7 @@ fn loop_shortcut_number_schema_accepts_a_fixed_count_above_one() { win_kind: engine::analysis::loop_check::WinKind::LethalDamage, mandatory: false, residual_board_delta: engine::analysis::resource::BoardDelta::default(), + per_cycle: None, }, schema: engine::analysis::decision_template::ShortcutDecisionSchema { iteration_count: engine::analysis::decision_template::IterationCount::Fixed(2), @@ -2519,6 +2522,7 @@ fn loop_shortcut_schema_and_materializer_cover_every_decision_point_kind() { win_kind: engine::analysis::loop_check::WinKind::Advantage, mandatory: false, residual_board_delta: engine::analysis::resource::BoardDelta::default(), + per_cycle: None, }, schema: ShortcutDecisionSchema { iteration_count: IterationCount::Fixed(2), diff --git a/crates/engine/tests/integration/loop_shortcut.rs b/crates/engine/tests/integration/loop_shortcut.rs index 5d71661f66..a9421db3c4 100644 --- a/crates/engine/tests/integration/loop_shortcut.rs +++ b/crates/engine/tests/integration/loop_shortcut.rs @@ -303,10 +303,42 @@ fn drive_collect(runner: &mut GameRunner, cap: usize) -> (Vec, Waitin /// {1, 2, 3, 4, 8, 24} it holds at 2 and 8 and not at 1/3/4/24 (period 6), so inspecting only /// the terminal state would report `false` on a perfectly primed loop. The scan short-circuits /// at the first hit — measured 5.6–17.5 ms per drive, priming at beat 2. -fn drive_collect_primed(runner: &mut GameRunner, cap: usize) -> (Vec, WaitingFor, bool) { +/// +/// # PR-7 Phase 5b — the DECLINE arm, and why the guard would otherwise hollow out +/// +/// These boards now raise a natural bounded CR 732.2a offer. A `WaitingFor::LoopShortcut` is +/// neither `Priority` nor `OrderTriggers`, so without the arm below the break test fires at +/// the offer and the drive ends BEFORE recurrence can be witnessed — every caller's `primed` +/// reach-guard would then report `false` on a perfectly primed loop, i.e. the guard fails for +/// a reason that has nothing to do with what it guards. +/// +/// The remedy re-grounds each guard THROUGH the offer rather than around it: decline and keep +/// driving. Declining is a PASS-THROUGH, not an assertion — these rows' claims are about the +/// CROWN, not about the offer — and the declined offers are returned so a caller that wants to +/// assert on one can (`.first()`), and so the number of declines is reportable (`.len()`). +/// +/// MEASURED CONSEQUENCE: `DeclineShortcut` is a deliberate action and invalidates the ring +/// (`apply_action`'s deliberate-action ring invalidation), so the recurrence witness must be +/// re-accumulated after each decline and the caps tuned against an un-cleared ring no longer +/// hold. See `PRIMED_LOOP_BEATS`. +fn drive_collect_primed( + runner: &mut GameRunner, + cap: usize, +) -> (Vec, WaitingFor, bool, Vec) { let mut all: Vec = Vec::new(); let mut primed = false; + let mut declined: Vec = Vec::new(); for _ in 0..cap { + // Two separate `matches!` guards, not one `match`: the first borrow ends before + // `act` needs `&mut`. + if matches!(runner.state().waiting_for, WaitingFor::LoopShortcut { .. }) { + declined.push(runner.state().waiting_for.clone()); + let result = runner + .act(GameAction::DeclineShortcut) + .expect("DeclineShortcut is legal at a LoopShortcut window"); + all.extend(result.events); + continue; + } if !matches!( runner.state().waiting_for, WaitingFor::Priority { .. } | WaitingFor::OrderTriggers { .. } @@ -323,7 +355,7 @@ fn drive_collect_primed(runner: &mut GameRunner, cap: usize) -> (Vec, .any(|prior| loop_states_equal_modulo_resources(prior, state)); } } - (all, runner.state().waiting_for.clone(), primed) + (all, runner.state().waiting_for.clone(), primed, declined) } // ────────────────────────────── T-OFF ────────────────────────────── @@ -912,6 +944,7 @@ fn loop_shortcut_acting_player_reads_proposer() { win_kind: WinKind::LethalDamage, mandatory: false, residual_board_delta: BoardDelta::default(), + per_cycle: None, }; let wf_a = WaitingFor::LoopShortcut { proposer: P1, @@ -936,6 +969,7 @@ fn loop_shortcut_acting_player_reads_proposer() { unbounded: vec![], win_kind: WinKind::LethalDamage, template: None, + per_cycle: None, }; let wf_r = WaitingFor::RespondToShortcut { player: P2, @@ -1191,6 +1225,13 @@ fn interactive_queued_opponent_concede_no_deadlock() { /// suppression does not touch, so the ring still fills and this guard still reports primed. /// A negative "did not crown" test cannot distinguish a refused classification from a disabled /// one; the positive-side tests named above are what cover it. +/// +/// PR-7 Phase 5b — the cap was RE-MEASURED, not re-derived. `DeclineShortcut` is a deliberate +/// action and invalidates the ring, so the decline arm [`drive_collect_primed`] gained could in +/// principle have pushed the recurrence witness past this cap. Measured on this tree: it does +/// not — all three rows below still witness recurrence at 24 with the arm live, so the swept +/// value stands unchanged. The arm's liveness is not assumed either: deleting it drops all +/// three to `primed == false` / "0 bounded offers declined". const PRIMED_LOOP_BEATS: usize = 24; /// D2: a 3p loop that drains ONLY P1 (P2 a bystander, life delta 0) must NOT crown. @@ -1206,11 +1247,20 @@ const PRIMED_LOOP_BEATS: usize = 24; /// no-crown assertion below, which is the sole discriminator here: under that mutation the /// event-scan assertion measurably stays TRUE (no `GameOver{Some}` lands in the collected /// events) at every cap from 4 to 100. (Passes today, proving the gate holds.) +/// +/// PR-7 Phase 5b: this class now also raises a bounded CR 732.2a offer, so the row's former +/// "must NOT raise a LoopShortcut offer" clause is superseded and replaced by a positive +/// discriminator on `predicted_winner`. See the comment at that assertion. Two further +/// revert-probes, each flipping a DIFFERENT assertion so neither dominates the other: +/// * make `try_offer_bounded_cycle_shortcut` refuse unconditionally ⇒ `declined` is empty ⇒ +/// the `offered` `let-else` panics, while both no-CROWN assertions stay green. +/// * delete the `DeclineShortcut` arm from [`drive_collect_primed`] ⇒ the drive breaks at the +/// offer ⇒ `primed == false` ⇒ the trailing reach-guard FAILS. #[test] fn interactive_3p_subset_lethal_does_not_crown() { let (mut runner, kickoff) = setup_3p_subset_lethal(LoopDetectionMode::Interactive); let _ = runner.cast(kickoff).resolve(); - let (events, wf, primed) = drive_collect_primed(&mut runner, PRIMED_LOOP_BEATS); + let (events, wf, primed, declined) = drive_collect_primed(&mut runner, PRIMED_LOOP_BEATS); // Positive reach-guard: the drain loop genuinely ran on P1 while P2 stayed untouched — we // are in the subset-lethal regime the gate must refuse, not an unrelated upstream no-op. @@ -1236,10 +1286,57 @@ fn interactive_3p_subset_lethal_does_not_crown() { .any(|e| matches!(e, GameEvent::GameOver { winner: Some(_) })), "no GameOver{{Some}} event may be emitted for a subset-lethal loop" ); - // No offer either: the bridge does not OFFER a shortcut for a non-winner loop. - assert!( - !matches!(wf, WaitingFor::LoopShortcut { .. }), - "subset-lethal loop must NOT raise a LoopShortcut offer, got {wf:?}" + // PR-7 Phase 5b — the SUPERSEDED clause, replaced by its positive discriminator. + // + // This row used to assert `!matches!(wf, WaitingFor::LoopShortcut { .. })`. That + // expectation is superseded, not violated: a subset-lethal drain that crowns nobody is + // the exact class the bounded CR 732.2a offer exists to serve, so the class now OFFERS. + // The no-CROWN claims above are unchanged and are still the row's soundness content. + // + // Deleting a negative assertion silently would leave the row weaker than it was, so it is + // replaced by a POSITIVE assertion on the field that separates the two classes: a bounded + // offer must carry `predicted_winner: None`. A `Some(winner)` here would mean the offer + // came from Path A — i.e. something DID crown after all — which is exactly what the two + // assertions above forbid. + let offered = declined.first(); + let Some(WaitingFor::LoopShortcut { + predicted_winner, + certificate, + .. + }) = offered + else { + panic!( + "PR-7 5b: this class now OFFERS the bounded shortcut, and the drive above declined \ + every offer it saw; got {} declined offers, terminal {wf:?}", + declined.len() + ); + }; + assert_eq!( + *predicted_winner, None, + "the offer must carry predicted_winner: None — a Some(winner) here would mean Path A \ + crowned after all, contradicting the CR 104.2a assertions above" + ); + // BASIS: measured **A** (direct recurrence) — instrumenting the `basis_a` match in + // `try_offer_bounded_cycle_shortcut` prints `BASIS=A turn=2 phase=PreCombatMain ring=3` at + // this row's offer beat, which is consistent with `primed` below witnessing exactly basis + // A's first disjunct. `ring_delta_signature` — the only function the CR 703.1 + // turn-position conjunct modifies — is reached ONLY from the `None =>` arm, so this row is + // orthogonal to that conjunct in both directions. + // + // HONEST SCOPE OF THE ASSERTION BELOW: `frames_per_period == 1` is a TRIPWIRE, not a proof + // of basis A. Basis B derives `k` from 1 upward, so a k==1 basis-B offer publishes the + // same value (the `dina_untargeted_drain_4p_offers_at_three_live_opponents` row is exactly + // that case). What this line catches is the class silently acquiring a multi-frame period, + // which is the drift that would make the orthogonality claim above stop holding. + assert_eq!( + certificate + .per_cycle + .as_ref() + .expect("a bounded offer publishes its per-period signature") + .frames_per_period, + 1, + "this class certifies on a single-frame period; a multi-frame one would mean the class \ + moved to a basis-B signature and the orthogonality note above no longer holds" ); // Reach-guard on the regime itself (see `drive_collect_primed`): the drive really did reach @@ -1249,10 +1346,16 @@ fn interactive_3p_subset_lethal_does_not_crown() { // mode live in the same drive, so under the weakened-gate defect the crown must report as a // crown (the `wf` assertion above) — measured, a guard placed first steals that panic (M1 // crowns at beat ~1, before recurrence) and reports the wrong cause. + // + // RE-GROUNDED THROUGH the offer, not around it: `DeclineShortcut` invalidates the ring, so + // the witness must be re-accumulated after each decline, which is why the decline count is + // reported here. assert!( primed, - "the loop never reached a board-recurrent state within {PRIMED_LOOP_BEATS} beats — this \ - is not the primed-loop regime the assertions above assume, so they passed vacuously" + "the loop never reached a board-recurrent state within {PRIMED_LOOP_BEATS} beats \ + ({} bounded offers declined en route) — this is not the primed-loop regime the \ + assertions above assume, so they passed vacuously", + declined.len() ); } @@ -1320,6 +1423,7 @@ fn synthetic_lethal_cert() -> LoopCertificate { win_kind: WinKind::LethalDamage, mandatory: false, residual_board_delta: BoardDelta::default(), + per_cycle: None, } } @@ -1382,20 +1486,30 @@ fn vito_2p_optional_offer_declare_crowns() { /// `live_mandatory_loop_winner` returns None (CR 104.2a) and the shortcut falls back to manual /// play. REVERT-PROBE: making the crown unconditional (deleting the `live_mandatory_loop_winner` /// gate) wrongly crowns P0 here. +/// +/// PR-7 Phase 5b: the leading reach-guard is re-grounded THROUGH the bounded offers this class +/// now raises (see [`drive_collect_primed`]). REVERT-PROBE (MEASURED, not predicted): delete +/// that decline arm ⇒ `primed == false` ⇒ this row FAILS with "0 bounded offers declined". #[test] fn injected_3p_one_faller_no_crown() { let (mut runner, kickoff) = setup_3p_subset_lethal(LoopDetectionMode::Interactive); let _ = runner.cast(kickoff).resolve(); - let (_events, _wf, primed) = drive_collect_primed(&mut runner, PRIMED_LOOP_BEATS); + let (_events, _wf, primed, declined) = drive_collect_primed(&mut runner, PRIMED_LOOP_BEATS); // Reach-guard on the regime (see `drive_collect_primed`): the board reached a genuine // recurrence, so the E1 clone-drive below has a real cycle to measure rather than an // un-primed board. (It witnesses the live bridge's frame pair, not the E1 measure's own // boundary/work pair — those are different frames.) + // + // PR-7 Phase 5b: RE-GROUNDED THROUGH the bounded offers this class now raises — the driver + // declines each one and keeps driving, so the witness still ranges over a non-empty beat + // set. `DeclineShortcut` invalidates the ring, hence the decline count in the message. assert!( primed, - "the loop never reached a board-recurrent state within {PRIMED_LOOP_BEATS} beats — the \ - E1 measure below would have no primed cycle, so its no-crown assertion is vacuous" + "the loop never reached a board-recurrent state within {PRIMED_LOOP_BEATS} beats \ + ({} bounded offers declined en route) — the E1 measure below would have no primed \ + cycle, so its no-crown assertion is vacuous", + declined.len() ); // Reach-guard: the drain loop genuinely ran (P1 bled, alive) and P2 is untouched — this @@ -1407,7 +1521,11 @@ fn injected_3p_one_faller_no_crown() { ); assert_eq!(life(&runner, P2), 20, "P2 untouched (second non-faller)"); - // Inject the offer this subset-lethal loop never raises naturally, then confirm it. + // Inject the offer, then confirm it. PR-7 Phase 5b: this board is now ALSO reachable + // naturally (the drive above declined its natural bounded offers), but the injection stays + // — the injected `predicted_winner: Some(P0)` + `UntilLethal` certificate is what pins the + // E1 declare path this row is about, and the natural offer is a `None`/`Fixed` one that + // would route somewhere else entirely. runner.state_mut().waiting_for = WaitingFor::LoopShortcut { proposer: P0, predicted_winner: Some(P0), @@ -1430,6 +1548,11 @@ fn injected_3p_one_faller_no_crown() { "subset-lethal loop must NOT crown (CR 104.2a), got {:?}", runner.state().waiting_for ); + // MEASURED, not assumed (PA-2B.0b was a HYPOTHESIS that the materialized settle would now + // raise a natural bounded offer here and turn this green assertion red): on this tree the + // post-settle state IS `Priority`, so the assertion stands VERBATIM and needs no + // decline-and-re-read pass-through. Do not relax it to an `||` over two `WaitingFor` + // variants — that would make it pass on a state this row exists to exclude. assert!( matches!(runner.state().waiting_for, WaitingFor::Priority { .. }), "the E1 measure hands back to manual play, got {:?}", @@ -1592,15 +1715,23 @@ fn declare_illegal_pin_falls_back_legal_ingests() { /// (staggered CR 704.3 lethal). The EQUAL-life sibling DOES crown (reach-guard proving the /// check is not always-reject). REVERT-PROBE: removing the F2 check wrongly crowns the /// unequal-life half. +/// +/// PR-7 Phase 5b: this class now raises a natural bounded CR 732.2a offer mid-drive, which +/// would end the drive before the recurrence witness accumulates. [`drive_collect_primed`] +/// declines it and keeps driving, so the reach-guard is grounded THROUGH the offer. +/// REVERT-PROBE (MEASURED, not predicted): delete that decline arm ⇒ the UNEQUAL half's +/// `primed` goes false and this row FAILS, while the equal half is untouched (it consumes 0 +/// beats) — so the probe flips exactly one half, which is the proof the two halves are +/// independently grounded. #[test] fn injected_3p_unequal_life_pin_all_no_crown() { // Drive one primed cycle of a confirmed 3p both-fall drain and report the terminal // waiting_for. - fn drive_confirmed(p1_life: i32, p2_life: i32) -> (WaitingFor, bool) { + fn drive_confirmed(p1_life: i32, p2_life: i32) -> (WaitingFor, bool, usize) { let (mut runner, kickoff) = setup_3p_both_fall(LoopDetectionMode::Interactive, p1_life, p2_life); let _ = runner.cast(kickoff).resolve(); - let (_events, _wf, primed) = drive_collect_primed(&mut runner, PRIMED_LOOP_BEATS); + let (_events, _wf, primed, declined) = drive_collect_primed(&mut runner, PRIMED_LOOP_BEATS); // Reach-guard: both opponents bled equally (loop primed, both are fallers) and stay // pairwise-offset by the initial gap (equal deltas preserve the difference). assert!( @@ -1625,31 +1756,40 @@ fn injected_3p_unequal_life_pin_all_no_crown() { }) .expect("P0 declares UntilLethal"); accept_all_opponents(&mut runner); - (runner.state().waiting_for.clone(), primed) + (runner.state().waiting_for.clone(), primed, declined.len()) } // UNEQUAL absolute life (gap 50) ⇒ NO crown (F2 staggered-death veto). - let (unequal, unequal_primed) = drive_confirmed(1000, 1050); + let (unequal, unequal_primed, unequal_declines) = drive_confirmed(1000, 1050); // Reach-guard on the regime (see `drive_collect_primed`) — asserted on THIS half only: the // equal-life half below is measured to consume 0 beats (already crowned as the kick-off // resolved), so it has no drive in which to recur. This is the half the F2 revert-probe // flips, so the whole discriminator lives on the guarded side. + // + // PR-7 Phase 5b: RE-GROUNDED THROUGH the bounded offers this class now raises — declined, + // not avoided. Only the unequal half is re-grounded, for the reason above. assert!( unequal_primed, - "the loop never reached a board-recurrent state within {PRIMED_LOOP_BEATS} beats — this \ - is not the ≥2-faller primed regime the assertions below assume" + "the loop never reached a board-recurrent state within {PRIMED_LOOP_BEATS} beats \ + ({unequal_declines} bounded offers declined en route) — this is not the ≥2-faller \ + primed regime the assertions below assume" ); assert!( !matches!(unequal, WaitingFor::GameOver { winner: Some(_) }), "unequal-life ≥2-faller drain must NOT crown (CR 704.3 simultaneity), got {unequal:?}" ); + // MEASURED, not assumed (PA-2B.0b was a HYPOTHESIS that the materialized settle would now + // raise a natural bounded offer here and turn this green assertion red): on this tree the + // post-settle state IS `Priority`, so the assertion stands VERBATIM and needs no + // decline-and-re-read pass-through. Do not relax it to an `||` over two `WaitingFor` + // variants — that would make it pass on a state this row exists to exclude. assert!( matches!(unequal, WaitingFor::Priority { .. }), "the F2 veto hands back to manual play, got {unequal:?}" ); // EQUAL absolute life ⇒ CROWN (reach-guard: the F2 check is not always-reject). - let (equal, _) = drive_confirmed(1000, 1000); + let (equal, _, _) = drive_confirmed(1000, 1000); assert_eq!( equal, WaitingFor::GameOver { winner: Some(P0) }, @@ -3979,6 +4119,7 @@ fn loop_shortcut_schema_redacts_hidden_targets_for_non_controller() { win_kind: WinKind::LethalDamage, mandatory: false, residual_board_delta: BoardDelta::default(), + per_cycle: None, }; runner.state_mut().waiting_for = WaitingFor::LoopShortcut { proposer: P0, @@ -6964,3 +7105,819 @@ fn ai_collapse_candidate_is_clamped_to_the_accepted_bound() { apply(&mut state, P0, candidates[0].clone()) .expect("the AI's generated candidate must be accepted by the reducer"); } + +// =========================================================================== +// PR-7 Phase 5b — CR 732.2a BOUNDED cycle fast-forward, on a REAL 4p dump. +// +// The class Path A and Path B both refuse: a drain lethal to SOME opponents leaves a +// second non-faller, so CR 104.2a determinacy (`loop_check`'s crown gate) will not crown, +// and a life-loss axis is not a CR 732.4 no-loss draw. Every row below LOADS +// `dina_conqueror_4p.json.gz` through the production restore chokepoint and DRIVES real +// beats through `apply()` — the offer is an accumulation across dozens of them, which no +// synthetic `GameScenario` reproduces. +// =========================================================================== + +/// Drive the loaded dump until the ENGINE ITSELF writes a bounded offer, and return the +/// state at that beat. Reads `state.waiting_for` — i.e. the production Path D write inside +/// `interactive_loop_bridge` — NEVER an out-of-band call to the offer predicate, which +/// would prove only that the predicate agrees with itself. +fn drive_to_bounded_offer(state: &mut GameState, cap: usize) -> Option { + let pin = engine_live_opponents(state, P0).first().copied(); + for beat in 0..cap { + if matches!( + state.waiting_for, + WaitingFor::LoopShortcut { + predicted_winner: None, + .. + } + ) { + return Some(beat); + } + if dump_drive_one_beat(state, pin).is_err() { + return None; + } + } + None +} + +fn bounded_offer_parts( + state: &GameState, +) -> ( + PlayerId, + &engine::analysis::loop_check::LoopCertificate, + &engine::analysis::decision_template::ShortcutDecisionSchema, +) { + match &state.waiting_for { + WaitingFor::LoopShortcut { + proposer, + predicted_winner: None, + certificate, + schema, + } => (*proposer, certificate, schema), + other => panic!("expected a bounded LoopShortcut offer, got {other:?}"), + } +} + +/// PR-7 Phase 5b acceptance — the bounded offer FIRES on the real 4-player Dina/Conqueror +/// drain, at three living opponents, with a bound computed from the offer-beat board. +/// +/// ⚠ CERTIFICATION BASIS — **B**, with a derived `frames_per_period == 1`. An earlier revision +/// of this doc said basis **A** ("direct recurrence"); that was WRONG and the correction is +/// load-bearing, so it is recorded rather than swapped. MEASURED two independent ways: +/// (i) instrumenting the `basis_a` match in `try_offer_bounded_cycle_shortcut` prints +/// `BASIS=B k=1 turn=5 phase=CombatDamage ring=3` at this row's offer beat; (ii) making +/// `ring_delta_signature` return `None` unconditionally removes this row's offer entirely +/// (the drive runs its full 400-beat cap and the `expect` below fires) — which could not +/// happen if basis A were certifying, because `ring_delta_signature` is reached only from the +/// `None =>` arm. +/// +/// ⚠ WHY BASIS A REFUSED — the MECHANISM, measured at this row's own offer beat by +/// instrumenting the `basis_a` walk (ring length 3, walked newest-first). Both disjuncts fail, +/// for two DIFFERENT reasons, and neither is the one a reader would guess: +/// * the **equal** disjunct is refused by stack growth. `ring[1] -> current` is +/// `stack[8 -> 10]`: **two more `ObjectId(401)` "Bloodthirsty Conqueror" `GainLife` +/// triggered-ability entries per period** (7 -> 9, alongside one steady `ObjectId(71)` +/// "Dina, Soul Steeper" `LoseLife` entry) — a super-critical mu > 1 cascade, so the board +/// provably never recurs. The single pair that IS `eq == true` (`ring[2]`, `stack[10 -> 10]`) +/// carries a ZERO delta, so `net_progress_for(proposer)` is false and it is discarded. +/// * the **cover** disjunct clears gates (1)-(4) on that same pair and is then vetoed at +/// **gate (5)** — the off-stack fire-time condition guard — by `ObjectId(90)` +/// **"Mortality Spear"** sitting in the **Library**, carrying +/// `ModifyCost { Reduce, {2} }` / `affected: SelfRef` gated on +/// `LifeGainedThisTurn { Controller } >= 1`: a PROJECTED axis read at fire time. +/// The `scope.cast_card_ids` relief that exists for exactly this def shape cannot apply, +/// because step (1b) of the bounded class REQUIRES an empty `last_loop_action_sequence`, +/// so `window_cast_card_ids` returns `None` and gate (5) scans everything. Two +/// individually-correct constraints composing into a refusal neither intended. +/// (On the older `ring[0]` pair cover instead fails at **gate (1)**, on `loop_states_equal` +/// of the stack-cleared projected board — `object_resource_axes_match` was `true` at every +/// gate-(1) refusal measured in this run, so it is NOT the refuser here.) +/// +/// THE PUBLISHED PAYLOAD CANNOT DISTINGUISH THE TWO HERE, and that is why the row asserts a +/// structural `frames_per_period >= 1` and not a basis. Basis A publishes `1` unconditionally +/// and basis B *derives* `k` from `1` upward, so `== 1` is observationally identical from +/// both. `!= 1` is sufficient for "not basis A" (that is the attribution +/// `bounded_offer_on_a_within_turn_draw_drain_is_basis_b` uses) but is never NECESSARY, and no +/// `pub` predicate closes the gap: basis A's certifying condition is a DISJUNCTION whose +/// second half, `loop_states_cover_modulo_growth_pinned`, is `pub(crate)` and unnameable from +/// an integration test. +/// +/// CONSEQUENCE, and it is the good one: this row is a basis-B positive control on a REAL 4p +/// dump. It is also therefore SUBJECT TO the CR 703.1 turn-position conjunct rather than +/// bypassing it — the conjunct is evaluated here and PASSES, because the certifying window is +/// `turns[5,5,5] phases[CombatDamage x3] extra[0x3]`. It is a must-NOT-flip in both +/// directions, MEASURED: deleting the conjunct leaves this row green, and keeping it leaves +/// this row green. It is therefore NOT a discriminating control for that conjunct — the rows +/// that carry that discrimination are `analysis::resource`'s +/// `drawgo_turn_structure_yields_no_basis_b_signature` and +/// `ring_delta_signature_certifies_only_a_period_seen_twice` arm ⓕ (refusing side), and +/// `bounded_offer_on_a_within_turn_draw_drain_is_basis_b` (positive side). +/// +/// EVERY NUMBER IS COMPUTED IN-TEST from the offer-beat state. The chain's reported "32" +/// is not a fixture fact: it drifts with how many beats the drive takes to accumulate, and +/// this row recomputes `min over living opponents of (life - 1) / per-cycle loss` at the +/// beat the offer actually appeared. +/// +/// NON-VACUITY: BASE is a measured NO-OFFER trajectory. Before Path D existed the same +/// drive ran 326 beats on this dump and reached `WaitingFor::LoopShortcut` zero times, so +/// the offer cannot appear here vacuously. The two field-value discriminators are asserted +/// rather than a code location: `predicted_winner == None` (this seam never calls +/// `live_mandatory_loop_winner`, so it cannot have inherited Path A's crown) and +/// `last_loop_action_sequence` EMPTY (the object-growth producer's class is the complement). +/// +/// REVERT-PROBES (each must FLIP to FAIL): +/// * delete the Path D block in `interactive_loop_bridge` ⇒ no offer ⇒ the +/// `drive_to_bounded_offer` expect FAILS. +/// * make step (7)'s range check `1..=MAX_SHORTCUT_CYCLES` ⇒ nothing here flips (the bound +/// really is narrowed), which is why the SEPARATE `schema.is_bounded()` assertion below +/// exists — it is the one that flips. +/// * remove `elimination_bounds`' `p.life as i64 - 1` headroom term ⇒ the recomputed bound +/// and the published one diverge ⇒ FAILS. +#[test] +fn dina_untargeted_drain_4p_offers_at_three_live_opponents() { + let mut state = restore_dump(&gunzip_dump(include_bytes!( + "../fixtures/dina_conqueror_4p.json.gz" + ))); + + // ── reach-guards on the loaded board; every assertion below is meaningless without them + assert!( + state.loop_detection.samples(), + "reach-guard: a non-sampling mode never populates the ring, so no offer could ever \ + be raised and this row would be vacuous; got {:?}", + state.loop_detection + ); + assert_eq!( + state.loop_detect_ring.len(), + 0, + "reach-guard: the dump ships with an EMPTY ring — every frame the offer certifies \ + against was accumulated by THIS drive, not restored" + ); + assert_eq!( + engine_live_opponents(&state, P0).len(), + 3, + "reach-guard: the whole point of this class is that Path A cannot crown, which needs \ + >= 2 non-fallers, i.e. three living opponents here" + ); + assert!( + !matches!(state.waiting_for, WaitingFor::LoopShortcut { .. }), + "reach-guard: the dump must NOT ship at a saved offer — the offer is this row's \ + deliverable, not its input" + ); + + let beat = drive_to_bounded_offer(&mut state, 400).expect( + "CR 732.2a: the bounded offer must FIRE on this real 4p drain. BASE (no Path D) drove \ + 326 beats on this same dump and reached zero LoopShortcut beats, so a failure here is \ + the offer never being raised, not a fixture accident.", + ); + + let (proposer, certificate, schema) = bounded_offer_parts(&state); + + // ── the two binding field-value discriminators ── + assert_eq!( + proposer, state.active_player, + "CR 732.2a: the proposer is the priority holder, and step (2) requires that to be the \ + active player the ring sampler gates on" + ); + assert!( + state.last_loop_action_sequence.is_empty(), + "the bounded class's entry must NOT require a driving sequence — a non-empty one \ + routes an accepted proposal to the object-growth materializer, which commits zero \ + bounded cycles (beat {beat})" + ); + assert!( + schema.points.is_empty(), + "the UNTARGETED class publishes no per-iteration choice, so the schema exposes no \ + decision points; got {:?}", + schema.points + ); + + // ── the per-period signature, bound FROM the value ── + let per_cycle = certificate + .per_cycle + .as_ref() + .expect("a bounded offer publishes the per-period signature its bound was divided by"); + assert!( + per_cycle.frames_per_period >= 1, + "a period spans at least one retained frame; got {}", + per_cycle.frames_per_period + ); + assert!( + per_cycle.victim_slot.is_empty(), + "no slot is published, so nothing is charged to a declared victim — the victims are \ + already visible in `delta.life`; got {:?}", + per_cycle.victim_slot + ); + assert!( + per_cycle.delta != engine::analysis::resource::ResourceVector::default(), + "a zero-delta cycle states no CR 704 threshold and must never be offered" + ); + + // ── the bound, RECOMPUTED from the offer-beat board ── + let living_opponents: Vec = engine_live_opponents(&state, proposer); + assert_eq!( + living_opponents.len(), + 3, + "three living opponents must still be the population AT THE OFFER BEAT ({beat}), not \ + only at load — otherwise the bound below is computed over the wrong seats" + ); + let mut losses: Vec<(PlayerId, i64, i64)> = vec![]; + for p in state.players.iter().filter(|p| !p.is_eliminated) { + let loss = -per_cycle.delta.life.get(&p.id).copied().unwrap_or(0); + losses.push((p.id, p.life as i64, loss)); + } + let opponent_losses: Vec = losses + .iter() + .filter(|(id, _, _)| *id != proposer) + .map(|(_, _, loss)| *loss) + .collect(); + assert!( + opponent_losses.iter().all(|&l| l > 0), + "REACH-GUARD against a degenerate fixture: every living opponent must actually be \ + LOSING life per cycle, else the CR 704.5a headroom term never narrows and the bound \ + below would be the safety cap for the wrong reason; measured {losses:?}" + ); + let expected_bound = losses + .iter() + .filter(|(_, _, loss)| *loss > 0) + .map(|(_, life, loss)| (life - 1) / loss) + .min() + .expect("at least one seat is losing life, asserted above"); + assert_eq!( + i64::from(schema.max_iterations), + expected_bound, + "CR 704.5a: the published bound must equal `min over living seats of (life - 1) / \ + per-cycle loss`, recomputed here from the offer-beat board {losses:?} at beat {beat}" + ); + assert_eq!( + schema.iteration_count, + engine::analysis::decision_template::IterationCount::Fixed(schema.max_iterations), + "CR 732.1b: the SUGGESTION seeded into the picker is the bound itself" + ); + assert!( + schema.is_bounded(), + "the whole claim of this producer is that it NARROWED the repetition bound; \ + max_iterations = {}", + schema.max_iterations + ); + + // ── siblings: nothing terminal happened, and no revocable-infinity was marked ── + assert_eq!( + certificate.win_kind, + engine::analysis::loop_check::WinKind::LethalDamage, + "CR 704.5a: a life drain is not `Advantage`, which is the conjunct that keeps this \ + seam disjoint from the Path C revocable-infinity mark" + ); + assert!( + state.unbounded_resources.is_empty(), + "an OFFER is not a grant: CR 104.4b's revocable-infinity mark belongs to Path C and \ + must not be written by raising a bounded offer; got {:?}", + state.unbounded_resources + ); +} + +/// Drive a `GameScenario`-built board until the ENGINE writes a bounded offer, declining +/// nothing and injecting nothing. Returns the beat, or `None` if the cap ran out. Reads +/// `state.waiting_for` — the production Path D write — never an out-of-band predicate call. +fn drive_scenario_to_bounded_offer(runner: &mut GameRunner, cap: usize) -> Option { + for beat in 0..cap { + if matches!( + runner.state().waiting_for, + WaitingFor::LoopShortcut { + predicted_winner: None, + .. + } + ) { + return Some(beat); + } + if dump_drive_one_beat(runner.state_mut(), None).is_err() { + return None; + } + } + None +} + +/// PR-7 Phase 5b — THE BASIS-B POSITIVE CONTROL, at the offer level. +/// +/// This is the row that detects a back-door deletion of certification basis B, and it is the +/// only one that does: every other bounded-offer row in this file certifies on basis A. +/// +/// FIXTURE — a fully mandatory two-card draw↔drain cascade. What it shares with the class +/// basis B exists for is the one property that matters: **it draws a card every cycle**, so a +/// card moves library→hand each period, the board never recurs, and basis A's +/// `loop_states_equal_modulo_resources` (library and hand are board, not projected resources) +/// and its cover disjunct must BOTH refuse. The `None =>` arm is then the only way an offer +/// can be minted here. +/// +/// ORACLE-TEXT PROVENANCE, verified against the Scryfall API, and deliberately honest: +/// * *"Whenever you draw a card, each opponent loses 1 life."* is **real** — Psychosis +/// Crawler's second ability, verbatim. +/// * *"Whenever an opponent loses life, draw a card."* matches **no printing**. The two +/// nearest real cards are both GATED — Kefka, Ruler of Ruin (*"…during your turn"*) and +/// Valgavoth, Harrower of Souls (*"…for the first time during each of their turns"*) — and +/// that gating is precisely what would stop the cascade. This fixture is therefore +/// SYNTHETIC and deliberately stronger than any printed card. It must not be described as a +/// real-card loop. Its matched negative control +/// (`drawgo_ring_spans_turns_but_never_offers`) is a `GameScenario` too, which is the +/// precedent for a synthetic matched control pair for one predicate. +/// +/// MEASURED at the seam (not from an out-of-band predicate call): the engine writes the offer +/// at beat 31, turn 4, `Draw`, with a derived `frames_per_period == 2`, δ = +/// `life{P1:-1} lib{P0:-1}` and a bound of 16; the whole ring sits at `turns[4×6]` +/// `phases[Draw×6]` `extra[0×6]`, so every consecutive pair is turn-position invariant and the +/// CR 703.1 conjunct passes. Note δ carries `lib{P0:-1}` ONLY — P1's library is untouched, so +/// no second draw step is inside the period. Contrast drawgo (`lib{P0:-1,P1:-1}`), whose +/// "period" is one 2-player turn cycle. +/// +/// REVERT-PROBE ⓐ (MEASURED, not predicted): make `ring_delta_signature` return `None` +/// unconditionally ⇒ the `None =>` arm converts that into `Err(NoCertification)` ⇒ no offer is +/// written ⇒ the `expect` below FAILS. +/// +/// ⚠ SCOPE, stated so it is not overread: this SYNTHETIC control fires at TWO players. The +/// same cascade built at 3 and 4 players certifies but mints zero offers (they refuse +/// downstream, at step (6) `stack_choices_are_all_specified`, because `Effect::Draw` is +/// outside that gate's allow-list). `multiplayer_pure_life_drain_offers_at_three_and_four_players` +/// is NOT a substitute — it is measured basis A. The ≥3-player basis-B coverage this file DOES +/// carry is `dina_untargeted_drain_4p_offers_at_three_live_opponents`, which is measured basis +/// B (k == 1) on a real 4p dump; see that row's doc for the measurement and for why its +/// published payload cannot assert the basis on its own. +#[test] +fn bounded_offer_on_a_within_turn_draw_drain_is_basis_b() { + let mut scenario = GameScenario::new_n_player(2, 7); + scenario.at_phase(Phase::PreCombatMain); + scenario.with_life(P0, 20); + scenario.with_life(P1, 20); + scenario.add_creature_from_oracle( + P0, + "Test Bleeder", + 2, + 2, + "Whenever you draw a card, each opponent loses 1 life.", + ); + scenario.add_creature_from_oracle( + P0, + "Test Chronicler", + 2, + 2, + "Whenever an opponent loses life, draw a card.", + ); + // CR 504.1: the libraries must outlast the drive — a deck-out would end the game and + // silently truncate every assertion below. + let names: Vec = (0..60).map(|i| format!("Filler {i}")).collect(); + let refs: Vec<&str> = names.iter().map(|s| s.as_str()).collect(); + scenario.with_library_top(P0, &refs); + scenario.with_library_top(P1, &refs); + let mut runner = scenario.build(); + runner.state_mut().loop_detection = LoopDetectionMode::Interactive; + + assert!( + runner.state().loop_detection.samples(), + "reach-guard: a non-sampling mode never populates the ring, so no offer could ever be \ + raised and this row would be vacuous" + ); + assert_eq!( + runner.state().loop_detect_ring.len(), + 0, + "reach-guard: every frame the offer certifies against is accumulated by THIS drive" + ); + + let beat = drive_scenario_to_bounded_offer(&mut runner, 200).expect( + "CR 732.2a: the within-turn mandatory draw↔drain cascade must raise a bounded offer. \ + A failure here means basis B minted nothing — which is exactly what revert-probe ⓐ \ + (make `ring_delta_signature` return None) produces.", + ); + + let state = runner.state(); + let (proposer, certificate, schema) = bounded_offer_parts(state); + + // (i) the binding field-value discriminator. + assert_eq!( + proposer, state.active_player, + "CR 732.2a: the proposer is the priority holder, and step (2) requires that to be the \ + active player the ring sampler gates on" + ); + + // (ii) the period, bound FROM the returned value — no literal `2` appears in this row. + let per_cycle = certificate + .per_cycle + .as_ref() + .expect("a bounded offer publishes the per-period signature its bound was divided by"); + let k = per_cycle.frames_per_period; + assert!( + k >= 1, + "a period spans at least one retained frame; got {k}" + ); + // Bound to a local rather than inlined: `2k + 1` is the CONTRACT expression (2k deltas ⇒ + // the period was observed twice), and clippy's `int_plus_one` would otherwise push it to a + // `> 2k` that no longer reads as the rule. + let frames_needed = 2 * k as usize + 1; + assert!( + state.loop_detect_ring.len() >= frames_needed, + "the structural invariant every certified period satisfies: a period seen TWICE needs \ + 2k+1 frames. k = {k}, ring = {} (beat {beat})", + state.loop_detect_ring.len() + ); + assert!( + per_cycle.delta != engine::analysis::resource::ResourceVector::default(), + "a zero-delta cycle states no CR 704 threshold and must never be offered" + ); + + // (iii) BASIS ATTRIBUTION. Basis A publishes `frames_per_period: 1` UNCONDITIONALLY, so + // `!= 1` is sufficient for "not basis A" — and it is exactly symmetric with the dina row's + // `== 1`, so the two read as one pair. It is deliberately not NECESSARY (basis B searches + // k from 1, so a hypothetical basis-B offer with k == 1 would fail here); that is the + // fail-LOUD direction. If this fixture's derived k ever drifts to 1 the row must be + // re-derived, not relaxed. + assert_ne!( + k, 1, + "basis B must be what certified this board: basis A publishes frames_per_period 1 \ + unconditionally, and this cascade draws a card every cycle so basis A cannot match" + ); + + // (iv) the bound is narrowed, asked of the single authority. `MAX_SHORTCUT_CYCLES` is + // `pub(crate)` and unnameable from an integration test; `is_bounded()` is the shipped + // `pub` predicate for exactly this question. + assert!( + schema.max_iterations >= 1, + "a bound of 0 states no repetition and must not be offered" + ); + assert!( + schema.is_bounded(), + "the whole claim of this producer is that it NARROWED the repetition bound below the \ + engine-wide safety cap; max_iterations = {}", + schema.max_iterations + ); + + // (v) the untargeted class publishes no per-iteration choice. + assert!( + schema.points.is_empty(), + "the UNTARGETED class exposes no decision points; got {:?}", + schema.points + ); +} + +/// PR-7 Phase 5b — the MULTIPLAYER offer control: the untargeted every-opponent drain raises a +/// bounded offer at THREE and at FOUR players, not only at two. +/// +/// FIXTURE — the pure life↔life cascade, both halves verbatim real-card Oracle text verified +/// against the Scryfall API: Marauding Blight-Priest (*"Whenever you gain life, each opponent +/// loses 1 life."*) plus Exquisite Blood (*"Whenever an opponent loses life, you gain that much +/// life."*). Untargeted and every-opponent, which is the true full-multiplayer drain and the +/// same class as the real 4p `dina_conqueror_4p` dump. +/// +/// WHY THIS SHAPE: its stack holds only `GainLife` / `LoseLife`, so it clears step (6) +/// `stack_choices_are_all_specified` and is DECOUPLED from the separate `Effect::Draw` +/// allow-list hole that silences the 2-player basis-B control at ≥3 players. A control that +/// steered around that hole would guard nothing about it; this one does not touch it. +/// +/// UNEQUAL OPPONENT LIFE IS LOAD-BEARING, not decoration. With every opponent falling, the +/// living partition is `nonfallers == {P0}`, and at EQUAL life `live_mandatory_loop_winner`'s +/// CR 704.3 simultaneity floor passes and Path A crowns P0 while the kick-off is still +/// resolving — measured, at 2, 3 and 4 players. Staggering the totals fails +/// `fallers_lives_pairwise_equal`, which is what leaves the board in the "lethal to some, +/// crowns nobody" regime the bounded offer exists to serve. +/// +/// ⚠ BASIS: **A** — established by DISCRIMINATING PROBE, never from `frames_per_period`. +/// The probe: force `ring_delta_signature` to return `None` unconditionally (basis B's only +/// entry point, reached solely from the `basis_a` match's `None =>` arm). This row stays +/// GREEN at both player counts while `dina_untargeted_drain_4p_offers_at_three_live_opponents` +/// and `bounded_offer_on_a_within_turn_draw_drain_is_basis_b` both FAIL. Surviving that +/// mutation is what proves basis A certified here. **`frames_per_period == 1` proves NOTHING +/// about the basis** — basis A publishes `1` unconditionally and basis B *derives* `k` from +/// `1` upward, so a k==1 basis-B offer is byte-identical in the payload. The `== 1` assertion +/// below is a structural consistency check, necessary but never sufficient; treating it as a +/// basis attribution is the exact non-discriminating inference that mislabelled the dina row. +/// +/// ⚠ MECHANISM — CORRECTED, and the correction is load-bearing. An earlier revision of this +/// doc said *"a pure life↔life loop moves only axes `loop_states_equal_modulo_resources` +/// projects out, so the board DOES recur and basis A always matches."* That is MEASURABLY +/// FALSE on this very fixture: the loop moves the STACK, which is not a projected axis. +/// Instrumenting the `basis_a` walk at the offer beat (ring length 3, walked newest-first): +/// * `ring[2]` — the only pair with `eq == true` (stack unchanged) — carries a ZERO δ, so +/// `net_progress_for(proposer)` is **false** and the pair is discarded. +/// * `ring[1]` — `eq == FALSE`, and this is the pair that certifies, through the +/// **`loop_states_cover_modulo_growth_pinned` disjunct**, never through the equal one. +/// The stack grows one period's worth of `Test Exquisite Blood` triggered abilities: +/// **3p `stack[2 -> 3]` (+1), 4p `stack[3 -> 5]` (+2)**. Cover exists for exactly this — +/// growth confined to places `prior` already occupied, by mandatory no-ordering-input +/// triggers. +/// +/// So the real reason basis A wins here is not resource-purity: it is that nothing on this +/// board trips a cover gate. Contrast dina, whose identical-in-kind stack growth also clears +/// cover's gates (1)-(4) and is then vetoed at **gate (5)** by an off-stack `ModifyCost` +/// static whose fire-time condition reads a projected axis. The shared write-up lives at the +/// `basis_a` dispatch site in `game::engine::try_offer_bounded_cycle_shortcut`. +/// +/// ⚠ CONSEQUENCE for "no basis-B control at ≥3 players from this shape": still true AS BUILT, +/// but for the corrected reason — cover SUCCEEDS here, so the `None =>` arm is never reached. +/// That is a property of this board, not a resource-purity invariant: adding a gate-(5) +/// refuser to the same two cards would flip it to basis B. The ≥3p basis-B coverage this file +/// carries is `dina_untargeted_drain_4p_offers_at_three_live_opponents` (basis B, k == 1, on a +/// real 4p dump). +/// +/// REVERT-PROBE (must FLIP): delete the Path D block in `interactive_loop_bridge` ⇒ no offer +/// at either player count ⇒ the `expect` FAILS. +#[test] +fn multiplayer_pure_life_drain_offers_at_three_and_four_players() { + /// Marauding Blight-Priest, verbatim (Scryfall). + const BLIGHT_PRIEST: &str = "Whenever you gain life, each opponent loses 1 life."; + /// Exquisite Blood, verbatim (Scryfall). + const EXQUISITE_BLOOD: &str = "Whenever an opponent loses life, you gain that much life."; + + /// Build the cascade at `seats` players with staggered opponent life, cast the kick-off, + /// and return the runner plus the seats the engine considers living opponents of P0. + fn cascade(seats: u8) -> GameRunner { + let mut scenario = GameScenario::new_n_player(seats, 7); + scenario.at_phase(Phase::PreCombatMain); + scenario.with_life(P0, 20); + for (i, seat) in (1..seats).map(PlayerId).enumerate() { + // Staggered: pairwise-UNEQUAL absolute life, equal per-cycle delta. + scenario.with_life(seat, 1000 + 50 * i as i32); + } + scenario.add_creature_from_oracle(P0, "Test Blight Priest", 2, 2, BLIGHT_PRIEST); + scenario.add_creature_from_oracle(P0, "Test Exquisite Blood", 2, 2, EXQUISITE_BLOOD); + let kickoff = scenario + .add_spell_to_hand_from_oracle(P0, "Test Lifegain Kickoff", false, KICKOFF) + .id(); + let mut runner = scenario.build(); + runner.state_mut().loop_detection = LoopDetectionMode::Interactive; + let _ = runner.cast(kickoff).resolve(); + runner + } + + for seats in [3u8, 4] { + let mut runner = cascade(seats); + let opponents = engine_live_opponents(runner.state(), P0); + assert_eq!( + opponents.len(), + usize::from(seats) - 1, + "reach-guard at {seats} players: every opponent must still be living at the offer \ + beat, else the bound below is computed over the wrong seats" + ); + assert!( + !matches!(runner.state().waiting_for, WaitingFor::GameOver { .. }), + "reach-guard at {seats} players: the staggered life totals must keep Path A from \ + crowning while the kick-off resolves — at EQUAL life it does, and then there is \ + no board left to offer on; got {:?}", + runner.state().waiting_for + ); + + let beat = drive_scenario_to_bounded_offer(&mut runner, 200).unwrap_or_else(|| { + panic!( + "CR 732.2a: the untargeted every-opponent drain must raise a bounded offer at \ + {seats} players. This is the multiplayer half of the claim — a 2-player-only \ + detector is not what this lane ships." + ) + }); + + let state = runner.state(); + let (proposer, certificate, schema) = bounded_offer_parts(state); + assert_eq!( + proposer, state.active_player, + "{seats}p: CR 732.2a step (2) — the proposer is the active priority holder" + ); + assert!( + schema.points.is_empty(), + "{seats}p: the UNTARGETED class exposes no decision points; got {:?}", + schema.points + ); + + let per_cycle = certificate + .per_cycle + .as_ref() + .expect("a bounded offer publishes its per-period signature"); + assert_eq!( + per_cycle.frames_per_period, 1, + "{seats}p: NECESSARY-but-not-sufficient for the basis-A label. Basis A publishes 1 \ + unconditionally, so != 1 would refute the label outright and must be re-derived, \ + not relaxed — but == 1 does NOT establish it, because basis B derives k from 1 \ + upward and publishes the identical value. The label is carried by the \ + `ring_delta_signature -> None` probe named in this row's doc, not by this number" + ); + + // EVERY living opponent loses life every cycle — the multiplayer content of the claim. + // A 2-player-shaped detector that only ever charges one seat fails here. + let losses: Vec<(PlayerId, i64)> = opponents + .iter() + .map(|p| (*p, -per_cycle.delta.life.get(p).copied().unwrap_or(0))) + .collect(); + assert!( + losses.iter().all(|(_, loss)| *loss > 0), + "{seats}p: the published per-cycle δ must charge EVERY living opponent, which is \ + what makes this the untargeted multiplayer class; measured {losses:?} at beat \ + {beat}" + ); + + // The bound, RECOMPUTED from the offer-beat board. + let expected_bound = state + .players + .iter() + .filter(|p| !p.is_eliminated) + .filter_map(|p| { + let loss = -per_cycle.delta.life.get(&p.id).copied().unwrap_or(0); + (loss > 0).then(|| (p.life as i64 - 1) / loss) + }) + .min() + .expect("at least one seat is losing life, asserted above"); + assert_eq!( + i64::from(schema.max_iterations), + expected_bound, + "{seats}p: CR 704.5a — the published bound must equal `min over living seats of \ + (life - 1) / per-cycle loss`, recomputed here from the offer-beat board" + ); + assert!( + schema.is_bounded(), + "{seats}p: this producer's whole claim is that it NARROWED the bound; \ + max_iterations = {}", + schema.max_iterations + ); + } +} + +/// PR-7 Phase 5b (G1) — the bounded offer must FORBID a non-empty `last_loop_action_sequence`. +/// +/// PAIRED ARMS ON ONE CERTIFYING STATE, differing in exactly one field, asserting opposite +/// outcomes — so no constant implementation passes. +/// +/// WHY THE GUARD IS LOAD-BEARING (measured, not hypothetical): `materialize_fixed_shortcut` +/// EARLY-RETURNS into `materialize_object_growth_shortcut` when the sequence is non-empty, +/// and the bounded drain path begins strictly below that return. An offer minted with a +/// non-empty sequence would be accepted and routed to the object-growth materializer, +/// committing ZERO bounded cycles — the guard converts that silent misroute into an +/// observable refusal. The two conjuncts are NOT disjoint in the tree: the bridge's own gate +/// needs a non-empty STACK, and an on-stack `ActivateAbility` appends to the sequence once a +/// mana activation has armed a period. +/// +/// REVERT-PROBE: delete step (1b) ⇒ arm ⓑ returns `Ok(..)` ⇒ FAILS. The refusal is asserted +/// BY REASON (`DrivingSequenceNotEmpty`), not merely as "no offer": an assertion that only +/// observed absence would keep passing if some EARLIER conjunct started refusing first, which +/// is the domination trap. +#[test] +fn a_nonempty_action_sequence_mints_no_bounded_offer() { + use engine::game::engine::{try_offer_bounded_cycle_shortcut, BoundedOfferRefusal}; + use engine::types::game_state::{BuybackUsage, LoopAction, LoopActionContext}; + + let mut state = restore_dump(&gunzip_dump(include_bytes!( + "../fixtures/dina_conqueror_4p.json.gz" + ))); + drive_to_bounded_offer(&mut state, 400) + .expect("the paired arms need a state that PROVABLY certifies; see the acceptance row"); + + // The offer beat's `waiting_for` is the offer itself, so rewind that one field to the + // Priority beat the offer was raised AT — the bridge's own entry condition. + let (proposer, _, _) = bounded_offer_parts(&state); + state.waiting_for = WaitingFor::Priority { player: proposer }; + + // ⓐ the state certifies. + let armed = try_offer_bounded_cycle_shortcut(&state, false); + assert!( + armed.is_ok(), + "REACH-GUARD: arm ⓑ is vacuous unless the SAME state certifies with an empty \ + sequence; got {armed:?}" + ); + + // ⓑ one field reassigned. + state.last_loop_action_sequence = vec![LoopActionContext { + card_id: state + .objects + .values() + .next() + .map(|o| o.card_id) + .expect("the dump has objects"), + controller: proposer, + action: LoopAction::Recast { + from_zone: engine::types::zones::Zone::Hand, + uses_buyback: BuybackUsage::NotUsed, + }, + convoke: None, + pins: vec![], + }]; + assert_eq!( + try_offer_bounded_cycle_shortcut(&state, false), + Err(BoundedOfferRefusal::DrivingSequenceNotEmpty), + "CR 732.2a: a bounded offer minted with a driving sequence would be routed to the \ + object-growth materializer and commit zero bounded cycles" + ); +} + +/// PR-7 Phase 5b — a declared count ABOVE the offered bound is handed back fail-closed. +/// +/// **TEST-ONLY ROW, ZERO NEW PRODUCTION CODE.** The guard already ships +/// (`handle_declare_shortcut`'s `Fixed(n) if *n > offer.schema.max_iterations` arm). It was +/// unbuildable before this phase because no producer narrowed the bound below +/// `MAX_SHORTCUT_CYCLES`, so the comparison was inert; the bounded offer is the first +/// producer that can exercise it. Do not read this row as new mechanism. +/// +/// REVERT-PROBE: delete that arm ⇒ the over-bound count is accepted, APNAP opens, and the +/// proposal drives past a CR 704.5a threshold INSIDE the proposal ⇒ the zero-elimination +/// assertion FAILS. +/// MUST-NOT-FLIP: `over_cap_fixed_count_hands_back_with_no_drive` (the global-cap arm) and +/// every unbounded offer's acceptance of any `Fixed(n <= MAX)`. +#[test] +fn declared_count_above_the_offered_bound_is_handed_back() { + use engine::analysis::decision_template::IterationCount; + + let mut state = restore_dump(&gunzip_dump(include_bytes!( + "../fixtures/dina_conqueror_4p.json.gz" + ))); + drive_to_bounded_offer(&mut state, 400) + .expect("the bounded offer must fire; see the acceptance row"); + let (proposer, _, schema) = bounded_offer_parts(&state); + let bound = schema.max_iterations; + assert!( + schema.is_bounded(), + "REACH-GUARD: this row is about the PER-OFFER bound, so the offer must have narrowed \ + one — at `MAX_SHORTCUT_CYCLES` the global-cap arm would answer instead and the row \ + would test the wrong guard; got {bound}" + ); + let lives_before: Vec = state.players.iter().map(|p| p.life).collect(); + let eliminated_before = state.players.iter().filter(|p| p.is_eliminated).count(); + + let result = apply( + &mut state, + proposer, + GameAction::DeclareShortcut { + count: IterationCount::Fixed(bound + 1), + template: None, + }, + ) + .expect("the declare is a legal action; it is REFUSED by being handed back, not by Err"); + + assert!( + matches!(result.waiting_for, WaitingFor::Priority { .. }), + "CR 732.2a: an over-bound count contains a conditional action, so it is handed back to \ + ordinary priority — no APNAP window, no drive; got {:?}", + result.waiting_for + ); + assert!( + !matches!(state.waiting_for, WaitingFor::RespondToShortcut { .. }), + "the CR 732.2b response window must never open for a rejected declaration" + ); + assert_eq!( + state.players.iter().filter(|p| p.is_eliminated).count(), + eliminated_before, + "ZERO eliminations: the whole reason the bound exists is that a count above it crosses \ + a CR 704.5a threshold inside the proposal" + ); + assert_eq!( + state.players.iter().map(|p| p.life).collect::>(), + lives_before, + "zero committed cycles ⇒ no life moved" + ); +} + +/// PR-7 Phase 5b — `UntilLethal` against a BOUNDED offer is rejected. +/// +/// **TEST-ONLY ROW** for the same reason as the row above: the guard ships already. It is +/// also the D-1 rider — the ONLY test that exercises `handle_declare_shortcut`'s +/// `UntilLethal if offer.schema.is_bounded()` arm, so it is the behavioural proof that +/// swapping the inline `max_iterations < MAX_SHORTCUT_CYCLES` for the shared predicate is +/// semantics-preserving. +/// +/// REVERT-PROBES: delete that arm ⇒ an unbounded drive runs past the measured threshold. +/// Invert `ShortcutDecisionSchema::is_bounded()` to `>=` ⇒ THIS row flips too, together with +/// both `phase-ai` rows — one edit to one predicate measurable at every caller. If that +/// inversion leaves this row green, the engine kept a private copy of the comparison. +/// MUST-NOT-FLIP: the whole shipped suite's unbounded offers still accept `UntilLethal`. +#[test] +fn until_lethal_against_a_bounded_offer_is_rejected() { + use engine::analysis::decision_template::IterationCount; + + let mut state = restore_dump(&gunzip_dump(include_bytes!( + "../fixtures/dina_conqueror_4p.json.gz" + ))); + drive_to_bounded_offer(&mut state, 400) + .expect("the bounded offer must fire; see the acceptance row"); + let (proposer, _, schema) = bounded_offer_parts(&state); + assert!( + schema.is_bounded(), + "REACH-GUARD: the guard under test is keyed on `is_bounded()`, so an unnarrowed offer \ + would take a different arm and the row would be vacuous" + ); + let lives_before: Vec = state.players.iter().map(|p| p.life).collect(); + + let result = apply( + &mut state, + proposer, + GameAction::DeclareShortcut { + count: IterationCount::UntilLethal, + template: None, + }, + ) + .expect("the declare is a legal action; it is REFUSED by being handed back"); + + assert!( + matches!(result.waiting_for, WaitingFor::Priority { .. }), + "CR 732.2a: `UntilLethal` names no count at all, so it cannot be legal against an \ + offer whose producer measured a CR 704 threshold inside the loop; got {:?}", + result.waiting_for + ); + assert!( + !matches!(state.waiting_for, WaitingFor::RespondToShortcut { .. }), + "no CR 732.2b window for a rejected declaration" + ); + assert_eq!( + state.players.iter().map(|p| p.life).collect::>(), + lives_before, + "zero committed cycles" + ); +} diff --git a/crates/engine/tests/integration/loop_shortcut_mana_engine.rs b/crates/engine/tests/integration/loop_shortcut_mana_engine.rs index 75db5c1750..52c6b62253 100644 --- a/crates/engine/tests/integration/loop_shortcut_mana_engine.rs +++ b/crates/engine/tests/integration/loop_shortcut_mana_engine.rs @@ -679,6 +679,7 @@ fn loop_action_sequence_conditional_load_migration() { win_kind: WinKind::Advantage, mandatory: false, residual_board_delta: BoardDelta::default(), + per_cycle: None, }, schema: ShortcutDecisionSchema::default(), }; diff --git a/crates/phase-ai/src/policies/loop_shortcut.rs b/crates/phase-ai/src/policies/loop_shortcut.rs index 98ecf29759..84f077aa91 100644 --- a/crates/phase-ai/src/policies/loop_shortcut.rs +++ b/crates/phase-ai/src/policies/loop_shortcut.rs @@ -134,6 +134,7 @@ impl TacticalPolicy for LoopShortcutPolicy { let WaitingFor::LoopShortcut { proposer, predicted_winner, + schema, .. } = &ctx.state.waiting_for else { @@ -176,23 +177,56 @@ impl TacticalPolicy for LoopShortcutPolicy { PolicyVerdict::reject(PolicyReason::new("loop_shortcut_untillethal_cannot_crown")) } - // CR 732.2a "a loop that repeats a specified number of times": neither rejected nor - // boosted. Two independent reasons. (1) The AI never emits `Fixed` — its ONLY - // `DeclareShortcut` construction site (`candidates.rs:3012`) hardcodes `UntilLethal`. - // (2) A count-blind reject would be wrong for the CLASS: `materialize_fixed_shortcut` - // drives and COMMITS `n` whole cycles without ever reading `predicted_winner`, so a - // small-`n` `Fixed` is genuine committed board progress whoever is latched. + // CR 732.2a "a loop that repeats a specified number of times". The verdict splits + // on whether the OFFER states a real CR 704 bound, because the domination argument + // below is valid only when it does. // - // NOTE (tripwire): a `Fixed(n)` large enough to cross lethal WOULD commit a `GameOver` - // crowning whoever the DRIVE's state-based actions crown (`drive_one_shortcut_cycle`, - // `engine.rs:1180-1186`, forwards the SBA's own `Option` — which is the - // latched winner when the prediction was right, and can even be `None`, a CR 104.4b - // draw). `materialize_fixed_shortcut`'s `CrossLethal` arm (`engine.rs:1393-1402`) - // forwards it WITHOUT filtering on `proposal.predicted_winner`, unlike BOTH - // `UntilLethal` crown gates (`engine.rs:971`, `engine.rs:1000`). Such a declare by a - // faller proposer is therefore a committed self-loss — exactly what the `UntilLethal` - // arm above rejects. REVISIT THIS ARM if the candidate generator ever emits `Fixed`. - (_, IterationCount::Fixed(_)) => na(), + // UNBOUNDED offer ⇒ neither rejected nor boosted, deliberately. An offer whose + // producer could not compute a bound publishes `MAX_SHORTCUT_CYCLES`, so it states + // no CR 704 threshold for a domination argument to stand on, and a count-blind + // reject would be wrong for the CLASS: `materialize_fixed_shortcut` drives and + // COMMITS `n` whole cycles without ever reading `predicted_winner`, so a small-`n` + // `Fixed` is genuine committed board progress whoever is latched. + // + // NOTE (tripwire, still live for the unbounded branch): a `Fixed(n)` large enough + // to cross lethal WOULD commit a `GameOver` crowning whoever the DRIVE's + // state-based actions crown — `materialize_fixed_shortcut`'s `CrossLethal` arm + // forwards the SBA's own `Option` WITHOUT filtering on + // `proposal.predicted_winner`, unlike both `UntilLethal` crown gates. Such a + // declare by a faller proposer is a committed self-loss, exactly what the + // `UntilLethal` arm above rejects. On a BOUNDED offer that hazard is discharged by + // `elimination_bounds`' contract rather than by an AI-side computation: every `n` + // within `max_iterations` provably eliminates nobody. + (_, IterationCount::Fixed(_)) if !schema.is_bounded() => na(), + + // CR 732.2a: over the offered bound. The AI-side mirror of the engine's own + // declare-time guard — such a declare names a count at which some living player + // crosses a CR 704.5a / CR 704.5c / CR 104.3c threshold inside the proposal, which + // is a conditional action, so the engine hands it back fail-closed with ZERO + // committed cycles while the CR 732.2b response window is spent. Weakly dominated + // by declining: the outcome set is {no-op minus a response window}. Same + // domination shape the `(None, UntilLethal)` arm above encodes. + (_, IterationCount::Fixed(n)) if *n > schema.max_iterations => PolicyVerdict::reject( + PolicyReason::new("loop_shortcut_bounded_declare_over_bound") + .with_fact("declared", i64::from(*n)) + .with_fact("max_iterations", i64::from(schema.max_iterations)), + ), + + // CR 732.2a: within the offered bound on a bounded offer ⇒ committed board + // progress that eliminates nobody. Game-deciding ⇒ critical band, via the + // auto-banding `PolicyVerdict::score` (NEVER `preference`, whose `debug_assert!` + // band domain panics on this field's default). Both declare kinds route through + // the one reused config field on purpose: the winning arm above and this one are + // never both scoreable at a single node — a winning offer carries + // `predicted_winner: Some(..)` and an unnarrowed bound (so no `Fixed` candidate is + // generated), and a bounded offer carries `predicted_winner: None` (so the winning + // arm cannot be reached). With no ordering to distort, a second tuned field would + // buy nothing and cost the full `UNTUNED_POLICY_PENALTY_FIELDS` protocol. + (_, IterationCount::Fixed(n)) => PolicyVerdict::score( + ctx.penalties().loop_shortcut_winning_declare_bonus, + PolicyReason::new("loop_shortcut_bounded_declare_progress") + .with_fact("declared", i64::from(*n)), + ), } } } @@ -223,6 +257,7 @@ mod tests { win_kind: WinKind::LethalDamage, mandatory: false, residual_board_delta: BoardDelta::default(), + per_cycle: None, } } @@ -389,6 +424,13 @@ mod tests { /// Rows 3 + 5 + 7 — THE CLASS GUARD: `materialize_fixed_shortcut` never reads /// `predicted_winner` and COMMITS every cycle it drives, so a `Fixed(n)` declare is real board /// progress for ANY latched winner. Proves the reject set is not one state too wide. + /// + /// This row stays green LEGITIMATELY, not by luck: `ShortcutDecisionSchema::default()` + /// carries `max_iterations == MAX_SHORTCUT_CYCLES`, so `is_bounded()` is FALSE and the + /// verdict takes the deliberately-neutral unbounded branch. That branch is asserted + /// DIRECTLY by `loop_shortcut_unbounded_offer_keeps_fixed_neutral` below, so a future + /// re-scoping that deletes the `!schema.is_bounded()` guard fails THERE with a message + /// naming the guard, rather than here with no explanation. #[test] fn declare_fixed_is_never_rejected() { for predicted_winner in [None, Some(P0), Some(P1)] { @@ -404,6 +446,115 @@ mod tests { } } + /// A BOUNDED offer — the only shape `try_offer_bounded_cycle_shortcut` mints. `points` + /// stays empty because the engine's `Fixed` candidate generator is gated on that too. + fn bounded_offer_state(max_iterations: u32) -> GameState { + let mut state = GameState::new_two_player(0); + state.waiting_for = WaitingFor::LoopShortcut { + proposer: P0, + predicted_winner: None, + certificate: cert(), + schema: ShortcutDecisionSchema { + max_iterations, + ..Default::default() + }, + }; + state + } + + fn schema_of(state: &GameState) -> &ShortcutDecisionSchema { + match &state.waiting_for { + WaitingFor::LoopShortcut { schema, .. } => schema, + other => panic!("expected a LoopShortcut offer, got {other:?}"), + } + } + + /// CR 732.2a — the BOUNDED branch, both halves, on ONE schema differing only in `n`. + /// + /// (i) `Fixed(4)` with `max_iterations == 10` ⇒ committed progress that eliminates nobody + /// (`elimination_bounds`' contract), so the critical band `PolicyVerdict::score` routes + /// `8.0` to. (ii) `Fixed(11)` ⇒ the engine hands it back fail-closed with ZERO committed + /// cycles and the CR 732.2b window spent, i.e. weakly dominated by declining. + /// + /// REVERT-PROBES, each flipping a DIFFERENT subset so neither dominates the other: + /// * ⓟ1 restore `(_, IterationCount::Fixed(_)) => na()` ⇒ BOTH arms collapse to + /// `delta == 0.0` / `"loop_shortcut_na"` ⇒ FAILS. + /// * ⓟ2 delete the `n > schema.max_iterations` conjunct ⇒ arm (ii) SCORES instead of + /// rejecting ⇒ FAILS while arm (i) still passes, which is what proves the reject half is + /// not carried by ⓟ1. + /// * ⓟ3 invert `ShortcutDecisionSchema::is_bounded()` to `>=` ⇒ the in-test schema reads + /// unbounded ⇒ both arms take `na()` ⇒ FAILS, and so does + /// `loop_shortcut_unbounded_offer_keeps_fixed_neutral`. ⓟ3 flipping BOTH rows plus the + /// engine's `until_lethal_against_a_bounded_offer_is_rejected` is the single-authority + /// proof: one edit to one predicate is measurable at every caller. + #[test] + fn loop_shortcut_bounded_declare_scores_and_rejects_over_bound() { + let state = bounded_offer_state(10); + assert!( + schema_of(&state).is_bounded(), + "REACH-GUARD: every assertion below is vacuous unless the in-test schema really is \ + bounded; max_iterations = {}", + schema_of(&state).max_iterations + ); + + // (i) within the bound. + let inside = verdict_for(&state, &declare(IterationCount::Fixed(4))); + assert!( + matches!(inside, PolicyVerdict::Score { .. }), + "a declare within the offered bound must SCORE, got {inside:?}" + ); + assert_eq!(kind_of(&inside), "loop_shortcut_bounded_declare_progress"); + assert!( + delta_of(&inside) > STRONG_MAX, + "a bounded declare is board-deciding ⇒ the critical band; got {} (STRONG_MAX = \ + {STRONG_MAX})", + delta_of(&inside) + ); + + // (ii) above the bound — the OPPOSITE verdict variant on the SAME schema. + let outside = verdict_for(&state, &declare(IterationCount::Fixed(11))); + assert!( + matches!(outside, PolicyVerdict::Reject { .. }), + "a declare above the offered bound contains a conditional action and is handed \ + back with zero committed cycles ⇒ weakly dominated, got {outside:?}" + ); + assert_eq!( + kind_of(&outside), + "loop_shortcut_bounded_declare_over_bound" + ); + } + + /// CR 732.2a — the `na()` branch asserted DIRECTLY rather than inferred from which arm + /// happened to be reached. This row and the one above assert OPPOSITE outcomes for the + /// SAME `Fixed(n)`, discriminated by ONE field of the schema: a constant-`na()` + /// implementation fails the row above, a constant-`Score` implementation fails this one. + /// + /// REVERT-PROBES: ⓟ3 (invert `is_bounded()` to `>=`) ⇒ the default schema reads bounded ⇒ + /// this row gets `Score` / `"…_progress"` ⇒ FAILS. ⓟ4 delete the + /// `!schema.is_bounded() => na()` branch ⇒ same failure, and `declare_fixed_is_never_rejected` + /// fails with it. + #[test] + fn loop_shortcut_unbounded_offer_keeps_fixed_neutral() { + for predicted_winner in [None, Some(P0), Some(P1)] { + let state = offer_state(predicted_winner); + assert!( + !schema_of(&state).is_bounded(), + "REACH-GUARD: this row asserts the UNBOUNDED branch, so the default schema must \ + read unbounded — `ShortcutDecisionSchema::default()` carries \ + `max_iterations == MAX_SHORTCUT_CYCLES`; measured {}", + schema_of(&state).max_iterations + ); + let v = verdict_for(&state, &declare(IterationCount::Fixed(4))); + assert_eq!( + delta_of(&v), + 0.0, + "an offer stating NO CR 704 bound gives the domination argument nothing to \ + stand on, so `Fixed(n)` is deliberately neutral (winner {predicted_winner:?})" + ); + assert_eq!(kind_of(&v), "loop_shortcut_na"); + } + } + /// E2E, HEURISTIC branch (VeryEasy: `search.enabled == false` ⇒ the tactical score is added /// RAW). Without the policy the class-bonus table makes Declare (0.5) beat Decline (0.4) in /// every state; with it the `Reject` drives Declare's softmax weight to `exp(-inf/T) == 0`, so diff --git a/crates/phase-ai/src/projection.rs b/crates/phase-ai/src/projection.rs index 743de5f16e..09196587b1 100644 --- a/crates/phase-ai/src/projection.rs +++ b/crates/phase-ai/src/projection.rs @@ -645,6 +645,7 @@ mod tests { win_kind: engine::analysis::loop_check::WinKind::LethalDamage, mandatory: false, residual_board_delta: engine::analysis::resource::BoardDelta::default(), + per_cycle: None, }, schema: engine::analysis::decision_template::ShortcutDecisionSchema::default(), }; diff --git a/crates/phase-ai/src/search.rs b/crates/phase-ai/src/search.rs index 8d6002d9be..0319010998 100644 --- a/crates/phase-ai/src/search.rs +++ b/crates/phase-ai/src/search.rs @@ -4714,6 +4714,7 @@ mod tests { win_kind: engine::analysis::loop_check::WinKind::LethalDamage, mandatory: false, residual_board_delta: engine::analysis::resource::BoardDelta::default(), + per_cycle: None, }, schema: engine::analysis::decision_template::ShortcutDecisionSchema::default(), }; From 3b7072443f2e2a02d1ad6e7461cc1381f0f0d3ea Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Tue, 28 Jul 2026 10:09:40 -0500 Subject: [PATCH 03/62] fix(engine): a mandatory draw is not a resolution-time choice The bounded-shortcut offer requires every stack entry's resolution-time choices to be specified. That verdict came from an allow-list of exactly two Effect variants -- GainLife and LoseLife -- out of roughly two hundred, with everything else falling to a fail-closed MayPrompt. The exclusions were never assessed and found choice-bearing; they were simply never enumerated, so a draining loop whose stack held a draw trigger could never be fast-forwarded. Keyed on the MECHANISM, never the variant name: a mandatory draw whose only prompt route is its replacement environment. The same Effect::Draw is genuinely choice-bearing when its ability is optional (CR 603.5), and stays refused; a count of "up to" is a CR 608.2d resolution-time choice and is excluded fail-closed, recursively, so a future QuantityExpr variant cannot smuggle one past a wildcard. The verdict is parameterized rather than given a sibling: FreeUnlessReplacements carries the set of replacement classes its obligation covers, and chained abilities union them. A FreeUnlessDrawReplacements sibling would have forced all three consumers to re-derive that union. The parameterization is grounded, not assumed: all three prompt seams live in the event-agnostic pipeline_loop and none branches on event class. Also corrects a premise this code documented and a real fixture falsifies. The every-entry scan was justified by "in an exact-recurrence window every entry re-announces each cycle"; the dellian dump is a growing-cascade window over a frozen bottom prefix -- 107 entries with identical ids and indices surviving 220 beats while the stack grew above them. dellian is named there as the refutation only. No allow-list widening of any size unblocks it, and nothing here claims otherwise. CR 121.1 / CR 616.1 / CR 608.2d / CR 603.5 / CR 702.52a / CR 704.5b (each grepped in docs/MagicCompRules.txt; 702.52a is dredge -- 702.51a, written from memory first, is convoke) Acceptance: bloodloop at 3 and 4 players goes 0 offers -> 1, with UnspecifiedChoiceWindow 34 -> 0 attributing the flip to that gate; the 2p offer moves beat 31 -> 29. All three beats pinned. Five revert probes, each flipping its own assertion. Tests: 22048 passed / 0 failed / 15 ignored (cargo test -p engine); cargo nextest run -p engine reports 22048 passed / 8 skipped -- it does not run doc-tests, so cite the runner. clippy --workspace --all-targets -D warnings clean. Assisted-by: ClaudeCode:claude-opus-4.8 --- crates/engine/src/analysis/resource.rs | 319 ++++++++++++++---- crates/engine/src/game/ability_scan.rs | 265 ++++++++++++--- .../engine/tests/integration/loop_shortcut.rs | 112 ++++++ 3 files changed, 588 insertions(+), 108 deletions(-) diff --git a/crates/engine/src/analysis/resource.rs b/crates/engine/src/analysis/resource.rs index f47b0e5494..c40eb88cda 100644 --- a/crates/engine/src/analysis/resource.rs +++ b/crates/engine/src/analysis/resource.rs @@ -1317,8 +1317,8 @@ fn entry_target_choice_is_pinned( /// /// `Some(residual)` ⇒ relieved, and `residual` is the classification the entry would have /// had WITHOUT its CR 603.5 gate, which the caller must go on to gate exactly like any -/// unpinned entry's (a pinned "may" says nothing about the CR 616.1 life-event replacement -/// surface). `None` ⇒ no relief. +/// unpinned entry's (a pinned "may" says nothing about the CR 616.1 replacement surface +/// for whichever event classes the residual names). `None` ⇒ no relief. /// /// ATTRIBUTION is the load-bearing part. `ability_resolution_choice_freedom` returns /// `MayPrompt` for SIX independent reasons (`game/ability_scan.rs:6534-6560` plus the @@ -1350,7 +1350,7 @@ fn pinned_may_choice_relief( without_may_gate.optional = false; match crate::game::ability_scan::ability_resolution_choice_freedom(&without_may_gate) { ResolutionChoiceFreedom::MayPrompt => None, - residual @ ResolutionChoiceFreedom::FreeUnlessLifeReplacements => Some(residual), + residual @ ResolutionChoiceFreedom::FreeUnlessReplacements(_) => Some(residual), } } @@ -1406,14 +1406,25 @@ pub(crate) fn loop_states_cover_modulo_growth(prior: &GameState, current: &GameS /// for a triggered ability via CR 603.3d), the same /// [`stack_entry_resolution_choice_freedom`] (CR 608.2d resolution-time prompts), the same /// [`entry_target_choice_is_pinned`] / [`pinned_may_choice_relief`] pin relief, and the same -/// CR 616.1 [`life_event_replacements_may_prompt`] environmental guard the -/// `FreeUnlessLifeReplacements` verdict's own contract requires. Nothing is re-derived here. +/// CR 616.1 [`replacement_environment_may_prompt`] environmental guard the +/// `FreeUnlessReplacements` verdict's own contract requires. Nothing is re-derived here. /// /// STRICTER than gate (3) in one deliberate way: gate (3) examines only entries whose /// normalized kind strictly GREW, because a non-grown place is one the window already /// observed resolving. An offer makes a stronger claim — that N FUTURE repetitions are -/// predictable — and in an exact-recurrence window every entry re-announces each cycle, so -/// every entry is examined. +/// predictable — so every entry is examined, not only the grown ones. +/// +/// ⚠ THE ORIGINAL JUSTIFICATION FOR THAT WIDTH WAS MEASURED FALSE AND IS CORRECTED HERE. +/// It read: "in an exact-recurrence window every entry re-announces each cycle, so every +/// entry is examined." A shortcut window need not be exact-recurrence at all, and when it +/// is a GROWING CASCADE the premise fails outright. Measured on the `dellian` 4p fixture: +/// the window is a growing cascade over a FROZEN 140-deep bottom prefix — the same 107 +/// entries, identical `ObjectId` set and identical index range, survived 220 beats while +/// the stack grew above them. Those entries provably never re-announced and never +/// resolved, so nothing the window observed says anything about them. +/// That does not weaken the predicate — it STRENGTHENS the case for scanning every entry: +/// a frozen entry is one the window has NO evidence about, which is precisely the entry a +/// grown-only scan would skip. The width is right; only the stated reason was wrong. pub(crate) fn stack_choices_are_all_specified( state: &GameState, proposer: PlayerId, @@ -1438,25 +1449,29 @@ pub(crate) fn stack_choices_are_all_specified( } } // Resolution-time (gate (6)'s fact), including its paired CR 616.1 obligation. - let mut needs_life_guard = false; + // The obligation is a UNION over entries: a stack holding both a life entry and a + // draw entry owes both environmental checks, and each verdict names its own class. + let mut obligations = crate::game::ability_scan::ReplacementPromptClasses::NONE; for entry in &state.stack { match stack_entry_resolution_choice_freedom(entry) { crate::game::ability_scan::ResolutionChoiceFreedom::MayPrompt => { match pinned_may_choice_relief(state, entry, scope) { Some( - crate::game::ability_scan::ResolutionChoiceFreedom::FreeUnlessLifeReplacements, - ) => needs_life_guard = true, + crate::game::ability_scan::ResolutionChoiceFreedom::FreeUnlessReplacements( + classes, + ), + ) => obligations = obligations.or(classes), Some(crate::game::ability_scan::ResolutionChoiceFreedom::MayPrompt) | None => { return false } } } - crate::game::ability_scan::ResolutionChoiceFreedom::FreeUnlessLifeReplacements => { - needs_life_guard = true + crate::game::ability_scan::ResolutionChoiceFreedom::FreeUnlessReplacements(classes) => { + obligations = obligations.or(classes) } } } - !(needs_life_guard && life_event_replacements_may_prompt(state)) + !replacement_environment_may_prompt(state, obligations) } /// CR 732.2a: [`loop_states_cover_modulo_growth`] with an OFFER's published pin slots in @@ -1607,11 +1622,11 @@ pub(crate) fn loop_states_cover_modulo_growth_scoped( // eligibility over player counters, CR 701.34a) can open a prompt that the // AST-level item-4 scan cannot see. Verdicts come from the ability_scan // classifier (pure fact-producers — rejection is decided ONLY here); - // FreeUnlessLifeReplacements additionally requires the CR 616.1 environmental - // guard below. THIS block is the single gate seam for resolution-choice - // rejection (item 3 is untouched and gates a different fact — announcement-time - // ordering input). Perf: O(stack × AST) + O(objects × defs) via the guard — - // same order as items (4)/(5). + // FreeUnlessReplacements additionally requires the CR 616.1 environmental + // guard below, for exactly the event classes its payload names. THIS block is the + // single gate seam for resolution-choice rejection (item 3 is untouched and gates + // a different fact — announcement-time ordering input). Perf: O(stack × AST) + + // O(objects × defs) via the guard — same order as items (4)/(5). // // EXTENSION POINT — pinned fixed choices (CR 732.2a): a shortcut proposal MAY // pre-specify choices in advance ("always choose permanent P"); only @@ -1634,28 +1649,30 @@ pub(crate) fn loop_states_cover_modulo_growth_scoped( // relief predicate is the mint predicate rather than a coarser sibling of it. // Precondition (b) is why relief is not a `continue`: the entry's RESIDUAL verdict // (its classification with the published CR 603.5 gate discharged) re-enters the same - // gating an unpinned entry gets, so `FreeUnlessLifeReplacements` still arms the - // CR 616.1 environmental guard below — a pinned target/"may" says nothing about whose - // life-event replacements might prompt. - let mut needs_life_guard = false; + // gating an unpinned entry gets, so `FreeUnlessReplacements` still arms the + // CR 616.1 environmental guard below for the classes it names — a pinned target/"may" + // says nothing about whose life- or draw-event replacements might prompt. + let mut obligations = crate::game::ability_scan::ReplacementPromptClasses::NONE; for entry in ¤t.stack { match stack_entry_resolution_choice_freedom(entry) { crate::game::ability_scan::ResolutionChoiceFreedom::MayPrompt => { match pinned_may_choice_relief(current, entry, scope) { Some( - crate::game::ability_scan::ResolutionChoiceFreedom::FreeUnlessLifeReplacements, - ) => needs_life_guard = true, + crate::game::ability_scan::ResolutionChoiceFreedom::FreeUnlessReplacements( + classes, + ), + ) => obligations = obligations.or(classes), Some(crate::game::ability_scan::ResolutionChoiceFreedom::MayPrompt) | None => { return false } } } - crate::game::ability_scan::ResolutionChoiceFreedom::FreeUnlessLifeReplacements => { - needs_life_guard = true + crate::game::ability_scan::ResolutionChoiceFreedom::FreeUnlessReplacements(classes) => { + obligations = obligations.or(classes) } } } - if needs_life_guard && life_event_replacements_may_prompt(current) { + if replacement_environment_may_prompt(current, obligations) { return false; } @@ -3848,42 +3865,51 @@ pub(crate) fn life_growth_is_observed(state: &GameState) -> bool { ) } -/// The proposed-event class a life-affecting `ReplacementEvent` watches. CR 616.1 +/// The proposed-event class a `ReplacementEvent` watches. CR 616.1 /// material-ordering competition is counted PER proposed-event class, because a /// single `ProposedEvent::LifeLoss` draws candidates from every LifeLoss-matching /// registry key at once (`LoseLife` + `LifeReduced` + `PayLife`). #[derive(Clone, Copy, PartialEq, Eq)] -enum LifeEventClass { +enum ReplacedEventClass { /// Matches `ProposedEvent::LifeGain`. LifeGain, /// Matches `ProposedEvent::LifeLoss`. LifeLoss, + /// Matches `ProposedEvent::Draw`. + Draw, } -/// CR 614.1a: is this replacement event in the LIFE class — i.e. does its -/// registry matcher match `ProposedEvent::LifeGain` or `ProposedEvent::LifeLoss`? -/// Compiler-exhaustive over ALL `ReplacementEvent` variants (no wildcard) so a -/// NEW variant fails to compile until classified against the coupling rule. +/// CR 614.1a: which proposed-event class does this replacement event's registry +/// matcher (`crate::game::replacement`) watch? Compiler-exhaustive over ALL +/// `ReplacementEvent` variants (no wildcard) so a NEW variant fails to compile until +/// classified against the coupling rule. /// -/// COUPLING RULE (grep-enforced when the set is edited): life-class ⇔ the event's -/// registry matcher (`crate::game::replacement`) matches a life `ProposedEvent`. -/// Measured (`rg -n 'ProposedEvent::Life(Gain|Loss)'` over the matcher fns): +/// COUPLING RULE (grep-enforced when the set is edited): a variant is classified by +/// the `ProposedEvent` its MATCHER matches, never by its name — a hand-picked set had +/// already missed `PayLife` and `LifeReduced`. Measured (`rg -n 'ProposedEvent::'` over +/// the matcher fns, cross-checked against `replacement_event_keys_for_event`, which is +/// what actually selects candidate keys for a proposed event): /// `gain_life_matcher` (GainLife → LifeGain), `lose_life_matcher` (LoseLife → /// LifeLoss), `life_reduced_matcher` (LifeReduced → LifeLoss), `pay_life_matcher` -/// (PayLife → LifeLoss). Classify by the MATCHER, not the name — a hand-picked -/// set had already missed `PayLife` and `LifeReduced`. -fn replacement_event_matches_life(event: &ReplacementEvent) -> Option { +/// (PayLife → LifeLoss), `draw_matcher` (Draw → Draw). +/// +/// `DrawCards` is classified `Draw` FAIL-CLOSED even though it cannot currently apply: +/// its registry entry is a `stub()` and `replacement_event_keys_for_event` emits only +/// `ReplacementEvent::Draw` for a `ProposedEvent::Draw`, so a `DrawCards` def is never +/// a live candidate. Counting it anyway only over-counts the CR 616.1 competition ⇒ +/// over-rejects ⇒ safe, and it survives the alias being wired up later. +fn replacement_event_proposed_class(event: &ReplacementEvent) -> Option { match event { - ReplacementEvent::GainLife => Some(LifeEventClass::LifeGain), + ReplacementEvent::GainLife => Some(ReplacedEventClass::LifeGain), ReplacementEvent::LoseLife | ReplacementEvent::LifeReduced | ReplacementEvent::PayLife => { - Some(LifeEventClass::LifeLoss) + Some(ReplacedEventClass::LifeLoss) } - // Non-life events (explicitly listed ⇒ None, so a new variant must be + ReplacementEvent::Draw | ReplacementEvent::DrawCards => Some(ReplacedEventClass::Draw), + // Unclassified events (explicitly listed ⇒ None, so a new variant must be // classified against the coupling rule before it compiles). ReplacementEvent::DamageDone | ReplacementEvent::Destroy | ReplacementEvent::Discard - | ReplacementEvent::Draw | ReplacementEvent::TurnFaceUp | ReplacementEvent::Counter | ReplacementEvent::ChangeZone @@ -3897,7 +3923,6 @@ fn replacement_event_matches_life(event: &ReplacementEvent) -> Option Option Option Option bool { +/// material-ordering prompt (replacement.rs:8814-8838). A single mandatory +/// quantity-mod def with no body (Bloodletter / Rhox Faithmender class on the +/// life side, Teferi's Ageless Insight class on the draw side) trips NONE of +/// these and resolves deterministically (replacement.rs:8839-8860). +fn replacement_environment_may_prompt( + state: &GameState, + classes: crate::game::ability_scan::ReplacementPromptClasses, +) -> bool { + let in_scope = |class: ReplacedEventClass| match class { + ReplacedEventClass::LifeGain | ReplacedEventClass::LifeLoss => classes.life, + ReplacedEventClass::Draw => classes.draw, + }; // CR 614.1 / CR 113.6: `active_replacements` is all-zones (its callers restrict). // `find_applicable_replacements` — the real pipeline this over-approximates — // scans [Battlefield, Command] (plus the entering/discarded card, irrelevant to a - // life event). A life-class replacement on a card in the library / hand / + // life or draw event). An in-class replacement on a card in the library / hand / // graveyard cannot apply during the loop; scanning it is the same all-zones // false-reject class as the observer firewalls, so match the pipeline's scope. let object_defs = crate::game::functioning_abilities::active_replacements(state) @@ -3972,8 +4018,10 @@ fn life_event_replacements_may_prompt(state: &GameState) -> bool { let mut gain_defs = 0usize; let mut loss_defs = 0usize; + let mut draw_defs = 0usize; for def in object_defs.chain(floating_defs) { - let Some(class) = replacement_event_matches_life(&def.event) else { + let Some(class) = replacement_event_proposed_class(&def.event).filter(|c| in_scope(*c)) + else { continue; }; // (a) single optional candidate prompts. @@ -3985,12 +4033,13 @@ fn life_event_replacements_may_prompt(state: &GameState) -> bool { return true; } match class { - LifeEventClass::LifeGain => gain_defs += 1, - LifeEventClass::LifeLoss => loss_defs += 1, + ReplacedEventClass::LifeGain => gain_defs += 1, + ReplacedEventClass::LifeLoss => loss_defs += 1, + ReplacedEventClass::Draw => draw_defs += 1, } } // (c) ≥2 defs competing for one proposed-event class ⇒ CR 616.1 ordering prompt. - gain_defs >= 2 || loss_defs >= 2 + gain_defs >= 2 || loss_defs >= 2 || draw_defs >= 2 } /// CR 614.1a: a replacement's BODY (not its `condition`) can read a projected @@ -6566,14 +6615,17 @@ mod tests { .push(def.clone()); } assert!( - life_event_replacements_may_prompt(&c_life), + replacement_environment_may_prompt( + &c_life, + crate::game::ability_scan::ReplacementPromptClasses::LIFE + ), "reach-guard: the installed optional def makes the CR 616.1 surface \ prompt-capable (arm 2's bare board does not)" ); let slots = [churn_src_slot(&c_life, 0), churn_src_slot(&c_life, 1)]; assert!( !loop_states_cover_modulo_growth_scoped(&p_life, &c_life, pinned_scope(&slots)), - "the discharged `may` leaves a FreeUnlessLifeReplacements RESIDUAL that must \ + "the discharged `may` leaves a FreeUnlessReplacements(LIFE) RESIDUAL that must \ re-arm the CR 616.1 guard — relief is not a `continue`" ); } @@ -7010,7 +7062,7 @@ mod tests { } /// Fixed-amount `LoseLife` churner — allow-listed - /// (`FreeUnlessLifeReplacements`), reads no projected resource. Distinct + /// (`FreeUnlessReplacements(LIFE)`), reads no projected resource. Distinct /// normalized kind from `gain_ability`. fn lose_ability(amount: i32) -> ResolvedAbility { ResolvedAbility::new( @@ -7031,7 +7083,7 @@ mod tests { /// STRUCTURAL, not observational (the projected poison axis, CR 701.34a, can /// inhabit the option surface mid-extrapolation). Item 4 does NOT mask this: /// `scan_effect(Proliferate)` is `Axes::NONE`. Revert-fail: delete the item-6 - /// loop, or classify `Proliferate` ⇒ `FreeUnlessLifeReplacements`. + /// loop, or classify `Proliferate` ⇒ `FreeUnlessReplacements`. #[test] fn n1_o_grown_choice_opening_proliferate_false() { let p = |id| churn_entry(id, 0, proliferate_ability(), None); @@ -11600,4 +11652,139 @@ mod tests { {shipped_json}" ); } + + // ── PR-7 Phase 5c: the DRAW verdict's paired CR 616.1 obligation ── + + /// A mandatory, non-"up to" `Effect::Draw` trigger — the starved shape the + /// `FreeUnlessReplacements(DRAW)` arm claims. + fn draw_entry(id: u64) -> StackEntry { + churn_entry( + id, + 0, + ResolvedAbility::new( + Effect::Draw { + count: QuantityExpr::Fixed { value: 1 }, + target: TargetFilter::Controller, + }, + vec![], + ObjectId(CHURN_SRC), + PlayerId(0), + ), + None, + ) + } + + fn with_replacements(entry: StackEntry, defs: &[ReplacementDefinition]) -> GameState { + let mut state = GameState::new_two_player(7); + state.stack.push_back(entry); + let oid = bf_object(&mut state, 900); + let object = state.objects.get_mut(&oid).expect("just inserted"); + for def in defs { + object.replacement_definitions.push(def.clone()); + } + state + } + + fn repl(event: ReplacementEvent, optional: bool) -> ReplacementDefinition { + let mut def = ReplacementDefinition::new(event); + if optional { + def.mode = crate::types::ability::ReplacementMode::Optional { decline: None }; + } + def + } + + /// CR 616.1 + CR 121.1: the draw verdict's environmental obligation is REAL (it can + /// reject) and CLASS-SCOPED (it rejects only on its own event class). + /// + /// Every arm is paired with the control that makes it non-vacuous: the bare board + /// arm proves a mandatory draw entry reaches and PASSES step (6) at all — without it + /// the three `false` arms would be indistinguishable from "draws are still refused + /// upstream" — and the cross-class arms prove the parameterization is load-bearing + /// rather than a rename of a guard that scans everything. + #[test] + fn draw_verdict_obligation_is_real_and_class_scoped() { + // (i) REACH-GUARD: a bare board with a mandatory draw on the stack PASSES. This + // is the assertion that flips if `Effect::Draw` goes back to `MayPrompt`. + assert!( + stack_choices_are_all_specified( + &with_replacements(draw_entry(10), &[]), + PlayerId(0), + &[] + ), + "a mandatory non-`up to` draw is starved: no replacement environment, no prompt" + ); + + // (ii) CR 702.52a dredge-class: a single OPTIONAL draw replacement prompts. + assert!( + !stack_choices_are_all_specified( + &with_replacements(draw_entry(10), &[repl(ReplacementEvent::Draw, true)]), + PlayerId(0), + &[] + ), + "an optional draw replacement is a genuine CR 608.2d resolution-time choice" + ); + + // (iii) CR 616.1 material ordering: two MANDATORY draw replacements compete. + assert!( + !stack_choices_are_all_specified( + &with_replacements( + draw_entry(10), + &[ + repl(ReplacementEvent::Draw, false), + repl(ReplacementEvent::Draw, false) + ] + ), + PlayerId(0), + &[] + ), + "CR 616.1: the affected player orders two competing mandatory replacements" + ); + + // (iv) ACCEPT-SIDE control: ONE mandatory, body-less draw replacement (Teferi's + // Ageless Insight class) resolves deterministically — the guard is not a blanket + // "any draw replacement rejects". + assert!( + stack_choices_are_all_specified( + &with_replacements(draw_entry(10), &[repl(ReplacementEvent::Draw, false)]), + PlayerId(0), + &[] + ), + "a lone mandatory quantity-mod replacement applies without a prompt" + ); + + // (v) CLASS SCOPING, both directions. A LIFE replacement says nothing about a + // DRAW-only stack and vice versa; an unparameterized guard would reject both. + assert!( + stack_choices_are_all_specified( + &with_replacements(draw_entry(10), &[repl(ReplacementEvent::GainLife, true)]), + PlayerId(0), + &[] + ), + "an optional LIFE replacement cannot prompt on a draw-only stack" + ); + assert!( + stack_choices_are_all_specified( + &with_replacements( + churn_entry(11, 0, lose_ability(1), None), + &[repl(ReplacementEvent::Draw, true)] + ), + PlayerId(0), + &[] + ), + "an optional DRAW replacement cannot prompt on a life-only stack" + ); + // …and the same optional LIFE replacement DOES reject a life stack, proving the + // arm above passes because of scoping and not because the def is inert. + assert!( + !stack_choices_are_all_specified( + &with_replacements( + churn_entry(11, 0, lose_ability(1), None), + &[repl(ReplacementEvent::LoseLife, true)] + ), + PlayerId(0), + &[] + ), + "positive control: the life guard still rejects its own class" + ); + } } diff --git a/crates/engine/src/game/ability_scan.rs b/crates/engine/src/game/ability_scan.rs index cc3bb26c15..469f164f7b 100644 --- a/crates/engine/src/game/ability_scan.rs +++ b/crates/engine/src/game/ability_scan.rs @@ -5887,6 +5887,50 @@ fn effect_census_role(e: &Effect) -> CensusRole { // header. Fail-closed default is `MayPrompt`. // --------------------------------------------------------------------------- +/// CR 616.1: the proposed-event classes whose replacement environment a +/// [`ResolutionChoiceFreedom::FreeUnlessReplacements`] verdict leaves for the caller +/// to discharge. +/// +/// A SET (same shape as [`Axes`] above), not one enum variant per class. Two reasons, +/// both load-bearing: a resolution chain joins `effect` with `sub_ability`/`else_ability` +/// and a mixed life+draw chain must accumulate BOTH obligations instead of collapsing +/// to `MayPrompt`; and the caller ORs the obligation across every stack entry, which is +/// a union, not a choice. Sibling variants (`FreeUnlessLifeReplacements` / +/// `FreeUnlessDrawReplacements`) would have re-derived that union at each of the three +/// consumers. +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub(crate) struct ReplacementPromptClasses { + /// CR 119.3: the resolver runs the LIFE-event replacement pipeline + /// (`ProposedEvent::LifeGain` / `ProposedEvent::LifeLoss`). + pub(crate) life: bool, + /// CR 121.1: the resolver runs the DRAW-event replacement pipeline + /// (`ProposedEvent::Draw`). + pub(crate) draw: bool, +} + +impl ReplacementPromptClasses { + /// No obligation — the accumulator's identity for the caller's union fold. + pub(crate) const NONE: Self = Self { + life: false, + draw: false, + }; + pub(crate) const LIFE: Self = Self { + life: true, + draw: false, + }; + pub(crate) const DRAW: Self = Self { + life: false, + draw: true, + }; + + pub(crate) fn or(self, other: Self) -> Self { + Self { + life: self.life || other.life, + draw: self.draw || other.draw, + } + } +} + /// CR 732.2a + CR 608.2d: resolution-time choice-freeness verdict for the /// growing-cascade cover gate (`analysis::resource` item 6). NOT an `Axes` /// axis — this classifies RESOLVER prompting behavior, not AST reads (module @@ -5894,45 +5938,81 @@ fn effect_census_role(e: &Effect) -> CensusRole { #[derive(Clone, Copy, PartialEq, Eq, Debug)] pub(crate) enum ResolutionChoiceFreedom { /// Resolving can never enter a non-priority `WaitingFor` in ANY state, - /// EXCEPT through the life-event replacement pipeline (single optional - /// candidate, replacement.rs:6221; CR 616.1 material ordering, - /// replacement.rs:6263; mandatory body-continuation drain, - /// replacement.rs:5511-5524 → engine_replacement.rs:1159). Callers MUST - /// pair this verdict with `analysis::resource::life_event_replacements_may_prompt` - /// — the paired environmental obligation is part of this variant's contract. + /// EXCEPT through the replacement pipeline for the carried event classes + /// (single optional candidate, replacement.rs:8775-8798; CR 616.1 material + /// ordering, replacement.rs:8814-8838; mandatory body-continuation drain, + /// replacement.rs:7834-7847 → engine_replacement.rs:2273). All three of those + /// prompt seams live in the event-agnostic `pipeline_loop`, which is why one + /// parameterized obligation covers every class rather than one guard per class. + /// Callers MUST pair this verdict with + /// `analysis::resource::replacement_environment_may_prompt` for exactly the + /// carried classes — the paired environmental obligation is part of this + /// variant's contract. /// - /// There is deliberately no plain `Free` variant yet: both allow-listed - /// kinds (`GainLife`/`LoseLife`) genuinely can prompt via the life-event - /// replacement pipeline, so `Free` would be uninhabited today. Adding it - /// later is compiler-guided (a new variant flags every exhaustive match). - FreeUnlessLifeReplacements, + /// There is deliberately no plain `Free` variant yet: every allow-listed kind + /// genuinely can prompt through its own replacement pipeline, so `Free` would be + /// uninhabited today. Adding it later is compiler-guided (a new variant flags + /// every exhaustive match). + FreeUnlessReplacements(ReplacementPromptClasses), /// May prompt, or unproven — the fail-closed default. MayPrompt, } impl ResolutionChoiceFreedom { /// Worst-of join for a resolution chain: `MayPrompt` dominates (a chain that - /// can prompt on either branch can prompt). + /// can prompt on either branch can prompt); two free verdicts UNION their + /// outstanding replacement-environment obligations. fn join(self, other: ResolutionChoiceFreedom) -> ResolutionChoiceFreedom { - if matches!(self, ResolutionChoiceFreedom::FreeUnlessLifeReplacements) - && matches!(other, ResolutionChoiceFreedom::FreeUnlessLifeReplacements) - { - ResolutionChoiceFreedom::FreeUnlessLifeReplacements - } else { - ResolutionChoiceFreedom::MayPrompt + match (self, other) { + ( + ResolutionChoiceFreedom::FreeUnlessReplacements(a), + ResolutionChoiceFreedom::FreeUnlessReplacements(b), + ) => ResolutionChoiceFreedom::FreeUnlessReplacements(a.or(b)), + _ => ResolutionChoiceFreedom::MayPrompt, + } + } +} + +/// CR 608.2d: is this `QuantityExpr` a CR 608.2d "up to N" count — a magnitude the +/// resolving player picks rather than one the state determines? +/// +/// Recursive and wildcard-free for the same reason the classifier it serves is: a NEW +/// `QuantityExpr` variant must be classified before it compiles, so an `UpTo` can never +/// be smuggled in under a newly-added wrapper. +/// +/// MEASURED DISCREPANCY, and the reason this guard exists at all: `Effect::Draw`'s own +/// type doc (types/ability.rs) says the drawer "chooses any 0..=resolve(max) at +/// resolution time via the `engine_resolution_choices` flow", but `effects/draw.rs` +/// never calls `QuantityExpr::peel_up_to` and contains no `WaitingFor` — the prompt is +/// documented, not implemented, so an `UpTo` draw currently draws the maximum. Rejecting +/// it is therefore a false-negative TODAY and stays sound the day the prompt is wired. +fn quantity_offers_up_to_choice(q: &QuantityExpr) -> bool { + match q { + QuantityExpr::UpTo { .. } => true, + QuantityExpr::Fixed { .. } | QuantityExpr::Ref { .. } => false, + QuantityExpr::DivideRounded { inner, .. } + | QuantityExpr::Offset { inner, .. } + | QuantityExpr::ClampMin { inner, .. } + | QuantityExpr::Multiply { inner, .. } => quantity_offers_up_to_choice(inner), + QuantityExpr::Power { exponent, base: _ } => quantity_offers_up_to_choice(exponent), + QuantityExpr::Difference { left, right } => { + quantity_offers_up_to_choice(left) || quantity_offers_up_to_choice(right) + } + QuantityExpr::Sum { exprs } | QuantityExpr::Max { exprs } => { + exprs.iter().any(quantity_offers_up_to_choice) } } } /// CR 608.2d: can resolving this single `Effect` ever offer a resolution-time /// player choice? Exhaustive `match` with NO wildcard catch-all arm — a NEW -/// `Effect` variant fails to compile here until it is classified. Only the two +/// `Effect` variant fails to compile here until it is classified. Only the /// allow-list arms make a soundness claim (grounded by a resolver trace); every /// other variant is the fail-closed `MayPrompt` (an ungrounded reject is only a /// false-negative cover rejection, so grouped arms need no per-kind evidence). fn effect_resolution_choice_freedom(e: &Effect) -> ResolutionChoiceFreedom { match e { - // ---- allow-list: choice-free EXCEPT the life-event replacement + // ---- allow-list: choice-free EXCEPT that kind's own replacement // pipeline (destructured WITHOUT `..` so a new field forces a // re-audit of the soundness claim) ---- // @@ -5942,20 +6022,54 @@ fn effect_resolution_choice_freedom(e: &Effect) -> ResolutionChoiceFreedom { // selection = pure filter eval (game/filter.rs: no WaitingFor); amount = // pure quantity eval (game/quantity.rs: no WaitingFor). Verdict is // payload-independent. CR 119.7 can't-gain short-circuit is deterministic. - // PAIRED OBLIGATION: caller runs life_event_replacements_may_prompt - // (resource.rs item 6), which also covers the mandatory body-continuation - // drain (H4 route c) and the Execute-arm stack.rs drain. + // PAIRED OBLIGATION: caller runs replacement_environment_may_prompt for + // the LIFE class (resource.rs item 6), which also covers the mandatory + // body-continuation drain (H4 route c) and the Execute-arm stack.rs drain. Effect::GainLife { amount: _, player: _, - } => ResolutionChoiceFreedom::FreeUnlessLifeReplacements, + } => ResolutionChoiceFreedom::FreeUnlessReplacements(ReplacementPromptClasses::LIFE), // CR 119.3 + CR 732.2a: same shape — resolve_lose (life.rs:293-365), // only prompt = NeedsChoice (life.rs:352-355). CR 119.8 can't-lose // short-circuit is deterministic. Same PAIRED OBLIGATION. Effect::LoseLife { amount: _, target: _, - } => ResolutionChoiceFreedom::FreeUnlessLifeReplacements, + } => ResolutionChoiceFreedom::FreeUnlessReplacements(ReplacementPromptClasses::LIFE), + // CR 121.1 + CR 121.2 + CR 732.2a: resolver trace effects/draw.rs — + // `resolve` (draw.rs:104-160) computes the count with a pure quantity eval + // (`resolve_quantity_with_targets`, game/quantity.rs: no WaitingFor) and the + // drawer with a pure lookup (`resolve_player_for_context_ref`, + // effects/mod.rs:6084: reads `ability`/`state`, returns a `PlayerId`), then + // hands the whole instruction to `start_draw_sequence_*` → + // `resume_draw_sequence`, i.e. the CR 121.2 per-card replacement pipeline. + // Its ONLY prompt is `ReplacementResult::NeedsChoice` (draw.rs:150); the + // whole file contains zero `WaitingFor` (`rg -c WaitingFor + // src/game/effects/draw.rs` == 0). Drawing from an empty library is not a + // prompt either — CR 704.5b makes it a state-based action. Same shape as the + // life pair, so the SAME parameterized PAIRED OBLIGATION applies, for the + // DRAW class. + // + // THE MECHANISM THIS ARM CLAIMS, and it is not "the variant is Draw": + // a draw is choice-free only when it is STARVED — when its sole route to a + // resolution-time prompt is the replacement ENVIRONMENT, which the paired + // obligation then measures. Two payload/context routes are NOT that, and both + // are excluded: + // * OPTIONAL draws ("you MAY draw a card", CR 603.5) never reach this arm. + // `ability_resolution_choice_freedom` returns `MayPrompt` on `optional` / + // `optional_targeting` / `optional_for` BEFORE dispatching to the effect + // classifier, and that refusal is CORRECT: the "may" is a genuine + // per-iteration CR 608.2d choice with no replacement effect involved. + // Widening keyed on the variant NAME would have silently swallowed it. + // * CR 608.2d "draw up to N" (`count: UpTo`) is a resolution-time COUNT + // choice; rejected here, fail-closed, by `quantity_offers_up_to_choice`. + Effect::Draw { count, target: _ } => { + if quantity_offers_up_to_choice(count) { + ResolutionChoiceFreedom::MayPrompt + } else { + ResolutionChoiceFreedom::FreeUnlessReplacements(ReplacementPromptClasses::DRAW) + } + } // ---- everything else: fail-closed MayPrompt. Grouped so the compiler // still enforces exhaustiveness (every variant is named); no payload // scanning needed on the reject side. ---- @@ -5966,7 +6080,6 @@ fn effect_resolution_choice_freedom(e: &Effect) -> ResolutionChoiceFreedom { | Effect::EachDealsDamageEqualToPower { .. } | Effect::OpponentGuess { .. } | Effect::SwapChosenLabels { .. } - | Effect::Draw { .. } | Effect::Pump { .. } | Effect::PairWith { .. } | Effect::Destroy { .. } @@ -8210,25 +8323,32 @@ mod tests { /// Guard test (9092a8961 standard): pins `effect_resolution_choice_freedom` /// and the ability-level wrapper flips. /// - /// The `FreeUnlessLifeReplacements` allow set is EXACTLY - /// `{Effect::GainLife, Effect::LoseLife}` — asserted below and pinned by the - /// allow-arm census (`rg -c 'ResolutionChoiceFreedom::FreeUnlessLifeReplacements' - /// ability_scan.rs` == 2, both inside `effect_resolution_choice_freedom`). A - /// future third allow arm must update this pin, the census, and add a - /// resolver-trace grounding row. + /// The `FreeUnlessReplacements` allow set is EXACTLY + /// `{Effect::GainLife, Effect::LoseLife, non-"up to" Effect::Draw}` — asserted + /// below and pinned by the allow-arm census + /// (`rg -c 'FreeUnlessReplacements\(ReplacementPromptClasses::' ability_scan.rs` + /// == 3, all inside `effect_resolution_choice_freedom`). The census matches on the + /// named-const payload on purpose: the looser + /// `FreeUnlessReplacements\(` counts 6, because `join`'s three match patterns bind + /// the payload as a variable and would drown the signal. A future fourth allow arm + /// must update this pin, the census, and add a resolver-trace grounding row. + /// Each allow arm's obligation CLASS is asserted too, not just its variant: a + /// life arm that returned `DRAW` would pass a variant-only assertion while + /// silently checking the wrong replacement environment. /// /// Compiler-exhaustiveness leg: `effect_resolution_choice_freedom`'s match has /// no wildcard catch-all, so a NEW `Effect` variant fails to compile until classified. /// Executed revert-fail (documented in the commit): classifying `Effect::Scry` - /// ⇒ `FreeUnlessLifeReplacements` turns this test RED. + /// ⇒ `FreeUnlessReplacements` turns this test RED. #[test] fn resolution_choice_verdicts_are_exactly_pinned() { use crate::types::ability::{ AbilityCost, AbilityDefinition, AbilityKind, UnlessPayModifier, }; - use ResolutionChoiceFreedom::{FreeUnlessLifeReplacements, MayPrompt}; + use ResolutionChoiceFreedom::{FreeUnlessReplacements, MayPrompt}; - // Allow-list (soundness claims) ⇒ FreeUnlessLifeReplacements. + // Allow-list (soundness claims) ⇒ FreeUnlessReplacements, each naming the + // event class whose replacement environment the caller must then check. let gain = Effect::GainLife { amount: QuantityExpr::Fixed { value: 1 }, player: TargetFilter::Controller, @@ -8237,13 +8357,55 @@ mod tests { amount: QuantityExpr::Fixed { value: 1 }, target: None, }; + let draw = Effect::Draw { + count: QuantityExpr::Fixed { value: 1 }, + target: TargetFilter::Controller, + }; assert_eq!( effect_resolution_choice_freedom(&gain), - FreeUnlessLifeReplacements + FreeUnlessReplacements(ReplacementPromptClasses::LIFE) ); assert_eq!( effect_resolution_choice_freedom(&lose), - FreeUnlessLifeReplacements + FreeUnlessReplacements(ReplacementPromptClasses::LIFE) + ); + // CR 121.1: a MANDATORY, non-"up to" draw is starved — its only prompt route + // is the CR 616.1 draw-replacement environment, which the DRAW obligation + // hands to the caller. + assert_eq!( + effect_resolution_choice_freedom(&draw), + FreeUnlessReplacements(ReplacementPromptClasses::DRAW) + ); + // CR 608.2d: "draw up to N" is a resolution-time COUNT choice ⇒ excluded, + // including under an arithmetic wrapper (the recursion, not just the top level). + for count in [ + QuantityExpr::UpTo { + max: Box::new(QuantityExpr::Fixed { value: 3 }), + }, + QuantityExpr::Offset { + inner: Box::new(QuantityExpr::UpTo { + max: Box::new(QuantityExpr::Fixed { value: 3 }), + }), + offset: 1, + }, + ] { + assert_eq!( + effect_resolution_choice_freedom(&Effect::Draw { + count: count.clone(), + target: TargetFilter::Controller, + }), + MayPrompt, + "up-to draw count {count:?} is a CR 608.2d resolution-time choice" + ); + } + // The join is a UNION of obligations, not a collapse to MayPrompt: a chain + // that both drains and draws owes BOTH environmental checks. + assert_eq!( + effect_resolution_choice_freedom(&lose).join(effect_resolution_choice_freedom(&draw)), + FreeUnlessReplacements(ReplacementPromptClasses { + life: true, + draw: true + }) ); // Reject side: the finding's kinds + adjacent siblings ⇒ MayPrompt, each @@ -8278,14 +8440,14 @@ mod tests { ); } - // Explicit allow-set pin: exactly {GainLife, LoseLife}. Every other kind - // sampled above is on the reject side; the allow-arm census is the - // structural guard against a silent third allow arm. + // Explicit allow-set pin: exactly {GainLife, LoseLife, non-"up to" Draw}. + // Every other kind sampled above is on the reject side; the allow-arm census + // is the structural guard against a silent fourth allow arm. assert!( rejects .iter() .all(|e| effect_resolution_choice_freedom(e) == MayPrompt), - "the FreeUnlessLifeReplacements set is exactly {{Effect::GainLife, Effect::LoseLife}}" + "the FreeUnlessReplacements set is exactly {{GainLife, LoseLife, non-up-to Draw}}" ); // Ability-level wrapper flips: base ⇒ Free (paired positive reach-guard), @@ -8294,13 +8456,32 @@ mod tests { let base = ResolvedAbility::new(gain.clone(), Vec::new(), ObjectId(1), PlayerId(0)); assert_eq!( ability_resolution_choice_freedom(&base), - FreeUnlessLifeReplacements + FreeUnlessReplacements(ReplacementPromptClasses::LIFE) ); let mut a = base.clone(); a.optional = true; assert_eq!(ability_resolution_choice_freedom(&a), MayPrompt); + // CR 603.5: THE MECHANISM GUARD for the draw widening. The same + // `Effect::Draw` payload classifies FREE when the ability is mandatory and + // `MayPrompt` when it is optional — proving the allow arm is keyed on the + // starved MECHANISM and not on the variant name. Both directions asserted, so + // neither can go vacuous. + let draw_base = ResolvedAbility::new(draw.clone(), Vec::new(), ObjectId(1), PlayerId(0)); + assert_eq!( + ability_resolution_choice_freedom(&draw_base), + FreeUnlessReplacements(ReplacementPromptClasses::DRAW) + ); + let mut optional_draw = draw_base.clone(); + optional_draw.optional = true; + assert_eq!( + ability_resolution_choice_freedom(&optional_draw), + MayPrompt, + "an optional draw is a genuine CR 603.5 resolution-time choice and must NOT be \ + swallowed by the mandatory-draw allow arm" + ); + let mut a = base.clone(); a.optional_targeting = true; assert_eq!(ability_resolution_choice_freedom(&a), MayPrompt); diff --git a/crates/engine/tests/integration/loop_shortcut.rs b/crates/engine/tests/integration/loop_shortcut.rs index a9421db3c4..ee8fb65312 100644 --- a/crates/engine/tests/integration/loop_shortcut.rs +++ b/crates/engine/tests/integration/loop_shortcut.rs @@ -7921,3 +7921,115 @@ fn until_lethal_against_a_bounded_offer_is_rejected() { "zero committed cycles" ); } + +// ─────────────── PR-7 Phase 5c — the MANDATORY-DRAW cascade, ≥3 players ─────────────── + +/// Real card (Psychosis Crawler is the printed member of this class); the synthetic name +/// keeps the fixture off the card database. +const BLEEDER: &str = "Whenever you draw a card, each opponent loses 1 life."; +/// Synthetic mandatory payoff. Deliberately NOT "you may draw a card" — the "may" is a +/// genuine CR 603.5 resolution-time choice that step (6) must keep refusing, and this +/// fixture's whole job is to exercise the MANDATORY arm. +const CHRONICLER: &str = "Whenever an opponent loses life, draw a card."; + +/// `bloodloop` at N players: a WITHIN-TURN MANDATORY drain cascade whose every cycle also +/// DRAWS, so the board never recurs (a card moves library→hand each cycle) and the offer +/// must come from the growth-cover basis rather than exact recurrence. +/// +/// The draw payload is the POINT of the fixture, not an incidental detail. Before this +/// commit, `Effect::Draw` was fail-closed `MayPrompt`, so step (6) +/// `stack_choices_are_all_specified` refused every beat whose stack held one of these +/// triggers and the multiplayer cascade could never be offered. Do NOT "simplify" this to +/// a pure life loop to make it pass — a control that steers around the hole guards nothing +/// about the hole. +fn bloodloop_state(players: u8) -> GameState { + let mut scenario = GameScenario::new_n_player(players, 7); + scenario.at_phase(Phase::PreCombatMain); + for i in 0..players { + scenario.with_life(PlayerId(i), 20); + } + scenario.add_creature_from_oracle(P0, "Test Bleeder", 2, 2, BLEEDER); + scenario.add_creature_from_oracle(P0, "Test Chronicler", 2, 2, CHRONICLER); + let names: Vec = (0..60).map(|i| format!("Filler {i}")).collect(); + let refs: Vec<&str> = names.iter().map(String::as_str).collect(); + for i in 0..players { + scenario.with_library_top(PlayerId(i), &refs); + } + let mut runner = scenario.build(); + runner.state_mut().loop_detection = LoopDetectionMode::Interactive; + runner.state().clone() +} + +/// PR-7 Phase 5c ACCEPTANCE — the bounded CR 732.2a offer fires on a MANDATORY-DRAW +/// cascade at 2, 3 and 4 players. +/// +/// # What flips when the widening is reverted +/// +/// Measured at HEAD `ea6000b5c` with the same fixture and the same driver: 3p and 4p mint +/// **`ENGINE_OFFERS = 0`**, every candidate beat refused `UnspecifiedChoiceWindow` (34 +/// bridge-moment refusals on each), while certification itself succeeded. Classify +/// `Effect::Draw` back to `MayPrompt` and `drive_to_bounded_offer` returns `None` for +/// `players >= 3` — `expect` panics and this test is RED. The 2p row discriminates too, on +/// the beat: the offer moves 29 → 31 under the revert, because step (6) starts passing one +/// full drain cycle earlier once the draw entries stop refusing. +/// +/// # Why the beats are pinned literals +/// +/// The drive is deterministic — fixed scenario seed, `dump_drive_one_beat`'s policy is +/// total (always pass at `Priority`, first legal answer otherwise), and no RNG is on the +/// path. Re-run identical across runs. An offer beat is observable behaviour that this +/// commit CHANGED; pinning it is what stops a later change from moving it silently. +#[test] +fn bloodloop_mandatory_draw_cascade_offers_at_2p_3p_and_4p() { + for (players, expected_beat, expected_turn) in [(2u8, 29usize, 4u32), (3, 58, 5), (4, 97, 6)] { + let mut state = bloodloop_state(players); + let beat = drive_to_bounded_offer(&mut state, 400).unwrap_or_else(|| { + panic!( + "{players}p mandatory-draw cascade must raise a bounded offer; a `None` here is \ + the pre-widening behaviour (step (6) refusing every draw-bearing stack)" + ) + }); + assert_eq!(beat, expected_beat, "{players}p offer beat"); + assert_eq!(state.turn_number, expected_turn, "{players}p offer turn"); + + let (proposer, certificate, schema) = bounded_offer_parts(&state); + assert_eq!( + proposer, P0, + "{players}p: the cascade's controller proposes" + ); + assert!( + schema.is_bounded(), + "{players}p: an unbounded schema would take a different declare arm" + ); + let per_cycle = certificate + .per_cycle + .as_ref() + .expect("a bounded offer states its per-period signature"); + assert_eq!( + per_cycle.frames_per_period, 2, + "{players}p: derived period (basis B); basis A publishes 1" + ); + + // The multiplayer property the ≥3p rows exist for: ONE cycle charges EVERY + // opponent, not just the first. A 2p-only guard could not see this. + let opponents: Vec = state + .players + .iter() + .map(|p| p.id) + .filter(|p| *p != P0) + .collect(); + assert_eq!(opponents.len(), usize::from(players) - 1); + for opponent in &opponents { + assert_eq!( + per_cycle.delta.life.get(opponent).copied(), + Some(-1), + "{players}p: one cycle drains {opponent:?}" + ); + } + assert_eq!( + per_cycle.delta.life.get(&P0).copied().unwrap_or(0), + 0, + "{players}p: the cascade's controller loses no life" + ); + } +} From 28121cfa541df8f4ed12391e3c48b5079fb4323e Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Tue, 28 Jul 2026 12:51:03 -0500 Subject: [PATCH 04/62] fix(engine): delimit a bounded CR 732.2a cycle by its published per-period frame span MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A basis-B certificate — what `ring_delta_signature` mints, and the class the bounded offer widened to — certifies a periodic DELTA, not a recurring board. `materialize_fixed_shortcut`'s 'cycles loop only advanced on board recurrence, so neither recurrence predicate could ever fire and the declared `n` was structurally inert: the drive could only end at the beat cap (committing zero) or by crossing lethal. Measured on the production accept path at c6d834040, `Fixed(1)` and `Fixed(3)` were byte-identical — bloodloop 3p/4p wiped the whole table at either count, dina 4p committed nothing at either. `PeriodicDelta::frames_per_period` was written, cloned onto the proposal, and read by nothing. It is the missing delimiter, and its own doc already specified the check nobody implemented ('so a bounded drive can check that each committed cycle actually conformed'). Both now exist: * `drive_one_shortcut_cycle` takes the published span and completes a cycle once that many retained ring frames have been recorded. Frames are counted the same way they are minted — the engine's single `record_loop_detect_sample` call site is inside `pass_priority_once_with_pipeline`, the function the drive steps — and detected by Arc identity of the ring's back, since the ring evicts at its cap. * `materialize_fixed_shortcut` drops any committed cycle whose measured resource delta differs from the published one. CR 704.5a: `elimination_bounds` divided the headroom by that delta, so a divergent cycle invalidates the agreed bound. `per_cycle: None` (every pre-bounded offer) keeps board recurrence as the sole delimiter and skips the conformance check, so those drives are unchanged. Basis A's `frames_per_period` was a hardcoded `1` and is measured WRONG: the subset-lethal DRAIN_CLERIC/BLOOD_SIPPER fixture's repetition spans TWO frames. It is now derived from the certifying prior's ring index. Under the hardcode that fixture's accepted drive committed nothing at all (the new conformance check catching the half-period). The shipped `frames_per_period == 1` assertion was a self-ratifying oracle — it compared a literal against a constant no game state could influence — and is corrected to the measured 2 with that mechanism recorded. AFTER, same production path: bloodloop3 n=1 [20,17,17]->[20,16,16], n=3 ->[20,14,14], n=16 (the bound) ->[20,1,1]; dina 4p n=1 ->[50,34,30,35], n=30 (the bound) ->[79,5,1,6]. Zero eliminations at every n within bound. New rows: the n-scaling acceptance property on all three fixtures; the matched stop-short pair at the CR 704.5a boundary; the conformance drop; a named negative row for each of the three bounded-offer conjuncts that refused zero times; and the AI's bounded-declare candidate generated, applied and driven. Doc corrections, each re-measured rather than reasoned: the dina row's named step-(7) revert-probe genuinely does not flip (106/0 green under `1..=MAX`); the dellian frozen bottom prefix is 151 entries over 220 beats, not 140 or 107; the AI policy's 'every n within max_iterations eliminates nobody' premise was false when it shipped and is now true and re-measured. Assisted-by: ClaudeCode:claude-opus-4.8 --- crates/engine/src/analysis/resource.rs | 31 +- crates/engine/src/game/engine.rs | 311 ++++++++- .../engine/tests/integration/loop_shortcut.rs | 629 +++++++++++++++++- crates/phase-ai/src/policies/loop_shortcut.rs | 22 +- 4 files changed, 962 insertions(+), 31 deletions(-) diff --git a/crates/engine/src/analysis/resource.rs b/crates/engine/src/analysis/resource.rs index c40eb88cda..6f2362a84a 100644 --- a/crates/engine/src/analysis/resource.rs +++ b/crates/engine/src/analysis/resource.rs @@ -277,8 +277,20 @@ mod counter_key_pairs { /// ([`ResourceVector::elimination_bounds`]) collects at its call site. #[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] pub struct PeriodicDelta { - /// How many RETAINED RING FRAMES one repetition spans. `1` for a pair certified by - /// direct recurrence; `k` for a signature derived by [`ring_delta_signature`]. + /// How many RETAINED RING FRAMES one repetition spans. DERIVED on both certification + /// bases — from the certifying prior's index in the ring for direct recurrence, and as + /// `k` for a signature derived by [`ring_delta_signature`]. It is NOT "1 for direct + /// recurrence": that was a hardcode until fix round 1, and it was measured wrong (the + /// `interactive_3p_subset_lethal_does_not_crown` fixture's repetition spans TWO frames, + /// a gain-life resolution then a lose-life one). + /// + /// CONSUMER: `game::engine::drive_one_shortcut_cycle` DELIMITS a committed cycle by this + /// count. It has to, for the class [`ring_delta_signature`] certifies: that basis proves + /// a periodic DELTA, not a recurring board, so the drive's board-recurrence predicates are + /// false at every settle beat and `Fixed(n)`'s `n` would otherwise be structurally inert. + /// The count is measured the same way it is minted — the engine's single + /// `record_loop_detect_sample` call site is inside `pass_priority_once_with_pipeline`, + /// which is the function the drive steps. /// /// Named for its unit on purpose: `game::engine::shortcut_drive_period` maps a /// TEMPLATE to a repeat count, which is a different quantity in the same subsystem. @@ -1418,10 +1430,17 @@ pub(crate) fn loop_states_cover_modulo_growth(prior: &GameState, current: &GameS /// It read: "in an exact-recurrence window every entry re-announces each cycle, so every /// entry is examined." A shortcut window need not be exact-recurrence at all, and when it /// is a GROWING CASCADE the premise fails outright. Measured on the `dellian` 4p fixture: -/// the window is a growing cascade over a FROZEN 140-deep bottom prefix — the same 107 -/// entries, identical `ObjectId` set and identical index range, survived 220 beats while -/// the stack grew above them. Those entries provably never re-announced and never -/// resolved, so nothing the window observed says anything about them. +/// the window is a growing cascade over a FROZEN bottom prefix that never re-announces. +/// +/// ⚠ THE TWO NUMBERS THIS CLAUSE USED TO CARRY ("a FROZEN 140-deep bottom prefix — the same +/// 107 entries") CONTRADICTED EACH OTHER, and RE-MEASUREMENT shows neither was right. Driving +/// `dellian_emblem_conqueror_4p.json.gz` 220 beats from its shipped state through the +/// production per-beat driver, recording the stack's `ObjectId` sequence at every beat: +/// stack depth 152 at beat 0, min 152, max 182 over the run +/// FROZEN BOTTOM PREFIX = **151** entries — same `ObjectId` at the same index at every +/// one of the 220 beats +/// So the cascade grows entirely ABOVE a 151-deep prefix. Those 151 entries provably never +/// re-announced and never resolved, so nothing the window observed says anything about them. /// That does not weaken the predicate — it STRENGTHENS the case for scanning every entry: /// a frozen entry is one the window has NO evidence about, which is precisely the entry a /// grown-only scan would skip. The width is right; only the stated reason was wrong. diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index 753d62c82c..60b5d03072 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -1092,19 +1092,38 @@ pub fn try_offer_bounded_cycle_shortcut( // prior first: the most recent recurrence is the least extrapolation. let ring: Vec<&GameState> = state.loop_detect_ring.iter().map(|f| f.as_ref()).collect(); let cur = ResourceVector::snapshot(state); - let basis_a = ring.iter().rev().find_map(|&prior| { + let basis_a = ring.iter().enumerate().rev().find_map(|(idx, &prior)| { + // The span, in RETAINED RING FRAMES, that this candidate pair covers. + // `ring.last()` is the sample `pass_priority_once_with_pipeline` recorded at THIS + // beat, before the bridge ran, so the newest frame is the current state and the + // span from `ring[idx]` is `len - 1 - idx`. + // + // A span of 0 is the pair `state` against its own snapshot. It is already refused + // by `net_progress_for` on the resulting zero delta in every production + // trajectory, but it is refused HERE too, explicitly: `materialize_fixed_shortcut` + // now DELIMITS a committed cycle by this count, and a published `0` would mean + // "one repetition spans no frames", which no drive can honour. Fail closed on the + // degenerate pair rather than rely on a downstream conjunct to catch it. + let span = ring.len() - 1 - idx; let delta = ResourceVector::delta(&ResourceVector::snapshot(prior), &cur); - ((crate::analysis::resource::loop_states_equal_modulo_resources(prior, state) - || crate::analysis::resource::loop_states_cover_modulo_growth_pinned( - prior, state, proposer, &slots, - )) + (span >= 1 + && (crate::analysis::resource::loop_states_equal_modulo_resources(prior, state) + || crate::analysis::resource::loop_states_cover_modulo_growth_pinned( + prior, state, proposer, &slots, + )) && delta.net_progress_for(proposer)) .then(|| { ( prior, state, PeriodicDelta { - frames_per_period: 1, + // MEASURED span, not the former hardcoded `1`. The walk is `.rev()`, so + // `idx` is usually `len - 2` and the span is 1 — but it is 1 by + // MEASUREMENT, not by assumption, and it is NOT always 1: the + // `interactive_3p_subset_lethal_does_not_crown` fixture's repetition + // spans TWO frames (a gain-life resolution then a lose-life one), and + // under the old hardcode its accepted drive committed nothing at all. + frames_per_period: span as u32, delta, victim_slot: Vec::new(), }, @@ -1855,8 +1874,19 @@ fn apply_until_lethal_shortcut( let cap = auto_pass_loop_max_iterations(&committed); let mut running = committed.clone(); for i in 0..period { - match drive_one_shortcut_cycle(&running, &boundary, proposal.template.as_ref(), i, cap) - { + // The SAME single authority the `Fixed(N)` drive reads. Unreachably `Some` today — + // `handle_declare_shortcut` rejects `UntilLethal` against a bounded offer, and the + // bounded producer is the only one that publishes a signature — so this is + // behaviour-identical to the former no-delimiter call; it is threaded so the two + // drives cannot drift apart on what delimits a cycle. + match drive_one_shortcut_cycle( + &running, + &boundary, + proposal.template.as_ref(), + i, + cap, + proposal.per_cycle.as_ref().map(|pd| pd.frames_per_period), + ) { CycleOutcome::Recurred { state: s, .. } => running = *s, CycleOutcome::CrossLethal { state: s, @@ -2065,12 +2095,35 @@ enum CycleOutcome { /// Uses the INTERNAL `apply_action` path throughout (via `pass_priority_once_with_pipeline` /// and the injector), never the top-level reconcile boundary, so the detection hook cannot /// recurse mid-drive. +/// +/// # Two cycle delimiters, and why the second one exists +/// +/// `frames_per_period` is the published [`crate::analysis::resource::PeriodicDelta`] span, or +/// `None` for every offer whose producer states no per-period signature. When it is `Some(k)`, +/// a cycle ALSO completes once `k` retained ring frames have been recorded since the cycle +/// began. +/// +/// Board recurrence alone is not a delimiter for the class +/// [`try_offer_bounded_cycle_shortcut`] mints on certification basis **B**: that basis consults +/// no board predicate at all — it certifies a periodic *delta* over a ring window — so +/// `loop_states_equal_modulo_resources` and `loop_states_cover_modulo_growth` are both FALSE at +/// every settle beat by construction. Without the frame delimiter such a drive can only end at +/// the beat cap (`Abort`, committing zero cycles) or by crossing lethal, and the declared `n` +/// is inert: `Fixed(1)` and `Fixed(3)` produce byte-identical boards. +/// +/// The frame count is the same quantity `frames_per_period` names, measured the same way: the +/// single `record_loop_detect_sample` call site lives in `pass_priority_once_with_pipeline`, +/// which is the very function this loop steps, so a driven beat samples the ring under exactly +/// the gates an observed beat does. A new frame is detected by `Arc` identity of the ring's +/// back rather than by length, because the ring evicts at `LOOP_DETECT_RING_CAP` and a length +/// delta reads 0 once it is full. fn drive_one_shortcut_cycle( committed: &GameState, boundary: &GameState, template: Option<&crate::analysis::decision_template::DecisionTemplate>, iteration: crate::analysis::decision_template::IterationIndex, cycle_beat_cap: usize, + frames_per_period: Option, ) -> CycleOutcome { let mut work = committed.clone(); priority::reset_priority(&mut work); @@ -2079,12 +2132,14 @@ fn drive_one_shortcut_cycle( }; let mut ev: Vec = Vec::new(); let mut beat = 0usize; + let mut frames_this_cycle = 0u32; loop { beat += 1; if beat > cycle_beat_cap { return CycleOutcome::Abort; // runaway backstop } + let ring_back_before = work.loop_detect_ring.back().map(std::sync::Arc::as_ptr); // A FRESH per-beat buffer (see the former inline note): reusing one growing buffer // would make `run_post_action_pipeline` re-scan prior beats' events and re-fire // already-consumed triggers. @@ -2101,12 +2156,20 @@ fn drive_one_shortcut_cycle( }; } // Active-player settle beat: cycle complete iff the board recurred (constant-depth - // equal-modulo-resources OR ω-covering growth). + // equal-modulo-resources OR ω-covering growth) or the published period's worth of + // ring frames has elapsed. This is the ONLY beat kind the ring samples at (the + // sampler's own gate is `Priority{player == active_player}`), so the frame counter + // is advanced here and nowhere else. Ok(WaitingFor::Priority { player }) if player == work.active_player => { ev.append(&mut beat_events); + let ring_back_after = work.loop_detect_ring.back().map(std::sync::Arc::as_ptr); + if ring_back_after.is_some() && ring_back_after != ring_back_before { + frames_this_cycle += 1; + } let norm = work.normalize_for_loop(); if crate::analysis::resource::loop_states_equal_modulo_resources(boundary, &norm) || crate::analysis::resource::loop_states_cover_modulo_growth(boundary, &norm) + || frames_per_period.is_some_and(|k| frames_this_cycle >= k) { return CycleOutcome::Recurred { state: Box::new(work), @@ -2330,6 +2393,11 @@ fn materialize_fixed_shortcut( } let template = proposal.template.clone(); + // CR 732.2a: the per-period signature the offer published, carried verbatim onto the + // proposal. `None` for every producer that states none, and that `None` is what keeps + // every pre-bounded offer's drive byte-identical: no frame delimiter, no conformance + // check, board recurrence alone — exactly the shipped behavior. + let per_cycle = proposal.per_cycle.as_ref(); // Last fully-completed cycle (clean owned O(1) rollback); starts at the offer state — // `apply_confirmed_shortcut`'s doc comment establishes the board is unchanged since the @@ -2381,12 +2449,35 @@ fn materialize_fixed_shortcut( // inline beat loop for a non-targeted `Fixed(N)` drain (which raises no mid-cycle // prompt, so the injector is inert); a targeted drive additionally answers each // OrderTriggers / target prompt from the pins. - match drive_one_shortcut_cycle(&committed, &boundary, template.as_ref(), i, cycle_beat_cap) - { + match drive_one_shortcut_cycle( + &committed, + &boundary, + template.as_ref(), + i, + cycle_beat_cap, + per_cycle.map(|pd| pd.frames_per_period), + ) { CycleOutcome::Recurred { state: s, mut events, } => { + // CR 732.2a "predictable results" + CR 704.5a: the CONFORMANCE CHECK the + // published signature exists for. `elimination_bounds` divided the CR 704 + // headroom by `per_cycle.delta`, so a committed cycle that moved a + // DIFFERENT amount invalidates the very bound the table agreed to — the + // remaining repetitions could carry a seat past a threshold inside the + // proposal. Measured before commit, on the same axes the bound reads, and + // fail-closed: a divergent cycle is dropped whole and the drive hands back + // to manual play with the last conforming cycle intact. + if let Some(pd) = per_cycle { + let actual = crate::analysis::resource::ResourceVector::delta( + &crate::analysis::resource::ResourceVector::snapshot(&committed), + &crate::analysis::resource::ResourceVector::snapshot(&s), + ); + if actual != pd.delta { + break 'cycles; + } + } committed = *s; // ATOMIC: commit state ... result.events.append(&mut events); // ... with its events together continue 'cycles; @@ -12341,7 +12432,9 @@ mod stage2_injector_tests { let template = two_drainer_template(drainer_a, P1, drainer_b, P2); let cap = auto_pass_loop_max_iterations(&committed); - match drive_one_shortcut_cycle(&committed, &boundary, Some(&template), 0, cap) { + // `None`: this row is about the injector arm on a board-recurring targeted loop, so + // it drives under the same no-signature delimiter every pre-bounded offer uses. + match drive_one_shortcut_cycle(&committed, &boundary, Some(&template), 0, cap, None) { CycleOutcome::CrossLethal { winner, state, .. } => { assert_eq!( winner, @@ -13354,3 +13447,197 @@ mod kilo_interruptibility_tests { ); } } + +/// FIX ROUND 1 (MED-2) — a named negative row per [`try_offer_bounded_cycle_shortcut`] conjunct +/// that no tracked test was exercising. +/// +/// The reviewer measured all three by disabling them: step (2) `ProposerIsNotActivePlayer` and +/// step (5) `AdvantageOnlyCycle` could each be deleted with **4167 passed / 0 failed**, and only +/// `DrivingSequenceNotEmpty` was asserted by name anywhere. A conjunct no row can name is a +/// conjunct nobody notices losing. +/// +/// # Why these are UNIT rows on a synthetic ring +/// +/// Each row must reach ONE conjunct and refuse there, which means holding every earlier conjunct +/// satisfied on purpose. A ring is the input the certification step reads, and +/// `GameState::normalize_for_loop` is `pub(crate)`, so an integration test cannot build one. The +/// refusal is asserted BY REASON (`BoundedOfferRefusal`), never as a bare "no offer": a row that +/// only observes absence silently stops testing its own conjunct the moment an EARLIER one +/// starts refusing first, which is the domination trap the enum exists to close. +#[cfg(test)] +mod bounded_offer_conjunct_tests { + use super::{try_offer_bounded_cycle_shortcut, BoundedOfferRefusal}; + use crate::game::scenario::GameScenario; + use crate::types::game_state::{GameState, LoopDetectionMode, WaitingFor}; + use crate::types::player::PlayerId; + + const P0: PlayerId = PlayerId(0); + const P1: PlayerId = PlayerId(1); + + /// A 2-player board parked at `Priority{P0}` (P0 active) whose retained ring encodes a + /// period seen twice: `frames` successive normalized snapshots, each mutated by `shape`. + /// + /// `2k + 1 = 3` frames at `k = 1` is the smallest ring `ring_delta_signature` will certify, + /// and every frame shares `turn_number` / `phase` / `extra_phases`, so the CR 703.1 + /// turn-position conjunct passes and this fixture is not silently testing that instead. + fn ring_state(frames: usize, shape: impl Fn(&mut GameState, usize)) -> GameState { + let mut scenario = GameScenario::new_n_player(2, 7); + // A stocked library is load-bearing, not scenery: the period this fixture encodes IS a + // library delta, and an empty library makes every frame identical ⇒ a zero per-period + // vector ⇒ `ring_delta_signature` returns `None` and every row below refuses at + // `NoCertification` instead of at the conjunct it is about. + let names: Vec = (0..40).map(|i| format!("Filler {i}")).collect(); + let refs: Vec<&str> = names.iter().map(String::as_str).collect(); + scenario.with_library_top(P0, &refs); + scenario.with_library_top(P1, &refs); + let mut runner = scenario.build(); + let mut state = runner.state_mut().clone(); + state.loop_detection = LoopDetectionMode::Interactive; + state.waiting_for = WaitingFor::Priority { player: P0 }; + state.active_player = P0; + state.last_loop_action_sequence.clear(); + for i in 0..frames { + let mut frame = state.clone(); + shape(&mut frame, i); + state + .loop_detect_ring + .push_back(std::sync::Arc::new(frame.normalize_for_loop())); + } + state + } + + /// Mill `victim` by one card per retained frame — a constant per-frame library delta, which + /// is a period observed twice at `frames >= 3`. + fn mill_ring(victim: PlayerId, frames: usize) -> GameState { + ring_state(frames, move |frame, i| { + let player = frame + .players + .iter_mut() + .find(|p| p.id == victim) + .expect("seat exists"); + for _ in 0..i { + player.library.pop_back(); + } + }) + } + + /// STEP (2) `ProposerIsNotActivePlayer`. CR 732.2a lets the player with priority propose; + /// this conjunct additionally requires that player to be the ACTIVE one, because the ring + /// sampler only samples at `Priority{active_player}` — which is what establishes the + /// proposer held priority at every certified frame. + /// + /// REVERT-PROBE: delete the conjunct ⇒ arm ⓑ stops returning `ProposerIsNotActivePlayer` + /// and falls through to a later conjunct (or an offer) ⇒ FAILS. + #[test] + fn a_non_active_priority_holder_mints_no_bounded_offer() { + let mut state = mill_ring(P1, 3); + + // ⓐ REACH-GUARD / positive control: the SAME ring certifies for the active player, so + // ⓑ's refusal is attributable to the seat and not to an unsatisfied earlier conjunct. + let armed = try_offer_bounded_cycle_shortcut(&state, false); + assert_ne!( + armed, + Err(BoundedOfferRefusal::ProposerIsNotActivePlayer), + "the active player must NOT be refused by step (2); got {armed:?}" + ); + assert_ne!( + armed, + Err(BoundedOfferRefusal::NoCertification), + "REACH-GUARD: the ring must actually certify, else ⓑ never reaches step (2); \ + got {armed:?}" + ); + + // ⓑ one field reassigned: priority moves to the non-active seat. + state.waiting_for = WaitingFor::Priority { player: P1 }; + assert_eq!( + try_offer_bounded_cycle_shortcut(&state, false), + Err(BoundedOfferRefusal::ProposerIsNotActivePlayer), + "CR 732.2a: the ring sampler gates on `Priority{{active_player}}`, so a proposer \ + who is not the active player did not hold priority at the certified frames" + ); + } + + /// STEP (5) `AdvantageOnlyCycle`. CR 732.2a: this producer's whole claim is that it measured + /// a CR 704 threshold INSIDE the loop and divided the headroom by the per-period magnitude. + /// An `Advantage` cycle drives nobody toward such a threshold, so it has no bound to state + /// and belongs to Path C's revocable-infinity mark instead. + /// + /// The pair is a SELF-mill against an OPPONENT-mill, which is exactly the discrimination + /// `classify_win_kind` makes: `Decking` requires "an unbounded downward library delta on a + /// player other than the loop's controller", so a controller milling themselves falls + /// through to `Advantage`. Without this conjunct that self-mill takes Path D and is offered + /// a bound — `elimination_bounds` narrows on `narrow(p.library.len(), -library_delta[p])` + /// for the PROPOSER too, so it happily produces one. + /// + /// REVERT-PROBE: delete the conjunct ⇒ arm ⓑ stops returning `AdvantageOnlyCycle` ⇒ FAILS. + #[test] + fn a_self_mill_advantage_cycle_mints_no_bounded_offer() { + // ⓐ POSITIVE CONTROL: the SAME shape aimed at the OPPONENT is `Decking`, not + // `Advantage`, so step (5) must let it through. Without this arm ⓑ would pass for a + // fixture that simply never certifies. + let opponent_mill = try_offer_bounded_cycle_shortcut(&mill_ring(P1, 3), false); + assert_ne!( + opponent_mill, + Err(BoundedOfferRefusal::AdvantageOnlyCycle), + "CR 104.3c: milling an OPPONENT is a win kind, not an advantage engine; got \ + {opponent_mill:?}" + ); + assert_ne!( + opponent_mill, + Err(BoundedOfferRefusal::NoCertification), + "REACH-GUARD: the mill ring must certify, else neither arm reaches step (5); got \ + {opponent_mill:?}" + ); + + // ⓑ the same period, victim = the proposer. + assert_eq!( + try_offer_bounded_cycle_shortcut(&mill_ring(P0, 3), false), + Err(BoundedOfferRefusal::AdvantageOnlyCycle), + "CR 732.2a: a cycle that drives nobody toward a CR 704 threshold has no bound to \ + state, so it belongs to Path C's revocable-infinity mark, not to this seam" + ); + } + + /// STEP (7) `NoNarrowedLegalCount`, LOWER end. `elimination_bounds` returning 0 states that + /// no repetition is legal at all — a seat is already AT the CR 704 threshold's last legal + /// step — and `1..MAX_SHORTCUT_CYCLES` refuses it rather than minting a `Fixed(0)` offer + /// whose acceptance would commit nothing while spending the CR 732.2b window. + /// + /// ⚠ SCOPE, stated because the reviewer's probe targeted the OTHER end. Widening the check + /// to `1..=MAX_SHORTCUT_CYCLES` flips nothing in the tracked suite, and that is not an + /// oversight: the upper end is DOMINATED by step (5). A bound of exactly + /// `MAX_SHORTCUT_CYCLES` means no axis narrowed, i.e. the period drives no living seat + /// toward any CR 704 threshold, which is precisely what `classify_win_kind` reports as + /// `Advantage` — so such a cycle has already been refused two conjuncts earlier. This row + /// therefore covers the reachable end and names the reason the other is unreachable rather + /// than leaving it as an untested branch of unknown status. + /// + /// REVERT-PROBE: change the range to `0..MAX_SHORTCUT_CYCLES` ⇒ arm ⓑ mints an offer ⇒ FAILS. + #[test] + fn a_bound_of_zero_mints_no_bounded_offer() { + // ⓐ POSITIVE CONTROL: a full library certifies and narrows to a legal count. + let healthy = try_offer_bounded_cycle_shortcut(&mill_ring(P1, 3), false); + assert!( + healthy.is_ok(), + "REACH-GUARD: the un-narrowed fixture must OFFER, else ⓑ's refusal could come from \ + any earlier conjunct; got {healthy:?}" + ); + + // ⓑ the same ring, with the victim's library already empty at the offer beat: CR 104.3c + // headroom 0 ⇒ `0 / 1 == 0` ⇒ no legal repetition count. + let mut state = mill_ring(P1, 3); + state + .players + .iter_mut() + .find(|p| p.id == P1) + .expect("seat exists") + .library + .clear(); + assert_eq!( + try_offer_bounded_cycle_shortcut(&state, false), + Err(BoundedOfferRefusal::NoNarrowedLegalCount), + "CR 104.3c: with zero cards left there is no legal repetition, and a `Fixed(0)` \ + offer would spend the CR 732.2b response window to commit nothing" + ); + } +} diff --git a/crates/engine/tests/integration/loop_shortcut.rs b/crates/engine/tests/integration/loop_shortcut.rs index ee8fb65312..a39ee5d5a8 100644 --- a/crates/engine/tests/integration/loop_shortcut.rs +++ b/crates/engine/tests/integration/loop_shortcut.rs @@ -1323,20 +1323,52 @@ fn interactive_3p_subset_lethal_does_not_crown() { // turn-position conjunct modifies — is reached ONLY from the `None =>` arm, so this row is // orthogonal to that conjunct in both directions. // - // HONEST SCOPE OF THE ASSERTION BELOW: `frames_per_period == 1` is a TRIPWIRE, not a proof - // of basis A. Basis B derives `k` from 1 upward, so a k==1 basis-B offer publishes the - // same value (the `dina_untargeted_drain_4p_offers_at_three_live_opponents` row is exactly - // that case). What this line catches is the class silently acquiring a multi-frame period, - // which is the drift that would make the orthogonality claim above stop holding. + // HONEST SCOPE OF THE ASSERTION BELOW: `frames_per_period` is a TRIPWIRE on the period's + // WIDTH, not a proof of basis. Basis B derives `k` from 1 upward, so a k==1 basis-B offer + // publishes the same value as a 1-frame basis-A one (the + // `dina_untargeted_drain_4p_offers_at_three_live_opponents` row is exactly that case). + // + // ⚠ VALUE CORRECTED 1 → 2. The NUMBER is the small half of the correction; the MECHANISM + // is the half worth carrying forward, because it names a class of defect rather than one + // fixture's constant. + // + // THIS ASSERTION WAS A SELF-RATIFYING ORACLE. Basis A published a HARDCODED + // `frames_per_period: 1` regardless of how far back its certifying prior actually sat. So + // the assertion compared a literal `1` against a constant `1` that no game state could + // influence: it could not fail for ANY fixture, ANY period width, or ANY future change to + // how the ring is sampled. It read the implementation's constant back to itself and + // reported that as agreement. Its stated premise — "this class certifies on a single-frame + // period" — was therefore never measured; it was inferred from the very line it was + // supposedly checking. + // + // That is the same family as this lane's other "guard that passes while proving nothing" + // findings: a check whose subject cannot vary is not a check. The tell is available + // WITHOUT running anything — trace the asserted expression back to its producer and ask + // whether any input can move it. If nothing can, the row's green is a tautology. + // + // The mint now DERIVES the span from the prior's ring index, so the expression varies with + // the fixture. For this one it is 2: the DRAIN_CLERIC / BLOOD_SIPPER pairing alternates a + // gain-life resolution and a lose-life resolution, so one whole repetition spans two + // retained ring frames and the pair one frame back does not recur. + // + // MEASURED through the production accept path on this same fixture (declare `Fixed(n)` + + // APNAP accepts), which is what makes 2 the RIGHT value rather than merely a different one: + // derived k = 2 ⇒ n=1 → δ{P0:+1,P1:-1}; n=2 → +2/-2; n=3 → +3/-3 (exactly n × δ) + // hardcoded 1 ⇒ n=1, 2, 3 → ZERO committed, every time + // That zero is `materialize_fixed_shortcut`'s conformance check doing its job: a cycle cut + // at one frame delivers half a period, which does not equal the published δ, so the drive + // drops it and hands back. A wrong period is therefore never a silent half-commit — but it + // does make the offer unusable, which is why the span has to be measured and not assumed. assert_eq!( certificate .per_cycle .as_ref() .expect("a bounded offer publishes its per-period signature") .frames_per_period, - 1, - "this class certifies on a single-frame period; a multi-frame one would mean the class \ - moved to a basis-B signature and the orthogonality note above no longer holds" + 2, + "this class's repetition spans two retained ring frames (a gain-life resolution, then a \ + lose-life resolution); a drift in that width silently changes what one committed cycle \ + means" ); // Reach-guard on the regime itself (see `drive_collect_primed`): the drive really did reach @@ -7228,9 +7260,19 @@ fn bounded_offer_parts( /// REVERT-PROBES (each must FLIP to FAIL): /// * delete the Path D block in `interactive_loop_bridge` ⇒ no offer ⇒ the /// `drive_to_bounded_offer` expect FAILS. -/// * make step (7)'s range check `1..=MAX_SHORTCUT_CYCLES` ⇒ nothing here flips (the bound -/// really is narrowed), which is why the SEPARATE `schema.is_bounded()` assertion below -/// exists — it is the one that flips. +/// * make step (7)'s range check `1..=MAX_SHORTCUT_CYCLES` ⇒ NOTHING flips, anywhere. The +/// claim this bullet used to make — that the `schema.is_bounded()` assertion below "is the +/// one that flips" — was FALSE, and is corrected rather than quietly deleted. RE-MEASURED +/// under that exact mutation: the entire `loop_shortcut` integration set stays green +/// (106 passed / 0 failed), `schema.is_bounded()` included, because on every fixture the +/// bound really IS narrowed and that assertion holds independently of the range check. +/// No single-conjunct revert of step (7) flips a row on THIS fixture, and that is a property +/// of the mutation rather than a gap: it widens only the range's UPPER end, and a bound of +/// exactly `MAX_SHORTCUT_CYCLES` means no axis narrowed — which `classify_win_kind` already +/// reports as `Advantage`, so step (5) refuses two conjuncts earlier. The REACHABLE end is +/// the lower one, and its named row is +/// `game::engine::bounded_offer_conjunct_tests::a_bound_of_zero_mints_no_bounded_offer` +/// (revert-probe: `0..MAX_SHORTCUT_CYCLES` ⇒ that row FAILS; measured). /// * remove `elimination_bounds`' `p.life as i64 - 1` headroom term ⇒ the recomputed bound /// and the published one diverge ⇒ FAILS. #[test] @@ -7812,6 +7854,17 @@ fn a_nonempty_action_sequence_mints_no_bounded_offer() { /// assertion FAILS. /// MUST-NOT-FLIP: `over_cap_fixed_count_hands_back_with_no_drive` (the global-cap arm) and /// every unbounded offer's acceptance of any `Fixed(n <= MAX)`. +/// +/// ⚠ WHAT SEPARATES THE ARMS, and why this row was NON-DISCRIMINATING until fix round 1. +/// `lives_after == lives_before` + zero eliminations is the handback observation — but at +/// `c6d834040` the ACCEPTED, within-bound path produced the identical observation on this same +/// dump, because `materialize_fixed_shortcut` aborted at cycle 0 and committed nothing. The row +/// therefore could not tell "handed back" from "accepted and driven", and would have stayed +/// green with the guard deleted. It discriminates now because the accepted path MOVES LIFE: +/// `bounded_fixed_count_commits_exactly_n_periods` measures `n × δ` committed on this exact +/// dump (`n=1` → `[50,34,30,35]`, `n=3` → `[52,32,28,33]` from `[49,35,31,36]`). That row is +/// this one's positive control; the `WaitingFor::Priority` + no-`RespondToShortcut` assertions +/// below are what separate a handback from a completed drive, since both end at priority. #[test] fn declared_count_above_the_offered_bound_is_handed_back() { use engine::analysis::decision_template::IterationCount; @@ -7878,6 +7931,13 @@ fn declared_count_above_the_offered_bound_is_handed_back() { /// both `phase-ai` rows — one edit to one predicate measurable at every caller. If that /// inversion leaves this row green, the engine kept a private copy of the comparison. /// MUST-NOT-FLIP: the whole shipped suite's unbounded offers still accept `UntilLethal`. +/// +/// ⚠ SAME NON-DISCRIMINATION CORRECTION as the row above. `lives_after == lives_before` was +/// satisfied by BOTH arms at `c6d834040` (the accepted path committed nothing), so it did not +/// separate "rejected" from "accepted and driven". `bounded_fixed_count_commits_exactly_n_periods` +/// is now the positive control that makes the accepted path observably move life on this dump; +/// the discriminating assertions here are the `Priority` handback plus the absence of a +/// `RespondToShortcut` window, which no accepted declaration produces. #[test] fn until_lethal_against_a_bounded_offer_is_rejected() { use engine::analysis::decision_template::IterationCount; @@ -8033,3 +8093,550 @@ fn bloodloop_mandatory_draw_cascade_offers_at_2p_3p_and_4p() { ); } } + +// ═══════════════ FIX ROUND 1 — the declared count is CONSUMABLE ═══════════════ +// +// Before this round `materialize_fixed_shortcut`'s `'cycles: for i in 0..n` advanced only on +// `CycleOutcome::Recurred`, which needs board RECURRENCE. A basis-B certificate — what +// `ring_delta_signature` mints, and the whole class `try_offer_bounded_cycle_shortcut` widened +// offers to — certifies a periodic DELTA, not a recurring board, so neither recurrence +// predicate can ever fire and `n` was structurally inert. MEASURED at `c6d834040` with the same +// fixtures and the same production entry (`apply` → declare → APNAP accepts): +// +// bloodloop3 n=1 → [20,0,0] GameOver{P0} elim=2 │ n=3 → [20,0,0] GameOver{P0} elim=2 +// bloodloop4 n=1 → [20,0,0,0] elim=3 │ n=3 → [20,0,0,0] elim=3 +// dina 4p n=1 → [49,35,31,36] (unchanged) │ n=3 → [49,35,31,36] (unchanged) +// +// `Fixed(1)` and `Fixed(3)` byte-identical — either the table dies or nothing commits. The +// rows below are the antidote: the same trajectories, with `n` bound to the OBSERVED board +// delta and to the OFFER's own published signature, never to a literal. + +/// Declare `Fixed(n)` on the bounded offer `state` is parked at, accept with every living +/// opponent through `apply()`, and return the per-seat life delta the drive COMMITTED +/// alongside the signature and bound the offer published. +/// +/// Everything is read off the production state: the signature comes from the offer the ENGINE +/// wrote, the delta from `Player::life` before and after. Nothing is recomputed by the test. +fn accept_bounded_fixed( + state: &mut GameState, + n: u32, +) -> ( + Vec<(PlayerId, i64)>, + engine::analysis::resource::PeriodicDelta, + u32, +) { + let (proposer, certificate, schema) = bounded_offer_parts(state); + let per_cycle = certificate + .per_cycle + .clone() + .expect("a bounded offer publishes the per-period signature its bound was divided by"); + let bound = schema.max_iterations; + let before: Vec<(PlayerId, i64)> = state + .players + .iter() + .map(|p| (p.id, p.life as i64)) + .collect(); + r6a_declare_and_accept_all(state, proposer, n); + let committed: Vec<(PlayerId, i64)> = state + .players + .iter() + .zip(&before) + .map(|(p, (id, l0))| { + assert_eq!( + p.id, *id, + "the seat vector is positional and never reordered" + ); + (p.id, p.life as i64 - l0) + }) + .collect(); + (committed, per_cycle, bound) +} + +/// FIX ROUND 1 PRIMARY (HIGH-1/HIGH-2/HIGH-3) — an accepted `Fixed(n)` within the offered +/// bound commits **exactly `n` copies of the published per-period delta**, on the real 4p +/// Dina/Conqueror dump and on the synthetic mandatory-draw cascade at 3 and 4 players. +/// +/// # What the assertion is bound to +/// +/// `n * per_cycle.delta.life[seat]`, derived from the certificate the ENGINE published at the +/// offer beat. No literal life total appears in an equality. A fixture whose drain rate drifts +/// moves both sides together; a drive that commits the wrong NUMBER of periods moves only one. +/// +/// # Why this is not vacuous +/// +/// * Reach-guards below establish that the published δ is non-zero, that at least two seats +/// carry a non-zero term (so a 2-player-shaped bug cannot hide), and that the bound leaves +/// room for `n = 3` — without which the `n`-scaling is untestable. +/// * The `n = 1` vs `n = 3` boards are asserted DIFFERENT on the same fixture. That single +/// assertion is the direct antidote to the defect: at `c6d834040` they were byte-identical. +/// +/// # REVERT-PROBES (each RUN, each FLIPPED) +/// +/// * ⓐ delete `|| frames_per_period.is_some_and(|k| frames_this_cycle >= k)` from +/// `drive_one_shortcut_cycle` ⇒ HEAD behaviour returns: dina commits ZERO (`Abort` at cycle +/// 0, delta `[0,0,0,0]`) and bloodloop cross-lethals the whole table. Every `assert_eq!` on +/// the committed delta FAILS, and so does `no seat is eliminated`. +/// * ⓑ replace the delimiter's `k` with a hardcoded `1` ⇒ bloodloop (whose derived period is +/// `k == 2` ring frames) commits HALF-periods: `n` cycles deliver `n/2` copies of δ. The +/// 3p/4p `assert_eq!` FAILS while the `k == 1` dina row stays green — which is what proves +/// the row reads the VALUE of `frames_per_period` and not merely its presence. +#[test] +fn bounded_fixed_count_commits_exactly_n_periods() { + /// Rebuilt from scratch per `n` — a driven trajectory is not replayable from a used state. + fn build(name: &str) -> GameState { + match name { + "dina_conqueror_4p" => restore_dump(&gunzip_dump(include_bytes!( + "../fixtures/dina_conqueror_4p.json.gz" + ))), + "bloodloop3" => bloodloop_state(3), + "bloodloop4" => bloodloop_state(4), + other => panic!("unknown fixture {other}"), + } + } + + for name in ["dina_conqueror_4p", "bloodloop3", "bloodloop4"] { + let mut boards: Vec> = vec![]; + for n in [1u32, 3] { + let mut state = build(name); + drive_to_bounded_offer(&mut state, 400).unwrap_or_else(|| { + panic!("{name}: the bounded offer must fire; see the acceptance row") + }); + + let (committed, per_cycle, bound) = accept_bounded_fixed(&mut state, n); + + // ── reach-guards: without these the equality below can pass degenerately ── + assert!( + per_cycle.delta != engine::analysis::resource::ResourceVector::default(), + "{name}: a zero-delta period makes `n * δ` zero for every `n`, so the scaling \ + assertion would hold for a drive that committed nothing" + ); + assert!( + per_cycle.delta.life.values().filter(|v| **v != 0).count() >= 2, + "{name}: fewer than two seats with a non-zero life term is a 2-player shape; \ + the whole class exists because a MULTIPLAYER drain crowns nobody. got {:?}", + per_cycle.delta.life + ); + assert!( + bound >= 3, + "{name}: `n = 3` must be WITHIN the offered bound, else the declaration is \ + handed back and this row silently tests the rejection arm; bound = {bound}" + ); + assert!( + per_cycle.frames_per_period >= 1, + "{name}: a period spans at least one retained ring frame; got {}", + per_cycle.frames_per_period + ); + + // ── THE PROPERTY: committed delta == n × published per-period delta ── + for (seat, delta) in &committed { + assert_eq!( + *delta, + i64::from(n) * per_cycle.delta.life.get(seat).copied().unwrap_or(0), + "{name} n={n}: {seat:?}'s committed life delta must be exactly `n` copies \ + of the period the offer published ({:?}); committed {committed:?}", + per_cycle.delta.life + ); + } + + // ── the bound's own contract: CR 704.5a headroom is `life - 1`, so no seat may + // be eliminated by a within-bound count ── + assert_eq!( + state.players.iter().filter(|p| p.is_eliminated).count(), + 0, + "{name} n={n}: CR 704.5a — `min over living seats of (life - 1) / loss` \ + reserves one point of headroom, so a within-bound drive eliminates nobody" + ); + assert!( + state.players.iter().all(|p| p.life > 0), + "{name} n={n}: every seat is above the CR 704.5a threshold; lives {:?}", + state.players.iter().map(|p| p.life).collect::>() + ); + assert!( + matches!(state.waiting_for, WaitingFor::Priority { .. }), + "{name} n={n}: a completed finite drive hands back to ordinary priority \ + (CR 800.4a living seat), not a terminal state; got {:?}", + state.waiting_for + ); + + boards.push(committed); + } + + // ── THE DISCRIMINATOR. At `c6d834040` these two were identical for every fixture. + assert_ne!( + boards[0], boards[1], + "{name}: `Fixed(1)` and `Fixed(3)` must produce MEASURABLY different boards — \ + identical outcomes are exactly the defect this round fixes" + ); + } +} + +/// FIX ROUND 1 MIRROR (A1.2) — the drive STOPS AT the first lethal cycle. It does not commit +/// `n` cycles blindly and reconcile the deaths afterwards. +/// +/// # Why the offer has to be doctored, and why that is the honest construction +/// +/// A within-bound count can NEVER cross a CR 704.5a threshold: `elimination_bounds` narrows to +/// `min over living seats of (life - 1) / per-cycle loss` with FLOOR division, so `n * loss <= +/// life - 1` for every seat and every legal `n`. MEASURED at the bound on both fixtures after +/// this round's fix — bloodloop3 `n = 16` lands `[20, 1, 1]`, dina `n = 30` lands +/// `[79, 5, 1, 6]`, zero eliminations in both. The bounded class therefore cannot reach its +/// own cross-lethal arm through an undoctored offer, and a mirror row built on one would be +/// unbuildable rather than merely weak. +/// +/// So this row is a HOSTILE fixture: it widens `schema.max_iterations` on the offer the engine +/// wrote — simulating a producer whose bound is WRONG — and then declares a count that arithmetic +/// says must kill. Everything downstream is production: `apply()`'s declare handler, the APNAP +/// window, `apply_confirmed_shortcut`, `materialize_fixed_shortcut`. The question it answers is +/// the one that matters when a certificate is unsound: does the drive stop at the boundary, or +/// does it drive through it? +/// +/// CR 704.3: state-based actions are checked whenever a player would get priority, and the +/// drive's every beat goes through `pass_priority_once_with_pipeline`, so CR 704.5a ("if a +/// player has 0 or less life, that player loses the game") is applied INSIDE the drive. +/// +/// # The MATCHED PAIR, on the same doctored offer +/// +/// * ⓐ `n = cycles_to_lethal - 1` — the drive runs to completion, every seat survives at +/// exactly one point of life, nobody is eliminated. +/// * ⓑ `n = 2 * cycles_to_lethal` — the drive stops at the FIRST crossing cycle. +/// +/// Without ⓐ, ⓑ alone is satisfied by a materializer that ignores `n` entirely and simply runs +/// the loop until something dies — which is exactly what `c6d834040` did. ⓐ is what forces the +/// stop point to be `n`-sensitive. +/// +/// # What flips +/// +/// * delete the frame delimiter from `drive_one_shortcut_cycle` ⇒ arm ⓐ runs to lethal instead +/// of stopping at 16 periods ⇒ its zero-elimination assertion FAILS. (Arm ⓑ does NOT flip: +/// the unbounded HEAD drive coincidentally halts at the same lethal board. Stated so the +/// pair's discrimination is not overclaimed — ⓐ carries it.) +/// * a blind implementation that ran all `2 * cycles_to_lethal` periods and reconciled the +/// deaths afterwards would leave the opponents at `17 - 34 = -17`; ⓑ's (b) pins the stop +/// point to `ceil(life / loss)` periods, derived from the published δ, so an overshoot of +/// even one cycle FAILS. +#[test] +fn bounded_fixed_drive_stops_at_the_first_lethal_cycle() { + let mut state = bloodloop_state(3); + drive_to_bounded_offer(&mut state, 400).expect("the bounded offer must fire at 3 players"); + + let (proposer, certificate, schema) = bounded_offer_parts(&state); + let per_cycle = certificate + .per_cycle + .clone() + .expect("a bounded offer publishes its per-period signature"); + let bound = schema.max_iterations; + let lives_before: Vec<(PlayerId, i64)> = state + .players + .iter() + .map(|p| (p.id, p.life as i64)) + .collect(); + + // Per-seat loss the offer published; the stop point is derived from it, never from a literal. + let loss = |seat: &PlayerId| -per_cycle.delta.life.get(seat).copied().unwrap_or(0); + let victims: Vec = lives_before + .iter() + .map(|(id, _)| *id) + .filter(|id| loss(id) > 0) + .collect(); + assert_eq!( + victims.len(), + 2, + "REACH-GUARD: this row is about a MULTI-seat partial wipe, so both opponents must be \ + losing life per period; published δ {:?}", + per_cycle.delta.life + ); + + // The smallest count that drives some living seat to 0 or less: `ceil(life / loss)`. + let cycles_to_lethal = lives_before + .iter() + .filter(|(id, _)| loss(id) > 0) + .map(|(id, l0)| l0.div_euclid(loss(id)) + i64::from(l0.rem_euclid(loss(id)) != 0)) + .min() + .expect("at least one seat is losing life, asserted above"); + let n = u32::try_from(cycles_to_lethal).expect("fits") * 2; + assert!( + i64::from(n) > cycles_to_lethal, + "REACH-GUARD: `n` must be COMFORTABLY past the first lethal cycle, else 'stops at the \ + boundary' and 'ran to completion' are the same observation" + ); + assert!( + n > bound, + "REACH-GUARD: a lethal `n` is by construction above the honest bound ({bound}) — that \ + is the contract this row is deliberately violating to test the drive's own behaviour" + ); + + // ⓐ SURVIVING ARM — one period short of the first crossing. Same doctored offer, so the + // only difference between the arms is `n` itself. + { + let mut survive = state.clone(); + let survivor_n = u32::try_from(cycles_to_lethal - 1).expect("fits"); + let WaitingFor::LoopShortcut { schema, .. } = &mut survive.waiting_for else { + unreachable!("bounded_offer_parts already matched the offer") + }; + schema.max_iterations = survivor_n; + r6a_declare_and_accept_all(&mut survive, proposer, survivor_n); + assert_eq!( + survive.players.iter().filter(|p| p.is_eliminated).count(), + 0, + "ⓐ CR 704.5a: one period short of the crossing, every seat is still above 0; \ + lives {:?}", + survive.players.iter().map(|p| p.life).collect::>() + ); + for (seat, l0) in &lives_before { + let life_now = survive.players.iter().find(|p| p.id == *seat).unwrap().life as i64; + assert_eq!( + l0 - life_now, + i64::from(survivor_n) * loss(seat), + "ⓐ {seat:?}: exactly `n` periods committed, no more — the drive must stop \ + because `n` ran out, not because something died" + ); + } + assert!( + matches!(survive.waiting_for, WaitingFor::Priority { .. }), + "ⓐ a completed finite drive hands back to priority; got {:?}", + survive.waiting_for + ); + } + + // ⓑ the doctoring, and ONLY this ── + let WaitingFor::LoopShortcut { schema, .. } = &mut state.waiting_for else { + unreachable!("bounded_offer_parts already matched the offer") + }; + schema.max_iterations = n; + + r6a_declare_and_accept_all(&mut state, proposer, n); + + // (a) CR 704.3 + CR 704.5a: the drive stopped at a terminal state applied INSIDE it. + assert_eq!( + state.waiting_for, + WaitingFor::GameOver { + winner: Some(proposer) + }, + "CR 704.5a: with every opponent at 0 or less life, CR 104.2a crowns the last player \ + standing, and the drive commits + stops there" + ); + let eliminated: Vec = state + .players + .iter() + .filter(|p| p.is_eliminated) + .map(|p| p.id) + .collect(); + + // (c) EXACTLY the seats the partial drive lethals — never a full-`n` overshoot that takes + // the proposer down too, and never a subset that leaves a drained seat alive. + assert_eq!( + eliminated, + victims, + "CR 704.5a: the eliminated set is exactly the seats the published period drains; \ + lives {:?}", + state.players.iter().map(|p| p.life).collect::>() + ); + + // (b) STRICTLY LESS than `n` periods committed, and pinned to the FIRST crossing cycle. + for (seat, l0) in &lives_before { + let committed = l0 - state.players.iter().find(|p| p.id == *seat).unwrap().life as i64; + let full_n = i64::from(n) * loss(seat); + if loss(seat) > 0 { + assert!( + committed < full_n, + "{seat:?}: a drive that ran all {n} periods would have committed {full_n}; it \ + must stop at the CR 704.5a boundary instead, got {committed}" + ); + assert_eq!( + committed, + cycles_to_lethal * loss(seat), + "{seat:?}: the drive stops at the FIRST cycle that crosses the threshold — \ + `ceil(life / loss)` periods, derived from the published δ, not one more" + ); + } + } +} + +/// FIX ROUND 1 (HIGH-3) — the conformance check `PeriodicDelta`'s doc has always specified +/// ("so a bounded drive can check that each committed cycle actually conformed") and which +/// nothing implemented. A committed cycle whose measured resource delta differs from the +/// published signature is DROPPED WHOLE and the drive hands back to manual play. +/// +/// # Why it is load-bearing rather than belt-and-braces +/// +/// `elimination_bounds` divided the CR 704.5a headroom (`life - 1`) by `per_cycle.delta` to +/// produce the count the table agreed to. If a committed cycle moves a different amount, that +/// division no longer describes the drive, and the remaining repetitions can carry a seat past +/// the threshold INSIDE the proposal — the exact conditional action CR 732.2a forbids. +/// +/// # The hostile fixture +/// +/// The offer is real (the engine wrote it after 400 driven beats); ONE field is then doctored — +/// the published `per_cycle.delta` gains a life term for a seat the loop does not touch, which +/// no cycle can ever produce. Everything downstream is production: `apply()`'s declare handler, +/// the APNAP window, `apply_confirmed_shortcut`, `materialize_fixed_shortcut`. +/// +/// # Non-vacuity — the paired positive control is arm ⓐ +/// +/// ⓐ runs the SAME trajectory with the signature untouched and commits `n × δ`. Without it, ⓑ's +/// zero-delta observation would be indistinguishable from "the offer never fired" or "the drive +/// aborts on this fixture anyway" — which is precisely the shape the HEAD defect had. +/// +/// REVERT-PROBE: delete the `if actual != pd.delta { break 'cycles; }` block in +/// `materialize_fixed_shortcut` ⇒ ⓑ commits `n × (real δ)` like ⓐ ⇒ ⓑ's zero-delta assertion +/// FAILS while ⓐ stays green. +#[test] +fn a_cycle_that_does_not_match_the_published_period_is_dropped() { + let n: u32 = 2; + + // ⓐ POSITIVE CONTROL — untouched signature, same trajectory. + let mut control = bloodloop_state(3); + drive_to_bounded_offer(&mut control, 400).expect("the bounded offer must fire"); + let (committed_ok, per_cycle, _) = accept_bounded_fixed(&mut control, n); + assert!( + committed_ok.iter().any(|(_, d)| *d != 0), + "REACH-GUARD: the undoctored drive must COMMIT something, else ⓑ's zero proves nothing \ + about the conformance check; got {committed_ok:?}" + ); + + // ⓑ the same offer with the published period made unproducible. + let mut state = bloodloop_state(3); + drive_to_bounded_offer(&mut state, 400).expect("the bounded offer must fire"); + let (proposer, _, _) = bounded_offer_parts(&state); + let stowaway = state + .players + .iter() + .map(|p| p.id) + .find(|id| per_cycle.delta.life.get(id).copied().unwrap_or(0) == 0) + .expect("the cascade's own controller loses no life, so a zero-term seat exists"); + let WaitingFor::LoopShortcut { certificate, .. } = &mut state.waiting_for else { + unreachable!("bounded_offer_parts already matched the offer") + }; + certificate + .per_cycle + .as_mut() + .expect("a bounded offer publishes its signature") + .delta + .life + .insert(stowaway, -7); + + let lives_before: Vec = state.players.iter().map(|p| p.life).collect(); + r6a_declare_and_accept_all(&mut state, proposer, n); + + assert_eq!( + state.players.iter().map(|p| p.life).collect::>(), + lives_before, + "CR 732.2a: no cycle can produce the doctored period, so the FIRST one is dropped whole \ + and ZERO life moves — a partial commit would mean the drive kept a cycle whose \ + magnitude the agreed bound was not computed from" + ); + assert!( + matches!(state.waiting_for, WaitingFor::Priority { .. }), + "a non-conforming drive falls closed to manual play (CR 800.4a living seat), it does \ + not crown and does not wedge; got {:?}", + state.waiting_for + ); + assert_eq!( + state.players.iter().filter(|p| p.is_eliminated).count(), + 0, + "nothing was committed, so nothing crossed a CR 704.5a threshold" + ); +} + +/// FIX ROUND 1 (MED-4) — the AI's bounded-declare candidate is GENERATED, LEGAL, and DRIVES. +/// +/// The `if schema.points.is_empty() && schema.is_bounded()` block in +/// `ai_support::candidates` shipped with zero coverage: deleting it left the engine suite +/// (4167) and every `phase-ai` suite green. Its sibling one screen away +/// (`ai_collapse_candidate_is_clamped_to_the_accepted_bound`) sets the standard this row +/// mirrors — generate the candidate through the production generator, then `apply()` it. +/// +/// Without that candidate an AI proposer at a bounded offer has exactly two options: +/// `UntilLethal`, which `handle_declare_shortcut` refuses outright against a bounded offer, and +/// `DeclineShortcut`. The block is the difference between an AI that can take this shortcut and +/// one that structurally cannot. +/// +/// ⚠ RECORDED, NOT FIXED (a scope note, measured here): the block is gated on +/// `schema.points.is_empty()`. A TARGETED bounded offer publishes pins, so the AI gets no +/// accept candidate at all — `UntilLethal` is refused for bounded and the `Fixed` candidate +/// carries `template: None`, which fail-closes on published pins. A targeted bounded offer is +/// therefore AI-undeclarable today. That is a coverage gap in the candidate generator, not a +/// soundness bug (the AI declines, which is always legal), and it is left for its own round. +/// +/// REVERT-PROBE: delete the `schema.points.is_empty() && schema.is_bounded()` block ⇒ +/// assertion (2) FAILS (`Fixed(bound)` absent from the generated candidates). +#[test] +fn ai_bounded_declare_candidate_is_generated_legal_and_drives() { + use engine::analysis::decision_template::IterationCount; + + let mut state = bloodloop_state(3); + drive_to_bounded_offer(&mut state, 400).expect("the bounded offer must fire at 3 players"); + let (proposer, certificate, schema) = bounded_offer_parts(&state); + let per_cycle = certificate + .per_cycle + .clone() + .expect("a bounded offer publishes its per-period signature"); + let bound = schema.max_iterations; + + // (1) reach-guards: this row is about the BOUNDED, UNTARGETED shape the block gates on. + assert!( + schema.is_bounded(), + "REACH-GUARD: an unbounded offer takes a different generator arm; bound = {bound}" + ); + assert!( + schema.points.is_empty(), + "REACH-GUARD: the block is gated on an empty pin set; got {:?}", + schema.points + ); + + // (2) the production generator offers it. + let expected = GameAction::DeclareShortcut { + count: IterationCount::Fixed(bound), + template: None, + }; + let candidates = engine::ai_support::legal_actions(&state); + assert!( + candidates.contains(&expected), + "the AI must be able to declare the bounded offer's own count; got {candidates:?}" + ); + + // (3) ...and the reducer ACCEPTS it — which is what makes (2) load-bearing rather than a + // restatement of the generator. A refused declaration hands straight back to priority. + let lives_before: Vec = state.players.iter().map(|p| p.life as i64).collect(); + apply(&mut state, proposer, expected) + .expect("the AI's generated candidate must be accepted by the reducer"); + assert!( + matches!(state.waiting_for, WaitingFor::RespondToShortcut { .. }), + "CR 732.2b: an accepted declaration opens the APNAP response window; a handback to \ + Priority would mean the generator produced a count the engine refuses. got {:?}", + state.waiting_for + ); + + // (4) ...and the accepted count DRIVES. Bound to the published period, never a literal. + while let WaitingFor::RespondToShortcut { player, .. } = state.waiting_for.clone() { + apply( + &mut state, + player, + GameAction::RespondToShortcut { + response: ShortcutResponse::Accept, + }, + ) + .expect("each living opponent accepts"); + } + for (seat, l0) in state + .players + .iter() + .map(|p| p.id) + .zip(&lives_before) + .collect::>() + { + let now = state.players.iter().find(|p| p.id == seat).unwrap().life as i64; + assert_eq!( + now - l0, + i64::from(bound) * per_cycle.delta.life.get(&seat).copied().unwrap_or(0), + "{seat:?}: the AI-declared count commits exactly `max_iterations` copies of the \ + published period" + ); + } + assert_eq!( + state.players.iter().filter(|p| p.is_eliminated).count(), + 0, + "CR 704.5a: the offered bound reserves `life - 1` of headroom, so the AI's own \ + maximal legal declaration still eliminates nobody" + ); +} diff --git a/crates/phase-ai/src/policies/loop_shortcut.rs b/crates/phase-ai/src/policies/loop_shortcut.rs index 84f077aa91..808f90c855 100644 --- a/crates/phase-ai/src/policies/loop_shortcut.rs +++ b/crates/phase-ai/src/policies/loop_shortcut.rs @@ -195,8 +195,26 @@ impl TacticalPolicy for LoopShortcutPolicy { // `proposal.predicted_winner`, unlike both `UntilLethal` crown gates. Such a // declare by a faller proposer is a committed self-loss, exactly what the // `UntilLethal` arm above rejects. On a BOUNDED offer that hazard is discharged by - // `elimination_bounds`' contract rather than by an AI-side computation: every `n` - // within `max_iterations` provably eliminates nobody. + // `elimination_bounds`' contract rather than by an AI-side computation: it narrows to + // `min over living seats of (life - 1) / per-cycle loss` with FLOOR division, so + // `n * loss <= life - 1` for every seat and every `n` within `max_iterations`. + // + // ⚠ THAT PREMISE WAS FALSE WHEN THIS ARM SHIPPED, and it is stated here only because + // it has since been made true and RE-MEASURED. At `c6d834040` + // `materialize_fixed_shortcut` had no cycle delimiter for the basis-B class, so the + // drive ran to the beat cap and `Fixed(1)` on a bounded 3p/4p drain eliminated the + // whole table — the arithmetic above described a bound the drive never honoured. Fix + // round 1 delimits a cycle by the published `PeriodicDelta::frames_per_period` and + // drops any cycle whose measured delta differs from the published one. + // + // RE-MEASURED after that fix, through the production accept path (declare + APNAP + // accepts) at `n` = 1, 3 and AT the offered bound: + // bloodloop 3p (bound 16): n=1 [20,16,16] n=3 [20,14,14] n=16 [20,1,1] elim 0 + // bloodloop 4p (bound 16): n=1/3/16 likewise, elim 0 + // dina 4p (bound 30): n=1 [50,34,30,35] … n=30 [79,5,1,6] elim 0 + // The engine-side regression row that keeps this honest is + // `bounded_fixed_count_commits_exactly_n_periods`, which asserts zero eliminations + // and `committed == n × published δ` on all three fixtures. (_, IterationCount::Fixed(_)) if !schema.is_bounded() => na(), // CR 732.2a: over the offered bound. The AI-side mirror of the engine's own From cca940c371dc99249962e169b81b8a16f73a3ab5 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Tue, 28 Jul 2026 14:17:35 -0500 Subject: [PATCH 05/62] test(engine): cover the partial-crossing arm and the basis-A span at drive level MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix round 2 on the `review-impl` findings. No production behaviour changes: every `engine.rs` edit is a comment or lives inside `#[cfg(test)] mod bounded_offer_conjunct_tests`. MED-1. The required cross-lethal stop-short row was demonstrated only on bloodloop3, whose two opponents sit at equal life (17/17) and therefore cross 0 on the SAME cycle — a symmetric fixture cannot witness an asymmetric outcome. The arm real multiplayer boards take had no fixture, and the mirror's doc claim ("the eliminated set is exactly the seats the published period drains") is false on it. The two arms are asymmetric: total wipe every remaining opponent crosses together => WaitingFor::GameOver => CycleOutcome::CrossLethal: the crossing cycle COMMITS, game ends, eliminated == victims partial one seat crosses while >= 2 survive => no GameOver => CycleOutcome::Abort: the crossing cycle is ROLLED BACK WHOLE, eliminated == [] (by rollback, not because nobody crossed) Both are out of contract for a legitimately-derived bound — `elimination_bounds` reserves `life - 1` of CR 704.5a headroom — so each is reachable only under a doctored one. `bounded_fixed_drive_rolls_back_a_partial_crossing_cycle` asserts the measured partial behaviour on the dina 4p dump: honest bound 30, first crossings 31/35/36, so doctoring the bound to 31/34/40 commits exactly 30 periods, eliminates nobody and hands back `Priority{P0}`. The Abort is not "fixed": rolling the out-of-contract cycle back is conservative and correct, since the remaining repetitions were bounded by a delta the board stops moving once a drain target leaves. The mirror's claim is now scoped per arm and its arm-a doctoring is recorded — and asserted — as the no-op it is on that fixture. MED-2. Reverting `frames_per_period: span as u32` to the old hardcoded `1` flipped exactly one row, and that row asserts the PUBLISHED number, never accepting a `Fixed(n)` — so the basis-A half of the delimiter shipped on a single published-value assertion. `basis_a_bounded_fixed_count_commits_exactly_n_periods` declares and drives `Fixed(1)`, `Fixed(2)` and `Fixed(3)` through `apply()` on the subset-lethal (basis-A, k == 2) fixture and measures `n * delta` committed. Under the hardcode it commits `{0, 0, 0}` at every n — the conformance check dropping the half-periods a too-small k produces. The width tripwire is placed LAST on purpose: with it first, the hardcode probe failed there and the drive assertions were never reached, which would have made the row a second copy of the one it exists to back. Measured: the hardcode revert now flips 2 rows of 85, and the flip it reports is "the drive committed nothing". The `span >= 1` fail-closed guard gains `a_zero_span_certifying_pair_never_publishes_a_zero_width_period`, on a new `drain_ring` fixture. `mill_ring` could not serve: library size is BOARD, so its frames are board-unequal, basis A refuses them outright, and every mill-ring row in that module is really exercising basis B. Life is projected, so a drain ring's frames are board-equal and reach the basis-A walk. Reach-guards assert the span-0 pair satisfies both halves of the disjunct, so the guard is provably the refuser; deleting it publishes 0. Doc corrections, each re-measured. Six sites claimed "basis A publishes 1 unconditionally" — false since the previous commit made it a measured span, and one of them was carrying a basis attribution that inference no longer supports. Counts now name the runner AND the filter (`cargo test -p engine --test integration -- loop_shortcut::`, module filter, 4090 filtered out); the one bare count with neither recorded is deleted rather than re-dressed. Revert-probes run: delete the frame delimiter => 5 of 85 fail (the basis-A row does NOT, because its board recurs and delimits itself); delete the conformance check => 1 of 85 fails and the partial-crossing row stays green, which is what establishes its stop is the Abort rather than a conformance drop. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/game/engine.rs | 137 +++++- .../engine/tests/integration/loop_shortcut.rs | 436 ++++++++++++++++-- 2 files changed, 536 insertions(+), 37 deletions(-) diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index 60b5d03072..63c1bd2a95 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -1160,10 +1160,13 @@ pub fn try_offer_bounded_cycle_shortcut( // exactly what disables the relief that would otherwise let cover succeed. Two // individually-correct constraints composing into a refusal neither intended. // - // ⚠ NEVER attribute the basis from `frames_per_period`. Basis A publishes `1` - // unconditionally and basis B publishes the same `1` whenever its derived `k` is 1, so - // `== 1` discriminates nothing. `!= 1` is sufficient for "not basis A" and never - // necessary. The only sound attribution is a discriminating probe: force + // ⚠ NEVER attribute the basis from `frames_per_period`. BOTH bases now MEASURE it — basis A + // from the certifying prior's ring index above, basis B from `ring_delta_signature`'s + // derived `k` — so the two publish overlapping value ranges and NO value discriminates in + // either direction. (Before fix round 1 basis A published a hardcoded `1`, which made + // `!= 1` sufficient-but-not-necessary for "not basis A"; that inference is now dead too, + // since a basis-A span of 2 is exactly what the `interactive_3p_subset_lethal_does_not_crown` + // fixture publishes.) The only sound attribution is a discriminating probe: force // `ring_delta_signature` to return `None` (basis B's sole entry point is the `None =>` // arm below) — the rows that survive are basis A, the rows that fail are basis B. let (cert_prior, cert_current, mut periodic) = match basis_a { @@ -2497,6 +2500,21 @@ fn materialize_fixed_shortcut( } // Runaway cap / unpinned prompt / engine error ⇒ abort to manual. The aborting // cycle's events were already dropped (no partial-cycle event leak). + // + // ⚠ THE TWO LETHAL ARMS ARE ASYMMETRIC, and a future drive must learn that here + // rather than by accident. A cycle that takes EVERY remaining opponent to 0 at once + // reaches `WaitingFor::GameOver` and lands in the `CrossLethal` arm above: it + // COMMITS and the game ends. A cycle that takes ONE seat to 0 while >= 2 players + // survive raises no `GameOver` (CR 104.2a crowns nobody), the loop's shape changes + // under it as the drained seat leaves, no settle beat recurs, and it arrives HERE — + // rolled back whole, `eliminated` empty, priority handed back. Both are out of + // contract for a legitimately-derived bound (`elimination_bounds` reserves + // `life - 1` of CR 704.5a headroom, so a within-bound count crosses no threshold), + // so either arm means the published bound was wrong. Rolling the out-of-contract + // cycle back is deliberate: the remaining repetitions were bounded by a delta the + // board stops moving the moment a drain target leaves the game. Rows: + // `bounded_fixed_drive_stops_at_the_first_lethal_cycle` (total wipe) and + // `bounded_fixed_drive_rolls_back_a_partial_crossing_cycle` (partial). CycleOutcome::Abort => break 'cycles, } } @@ -13451,10 +13469,19 @@ mod kilo_interruptibility_tests { /// FIX ROUND 1 (MED-2) — a named negative row per [`try_offer_bounded_cycle_shortcut`] conjunct /// that no tracked test was exercising. /// -/// The reviewer measured all three by disabling them: step (2) `ProposerIsNotActivePlayer` and -/// step (5) `AdvantageOnlyCycle` could each be deleted with **4167 passed / 0 failed**, and only -/// `DrivingSequenceNotEmpty` was asserted by name anywhere. A conjunct no row can name is a -/// conjunct nobody notices losing. +/// The reviewer measured all three by disabling them on the PRE-ROW tree: step (2) +/// `ProposerIsNotActivePlayer` and step (5) `AdvantageOnlyCycle` could each be deleted with the +/// whole suite still green, and only `DrivingSequenceNotEmpty` was asserted by name anywhere. +/// A conjunct no row can name is a conjunct nobody notices losing. +/// +/// ⚠ The pass COUNT that used to appear here ("4167 passed / 0 failed") is deleted rather than +/// re-dressed, because it shipped with no runner and no filter recorded beside it and a bare +/// count means nothing without both (fix round 2, LOW-2: a count in this file named a shape it +/// did not have). It is also not reproducible on this tree BY DESIGN — the rows below now exist, +/// so deleting either conjunct today flips its named row, which is the entire point. Each row's +/// own REVERT-PROBE line is the reproducible claim; run it with +/// `cargo test -p engine --lib -- game::engine::bounded_offer_conjunct_tests::` (module filter on +/// the `engine` lib target). /// /// # Why these are UNIT rows on a synthetic ring /// @@ -13521,6 +13548,28 @@ mod bounded_offer_conjunct_tests { }) } + /// Drain `victim` by one life per retained frame — a constant per-frame LIFE delta. + /// + /// The counterpart to [`mill_ring`], and the difference is exactly the one basis A turns on: + /// library size is BOARD (`loop_states_equal_modulo_resources` compares it), while life is a + /// PROJECTED resource (`project_out_resources` removes it). So a mill ring's frames are + /// board-UNEQUAL and can only certify through basis B's `ring_delta_signature`, whereas a + /// drain ring's frames are board-EQUAL and certify through basis A's first disjunct. + /// + /// Frame `i` sits `frames - i` life ABOVE the live state, so the newest frame is exactly one + /// period ahead of it and every older frame one more — i.e. the live state is the far end of + /// the period, which is the orientation `ResourceVector::delta(prior, current)` reads. + fn drain_ring(victim: PlayerId, frames: usize) -> GameState { + ring_state(frames, move |frame, i| { + let player = frame + .players + .iter_mut() + .find(|p| p.id == victim) + .expect("seat exists"); + player.life += (frames - i) as i32; + }) + } + /// STEP (2) `ProposerIsNotActivePlayer`. CR 732.2a lets the player with priority propose; /// this conjunct additionally requires that player to be the ACTIVE one, because the ring /// sampler only samples at `Priority{active_player}` — which is what establishes the @@ -13640,4 +13689,76 @@ mod bounded_offer_conjunct_tests { offer would spend the CR 732.2b response window to commit nothing" ); } + + /// FIX ROUND 2 — basis A's `span >= 1` fail-closed guard, which shipped in fix round 1 with + /// no row of its own. + /// + /// The basis-A walk is `.rev()`, so the FIRST candidate it tries is `ring.last()` — the + /// sample `pass_priority_once_with_pipeline` recorded at this very beat, whose span from the + /// current state is 0. In a production trajectory that pair carries a zero δ and dies on + /// `net_progress_for`, but nothing structural forces that: this fixture's newest retained + /// frame is board-equal to the live state and its δ IS net progress (the reach-guards below + /// assert exactly that, so the guard is provably reached rather than assumed to be). + /// + /// The fixture is a [`drain_ring`], NOT a [`mill_ring`], and the difference is load-bearing: + /// library size is BOARD, so a mill ring's frames are board-unequal, basis A refuses them + /// outright and every mill-ring row in this module is really exercising basis B. A guard + /// inside the basis-A walk is unreachable from that fixture. (Measured: the board-equality + /// reach-guard below FAILS on `mill_ring(P1, 3)`.) + /// + /// A published `frames_per_period: 0` would mean "one repetition spans no retained frames", + /// which `drive_one_shortcut_cycle`'s delimiter cannot honour — `frames_this_cycle >= 0` + /// holds before a single beat is driven, so the first settle beat would complete a "cycle" + /// that moved nothing, and `materialize_fixed_shortcut`'s conformance check would then drop + /// every one of them. The bounded offer would be minted, accepted, and commit nothing. + /// + /// REVERT-PROBE: delete `span >= 1 &&` from the basis-A closure ⇒ the span-0 pair certifies + /// first and the published `frames_per_period` is 0 ⇒ this row FAILS. + #[test] + fn a_zero_span_certifying_pair_never_publishes_a_zero_width_period() { + use crate::analysis::resource::{loop_states_equal_modulo_resources, ResourceVector}; + + let state = drain_ring(P1, 3); + + // ── REACH-GUARDS: the span-0 pair really is a certifying candidate on this fixture, so + // the guard is what refuses it. Both halves of basis A's first disjunct, asserted on + // the exact pair the `.rev()` walk reaches first. + let newest = state + .loop_detect_ring + .back() + .expect("the fixture builds a ring") + .as_ref() + .clone(); + assert!( + loop_states_equal_modulo_resources(&newest, &state), + "REACH-GUARD: the newest retained frame must be board-equal to the live state, else \ + the span-0 pair fails the board predicate and the guard is never the refuser" + ); + let span_zero_delta = ResourceVector::delta( + &ResourceVector::snapshot(&newest), + &ResourceVector::snapshot(&state), + ); + assert!( + span_zero_delta.net_progress_for(P0), + "REACH-GUARD: the span-0 pair must carry net progress, else `net_progress_for` \ + refuses it first and this row would pass without the guard existing; δ \ + {span_zero_delta:?}" + ); + + let offer = try_offer_bounded_cycle_shortcut(&state, false) + .expect("REACH-GUARD: the fixture must OFFER, else nothing publishes a period"); + let WaitingFor::LoopShortcut { certificate, .. } = &offer else { + panic!("a bounded offer is a LoopShortcut window; got {offer:?}") + }; + let per_cycle = certificate + .per_cycle + .as_ref() + .expect("a bounded offer publishes its per-period signature"); + assert!( + per_cycle.frames_per_period >= 1, + "CR 732.2a: a repetition spans at least one retained ring frame — a published 0 is a \ + delimiter no drive can honour; got {}", + per_cycle.frames_per_period + ); + } } diff --git a/crates/engine/tests/integration/loop_shortcut.rs b/crates/engine/tests/integration/loop_shortcut.rs index a39ee5d5a8..b9529aab1e 100644 --- a/crates/engine/tests/integration/loop_shortcut.rs +++ b/crates/engine/tests/integration/loop_shortcut.rs @@ -7226,13 +7226,17 @@ fn bounded_offer_parts( /// gate-(1) refusal measured in this run, so it is NOT the refuser here.) /// /// THE PUBLISHED PAYLOAD CANNOT DISTINGUISH THE TWO HERE, and that is why the row asserts a -/// structural `frames_per_period >= 1` and not a basis. Basis A publishes `1` unconditionally -/// and basis B *derives* `k` from `1` upward, so `== 1` is observationally identical from -/// both. `!= 1` is sufficient for "not basis A" (that is the attribution -/// `bounded_offer_on_a_within_turn_draw_drain_is_basis_b` uses) but is never NECESSARY, and no -/// `pub` predicate closes the gap: basis A's certifying condition is a DISJUNCTION whose +/// structural `frames_per_period >= 1` and not a basis. ⚠ RE-DERIVED IN FIX ROUND 2, because +/// fix round 1 moved the ground under the older wording: basis A no longer publishes a hardcoded +/// `1`, it MEASURES the span from the certifying prior's ring index, and basis B *derives* `k` +/// from `1` upward. Both therefore range over the same values and **NO published value +/// discriminates in either direction** — not `== 1`, and no longer `!= 1` either (a basis-A span +/// of 2 is exactly what `interactive_3p_subset_lethal_does_not_crown` publishes). Any row still +/// reading a basis off this field is stating a necessary-not-sufficient condition at best. No +/// `pub` predicate closes the gap either: basis A's certifying condition is a DISJUNCTION whose /// second half, `loop_states_cover_modulo_growth_pinned`, is `pub(crate)` and unnameable from -/// an integration test. +/// an integration test — so the sound attribution stays the discriminating probe (force +/// `ring_delta_signature` to return `None`; basis-B rows lose their offer, basis-A rows keep it). /// /// CONSEQUENCE, and it is the good one: this row is a basis-B positive control on a REAL 4p /// dump. It is also therefore SUBJECT TO the CR 703.1 turn-position conjunct rather than @@ -7263,9 +7267,15 @@ fn bounded_offer_parts( /// * make step (7)'s range check `1..=MAX_SHORTCUT_CYCLES` ⇒ NOTHING flips, anywhere. The /// claim this bullet used to make — that the `schema.is_bounded()` assertion below "is the /// one that flips" — was FALSE, and is corrected rather than quietly deleted. RE-MEASURED -/// under that exact mutation: the entire `loop_shortcut` integration set stays green -/// (106 passed / 0 failed), `schema.is_bounded()` included, because on every fixture the -/// bound really IS narrowed and that assertion holds independently of the range check. +/// under that exact mutation, with the runner and the filter both named because the earlier +/// revision quoted a count whose shape did not match the filter beside it (fix round 2, +/// LOW-2): `cargo test -p engine --test integration -- loop_shortcut::` (module filter on the +/// `integration` binary) ⇒ **85 passed / 0 failed, 4090 filtered out**. `schema.is_bounded()` +/// included, because on every fixture the bound really IS narrowed and that assertion holds +/// independently of the range check. A SUBSTRING filter is a different question with a +/// different answer — `cargo test -p engine loop_shortcut` sweeps every target and additionally +/// matches `loop_shortcut_activation` / `loop_shortcut_mana_engine`; do not quote one shape's +/// number beside the other's filter. /// No single-conjunct revert of step (7) flips a row on THIS fixture, and that is a property /// of the mutation rather than a gap: it widens only the range's UPPER end, and a bound of /// exactly `MAX_SHORTCUT_CYCLES` means no axis narrowed — which `classify_win_kind` already @@ -7563,16 +7573,20 @@ fn bounded_offer_on_a_within_turn_draw_drain_is_basis_b() { "a zero-delta cycle states no CR 704 threshold and must never be offered" ); - // (iii) BASIS ATTRIBUTION. Basis A publishes `frames_per_period: 1` UNCONDITIONALLY, so - // `!= 1` is sufficient for "not basis A" — and it is exactly symmetric with the dina row's - // `== 1`, so the two read as one pair. It is deliberately not NECESSARY (basis B searches - // k from 1, so a hypothetical basis-B offer with k == 1 would fail here); that is the - // fail-LOUD direction. If this fixture's derived k ever drifts to 1 the row must be - // re-derived, not relaxed. + // (iii) A PERIOD-WIDTH TRIPWIRE — no longer a basis attribution (fix round 2). The older + // wording read `!= 1` as sufficient for "not basis A" on the premise that basis A published + // a hardcoded `1`. Fix round 1 replaced that hardcode with a MEASURED span, so basis A now + // publishes 2 on at least one shipped fixture + // (`interactive_3p_subset_lethal_does_not_crown`) and the inference is dead in both + // directions. The basis attribution this row actually stands on is its named revert-probe ⓐ + // — force `ring_delta_signature` to return `None` and this row loses its offer entirely, + // which no basis-A row does. The assertion is KEPT as a width tripwire: this cascade draws a + // card every cycle, so its period genuinely spans more than one retained frame, and a drift + // to 1 means the fixture stopped being what the row describes. assert_ne!( k, 1, - "basis B must be what certified this board: basis A publishes frames_per_period 1 \ - unconditionally, and this cascade draws a card every cycle so basis A cannot match" + "this cascade draws a card every cycle, so one repetition spans more than one retained \ + ring frame; a k of 1 means the fixture no longer has the shape this row asserts" ); // (iv) the bound is narrowed, asked of the single authority. `MAX_SHORTCUT_CYCLES` is @@ -7624,10 +7638,12 @@ fn bounded_offer_on_a_within_turn_draw_drain_is_basis_b() { /// GREEN at both player counts while `dina_untargeted_drain_4p_offers_at_three_live_opponents` /// and `bounded_offer_on_a_within_turn_draw_drain_is_basis_b` both FAIL. Surviving that /// mutation is what proves basis A certified here. **`frames_per_period == 1` proves NOTHING -/// about the basis** — basis A publishes `1` unconditionally and basis B *derives* `k` from -/// `1` upward, so a k==1 basis-B offer is byte-identical in the payload. The `== 1` assertion -/// below is a structural consistency check, necessary but never sufficient; treating it as a -/// basis attribution is the exact non-discriminating inference that mislabelled the dina row. +/// about the basis** — basis B *derives* `k` from `1` upward, so a k==1 basis-B offer is +/// byte-identical in the payload, and since fix round 1 basis A MEASURES its span too (2 on +/// `interactive_3p_subset_lethal_does_not_crown`), so a `!= 1` reading is dead as well. The +/// `== 1` assertion below is a structural consistency check on THIS fixture's period width, +/// necessary but never sufficient; treating it as a basis attribution is the exact +/// non-discriminating inference that mislabelled the dina row. /// /// ⚠ MECHANISM — CORRECTED, and the correction is load-bearing. An earlier revision of this /// doc said *"a pure life↔life loop moves only axes `loop_states_equal_modulo_resources` @@ -7729,10 +7745,12 @@ fn multiplayer_pure_life_drain_offers_at_three_and_four_players() { .expect("a bounded offer publishes its per-period signature"); assert_eq!( per_cycle.frames_per_period, 1, - "{seats}p: NECESSARY-but-not-sufficient for the basis-A label. Basis A publishes 1 \ - unconditionally, so != 1 would refute the label outright and must be re-derived, \ - not relaxed — but == 1 does NOT establish it, because basis B derives k from 1 \ - upward and publishes the identical value. The label is carried by the \ + "{seats}p: a PERIOD-WIDTH tripwire, not a basis attribution. This cascade's \ + certifying prior sits one retained frame back, so its MEASURED span is 1 — a drift \ + means the fixture changed shape and the row must be re-derived, not relaxed. It \ + establishes nothing about the basis in either direction: basis B derives k from 1 \ + upward, and since fix round 1 basis A measures its span too (2 on \ + `interactive_3p_subset_lethal_does_not_crown`). The label is carried by the \ `ring_delta_signature -> None` probe named in this row's doc, not by this number" ); @@ -8067,7 +8085,9 @@ fn bloodloop_mandatory_draw_cascade_offers_at_2p_3p_and_4p() { .expect("a bounded offer states its per-period signature"); assert_eq!( per_cycle.frames_per_period, 2, - "{players}p: derived period (basis B); basis A publishes 1" + "{players}p: this cascade's derived period spans two retained ring frames. A WIDTH \ + tripwire only — since fix round 1 both bases measure the span, so no value \ + attributes a basis (see `bounded_offer_on_a_within_turn_draw_drain_is_basis_b`)" ); // The multiplayer property the ≥3p rows exist for: ONE cycle charges EVERY @@ -8270,6 +8290,137 @@ fn bounded_fixed_count_commits_exactly_n_periods() { } } +/// FIX ROUND 2 (MED-2) — the same `n × δ` property on a certification-basis **A** offer, at +/// DRIVE level. The row above covers basis **B** on all three of its fixtures; every basis-A +/// claim in this lane rested on ONE published-number assertion until this row. +/// +/// # Why the basis matters, and what was uncovered +/// +/// `frames_per_period` reaches the drive from two different producers. +/// Basis B derives it from `ring_delta_signature` (the ring window's own period `k`); basis A +/// derives it from the certifying prior's ring index. Fix round 1 changed ONLY the basis-A +/// producer — a hardcoded `1` became the measured span — and MEASURED, reverting that hardcode +/// flips exactly one row of the 85 in this file's `loop_shortcut::` module: +/// [`interactive_3p_subset_lethal_does_not_crown`]. That row asserts the PUBLISHED VALUE and +/// nothing else; it never declares a count, so nothing in the tree observed what a basis-A +/// offer's drive actually commits. The claim "under the hardcode that fixture's accepted drive +/// committed nothing at all" was true and untracked. This row tracks it. +/// +/// # The fixture, and why it is the right one +/// +/// `setup_3p_subset_lethal` is the ONE basis-A fixture whose published span is not 1: the +/// `DRAIN_CLERIC` / `BLOOD_SIPPER` pairing alternates a gain-life resolution and a lose-life +/// resolution, so one whole repetition spans TWO retained ring frames (`frames_per_period == 2`, +/// asserted below as a reach-guard). A fixture with `k == 1` could not tell a drive that reads +/// the VALUE from one that reads any positive constant. +/// +/// # MEASURED, through the production accept path (`apply` → declare → APNAP accepts) +/// +/// derived `k = 2` ⇒ `n=1` commits `{P0:+1, P1:-1, P2:0}`, `n=2` `{+2,-2,0}`, `n=3` `{+3,-3,0}` +/// — exactly `n × δ`. P2 is the CR 119.8 life-loss-immune bystander and is untouched at every +/// `n`, which is the multiplayer half: one cycle charges the seats the certificate names and +/// only those. +/// +/// # REVERT-PROBES — both RUN, and the second one does NOT flip +/// +/// * ⓐ **FLIPS.** Restore basis A's hardcoded `frames_per_period: 1` ⇒ every `n` commits +/// `{P0: 0, P1: 0, P2: 0}`, and the row reports it at the non-zero-commit guard. The +/// mechanism: `frames_per_period` is an OR-ed delimiter, so a `k` SMALLER than the true span +/// cuts the cycle early — here at one frame, half a period — and +/// `materialize_fixed_shortcut`'s conformance check then drops every one of them. +/// * ⓑ **DOES NOT FLIP**, measured, and it is recorded rather than quietly dropped. Deleting +/// `|| frames_per_period.is_some_and(|k| frames_this_cycle >= k)` from +/// `drive_one_shortcut_cycle` leaves this row GREEN, because this is a basis-**A** fixture: +/// its board genuinely RECURS, so `loop_states_equal_modulo_resources(boundary, &norm)` is a +/// working delimiter on its own and lands on the same two-frame cycle. (The same probe flips +/// five other rows in this module, including +/// `bounded_fixed_drive_rolls_back_a_partial_crossing_cycle` — the basis-B fixtures, whose +/// boards never recur, are the ones that need the delimiter to exist at all.) +/// +/// So this row's discrimination rests ENTIRELY on ⓐ — which is the point: ⓐ is the only edit +/// that distinguishes a measured span from a hardcoded one, and before this row nothing in the +/// tree observed its drive-level consequence. +#[test] +fn basis_a_bounded_fixed_count_commits_exactly_n_periods() { + let mut boards: Vec> = vec![]; + for n in [1u32, 2, 3] { + // Rebuilt per `n`: a driven trajectory is not replayable from a used state. + let (mut runner, kickoff) = setup_3p_subset_lethal(LoopDetectionMode::Interactive); + let _ = runner.cast(kickoff).resolve(); + drive_scenario_to_bounded_offer(&mut runner, PRIMED_LOOP_BEATS).unwrap_or_else(|| { + panic!( + "the subset-lethal class raises a bounded offer (see \ + `interactive_3p_subset_lethal_does_not_crown`); got {:?}", + runner.state().waiting_for + ) + }); + let mut state = runner.state().clone(); + + let (committed, per_cycle, bound) = accept_bounded_fixed(&mut state, n); + + // ── reach-guards: without these the `n × δ` equality can pass degenerately ── + assert!( + per_cycle.delta.life.values().filter(|v| **v != 0).count() >= 2, + "a zero-or-single-term δ makes `n × δ` trivially satisfiable; got {:?}", + per_cycle.delta.life + ); + assert!( + bound >= 3, + "`n = 3` must be WITHIN the offered bound, else the declaration is handed back and \ + this row silently tests the rejection arm; bound = {bound}" + ); + // THE ANTIDOTE TO THE HARDCODE: the drive must commit something. Under + // `frames_per_period: 1` on this fixture the conformance check drops every half-period + // and this is `{0,0,0}` — a state in which the `n × δ` equality below still holds for + // the zero-δ seats and would not, on its own, notice. + assert!( + committed.iter().any(|(_, delta)| *delta != 0), + "n={n}: a basis-A drive that commits nothing is the hardcoded-span defect; \ + committed {committed:?}" + ); + + // ── THE PROPERTY: committed delta == n × published per-period delta ── + for (seat, delta) in &committed { + assert_eq!( + *delta, + i64::from(n) * per_cycle.delta.life.get(seat).copied().unwrap_or(0), + "n={n}: {seat:?}'s committed life delta must be exactly `n` copies of the \ + period the offer published ({:?}); committed {committed:?}", + per_cycle.delta.life + ); + } + + assert_eq!( + state.players.iter().filter(|p| p.is_eliminated).count(), + 0, + "n={n}: CR 704.5a — a within-bound drive eliminates nobody" + ); + assert!( + matches!(state.waiting_for, WaitingFor::Priority { .. }), + "n={n}: a completed finite drive hands back to ordinary priority; got {:?}", + state.waiting_for + ); + + // ── WIDTH TRIPWIRE, deliberately LAST. It is the same published-number observation + // `interactive_3p_subset_lethal_does_not_crown` already carries, and MED-2's whole + // finding is that a published number is not a drive-level fact. Placed after the + // assertions above so that under the hardcoded-span revert the failure this row + // REPORTS is "the drive committed nothing", not "the offer published 1" — measured: + // with it placed first, the hardcode probe failed here and the drive assertions were + // never reached, which would have made this row a second copy of the existing one. + assert_eq!( + per_cycle.frames_per_period, 2, + "n={n}: this fixture's repetition spans two retained ring frames; a drift changes \ + what one committed cycle means and every equality above with it" + ); + boards.push(committed); + } + + // Three DISTINCT boards. Under the hardcoded span all three are `{0,0,0}`. + assert_ne!(boards[0], boards[1], "`Fixed(1)` vs `Fixed(2)`"); + assert_ne!(boards[1], boards[2], "`Fixed(2)` vs `Fixed(3)`"); +} + /// FIX ROUND 1 MIRROR (A1.2) — the drive STOPS AT the first lethal cycle. It does not commit /// `n` cycles blindly and reconcile the deaths afterwards. /// @@ -8294,6 +8445,17 @@ fn bounded_fixed_count_commits_exactly_n_periods() { /// drive's every beat goes through `pass_priority_once_with_pipeline`, so CR 704.5a ("if a /// player has 0 or less life, that player loses the game") is applied INSIDE the drive. /// +/// # SCOPE — this row covers the TOTAL-WIPE arm ONLY (fix round 2, MED-1) +/// +/// bloodloop3 seats its two opponents at EQUAL life (17/17 at the offer beat, measured), so they +/// cross 0 on the SAME cycle, CR 104.2a crowns, and the drive takes `CycleOutcome::CrossLethal`. +/// The fixture is structurally incapable of a partial wipe: a symmetric fixture collapses every +/// partial case into a total case. The other arm — one seat crosses while ≥2 players survive, no +/// `GameOver`, `CycleOutcome::Abort`, full rollback of the crossing cycle — behaves DIFFERENTLY +/// and has its own row, [`bounded_fixed_drive_rolls_back_a_partial_crossing_cycle`], which +/// carries the arm-asymmetry table. Both arms are out of contract for any legitimately-derived +/// bound; each is reachable only under a doctored one. +/// /// # The MATCHED PAIR, on the same doctored offer /// /// * ⓐ `n = cycles_to_lethal - 1` — the drive runs to completion, every seat survives at @@ -8304,6 +8466,14 @@ fn bounded_fixed_count_commits_exactly_n_periods() { /// the loop until something dies — which is exactly what `c6d834040` did. ⓐ is what forces the /// stop point to be `n`-sensitive. /// +/// ⚠ ⓐ's DOCTORING IS A NO-OP ON THIS FIXTURE, and that is stated rather than dressed up (fix +/// round 2, LOW-1). bloodloop3's honest bound is 16 and `cycles_to_lethal - 1 = 17 - 1 = 16`, so +/// `schema.max_iterations = survivor_n` writes back the value already present — asserted below, +/// so a fixture drift cannot silently turn it into a real widening. ⓐ is therefore an +/// AT-THE-BOUND instance of [`bounded_fixed_count_commits_exactly_n_periods`], not an +/// independent stop-short observation. The pair's stop-short content rests entirely on ⓑ's +/// clause (b). +/// /// # What flips /// /// * delete the frame delimiter from `drive_one_shortcut_cycle` ⇒ arm ⓐ runs to lethal instead @@ -8373,6 +8543,15 @@ fn bounded_fixed_drive_stops_at_the_first_lethal_cycle() { let WaitingFor::LoopShortcut { schema, .. } = &mut survive.waiting_for else { unreachable!("bounded_offer_parts already matched the offer") }; + // The no-op recorded in this row's doc, pinned so it cannot drift unnoticed: on THIS + // fixture the honest bound already equals `cycles_to_lethal - 1`, so the line below + // rewrites the value in place. If a fixture change ever makes them differ, ⓐ becomes a + // genuine doctored widening and its doc must be re-derived rather than re-read. + assert_eq!( + schema.max_iterations, survivor_n, + "ⓐ's assignment is a NO-OP on this fixture (honest bound == cycles_to_lethal - 1); \ + a divergence means ⓐ is no longer an at-the-bound instance" + ); schema.max_iterations = survivor_n; r6a_declare_and_accept_all(&mut survive, proposer, survivor_n); assert_eq!( @@ -8422,13 +8601,22 @@ fn bounded_fixed_drive_stops_at_the_first_lethal_cycle() { .map(|p| p.id) .collect(); - // (c) EXACTLY the seats the partial drive lethals — never a full-`n` overshoot that takes + // (c) EXACTLY the seats the published period drains — never a full-`n` overshoot that takes // the proposer down too, and never a subset that leaves a drained seat alive. + // + // ⚠ THIS CLAIM IS PER-ARM (fix round 2, MED-1). It holds on the `CycleOutcome:: + // CrossLethal` arm, which is the only arm this symmetric fixture can reach: the crossing + // cycle COMMITS and the eliminated set is exactly the victims. On the `Abort` arm — one + // seat crosses while ≥2 survive — the eliminated set is EMPTY, and empty because the + // crossing cycle was rolled back whole, not because nobody crossed. Same surface + // reading, two different facts; conflating them is what let this doc ship a claim + // measurement contradicts. The Abort arm's own row is + // `bounded_fixed_drive_rolls_back_a_partial_crossing_cycle`. assert_eq!( eliminated, victims, - "CR 704.5a: the eliminated set is exactly the seats the published period drains; \ - lives {:?}", + "CR 704.5a: on the total-wipe (GameOver) arm the eliminated set is exactly the seats the \ + published period drains; lives {:?}", state.players.iter().map(|p| p.life).collect::>() ); @@ -8452,6 +8640,196 @@ fn bounded_fixed_drive_stops_at_the_first_lethal_cycle() { } } +/// FIX ROUND 2 (MED-1) — THE OTHER LETHAL ARM. A crossing that eliminates ONE seat while +/// **≥2 players survive** raises no `GameOver`, so the drive does not cross-lethal: it ABORTS, +/// the crossing cycle is rolled back whole, and every seat is still alive at handback. +/// +/// # The arm asymmetry, stated so a future drive learns it from the doc and not by accident +/// +/// | arm | trigger | outcome | +/// |---|---|---| +/// | **total wipe** | every remaining opponent crosses 0 on the SAME cycle ⇒ `WaitingFor::GameOver` | `CycleOutcome::CrossLethal` — the crossing cycle **COMMITS**, the game ends, `eliminated == victims` | +/// | **partial crossing** | one seat crosses 0 while ≥2 players survive ⇒ no `GameOver` | `CycleOutcome::Abort` — the crossing cycle is **ROLLED BACK WHOLE**, `eliminated == []` | +/// +/// Both arms are **out of contract for any legitimately-derived bound**. `elimination_bounds` +/// narrows to `min over living seats of (life - 1) / per-cycle loss` with FLOOR division, so +/// `n * loss <= life - 1` for every seat at every legal `n` and a within-bound drive can never +/// reach either arm. Each is therefore reachable only under a **doctored** bound — which is what +/// both this row and [`bounded_fixed_drive_stops_at_the_first_lethal_cycle`] construct. +/// +/// The `Abort` is the DESIGNED behaviour and this row asserts it rather than a wish: rolling the +/// out-of-contract cycle back whole and handing the table its priority beats materializing a +/// partial elimination whose remaining repetitions were bounded by a δ the board no longer moves +/// (the surviving seats' per-cycle drain changes the moment a drain target leaves the game). +/// See `materialize_fixed_shortcut`'s `CycleOutcome::Abort` arm. +/// +/// # Why this row had to exist separately — the fixture-symmetry trap +/// +/// [`bounded_fixed_drive_stops_at_the_first_lethal_cycle`] is the mirror for the same +/// stop-short property, but its bloodloop3 fixture seats **two opponents at equal life** (17/17, +/// measured), so they cross on the SAME cycle and it can only ever exhibit the total-wipe arm. +/// A symmetric fixture collapses every partial case into a total case; the partial arm — the one +/// real multiplayer boards take, since equal life totals are the exception — had no fixture at +/// all. This row's dina 4p dump is ASYMMETRIC by measurement (opponents at 35/31/36, all draining +/// 1 per period ⇒ first crossings 35/31/36), and the reach-guards below FAIL if that ever drifts +/// into symmetry, which is what stops this row from silently becoming a second copy of the mirror. +/// +/// # What is asserted, and what is deliberately NOT +/// +/// Every quantity is derived from the certificate the ENGINE published and the offer-beat board. +/// The row asserts the OBSERVABLE outcome: exactly `first_crossing - 1` periods committed, zero +/// eliminations, every seat above 0, handback to ordinary priority. +/// +/// It does NOT assert "the conformance check never fired", because a conformance drop at the same +/// cycle index and an `Abort` at that index leave IDENTICAL final states — both `break 'cycles` +/// onto the same rollback. That distinction was settled by a REVERT-PROBE instead: deleting the +/// conformance check from `materialize_fixed_shortcut` leaves this row GREEN and unchanged, so +/// the stop is the `Abort`, not the conformance drop. Asserting it from the state would have been +/// an unfalsifiable claim. +/// +/// # REVERT-PROBES +/// +/// * delete `|| frames_per_period.is_some_and(|k| frames_this_cycle >= k)` from +/// `drive_one_shortcut_cycle` ⇒ the dina drive commits ZERO (`Abort` at cycle 0) ⇒ the +/// committed-delta `assert_eq!` FAILS. +/// * MUST-NOT-FLIP: deleting the conformance check leaves this row green (measured) — it is the +/// `Abort` arm, not the conformance arm. +#[test] +fn bounded_fixed_drive_rolls_back_a_partial_crossing_cycle() { + let mut state = restore_dump(&gunzip_dump(include_bytes!( + "../fixtures/dina_conqueror_4p.json.gz" + ))); + drive_to_bounded_offer(&mut state, 400).expect("the bounded offer must fire on the 4p dump"); + + let (proposer, certificate, schema) = bounded_offer_parts(&state); + let per_cycle = certificate + .per_cycle + .clone() + .expect("a bounded offer publishes its per-period signature"); + let honest_bound = schema.max_iterations; + let lives_before: Vec<(PlayerId, i64)> = state + .players + .iter() + .map(|p| (p.id, p.life as i64)) + .collect(); + let loss = |seat: &PlayerId| -per_cycle.delta.life.get(seat).copied().unwrap_or(0); + + // `ceil(life / loss)` — the first cycle index at which each drained seat crosses 0. + let crossings: Vec<(PlayerId, i64)> = lives_before + .iter() + .filter(|(id, _)| loss(id) > 0) + .map(|(id, l0)| { + ( + *id, + l0.div_euclid(loss(id)) + i64::from(l0.rem_euclid(loss(id)) != 0), + ) + }) + .collect(); + assert!( + crossings.len() >= 2, + "REACH-GUARD: a PARTIAL wipe needs at least two drained seats, else 'one crosses while \ + others survive' is unconstructible; published δ {:?}", + per_cycle.delta.life + ); + let first_crossing = crossings + .iter() + .map(|(_, c)| *c) + .min() + .expect("at least two drained seats, asserted above"); + + // ── THE ASYMMETRY REACH-GUARD. This is the guard the mirror row could not have had. + let first_victims: Vec = crossings + .iter() + .filter(|(_, c)| *c == first_crossing) + .map(|(id, _)| *id) + .collect(); + assert_eq!( + first_victims.len(), + 1, + "REACH-GUARD: this row is about the PARTIAL arm, so exactly ONE seat may cross first. \ + Equal crossings would make the whole table die together, take `CycleOutcome::CrossLethal` \ + and silently re-test the mirror row's total-wipe arm instead; crossings {crossings:?}" + ); + let survivors = state.players.iter().filter(|p| !p.is_eliminated).count() - first_victims.len(); + assert!( + survivors >= 2, + "REACH-GUARD: with fewer than two survivors CR 104.2a crowns and `WaitingFor::GameOver` \ + routes the drive to the CrossLethal arm; got {survivors} survivors at the first crossing" + ); + + // The honest bound is exactly one period short of that crossing — the CR 704.5a headroom + // term (`life - 1`) with floor division. Asserted, not assumed: it is what makes the + // doctoring below a REAL widening rather than a re-write of the value already present. + assert_eq!( + i64::from(honest_bound), + first_crossing - 1, + "`elimination_bounds` reserves one point of headroom, so the honest bound sits one \ + period below the first crossing; bound {honest_bound}, crossings {crossings:?}" + ); + + // Three doctored bounds: at the crossing, and comfortably past it. All three must stop at + // the same place — a drive that stopped `n`-relative rather than at the boundary would not. + for over in [0u32, 3, 9] { + let mut doctored = state.clone(); + let n = u32::try_from(first_crossing).expect("fits") + over; + let WaitingFor::LoopShortcut { schema, .. } = &mut doctored.waiting_for else { + unreachable!("bounded_offer_parts already matched the offer") + }; + schema.max_iterations = n; + + r6a_declare_and_accept_all(&mut doctored, proposer, n); + + // (a) NOBODY is eliminated — by ROLLBACK, not because nobody crossed. `n >= first + // crossing` means the arithmetic says a seat must die; the drive refuses the cycle. + assert_eq!( + doctored + .players + .iter() + .filter(|p| p.is_eliminated) + .map(|p| p.id) + .collect::>(), + Vec::::new(), + "n={n}: the crossing cycle is rolled back whole, so the eliminated set is EMPTY — \ + which is a different fact from 'nobody crossed'; lives {:?}", + doctored.players.iter().map(|p| p.life).collect::>() + ); + assert!( + doctored.players.iter().all(|p| p.life > 0), + "n={n}: every seat is above the CR 704.5a threshold; lives {:?}", + doctored.players.iter().map(|p| p.life).collect::>() + ); + + // (b) EXACTLY `first_crossing - 1` periods committed: every cycle before the crossing + // one, and none of it. Derived from the published δ, never from a literal. + for (seat, l0) in &lives_before { + let committed = l0 + - doctored + .players + .iter() + .find(|p| p.id == *seat) + .unwrap() + .life as i64; + assert_eq!( + committed, + (first_crossing - 1) * -per_cycle.delta.life.get(seat).copied().unwrap_or(0), + "n={n} {seat:?}: the drive commits every period up to the crossing cycle and \ + rolls that one back; lives {:?}", + doctored.players.iter().map(|p| p.life).collect::>() + ); + } + + // (c) NOT the CrossLethal arm. `GameOver` here would mean the partial crossing crowned + // someone, which is the confusion this row exists to keep separate. + assert_eq!( + doctored.waiting_for, + WaitingFor::Priority { player: proposer }, + "n={n}: CR 104.2a — a player wins only once ALL their opponents have left, and this \ + crossing eliminates at most one of three, so there is no winner to crown and the \ + aborted drive hands back ordinary priority rather than ending the game" + ); + } +} + /// FIX ROUND 1 (HIGH-3) — the conformance check `PeriodicDelta`'s doc has always specified /// ("so a bounded drive can check that each committed cycle actually conformed") and which /// nothing implemented. A committed cycle whose measured resource delta differs from the From ea6a90bc22d66932a3aa145ab0d3f178cecbe665 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Tue, 28 Jul 2026 14:29:17 -0500 Subject: [PATCH 06/62] docs(engine): the aborted cycle rolls back alone, not the whole drive MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Doc-only. Corrects the arm-asymmetry wording introduced in the previous commit, which read as if a partial crossing discarded the entire drive. It does not: `materialize_fixed_shortcut`'s `break 'cycles` falls through to `*state = committed`, the last WHOLE cycle — so the out-of-contract cycle is refused atomically while every prior conforming cycle stays committed. The measured shape already said so (dina 4p, honest bound 30: a doctored `n` at or past the first crossing commits 30 periods and refuses the 31st), and the row's assertions were already bound to `first_crossing - 1` rather than to zero. total wipe every remaining opponent crosses 0 on the same cycle => WaitingFor::GameOver => CycleOutcome::CrossLethal: the crossing cycle COMMITS, the game ends partial crossing one seat crosses 0 while >= 2 players survive => no GameOver => CycleOutcome::Abort: the crossing cycle rolls back WHOLE; prior conforming cycles STAY COMMITTED; priority handback The property this buys is named where it is implemented: no half-applied period, ever — refuse the out-of-contract cycle atomically, keep the conforming prefix. The per-arm eliminated-set split is unchanged and stays two distinct facts: on the GameOver arm the eliminated set is exactly the victims; on the Abort arm it is empty because the crossing cycle was refused, not because nobody crossed. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/game/engine.rs | 16 ++++++---- .../engine/tests/integration/loop_shortcut.rs | 29 ++++++++++++------- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index 63c1bd2a95..e79c5afabf 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -2507,12 +2507,16 @@ fn materialize_fixed_shortcut( // COMMITS and the game ends. A cycle that takes ONE seat to 0 while >= 2 players // survive raises no `GameOver` (CR 104.2a crowns nobody), the loop's shape changes // under it as the drained seat leaves, no settle beat recurs, and it arrives HERE — - // rolled back whole, `eliminated` empty, priority handed back. Both are out of - // contract for a legitimately-derived bound (`elimination_bounds` reserves - // `life - 1` of CR 704.5a headroom, so a within-bound count crosses no threshold), - // so either arm means the published bound was wrong. Rolling the out-of-contract - // cycle back is deliberate: the remaining repetitions were bounded by a delta the - // board stops moving the moment a drain target leaves the game. Rows: + // THAT CYCLE rolls back whole while every PRIOR conforming cycle stays committed, + // `eliminated` is empty, priority is handed back. (It is not a whole-drive rollback: + // the `break` below falls through to `*state = committed`, which is the last WHOLE + // cycle, not the offer state.) Both are out of contract for a legitimately-derived + // bound (`elimination_bounds` reserves `life - 1` of CR 704.5a headroom, so a + // within-bound count crosses no threshold), so either arm means the published bound + // was wrong. The atomic per-cycle refusal is the designed property — NO HALF-APPLIED + // PERIOD, EVER — and it is why the out-of-contract cycle is dropped rather than + // materialized: its remaining repetitions were bounded by a delta the board stops + // moving the moment a drain target leaves the game. Rows: // `bounded_fixed_drive_stops_at_the_first_lethal_cycle` (total wipe) and // `bounded_fixed_drive_rolls_back_a_partial_crossing_cycle` (partial). CycleOutcome::Abort => break 'cycles, diff --git a/crates/engine/tests/integration/loop_shortcut.rs b/crates/engine/tests/integration/loop_shortcut.rs index b9529aab1e..69a8d52ebd 100644 --- a/crates/engine/tests/integration/loop_shortcut.rs +++ b/crates/engine/tests/integration/loop_shortcut.rs @@ -8451,7 +8451,8 @@ fn basis_a_bounded_fixed_count_commits_exactly_n_periods() { /// cross 0 on the SAME cycle, CR 104.2a crowns, and the drive takes `CycleOutcome::CrossLethal`. /// The fixture is structurally incapable of a partial wipe: a symmetric fixture collapses every /// partial case into a total case. The other arm — one seat crosses while ≥2 players survive, no -/// `GameOver`, `CycleOutcome::Abort`, full rollback of the crossing cycle — behaves DIFFERENTLY +/// `GameOver`, `CycleOutcome::Abort`, the crossing cycle rolling back whole while prior +/// conforming cycles stay committed — behaves DIFFERENTLY /// and has its own row, [`bounded_fixed_drive_rolls_back_a_partial_crossing_cycle`], which /// carries the arm-asymmetry table. Both arms are out of contract for any legitimately-derived /// bound; each is reachable only under a doctored one. @@ -8641,15 +8642,16 @@ fn bounded_fixed_drive_stops_at_the_first_lethal_cycle() { } /// FIX ROUND 2 (MED-1) — THE OTHER LETHAL ARM. A crossing that eliminates ONE seat while -/// **≥2 players survive** raises no `GameOver`, so the drive does not cross-lethal: it ABORTS, -/// the crossing cycle is rolled back whole, and every seat is still alive at handback. +/// **≥2 players survive** raises no `GameOver`, so the drive does not cross-lethal: it ABORTS. +/// The crossing cycle rolls back whole, the cycles before it stay committed, and every seat is +/// still alive at handback. /// /// # The arm asymmetry, stated so a future drive learns it from the doc and not by accident /// /// | arm | trigger | outcome | /// |---|---|---| -/// | **total wipe** | every remaining opponent crosses 0 on the SAME cycle ⇒ `WaitingFor::GameOver` | `CycleOutcome::CrossLethal` — the crossing cycle **COMMITS**, the game ends, `eliminated == victims` | -/// | **partial crossing** | one seat crosses 0 while ≥2 players survive ⇒ no `GameOver` | `CycleOutcome::Abort` — the crossing cycle is **ROLLED BACK WHOLE**, `eliminated == []` | +/// | **total wipe** | every remaining opponent crosses 0 on the same cycle ⇒ `WaitingFor::GameOver` | `CycleOutcome::CrossLethal` — **the crossing cycle COMMITS**, the game ends | +/// | **partial crossing** | one seat crosses 0 while **≥2** players survive ⇒ no `GameOver` | `CycleOutcome::Abort` — **the crossing cycle rolls back WHOLE; prior conforming cycles STAY COMMITTED**; priority handback | /// /// Both arms are **out of contract for any legitimately-derived bound**. `elimination_bounds` /// narrows to `min over living seats of (life - 1) / per-cycle loss` with FLOOR division, so @@ -8657,11 +8659,18 @@ fn bounded_fixed_drive_stops_at_the_first_lethal_cycle() { /// reach either arm. Each is therefore reachable only under a **doctored** bound — which is what /// both this row and [`bounded_fixed_drive_stops_at_the_first_lethal_cycle`] construct. /// -/// The `Abort` is the DESIGNED behaviour and this row asserts it rather than a wish: rolling the -/// out-of-contract cycle back whole and handing the table its priority beats materializing a -/// partial elimination whose remaining repetitions were bounded by a δ the board no longer moves -/// (the surviving seats' per-cycle drain changes the moment a drain target leaves the game). -/// See `materialize_fixed_shortcut`'s `CycleOutcome::Abort` arm. +/// The `Abort` is the DESIGNED behaviour and this row asserts it rather than a wish. The property +/// it buys is **no half-applied period, ever**: the out-of-contract cycle is refused ATOMICALLY, +/// while conforming work already done is NOT discarded. That is strictly better than a +/// whole-drive rollback — materializing a partial elimination would leave the remaining +/// repetitions bounded by a δ the board stops moving (the surviving seats' per-cycle drain +/// changes the moment a drain target leaves the game), and discarding the conforming prefix +/// would throw away cycles the table's own agreed bound covers. See +/// `materialize_fixed_shortcut`'s `CycleOutcome::Abort` arm. +/// +/// MEASURED SHAPE of that split on this fixture: honest bound 30, doctored `n` at or past the +/// first crossing (31) ⇒ **30 periods committed**, cycle 30 refused, nobody eliminated. The +/// assertions below bind to exactly that: `first_crossing - 1` periods, not zero and not `n`. /// /// # Why this row had to exist separately — the fixture-symmetry trap /// From b37dd6eb4016e574502d46e437eed95f399bdeba Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Tue, 28 Jul 2026 15:03:57 -0500 Subject: [PATCH 07/62] docs(engine): correct four doc-accuracy claims and re-cite CR 101.2 in the bounded-offer rows Fix round 3 of the combo-detector player-feedback review loop. Doc-only: zero production or test-behaviour change; all five findings were LOW. - LOW-1: the flip-count sentence mixed epochs (numerator pre-commit, denominator post-commit). Now states 1-of-83 as measured on the pre-row tree and 2-of-85 on this one, with the runner and filter named. - LOW-2: CR 119.8 governs life exchanges, redistribution, and pay-life costs -- not a "Your life total can't change." override. Re-cited to CR 101.2, which is the engine's own convention and what the sibling fixture doc already names. - LOW-3: a bare "(4167)" suite count with no runner and no filter is deleted rather than re-dressed, mirroring the same removal in the unit module's doc. Swept both files; it was the last one. - LOW-4: the basis-A drive row now scopes itself as synthetic-fixture-only -- every real 4p dump in the file certifies on basis B. - LOW-5: "basis A refuses a mill ring outright" rested on evidence measuring only the equal disjunct. Measured the cover disjunct too: cover == false at all three ring indices, so the claim holds -- and the probe corrects the reason at the oldest frame, which is board-EQUAL and refused by net_progress_for instead. Verified: cargo fmt --all; cargo clippy --all-targets -- -D warnings (exit 0); cargo test -p engine --lib -- game::engine::bounded_offer_conjunct_tests:: (4 passed / 0 failed, 17870 filtered out); cargo test -p engine --test integration -- loop_shortcut:: (85 passed / 0 failed, 4090 filtered out). Assisted-by: ClaudeCode:claude-opus-4.8 --- crates/engine/src/game/engine.rs | 25 +++++++++++-- .../engine/tests/integration/loop_shortcut.rs | 37 +++++++++++++++---- 2 files changed, 51 insertions(+), 11 deletions(-) diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index e79c5afabf..d57c2f8d12 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -13705,10 +13705,27 @@ mod bounded_offer_conjunct_tests { /// assert exactly that, so the guard is provably reached rather than assumed to be). /// /// The fixture is a [`drain_ring`], NOT a [`mill_ring`], and the difference is load-bearing: - /// library size is BOARD, so a mill ring's frames are board-unequal, basis A refuses them - /// outright and every mill-ring row in this module is really exercising basis B. A guard - /// inside the basis-A walk is unreachable from that fixture. (Measured: the board-equality - /// reach-guard below FAILS on `mill_ring(P1, 3)`.) + /// library size is BOARD, so basis A certifies NOTHING on a mill ring, every mill-ring row in + /// this module is really exercising basis B, and a guard inside the basis-A walk is + /// unreachable from that fixture. + /// + /// ⚠ Basis A is a DISJUNCTION, and the board-equality reach-guard below — which does FAIL on + /// `mill_ring(P1, 3)` — measures only its FIRST half. Fix round 3 (LOW-5) MEASURED the second, + /// `loop_states_cover_modulo_growth_pinned`, rather than leaving the wider claim resting on + /// the narrower evidence: a probe evaluating both disjuncts plus `net_progress_for` at every + /// `(prior, live)` pair of `mill_ring(P1, 3)` (temporary `#[test]` in this module, run with + /// `cargo test -p engine --lib -- game::engine::bounded_offer_conjunct_tests:: --nocapture`, + /// then reverted) reports `cover = false` at ALL THREE ring indices. Both halves refuse, so + /// the conclusion holds. + /// + /// The probe also corrects the REASON at one index, which the board-inequality phrasing had + /// wrong: `mill_ring`'s OLDEST frame pops zero cards, so it IS board-equal to the live state + /// (`span = 2`, `eq = true`) and is refused by `net_progress_for` on its zero δ, not by board + /// inequality. Newest-first, the `.rev()` walk therefore refuses `span = 0` at `span >= 1`, + /// `span = 1` on `eq`/`cover` both false, and `span = 2` on net progress. (`drain_ring(P1, 3)` + /// under the same probe: `eq = true` and `net = true` at every index, `cover = false` + /// throughout — so it certifies through the FIRST disjunct at `span = 1`, which is the pair + /// this row's guard is about.) /// /// A published `frames_per_period: 0` would mean "one repetition spans no retained frames", /// which `drive_one_shortcut_cycle`'s delimiter cannot honour — `frames_this_cycle >= 0` diff --git a/crates/engine/tests/integration/loop_shortcut.rs b/crates/engine/tests/integration/loop_shortcut.rs index 69a8d52ebd..2d6f979890 100644 --- a/crates/engine/tests/integration/loop_shortcut.rs +++ b/crates/engine/tests/integration/loop_shortcut.rs @@ -8300,8 +8300,15 @@ fn bounded_fixed_count_commits_exactly_n_periods() { /// Basis B derives it from `ring_delta_signature` (the ring window's own period `k`); basis A /// derives it from the certifying prior's ring index. Fix round 1 changed ONLY the basis-A /// producer — a hardcoded `1` became the measured span — and MEASURED, reverting that hardcode -/// flips exactly one row of the 85 in this file's `loop_shortcut::` module: -/// [`interactive_3p_subset_lethal_does_not_crown`]. That row asserts the PUBLISHED VALUE and +/// flips exactly one of the **83** rows that existed in this file's `loop_shortcut::` module +/// BEFORE this row: [`interactive_3p_subset_lethal_does_not_crown`]. ⚠ On THIS tree the count is +/// **2 of 85** — the second being this row, by design (its probe ⓐ below IS that revert). Fix +/// round 3 (LOW-1) corrected the earlier wording "one row of the 85", which took its numerator +/// from the pre-commit tree and its denominator from the post-commit one — two epochs in one +/// sentence. Runner and filter for the flip claim: +/// `cargo test -p engine --test integration -- loop_shortcut::` (module filter on the +/// `integration` binary); the 83 / 85 are `#[test]` attributes in this file at `bc20d4ff4` and +/// `e3c76d1e8` respectively. That row asserts the PUBLISHED VALUE and /// nothing else; it never declares a count, so nothing in the tree observed what a basis-A /// offer's drive actually commits. The claim "under the hardcode that fixture's accepted drive /// committed nothing at all" was true and untracked. This row tracks it. @@ -8314,12 +8321,24 @@ fn bounded_fixed_count_commits_exactly_n_periods() { /// asserted below as a reach-guard). A fixture with `k == 1` could not tell a drive that reads /// the VALUE from one that reads any positive constant. /// +/// ⚠ SCOPE (fix round 3, LOW-4): this coverage is **synthetic-only**. All three basis-A rows in +/// this file are `GameScenario` builds; **no real dump certifies on basis A** — the file's real +/// 4p dumps are basis B, `dina_untargeted_drain_4p_offers_at_three_live_opponents` measured so +/// two ways in its own doc. This repo's standing lesson is real-dump-over-synthetic, so the row +/// says which it is rather than letting a reader take it for real-game evidence. Building a real +/// basis-A dump is its own round, not this one. +/// /// # MEASURED, through the production accept path (`apply` → declare → APNAP accepts) /// /// derived `k = 2` ⇒ `n=1` commits `{P0:+1, P1:-1, P2:0}`, `n=2` `{+2,-2,0}`, `n=3` `{+3,-3,0}` -/// — exactly `n × δ`. P2 is the CR 119.8 life-loss-immune bystander and is untouched at every -/// `n`, which is the multiplayer half: one cycle charges the seats the certificate names and -/// only those. +/// — exactly `n × δ`. P2 is the life-loss-immune bystander and is untouched at every `n`, which +/// is the multiplayer half: one cycle charges the seats the certificate names and only those. +/// The governing rule is **CR 101.2** — `LIFE_LOSS_IMMUNE` is "Your life total can't change.", +/// a "can't" effect, which takes precedence over the trigger's life-loss instruction. (Fix +/// round 3, LOW-2: this line cited CR 119.8, which governs life EXCHANGES, life REDISTRIBUTION, +/// and pay-life COSTS — none of which happens here. `setup_3p_bystander_winner` above already +/// names 101.2 as governing, with 119.8 only as a `cf.`, and 101.2 is the engine's own +/// convention for "can't" overrides.) /// /// # REVERT-PROBES — both RUN, and the second one does NOT flip /// @@ -8928,8 +8947,12 @@ fn a_cycle_that_does_not_match_the_published_period_is_dropped() { /// FIX ROUND 1 (MED-4) — the AI's bounded-declare candidate is GENERATED, LEGAL, and DRIVES. /// /// The `if schema.points.is_empty() && schema.is_bounded()` block in -/// `ai_support::candidates` shipped with zero coverage: deleting it left the engine suite -/// (4167) and every `phase-ai` suite green. Its sibling one screen away +/// `ai_support::candidates` shipped with zero coverage: deleting it left the engine suite and +/// every `phase-ai` suite green. (Fix round 3, LOW-3: a bare "(4167)" stood here with neither a +/// runner nor a filter recorded beside it, so it named a shape nobody could reproduce; it is +/// deleted rather than re-dressed, exactly as the same count was at +/// `bounded_offer_conjunct_tests`' module doc. The reproducible claim is this row's own +/// REVERT-PROBE line below.) Its sibling one screen away /// (`ai_collapse_candidate_is_clamped_to_the_accepted_bound`) sets the standard this row /// mirrors — generate the candidate through the production generator, then `apply()` it. /// From 8ef5fc88440770bfe1755143686d5d8ffdb4dee0 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Tue, 28 Jul 2026 16:01:15 -0500 Subject: [PATCH 08/62] docs(engine): fix the CLAIM, not the site -- four sibling doc corrections Fix round 4 of the combo-detector player-feedback review loop. Doc-only: zero non-comment lines on either side of the diff; all four findings were LOW. Every one was a SIBLING SITE that round 3's fix did not reach, or self-contamination that round 3's fix introduced. - LOW-1: drain_ring's doc -- the DEFINITIONAL site a reader reaches first -- still carried the blanket "a mill ring's frames are board-UNEQUAL" that round 3 corrected 160 lines later. Now states the per-index truth: board-unequal at every index EXCEPT the oldest, which pops zero cards, is board-EQUAL, and is refused by net_progress_for on its zero delta. The conclusion (basis A certifies nothing on a mill ring) is unchanged and still measured. - LOW-2: "this is the only row that detects a back-door deletion of basis B" was measurably false and licensed exactly the overread the round-3 SCOPE note exists to prevent, from 870 lines earlier. Re-measured with the file's own prescribed attribution probe (ring_delta_signature -> None unconditionally), runner cargo test -p engine --test integration -- loop_shortcut:: : 74 passed / 11 failed / 4090 filtered, against a clean 85 passed / 0 failed. ELEVEN rows flip; all ten others are now named so the claim is checkable. - LOW-3: the file named three rules for one const -- CR 101.2 twice and a governing CR 119.8 once. The outlier survived the round that fixed its twin. Both life-loss-immune fixture docs now read "CR 101.2 ... cf. CR 119.8, which governs only life EXCHANGES, REDISTRIBUTION and pay-life COSTS". Swept both files: no governing 119.8 remains. - LOW-4: round 3's own correction became the file's first in-comment test attribute, so its stated counting recipe (grep the attribute over this file) returned 86 while the runner reported 85 -- the fix for a counting error broke the count by containing the thing being counted. The denominator is now anchored to the runner, which is where the number came from, and the quoted literal is gone (grep and runner agree at 85 again). Verified on the frozen final tree: cargo fmt --all; cargo clippy --all-targets -- -D warnings (exit 0, zero warnings) -- the gate the round-4 reviewer honestly did not run; cargo test -p engine --test integration -- loop_shortcut:: (85 passed / 0 failed, 4090 filtered out). Attribution probe reverted byte-identically (md5 match) before any edit landed. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/game/engine.rs | 15 ++++-- .../engine/tests/integration/loop_shortcut.rs | 51 ++++++++++++++++--- 2 files changed, 57 insertions(+), 9 deletions(-) diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index d57c2f8d12..2b4eb2eaf7 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -13556,9 +13556,18 @@ mod bounded_offer_conjunct_tests { /// /// The counterpart to [`mill_ring`], and the difference is exactly the one basis A turns on: /// library size is BOARD (`loop_states_equal_modulo_resources` compares it), while life is a - /// PROJECTED resource (`project_out_resources` removes it). So a mill ring's frames are - /// board-UNEQUAL and can only certify through basis B's `ring_delta_signature`, whereas a - /// drain ring's frames are board-EQUAL and certify through basis A's first disjunct. + /// PROJECTED resource (`project_out_resources` removes it). So a mill ring can only certify + /// through basis B's `ring_delta_signature`, whereas a drain ring's frames are board-EQUAL + /// at every index and certify through basis A's first disjunct. + /// + /// ⚠ The REASON basis A refuses a mill ring is not uniform across the ring, and an earlier + /// revision of this doc claimed it was ("a mill ring's frames are board-UNEQUAL"). MEASURED + /// in fix round 3 (LOW-5) and recorded at + /// [`a_zero_span_certifying_pair_never_publishes_a_zero_width_period`]: `mill_ring`'s frames + /// are board-unequal at every index EXCEPT the OLDEST, which pops zero cards and IS + /// board-equal (`span = 2`, `eq = true`) — that one is refused by `net_progress_for` on its + /// zero δ instead. Basis A still certifies nothing on a mill ring; only the per-index reason + /// differs. /// /// Frame `i` sits `frames - i` life ABOVE the live state, so the newest frame is exactly one /// period ahead of it and every older frame one more — i.e. the live state is the far end of diff --git a/crates/engine/tests/integration/loop_shortcut.rs b/crates/engine/tests/integration/loop_shortcut.rs index 2d6f979890..6fb162c4ff 100644 --- a/crates/engine/tests/integration/loop_shortcut.rs +++ b/crates/engine/tests/integration/loop_shortcut.rs @@ -189,7 +189,9 @@ fn setup_3p_draw(mode: LoopDetectionMode) -> (GameRunner, ObjectId) { /// 3-player SUBSET-LETHAL loop: the SAME proven-detected constant-depth mutual drain as /// `setup_2p_drain` (P0's `DRAIN_CLERIC` + `BLOOD_SIPPER`), embedded in a 3p pod where P2 is -/// IMMUNE to life loss (CR 119.8 "you can't lose life"). So the cycle drains ONLY P1 (sole +/// IMMUNE to life loss (CR 101.2 — a "can't" effect takes precedence over the trigger's +/// life-loss instruction; cf. CR 119.8, which governs only life EXCHANGES, life +/// REDISTRIBUTION and pay-life COSTS, none of which happens here). So the cycle drains ONLY P1 (sole /// faller); P2 is a bystander with per-cycle life delta 0 (a second non-faller). Living /// partition each cycle: fallers = {P1}, non-fallers = {P0, P2} — so `live_mandatory_loop_winner` /// refuses to name a winner (CR 104.2a). P1 starts very high so it never dies inside the drive @@ -219,7 +221,8 @@ fn setup_3p_subset_lethal(mode: LoopDetectionMode) -> (GameRunner, ObjectId) { /// (EQUAL — required by `live_mandatory_loop_winner`'s CR 704.3 simultaneity floor: fallers die in /// ONE SBA event, so unequal lives are not a determinate single-winner shape), P2 = 0 /// (life-loss-immune: CR 101.2 — a "can't" effect takes precedence over the trigger's life-loss -/// instruction; cf. CR 119.8 for the same const elsewhere in this file). Living partition each +/// instruction; cf. CR 119.8, which governs only life EXCHANGES, life REDISTRIBUTION and +/// pay-life COSTS, none of which happens here). Living partition each /// cycle: fallers = {P0, P1}, nonfallers = {P2} ⇒ len == 1 ⇒ the engine NATURALLY latches /// `predicted_winner = Some(P2)` — a winner who controls no loop enabler and is not the proposer. /// No injection. @@ -7450,8 +7453,35 @@ fn drive_scenario_to_bounded_offer(runner: &mut GameRunner, cap: usize) -> Optio /// PR-7 Phase 5b — THE BASIS-B POSITIVE CONTROL, at the offer level. /// -/// This is the row that detects a back-door deletion of certification basis B, and it is the -/// only one that does: every other bounded-offer row in this file certifies on basis A. +/// This is the row whose WHOLE PURPOSE is detecting a back-door deletion of certification +/// basis B. It is **not** the only row that detects one — an earlier revision of this doc said +/// it was ("every other bounded-offer row in this file certifies on basis A") and that was +/// MEASURABLY FALSE, and it licenses exactly the overread that the ⚠ SCOPE note on +/// [`basis_a_bounded_fixed_count_commits_exactly_n_periods`] exists to prevent — which a reader +/// reaches much later in this file than this sentence. +/// +/// RE-MEASURED in fix round 4 at `025015135`, using this file's own prescribed attribution +/// probe (force `ring_delta_signature` to return `None` unconditionally — basis-B rows lose +/// their offer, basis-A rows keep it), runner +/// `cargo test -p engine --test integration -- loop_shortcut::` (module filter on the +/// `integration` binary): **74 passed / 11 failed / 4090 filtered out**, against a clean +/// **85 passed / 0 failed / 4090 filtered out**. ELEVEN rows flip. This one, plus these ten: +/// `dina_untargeted_drain_4p_offers_at_three_live_opponents` (the real 4p dump), +/// `bloodloop_mandatory_draw_cascade_offers_at_2p_3p_and_4p`, +/// `ai_bounded_declare_candidate_is_generated_legal_and_drives`, +/// `bounded_fixed_count_commits_exactly_n_periods`, +/// `bounded_fixed_drive_stops_at_the_first_lethal_cycle`, +/// `bounded_fixed_drive_rolls_back_a_partial_crossing_cycle`, +/// `a_cycle_that_does_not_match_the_published_period_is_dropped`, +/// `declared_count_above_the_offered_bound_is_handed_back`, +/// `until_lethal_against_a_bounded_offer_is_rejected`, +/// `a_nonempty_action_sequence_mints_no_bounded_offer`. +/// +/// What is distinctive here is INTENT and DIAGNOSIS, not exclusivity: each of those ten fails +/// for a reason its own doc does not name, whereas this row says so in the failure text +/// ("A failure here means basis B minted nothing"). Nor is the list a basis census: it is the +/// set of rows that cannot reach their assertions once basis B stops minting, which includes +/// rows whose subject is the DRIVE rather than the basis. /// /// FIXTURE — a fully mandatory two-card draw↔drain cascade. What it shares with the class /// basis B exists for is the one property that matters: **it draws a card every cycle**, so a @@ -8307,8 +8337,17 @@ fn bounded_fixed_count_commits_exactly_n_periods() { /// from the pre-commit tree and its denominator from the post-commit one — two epochs in one /// sentence. Runner and filter for the flip claim: /// `cargo test -p engine --test integration -- loop_shortcut::` (module filter on the -/// `integration` binary); the 83 / 85 are `#[test]` attributes in this file at `bc20d4ff4` and -/// `e3c76d1e8` respectively. That row asserts the PUBLISHED VALUE and +/// `integration` binary) — and that runner is also the AUTHORITY for the denominator: it +/// reports **85 passed / 0 failed / 4090 filtered out** on this tree, re-run in fix round 4 at +/// `025015135`. The 83 is the same module at `bc20d4ff4`. +/// +/// ⚠ The denominator is anchored to the RUNNER and not, as fix round 3 wrote it, to a grep of +/// the test-attribute literal over this file (fix round 4, LOW-4). That grep is contaminable by +/// this very doc: round 3's own correction quoted the literal inside this comment, so at +/// `025015135` the grep returned **86** while the runner still reported 85, and a reader +/// applying the stated method would have concluded the doc was stale. This round dropped the +/// quoted literal, so the two agree again — but the runner counts ROWS and the grep counts +/// MENTIONS, and only one of those is what "of 85" means. That row asserts the PUBLISHED VALUE and /// nothing else; it never declares a count, so nothing in the tree observed what a basis-A /// offer's drive actually commits. The claim "under the hardcode that fixture's accepted drive /// committed nothing at all" was true and untracked. This row tracks it. From ebccdd751e4e5a4bf8d5437a8d551e29cb53dbf0 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Tue, 28 Jul 2026 16:31:32 -0500 Subject: [PATCH 09/62] docs(engine): scope two universals in the basis-B control's doc to their measured sets Fix round 5 of the combo-detector player-feedback review loop. Doc-only: 26 added and 4 removed lines, all `///`; zero non-comment lines on either side. Both LOW findings were universal quantifiers that had never been checked against the set they quantify over -- one of them introduced by round 4's own replacement sentence. - LOW-1: "each of those ten fails for a reason its own doc does not name" is false for the first row it names. Now NINE of ten, with dina called out as the exception: its CERTIFICATION BASIS note already documents this very probe as measurement (ii), down to the 400-beat cap and the `expect` firing. Measured by scanning all ten doc blocks for `ring_delta_signature`/`basis B` (dina 6 hits, the other nine 0), plus a second pass for probe-adjacent wording. - LOW-2: annotating dina alone as "(the real 4p dump)" implied an exclusivity it does not have, and contradicted the plural "the file's real 4p dumps" 900 lines later. Dropped, and replaced by the measured split over the whole set: SIX of the eleven load the real dina_conqueror_4p capture, five are GameScenario builds, and bounded_fixed_count_commits_exactly_n_periods is the one MIXED row. Classified by resolving every fixture-loading call site to its enclosing test fn. The count basis is stated in the doc as call-site resolution, NOT grep hit count, because these sentences themselves add doc-comment hits for the names they list -- the self-contamination class this lane earned in round 4. Both measurement methods were re-run after the edit and returned the same numbers. Verification: cargo clippy --all-targets -- -D warnings, exit 0, zero warning or error lines. cargo fmt --all clean. Assisted-by: ClaudeCode:claude-opus-5 --- .../engine/tests/integration/loop_shortcut.rs | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/crates/engine/tests/integration/loop_shortcut.rs b/crates/engine/tests/integration/loop_shortcut.rs index 6fb162c4ff..31fa159b53 100644 --- a/crates/engine/tests/integration/loop_shortcut.rs +++ b/crates/engine/tests/integration/loop_shortcut.rs @@ -7466,7 +7466,7 @@ fn drive_scenario_to_bounded_offer(runner: &mut GameRunner, cap: usize) -> Optio /// `cargo test -p engine --test integration -- loop_shortcut::` (module filter on the /// `integration` binary): **74 passed / 11 failed / 4090 filtered out**, against a clean /// **85 passed / 0 failed / 4090 filtered out**. ELEVEN rows flip. This one, plus these ten: -/// `dina_untargeted_drain_4p_offers_at_three_live_opponents` (the real 4p dump), +/// `dina_untargeted_drain_4p_offers_at_three_live_opponents`, /// `bloodloop_mandatory_draw_cascade_offers_at_2p_3p_and_4p`, /// `ai_bounded_declare_candidate_is_generated_legal_and_drives`, /// `bounded_fixed_count_commits_exactly_n_periods`, @@ -7477,9 +7477,31 @@ fn drive_scenario_to_bounded_offer(runner: &mut GameRunner, cap: usize) -> Optio /// `until_lethal_against_a_bounded_offer_is_rejected`, /// `a_nonempty_action_sequence_mints_no_bounded_offer`. /// -/// What is distinctive here is INTENT and DIAGNOSIS, not exclusivity: each of those ten fails -/// for a reason its own doc does not name, whereas this row says so in the failure text -/// ("A failure here means basis B minted nothing"). Nor is the list a basis census: it is the +/// FIXTURE PROVENANCE of those eleven, RE-COUNTED in fix round 5 over the whole set rather +/// than asserted of one row (an earlier revision annotated dina alone as "the real 4p dump", +/// which reads as an exclusivity it does not have). SIX load the real `dina_conqueror_4p` +/// 4-player capture from `tests/fixtures`, through the same gunzip → restore loader: +/// `dina_untargeted_drain_4p_offers_at_three_live_opponents`, +/// `a_nonempty_action_sequence_mints_no_bounded_offer`, +/// `declared_count_above_the_offered_bound_is_handed_back`, +/// `until_lethal_against_a_bounded_offer_is_rejected`, +/// `bounded_fixed_count_commits_exactly_n_periods` (which loops that dump AND two +/// `bloodloop_state` boards, so it is the one MIXED row), and +/// `bounded_fixed_drive_rolls_back_a_partial_crossing_cycle`. The remaining five are +/// `GameScenario` builds only — this row inline, the other four via `bloodloop_state`. Counted +/// by resolving every fixture-loading call site in this file to its enclosing test fn, NOT by +/// grep hit count: these very sentences add doc-comment hits for the names they list. +/// Consistent with the plural "the file's real 4p dumps" at the ⚠ SCOPE note on +/// [`basis_a_bounded_fixed_count_commits_exactly_n_periods`]. +/// +/// What is distinctive here is INTENT and DIAGNOSIS, not exclusivity: NINE of those ten fail +/// for a reason their own docs do not name, whereas this row says so in the failure text +/// ("A failure here means basis B minted nothing"). The tenth, +/// `dina_untargeted_drain_4p_offers_at_three_live_opponents`, is the EXCEPTION and was +/// mis-covered by an earlier "each of those ten" — its ⚠ CERTIFICATION BASIS note documents +/// this very probe as measurement (ii), down to the drive running its full 400-beat cap and +/// its `expect` firing. Checked against all ten doc blocks in fix round 5: no other one +/// mentions `ring_delta_signature` or basis B at all. Nor is the list a basis census: it is the /// set of rows that cannot reach their assertions once basis B stops minting, which includes /// rows whose subject is the DRIVE rather than the basis. /// From c2029bb6d8ec62c40fc80ff323c3a6e8b98b35ec Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Thu, 30 Jul 2026 08:22:25 -0500 Subject: [PATCH 10/62] docs(engine): point our repro commands at the renamed phase-engine package Upstream 2b204dff5 (#6739) renamed the engine package to phase-engine, so the six `cargo test -p engine` repro commands in these two files' doc comments no longer resolve. Comment-only; no non-doc lines changed. Upstream's own stale `-p engine` doc comments in eight other files are left alone -- provenance-checked against upstream/main, they are not ours. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/game/engine.rs | 4 ++-- crates/engine/tests/integration/loop_shortcut.rs | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index 2b4eb2eaf7..333572ed7b 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -13484,7 +13484,7 @@ mod kilo_interruptibility_tests { /// did not have). It is also not reproducible on this tree BY DESIGN — the rows below now exist, /// so deleting either conjunct today flips its named row, which is the entire point. Each row's /// own REVERT-PROBE line is the reproducible claim; run it with -/// `cargo test -p engine --lib -- game::engine::bounded_offer_conjunct_tests::` (module filter on +/// `cargo test -p phase-engine --lib -- game::engine::bounded_offer_conjunct_tests::` (module filter on /// the `engine` lib target). /// /// # Why these are UNIT rows on a synthetic ring @@ -13723,7 +13723,7 @@ mod bounded_offer_conjunct_tests { /// `loop_states_cover_modulo_growth_pinned`, rather than leaving the wider claim resting on /// the narrower evidence: a probe evaluating both disjuncts plus `net_progress_for` at every /// `(prior, live)` pair of `mill_ring(P1, 3)` (temporary `#[test]` in this module, run with - /// `cargo test -p engine --lib -- game::engine::bounded_offer_conjunct_tests:: --nocapture`, + /// `cargo test -p phase-engine --lib -- game::engine::bounded_offer_conjunct_tests:: --nocapture`, /// then reverted) reports `cover = false` at ALL THREE ring indices. Both halves refuse, so /// the conclusion holds. /// diff --git a/crates/engine/tests/integration/loop_shortcut.rs b/crates/engine/tests/integration/loop_shortcut.rs index 31fa159b53..9ca9be194a 100644 --- a/crates/engine/tests/integration/loop_shortcut.rs +++ b/crates/engine/tests/integration/loop_shortcut.rs @@ -7272,11 +7272,11 @@ fn bounded_offer_parts( /// one that flips" — was FALSE, and is corrected rather than quietly deleted. RE-MEASURED /// under that exact mutation, with the runner and the filter both named because the earlier /// revision quoted a count whose shape did not match the filter beside it (fix round 2, -/// LOW-2): `cargo test -p engine --test integration -- loop_shortcut::` (module filter on the +/// LOW-2): `cargo test -p phase-engine --test integration -- loop_shortcut::` (module filter on the /// `integration` binary) ⇒ **85 passed / 0 failed, 4090 filtered out**. `schema.is_bounded()` /// included, because on every fixture the bound really IS narrowed and that assertion holds /// independently of the range check. A SUBSTRING filter is a different question with a -/// different answer — `cargo test -p engine loop_shortcut` sweeps every target and additionally +/// different answer — `cargo test -p phase-engine loop_shortcut` sweeps every target and additionally /// matches `loop_shortcut_activation` / `loop_shortcut_mana_engine`; do not quote one shape's /// number beside the other's filter. /// No single-conjunct revert of step (7) flips a row on THIS fixture, and that is a property @@ -7463,7 +7463,7 @@ fn drive_scenario_to_bounded_offer(runner: &mut GameRunner, cap: usize) -> Optio /// RE-MEASURED in fix round 4 at `025015135`, using this file's own prescribed attribution /// probe (force `ring_delta_signature` to return `None` unconditionally — basis-B rows lose /// their offer, basis-A rows keep it), runner -/// `cargo test -p engine --test integration -- loop_shortcut::` (module filter on the +/// `cargo test -p phase-engine --test integration -- loop_shortcut::` (module filter on the /// `integration` binary): **74 passed / 11 failed / 4090 filtered out**, against a clean /// **85 passed / 0 failed / 4090 filtered out**. ELEVEN rows flip. This one, plus these ten: /// `dina_untargeted_drain_4p_offers_at_three_live_opponents`, @@ -8358,7 +8358,7 @@ fn bounded_fixed_count_commits_exactly_n_periods() { /// round 3 (LOW-1) corrected the earlier wording "one row of the 85", which took its numerator /// from the pre-commit tree and its denominator from the post-commit one — two epochs in one /// sentence. Runner and filter for the flip claim: -/// `cargo test -p engine --test integration -- loop_shortcut::` (module filter on the +/// `cargo test -p phase-engine --test integration -- loop_shortcut::` (module filter on the /// `integration` binary) — and that runner is also the AUTHORITY for the denominator: it /// reports **85 passed / 0 failed / 4090 filtered out** on this tree, re-run in fix round 4 at /// `025015135`. The 83 is the same module at `bc20d4ff4`. From 132d9b9e686e32c403c158869821616f3622c0fd Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Thu, 30 Jul 2026 21:44:58 -0500 Subject: [PATCH 11/62] fix(engine): route player choice through one legality authority (5c) Every site that materializes a player choice or validates a player target now goes through a single authority instead of ad hoc per-site filters, so a seat that has left the game or phased out can no longer be offered or pinned. - CR 102.1: eliminated players are not choosable or targetable. - CR 702.26b: a phased-out permanent's controller is treated as absent for choice and target legality. - CR 608.2b: pinned player targets are re-validated mid-drive; an unresolvable pin withdraws the offer rather than publishing an undeclarable point. - CR 732.2a: a wire-encoded zero-repetition shortcut bound is rejected at the load seam, closing a window that let a zero-cycle proposal deserialize. Also repairs the save-compat path: dump loaders now decode through the production PersistedGameState decoder rather than bypassing it, and fixture migration is re-runnable from the read-only pristine root via scripts/migrate-dump-fixture.sh. Assisted-by: ClaudeCode:claude-opus-5 --- .../engine/src/analysis/decision_template.rs | 313 +++++- crates/engine/src/analysis/resource.rs | 15 +- crates/engine/src/game/ability_utils.rs | 12 +- crates/engine/src/game/casting.rs | 4 +- crates/engine/src/game/casting_costs.rs | 15 +- crates/engine/src/game/casting_tests.rs | 73 ++ crates/engine/src/game/effects/choose.rs | 110 +- .../src/game/effects/choose_from_zone.rs | 90 +- crates/engine/src/game/effects/clash.rs | 9 +- crates/engine/src/game/effects/mod.rs | 53 + crates/engine/src/game/effects/proliferate.rs | 81 +- .../engine/src/game/effects/separate_piles.rs | 166 ++- crates/engine/src/game/engine.rs | 470 +++++++-- crates/engine/src/game/filter.rs | 14 +- crates/engine/src/game/interaction.rs | 16 +- crates/engine/src/game/phasing.rs | 11 +- crates/engine/src/game/players.rs | 53 + crates/engine/src/game/sba.rs | 11 +- crates/engine/src/game/targeting.rs | 101 +- crates/engine/src/game/zone_pipeline.rs | 6 +- crates/engine/src/types/game_state.rs | 47 +- .../gift_recipient_phased_out_opponent.rs | 202 ++++ .../tests/integration/interaction_contract.rs | 2 +- ..._3867_volcanic_offering_opponent_choice.rs | 104 ++ .../kilo_live_offer_from_real_dump.rs | 24 +- .../engine/tests/integration/loop_shortcut.rs | 956 +++++++++++++++++- crates/engine/tests/integration/main.rs | 1 + .../engine/tests/integration/rules/battle.rs | 144 +++ .../sprout_inalla_realistic_offer.rs | 10 +- scripts/migrate-dump-fixture.sh | 184 ++++ 30 files changed, 3087 insertions(+), 210 deletions(-) create mode 100644 crates/engine/tests/integration/gift_recipient_phased_out_opponent.rs create mode 100755 scripts/migrate-dump-fixture.sh diff --git a/crates/engine/src/analysis/decision_template.rs b/crates/engine/src/analysis/decision_template.rs index 92dfccfa7a..fceaeaa110 100644 --- a/crates/engine/src/analysis/decision_template.rs +++ b/crates/engine/src/analysis/decision_template.rs @@ -223,7 +223,8 @@ pub struct ShortcutDecisionSchema { /// The single count authority: the declared-count check in `game::engine` rejects a /// `Fixed(n)` above it, and `game::interaction` publishes it as the count picker's /// ceiling. Every offer built before the bounded-offer phase carries - /// `MAX_SHORTCUT_CYCLES`, so those checks are inert until a producer narrows it. + /// `MAX_SHORTCUT_CYCLES`, and those checks were inert until the bounded-cycle producer + /// began narrowing it. /// /// DELIBERATELY NOT MIRRORED in `client/src/adapter/types.ts::ShortcutDecisionSchema`: /// the frontend never reads the raw bound, it reads the already-clamped ceiling the @@ -433,7 +434,7 @@ pub enum ConcreteTarget { #[derive(Debug, Clone, PartialEq, Eq)] pub enum ReplayFailure { /// CR 608.2b: a TARGET pin no longer resolves to a legal live target (left its zone / - /// ceased to exist / CR 800.4a left the game). Raised whenever a *target* is + /// ceased to exist / CR 800.4 + CR 102.1 left the game). Raised whenever a *target* is /// illegal-or-absent, in ANY `ReplayMode` — a `Static`-mode `Targets` pin with a /// removed target yields THIS, not `MissingSource`. ⇒ abort the auto-shortcut, hand /// back to manual. @@ -577,31 +578,52 @@ fn resolve_target( TargetPin::ByIdentity(source) => resolve_source(source, state) .map(ConcreteTarget::Object) .ok_or_else(illegal), - // CR 800.4a: eliminated players are not legal targets. A pin declared against a seat - // that has since left the game must fail the CR 608.2b per-iteration re-check rather - // than silently resolving to a departed player. `game::players::is_alive` is the - // shipped "in the game and not eliminated" authority, and it mirrors exactly ONE of - // the exclusions `game::targeting::find_legal_targets` applies when it enumerates - // the offer's legal set: `targeting.rs:200-201`. + // CR 115.10a + CR 701.34a: this seam answers "may this seat be CHOSEN", not "may it + // be TARGETED". A proliferate choice is not a target, so the targeting-only + // exclusions (CR 702.11c hexproof / CR 702.18a shroud / CR 702.16b protection) must + // NOT be applied here — doing so would refuse a legal CR 732.2a proposal (the + // over-veto class). Existence is delegated to + // `game::players::player_exists_for_choice` (CR 800.4 + CR 102.1, phasing per the + // CR 702.26b MIRROR). // - // NOT PARITY, and deliberately so. That authority's player branch - // (`targeting.rs:196-213`) excludes on THREE grounds; this conjunct covers one: - // * `player.is_eliminated` (CR 800.4a) — covered here - // * `player.is_phased_out()` — NOT checked here. The CR defines phasing - // for PERMANENTS only (CR 702.26a-p); the engine's player-level flag is a - // mirror of CR 702.26b's "treated as though it does not exist", not a citation. - // * `player_cannot_be_targeted_by(..)` (CR 702.11c / CR 702.18a / CR 702.16b, - // player-scope hexproof / shroud / protection) — NOT checked here - // Widening this to a shared predicate factored out of `targeting.rs:196-213` is the - // recorded OWED ITEM 1 in `.combofb-pr-followups.md` ("Phase 5a — `TargetPin::Player`'s - // CR 608.2b re-check covers elimination only"), assigned to the FIRST commit of the - // phase that builds the drive: this phase mints `TargetPin::Player` only behind - // `#[cfg(any(test, feature = "test-support"))]`, so no shipped path reaches the gap. - // Measured there: a phased-out declared target survives THIS check and is killed - // downstream by `apply_action`'s spec-aware CR 608.2b re-validation, so the gap is a - // drift/attribution defect rather than a silent wrong answer — conditional on every - // pin consumer routing through `apply_action`. - TargetPin::Player(p) => crate::game::players::is_alive(state, *p) + // AND THE OTHER HALF, so nobody "fixes" this back into the over-veto: declare-path + // TARGET legality is enforced by `validate_pins`' `legal_targets.contains(..)` + // against the offer's PUBLISHED set, which `ability_utils::build_target_slots` + // derives through `targeting::find_legal_targets` → + // `static_abilities::player_cannot_be_targeted_by`. It is NOT enforced here, and + // does not need to be. + // + // OPEN RESIDUAL — the object-growth route. Stated in full here, because no shipped + // file states it elsewhere. INVARIANT: a `TargetPin::Player` must never reach + // materialization validated only against a legal set derived from the declared pins + // themselves. `try_offer_object_growth_shortcut` builds its points through + // `pinned_decisions_to_points`, whose legal sets come FROM the pins, so on that + // route the offer would ratify its own pin — and CR 732.2a admits only a sequence + // "that may be legally taken based on the current game state", which a self-derived + // set cannot establish. NOT live today FROM ANY IN-PROCESS PRODUCER — and the scope + // word is load-bearing: the one `record_loop_pin` arm that can push a + // `TargetPin::Player` is the CR 701.34a proliferate-target arm, and a proliferate + // choice is not a target, so THIS call is its correct authority. + // + // PINS ALSO ARRIVE WIRE-SOURCED, and no in-process invariant covers that. + // `LoopActionContext` is `#[serde(from = "LoopActionContextRepr")]`, and that shim's + // `From` impl installs the deserialized vector verbatim (`pins: r.pins`), so a + // restored save can carry a Player pin of UNKNOWN class. + // `GameState::migrate_transient_loop_sequence` keeps a loaded sequence ONLY for a + // save captured in a `LoopShortcut` / `RespondToShortcut` window, and on that route + // the pins are replayed by the accept→materialize drive through + // `build_recast_template` → `decision_template::resolve`, i.e. through THIS call — + // so a wire pin's EXISTENCE half is authority-enforced here too. Same class as the + // wire-sourced `max_iterations` defect `reject_zero_bound_shortcut_offer` closes: a + // load-seam value the in-process producer census cannot see. + // + // The residual opens the moment any producer — IN-PROCESS OR WIRE — puts a + // TARGET-class Player pin into `LoopActionContext.pins`. DAMAGE MODE then: + // `CycleOutcome::Abort` rolls back only the crossing cycle, so cycles `0..k` stay + // committed under a pin no authority ever validated. Deferred fix shape: + // provenance-type the pin so the two classes are distinguishable at this seam — a + // change to a serialized type, hence not this phase. + TargetPin::Player(p) => crate::game::players::player_exists_for_choice(state, *p) .then_some(ConcreteTarget::Player(*p)) .ok_or_else(illegal), TargetPin::Scheduled(sched) => evaluate_schedule(sched, slot, iteration, state), @@ -722,7 +744,8 @@ pub enum PredictabilityViolation { /// CR 732.2a + CR 608.2b: why a declared pin is not a LEGAL answer to the offered decision /// schema. `validate_pins` is the fail-closed VALUE-legality firewall paired with /// [`predictability_gate`]'s COVERAGE check: the gate proves every offered slot is pinned; -/// this proves every pin's VALUE lies inside the slot's offered legal set. Any violation ⇒ +/// this proves every pin's VALUE lies inside the slot's offered legal set at every index the +/// ACCEPTED COUNT will drive. Any violation ⇒ /// the declare handler rejects the shortcut and hands back to manual play (no APNAP, no /// drive, no crown). #[derive(Debug, Clone, PartialEq, Eq)] @@ -764,9 +787,11 @@ pub(crate) fn resolve_target_ref( /// CR 732.2a + CR 608.2b: the fail-closed VALUE-legality firewall for a declared shortcut. /// Verifies every pin in `template` is a LEGAL answer to `schema` — each pin's slot is one /// the offer exposed, and each pin's resolved value lies inside that slot's offered legal -/// set. `period` (the drive count from [`shortcut_drive_period`]) bounds the iteration -/// indices a scheduled target pin is re-resolved for, so a `RoundRobin`/`Piecewise` schedule -/// is validated at EVERY index it will drive. EXHAUSTIVE over [`PinnedDecision`] with no +/// set. `validated_range` bounds the iteration indices a scheduled target pin is re-resolved +/// for: every pin is validated at every index in `0..validated_range`. Supplying a range that +/// COVERS the drive is the CALLER's obligation, discharged by +/// `game::engine::shortcut_validated_range`, which reads the range off the declared count +/// rather than off the schedule's own length. EXHAUSTIVE over [`PinnedDecision`] with no /// wildcard: `Order` (CR 603.3b trigger-ordering) is not a loop-declaration point; /// `ConvokeTaps` must still address an exposed matching point even though its concrete taps are /// re-bound live by `select_convoke_taps`. Runs once at declare (the board is frozen through Accept); the drive's @@ -774,7 +799,7 @@ pub(crate) fn resolve_target_ref( pub fn validate_pins( schema: &ShortcutDecisionSchema, template: &DecisionTemplate, - period: IterationIndex, + validated_range: IterationIndex, state: &GameState, ) -> Result<(), PinValidation> { for pin in &template.decisions { @@ -801,7 +826,20 @@ pub fn validate_pins( // require the concrete value to be an offered legal target. A scheduled pin // that cannot resolve to a live legal object is itself an illegal value. for t in targets { - for i in 0..period.max(1) { + // CR 732.2b + CR 732.2c: NO `.max(1)` FLOOR. A shortened proposal whose + // new ending point is the first deviating choice — CR 732.2b's "that + // place becomes the new ending point" — is a ZERO-repetition accepted + // proposal, and CR 732.2c makes taking it mandatory, so count 0 must be + // representable AND validatable. A floor would validate index 0 of a + // range nothing drives, refusing conforming declarations. Validation is + // NOT disabled at 0: the slot-exposure (`UnexposedSlot`), pin-kind and + // cardinality checks all sit OUTSIDE this loop and still run. + // + // ⚠ SCOPE: this licenses representing and validating count 0. It does NOT + // claim today's Shorten path reaches here with 0 — + // `handle_respond_to_shortcut` realizes Shorten as a real priority window, + // not an auto-applied `Fixed(0)`. + for i in 0..validated_range { let concrete = resolve_target(t, slot, i, state) .map_err(|_| PinValidation::IllegalPinValue { slot: slot.clone() })?; if !legal_targets.contains(&concrete_to_target_ref(concrete)) { @@ -1269,16 +1307,23 @@ mod tests { assert!(resolve(&template, 0, &present).is_ok()); } - /// CR 800.4a + CR 608.2b: a `TargetPin::Player` aimed at a seat that has LEFT THE GAME - /// is not a legal target, so the per-iteration re-check must raise - /// `IllegalTarget{pin}` — mirroring `game::targeting::find_legal_targets`'s own - /// exclusion (`crates/engine/src/game/targeting.rs:200-201`). This row is the sole - /// owner of `IllegalTarget{pin}` for the `Player` kind, and it is reachable by - /// construction. + /// CR 800.4 + CR 102.1 + CR 608.2b: a `TargetPin::Player` aimed at a seat that has LEFT + /// THE GAME is no longer one of the people in the game, so it is not choosable and the + /// per-iteration re-check must raise `IllegalTarget{pin}`. Both this seam and + /// `game::targeting`'s legal-set enumeration now SHARE that existence authority — + /// `game::players::player_exists_for_choice`, reached here directly and there through + /// `targeting::player_is_legal_target` — so this is one authority consulted twice, not + /// two implementations mirroring each other. (NOT CR 800.4a, which governs a departed + /// player's objects, control effects and priority rather than choice legality.) + /// This row is the sole owner of `IllegalTarget{pin}` for the `Player` kind, and it is + /// reachable by construction. /// /// MATCHED PAIR, one variable (`is_eliminated`): the LIVE half resolves, the DEAD half - /// fails. REVERT-PROBE: drop the `!is_eliminated` conjunct in `resolve_target`'s - /// `TargetPin::Player` arm ⇒ the dead half resolves ⇒ FAILS. + /// fails. Only the ABSOLUTE expectations discriminate — a parity assertion against the + /// targeting side would be vacuous now that both sides call one function, since + /// deleting a conjunct moves both together. REVERT-PROBE: drop the `!is_eliminated` + /// conjunct inside `player_exists_for_choice` (via `is_alive`) ⇒ the dead half + /// resolves ⇒ FAILS. #[test] fn a_dead_player_pin_is_illegal() { let pin_slot = DecisionSlot { @@ -1320,8 +1365,192 @@ mod tests { slot: pin_slot, pin: TargetPin::Player(PlayerId(1)), }, - "CR 800.4a: a departed seat is not a legal target — and the failure NAMES the \ - pin, which a `source: DecisionSource` payload could not express" + "CR 800.4 + CR 102.1: a departed seat is no longer one of the people in the \ + game, so it is not choosable — and the failure NAMES the pin, which a \ + `source: DecisionSource` payload could not express" + ); + } + + /// R1 — CR 115.10a + the CR 702.26b MIRROR: a `TargetPin::Player` aimed at a + /// PHASED-OUT seat also fails the per-iteration re-check. At HEAD this seam checked + /// `is_alive` only, so a phased-out seat resolved here and was killed (or not) further + /// downstream; routing it through `game::players::player_exists_for_choice` makes the + /// EXISTENCE half one authority for both halves of "no longer there". + /// + /// MATCHED PAIR, one variable (the phasing transition): the PHASED-IN half resolves, + /// the PHASED-OUT half fails. The phased-in half is the positive reach-guard — it + /// proves nothing upstream of the existence check rejects this pin, so the other + /// half's failure is attributable to phasing alone. The transition itself is asserted + /// (production API return value + the flag) because a setup that silently no-opped + /// would make the second half pass for no reason at all. + /// + /// R1 and `a_dead_player_pin_is_illegal` are the two behaviour changes of one + /// conjunct pair, deliberately kept as separate rows: elimination was already enforced + /// here, phasing was not. + /// + /// REVERT-PROBE: drop the `is_phased_out` conjunct in `player_exists_for_choice` ⇒ the + /// phased-out half resolves ⇒ FAILS (and `a_dead_player_pin_is_illegal` does not move, + /// which is what attributes this row to the phasing conjunct specifically). + #[test] + fn a_phased_out_player_pin_is_illegal() { + let pin_slot = DecisionSlot { + source: this_obj(71, Some(0)), + index: 0, + }; + let template = DecisionTemplate { + owner: PlayerId(0), + decisions: vec![PinnedDecision::Targets { + slot: pin_slot.clone(), + targets: vec![TargetPin::Player(PlayerId(1))], + }], + replay: ReplayMode::Scheduled { + count: IterationCount::Fixed(1), + }, + key: tri_key(), + }; + + // PHASED-IN half — the positive reach-guard. + let phased_in = GameState::new_two_player(7); + assert!( + !phased_in.players[1].is_phased_out(), + "fixture: P1 starts phased in" + ); + assert_eq!( + resolve(&template, 0, &phased_in).unwrap(), + vec![ConcreteDecision::Targets { + slot: pin_slot.clone(), + targets: vec![ConcreteTarget::Player(PlayerId(1))], + }], + "a phased-in player pin resolves unchanged" + ); + + // PHASED-OUT half — the same board, transitioned through the PRODUCTION API. + let mut phased_out = phased_in.clone(); + let mut events = Vec::new(); + let transitioned = + crate::game::phasing::phase_out_player(&mut phased_out, PlayerId(1), &mut events); + assert_eq!( + transitioned, + vec![PlayerId(1)], + "setup anti-vacuity: phase_out_player must report the seat it transitioned" + ); + assert!( + phased_out.players[1].is_phased_out(), + "setup anti-vacuity: P1 must read as phased out" + ); + assert!( + !phased_out.players[1].is_eliminated, + "the ONLY variable is phasing — P1 must still be un-eliminated, or this row \ + would be a second copy of `a_dead_player_pin_is_illegal`" + ); + + assert_eq!( + resolve(&template, 0, &phased_out).unwrap_err(), + ReplayFailure::IllegalTarget { + slot: pin_slot, + pin: TargetPin::Player(PlayerId(1)), + }, + "CR 702.26b MIRROR: a phased-out seat is treated as though it does not exist, \ + so it is not choosable here either" + ); + } + + /// R2 — CR 115.10a is a BOUNDARY, and this row is what stops a future "fix" from + /// erasing it: a targeting-only exclusion gates the TARGET seam and must NOT gate the + /// CHOICE seam. + /// + /// One board, one SHROUDED seat (CR 702.18a — shroud blocks every source, including + /// the shrouded player's own, so the assertion does not depend on who the source + /// controller is), and two assertions at two different seams: + /// + /// 1. the EXCLUDE half — `targeting::find_legal_targets` drops the seat. This is the + /// paired POSITIVE: it proves the shroud grant actually took effect, so assertion 2 + /// is about the seam boundary and not about a setup that silently did nothing. + /// 2. the ADMIT half — `resolve_target`'s `TargetPin::Player` arm still resolves it, + /// because a proliferate choice (CR 701.34a) is not a target and refusing it here + /// is the over-veto class this phase exists to remove. + /// + /// REVERT-PROBE: route the `TargetPin::Player` arm through + /// `targeting::player_is_legal_target` instead of `players::player_exists_for_choice` + /// ⇒ assertion 2 FAILS while assertion 1 still passes. + #[test] + fn a_shrouded_seat_is_untargetable_yet_still_choosable_at_the_pin_recheck() { + use crate::types::ability::{ + ControllerRef, StaticDefinition, TargetFilter, TargetRef, TypedFilter, + }; + use crate::types::statics::StaticMode; + + let mut state = GameState::new_two_player(42); + + // P1 gains shroud from a permanent they control ("You have shroud"). Built with + // the production `zones::create_object`, not a raw `objects.insert`: a raw insert + // never joins `state.battlefield`, so `game_functioning_statics` would not see the + // grantor and the shroud would silently never apply. + let grantor = crate::game::zones::create_object( + &mut state, + CardId(90), + PlayerId(1), + "You Have Shroud Source".to_string(), + Zone::Battlefield, + ); + state.objects.get_mut(&grantor).unwrap().static_definitions = + vec![ + StaticDefinition::new(StaticMode::Shroud).affected(TargetFilter::Typed( + TypedFilter::default().controller(ControllerRef::You), + )), + ] + .into(); + crate::game::layers::flush_layers(&mut state); + + // 1. EXCLUDE half, and the setup's positive control: the TARGET seam drops P1. + let source = crate::game::zones::create_object( + &mut state, + CardId(91), + PlayerId(0), + "Targeting Spell".to_string(), + Zone::Battlefield, + ); + let targets = crate::game::targeting::find_legal_targets( + &state, + &TargetFilter::Any, + PlayerId(0), + source, + ); + assert!( + !targets.contains(&TargetRef::Player(PlayerId(1))), + "CR 702.18a: the shroud grant must actually bite at the TARGET seam — if it \ + does not, assertion 2 below proves nothing. Got {targets:?}" + ); + assert!( + targets.contains(&TargetRef::Player(PlayerId(0))), + "the un-shrouded seat is still targetable, so the exclusion above is shroud \ + and not an empty legal set" + ); + + // 2. ADMIT half: the CHOICE seam still resolves the same seat. + let pin_slot = DecisionSlot { + source: this_obj(92, None), + index: 0, + }; + let template = DecisionTemplate { + owner: PlayerId(0), + decisions: vec![PinnedDecision::Targets { + slot: pin_slot.clone(), + targets: vec![TargetPin::Player(PlayerId(1))], + }], + replay: ReplayMode::Scheduled { + count: IterationCount::Fixed(1), + }, + key: tri_key(), + }; + assert_eq!( + resolve(&template, 0, &state).unwrap(), + vec![ConcreteDecision::Targets { + slot: pin_slot, + targets: vec![ConcreteTarget::Player(PlayerId(1))], + }], + "CR 115.10a: a CHOSEN seat is not a TARGETED seat — the targeting-only \ + exclusions must not reach this seam" ); } diff --git a/crates/engine/src/analysis/resource.rs b/crates/engine/src/analysis/resource.rs index 6f2362a84a..6e174eefd8 100644 --- a/crates/engine/src/analysis/resource.rs +++ b/crates/engine/src/analysis/resource.rs @@ -10388,10 +10388,17 @@ mod tests { .expect("fixture .json.gz must inflate to UTF-8 JSON"); let envelope: serde_json::Value = serde_json::from_str(&json).expect("dump envelope parses as JSON"); - let raw: GameState = serde_json::from_value(envelope["gameState"].clone()) - .expect("the real 4p gameState must deserialize into the current GameState"); - let state = - crate::types::game_state::PersistedGameState::Raw(Box::new(raw)).into_game_state(); + // Cross the dump through the PRODUCTION decoder rather than a bare `GameState` + // decode wrapped in `Raw`: `PersistedGameState`'s own `Deserialize` runs + // `reject_legacy_raw_prompt_authority` and `decode_persisted_resolution_state` + // first, so this row exercises the chokepoint the server's `from_persisted` and + // WASM's `decode_restored_game_state` actually funnel through. + // `.expect(..)`, not `?`: `into_game_state` returns `GameState`, not `Result`. + let state = serde_json::from_value::( + envelope["gameState"].clone(), + ) + .expect("gameState deserializes through the production decoder") + .into_game_state(); // ── reach-guards: the X4 subject really is present, in a never-cast-from zone ── let spear = state diff --git a/crates/engine/src/game/ability_utils.rs b/crates/engine/src/game/ability_utils.rs index f2abb096d1..50009b948f 100644 --- a/crates/engine/src/game/ability_utils.rs +++ b/crates/engine/src/game/ability_utils.rs @@ -4960,12 +4960,12 @@ pub(crate) fn is_per_opponent_target_fanout(ability: &ResolvedAbility) -> bool { fn per_opponent_fanout_players(state: &GameState, controller: PlayerId) -> Vec { players::apnap_order_from(state, None, controller) .into_iter() - .filter(|id| { - *id != controller - && state.players.iter().any(|player| { - player.id == *id && !player.is_eliminated && !player.is_phased_out() - }) - }) + // Hygiene routing, behaviour-neutral BY CONSTRUCTION: the inline pair + // `!is_eliminated && !is_phased_out()` under a membership `any` is exactly what + // `players::player_exists_for_choice` spells (`is_alive` is itself membership ∧ + // ¬eliminated). Routed so an existence fix propagates here rather than leaving a + // fifth hand-inlined copy of the predicate. + .filter(|&id| id != controller && players::player_exists_for_choice(state, id)) .collect() } diff --git a/crates/engine/src/game/casting.rs b/crates/engine/src/game/casting.rs index f52de336c3..712b2c34a4 100644 --- a/crates/engine/src/game/casting.rs +++ b/crates/engine/src/game/casting.rs @@ -12117,7 +12117,9 @@ fn continue_with_prepared( // is decided independently — `begin_deferred_target_selection` re-prompts // for every remaining group after this first one is recorded. if let Some(choice) = casting_costs::next_announcing_opponent_choice(&resolved) { - let candidates = crate::game::players::opponents(state, player); + // CR 601.2c + CR 115.10a: the announcer is CHOSEN, not targeted, so the + // candidate list is the CHOOSABLE opponents. + let candidates = crate::game::players::choosable_opponents(state, player); if candidates.len() >= 2 { let mut pending = PendingCast::new( prepared.object_id, diff --git a/crates/engine/src/game/casting_costs.rs b/crates/engine/src/game/casting_costs.rs index 19f8841ede..008d1ede17 100644 --- a/crates/engine/src/game/casting_costs.rs +++ b/crates/engine/src/game/casting_costs.rs @@ -668,7 +668,9 @@ fn continue_after_gift_promised( cost_source: SpellCostSource, events: &mut Vec, ) -> Result { - let opponents = crate::game::players::opponents(state, player); + // CR 702.174a: "you may choose an opponent" — a CHOICE, not a target (CR 115.10a), + // so the recipient list is the CHOOSABLE opponents, not the raw seat relation. + let opponents = crate::game::players::choosable_opponents(state, player); if opponents.is_empty() { return Err(EngineError::InvalidAction( "Cannot promise a gift with no opponents".to_string(), @@ -1537,7 +1539,10 @@ pub(crate) fn begin_deferred_target_selection( // its announcing opponent chosen (and the controller has ≥2 opponents to pick // among), raise that decision before declaring targets. This loops once per // unassigned group, so each opponent-choice effect gets its own announcer. - let announcing_candidates = crate::game::players::opponents(state, player); + // CR 115.10a: the announcer is CHOSEN, not targeted — the SECOND mint of this + // variant, and it must narrow identically to the cast-time mint in `casting.rs` + // or the re-prompt would hand back a seat the first prompt excluded. + let announcing_candidates = crate::game::players::choosable_opponents(state, player); if announcing_candidates.len() >= 2 { if let Some(choice) = next_announcing_opponent_choice(&pending.ability) { return Ok(WaitingFor::ChooseAnnouncingOpponent { @@ -11791,10 +11796,14 @@ fn assist_offer_params( { return None; } + // CR 702.132a: "you may choose another player" — a CHOICE, not a target + // (CR 115.10a), so the seat is judged by `player_exists_for_choice` and NOT by the + // targeting-only exclusions. `p.id != player` stays: that is "another player" SCOPE, + // not legality. let candidates: Vec = state .players .iter() - .filter(|p| p.id != player && !p.is_eliminated) + .filter(|p| p.id != player && crate::game::players::player_exists_for_choice(state, p.id)) .map(|p| p.id) .collect(); if candidates.is_empty() { diff --git a/crates/engine/src/game/casting_tests.rs b/crates/engine/src/game/casting_tests.rs index ff9a939063..178b34a413 100644 --- a/crates/engine/src/game/casting_tests.rs +++ b/crates/engine/src/game/casting_tests.rs @@ -16842,6 +16842,79 @@ fn assist_no_offer_without_other_players() { ); } +/// R4f — CR 702.132a: assist is *"you may **choose** another player"*, a CHOICE and not a +/// target (CR 115.10a), so the helper list is the seats that still exist to be chosen. +/// A phased-out seat is treated as though it does not exist (the CR 702.26b MIRROR) and +/// must drop out of the offer; the eliminated exclusion this seam already had (CR 800.4 + +/// CR 102.1) must be PRESERVED, not traded for it. +/// +/// FOUR SEATS, NOT TWO, and that is load-bearing twice over: `setup_game_at_main_phase` is +/// two-player, so it cannot carry both an excluded and a surviving helper, and +/// `assist_offer_params` returns `None` when the candidate list is empty — so on a narrower +/// board the offer would never fire and a "P1 is not a candidate" assertion would pass +/// vacuously. THE OFFER MUST STILL FIRE, which is why the assertion is on the published +/// `AssistChoosePlayer` variant and is a TOTAL EQUALITY rather than a `!contains`. +/// +/// Contrast `assist_no_offer_without_other_players` directly above: that row asserts an +/// ABSENCE, which is exactly the shape this one must not copy. +/// +/// REVERT-PROBE: restore HEAD's `.filter(|p| p.id != player && !p.is_eliminated)` at the +/// `assist_offer_params` site ⇒ candidates become `[P1, P3]` ⇒ the equality FAILS. +#[test] +fn assist_offer_excludes_a_phased_out_helper_and_still_offers_the_rest() { + use crate::types::format::FormatConfig; + + let mut state = GameState::new(FormatConfig::commander(), 4, 42); + state.turn_number = 2; + state.phase = Phase::PreCombatMain; + state.active_player = PlayerId(0); + state.priority_player = PlayerId(0); + state.waiting_for = WaitingFor::Priority { + player: PlayerId(0), + }; + + // Setup anti-vacuity, asserted before anything is measured. + let mut setup_events = Vec::new(); + let transitioned = + crate::game::phasing::phase_out_player(&mut state, PlayerId(1), &mut setup_events); + assert_eq!( + transitioned, + vec![PlayerId(1)], + "phase_out_player must actually transition P1" + ); + assert!( + state.players[1].is_phased_out(), + "P1 must read as phased out" + ); + crate::game::elimination::eliminate_player(&mut state, PlayerId(2), &mut setup_events); + assert!(state.players[2].is_eliminated, "P2 must read as eliminated"); + + let obj_id = make_assist_spell(&mut state); + // CR 601.2h: "The player pays the total cost" — unpayable costs can't be paid, so the + // caster is staged with enough mana for {3}{R} or the cast never reaches the offer. + add_mana(&mut state, PlayerId(0), ManaType::Colorless, 3); + add_mana(&mut state, PlayerId(0), ManaType::Red, 1); + + // The PRODUCTION entry point, exactly as every other assist row drives it — never + // `assist_offer_params`, which is private. + let result = handle_cast_spell(&mut state, PlayerId(0), obj_id, CardId(22), &mut Vec::new()) + .expect("assist spell should begin casting"); + + match result { + WaitingFor::AssistChoosePlayer { + player, candidates, .. + } => { + assert_eq!(player, PlayerId(0)); + assert_eq!( + candidates, + vec![PlayerId(3)], + "phased-out P1 and eliminated P2 are out; the one valid helper is in" + ); + } + other => panic!("expected AssistChoosePlayer, got {other:?}"), + } +} + #[test] fn assist_decline_proceeds_to_normal_payment() { let mut state = setup_game_at_main_phase(); diff --git a/crates/engine/src/game/effects/choose.rs b/crates/engine/src/game/effects/choose.rs index e218acba8d..1a73994d35 100644 --- a/crates/engine/src/game/effects/choose.rs +++ b/crates/engine/src/game/effects/choose.rs @@ -624,10 +624,13 @@ fn compute_options( // satisfying that `PlayerFilter` — the controller then picks ONE of the // qualifying opponents (CR 608.2d handles ties), keeping it a single // pick rather than fanning the effect out to every tied opponent. + // CR 608.2d: "The player can't choose an option that's illegal or impossible" — + // a CHOICE, not a target (CR 115.10a), so the option list is the CHOOSABLE + // opponents. The distinctness and restriction filters below are untouched. ChoiceType::Opponent { restriction, distinctness, - } => players::opponents(state, controller) + } => players::choosable_opponents(state, controller) .iter() .filter(|id| { *distinctness != PlayerChoiceDistinctness::DistinctFromPriorChoices @@ -640,13 +643,20 @@ fn compute_options( }) .map(|id| id.0.to_string()) .collect(), - // CR 102.1: A player is one of the people in the game. + // CR 102.1: A player is one of the people in the game — so a seat that has LEFT + // the game (CR 800.4) is not one of the people to choose among, and neither is a + // phased-out seat (per the CR 702.26b MIRROR). CR 608.2d: the player can't choose + // an illegal option. `state.seat_order` is NOT pruned on elimination by any + // production writer, so without this conjunct the arm offers eliminated seats — + // a defect independent of phasing, and one every sibling choice seam already + // avoids. // CR 608.2c: `DistinctFromPriorChoices` (Gluntch's "choose a // second/third player") excludes players already chosen earlier in // this resolution; the default `Independent` does not. ChoiceType::Player { distinctness } => state .seat_order .iter() + .filter(|&&id| players::player_exists_for_choice(state, id)) .filter(|id| { *distinctness != PlayerChoiceDistinctness::DistinctFromPriorChoices || !already_chosen.contains(id) @@ -1321,6 +1331,102 @@ mod tests { } } + /// The shared 5-seat choice-legality board: P0 controller, **P1 phased out** through + /// the production API, **P2 eliminated**, P3/P4 valid. + /// + /// FIVE seats, not three, and that is a reach-guard rather than padding: `resolve` + /// early-returns when `options.is_empty()` and never publishes `NamedChoice` at all, + /// so a board narrow enough to empty the list would make every exclusion assertion + /// below pass vacuously. + fn choice_legality_board() -> GameState { + use crate::types::format::FormatConfig; + let mut state = GameState::new(FormatConfig::standard(), 5, 42); + let mut events = Vec::new(); + + // Anti-vacuity on the SETUP, asserted before anything is measured: + // `phase_out_player` returns the ids it transitioned, so a setup that silently + // no-opped fails loudly here instead of quietly weakening the row. + let transitioned = + crate::game::phasing::phase_out_player(&mut state, PlayerId(1), &mut events); + assert_eq!( + transitioned, + vec![PlayerId(1)], + "phase_out_player must actually transition P1" + ); + assert!( + state.players[1].is_phased_out(), + "P1 must read as phased out after the production call" + ); + + crate::game::elimination::eliminate_player(&mut state, PlayerId(2), &mut events); + assert!( + state.players[2].is_eliminated, + "P2 must read as eliminated after the production call" + ); + state + } + + /// CR 102.1 ("a player is one of the people in the game") + CR 608.2d ("the player + /// can't choose an option that's illegal or impossible"): "choose a player" must offer + /// neither an eliminated nor a phased-out seat. + /// + /// TWO INDEPENDENT BEHAVIOUR CHANGES, and this row asserts both. The eliminated seat + /// `"2"` was offered at HEAD — a strictly-live CR 102.1 defect with nothing to do with + /// phasing, because `state.seat_order` is not pruned on elimination and this arm + /// filtered only on `already_chosen`. The phased-out seat `"1"` is the phasing half. + /// + /// Total equality, never `!contains`: exclusion AND identity in one assertion. + /// + /// REVERT-PROBE: restore the raw `state.seat_order.iter()` ⇒ `"1"` and `"2"` both + /// reappear ⇒ FAILS. SECOND, NARROWER REVERT-PROBE: replace `player_exists_for_choice` + /// with bare `is_alive` ⇒ `"1"` reappears while `"2"` stays out ⇒ FAILS. The second + /// probe is what stops either behaviour change being credited to the other. + #[test] + fn choose_a_player_offers_neither_an_eliminated_nor_a_phased_out_seat() { + let mut state = choice_legality_board(); + let ability = make_choose_ability(ChoiceType::player()); + let mut events = Vec::new(); + resolve(&mut state, &ability, &mut events).unwrap(); + match &state.waiting_for { + WaitingFor::NamedChoice { options, .. } => { + assert_eq!( + options, + &["0", "3", "4"], + "phased-out P1 and eliminated P2 are out; the controller and both \ + valid seats are in" + ); + } + other => panic!("Expected NamedChoice, got {other:?}"), + } + } + + /// CR 608.2d: "choose an opponent" must offer neither an eliminated nor a phased-out + /// seat. + /// + /// R4n and R4m are each other's ATTRIBUTION CONTROL: same board, same resolver, same + /// `compute_options` call, differing only in the `ChoiceType` arm — so a green pair + /// proves each fix landed on the arm it claims to rather than on shared machinery. + /// + /// REVERT-PROBE: restore `players::opponents` at the `ChoiceType::Opponent` arm ⇒ + /// `"1"` reappears ⇒ FAILS. + #[test] + fn choose_an_opponent_offers_neither_an_eliminated_nor_a_phased_out_seat() { + let mut state = choice_legality_board(); + let ability = make_choose_ability(ChoiceType::opponent()); + let mut events = Vec::new(); + resolve(&mut state, &ability, &mut events).unwrap(); + match &state.waiting_for { + WaitingFor::NamedChoice { options, .. } => { + assert_eq!( + options, + &["3", "4"], + "phased-out P1 and eliminated P2 are out; both valid opponents are in" + ); + } + other => panic!("Expected NamedChoice, got {other:?}"), + } + } + #[test] fn choose_player_lists_all_players() { let mut state = GameState::new_two_player(42); diff --git a/crates/engine/src/game/effects/choose_from_zone.rs b/crates/engine/src/game/effects/choose_from_zone.rs index fd3e662459..b99cf699cb 100644 --- a/crates/engine/src/game/effects/choose_from_zone.rs +++ b/crates/engine/src/game/effects/choose_from_zone.rs @@ -101,7 +101,12 @@ pub fn resolve( // the decision out of APNAP defaults; the handler re-enters through // `resolve_with_choosing_player` with the picked opponent. if matches!(chooser, Chooser::Opponent) && !has_targeted_opponent(ability) { - let candidates: Vec = players::opponents(state, ability.controller) + // CR 608.2d: "The player can't choose an option that's illegal or impossible" — + // a resolution-time CHOICE, not a target (CR 115.10a), so the candidate list is + // the CHOOSABLE opponents. The pre-existing `!pl.is_eliminated` re-filter is left + // in place: it is redundant with `is_alive` inside the authority, and removing a + // redundant filter would turn a one-token routing into an unmeasured change. + let candidates: Vec = players::choosable_opponents(state, ability.controller) .into_iter() .filter(|&p| { state @@ -1599,6 +1604,89 @@ mod tests { } } + /// R4h — CR 608.2d: *"The player can't choose an option that's illegal or impossible."* + /// The controller's pick of WHICH opponent chooses is a resolution-time choice, not a + /// target (CR 115.10a), so a phased-out seat (the CR 702.26b MIRROR) and a departed one + /// (CR 800.4 + CR 102.1) must both be absent from the published candidate list. + /// + /// FIVE SEATS, extending `resolve_with_opponent_chooser`'s construction rather than + /// copying its board: on that row's two-player board the `candidates.len() >= 2` gate + /// can never be met, so it publishes `ChooseFromZoneChoice` and never the + /// `ChooseFromZoneOpponentChooser` this row asserts. That gate is also this row's + /// REACH-GUARD — with fewer than two surviving opponents the resolver falls through to + /// the non-prompting path and an exclusion-only assertion would pass vacuously. + /// + /// REVERT-PROBE: restore `players::opponents` at the candidate derivation ⇒ P1 + /// reappears ⇒ the total equality FAILS. + #[test] + fn opponent_chooser_offer_excludes_a_phased_out_opponent_and_still_offers_the_rest() { + use crate::types::format::FormatConfig; + + let mut state = GameState::new(FormatConfig::standard(), 5, 42); + let mut setup_events = Vec::new(); + + // Setup anti-vacuity, asserted before anything is measured. + let transitioned = + crate::game::phasing::phase_out_player(&mut state, PlayerId(1), &mut setup_events); + assert_eq!( + transitioned, + vec![PlayerId(1)], + "phase_out_player must actually transition P1" + ); + assert!( + state.players[1].is_phased_out(), + "P1 must read as phased out" + ); + crate::game::elimination::eliminate_player(&mut state, PlayerId(2), &mut setup_events); + assert!(state.players[2].is_eliminated, "P2 must read as eliminated"); + + let card1 = create_object( + &mut state, + CardId(1), + PlayerId(0), + "Card A".to_string(), + Zone::Exile, + ); + state + .tracked_object_sets + .insert(TrackedSetId(1), vec![card1]); + state.next_tracked_set_id = 2; + + let ability = ResolvedAbility::new( + Effect::ChooseFromZone { + count: 1, + zone: Zone::Exile, + additional_zones: Vec::new(), + zone_owner: ZoneOwner::Controller, + filter: None, + chooser: Chooser::Opponent, + up_to: false, + constraint: None, + selection: crate::types::ability::CardSelectionMode::Chosen, + }, + vec![], + ObjectId(100), + PlayerId(0), + ); + let mut events = Vec::new(); + + resolve(&mut state, &ability, &mut events).unwrap(); + + match &state.waiting_for { + WaitingFor::ChooseFromZoneOpponentChooser { + player, candidates, .. + } => { + assert_eq!(*player, PlayerId(0), "the controller makes this pick"); + assert_eq!( + *candidates, + vec![PlayerId(3), PlayerId(4)], + "phased-out P1 and eliminated P2 are out; both valid opponents are in" + ); + } + other => panic!("Expected ChooseFromZoneOpponentChooser, got {other:?}"), + } + } + #[test] fn resolve_with_targeted_opponent() { let mut state = GameState::new_two_player(42); diff --git a/crates/engine/src/game/effects/clash.rs b/crates/engine/src/game/effects/clash.rs index 9ab121436d..c20834ad34 100644 --- a/crates/engine/src/game/effects/clash.rs +++ b/crates/engine/src/game/effects/clash.rs @@ -26,11 +26,16 @@ pub fn resolve( ) -> Result<(), EffectError> { let controller = ability.controller; - // CR 701.30b: The clashing player chooses which opponent to clash with. + // CR 701.30b: "Choose an opponent. You and that opponent each clash." — a CHOICE, not + // a target (CR 115.10a), so the seat is judged by `player_exists_for_choice` and NOT + // by the targeting-only exclusions. `p.id != controller` stays: that is opponent + // SCOPE, not legality. let candidates: Vec = state .players .iter() - .filter(|p| p.id != controller && !p.is_eliminated) + .filter(|p| { + p.id != controller && crate::game::players::player_exists_for_choice(state, p.id) + }) .map(|p| p.id) .collect(); diff --git a/crates/engine/src/game/effects/mod.rs b/crates/engine/src/game/effects/mod.rs index bb32d44940..3e78872990 100644 --- a/crates/engine/src/game/effects/mod.rs +++ b/crates/engine/src/game/effects/mod.rs @@ -22007,6 +22007,59 @@ mod tests { assert!(evaluate_condition(&cond, &state, &ability)); } + /// CR 701.30b: "Choose an opponent. You and that opponent each clash." — a CHOICE, + /// not a target (CR 115.10a), so the offered list must exclude seats that cannot be + /// chosen at all while still offering every seat that can. + /// + /// Board: 5 seats. P0 clashes; **P1 phased out** through the production API; + /// **P2 eliminated**; P3/P4 valid. + /// + /// REACH-GUARD, and the reason the board is 5 seats rather than 3: `clash::resolve` + /// publishes `ClashChooseOpponent` only at `candidates.len() >= 2`. With one surviving + /// opponent it takes the immediate-clash path and publishes NOTHING, so an + /// exclusion-only assertion would pass vacuously on a narrower board. + /// + /// REVERT-PROBE: restore HEAD's `.filter(|p| p.id != controller && !p.is_eliminated)` + /// at this site ⇒ candidates become `[P1, P3, P4]` ⇒ the total-equality assertion + /// FAILS. That isolates exactly the conjunct this change adds. + #[test] + fn clash_offer_excludes_a_phased_out_opponent_and_still_offers_the_rest() { + let mut state = GameState::new(FormatConfig::standard(), 5, 42); + let mut events = Vec::new(); + + // Anti-vacuity on the SETUP, asserted FIRST: `phase_out_player` returns the ids it + // transitioned, so a setup that silently no-opped fails loudly here. + let transitioned = + crate::game::phasing::phase_out_player(&mut state, PlayerId(1), &mut events); + assert_eq!( + transitioned, + vec![PlayerId(1)], + "phase_out_player must actually transition P1" + ); + assert!(state.players[1].is_phased_out()); + crate::game::elimination::eliminate_player(&mut state, PlayerId(2), &mut events); + assert!(state.players[2].is_eliminated); + + let ability = ResolvedAbility::new(Effect::Clash, vec![], ObjectId(1), PlayerId(0)); + let mut events = Vec::new(); + clash::resolve(&mut state, &ability, &mut events).expect("clash resolves"); + + match &state.waiting_for { + WaitingFor::ClashChooseOpponent { + player, candidates, .. + } => { + assert_eq!(*player, PlayerId(0)); + // TOTAL EQUALITY, not `contains`: exclusion AND identity in one assertion. + assert_eq!( + candidates, + &vec![PlayerId(3), PlayerId(4)], + "phased-out P1 and eliminated P2 are out; both valid opponents are in" + ); + } + other => panic!("expected ClashChooseOpponent, got {other:?}"), + } + } + /// CR 701.30b: "Clash with an opponent" lets the clashing player CHOOSE the /// opponent. With two or more opponents the engine must pause on /// `ClashChooseOpponent` (offering every opponent) instead of silently diff --git a/crates/engine/src/game/effects/proliferate.rs b/crates/engine/src/game/effects/proliferate.rs index a5503083d7..e30320a60a 100644 --- a/crates/engine/src/game/effects/proliferate.rs +++ b/crates/engine/src/game/effects/proliferate.rs @@ -62,8 +62,13 @@ fn collect_proliferate_eligible(state: &GameState) -> Vec { .map(|id| TargetRef::Object(*id)) .collect(); + // CR 701.34a: proliferate "means to choose any number of permanents and/or players + // that have a counter" — a CHOICE, not a target (CR 115.10a), so the seat is judged by + // the existence authority and NOT by the targeting-only exclusions. for player in &state.players { - if !proliferatable_player_counters(player).is_empty() { + if !proliferatable_player_counters(player).is_empty() + && crate::game::players::player_exists_for_choice(state, player.id) + { eligible.push(TargetRef::Player(player.id)); } } @@ -623,6 +628,80 @@ mod tests { } } + /// R4a — CR 701.34a + CR 102.1 + the CR 702.26b MIRROR: the proliferate offer is a + /// production-observable MINT, and item 1 changes what it publishes. A seat that has + /// left the game, and a seat that is phased out, are not among the "permanents and/or + /// players" a proliferate choice may range over, however many counters they carry. + /// + /// THE ELIMINATED HALF IS STRICTLY LIVE, independent of phasing: at HEAD this seam had + /// ZERO existence conjuncts of any kind, so a poisoned seat that had already lost the + /// game was still offered to the chooser. + /// + /// TOTAL EQUALITY, never `!contains` — exclusion AND identity in one assertion. Four + /// discriminators ride on the one `assert_eq!`: + /// * P0 IN — the offer still fires and still reaches valid seats (the reach-guard: + /// `drive_single_proliferate_action` publishes NO prompt at all when the eligible + /// set is empty, so an exclusion-only row could pass on an offer that never fired); + /// * P1 OUT by phasing, P2 OUT by elimination — the two behaviour changes; + /// * P3 IN — a valid seat is not lost along with them; + /// * P4 OUT for having no counters — the COUNTER-DISCRIMINATION control, which proves + /// the list is "seats with counters, narrowed by existence" and not "every seat". + /// + /// REVERT-PROBE: drop the `player_exists_for_choice` conjunct ⇒ P1 and P2 reappear ⇒ + /// FAILS. NARROWER PROBE: replace it with bare `is_alive` ⇒ P1 alone reappears ⇒ FAILS, + /// which separates the phasing half from the elimination half. + #[test] + fn proliferate_offer_excludes_eliminated_and_phased_out_seats_and_keeps_the_rest() { + use crate::types::format::FormatConfig; + + let mut state = GameState::new(FormatConfig::standard(), 5, 42); + let mut events = Vec::new(); + + // Every seat but P4 is counter-eligible, so EXISTENCE is the only thing that can + // exclude P1 and P2 below. + for seat in [0usize, 1, 2, 3] { + state.players[seat].poison_counters = 1; + } + + // Setup anti-vacuity, asserted before anything is measured: the production APIs + // report what they transitioned, so a silent no-op fails loudly here. + let transitioned = + crate::game::phasing::phase_out_player(&mut state, PlayerId(1), &mut events); + assert_eq!( + transitioned, + vec![PlayerId(1)], + "phase_out_player must actually transition P1" + ); + assert!( + state.players[1].is_phased_out(), + "P1 must read as phased out" + ); + crate::game::elimination::eliminate_player(&mut state, PlayerId(2), &mut events); + assert!(state.players[2].is_eliminated, "P2 must read as eliminated"); + assert!( + state.players[1].poison_counters > 0 && state.players[2].poison_counters > 0, + "both excluded seats must still CARRY counters, or the counter filter would \ + drop them first and this row would never reach the existence conjunct" + ); + + let ability = make_proliferate_ability(); + let mut events = Vec::new(); + resolve(&mut state, &ability, &mut events).unwrap(); + + let WaitingFor::ProliferateChoice { eligible, .. } = &state.waiting_for else { + panic!("expected ProliferateChoice, got {:?}", state.waiting_for); + }; + assert_eq!( + eligible, + &vec![ + TargetRef::Player(PlayerId(0)), + TargetRef::Player(PlayerId(3)), + ], + "the offer ranges over counter-carrying seats that still exist: P1 is phased \ + out, P2 has left the game, P4 has no counters" + ); + } + #[test] fn proliferate_includes_players_with_generic_player_counters() { let mut state = GameState::new_two_player(42); diff --git a/crates/engine/src/game/effects/separate_piles.rs b/crates/engine/src/game/effects/separate_piles.rs index 7916abc32f..6b52a0e42f 100644 --- a/crates/engine/src/game/effects/separate_piles.rs +++ b/crates/engine/src/game/effects/separate_piles.rs @@ -226,11 +226,15 @@ fn resolve_revealed_from_library_top( }); // CR 608.2d + CR 700.3: "An opponent" — the controller chooses which opponent - // performs the partition. With a single opponent the choice is trivial. + // performs the partition. With a single opponent the choice is trivial. A CHOICE, + // not a target (CR 115.10a): existence authority only, no targeting exclusions. + // `p.id != controller` stays — opponent SCOPE, not legality. let candidates: Vec = state .players .iter() - .filter(|p| p.id != controller && !p.is_eliminated) + .filter(|p| { + p.id != controller && crate::game::players::player_exists_for_choice(state, p.id) + }) .map(|p| p.id) .collect(); @@ -301,11 +305,15 @@ fn resolve_exiled_this_way( } // CR 608.2d + CR 700.3: "An opponent" — the controller chooses which - // opponent performs the partition (trivial in two-player). + // opponent performs the partition (trivial in two-player). A CHOICE, not a target + // (CR 115.10a): existence authority only. The SECOND pile-source mint of this + // variant; it must narrow identically to the `RevealedFromLibraryTop` mint above. let candidates: Vec = state .players .iter() - .filter(|p| p.id != controller && !p.is_eliminated) + .filter(|p| { + p.id != controller && crate::game::players::player_exists_for_choice(state, p.id) + }) .map(|p| p.id) .collect(); @@ -561,6 +569,156 @@ mod tests { } } + /// R4k — CR 608.2d + CR 700.3: *"an opponent"* separates the piles, and WHICH opponent + /// is the controller's CHOICE (CR 115.10a), not a target. Both pile-source mints of + /// `SeparatePilesChooseOpponent` must narrow identically: a phased-out seat (the + /// CR 702.26b MIRROR) and a departed seat (CR 800.4 + CR 102.1) are not choosable. + /// + /// TWO ARMS, ONE PER MINT, because the two are separate code paths that were changed + /// separately — restoring either inline filter alone must flip its own arm. Neither is + /// reachable from the file's existing row: `make_an_example_ability` uses + /// `PileSource::Battlefield`, which dispatches to `resolve_battlefield` and reaches + /// neither site. + /// + /// FIVE SEATS: both mints publish only when `candidates.len() >= 2`, so with fewer + /// surviving opponents the resolver takes the single-opponent auto-partition branch and + /// publishes `SeparatePilesPartition` instead — an exclusion-only assertion would then + /// pass without the routed code ever running. Asserting the published variant IS the + /// reach-guard. Pre-fix value measured, not assumed: `[P1, P3, P4]`. + /// + /// REVERT-PROBE: restore either `.filter(|p| p.id != controller && !p.is_eliminated)` + /// ⇒ P1 reappears in that arm ⇒ that arm's total equality FAILS. + #[test] + fn separate_piles_offer_excludes_a_phased_out_opponent_at_both_pile_sources() { + use crate::types::format::FormatConfig; + + fn board() -> GameState { + let mut state = GameState::new(FormatConfig::standard(), 5, 42); + let mut setup_events = Vec::new(); + // Setup anti-vacuity, asserted before anything is measured. + let transitioned = + crate::game::phasing::phase_out_player(&mut state, PlayerId(1), &mut setup_events); + assert_eq!( + transitioned, + vec![PlayerId(1)], + "phase_out_player must actually transition P1" + ); + assert!( + state.players[1].is_phased_out(), + "P1 must read as phased out" + ); + crate::game::elimination::eliminate_player(&mut state, PlayerId(2), &mut setup_events); + assert!(state.players[2].is_eliminated, "P2 must read as eliminated"); + state + } + + fn pile_ability( + source_id: ObjectId, + controller: PlayerId, + ps: PileSource, + ) -> ResolvedAbility { + ResolvedAbility::new( + Effect::SeparateIntoPiles { + partition_subject: VoterScope::EachOpponent, + object_filter: TargetFilter::Typed( + crate::types::ability::TypedFilter::creature(), + ), + chooser: PlayerScope::Controller, + chosen_pile_effect: sacrifice_sub(), + pile_source: ps, + unchosen_pile_effect: None, + }, + Vec::new(), + source_id, + controller, + ) + } + + // ARM 1 — site 12, `RevealedFromLibraryTop`. At least one library card is staged, or + // `reveal_count == 0` short-circuits before the candidate derivation runs. + { + let mut state = board(); + let caster = state.players[0].id; + let card = crate::game::zones::create_object( + &mut state, + CardId(11), + caster, + "Top Card".to_string(), + Zone::Library, + ); + assert!( + state.players[0].library.contains(&card), + "reach-guard: the reveal needs a library card, or the resolver returns \ + before it ever derives candidates" + ); + + let ability = pile_ability( + ObjectId(100), + caster, + PileSource::RevealedFromLibraryTop { count: 1 }, + ); + let mut events = Vec::new(); + resolve(&mut state, &ability, &mut events).expect("resolves"); + match &state.waiting_for { + WaitingFor::SeparatePilesChooseOpponent { + player, candidates, .. + } => { + assert_eq!(*player, caster); + assert_eq!( + *candidates, + vec![PlayerId(3), PlayerId(4)], + "RevealedFromLibraryTop mint: phased-out P1 and eliminated P2 out, \ + both valid opponents in" + ); + } + other => panic!("expected SeparatePilesChooseOpponent, got {other:?}"), + } + } + + // ARM 2 — site 13, `ExiledThisWay`. The eligible set comes from the source's exile + // links, so one linked exiled card is staged or the resolver returns early. + { + let mut state = board(); + let caster = state.players[0].id; + let source_id = ObjectId(101); + let exiled = crate::game::zones::create_object( + &mut state, + CardId(12), + caster, + "Exiled Card".to_string(), + Zone::Exile, + ); + state.exile_links.push(crate::types::game_state::ExileLink { + exiled_id: exiled, + source_id, + kind: crate::types::game_state::ExileLinkKind::TrackedBySource, + }); + assert!( + !crate::game::players::linked_exile_cards_for_source(&state, source_id).is_empty(), + "reach-guard: the ExiledThisWay eligible set must be non-empty, or the \ + resolver returns before it ever derives candidates" + ); + + let ability = pile_ability(source_id, caster, PileSource::ExiledThisWay); + let mut events = Vec::new(); + resolve(&mut state, &ability, &mut events).expect("resolves"); + match &state.waiting_for { + WaitingFor::SeparatePilesChooseOpponent { + player, candidates, .. + } => { + assert_eq!(*player, caster); + assert_eq!( + *candidates, + vec![PlayerId(3), PlayerId(4)], + "ExiledThisWay mint: phased-out P1 and eliminated P2 out, both \ + valid opponents in" + ); + } + other => panic!("expected SeparatePilesChooseOpponent, got {other:?}"), + } + } + } + /// CR 700.3d: An opponent with no creatures is recorded as an empty /// `PileResult` and skipped. #[test] diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index 333572ed7b..dd8cf565a1 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -1329,12 +1329,13 @@ fn pinned_decisions_to_points( pins: &[crate::analysis::decision_template::PinnedDecision], state: &GameState, controller: PlayerId, -) -> Vec { +) -> Option> { use crate::analysis::decision_template::{DecisionPoint, DecisionPointKind, PinnedDecision}; - pins.iter() - .filter_map(|pin| match pin { + let mut points = Vec::with_capacity(pins.len()); + for pin in pins { + let point = match pin { // CR 603.3b: trigger ordering is not a loop-declaration choice — no read-side peer. - PinnedDecision::Order { .. } => None, + PinnedDecision::Order { .. } => continue, // CR 702.51a: the untapped creatures the controller may tap for convoke. Sorted by // the public inner id: `im::HashMap::values()` order is nondeterministic and this Vec // serializes to the wire (cf. `resolve_source`'s `min_by_key` for the same reason). @@ -1346,10 +1347,10 @@ fn pinned_decisions_to_points( .map(|o| o.id) .collect(); tappable.sort_by_key(|id| id.0); - Some(DecisionPoint { + DecisionPoint { slot: slot.clone(), kind: DecisionPointKind::ConvokeTaps { tappable }, - }) + } } // FIX-1 (B1): reify the recorded fixed in-cycle choices. The drive replays these SAME // pins via `decision_template::resolve` (CR 608.2b ByIdentity live re-binding), so the @@ -1357,14 +1358,23 @@ fn pinned_decisions_to_points( // CR 608.2b: resolve each pinned target to its live legal `TargetRef` — the pinned // identity IS the singleton legal set (a fixed declinable ∞ offer, no FE re-selection). PinnedDecision::Targets { slot, targets } => { + // CR 732.2a: a proposal must describe a sequence "that may be legally taken + // based on the current game state". If ANY pinned target no longer resolves, + // the offer must be WITHDRAWN, not published — the `?` below is that + // withdrawal. `filter_map`ping the failure away instead would publish a point + // with a short `legal_targets` under `min_targets = targets.len()`: a + // self-inconsistent, UNDECLARABLE point that fails downstream as + // `IllegalPinValue`/`UnknownChoice` rather than as "there is no offer". + // Dropping the point entirely is also wrong — it would let + // `predictability_gate`'s coverage check pass trivially. let legal_targets: Vec = targets .iter() - .filter_map(|t| { + .map(|t| { crate::analysis::decision_template::resolve_target_ref(t, slot, 0, state) }) - .collect(); + .collect::>>()?; let count = targets.len().min(u32::MAX as usize) as u32; - Some(DecisionPoint { + DecisionPoint { slot: slot.clone(), kind: DecisionPointKind::Targets { legal_targets, @@ -1372,19 +1382,19 @@ fn pinned_decisions_to_points( max_targets: count, ordered: true, }, - }) + } } // CR 608.2d: the latched mana color — a read-only fixed point (no legal set to bound). - PinnedDecision::ManaColor { slot, color } => Some(DecisionPoint { + PinnedDecision::ManaColor { slot, color } => DecisionPoint { slot: slot.clone(), kind: DecisionPointKind::ManaColor { color: *color }, - }), + }, PinnedDecision::Mode { slot, indices } => { let mut available_modes = indices.clone(); available_modes.sort_unstable(); available_modes.dedup(); let count = indices.len().min(u32::MAX as usize) as u32; - Some(DecisionPoint { + DecisionPoint { slot: slot.clone(), kind: DecisionPointKind::Mode { available_modes, @@ -1396,18 +1406,20 @@ fn pinned_decisions_to_points( .collect::>() .len(), }, - }) + } } - PinnedDecision::MayChoice { slot, .. } => Some(DecisionPoint { + PinnedDecision::MayChoice { slot, .. } => DecisionPoint { slot: slot.clone(), kind: DecisionPointKind::MayChoice, - }), - PinnedDecision::UnlessBreak { slot, .. } => Some(DecisionPoint { + }, + PinnedDecision::UnlessBreak { slot, .. } => DecisionPoint { slot: slot.clone(), kind: DecisionPointKind::UnlessBreak, - }), - }) - .collect() + }, + }; + points.push(point); + } + Some(points) } /// CR 115.2 + CR 732.2a: does the ability's HEAD effect declare the "target opponent" PLAYER @@ -1616,10 +1628,16 @@ pub(crate) fn entry_publishes_pin_slots( /// exist. The legal set is the one `ability_utils::build_target_slots` built for the /// accepted announcement slot, carried through verbatim — so the SAME authority answers /// how many choices exist and which targets each admits. That builder routes this filter -/// shape to the native authority [`crate::game::targeting::find_legal_targets`] -/// (`ability_utils.rs:4382-4402`: no ability-context ref, no relative controller), which -/// already excludes eliminated players (CR 800.4a, `targeting.rs:200-201`) — never a -/// declaration, so the offer still cannot ratify its own pin. Note the enumeration context +/// shape to the native authority [`crate::game::targeting::find_legal_targets`] (via +/// `ability_utils::legal_targets_for_ability_filter_uncapped`'s `relative_kind.is_none()` +/// / `!needs_ability_context` arm), whose empty-`Typed` players branch already excludes +/// departed seats — CR 800.4 (multiplayer games continue after players leave) + CR 102.1 +/// (a player is one of the people in the game): a seat that has left the game is no longer +/// one of them, so it is not choosable by anything; player phasing per the CR 702.26b +/// MIRROR (permanent-phasing text, NEVER authority for players). NOT CR 800.4a, which +/// governs a departed player's objects, control effects and priority — not the legality of +/// a choice. Never a declaration, so the offer still cannot ratify its own pin. Note the +/// enumeration context /// shifts with the authority: it is now the ABILITY's own `controller`/`source_id` /// (CR 601.2c — the ability's controller announces its targets) rather than the offer's /// `proposer` and the stack entry's `source_id`. @@ -1699,8 +1717,8 @@ pub fn bounded_cycle_pin_slots( /// `iteration_count` and `max_iterations` are separate inputs on purpose: the first is the /// SUGGESTION the frontend seeds its picker with, the second is the LEGAL CEILING the /// declared-count check enforces. A producer that cannot compute a real bound passes -/// `MAX_SHORTCUT_CYCLES`, which is what every offer built today does — so the ceiling is -/// inert until a producer narrows it. +/// `MAX_SHORTCUT_CYCLES`. The bounded-cycle producer narrows it; the drain and object-growth +/// producers do not — so the ceiling is live for bounded offers only. fn build_shortcut_schema( points: Vec, iteration_count: crate::analysis::decision_template::IterationCount, @@ -2068,6 +2086,42 @@ fn shortcut_drive_period( .clamp(1, MAX_SHORTCUT_CYCLES) } +/// CR 732.2a: the index range the declare-time firewall must validate a pin over — the range +/// the ACCEPTED COUNT will actually drive, read off the two drive loops themselves: +/// `materialize_fixed_shortcut` drives `for i in 0..n` for a `Fixed(n)`, and +/// `apply_until_lethal_shortcut` drives whole periods for `UntilLethal`, whose length is +/// [`shortcut_drive_period`]. +/// +/// THIS IS NOT `shortcut_drive_period`, and the difference is the whole point of the fix. +/// That helper answers "how many cycles must one measurement aggregate" — a schedule property +/// with nothing to do with the declared count. Validating over it both ACCEPTED a pin whose +/// driven image leaves the offer's PUBLISHED legal set at an index the count reaches, and +/// REFUSED conforming declarations whose count is shorter than the schedule. +/// +/// NO CONSERVATIVE PADDING. Widening the range with `.max(shortcut_drive_period(..))` is +/// bug-preserving — it re-imports the schedule-derived period the invariant exists to remove, +/// and at a count of 1 over a length-2 rotation `Ok` is the CORRECT answer. Do not re-derive +/// and re-add that term. +/// +/// PRECONDITION, discharged at its call site: the count is already cap-checked, because +/// `handle_declare_shortcut` runs the `MAX_SHORTCUT_CYCLES` / `max_iterations` match ABOVE +/// the pin-validation block. Without that ordering a hostile `Fixed(4e9)` would become a +/// four-billion-iteration validation loop. Exactly ONE call site consumes this helper. +/// +/// Exhaustive over `IterationCount` with no wildcard, so a future variant build-breaks here +/// and forces a range decision instead of silently inheriting one. +fn shortcut_validated_range( + count: &crate::analysis::decision_template::IterationCount, + template: Option<&crate::analysis::decision_template::DecisionTemplate>, +) -> crate::analysis::decision_template::IterationIndex { + match count { + crate::analysis::decision_template::IterationCount::Fixed(n) => *n, + crate::analysis::decision_template::IterationCount::UntilLethal => { + shortcut_drive_period(template) + } + } +} + /// PR-7 Combo-UI Stage 2: the typed result of driving ONE whole loop-shortcut cycle on a /// clone. Exhaustive at both call sites (`materialize_fixed_shortcut`, `apply_until_lethal_ /// shortcut`) — no silent `_` that could crown or roll back on an unhandled outcome. @@ -3444,7 +3498,9 @@ fn try_offer_object_growth_shortcut( // times — it is materialized once as an unbounded axis — so it states no narrowed count // bound and keeps the global safety limit. let schema = build_shortcut_schema( - pinned_decisions_to_points(&schema_template.decisions, state, caster), + // CR 732.2a: an unresolvable pin WITHDRAWS the offer rather than publishing an + // undeclarable point — see `pinned_decisions_to_points`. + pinned_decisions_to_points(&schema_template.decisions, state, caster)?, shortcut_iteration_count(certificate.win_kind), MAX_SHORTCUT_CYCLES, ); @@ -3766,42 +3822,19 @@ fn handle_declare_shortcut( // any template the caller supplies is inert for the drive (the loop raises no target // prompt). This preserves the established `Fixed(N)` drain behavior (the resolve-firewall // materialize tests drive a synthetic pin against the empty drain schema). - if !offer.schema.points.is_empty() { - match &template { - Some(t) => { - let required: Vec = - offer.schema.points.iter().map(|p| p.slot.clone()).collect(); - let period = shortcut_drive_period(Some(t)); - if crate::analysis::decision_template::predictability_gate(t, &required).is_err() - || crate::analysis::decision_template::validate_pins( - offer.schema, - t, - period, - state, - ) - .is_err() - { - reject_shortcut_declaration(state, &mut result); - return Ok(result); - } - } - // CR 732.2a: a `template: None` declaration against a NON-EMPTY schema skips the - // validation above entirely — the pins the offer published are never checked. That - // is legitimate for exactly one drive shape: the object-growth route, which - // re-derives its template from `state.last_loop_action_sequence` (the same routing - // discriminant `materialize` dispatches on) and never reads `proposal.template`. - // With an EMPTY sequence there is nothing to re-derive from, so a pin-consuming - // drive would run with no pins at all — fail closed into the same manual-play - // handback the validation failure above uses. Both conjuncts are required: keying - // on `template.is_none()` alone breaks the shipped object-growth declarations. - None if state.last_loop_action_sequence.is_empty() => { - reject_shortcut_declaration(state, &mut result); - return Ok(result); - } - None => {} - } - } - // CR 732.2a SAFETY LIMIT (see MAX_SHORTCUT_CYCLES): reject an over-cap Fixed count at + // ⚠ ORDER IS LOAD-BEARING: the count cap runs BEFORE the pin validation below, because + // `shortcut_validated_range` derives the validated range FROM the declared count and so + // must not be handed an unchecked one — a `Fixed(4_000_000_000)` would otherwise become + // a four-billion-iteration validation loop. Observation-equivalence of the reorder is + // structural: every refusal arm in BOTH blocks lands on the same single authority + // (`reject_shortcut_declaration`), and `handle_declare_shortcut` pushes NO events at all, + // so no row can observe which block refused first. + // IMPLEMENTATION BUDGET BOUND (see MAX_SHORTCUT_CYCLES) — deliberately NOT labelled as a + // CR 732.2a constraint: the rules place no ceiling on how many times a shortcut may be + // repeated (CR 732.2a's own example runs to a million), so this ceiling is ours, not the + // game's. The label matters because a maintainer applying the CR 732.2a iff to a branch + // that wears a CR number will either trust it wrongly or delete it wrongly. Reject an + // over-cap Fixed count at // the single authority — BEFORE the proposal is built — into the same fail-closed // manual-play handback the pin validation above uses. This is THE catastrophic remote // vector: `Fixed(u32)` scalar-encodes up to ~4.3e9 cycles in ~10 bytes, sailing through @@ -3845,6 +3878,47 @@ fn handle_declare_shortcut( crate::analysis::decision_template::IterationCount::Fixed(_) | crate::analysis::decision_template::IterationCount::UntilLethal => {} } + if !offer.schema.points.is_empty() { + match &template { + Some(t) => { + let required: Vec = + offer.schema.points.iter().map(|p| p.slot.clone()).collect(); + // CR 732.2a: validate over the range the ACCEPTED COUNT will drive, not + // over the schedule's own period. `shortcut_drive_period` answers a + // different question (how many cycles one measurement must aggregate), and + // using it here both ACCEPTED a pin whose driven image leaves the published + // set at an index the count reaches, and REFUSED conforming declarations + // whose count is shorter than the schedule. + let validated_range = shortcut_validated_range(&count, Some(t)); + if crate::analysis::decision_template::predictability_gate(t, &required).is_err() + || crate::analysis::decision_template::validate_pins( + offer.schema, + t, + validated_range, + state, + ) + .is_err() + { + reject_shortcut_declaration(state, &mut result); + return Ok(result); + } + } + // CR 732.2a: a `template: None` declaration against a NON-EMPTY schema skips the + // validation above entirely — the pins the offer published are never checked. That + // is legitimate for exactly one drive shape: the object-growth route, which + // re-derives its template from `state.last_loop_action_sequence` (the same routing + // discriminant `materialize` dispatches on) and never reads `proposal.template`. + // With an EMPTY sequence there is nothing to re-derive from, so a pin-consuming + // drive would run with no pins at all — fail closed into the same manual-play + // handback the validation failure above uses. Both conjuncts are required: keying + // on `template.is_none()` alone breaks the shipped object-growth declarations. + None if state.last_loop_action_sequence.is_empty() => { + reject_shortcut_declaration(state, &mut result); + return Ok(result); + } + None => {} + } + } let proposal = crate::analysis::loop_check::ShortcutProposal { proposer: offer.proposer, predicted_winner: offer.predicted_winner, @@ -12922,13 +12996,68 @@ mod stage2_injector_tests { .read_to_string(&mut json) .expect("fixture inflates"); let envelope: serde_json::Value = serde_json::from_str(&json).expect("envelope parses"); - let raw: GameState = - serde_json::from_value(envelope["gameState"].clone()).expect("gameState deserializes"); - PersistedGameState::Raw(Box::new(raw)).into_game_state() + // Cross the dump through the PRODUCTION decoder rather than a bare `GameState` + // decode wrapped in `Raw`: `PersistedGameState`'s own `Deserialize` runs + // `reject_legacy_raw_prompt_authority` and `decode_persisted_resolution_state` + // first, so this helper exercises the chokepoint the server's `from_persisted` + // and WASM's `decode_restored_game_state` actually funnel through — including + // the CR 732.2a load-seam bound invariant. + // `.expect(..)`, not `?`: `into_game_state` returns `GameState`, not `Result`. + serde_json::from_value::(envelope["gameState"].clone()) + .expect("gameState deserializes through the production decoder") + .into_game_state() } const EMBLEM: ObjectId = ObjectId(541); + /// CR 601.2c + CR 115.1: the migrated fixture's `effect_kind` is not an assertion of + /// taste — it is exactly what the ANNOUNCEMENT AUTHORITY builds for this ability on + /// this board. `scripts/migrate-dump-fixture.sh` takes the value as an explicit + /// argument precisely so the engine, and never a jq name→variant table, stays the + /// authority for it; this row is what holds the script's operator to that. + /// + /// It is also the row that would have caught upstream #6718 (`0468df1f4`, which added + /// `TargetSelectionSlot::effect_kind` with no `#[serde(default)]`) the day it landed: + /// `TargetSelectionSlot` derives `PartialEq`/`Eq`, so this compares ALL five fields, + /// not just the migrated one. + /// + /// REVERT-PROBE: re-run the migration script with `--effect-kind NoOp` ⇒ the stamped + /// slot stops matching what `build_target_slots` derives ⇒ FAILS. This assertion is + /// the SOLE guard on the migrated value — nothing on the drive path reads the field + /// (its only production readers are the two `target_intent` calls in the interaction + /// DTO projection), so a wrong value cannot move the game and must be caught by a + /// reading test instead of by a behavioural one. + #[test] + fn dellian_dump_slots_are_what_the_announcement_authority_builds() { + let state = load_dellian_dump(); + let pt = state + .pending_trigger + .as_ref() + .expect("dellian dump pauses on a pending trigger"); + // `let … else` rather than `if let`: it fails LOUDLY if the dump ever restores + // into some other prompt, which would otherwise make the assertion unreachable + // rather than false. + let WaitingFor::TriggerTargetSelection { target_slots, .. } = &state.waiting_for else { + panic!( + "dellian dump must restore into TriggerTargetSelection, got {:?}", + state.waiting_for + ); + }; + // Reach-guard: an empty slot vector would satisfy a total-equality assertion + // vacuously on both sides. + assert_eq!( + target_slots.len(), + 1, + "the dellian dump publishes exactly one target slot" + ); + assert_eq!( + &crate::game::ability_utils::build_target_slots(&state, &pt.ability) + .expect("the emblem's drain ability builds its announcement slots"), + target_slots, + "the restored dump's slots must equal what the announcement authority builds" + ); + } + /// CR 732.2a: the offer publishes the SET of open per-iteration choices — one point per /// SOURCE, not one per stack ENTRY. /// @@ -12993,6 +13122,19 @@ mod stage2_injector_tests { /// raises `RecastAbort` ⇒ FAILS; drop the incarnation conjunct ⇒ the stale-pin arm is /// accepted ⇒ FAILS. The negative arms are paired with a positive on the SAME board, so /// neither an always-accept nor an always-abort matcher survives. + /// + /// R3 — CR 608.2b + CR 113.7a: this row is ALSO the witness that a pin's SEAT legality + /// does not depend on recovering the SOURCE's characteristics. The choice authority + /// `game::players::player_exists_for_choice` takes no source parameter at all, by + /// design: a command-zone emblem has no battlefield LKI to recover, and if seat + /// legality consulted the source, a pin raised by such a source would be invalidated + /// for a reason the rules do not state. The claim is STRUCTURAL — there is no source + /// parameter to revert — so what makes it checkable is the PAIR: this row proves a + /// source with no recoverable LKI still answers its prompt, and + /// `analysis::decision_template::tests::a_dead_player_pin_is_illegal`'s LIVE half + /// proves the seat check is nonetheless doing work on that same pin kind. (Contrast + /// `targeting::player_is_legal_target`, which DOES take a source — because targeting + /// exclusions are source-relative, CR 702.11c, and choice legality is not.) #[test] fn a_command_zone_pin_answers_a_real_restored_boards_prompt() { let state = load_dellian_dump(); @@ -13130,9 +13272,13 @@ mod kilo_interruptibility_tests { // (`migrate_transient_loop_sequence`) drops the dump's 6 stale pinless steps on load — // exactly as the integration helper does. Deserializing directly would bypass the hook, // leaving the stale prefix so the live drive yields an 8-step (not 2-step) sequence. - let raw: GameState = - serde_json::from_value(envelope["gameState"].clone()).expect("gameState deserializes"); - PersistedGameState::Raw(Box::new(raw)).into_game_state() + // Decoding AS `PersistedGameState` (rather than decoding a bare `GameState` and + // wrapping it) additionally routes the dump through + // `reject_legacy_raw_prompt_authority` + `decode_persisted_resolution_state`. + // `.expect(..)`, not `?`: `into_game_state` returns `GameState`, not `Result`. + serde_json::from_value::(envelope["gameState"].clone()) + .expect("gameState deserializes through the production decoder") + .into_game_state() } fn beat_actor(state: &GameState) -> PlayerId { @@ -13468,6 +13614,192 @@ mod kilo_interruptibility_tests { suppress a genuine re-detection re-offering the loop (CR 732.2a / CR 732.2b)" ); } + + /// Plant ONE extra `Targets` pin into the recorded period's first step, on a slot that + /// no prompt in the replay answers. That is what makes these three rows isolate the + /// OFFER-BUILDER: the drive never consults the planted pin, while + /// `pinned_decisions_to_points` — which builds its points from exactly + /// `build_recast_template(&seq[0]).decisions` — always does. + fn plant_offer_pin(state: &mut GameState, pin: TargetPin) -> GameState { + let mut planted = state.clone(); + let step = planted + .last_loop_action_sequence + .first_mut() + .expect("reach-guard: the recorded period has a first step to plant into"); + step.pins.push(PinnedDecision::Targets { + slot: crate::analysis::decision_template::DecisionSlot { + source: YieldTarget::ThisObject { + source_id: KILO, + incarnation: None, + trigger_description: None, + }, + // An index no live prompt publishes, so only the point-builder reads it. + index: 99, + }, + targets: vec![pin], + }); + planted + } + + /// R4b — CR 732.2a: *"a sequence of game choices ... that may be legally taken based on + /// the current game state"*. If a pinned target no longer resolves, there IS no such + /// sequence, so the offer must be WITHDRAWN — not published with a short legal set. + /// + /// Before the fix, `pinned_decisions_to_points` `filter_map`ped the unresolvable pin out + /// of `legal_targets` while keeping `min_targets = targets.len()`, publishing a point + /// that no legal declaration could satisfy: the player is offered a shortcut they cannot + /// take, and the failure surfaces later as `IllegalPinValue` instead of as "no offer". + /// + /// MATCHED PAIR on one board, one variable — the planted pin's identity: + /// * live object ⇒ the point resolves ⇒ the offer FIRES (the reach-guard: it proves + /// the plant itself does not break the drive, so the negative arm's `None` is the + /// withdrawal and not a broken fixture); + /// * absent object ⇒ the offer is WITHDRAWN. + /// + /// REVERT-PROBE: restore the `filter_map` (drop the `?`) ⇒ the negative arm publishes an + /// undeclarable point instead of withdrawing ⇒ FAILS. Reachable TODAY and independent of + /// item 1: this arm's pin is `ByIdentity`, and no player legality is involved. + #[test] + fn an_unresolvable_identity_pin_withdraws_the_offer() { + let mut driven = load_migrated_dump(); + drive_one_live_cycle(&mut driven); + let base = at_priority_window(driven); + + let live = plant_offer_pin( + &mut base.clone(), + TargetPin::ByIdentity(YieldTarget::ThisObject { + source_id: KILO, + incarnation: None, + trigger_description: None, + }), + ); + assert!( + try_offer_object_growth_shortcut(&live).is_some(), + "reach-guard: a planted pin that RESOLVES leaves the offer intact, so the \ + negative arm below is the withdrawal and not the plant" + ); + + let mut dangling = plant_offer_pin( + &mut base.clone(), + TargetPin::ByIdentity(YieldTarget::ThisObject { + source_id: ObjectId(999_999), + incarnation: None, + trigger_description: None, + }), + ); + assert!( + !dangling.objects.contains_key(&ObjectId(999_999)), + "setup: the planted identity must genuinely be absent from the board" + ); + assert!( + try_offer_object_growth_shortcut(&dangling).is_none(), + "CR 732.2a: a pin that cannot resolve withdraws the offer" + ); + // The withdrawal is the whole point: nothing was published to be declared. + assert!(matches!(dangling.waiting_for, WaitingFor::Priority { .. })); + dangling.last_loop_action_sequence.clear(); + } + + /// R4d — the same withdrawal, on the OTHER end of the invariant: a `TargetPin::Player` + /// aimed at a seat that has left the game (CR 800.4 + CR 102.1) no longer resolves, so + /// the offer is withdrawn rather than ratifying its own pin. + /// + /// This is the offer-builder half of the pair whose MINT half is + /// `effects::proliferate`'s R4a row: the two ends of the invariant that a Player pin + /// must never reach materialization validated only against a legal set derived from the + /// pins themselves. `pinned_decisions_to_points` derives its legal sets FROM the pins, + /// so on this route the seat's existence check inside `resolve_target` is the only + /// authority there is. + /// + /// MATCHED PAIR, one variable (`is_eliminated`): live seat ⇒ offer fires; departed seat + /// ⇒ offer withdrawn. REVERT-PROBE: drop the existence conjunct in + /// `players::player_exists_for_choice` ⇒ the departed seat resolves ⇒ the offer is + /// published ⇒ FAILS. + #[test] + fn a_departed_player_pin_withdraws_the_offer() { + let mut driven = load_migrated_dump(); + drive_one_live_cycle(&mut driven); + let base = at_priority_window(driven); + let victim = PlayerId(1); + + let live = plant_offer_pin(&mut base.clone(), TargetPin::Player(victim)); + assert!( + !live.players[1].is_eliminated, + "reach-guard: the seat starts in the game" + ); + assert!( + try_offer_object_growth_shortcut(&live).is_some(), + "reach-guard: a Player pin on a LIVE seat leaves the offer intact" + ); + + let mut departed = live.clone(); + departed.players[1].is_eliminated = true; + assert!( + try_offer_object_growth_shortcut(&departed).is_none(), + "a Player pin aimed at a departed seat withdraws the offer (CR 732.2a)" + ); + } + + /// R2b — the CR 115.10a boundary, enforced at the OFFER level rather than explained in a + /// comment. A shrouded seat (CR 702.18a) is un-TARGETable, and this row proves the + /// offer-builder still publishes it as a CHOICE: the point carries it in + /// `legal_targets`, and the offer FIRES. + /// + /// This is the enforcement half of the pair whose explanation half is the site-4 comment + /// and whose seam-level half is + /// `analysis::decision_template::tests::a_shrouded_seat_is_untargetable_yet_still_ + /// choosable_at_the_pin_recheck`. Without it, re-introducing target-scoped conjuncts at + /// site 4 would silently restore the over-veto at the one seam that publishes an offer. + /// + /// REVERT-PROBE: route `resolve_target`'s `TargetPin::Player` arm through + /// `targeting::player_is_legal_target` ⇒ the shrouded seat stops resolving ⇒ the offer is + /// WITHDRAWN ⇒ both assertions FAIL. The paired positive that keeps this from passing on + /// an un-shrouded board is the shroud reach-guard asserted first. + #[test] + fn a_shrouded_player_pin_is_still_published_by_the_offer_builder() { + use crate::types::statics::StaticMode; + + let mut driven = load_migrated_dump(); + drive_one_live_cycle(&mut driven); + let mut base = at_priority_window(driven); + let victim = PlayerId(1); + + // P1 gains shroud, through the single TCE construction authority — the same route + // a resolved "target player gains shroud until end of turn" effect takes. + base.add_transient_continuous_effect( + KILO, + P0, + crate::types::ability::Duration::UntilEndOfTurn, + crate::types::ability::TargetFilter::SpecificPlayer { id: victim }, + vec![ + crate::types::ability::ContinuousModification::AddStaticMode { + mode: StaticMode::Shroud, + }, + ], + None, + ); + crate::game::layers::flush_layers(&mut base); + + // Reach-guard, and the paired positive: the shroud actually bites at the TARGET + // seam. Without this the row would pass on a board with no shroud at all. + assert!( + crate::game::static_abilities::player_cannot_be_targeted_by(&base, victim, KILO, P0), + "CR 702.18a: the planted shroud must make the seat un-targetable" + ); + + let planted = plant_offer_pin(&mut base, TargetPin::Player(victim)); + let (_, schema) = try_offer_object_growth_shortcut(&planted) + .expect("CR 115.10a: a shrouded seat is still CHOOSABLE, so the offer fires"); + assert!( + schema.points.iter().any(|point| matches!( + &point.kind, + crate::analysis::decision_template::DecisionPointKind::Targets { legal_targets, .. } + if legal_targets.contains(&TargetRef::Player(victim)) + )), + "the published point carries the shrouded seat: exclusion belongs to the TARGET \ + seam, not to this one" + ); + } } /// FIX ROUND 1 (MED-2) — a named negative row per [`try_offer_bounded_cycle_shortcut`] conjunct diff --git a/crates/engine/src/game/filter.rs b/crates/engine/src/game/filter.rs index ceb819efee..5a807f3515 100644 --- a/crates/engine/src/game/filter.rs +++ b/crates/engine/src/game/filter.rs @@ -2179,9 +2179,17 @@ fn filter_inner_for_object( if source_controller == Some(obj_ctrl) { return false; } - // CR 102.3 + CR 800.4a: A player who has left the game is - // not an opponent; cards in their zones are not legal - // targets (Captain N'ghathrod class). + // Two claims, two authorities — kept apart deliberately. + // SEAT: CR 800.4 + CR 102.1 — a player who has left the game is + // no longer one of the people in the game, so they are not an + // opponent. (CR 102.3 is scoped to games BETWEEN TEAMS and does + // not define "opponent" in a free-for-all, which is the board + // this seam serves; the engine's free-for-all authority is + // `topology::is_opponent`.) + // OBJECTS: CR 800.4a — "all objects owned by that player leave + // the game" — so cards in their zones are not legal targets + // (Captain N'ghathrod class). This is the half CR 800.4a really + // governs. if !super::players::is_alive(state, obj_ctrl) { return false; } diff --git a/crates/engine/src/game/interaction.rs b/crates/engine/src/game/interaction.rs index 0d769c6c2f..013d2b7260 100644 --- a/crates/engine/src/game/interaction.rs +++ b/crates/engine/src/game/interaction.rs @@ -2448,7 +2448,9 @@ fn loop_shortcut_projection( // CR 732.2a (MagicCompRules.txt:6372): the picker's ceiling is the offer's own // CR 704 bound, never the raw global safety limit — a count above it would // specify a sequence containing an elimination, which is a conditional action. - // The engine owns this number; the frontend renders it. + // The engine owns this number; the frontend renders it. An unnarrowed offer + // states `MAX_SHORTCUT_CYCLES`; a bounded offer states less. Either way this is + // the offer's own bound, clamped at the same authority. // // CR 704.5a (MagicCompRules.txt:5492): `elimination_bounds` returns `0` to // mean "no legal repetition exists and the caller must not offer". A @@ -8836,6 +8838,18 @@ fn materialize_loop_shortcut_response( .iter() .map(|point| point.slot.clone()) .collect::>(); + // TRAP REMOVAL, NOT A BUG FIX — recorded so the next reader does not "correct" this + // literal into `shortcut_validated_range(..)` and then wonder what changed. This + // decoder emits only `Player` and `ByIdentity` pins, both of which resolve + // INDEPENDENTLY of `iteration`, so validating at index 0 alone is correct by + // construction here: a wider range would re-resolve the same pin to the same value. + // It is also strictly weaker than the declare-path firewall rather than a second + // hole — `1` is a prefix of any range that path validates. It cannot mint a + // `Fixed(0)` either: the count-spec projection's `Fixed` arm hard-codes `min: 1` + // beside its `debug_assert!(schema.max_iterations >= 1, ..)` and its clamp. + // ⚠ Navigation trap: `shortcut_drive_period`'s doc enumerates its own consumers, and + // this site consumes `validate_pins` WITHOUT consuming that helper, so it is + // invisible from there. if predictability_gate(template, &required).is_err() || validate_pins(authoritative_schema, template, 1, authoritative_state).is_err() { diff --git a/crates/engine/src/game/phasing.rs b/crates/engine/src/game/phasing.rs index 1de5f6d815..62d27312f6 100644 --- a/crates/engine/src/game/phasing.rs +++ b/crates/engine/src/game/phasing.rs @@ -293,11 +293,12 @@ pub fn execute_untap_step_phasing(state: &mut GameState, events: &mut Vec bool { .any(|p| p.id == player && !p.is_eliminated) } +/// May this seat be CHOSEN AT ALL — whether the choice is a target (CR 115.1) or not +/// (CR 115.10a)? The EXISTENCE half only. +/// +/// CR 800.4: "multiplayer games can continue after one or more players have left the +/// game" — a departed seat is no longer one of CR 102.1's "people in the game", so it is +/// not choosable by anything. +/// +/// CR 702.26b as an explicit MIRROR, never as authority: 702.26b is PERMANENT phasing +/// ("a phased-out permanent is treated as though it does not exist"); the engine's +/// PLAYER-level phased-out flag mirrors that wording. The MIRROR label is load-bearing — +/// 702.26b is not a rule about players and must not be read as one. +/// +/// NOTE the CR set deliberately does NOT include CR 800.4a: that rule governs a departed +/// player's OBJECTS, control effects and priority — not the legality of a choice. +/// +/// TARGETED choices need MORE than this: see [`crate::game::targeting::player_is_legal_target`], +/// which adds the targeting-only exclusions. CR 115.10a is the boundary — a seat that is +/// merely *chosen* (CR 701.34a proliferate, CR 701.30b clash, CR 702.132a assist) is not a +/// target, so those exclusions must NOT be applied here. Applying them would refuse a +/// legal choice, which is exactly the over-veto class this split exists to prevent. +/// +/// This is the choke point for the CHOICE-ENUMERATION class: every seam that materializes +/// a list of seats offered to a player to pick from routes through this function (directly +/// or through [`choosable_opponents`]), so the enumerating sides cannot drift apart. +pub fn player_exists_for_choice(state: &GameState, player: PlayerId) -> bool { + is_alive(state, player) + && !state + .players + .iter() + .any(|p| p.id == player && p.is_phased_out()) +} + /// CR 607.2d / CR 607.2m (by analogy): true iff `player`'s durable per-player /// `chosen_attributes` records a `ChosenAttribute::Label` equal to `label` /// (case-insensitive). Single authority consulted by every "player who last @@ -166,6 +198,27 @@ pub fn opponents(state: &GameState, player: PlayerId) -> Vec { .collect() } +/// CR 115.10a: the opponents of `player` that may be CHOSEN — [`opponents`] narrowed by +/// [`player_exists_for_choice`]. +/// +/// Opponent-hood itself is whatever [`opponents`] says (CR 102.2 in a two-player game, +/// CR 102.3 in a game between teams; a free-for-all has no single defining rule and the +/// engine's authority is `topology::is_opponent`). This function adds no relation — only +/// the existence conjunct. +/// +/// This is a SIBLING of [`opponents`], never a conjunct pushed INTO it. `opponents` is the +/// seat-RELATION authority, consumed across the whole engine by combat, targeting, +/// visibility and replacement — each governed by its own CR section — so widening it +/// would silently change every one of them. Same two-layer split as +/// [`crate::game::targeting::player_is_legal_target`] vs [`player_exists_for_choice`]: the +/// CHOICE seam gets the conjunct, the RELATION seam does not. +pub fn choosable_opponents(state: &GameState, player: PlayerId) -> Vec { + opponents(state, player) + .into_iter() + .filter(|&id| player_exists_for_choice(state, id)) + .collect() +} + /// CR 102.2 / CR 102.3: Whether `other` is an opponent of `player`. pub fn is_opponent(state: &GameState, player: PlayerId, other: PlayerId) -> bool { super::topology::is_opponent(state, player, other) diff --git a/crates/engine/src/game/sba.rs b/crates/engine/src/game/sba.rs index 3886b06e24..343b418da3 100644 --- a/crates/engine/src/game/sba.rs +++ b/crates/engine/src/game/sba.rs @@ -1917,8 +1917,17 @@ fn check_battle_protector( } // Compute legal choices. + // CR 310.11a: a Siege's controller "must choose its protector from among their + // opponents", and CR 704.5w's SBA phrasing — "no player IN THE GAME designated as + // its protector ... chooses an appropriate player" — seats CR 102.1 directly on + // this seam. A CHOICE, not a target (CR 115.10a), so the candidate list is the + // CHOOSABLE opponents. The pre-existing `eliminated_players` filter is LEFT IN + // PLACE: `is_alive` reads `Player::is_eliminated` while this reads + // `GameState::eliminated_players` — two different stores whose equivalence is not + // measured here, so deleting the redundant filter would smuggle an unmeasured + // behaviour change into a one-token routing. let legal_choices: Vec = if is_siege { - crate::game::players::opponents(state, controller) + crate::game::players::choosable_opponents(state, controller) .into_iter() .filter(|p| !state.eliminated_players.contains(p)) .collect() diff --git a/crates/engine/src/game/targeting.rs b/crates/engine/src/game/targeting.rs index cb72f4425c..115f017d46 100644 --- a/crates/engine/src/game/targeting.rs +++ b/crates/engine/src/game/targeting.rs @@ -99,6 +99,37 @@ pub(crate) fn find_legal_object_targets_for_ability_with_filter_controller( .collect() } +/// CR 115.1: may this seat be chosen as a TARGET of this source? +/// +/// Existence ([`crate::game::players::player_exists_for_choice`], which owns +/// CR 800.4 + CR 102.1 plus the CR 702.26b phasing MIRROR) PLUS the targeting-only +/// exclusions — CR 702.11c hexproof (opponent-scoped), CR 702.18a shroud +/// (source-agnostic), CR 702.16b protection. Every player-target legal-set producer calls +/// THIS, so the enumerating sides cannot drift. +/// +/// NOT the predicate for a non-targeted choice. CR 115.10a draws that boundary — "unless +/// that object or player is identified by the word 'target' ... it's not a target" — so a +/// merely *chosen* seat is judged by [`crate::game::players::player_exists_for_choice`] +/// alone, and its consumers must NOT call this function. Doing so would refuse legal +/// choices. +/// +/// Parameter order deliberately matches `static_abilities::player_cannot_be_targeted_by` +/// so a silent transposition of `source_id` and `source_controller` is unrepresentable. +pub fn player_is_legal_target( + state: &GameState, + player: PlayerId, + source_id: ObjectId, + source_controller: PlayerId, +) -> bool { + crate::game::players::player_exists_for_choice(state, player) + && !super::static_abilities::player_cannot_be_targeted_by( + state, + player, + source_id, + source_controller, + ) +} + fn find_legal_targets_with_context( state: &GameState, filter: &TargetFilter, @@ -193,22 +224,10 @@ fn find_legal_targets_with_context( if tf.type_filters.is_empty() && tf.properties.is_empty() && !is_any_other_target { let controller = &tf.controller; for player in &state.players { - // Player-phasing exclusion (mirrors CR 702.26b for permanents). - if player.is_phased_out() { - continue; - } - // CR 800.4a: Eliminated players are not legal targets. - if player.is_eliminated { - continue; - } - // CR 702.11c + CR 702.18a + CR 702.16b: Player-scope hexproof, - // shroud, and protection exclude illegal player targets. - if super::static_abilities::player_cannot_be_targeted_by( - state, - player.id, - source_id, - source_controller, - ) { + // CR 115.1: one authority for player-target legality — existence + // (CR 800.4 + CR 102.1, phasing per the CR 702.26b MIRROR) plus the + // targeting-only exclusions (CR 702.11c / CR 702.18a / CR 702.16b). + if !player_is_legal_target(state, player.id, source_id, source_controller) { continue; } let include = match controller { @@ -2132,28 +2151,14 @@ fn add_players( source_id: ObjectId, source_controller: PlayerId, ) { - // Player-phasing exclusion: a phased-out player is treated as though they - // don't exist for targeting purposes (mirrors CR 702.26b for permanents, - // applied to players via card Oracle text like "you phase out"). + // CR 115.1: one authority for player-target legality — existence (CR 800.4: + // multiplayer games continue after players leave, + CR 102.1: a player is one of the + // people in the game; player phasing per the CR 702.26b MIRROR) plus the + // targeting-only exclusions (CR 702.11c hexproof / CR 702.18a shroud / + // CR 702.16b protection). CR 608.2b's illegal-target fizzle still applies on + // resolution; this is the announcement-time legal set. for player in &state.players { - if player.is_phased_out() { - continue; - } - // CR 800.4a: When a player leaves the game in a multiplayer game, all - // objects they own/control leave the game and the player ceases to be - // a valid target. Eliminated players cannot be targeted by any spell - // or ability (CR 608.2b illegal-target fizzle applies on resolution). - if player.is_eliminated { - continue; - } - // CR 702.11c + CR 702.18a + CR 702.16b: Player-scope hexproof, shroud, - // and protection exclude illegal player targets. - if super::static_abilities::player_cannot_be_targeted_by( - state, - player.id, - source_id, - source_controller, - ) { + if !player_is_legal_target(state, player.id, source_id, source_controller) { continue; } targets.push(TargetRef::Player(player.id)); @@ -2167,21 +2172,13 @@ fn add_specific_player( source_id: ObjectId, source_controller: PlayerId, ) { - let Some(player) = state.players.iter().find(|player| player.id == player_id) else { - return; - }; - if player.is_phased_out() || player.is_eliminated { - return; - } - if super::static_abilities::player_cannot_be_targeted_by( - state, - player.id, - source_id, - source_controller, - ) { + // CR 115.1: same single authority as `add_players`. The former `find` membership + // guard is subsumed — `player_exists_for_choice` begins with `is_alive`, which is + // itself a membership test, so a nonexistent id is rejected identically. + if !player_is_legal_target(state, player_id, source_id, source_controller) { return; } - targets.push(TargetRef::Player(player.id)); + targets.push(TargetRef::Player(player_id)); } /// CR 702.16b: Protection prevents targeting from sources with the relevant quality. @@ -3651,7 +3648,9 @@ mod tests { assert!(targets.is_empty()); } - /// CR 800.4a: Eliminated players are not legal targets in multiplayer. + /// CR 800.4 + CR 102.1: a seat that has left the game is no longer one of the people + /// in the game, so nothing may choose it — which is why `find_legal_targets` omits it + /// in multiplayer. /// Regression: AI was targeting dead opponents in commander multiplayer. #[test] fn find_legal_targets_excludes_eliminated_player() { diff --git a/crates/engine/src/game/zone_pipeline.rs b/crates/engine/src/game/zone_pipeline.rs index cb3f270ce8..2a5611424c 100644 --- a/crates/engine/src/game/zone_pipeline.rs +++ b/crates/engine/src/game/zone_pipeline.rs @@ -1891,7 +1891,11 @@ fn legal_aura_attachment_targets( .collect(); targets.extend(state.players.iter().filter_map(|player| { - if player.is_eliminated || player.is_phased_out() { + // Hygiene routing, behaviour-neutral by construction: `is_eliminated || + // is_phased_out()` on an iterated member is the negation of what + // `players::player_exists_for_choice` spells for a member already known to be in + // `state.players`. Routed so an existence fix propagates here for free. + if !crate::game::players::player_exists_for_choice(state, player.id) { return None; } if crate::game::filter::player_matches_target_filter_in_state( diff --git a/crates/engine/src/types/game_state.rs b/crates/engine/src/types/game_state.rs index 01683e24a7..cfbb5049a0 100644 --- a/crates/engine/src/types/game_state.rs +++ b/crates/engine/src/types/game_state.rs @@ -7590,6 +7590,7 @@ fn decode_persisted_resolution_state(mut value: serde_json::Value) -> Result= 1` holds for every schema +/// minted IN-PROCESS (`decision_template`'s `Default` via `default_max_iterations`, its +/// `MAX_SHORTCUT_CYCLES` literal, and `game::engine::build_shortcut_schema`'s clamped +/// parameter). A WIRE-sourced offer has no such producer, so the guarantee holds +/// everywhere except across deserialization — which is exactly here. This must NEVER be +/// "fixed" instead by re-refusing the DECLARED count at `handle_declare_shortcut`: a +/// declared `IterationCount::Fixed(0)` is a legal zero-repetition proposal (CR 732.2a +/// admits "a non-repetitive series of choices"), and refusing it there re-creates the +/// over-refusal this phase exists to remove. The zero in the OFFER'S BOUND and the zero +/// in a DECLARED COUNT are different values at different seams. +/// +/// SCOPED TO `LoopShortcut` ONLY, deliberately. `WaitingFor::RespondToShortcut` carries a +/// `ShortcutProposal`, which has no `schema`/`max_iterations` field at all — there is no +/// bound to check. Its only reachable zero is `proposal.count`, the ALREADY-DECLARED +/// count, where `Fixed(0)` is legal; re-refusing it here would re-break the same +/// over-refusal at a seam no row can see. +/// +/// `== 0` is the COMPLETE rejection predicate and must not be widened: `max_iterations` +/// is `u32`, so negatives fail serde before this runs; values at or above +/// `MAX_SHORTCUT_CYCLES` mean "unbounded", a legitimate state; and an ABSENT wire key +/// decodes to `MAX_SHORTCUT_CYCLES` through `#[serde(default = "default_max_iterations")]`, +/// so every legacy save predating the field is untouched. +fn reject_zero_bound_shortcut_offer(state: &GameState) -> Result<(), String> { + if let WaitingFor::LoopShortcut { schema, .. } = &state.waiting_for { + if schema.max_iterations == 0 { + return Err( + "persisted LoopShortcut offer states max_iterations 0, which CR 732.2a admits \ + no legally takeable sequence for" + .to_string(), + ); + } + } + Ok(()) +} + impl Serialize for TrustedGameStateEnvelope { fn serialize(&self, serializer: S) -> Result where @@ -8624,7 +8665,11 @@ impl GameState { /// Decodes both current trusted snapshots and historical raw `GameState` /// snapshots. The raw form has no pre-cast route authority, so restoring it -/// always drops any protocol wait before it reaches a live game session. +/// routes through `precast_copy_shortcut::normalize_untrusted_restore`, which +/// rewrites only the PRE-CAST COPY waits. Other protocol waits survive intact — +/// a `WaitingFor::LoopShortcut` offer restores as itself — and what validates a +/// restored offer's bound is `reject_zero_bound_shortcut_offer` on the decode +/// path, not a blanket drop here. #[derive(Debug, Clone)] pub enum PersistedGameState { Raw(Box), diff --git a/crates/engine/tests/integration/gift_recipient_phased_out_opponent.rs b/crates/engine/tests/integration/gift_recipient_phased_out_opponent.rs new file mode 100644 index 0000000000..9c3ff350c9 --- /dev/null +++ b/crates/engine/tests/integration/gift_recipient_phased_out_opponent.rs @@ -0,0 +1,202 @@ +//! R4g — CR 702.174a: Gift is *"you may **choose** an opponent"*, a CHOICE and not a +//! target (CR 115.10a), so the recipient list is the seats that still exist to be chosen. +//! +//! Two arms, and the second one is the reason this file exists at all. Narrowing the +//! recipient list moves boards across the gift seam's low-cardinality branches, and one of +//! those branches is the only ERRORING branch in the whole choice-enumeration class: with +//! no choosable opponent, an accepted gift promise becomes an engine error. That branch was +//! previously reachable only by eliminating every opponent — which ends the game — and is +//! newly reachable at a LIVE table once phasing narrows the list. An erroring branch nobody +//! asserts is a branch that changes silently. +//! +//! The production entry chain is the `DecideOptionalCost` beat, NOT `handle_cast_spell`: +//! `GameAction::DecideOptionalCost { pay: true }` → `engine_casting::handle_optional_cost_ +//! choice` → `casting_costs::handle_decide_additional_cost` → `continue_after_gift_promised` +//! (which is private and is never called directly here). `handle_cast_spell` opens the cast +//! that publishes the `OptionalCostChoice`, one action earlier. + +use engine::game::engine::EngineError; +use engine::game::scenario::{GameScenario, P0, P1}; +use engine::types::ability::AdditionalCostOrigin; +use engine::types::actions::GameAction; +use engine::types::game_state::{CastPaymentMode, WaitingFor}; +use engine::types::mana::{ManaType, ManaUnit}; +use engine::types::phase::Phase; +use engine::types::player::PlayerId; +use engine::types::ObjectId; + +const PEERLESS_RECYCLING: &str = + "Gift a card (You may promise an opponent a gift as you cast this spell. \ +If you do, they draw a card before its other effects.)\n\ +Return target permanent card from your graveyard to your hand. If the gift was promised, \ +instead return two target permanent cards from your graveyard to your hand."; + +/// A 5-seat board with a castable Gift spell, `phase_out` seats transitioned through the +/// PRODUCTION phasing API, and P2 eliminated unless the caller asks otherwise. +/// +/// Both arms differ ONLY in which seats are phased out, so the pair is one narrowing +/// series rather than two unrelated boards. +fn gift_board( + phase_out: &[PlayerId], + eliminate: Option, +) -> (engine::game::scenario::GameRunner, ObjectId) { + let mut scenario = GameScenario::new_n_player(5, 42); + scenario.at_phase(Phase::PreCombatMain); + scenario.with_mana_pool( + P0, + (0..2) + .map(|_| ManaUnit::new(ManaType::Green, ObjectId(0), false, vec![])) + .collect(), + ); + scenario.add_creature_to_graveyard(P0, "Bear Cub", 2, 2); + scenario.add_creature_to_graveyard(P0, "Cougar Cub", 2, 2); + // MTGJSON supplies the bare "Gift" keyword hint; scenario inference cannot FromStr a + // "Gift a card (reminder…)" line, so pass the production hint. + let spell = scenario + .add_spell_to_hand(P0, "Peerless Recycling", true) + .from_oracle_text_with_keywords(&["Gift"], PEERLESS_RECYCLING) + .id(); + + let mut runner = scenario.build(); + let mut events = Vec::new(); + for seat in phase_out { + // Setup anti-vacuity: `phase_out_player` reports the seats it transitioned, so a + // silent no-op fails loudly here instead of quietly weakening the arm. + let transitioned = + engine::game::phasing::phase_out_player(runner.state_mut(), *seat, &mut events); + assert_eq!( + transitioned, + vec![*seat], + "phase_out_player must actually transition {seat:?}" + ); + } + if let Some(seat) = eliminate { + engine::game::elimination::eliminate_player(runner.state_mut(), seat, &mut events); + assert!( + runner.state().players[seat.0 as usize].is_eliminated, + "{seat:?} must read as eliminated" + ); + } + (runner, spell) +} + +/// Drive the cast up to and including the gift promise, asserting the two SHIPPED guards +/// on the way. Returns whatever the promise beat returned, so the caller can assert on +/// either the published prompt or the `Err`. +/// +/// GUARD 1 — the `OptionalCostChoice` carrying the Gift origin is published. That is the +/// in-test proof the promise path was entered at all, taken BEFORE the promise is +/// submitted, so a later `Err` cannot be an earlier rejection wearing a gift's name. +/// GUARD 2 — `players::opponents` (the UN-routed sibling the fix does not touch) is still +/// non-empty on this same board, so any emptiness the routed seam reports is attributable +/// to the routing rather than to a board with no opponents. +/// +/// Both guards are runnable in the SHIPPED tree by construction: the gift promise is +/// queued with no opponents gate, and `players::opponents` is not narrowed by this phase. +fn promise_the_gift( + runner: &mut engine::game::scenario::GameRunner, + spell: ObjectId, +) -> Result { + let card_id = runner.state().objects[&spell].card_id; + runner + .act(GameAction::CastSpell { + object_id: spell, + card_id, + targets: vec![], + payment_mode: CastPaymentMode::Auto, + }) + .expect("cast Peerless Recycling"); + + for _ in 0..50 { + match &runner.state().waiting_for { + WaitingFor::ManaPayment { .. } => { + runner + .act(GameAction::PassPriority) + .expect("complete mana payment"); + } + WaitingFor::OptionalCostChoice { origin, .. } => { + // GUARD 1. + assert_eq!( + *origin, + AdditionalCostOrigin::Gift, + "the promise path must be entered: the published optional cost is Gift" + ); + // GUARD 2. + assert!( + !engine::game::players::opponents(runner.state(), P0).is_empty(), + "the UN-routed opponent relation is still non-empty on this board, so \ + an empty CHOOSABLE list is the routing's doing and not the board's" + ); + return runner.act(GameAction::DecideOptionalCost { pay: true }); + } + other => panic!("unexpected beat before the gift promise: {other:?}"), + } + } + panic!("the cast never reached the Gift optional-cost choice"); +} + +/// R4g arm 1 — the offer arm. A phased-out seat (the CR 702.26b MIRROR) and a departed one +/// (CR 800.4 + CR 102.1) are both absent from the published recipient list, and the two +/// surviving opponents are both present. +/// +/// THE OFFER MUST STILL FIRE, which is both the reach-guard and the anti-vacuity control: +/// with a single choosable opponent the seam takes the sole-opponent auto-latch branch and +/// publishes nothing at all, so a `!contains` assertion would pass on a board where no +/// choice was ever offered. Hence total equality on the published variant. +/// +/// REVERT-PROBE: restore `players::opponents` at the gift candidate derivation ⇒ P1 +/// reappears ⇒ the equality FAILS. +#[test] +fn gift_recipient_offer_excludes_a_phased_out_opponent_and_still_offers_the_rest() { + let (mut runner, spell) = gift_board(&[P1], Some(PlayerId(2))); + promise_the_gift(&mut runner, spell).expect("the promise is accepted with two recipients"); + + match &runner.state().waiting_for { + WaitingFor::ChooseGiftRecipient { candidates, .. } => { + assert_eq!( + *candidates, + vec![PlayerId(3), PlayerId(4)], + "phased-out P1 and eliminated P2 are out; both valid opponents are in" + ); + } + other => panic!("expected ChooseGiftRecipient, got {other:?}"), + } +} + +/// R4g arm 2 — the `0`-crossing, this class's only ERROR branch. +/// +/// Every opponent is phased out and NONE is eliminated, so the table is still live: a board +/// that reaches zero choosable opponents by elimination would also end the game, which is a +/// different thing to assert. An accepted gift promise with no choosable recipient is an +/// invalid action, and 5c PINS that pre-existing `Err` rather than changing it — what 5c +/// changes is that the branch is newly reachable at a live table. +/// +/// The two shipped guards inside `promise_the_gift` are what make this arm non-vacuous: a +/// post-fix drive CANNOT reach `ChooseGiftRecipient` on this board, so a "the prompt is not +/// published" assertion would need the fix reverted to mean anything, and a revert-probe is +/// an executor action rather than a shipped guard. +/// +/// REVERT-PROBE: restore `players::opponents` at the gift candidate derivation ⇒ the +/// candidate list is non-empty again ⇒ the prompt publishes instead of erroring ⇒ FAILS. +#[test] +fn gift_promise_with_every_opponent_phased_out_is_an_invalid_action() { + let (mut runner, spell) = gift_board(&[P1, PlayerId(2), PlayerId(3), PlayerId(4)], None); + let outcome = promise_the_gift(&mut runner, spell); + + match outcome { + Err(EngineError::InvalidAction(message)) => { + assert!( + message.to_lowercase().contains("gift"), + "the rejection must name the gift it refused, got: {message}" + ); + } + other => panic!("expected InvalidAction naming the gift, got {other:?}"), + } + assert!( + !matches!( + runner.state().waiting_for, + WaitingFor::ChooseGiftRecipient { .. } + ), + "no recipient prompt may be published when no opponent is choosable" + ); +} diff --git a/crates/engine/tests/integration/interaction_contract.rs b/crates/engine/tests/integration/interaction_contract.rs index 7ef0959999..f815ba58c2 100644 --- a/crates/engine/tests/integration/interaction_contract.rs +++ b/crates/engine/tests/integration/interaction_contract.rs @@ -2526,7 +2526,7 @@ fn loop_shortcut_schema_and_materializer_cover_every_decision_point_kind() { }, schema: ShortcutDecisionSchema { iteration_count: IterationCount::Fixed(2), - // No narrowed CR 732.2a bound — the global cap, as every offer states today. + // No narrowed CR 732.2a bound — `Default` carries the global cap. max_iterations: ShortcutDecisionSchema::default().max_iterations, points: vec![ DecisionPoint { diff --git a/crates/engine/tests/integration/issue_3867_volcanic_offering_opponent_choice.rs b/crates/engine/tests/integration/issue_3867_volcanic_offering_opponent_choice.rs index 95c15b59d7..61f9a482b9 100644 --- a/crates/engine/tests/integration/issue_3867_volcanic_offering_opponent_choice.rs +++ b/crates/engine/tests/integration/issue_3867_volcanic_offering_opponent_choice.rs @@ -477,3 +477,107 @@ fn controller_may_choose_different_announcing_opponents_per_effect() { let stack_entry = runner.state().stack.last().expect("spell is on the stack"); assert_eq!(stack_entry.controller, P0); } + +/// R4i — CR 601.2c + CR 115.10a: the announcing opponent is CHOSEN by the spell's +/// controller, not targeted, so the candidate list is the seats that still exist to be +/// chosen: a phased-out seat is out (the CR 702.26b MIRROR) and a departed one is out +/// (CR 800.4 + CR 102.1). +/// +/// ONE ROW, TWO MINTS. The engine mints `ChooseAnnouncingOpponent` in two different +/// places — the cast-time mint in `casting.rs` and the per-group re-prompt in +/// `casting_costs::begin_deferred_target_selection` — and a spell with TWO +/// opponent-choice groups traverses both in one drive. Asserting total equality at BOTH +/// prompts is what makes the row discriminating for two sites at once: restoring only the +/// first site flips the first assertion, restoring only the second flips the second. +/// +/// FIVE SEATS: each mint is gated on `candidates.len() >= 2`, so with fewer surviving +/// opponents the cast proceeds with no prompt at all and every exclusion assertion would +/// be unreachable. Asserting the published variant IS the reach-guard. +#[test] +fn announcer_offer_excludes_a_phased_out_opponent_at_both_mints() { + let p3 = PlayerId(3); + let p4 = PlayerId(4); + + let mut scenario = GameScenario::new_n_player(5, 7); + scenario.at_phase(Phase::PreCombatMain); + + // Both SURVIVING opponents control a nonbasic land and a creature, so every slot has + // a legal target whichever of them the controller picks. + let land_p3 = nonbasic_land(&mut scenario, p3, "P3 Land"); + let creature_p3 = scenario.add_creature(p3, "P3 Creature", 5, 5).id(); + let land_p4 = nonbasic_land(&mut scenario, p4, "P4 Land"); + let creature_p4 = scenario.add_creature(p4, "P4 Creature", 5, 5).id(); + + let spell = scenario + .add_spell_to_hand_from_oracle(P0, "Volcanic Offering", true, VOLCANIC_OFFERING) + .with_mana_cost(ManaCost::zero()) + .id(); + + let mut runner = scenario.build(); + + // Setup anti-vacuity, asserted before the cast: the production APIs report what they + // transitioned, so a silent no-op fails loudly here. + let mut setup_events = Vec::new(); + let transitioned = + engine::game::phasing::phase_out_player(runner.state_mut(), P1, &mut setup_events); + assert_eq!( + transitioned, + vec![P1], + "phase_out_player must actually transition P1" + ); + assert!( + runner.state().players[1].is_phased_out(), + "P1 must read as phased out" + ); + engine::game::elimination::eliminate_player(runner.state_mut(), PlayerId(2), &mut setup_events); + assert!( + runner.state().players[2].is_eliminated, + "P2 must read as eliminated" + ); + + let spell_card = runner.state().objects[&spell].card_id; + runner + .act(GameAction::CastSpell { + object_id: spell, + card_id: spell_card, + targets: vec![], + payment_mode: CastPaymentMode::Auto, + }) + .expect("casting the free instant must succeed"); + + // BOTH mints: the cast-time one and the per-group re-prompt. + for effect in ["second land", "second creature"] { + match &runner.state().waiting_for { + WaitingFor::ChooseAnnouncingOpponent { + player, candidates, .. + } => { + assert_eq!( + *player, P0, + "the controller chooses the announcing opponent ({effect})" + ); + assert_eq!( + *candidates, + vec![p3, p4], + "phased-out P1 and eliminated P2 are out at the {effect} mint; both \ + valid opponents are in" + ); + } + other => panic!("expected ChooseAnnouncingOpponent for {effect}, got {other:?}"), + } + runner + .act(GameAction::ChooseAnnouncingOpponent { opponent: p4 }) + .expect("controller picks P4 as the announcer"); + } + + // Drive the four target slots to completion so the row proves the narrowed offer + // still produces a castable spell rather than a stuck prompt. + for target in [land_p3, land_p4, creature_p3, creature_p4] { + runner + .act(GameAction::ChooseTarget { + target: Some(TargetRef::Object(target)), + }) + .expect("each slot announces its target"); + } + let stack_entry = runner.state().stack.last().expect("spell is on the stack"); + assert_eq!(stack_entry.controller, P0); +} diff --git a/crates/engine/tests/integration/kilo_live_offer_from_real_dump.rs b/crates/engine/tests/integration/kilo_live_offer_from_real_dump.rs index 26b916dc84..5a812e05e2 100644 --- a/crates/engine/tests/integration/kilo_live_offer_from_real_dump.rs +++ b/crates/engine/tests/integration/kilo_live_offer_from_real_dump.rs @@ -62,9 +62,13 @@ fn load_migrated_dump() -> GameState { )); let envelope: serde_json::Value = serde_json::from_str(&json).expect("dump envelope parses as JSON"); - let raw: GameState = serde_json::from_value(envelope["gameState"].clone()) - .expect("the real 4p gameState must deserialize into the current GameState"); - PersistedGameState::Raw(Box::new(raw)).into_game_state() + // Decode AS `PersistedGameState` rather than decoding a bare `GameState` and wrapping + // it in `Raw`: only the former runs `reject_legacy_raw_prompt_authority` and + // `decode_persisted_resolution_state`, which is the rest of the production chokepoint. + // `.expect(..)`, not `?`: `into_game_state` returns `GameState`, not `Result`. + serde_json::from_value::(envelope["gameState"].clone()) + .expect("gameState deserializes through the production decoder") + .into_game_state() } /// The acting player for the current beat (choice prompts carry their own `player`; a priority beat @@ -165,6 +169,20 @@ fn drive_one_live_cycle(state: &mut GameState) { /// unreplayable. /// - FIX-2 (counter-growth cover disjunct) — the completed drive's +1-charge frames fail /// `loop_states_equal_modulo_resources`. +/// +/// R4c — NAMED ACCEPTANCE ARM for the player-choice legality authority (CR 115.10a). Routing +/// `resolve_target`'s `TargetPin::Player` arm through the CHOICE authority +/// (`players::player_exists_for_choice`) rather than the TARGET one must not suppress a +/// shipped offer on a REAL dump, and this row is what says so: if a later change routes that +/// arm through `targeting::player_is_legal_target`, the over-veto class returns and this row +/// must still pass — so it is the acceptance side of the pair whose refusal side is +/// `analysis::decision_template::tests::a_shrouded_seat_is_untargetable_yet_still_choosable_ +/// at_the_pin_recheck`. +/// +/// ⚠ WHAT THIS ROW DOES NOT WITNESS, stated so nobody credits it with more than it covers: +/// this dump's pins are `ByIdentity` and `ManaColor`, NOT `TargetPin::Player`, so the Player +/// arm is not on its path at all. It is an acceptance arm for the offer PIPELINE, not a +/// witness for the Player-pin seam; that witness is R2b. #[test] fn kilo_migrated_dump_fires_object_growth_offer() { let mut state = load_migrated_dump(); diff --git a/crates/engine/tests/integration/loop_shortcut.rs b/crates/engine/tests/integration/loop_shortcut.rs index 9ca9be194a..e8df594b37 100644 --- a/crates/engine/tests/integration/loop_shortcut.rs +++ b/crates/engine/tests/integration/loop_shortcut.rs @@ -1672,7 +1672,7 @@ fn declare_illegal_pin_falls_back_legal_ingests() { }; let schema = ShortcutDecisionSchema { iteration_count: IterationCount::UntilLethal, - // No narrowed CR 732.2a bound — the global cap, as every offer states today. + // No narrowed CR 732.2a bound — `Default` carries the global cap. max_iterations: ShortcutDecisionSchema::default().max_iterations, points: vec![DecisionPoint { slot: slot.clone(), @@ -4132,7 +4132,7 @@ fn loop_shortcut_schema_redacts_hidden_targets_for_non_controller() { }; let schema = ShortcutDecisionSchema { iteration_count: IterationCount::UntilLethal, - // No narrowed CR 732.2a bound — the global cap, as every offer states today. + // No narrowed CR 732.2a bound — `Default` carries the global cap. max_iterations: ShortcutDecisionSchema::default().max_iterations, points: vec![DecisionPoint { slot, @@ -5098,9 +5098,327 @@ fn gunzip_dump(gz: &[u8]) -> String { fn restore_dump(json: &str) -> GameState { let envelope: serde_json::Value = serde_json::from_str(json).expect("dump envelope parses as JSON"); - let raw: GameState = serde_json::from_value(envelope["gameState"].clone()) - .expect("the real 4p gameState must deserialize into the current GameState"); - engine::types::game_state::PersistedGameState::Raw(Box::new(raw)).into_game_state() + // Decode AS `PersistedGameState` rather than decoding a bare `GameState` and wrapping + // it in `Raw`: only the former runs `reject_legacy_raw_prompt_authority` and + // `decode_persisted_resolution_state`, which is the rest of the production chokepoint + // — including the CR 732.2a load-seam bound invariant `w15_*` below pins. + // `.expect(..)`, not `?`: `into_game_state` returns `GameState`, not `Result`. + serde_json::from_value::( + envelope["gameState"].clone(), + ) + .expect("gameState deserializes through the production decoder") + .into_game_state() +} + +/// The migrated dellian dump's `gameState`, as a raw `serde_json::Value`. +fn dellian_game_state_value() -> serde_json::Value { + let json = gunzip_dump(include_bytes!( + "../fixtures/dellian_emblem_conqueror_4p.json.gz" + )); + let envelope: serde_json::Value = + serde_json::from_str(&json).expect("dump envelope parses as JSON"); + envelope["gameState"].clone() +} + +/// R0c — the migrated fixture decodes through BOTH decoders, and an un-migrated one +/// through NEITHER. +/// +/// This is the row that converts the next upstream save-compat break into a named +/// regression instead of four unrelated-looking red rows. Upstream #6718 (`0468df1f4`) +/// added `TargetSelectionSlot::effect_kind` with no `#[serde(default)]`; every dump +/// fixture captured before it became undecodable, and nothing said so in one place. +/// +/// The negative arm IS the positive arm's anti-vacuity control: without it, an +/// `assert!(ok)` pair would pass on any value at all, including one where the field was +/// never consulted. Both arms operate on the SAME value, differing only by the presence +/// of `effect_kind`, so the verdict is attributable to that field and nothing else. +#[test] +fn migrated_dump_decodes_through_both_decoders_and_unmigrated_through_neither() { + let migrated = dellian_game_state_value(); + + // Reach-guard: prove the mutation below has something to remove. A value with no + // `effect_kind` key would make the negative arm's `Err` unattributable. + let slots = migrated["waiting_for"]["data"]["target_slots"] + .as_array() + .expect("the dellian dump publishes a target_slots array"); + assert_eq!( + slots.len(), + 1, + "the dellian dump publishes exactly one slot" + ); + assert!( + slots[0].get("effect_kind").is_some(), + "the MIGRATED fixture must carry effect_kind — if this fails, the migration script \ + was not run, and the negative arm below would pass for the wrong reason" + ); + + // POSITIVE: both the direct `GameState` decode and the production `PersistedGameState` + // decode accept the migrated value. + assert!( + serde_json::from_value::(migrated.clone()).is_ok(), + "migrated fixture must decode as a bare GameState" + ); + assert!( + serde_json::from_value::(migrated.clone()) + .is_ok(), + "migrated fixture must decode through the PRODUCTION decoder" + ); + + // R8 — THE ROUTING IS STATE-NEUTRAL. The six loaders stopped decoding a bare + // `GameState` and wrapping it in `PersistedGameState::Raw`, and started decoding AS + // `PersistedGameState`: a different type, a different `Deserialize`, and a different + // conversion (`decode_persisted_resolution_state`, which injects + // `resolution_state_version` and decodes the resolution state as `ResolutionStateWire`). + // That is a real change to how six fixtures restore, and the two arms above cannot + // witness it — they assert only that a decode succeeds or fails. + // + // `GameState` has NO `PartialEq`, so this compares the SERIALIZED forms — key by key, + // recursively. Several fields are `HashSet`-backed and therefore have NO canonical array + // order (two sets built in one process do not even share a hasher seed), so a difference + // that is order-only under one of THOSE keys is accepted as a set difference and every + // other difference FAILS, naming its own key path. A blanket "sort every array" would + // have hidden a real reordering of the stack, a library or a seat order; a hand-picked + // single-field normalization would have flaked the first time a different set field + // happened to serialize in a different order — which is exactly what it did. + // + // The allowlist is DERIVED, not remembered: + // grep -rhoE 'pub [a-z_0-9]+: (std::collections::)?HashSet<' \ + // crates/engine/src/types/*.rs crates/engine/src/analysis/*.rs | sort -u + // An unlisted key that differs only by order still FAILS and names itself, so drift is + // loud rather than silent. + const SET_BACKED_FIELDS: &[&str] = &[ + "alt_cost_grant_permissions_used", + "applied", + "assassin_or_commander_dealt_combat_damage_this_turn", + "batched_zone_change_trigger_fired", + "bending_types_this_turn", + "city_blessing", + "commander_declined_zone_return", + "creatures_attacked_this_turn", + "creatures_blocked_this_turn", + "crew_activated_this_turn", + "dirty_objects", + "dirty_players", + "exerted_this_turn", + "exile_cast_permissions_used", + "exile_play_permissions_used", + "exile_play_single_use_consumed", + "graveyard_cast_permissions_used", + "graveyard_cast_permissions_used_per_type", + "hand_cast_free_permissions_used", + "modal_modes_chosen_this_game", + "modal_modes_chosen_this_turn", + "objects_that_dealt_damage", + "player_actions_this_way", + "players_attacked_this_step", + "players_attacked_this_turn", + "players_who_created_token_this_turn", + "players_who_discarded_card_this_turn", + "players_who_sacrificed_artifact_this_turn", + "players_who_searched_library_this_turn", + "public_revealed_cards", + "replacement_applied", + "revealed_cards", + "top_of_library_cast_permissions_used", + "triggers_fired_this_game", + "triggers_fired_this_turn", + "triggers_fired_this_turn_per_opponent", + ]; + + /// Collect every path at which `a` and `b` differ in a way that set-ordering cannot + /// explain. Returns an empty vec iff the two states are equal modulo set order. + fn differences( + a: &serde_json::Value, + b: &serde_json::Value, + path: &str, + out: &mut Vec, + ) { + use serde_json::Value; + match (a, b) { + (Value::Object(x), Value::Object(y)) => { + let mut keys: Vec<&String> = x.keys().chain(y.keys()).collect(); + keys.sort(); + keys.dedup(); + for key in keys { + match (x.get(key), y.get(key)) { + (Some(l), Some(r)) => differences(l, r, &format!("{path}.{key}"), out), + _ => out.push(format!("{path}.{key} (present on one side only)")), + } + } + } + (Value::Array(x), Value::Array(y)) if x == y => {} + (Value::Array(x), Value::Array(y)) => { + let leaf = path.rsplit('.').next().unwrap_or(path); + let (mut xs, mut ys) = (x.clone(), y.clone()); + let key = |v: &Value| v.to_string(); + xs.sort_by_key(key); + ys.sort_by_key(key); + if xs == ys && SET_BACKED_FIELDS.contains(&leaf) { + // Order-only difference under a `HashSet`-backed field: not a state + // difference at all, because that field HAS no canonical order. + } else if xs == ys { + out.push(format!( + "{path} (REORDERED, and it is not a set-backed field)" + )); + } else { + out.push(format!("{path} (different elements)")); + } + } + _ if a == b => {} + _ => out.push(path.to_string()), + } + } + + let serialized = |state: &GameState| serde_json::to_value(state).expect("GameState serializes"); + let legacy_restored = { + let raw: GameState = serde_json::from_value(migrated.clone()) + .expect("the pre-routing loader form: a bare GameState decode"); + engine::types::game_state::PersistedGameState::Raw(Box::new(raw)).into_game_state() + }; + let routed_restored = + serde_json::from_value::(migrated.clone()) + .expect("the routed loader form: decode AS PersistedGameState") + .into_game_state(); + let routed_value = serialized(&routed_restored); + let mut diffs = Vec::new(); + differences( + &serialized(&legacy_restored), + &routed_value, + "state", + &mut diffs, + ); + assert!( + diffs.is_empty(), + "routing the six dump loaders through the production decoder must restore the SAME \ + state they restored before; differing paths: {diffs:?}" + ); + + // The perturbation IS that assertion's reach-guard: without it, a comparison that + // compared a value to itself — or explained every difference away as set order — would + // pass on any two states at all. Perturb ONE scalar; the comparison must SEE it, and + // must name the field it saw. + let mut perturbed = legacy_restored; + perturbed.turn_number += 1; + let mut perturbed_diffs = Vec::new(); + differences( + &serialized(&perturbed), + &routed_value, + "state", + &mut perturbed_diffs, + ); + assert_eq!( + perturbed_diffs, + vec!["state.turn_number".to_string()], + "the comparison must see a one-scalar difference AND name it; if it cannot, the \ + equality above proves nothing" + ); + + // NEGATIVE (the anti-vacuity control): strip the field back out and both must reject. + let mut unmigrated = migrated; + unmigrated["waiting_for"]["data"]["target_slots"] + .as_array_mut() + .expect("target_slots is an array") + .iter_mut() + .for_each(|slot| { + slot.as_object_mut() + .expect("each slot is an object") + .remove("effect_kind") + .expect("each slot carried effect_kind before removal"); + }); + assert!( + serde_json::from_value::(unmigrated.clone()).is_err(), + "an un-migrated save must NOT decode as a bare GameState" + ); + assert!( + serde_json::from_value::(unmigrated) + .is_err(), + "an un-migrated save must NOT decode through the production decoder — the strict \ + decoder is the point; a #[serde(default)] shim would silently accept it" + ); +} + +/// R0d — CR 732.2a: a persisted `LoopShortcut` offer whose WIRE bound is `0` must fail the +/// load, and one whose bound is `5` must not. +/// +/// The defect this pins (W15) is real and was measured before the fix: a wire +/// `max_iterations: 0` deserialized clean, satisfied `is_bounded()`, and reached +/// `ai_support/candidates.rs`, which echoed it as a declared `IterationCount::Fixed(0)` — +/// so the engine opened the CR 732.2b response window for an offer that admits no legally +/// takeable sequence. The offer was corrupt one beat BEFORE any count was declared. +/// +/// ⚠ THE FIXTURE CHOICE IS LOAD-BEARING — this row uses TENACITY, not the dellian dump the +/// dual-decode row uses. The dellian value is `TriggerTargetSelection` and carries no +/// `schema` object at all, so `…schema.max_iterations` cannot even be written onto it: both +/// arms would decode identically, for a reason having nothing to do with the invariant. +/// The tenacity dump is the only in-tree `LoopShortcut` capture. +/// +/// The key is ABSENT in the fixture, so the mutation CREATES it — asserted below, because a +/// mutation that silently failed to apply would make the `0` arm's verdict meaningless. +/// +/// ⚠ NON-VACUITY DEPENDS ON THE ROUTED LOADER. This row decodes AS `PersistedGameState`; +/// the pre-5c loader form (`PersistedGameState::Raw(Box::new(bare_decode))`) bypasses +/// `PersistedGameState`'s own `Deserialize` and therefore never runs +/// `decode_persisted_resolution_state` at all, so the same assertions written against that +/// form could not fail. REVERT-PROBE: delete `reject_zero_bound_shortcut_offer`'s body (or +/// its call) ⇒ the `0` arm decodes `Ok` ⇒ FAILS. The wire-`5` arm is the anti-vacuity half: +/// it proves the mutation instrument reaches the field and that the invariant refuses `0` +/// specifically rather than refusing every mutated save. +#[test] +fn a_wire_zero_shortcut_bound_fails_the_load_and_a_wire_five_does_not() { + let json = gunzip_dump(include_bytes!( + "../fixtures/tenacity_exquisite_blood_4p.json.gz" + )); + let envelope: serde_json::Value = + serde_json::from_str(&json).expect("dump envelope parses as JSON"); + let base = envelope["gameState"].clone(); + + // Reach-guards on the fixture itself. + assert_eq!( + base["waiting_for"]["type"].as_str(), + Some("LoopShortcut"), + "R0d must run on a LoopShortcut capture — the invariant is scoped to that variant" + ); + assert!( + base["waiting_for"]["data"]["schema"].is_object(), + "the tenacity offer carries a schema object for the bound to live on" + ); + assert!( + base["waiting_for"]["data"]["schema"] + .get("max_iterations") + .is_none(), + "the fixture predates the field, so the mutation below CREATES the key" + ); + + let with_bound = |n: u64| { + let mut v = base.clone(); + v["waiting_for"]["data"]["schema"]["max_iterations"] = serde_json::json!(n); + // Anti-vacuity: prove the write landed before drawing any conclusion from it. + assert_eq!( + v["waiting_for"]["data"]["schema"]["max_iterations"].as_u64(), + Some(n), + "the mutation must reach schema.max_iterations" + ); + v + }; + + // CR 732.2a: a proposal must describe "a sequence of game choices ... that may be + // legally taken based on the current game state". A bound of 0 admits none. + let zero = + serde_json::from_value::(with_bound(0)); + let message = zero + .expect_err("a wire max_iterations of 0 must fail the load, not revive a corrupt offer") + .to_string(); + assert!( + message.contains("max_iterations 0"), + "the rejection must NAME the invariant it enforces, got: {message}" + ); + + // The control: same fixture, same instrument, same mutated key, a legal bound. + assert!( + serde_json::from_value::(with_bound(5)) + .is_ok(), + "a wire max_iterations of 5 is a legal bound and must still load" + ); } /// Opponents the ENGINE considers living. `Player::is_eliminated` is the authority the @@ -9111,3 +9429,631 @@ fn ai_bounded_declare_candidate_is_generated_legal_and_drives() { maximal legal declaration still eliminates nobody" ); } + +// --------------------------------------------------------------------------- +// G1 — THE VALIDATED RANGE MUST COVER THE DRIVEN RANGE (rows R6 / R7 / R9). +// +// INVARIANT: at declare time the firewall must validate the image of the selection function +// over the range the ACCEPTED COUNT will actually drive (`0..n`), against the offer's +// PUBLISHED `legal_targets`. Before this fix it validated `0..shortcut_drive_period(..)` — a +// range derived from the SCHEDULE's own length, which answers a different question — so it +// both ACCEPTED a pin whose driven image leaves the published set at an index the count +// reaches (arm A), and REFUSED conforming declarations whose count is shorter than the +// schedule (arms D1 and E). +// +// Every arm drives the PRODUCTION entry `apply_action(GameAction::DeclareShortcut { .. })` +// and asserts on the published `waiting_for`: `RespondToShortcut` = ingested (CR 732.2b's +// response window opened), `Priority` = refused into the manual-play handback. +// --------------------------------------------------------------------------- + +/// Two objects on a 3p board, and the declare-time verdict for one (published set, count, +/// schedule) triple. The board is real and the offer is planted, exactly as +/// `declare_illegal_pin_falls_back_legal_ingests` plants it — what is under test is the +/// declare firewall, not the detector that would otherwise mint the offer. +/// +/// `max_iterations` is 1_000 (the un-narrowed global cap), so no arm below is refused by the +/// count cap instead of by the range: the cap and the bound are upstream conjuncts that would +/// otherwise dominate every verdict in the table. +fn g1_declare_verdict( + publish_b: bool, + count: IterationCount, + schedule_of: &dyn Fn(&YieldTarget, &YieldTarget) -> TargetSchedule, + pin_twice: bool, +) -> WaitingFor { + let mut scenario = GameScenario::new_n_player(3, 7); + scenario.at_phase(Phase::PreCombatMain); + scenario.with_life(P0, 20); + scenario.with_life(P1, 20); + scenario.with_life(P2, 20); + let obj_a = scenario.add_creature(P0, "Schedule Target A", 1, 1).id(); + let obj_b = scenario.add_creature(P0, "Schedule Target B", 1, 1).id(); + let mut runner = scenario.build(); + runner.state_mut().loop_detection = LoopDetectionMode::Interactive; + + let source_of = |id: ObjectId| YieldTarget::ThisObject { + source_id: id, + incarnation: None, + trigger_description: None, + }; + let (a, b) = (source_of(obj_a), source_of(obj_b)); + let slot = DecisionSlot { + source: a.clone(), + index: 0, + }; + let mut legal_targets = vec![TargetRef::Object(obj_a)]; + if publish_b { + legal_targets.push(TargetRef::Object(obj_b)); + } + let schema = ShortcutDecisionSchema { + iteration_count: count.clone(), + // No narrowed CR 732.2a bound — `Default` carries the global cap. + max_iterations: ShortcutDecisionSchema::default().max_iterations, + points: vec![DecisionPoint { + slot: slot.clone(), + kind: DecisionPointKind::Targets { + legal_targets, + min_targets: 1, + max_targets: 1, + ordered: true, + }, + }], + convoke_tappable_count: 0, + }; + let mut targets = vec![TargetPin::Scheduled(schedule_of(&a, &b))]; + if pin_twice { + // E-neg: two pins against a `min_targets == max_targets == 1` point. The cardinality + // check sits OUTSIDE the per-index loop, so it must still refuse at count 0. + targets.push(TargetPin::Scheduled(TargetSchedule::Constant(a.clone()))); + } + let template = DecisionTemplate { + owner: P0, + decisions: vec![PinnedDecision::Targets { slot, targets }], + replay: ReplayMode::Scheduled { + count: count.clone(), + }, + key: DecisionGroupKey::from_sources(std::slice::from_ref(&a), DecisionKind::LoopChoice), + }; + + runner.state_mut().waiting_for = WaitingFor::LoopShortcut { + proposer: P0, + predicted_winner: Some(P0), + certificate: synthetic_lethal_cert(), + schema, + }; + runner + .act(GameAction::DeclareShortcut { + count, + template: Some(template), + }) + .expect("declare dispatch succeeds (a refusal is a manual handback, not an error)"); + runner.state().waiting_for.clone() +} + +fn piecewise_a_then_b(a: &YieldTarget, b: &YieldTarget) -> TargetSchedule { + TargetSchedule::Piecewise(vec![(0, a.clone()), (5, b.clone())]) +} + +fn piecewise_b_then_a(a: &YieldTarget, b: &YieldTarget) -> TargetSchedule { + TargetSchedule::Piecewise(vec![(0, b.clone()), (5, a.clone())]) +} + +fn round_robin_a_b(a: &YieldTarget, b: &YieldTarget) -> TargetSchedule { + TargetSchedule::RoundRobin(vec![a.clone(), b.clone()]) +} + +/// R6 arms A / B / C — the validated range must COVER the driven range. +/// +/// * **A (the fix's positive, ⚠ behaviour change).** Publishes only A; the schedule switches +/// to the UNPUBLISHED B at index 5; the declared count is 8, so the drive reaches index 5. +/// Post-fix this is REFUSED. Pre-fix the validated range was the schedule length (2), so +/// indices 5..8 were never checked and the declaration was INGESTED — the soundness hole. +/// * **B (reach-guard).** The identical schedule at count 5 never reaches the switch, so it +/// is ingested. Without B, arm A would also pass under a firewall that rejected everything. +/// * **C (attribution control).** The identical count-8 declaration with B ALSO published is +/// ingested — so A's refusal is attributable to the PUBLISHED SET and not to the count, the +/// schedule, or the harness. +/// +/// REVERT-PROBE: pass `shortcut_drive_period(Some(t))` again in place of +/// `shortcut_validated_range(&count, Some(t))` ⇒ arm A is ingested ⇒ FAILS (and D1 below +/// FAILS with it), while B and C do not move. +#[test] +fn declared_count_beyond_the_published_schedule_window_is_refused() { + // A — the driven range reaches the unpublished arm. + assert!( + matches!( + g1_declare_verdict(false, IterationCount::Fixed(8), &piecewise_a_then_b, false), + WaitingFor::Priority { .. } + ), + "CR 732.2a: a count that drives into an UNPUBLISHED schedule arm is not a sequence \ + that may be legally taken — refuse to manual play" + ); + // B — reach-guard: the same schedule inside the published window is ingested. + assert!( + matches!( + g1_declare_verdict(false, IterationCount::Fixed(5), &piecewise_a_then_b, false), + WaitingFor::RespondToShortcut { .. } + ), + "reach-guard: a count that never reaches the switch is a conforming declaration" + ); + // C — attribution: publish the second arm and the count-8 declaration is fine. + assert!( + matches!( + g1_declare_verdict(true, IterationCount::Fixed(8), &piecewise_a_then_b, false), + WaitingFor::RespondToShortcut { .. } + ), + "attribution control: with BOTH arms published, count 8 is conforming — so A's \ + refusal is the published set and not the count" + ); +} + +/// R7 arms D1 / D2 / D3 — the range is EXACTLY the driven range, not a padded one. +/// +/// * **D1 (over-refusal fix, ⚠ behaviour change).** A `RoundRobin[A,B]` rotation with only A +/// published, declared at count 1: the drive touches index 0 only, which selects A. Post-fix +/// INGESTED. Pre-fix the schedule-derived period (2) forced index 1 — an index nothing +/// drives — to be validated, and the declaration was refused. This is the over-veto class. +/// * **D2 (must-not-flip).** The same rotation with BOTH arms published is ingested at count 1 +/// AND at count 8 — the protected arm, pinned so the fix cannot be mistaken for "accept +/// more". +/// * **D3 (mandatory discriminating negative).** The same rotation with only A published at +/// count 2 DOES reach index 1 ⇒ refused. D3 is what separates D1 from "the validation was +/// deleted": under a deleted firewall D3 would be ingested. +#[test] +fn declared_count_shorter_than_the_rotation_is_not_over_refused() { + // D1 — the fix's over-refusal half. + assert!( + matches!( + g1_declare_verdict(false, IterationCount::Fixed(1), &round_robin_a_b, false), + WaitingFor::RespondToShortcut { .. } + ), + "CR 732.2a: a count of 1 drives index 0 only, which selects the PUBLISHED arm — \ + refusing it is the over-veto this fix removes" + ); + // D2 — must-not-flip, both counts. + for count in [IterationCount::Fixed(1), IterationCount::Fixed(8)] { + assert!( + matches!( + g1_declare_verdict(true, count.clone(), &round_robin_a_b, false), + WaitingFor::RespondToShortcut { .. } + ), + "a fully-published rotation is conforming at {count:?} — this arm must not move" + ); + } + // D3 — the discriminating negative at the first index the count DOES reach. + assert!( + matches!( + g1_declare_verdict(false, IterationCount::Fixed(2), &round_robin_a_b, false), + WaitingFor::Priority { .. } + ), + "count 2 reaches index 1, which selects the UNPUBLISHED arm ⇒ refused. If this is \ + ingested, the firewall is gone rather than correctly ranged" + ); +} + +/// R9 arms E / E-neg — `Fixed(0)` validates over an EMPTY range, and the firewall is STILL +/// live there. +/// +/// CR 732.2b: a shortened proposal's new ending point is the first deviating choice, and +/// CR 732.2c makes taking the shortcut mandatory once accepted — so a zero-repetition +/// proposal must be representable AND validatable. The `.max(1)` floor validated index 0 of a +/// range nothing drives. +/// +/// * **E (⚠ behaviour change).** `Piecewise[(0,B),(5,A)]` with only A published, at count 0. +/// Index 0 selects the UNPUBLISHED B — but nothing drives index 0, so post-fix this is +/// INGESTED. The template shape is load-bearing: under `RoundRobin[A,B]` index 0 selects the +/// PUBLISHED A, so the arm would pass before and after and its revert-probe could not fail. +/// * **E-neg (anti-"validation deleted" control at the SAME count).** Two pins against a +/// one-target point at the same count 0: the cardinality check sits outside the index loop, +/// so it must still refuse. Without E-neg, E would also pass under a firewall that had been +/// deleted outright. +/// +/// REVERT-PROBE: restore the `.max(1)` floor ⇒ E FAILS and no other arm moves (every other +/// arm's range is already ≥ 1). +#[test] +fn a_zero_count_declaration_validates_over_an_empty_range_but_still_checks_cardinality() { + // E — nothing is driven, so nothing is out of the published set. + assert!( + matches!( + g1_declare_verdict(false, IterationCount::Fixed(0), &piecewise_b_then_a, false), + WaitingFor::RespondToShortcut { .. } + ), + "CR 732.2b/c: a zero-repetition proposal drives no index, so no index can leave the \ + published set — the floor was refusing a conforming declaration" + ); + // E-neg — the firewall is still live at the same count. + assert!( + matches!( + g1_declare_verdict(false, IterationCount::Fixed(0), &piecewise_b_then_a, true), + WaitingFor::Priority { .. } + ), + "the cardinality check is OUTSIDE the index loop: two pins against a one-target \ + point are refused even at count 0. If this is ingested, E passed because validation \ + was deleted rather than because the range is empty" + ); +} + +// ═════════════ PR-7 Phase 5c, ITEM 2 — the kill-declared-target stop-short row ═════════════ + +/// Player-scope hexproof (CR 702.11c). The refuser is RULED to be +/// hexproof rather than phasing: hexproof makes the pinned seat illegal at the DRIVE's +/// spec-aware CR 608.2b re-validation (the `GameAction::SelectTargets` the injector submits), +/// which is the backstop layer no other 5c row exercises. Phasing would instead fail at +/// `resolve_target`'s EXISTENCE half and double-cover R1's seam. +/// A SYNTHETIC harness prop, deliberately NOT named after any printing: it exists only to be +/// the thing that makes the pinned seat illegal mid-window, and inventing a real card name for +/// non-verbatim text is the fabrication hazard CLAUDE.md's "verify the card, not just the rule" +/// principle warns about. Plan §12 scopes the verbatim-Oracle rule to the card under test; the +/// card under test here is the SANGUINE_BOND drain, whose text IS verbatim. +const HEXPROOF_GRANT: &str = "You have hexproof."; + +const P3: PlayerId = PlayerId(3); + +/// The R5 board — 4 seats, P0 running the escalating TARGETED drain +/// (`SANGUINE_BOND` × `BLOODTHIRSTY_CONQUEROR`), P1/P2/P3 at 1000 life so the drive never +/// crosses lethal inside the declared window. +/// +/// FOUR SEATS, and that is the §6 reach-guard rather than padding: killing the pinned seat +/// must leave **at least two** other legal seats standing. A one-element surviving set cannot +/// witness "did not re-choose" — a retargeting engine would have exactly one place to go and +/// a stopped engine and a retargeting engine would be indistinguishable at the seat level. +/// +/// Returns `(runner, sanguine_bond, hexproof_source, kickoff)`. The hexproof source starts in +/// P1's HAND, where its static does not function, so both arms share a byte-identical board +/// up to the moment the kill arm puts it onto the battlefield. +fn r5_board() -> (GameRunner, ObjectId, ObjectId, ObjectId) { + let mut scenario = GameScenario::new_n_player(4, 7); + scenario.at_phase(Phase::PreCombatMain); + scenario.with_life(P0, 20); + for seat in 1..4u8 { + scenario.with_life(PlayerId(seat), 1000); + } + let bond = scenario + .add_creature_from_oracle(P0, "Sanguine Bond", 2, 2, SANGUINE_BOND) + .id(); + scenario.add_creature_from_oracle(P0, "Bloodthirsty Conqueror", 3, 4, BLOODTHIRSTY_CONQUEROR); + let hexproof_src = scenario + .add_creature_to_hand_from_oracle(P1, "Test Hexproof Source", 0, 4, HEXPROOF_GRANT) + .id(); + let kickoff = scenario + .add_spell_to_hand_from_oracle(P0, "Test Lifegain Kickoff", false, KICKOFF) + .id(); + let mut runner = scenario.build(); + runner.state_mut().loop_detection = LoopDetectionMode::Interactive; + (runner, bond, hexproof_src, kickoff) +} + +/// A `Fixed(count)` template pinning the Sanguine Bond trigger's `target opponent` to one +/// seat for every iteration. The slot's source is the Bond itself, so `slot_source_prompted` +/// matches the mid-drive `TriggerTargetSelection` the injector must answer. +fn r5_pin_template(bond: ObjectId, seat: PlayerId, count: u32) -> DecisionTemplate { + let source = YieldTarget::ThisObject { + source_id: bond, + incarnation: None, + trigger_description: None, + }; + let slot = DecisionSlot { + source: source.clone(), + index: 0, + }; + DecisionTemplate { + owner: P0, + decisions: vec![PinnedDecision::Targets { + slot, + targets: vec![TargetPin::Player(seat)], + }], + replay: ReplayMode::Scheduled { + count: IterationCount::Fixed(count), + }, + key: DecisionGroupKey::from_sources(&[source], DecisionKind::LoopChoice), + } +} + +/// Reach the R5 board's own bounded `LoopShortcut` offer and return the runner parked on it +/// plus every seat's life at that instant. +/// +/// The offer is the ENGINE's, read off `state.waiting_for` — never an out-of-band call to the +/// offer predicate, which would only prove the predicate agrees with itself. +fn r5_reach_offer() -> (GameRunner, ObjectId, ObjectId, Vec) { + let (mut runner, bond, hexproof_src, kickoff) = r5_board(); + let _ = runner.cast(kickoff).target_player(P1).resolve(); + let WaitingFor::LoopShortcut { + proposer, schema, .. + } = runner.state().waiting_for.clone() + else { + panic!( + "the 4p targeted drain must OFFER a LoopShortcut, got {:?}", + runner.state().waiting_for + ); + }; + assert_eq!(proposer, P0, "P0 has priority and proposes the shortcut"); + // LAYER ATTRIBUTION, half one: this offer publishes NO decision points, so + // `handle_declare_shortcut`'s pin firewall (`if !offer.schema.points.is_empty()`) is + // provably not the refuser in the kill arm below. Whatever refuses there is downstream. + assert!( + schema.points.is_empty(), + "this offer publishes no points, so declare-time `validate_pins` never runs — the \ + kill arm's refusal must therefore come from the drive; got {} points", + schema.points.len() + ); + let lives = vec![ + life(&runner, P0), + life(&runner, P1), + life(&runner, P2), + life(&runner, P3), + ]; + (runner, bond, hexproof_src, lives) +} + +/// The per-cycle life the pinned seat loses, probed by an independent `Fixed(1)` +/// materialization of this same board (one recurrence = one full cycle). Mirrors +/// [`probe_drain_delta`]; nothing below is bound to a literal drain rate. +fn r5_probe_delta() -> i32 { + let (mut runner, bond, _hexproof_src, l0) = r5_reach_offer(); + runner + .act(GameAction::DeclareShortcut { + count: IterationCount::Fixed(1), + template: Some(r5_pin_template(bond, P1, 1)), + }) + .expect("declare Fixed(1) with a Player pin"); + accept_all_opponents(&mut runner); + let delta = l0[1] - life(&runner, P1); + assert!( + delta > 0, + "Fixed(1) must materialize a nonzero drain cycle on the PINNED seat, got {delta}" + ); + delta +} + +/// ITEM 2 / R5 ⭐ — **a declared target made illegal mid-drive stops the drive short and is +/// NEVER re-chosen.** Governing ruling, ledgered verbatim: *stop-short/abort, never silently +/// re-choose or skip.* +/// +/// # The seam, and why hexproof is the ruled refuser +/// +/// A `Fixed(n)` drive re-resolves its template per cycle and answers each mid-cycle +/// `TriggerTargetSelection` through `inject_pinned_answer`, which submits the pinned value as +/// a real `GameAction::SelectTargets`. That submission is the **drive-time CR 608.2b +/// re-validation** — the backstop layer, one below the declare-time firewall. Hexproof +/// (CR 702.11c, "can't be the target of spells or abilities **your opponents control**": the +/// source is P0's permanent and the pinned seat is P0's opponent) makes the pinned seat +/// illegal exactly there and nowhere earlier. Phasing was rejected as the refuser precisely +/// because it fails one layer up, at `resolve_target`'s existence half, double-covering R1. +/// +/// # Constructed-board deviation, DISCLOSED (constructibility-first) +/// +/// This row is built on a constructed 4-seat board rather than on a dump fixture, which §6 +/// licenses explicitly. Two measurements forced it, and both are INLINED here rather than +/// cited, because the probe archive that holds them is untracked and never ships: (i) the +/// real `dellian_emblem_conqueror_4p` dump — the only tracked fixture whose loop targets a +/// player — runs **309 beats to `GameOver` and raises no `LoopShortcut` at all** under the +/// generic dump driver, so it cannot host a declared drive; (ii) the refuser has to be +/// *introduced* on a named seat's battlefield mid-window, which is a board construction +/// whichever fixture carries it. The construction itself is the tracked one — +/// `declare_illegal_pin_falls_back_legal_ingests` builds its declare-seam board the same way. +/// +/// # The four-assertion anti-retarget set (§6), each named at its assertion below +/// +/// 1. the drive **stops short** — zero of `N` cycles commit, and `N * delta` is what the same +/// board commits with the refuser absent; +/// 2. **no retarget** — neither surviving legal seat is drained; +/// 3. **no silent skip** — the aborting cycle is not skipped-and-continued: no seat moves at +/// all, and the drain's mirror gain on P0 does not move either; +/// 4. **state coherent post-abort** — ring cleared, priority handed to a living seat, nobody +/// eliminated, the board still carries the refuser. +/// +/// # Reach-guards (without these every assertion above is vacuous) +/// +/// * the CLEAN arm is the positive control: the identical board with the hexproof source left in +/// hand drives all `N` cycles onto the pinned seat, so a `0` in the kill arm is the refuser +/// firing and not a dead harness; +/// * `player_has_hexproof(P1)` flips `false → true` across the move, so the setup cannot +/// silently no-op; +/// * **the surviving legal set has `len() >= 2`** — §6's own reach-guard. A one-element set +/// cannot witness "did not re-choose"; +/// * the declare firewall **passed** (`RespondToShortcut` opened) and the offer publishes +/// **no points**, so the refusal is attributable to the drive and not to `validate_pins`. +/// +/// # REVERT-PROBES — every claim below is a MEASUREMENT, with its result INLINED +/// +/// Nothing here cites a log path: the probe archive is untracked and never ships, so the +/// measured values are reproduced in full instead. +/// +/// The headline result is that the anti-retarget OUTCOME is defended by **AT LEAST THREE +/// independent production guards**, which is why no single-guard probe flips this row. Three +/// are named and measured below. The enumeration is deliberately open — a fourth, the +/// pre-drive `decision_template::resolve` re-check at the top of `materialize_fixed_shortcut`'s +/// `'cycles` loop, exists and simply is not engaged by THIS refuser (measured: it fires in +/// neither arm, which is exactly §6's reason for ruling hexproof over phasing). +/// +/// * **GUARD 1 — the drive's per-slot CR 608.2b target-legality rejection** +/// (`ability_utils::validate_selected_slots_with_specs`, its "Illegal target selected" arm), +/// reached through `inject_pinned_answer`'s `GameAction::SelectTargets` submission. Measured +/// on the UNMUTATED tree, reached exactly ONCE, on the pinned seat, against a live-derived +/// legal set: `target=Player(P1) live_legal=[Player(P2), Player(P3)] would_reject=true` ⇒ +/// `pinned_submit_ok=false` ⇒ `RecastAbort` ⇒ `CycleOutcome::Abort` ⇒ `break 'cycles` at +/// `i=0`. This is the layer this row claims to exercise, and it is provably reached. +/// * **GUARD 2 — the CR 732.2a per-cycle conformance check** in `materialize_fixed_shortcut` +/// (`actual != per_cycle.delta` ⇒ `break 'cycles`). +/// * **GUARD 3 — `inject_pinned_answer`'s fail-closed catch-all** (CR 732.2a "no conditional +/// actions": any prompt kind with no Stage-2 pin producer ⇒ `RecastAbort` ⇒ +/// `CycleOutcome::Abort`). +/// +/// * **RP-1**, the plan-named *"first legal target"* fallback in `inject_pinned_answer` (when +/// the pinned submission is refused, answer the prompt with the prompt's own first legal +/// target) ⇒ **this row still PASSES** (`1 passed; 0 failed`, `EXIT=0`). Not a hole in the +/// assertions — instrumented, the mutation *does* reach and *does* retarget: the prompt's +/// live legal set is `[P2, P3]` (P1 already dropped by the layer system), +/// `pinned_submit_ok=false`, `fallback=[Player(P2)]`, `fallback_ok=true`. The retargeted +/// cycle is then caught by GUARD 2: measured `break=CONFORMANCE i=0 actual={P0:+1, P2:-1} +/// expected={P0:+1, P1:-1}` ⇒ the divergent cycle is dropped whole. +/// * **SINGLE-GUARD PROBE on GUARD 1** — disable ONLY the per-slot legality rejection, leaving +/// GUARD 2 and CR 732.2a conformance fully intact ⇒ **this row still PASSES** (`1 passed`, +/// `EXIT=0`). Measured: the illegal pinned submission is then ACCEPTED +/// (`pinned_submit_ok=true`), the cycle never recurs, and the drive walks on to a +/// `DeclareAttackers` prompt that GUARD 3 fails closed on ⇒ `CycleOutcome::Abort` ⇒ +/// `break 'cycles` at `i=0`, with **zero** conformance breaks. +/// * **RP-1b**, RP-1 *plus* GUARD 2 disabled ⇒ **FAILS at named assertion (2)**, the +/// anti-retarget assertion: `left: (997, 1000) right: (1000, 1000)` (all `N = 3` cycles +/// committed onto P2), `EXIT=101`. This is the row's discrimination proof. It does not need +/// to touch GUARD 3: a successfully retargeted cycle RECURS, so the unpinned-prompt arm is +/// never reached on that path. +/// * **RP-2**, `CycleOutcome::Abort => continue 'cycles` ⇒ **measured NOT discriminating** +/// (`1 passed`, `EXIT=0`), disclosed rather than papered over. This row's refuser is +/// PERMANENT, so every later cycle aborts too and `committed` never advances. A real property +/// of a permanent refuser, not a gap in the assertions — a transient one is unconstructible +/// on this harness (no in-drive hook removes a static). +/// +/// **Read the inertness correctly.** These assertions are insensitive to the removal of any ONE +/// guard, and that is a property of PRODUCTION'S REDUNDANCY, not a weakness of the row: the row +/// asserts the observable outcome (stop short, never retarget), and production defends that +/// outcome three ways over. The row IS a discriminator — it reaches GUARD 1 exactly once with +/// `would_reject=true` on the pinned seat against a live-derived legal set, and RP-1b flips it +/// at a named assertion. What it is not is a single-guard regression pin; no probe result here +/// should be read as claiming otherwise. +#[test] +fn a_declared_target_made_illegal_mid_drive_stops_short_and_never_retargets() { + use engine::types::zones::Zone; + + const N: u32 = 3; + let delta = r5_probe_delta(); + + // ───────────────────────── CLEAN arm — the positive control ───────────────────────── + // Identical board, hexproof source left in hand (its static does not function there), so the + // ONLY difference from the kill arm is whether the refuser is on the battlefield. + let (mut clean, clean_bond, _clean_hexproof_src, clean_l0) = r5_reach_offer(); + clean + .act(GameAction::DeclareShortcut { + count: IterationCount::Fixed(N), + template: Some(r5_pin_template(clean_bond, P1, N)), + }) + .expect("declare Fixed(N) with a Player pin"); + accept_all_opponents(&mut clean); + assert_eq!( + life(&clean, P1), + clean_l0[1] - (N as i32) * delta, + "control: with no refuser the drive commits EXACTLY N cycles onto the PINNED seat" + ); + assert_eq!( + (life(&clean, P2), life(&clean, P3)), + (clean_l0[2], clean_l0[3]), + "control: the pin, not the seat order, is what selects the drained seat" + ); + + // ───────────────────────────────── KILL arm ───────────────────────────────────────── + let (mut runner, bond, hexproof_src, l0) = r5_reach_offer(); + assert!( + !engine::game::static_abilities::player_has_hexproof(runner.state(), P1), + "setup anti-vacuity: the pinned seat must START without hexproof, or the kill below \ + changes nothing" + ); + + runner + .act(GameAction::DeclareShortcut { + count: IterationCount::Fixed(N), + template: Some(r5_pin_template(bond, P1, N)), + }) + .expect("declare Fixed(N) with a Player pin"); + // LAYER ATTRIBUTION, half two: the declare-time firewall INGESTED this declaration. The + // refusal measured below therefore happened at the drive, which is the whole point of + // choosing hexproof over phasing as the refuser. + assert!( + matches!( + runner.state().waiting_for, + WaitingFor::RespondToShortcut { .. } + ), + "the declare firewall must PASS — otherwise this row measures `validate_pins`, not \ + the drive's CR 608.2b backstop; got {:?}", + runner.state().waiting_for + ); + + // THE KILL: the refuser arrives on the pinned seat's battlefield through the production + // zone pipeline, after the declaration has been ingested and before the table's Accept. + { + let mut events = Vec::new(); + engine::game::zones::move_to_zone( + runner.state_mut(), + hexproof_src, + Zone::Battlefield, + &mut events, + ); + // CR 613.1: the grant is a continuous effect — re-derive the board so the legality + // reads below are taken against the post-kill layers rather than a stale cache. + engine::game::layers::mark_layers_full(runner.state_mut()); + engine::game::layers::evaluate_layers(runner.state_mut()); + } + assert!( + engine::game::static_abilities::player_has_hexproof(runner.state(), P1), + "setup anti-vacuity: the kill must actually land — a silently inert hexproof source would \ + make every assertion below pass for the wrong reason" + ); + assert!( + !engine::game::targeting::player_is_legal_target(runner.state(), P1, bond, P0), + "CR 702.11c: the pinned seat must now be an ILLEGAL target of the Bond's ability" + ); + // §6's REACH-GUARD, asserted as a count so a shrinking board fails loudly: after the kill + // at least TWO other seats are still legal, so a retargeting engine has somewhere to go. + let surviving_legal: Vec = [P2, P3] + .into_iter() + .filter(|&seat| { + engine::game::targeting::player_is_legal_target(runner.state(), seat, bond, P0) + }) + .collect(); + assert!( + surviving_legal.len() >= 2, + "a 1-element surviving legal set cannot witness `did not re-choose`; got \ + {surviving_legal:?}" + ); + + accept_all_opponents(&mut runner); + + // (1) STOPS SHORT — zero of N cycles committed. Bound to the measured `delta` and to the + // control arm above, never to a literal: `N * delta > 0` is what a completing drive + // would have taken off the pinned seat. + assert!( + N >= 2 && delta > 0, + "the stop-short claim needs a window longer than one cycle and a nonzero drain rate" + ); + assert_eq!( + life(&runner, P1), + l0[1], + "the pinned seat must lose NOTHING: the drive stopped at the first cycle whose \ + re-validation refused, and that cycle rolled back whole" + ); + // (2) NO RETARGET — both seats that were measured LEGAL above are untouched. + assert_eq!( + (life(&runner, P2), life(&runner, P3)), + (l0[2], l0[3]), + "stop-short, never silently re-choose: neither surviving legal seat may be drained. \ + A `first legal target` fallback in the injector drains P2 here" + ); + // (3) NO SILENT SKIP — the drain's mirror gain on the controller did not move either, so + // the drive did not skip the refused cycle and press on with the remaining ones. + assert_eq!( + life(&runner, P0), + l0[0], + "no silent skip: a drive that skipped the refused cycle and continued would still \ + have run the remaining cycles and moved the controller's mirror gain" + ); + // (4) STATE COHERENT POST-ABORT. + assert_eq!( + runner.state().waiting_for, + WaitingFor::Priority { player: P0 }, + "the abort hands priority back to a living seat (manual fallback), not a wrong-crown \ + and not a stuck response window" + ); + assert!( + runner.state().loop_detect_ring.is_empty(), + "the ring is cleared on handback so the same apply() does not instantly re-offer" + ); + assert!( + [P0, P1, P2, P3] + .into_iter() + .all(|seat| !is_eliminated(&runner, seat)), + "the table stays live — this row is about a refused target, not about anyone dying" + ); + assert!( + runner.state().battlefield.contains(&hexproof_src), + "the roll-back is scoped to the DRIVE: the board change that made the pin illegal is \ + not undone by the abort" + ); +} diff --git a/crates/engine/tests/integration/main.rs b/crates/engine/tests/integration/main.rs index 18d62e8b0f..d620410750 100644 --- a/crates/engine/tests/integration/main.rs +++ b/crates/engine/tests/integration/main.rs @@ -219,6 +219,7 @@ mod giada_angel_counters; mod giant_ox_crew_toughness; mod gideon_trials_emblem; mod gift_delivery_draw_sequence_migration; +mod gift_recipient_phased_out_opponent; mod giggling_skitterspike_issue_890; mod gimbal_gremlin_prodigy; mod glen_elendras_answer_counter_all_conjunction; diff --git a/crates/engine/tests/integration/rules/battle.rs b/crates/engine/tests/integration/rules/battle.rs index 7504406bb7..e0466e5fc2 100644 --- a/crates/engine/tests/integration/rules/battle.rs +++ b/crates/engine/tests/integration/rules/battle.rs @@ -365,6 +365,150 @@ fn battle_with_no_legal_protector_goes_to_graveyard() { )); } +/// R4l — CR 310.11a (*"must choose its protector from among their opponents"*) + +/// CR 704.5w (*"no player **in the game** designated as its protector"*): the protector +/// pick is a CHOICE (CR 115.10a), so a phased-out seat is not among the choosable +/// opponents (the CR 702.26b MIRROR), and a departed one is not either (CR 800.4 + +/// CR 102.1). +/// +/// THE SHARED 5-SEAT BOARD: P0 controls the Siege, P1 is phased out, P2 eliminated, P3/P4 +/// valid. Nothing in this file exercises phasing at all — every existing row asserts the +/// behaviour 5c changes — so the shapes below are copied and the setups are not. +/// +/// ARM 1 of three (the other two are `..._crosses_to_a_silent_auto_apply` and +/// `..._crosses_to_the_graveyard`). Arm 1 is the published-prompt arm: two survivors keep +/// `legal_choices.len() >= 2`, which is the reach-guard — below that the SBA takes a branch +/// that publishes nothing and every `candidates` assertion would be unreachable. +/// +/// REVERT-PROBE: restore `players::opponents` at the `legal_choices` derivation ⇒ P1 +/// reappears ⇒ the total equality FAILS. +#[test] +fn battle_protector_choice_excludes_a_phased_out_opponent_and_still_offers_the_rest() { + let (mut runner, battle) = phased_protector_board(&[P1]); + + let mut events = Vec::new(); + sba::check_state_based_actions(runner.state_mut(), &mut events); + + match runner.state().waiting_for.clone() { + WaitingFor::BattleProtectorChoice { + player, + battle_id, + candidates, + } => { + assert_eq!(player, P0); + assert_eq!(battle_id, battle); + assert_eq!( + candidates, + vec![PlayerId(3), PlayerId(4)], + "phased-out P1 and eliminated P2 are out; both valid opponents are in" + ); + } + other => panic!("Expected BattleProtectorChoice, got {other:?}"), + } +} + +/// R4l arm 2 — THE `2 → 1` CROSSING, which is the hazard this site is actually about. +/// +/// Narrowing the choosable set moves a board across `legal_choices.len()`'s branch +/// boundary, and at `1` the engine writes the protector ITSELF and publishes nothing: no +/// `WaitingFor`, no events. That is invisible to every `candidates` assertion the R4-family +/// shape prescribes, so it needs its own arm. The auto-applied seat is not wrong — it is +/// the sole surviving legal opponent, which CR 310.10 / CR 310.11a make the only +/// appropriate player. What this arm guards is the SILENT DISAPPEARANCE of the prompt. +/// +/// BOTH halves are required: (a) alone would pass on a board where the SBA never ran at +/// all, and (b) alone would pass if the prompt had ALSO been published. +/// +/// The crossing is reached by PHASING, not by board size — `battle_protector_auto_applies_ +/// with_single_candidate_2p` reaches `1` because its board has one opponent, which cannot +/// witness a narrowing. It is also not reached by elimination: that is the A5 confound, +/// which additionally ends the game. +/// +/// REVERT-PROBE: restore `players::opponents` at site 14 ⇒ both phased-out seats return ⇒ +/// `legal_choices` is `[P1, P3, P4]` ⇒ `len() >= 2` ⇒ the prompt returns ⇒ (a) FAILS. +#[test] +fn battle_protector_narrowing_to_one_auto_applies_silently() { + let (mut runner, battle) = phased_protector_board(&[P1, PlayerId(4)]); + + let mut events = Vec::new(); + sba::check_state_based_actions(runner.state_mut(), &mut events); + + // (a) the prompt is NOT published… + assert!( + !matches!( + runner.state().waiting_for, + WaitingFor::BattleProtectorChoice { .. } + ), + "one surviving legal opponent ⇒ the singleton branch, which publishes nothing" + ); + // (b) …and the SBA did run: it wrote the sole surviving legal opponent as protector. + assert_eq!( + runner.state().objects[&battle].protector(), + Some(PlayerId(3)), + "the auto-applied seat is the ONLY surviving legal opponent (CR 310.11a)" + ); + assert!(runner.state().battlefield.contains(&battle)); +} + +/// R4l arm 3 — the `→ 0` crossing: with every opponent phased out there is no appropriate +/// player, and CR 310.10 / CR 704.5w put the battle into its owner's graveyard. +/// +/// Reached by PHASING rather than by elimination on purpose: eliminating every opponent +/// also ends the game (`waiting_for = GameOver`), which would confound the assertions with +/// a game-over transition. Phasing keeps the table live, so what this arm reads is the +/// battle rule and nothing else — asserted below. +#[test] +fn battle_protector_narrowing_to_zero_sends_the_battle_to_the_graveyard() { + let (mut runner, battle) = phased_protector_board(&[P1, PlayerId(3), PlayerId(4)]); + + let mut events = Vec::new(); + sba::check_state_based_actions(runner.state_mut(), &mut events); + + assert_eq!(runner.state().objects[&battle].zone, Zone::Graveyard); + assert!(!runner.state().battlefield.contains(&battle)); + assert!(!matches!( + runner.state().waiting_for, + WaitingFor::BattleProtectorChoice { .. } + )); + assert!( + !matches!(runner.state().waiting_for, WaitingFor::GameOver { .. }), + "the table must still be LIVE — reaching 0 by phasing rather than by elimination \ + is what keeps this arm about CR 310.10 instead of about the game ending" + ); +} + +/// The shared choice-legality board for R4l's three arms: five seats, P0 controls a Siege +/// seeded with the illegal `protector == controller` (CR 704.5x) so the SBA fires, P2 +/// eliminated, and each seat in `phase_out` transitioned through the PRODUCTION phasing +/// API. Every arm differs ONLY in that list, which is what makes them one crossing series +/// rather than three unrelated boards. +fn phased_protector_board(phase_out: &[PlayerId]) -> (GameRunner, ObjectId) { + let mut scenario = GameScenario::new_n_player(5, 7); + scenario.at_phase(Phase::PreCombatMain); + let battle = scenario.add_creature(P0, "Contested Siege", 0, 0).id(); + let mut runner = scenario.build(); + make_into_siege(&mut runner, battle, P0, 3); + + let mut events = Vec::new(); + for seat in phase_out { + // Setup anti-vacuity: the production API reports what it transitioned, so a + // silent no-op fails loudly here rather than quietly weakening the arm. + let transitioned = + engine::game::phasing::phase_out_player(runner.state_mut(), *seat, &mut events); + assert_eq!( + transitioned, + vec![*seat], + "phase_out_player must actually transition {seat:?}" + ); + } + engine::game::elimination::eliminate_player(runner.state_mut(), PlayerId(2), &mut events); + assert!( + runner.state().players[2].is_eliminated, + "P2 must read as eliminated" + ); + (runner, battle) +} + /// CR 310.10 + CR 704.5w: AI routing — when the 3-player SBA pauses with a /// protector choice, `legal_actions` emits one `ChooseBattleProtector` candidate /// per legal opponent, so the AI has a deterministic decision surface. diff --git a/crates/engine/tests/integration/sprout_inalla_realistic_offer.rs b/crates/engine/tests/integration/sprout_inalla_realistic_offer.rs index 7e1758dd1c..931e7d12da 100644 --- a/crates/engine/tests/integration/sprout_inalla_realistic_offer.rs +++ b/crates/engine/tests/integration/sprout_inalla_realistic_offer.rs @@ -60,9 +60,13 @@ fn load_realistic_dump() -> GameState { )); let envelope: serde_json::Value = serde_json::from_str(&json).expect("dump envelope parses as JSON"); - let raw: GameState = serde_json::from_value(envelope["gameState"].clone()) - .expect("the realistic 4p gameState must deserialize into the current GameState"); - PersistedGameState::Raw(Box::new(raw)).into_game_state() + // Decode AS `PersistedGameState` rather than decoding a bare `GameState` and wrapping + // it in `Raw`: only the former runs `reject_legacy_raw_prompt_authority` and + // `decode_persisted_resolution_state`, which is the rest of the production chokepoint. + // `.expect(..)`, not `?`: `into_game_state` returns `GameState`, not `Result`. + serde_json::from_value::(envelope["gameState"].clone()) + .expect("gameState deserializes through the production decoder") + .into_game_state() } /// Count the battlefield Saprolings `who` controls (tapped or not) — the fodder reach-guard oracle. diff --git a/scripts/migrate-dump-fixture.sh b/scripts/migrate-dump-fixture.sh new file mode 100755 index 0000000000..7b8e0126ce --- /dev/null +++ b/scripts/migrate-dump-fixture.sh @@ -0,0 +1,184 @@ +#!/usr/bin/env bash +# Regenerates a saved-game test fixture under crates/engine/tests/fixtures/ from +# its READ-ONLY pristine dump, stamping the `effect_kind` field that upstream +# #6718 (0468df1f4) added to `TargetSelectionSlot` without `#[serde(default)]`. +# +# WHY A REGENERATION AND NOT A SERDE SHIM. The maintainer publicly declined both +# `#[serde(default)]` and an upstream save migration for this field +# (https://github.com/phase-rs/phase/pull/6718#issuecomment-5111207689 — "alpha +# means it may not load ... if you have a use-case then do the save changes +# locally"). Migrating the fixture locally is the maintainer's own named path, +# and it keeps the production decoder STRICT: an un-migrated save must still be +# rejected, which a serde default would silently prevent. +# +# WHY `--effect-kind` IS AN EXPLICIT ARGUMENT and never a jq name->variant table: +# such a table would re-derive `impl From<&Effect> for EffectKind` in jq, and +# that mapping is not the identity (`Effect::SetTapState` fans out to several +# kinds). The ENGINE stays the authority for the migrated value; the reading +# test beside `load_dellian_dump` in `game/engine.rs` asserts the stamped slots +# equal what `ability_utils::build_target_slots` builds for that board, so a +# wrong `--effect-kind` argument fails a tracked row rather than shipping. +# +# The pristine directory is READ-ONLY: this script only ever reads from it. +# +# Usage: +# scripts/migrate-dump-fixture.sh \ +# --pristine /path/to/dump.zip \ +# --expect-sha256 \ +# --effect-kind LoseLife \ +# --out crates/engine/tests/fixtures/name.json.gz +# +# # Control mode: re-run the FULL recipe and check it against the committed +# # fixture, then check the patch had teeth. Runnable by anyone, at any time, +# # with no engine build. +# scripts/migrate-dump-fixture.sh --pristine ... --expect-sha256 ... \ +# --effect-kind LoseLife \ +# --out crates/engine/tests/fixtures/name.json.gz --control +# +# BOTH control arms matter, and a one-arm check passes vacuously: +# arm 1 => BYTE_IDENTICAL=true the PATCHED regeneration reproduces the +# committed fixture byte for byte, so the committed bytes are exactly +# what this recipe produces from the read-only pristine dump. +# arm 2 => PATCHED_DIFFERS=true the same recipe run WITHOUT the patch differs +# from arm 1's output, so the jq filter actually REACHES target_slots. +# Without this arm, a filter that silently matched nothing would also +# report BYTE_IDENTICAL=true. +# +# ⚠ ARM 1 IS BASELINED ON THE MIGRATED FIXTURE, and it has to be. The committed +# fixture IS the patched artifact; comparing an UNPATCHED regeneration against it +# fails by construction post-migration (measured: BYTE_IDENTICAL=false, exit 1), +# which reads as "the fixture is corrupt" when it means "migrated, as designed". +# So the unpatched regeneration is arm 2's operand, never arm 1's expectation. +# +# TOOLCHAIN. Byte-identity is toolchain-coupled: gzip's deflate output and jq's +# key ordering are implementation details, not standards. The recipe below was +# established under the pinned versions; on any other version the control falls +# back to a canonical `jq -S` content comparison, which is toolchain-independent +# and still discriminating (it just cannot certify byte equality). + +set -euo pipefail + +PINNED_JQ="jq-1.7.1" +PINNED_GZIP="gzip 1.14" + +PRISTINE="" +EXPECT_SHA="" +EFFECT_KIND="" +OUT="" +CONTROL_MODE=0 + +usage() { + sed -n '2,57p' "${BASH_SOURCE[0]}" | sed 's/^# \{0,1\}//' + exit "${1:-1}" +} + +while [ $# -gt 0 ]; do + case "$1" in + --pristine) PRISTINE="${2:?--pristine needs a path}"; shift 2 ;; + --expect-sha256) EXPECT_SHA="${2:?--expect-sha256 needs a hash}"; shift 2 ;; + --effect-kind) EFFECT_KIND="${2:?--effect-kind needs an EffectKind variant name}"; shift 2 ;; + --out) OUT="${2:?--out needs a path}"; shift 2 ;; + --control) CONTROL_MODE=1; shift ;; + -h|--help) usage 0 ;; + *) echo "unknown argument: $1" >&2; usage 1 ;; + esac +done + +[ -n "$PRISTINE" ] || { echo "missing --pristine" >&2; exit 1; } +[ -n "$EXPECT_SHA" ] || { echo "missing --expect-sha256" >&2; exit 1; } +[ -n "$OUT" ] || { echo "missing --out" >&2; exit 1; } +# Control mode needs --effect-kind too: arm 1 re-runs the FULL recipe, patch +# included, because the committed fixture is the patched artifact. +[ -n "$EFFECT_KIND" ] || { echo "missing --effect-kind" >&2; exit 1; } + +for tool in unzip jq gzip sha256sum; do + command -v "$tool" >/dev/null 2>&1 || { echo "required tool not found: $tool" >&2; exit 1; } +done + +# 1. Verify the pristine input. Abort rather than migrate an unexpected dump — +# fixture<->dump correspondence is by CONTENT, never by filename (the name +# trap is real: witherbloom-sprout-lumaret-works-slow.zip maps to +# witherbloom_sprout_lumaret_SIMPLE_4p.json.gz). +ACTUAL_SHA="$(sha256sum "$PRISTINE" | cut -d' ' -f1)" +if [ "$ACTUAL_SHA" != "$EXPECT_SHA" ]; then + echo "pristine sha256 mismatch for $PRISTINE" >&2 + echo " expected: $EXPECT_SHA" >&2 + echo " actual: $ACTUAL_SHA" >&2 + exit 1 +fi + +JQ_VERSION="$(jq --version)" +GZIP_VERSION="$(gzip --version | head -1)" + +# 2. Patch + 3. compress. ONE filter, applied to every slot in the prompt. +# ONE definition of the recipe, used by BOTH the migration and the control — +# a control that re-spelled the recipe would certify its own copy. +regenerate() { # regenerate + local mode="$1" dest="$2" filter='{gameState:.gameState}' + if [ "$mode" = patched ]; then + filter='.gameState.waiting_for.data.target_slots |= map(. + {effect_kind: $k}) | {gameState:.gameState}' + fi + mkdir -p "$(dirname "$dest")" + unzip -p "$PRISTINE" | jq -c --arg k "$EFFECT_KIND" "$filter" | gzip -9 -n > "$dest" +} + +if [ "$CONTROL_MODE" -eq 1 ]; then + # 5. Control mode, TWO arms, both mandatory. Runnable by anyone, at any time, + # with no engine build. Arm 1 re-runs the full recipe and holds it against + # the committed fixture; arm 2 re-runs it WITHOUT the patch and requires the + # result to differ, which is what proves the patch filter has teeth. + [ -f "$OUT" ] || { echo "control mode needs an existing committed fixture at $OUT" >&2; exit 1; } + PATCHED="$(mktemp -t migrate-dump-patched-XXXXXX.json.gz)" + UNPATCHED="$(mktemp -t migrate-dump-unpatched-XXXXXX.json.gz)" + trap 'rm -f "$PATCHED" "$UNPATCHED"' EXIT + regenerate patched "$PATCHED" + regenerate unpatched "$UNPATCHED" + + echo "CONTROL pristine=$(basename "$PRISTINE") sha256=$ACTUAL_SHA" + echo "CONTROL effect_kind=$EFFECT_KIND out=$OUT" + echo "CONTROL jq=$JQ_VERSION gzip=$GZIP_VERSION" + + # ARM 1 — the patched regeneration reproduces the committed fixture. + case "$JQ_VERSION:$GZIP_VERSION" in + "$PINNED_JQ:$PINNED_GZIP"*) + if cmp -s "$PATCHED" "$OUT"; then + echo "CONTROL BYTE_IDENTICAL=true" + else + echo "CONTROL BYTE_IDENTICAL=false" >&2 + exit 1 + fi + ;; + *) + # Toolchain drift: byte equality is not certifiable, but content equality + # is, and it still catches a recipe that reads the wrong dump. + echo "CONTROL toolchain differs from pinned ($PINNED_JQ / $PINNED_GZIP) — falling back to canonical content comparison" + if [ "$(gzip -dc "$PATCHED" | jq -S -c .)" = "$(gzip -dc "$OUT" | jq -S -c .)" ]; then + echo "CONTROL CANONICALLY_EQUAL=true BYTE_IDENTICAL=unknown" + else + echo "CONTROL CANONICALLY_EQUAL=false" >&2 + exit 1 + fi + ;; + esac + + # ARM 2 — the patch reached target_slots. Compared as canonical CONTENT, not + # bytes: this arm asserts a DIFFERENCE, and a difference in compressed bytes + # alone would also be produced by gzip drift, which is not what it claims. + if [ "$(gzip -dc "$PATCHED" | jq -S -c .)" = "$(gzip -dc "$UNPATCHED" | jq -S -c .)" ]; then + echo "CONTROL PATCHED_DIFFERS=false — the jq filter matched nothing; arm 1 above would pass vacuously" >&2 + exit 1 + fi + echo "CONTROL PATCHED_DIFFERS=true stamped=$(gzip -dc "$PATCHED" | jq -c '[.gameState.waiting_for.data.target_slots[]?.effect_kind]') unpatched=$(gzip -dc "$UNPATCHED" | jq -c '[.gameState.waiting_for.data.target_slots[]?.effect_kind]')" + exit 0 +fi + +regenerate patched "$OUT" + +OUT_SHA="$(sha256sum "$OUT" | cut -d' ' -f1)" +SLOTS="$(gzip -dc "$OUT" | jq -c '[.gameState.waiting_for.data.target_slots[]?.effect_kind]')" + +# 4. Record the provenance on stdout so a commit message can quote it. +echo "MIGRATED pristine=$(basename "$PRISTINE") sha256=$ACTUAL_SHA" +echo "MIGRATED effect_kind=$EFFECT_KIND stamped_slots=$SLOTS" +echo "MIGRATED out=$OUT sha256=$OUT_SHA" +echo "MIGRATED jq=$JQ_VERSION gzip=$GZIP_VERSION" From e057a12bdb887b84b3225fc2c33a82c51c1a723b Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sat, 1 Aug 2026 12:04:22 -0500 Subject: [PATCH 12/62] feat(engine): split LoopDetectSample into normalized and live ring halves (5d U0) CR 104.4b: the normalized half stays the draw-detection comparand; the live half preserves what normalization erases so later 5d steps can evaluate period touches against real board state. Ring re-typed VecDeque>, serde(skip) unchanged (zero persistence surface), normalize_for_loop body untouched. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/analysis/resource.rs | 26 +++- crates/engine/src/game/engine.rs | 50 +++++-- crates/engine/src/types/game_state.rs | 51 ++++++- crates/engine/src/types/mod.rs | 8 +- .../engine/tests/integration/loop_shortcut.rs | 129 +++++++++++++++++- 5 files changed, 230 insertions(+), 34 deletions(-) diff --git a/crates/engine/src/analysis/resource.rs b/crates/engine/src/analysis/resource.rs index 6e174eefd8..9658b83f54 100644 --- a/crates/engine/src/analysis/resource.rs +++ b/crates/engine/src/analysis/resource.rs @@ -949,7 +949,7 @@ pub(crate) fn ring_delta_signature(state: &GameState) -> Option<(u32, ResourceVe let snaps: Vec = state .loop_detect_ring .iter() - .map(|f| ResourceVector::snapshot(f)) + .map(|f| ResourceVector::snapshot(&f.normalized)) .collect(); let deltas: Vec = snaps .windows(2) @@ -999,7 +999,7 @@ pub(crate) fn ring_delta_signature(state: &GameState) -> Option<(u32, ResourceVe .loop_detect_ring .iter() .skip(frames - (2 * k + 1)) - .map(|f| f.as_ref()) + .map(|f| &f.normalized) .collect(); if !window.windows(2).all(|w| { window_scope_from_cover_frames(w[0], w[1], None) @@ -11271,9 +11271,14 @@ mod tests { for &life in lives { let mut frame = GameState::new_two_player(0); frame.players[1].life = life; - state - .loop_detect_ring - .push_back(std::sync::Arc::new(frame.normalize_for_loop())); + // Both halves built exactly as `record_loop_detect_sample` builds them, so + // the fixture cannot diverge from production's construction. + state.loop_detect_ring.push_back(std::sync::Arc::new( + crate::types::LoopDetectSample { + normalized: frame.normalize_for_loop(), + live: frame.loop_detect_live_sample(), + }, + )); } state } @@ -11357,7 +11362,11 @@ mod tests { .loop_detect_ring .back_mut() .expect("the ring was just built with three frames"); - std::sync::Arc::make_mut(last).turn_number += 1; + // `.normalized` is the half the subject reads (`ring_delta_signature` → + // `window_scope_from_cover_frames`). Retargeting this to `.live` makes the + // subject see no turn crossing ⇒ `Some` ⇒ the `assert_eq!(.., None, ..)` below + // FAILS LOUDLY. That is the arm working, not a reason to weaken the assertion. + std::sync::Arc::make_mut(last).normalized.turn_number += 1; } assert_eq!( ring_delta_signature(&turn_crossing), @@ -11536,7 +11545,10 @@ mod tests { // Same trajectory, same ring, ONE axis neutralized. let mut flat = state.clone(); for frame in flat.loop_detect_ring.iter_mut() { - let f = std::sync::Arc::make_mut(frame); + // `.normalized` is the half the subject reads. Writing `.live` instead + // leaves the axis un-flattened ⇒ `flattened_some == 0` ⇒ the shipped + // `assert!(flattened_some > 0, ..)` below FAILS LOUDLY. + let f = &mut std::sync::Arc::make_mut(frame).normalized; f.turn_number = 1; f.phase = Phase::Upkeep; } diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index dd8cf565a1..de5e55d903 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -593,7 +593,7 @@ fn reconcile_terminal_result(state: &mut GameState, result: &mut ActionResult) { LoopDetectionMode::On => { // Clone the Arc handles (cheap refcount bumps) to release the borrow on the // ring before the GameOver mutation below. - let priors: Vec> = + let priors: Vec> = state.loop_detect_ring.iter().cloned().collect(); let cur = crate::analysis::resource::ResourceVector::snapshot(state); // Carry the matching cycle's `delta` out of the scan alongside the winner so @@ -604,17 +604,19 @@ fn reconcile_terminal_result(state: &mut GameState, result: &mut ActionResult) { // fails either seam gate, continue scanning older priors (fail-safe). if let Some((winner, delta)) = priors.iter().enumerate().find_map(|(k, prior)| { let delta = crate::analysis::resource::ResourceVector::delta( - &crate::analysis::resource::ResourceVector::snapshot(prior), + &crate::analysis::resource::ResourceVector::snapshot(&prior.normalized), &cur, ); let winner = crate::analysis::loop_check::live_mandatory_loop_winner( - prior, state, &delta, + &prior.normalized, + state, + &delta, )?; // The matched window: the prior frame at `k`, every subsequent ring frame, // then the live state — all per-resolution, no gaps (a non-sampling beat // clears the ring, so a confirmed window is gap-free). let mut frames: Vec<&GameState> = - priors[k..].iter().map(|p| p.as_ref()).collect(); + priors[k..].iter().map(|p| &p.normalized).collect(); frames.push(state); // CR 704.5a + CR 104.4a (m9): the winner (sole non-faller) must never dip // across the window — a transient intra-cycle dip a net-delta check cannot @@ -750,7 +752,9 @@ fn interactive_loop_bridge(state: &mut GameState, result: &mut ActionResult) { // CR 732.2a: OPTIONAL winning drain — only the player with priority may propose // the shortcut. Keep that proposer distinct from the already-measured winner; a // loop can be detected during a different player's priority window. - let certificate = build_cert(prior.as_ref(), state, &delta, winner); + // `build_cert`'s only use of the frame is `board_delta(prior, state)`, a + // comparand read ⇒ the CR 104.4b `.normalized` half. + let certificate = build_cert(&prior.normalized, state, &delta, winner); // CR 732.2a: a non-targeted drain reifies no per-iteration player choice ⇒ carry an // empty pin list; only the `iteration_count` (from `win_kind`) is populated. let WaitingFor::Priority { player: proposer } = state.waiting_for else { @@ -798,10 +802,11 @@ fn interactive_loop_bridge(state: &mut GameState, result: &mut ActionResult) { // found no determinate winner. `mandatory` gates it (CR 732.5); a loss axis or an // optional loop falls through to the pre-feature halt. if mandatory { - let priors: Vec> = + let priors: Vec> = state.loop_detect_ring.iter().cloned().collect(); let cur = crate::analysis::resource::ResourceVector::snapshot(state); for prior in &priors { + let prior = &prior.normalized; let delta = crate::analysis::resource::ResourceVector::delta( &crate::analysis::resource::ResourceVector::snapshot(prior), &cur, @@ -840,10 +845,11 @@ fn interactive_loop_bridge(state: &mut GameState, result: &mut ActionResult) { // under their own control", the closest live realization of CR 104.4b's grant. if !mandatory { let controller = state.active_player; // sampler gate is Priority{active_player}: the driver - let priors: Vec> = + let priors: Vec> = state.loop_detect_ring.iter().cloned().collect(); let cur = crate::analysis::resource::ResourceVector::snapshot(state); for prior in &priors { + let prior = &prior.normalized; let delta = crate::analysis::resource::ResourceVector::delta( &crate::analysis::resource::ResourceVector::snapshot(prior), &cur, @@ -937,17 +943,22 @@ fn find_live_loop_winner( ) -> Option<( PlayerId, crate::analysis::resource::ResourceVector, - std::sync::Arc, + std::sync::Arc, )> { - let priors: Vec> = state.loop_detect_ring.iter().cloned().collect(); + let priors: Vec> = + state.loop_detect_ring.iter().cloned().collect(); let cur = crate::analysis::resource::ResourceVector::snapshot(state); priors.iter().enumerate().find_map(|(k, prior)| { let delta = crate::analysis::resource::ResourceVector::delta( - &crate::analysis::resource::ResourceVector::snapshot(prior), + &crate::analysis::resource::ResourceVector::snapshot(&prior.normalized), &cur, ); - let winner = crate::analysis::loop_check::live_mandatory_loop_winner(prior, state, &delta)?; - let mut frames: Vec<&GameState> = priors[k..].iter().map(|p| p.as_ref()).collect(); + let winner = crate::analysis::loop_check::live_mandatory_loop_winner( + &prior.normalized, + state, + &delta, + )?; + let mut frames: Vec<&GameState> = priors[k..].iter().map(|p| &p.normalized).collect(); frames.push(state); if !crate::analysis::loop_check::winner_life_never_dips(&frames, winner) { return None; @@ -1090,7 +1101,12 @@ pub fn try_offer_bounded_cycle_shortcut( // copy … the `On` arm stays VERBATIM (byte-identity gate)" — and retargeting the four // shipped walks would edit byte-identity-gated paths inside a feature commit. Newest // prior first: the most recent recurrence is the least extrapolation. - let ring: Vec<&GameState> = state.loop_detect_ring.iter().map(|f| f.as_ref()).collect(); + // CR 104.4b comparand half — every certification reader, unchanged in value from HEAD. + let ring: Vec<&GameState> = state + .loop_detect_ring + .iter() + .map(|f| &f.normalized) + .collect(); let cur = ResourceVector::snapshot(state); let basis_a = ring.iter().enumerate().rev().find_map(|(idx, &prior)| { // The span, in RETAINED RING FRAMES, that this candidate pair covers. @@ -13862,9 +13878,13 @@ mod bounded_offer_conjunct_tests { for i in 0..frames { let mut frame = state.clone(); shape(&mut frame, i); + // Both halves built exactly as `record_loop_detect_sample` builds them. state .loop_detect_ring - .push_back(std::sync::Arc::new(frame.normalize_for_loop())); + .push_back(std::sync::Arc::new(crate::types::LoopDetectSample { + normalized: frame.normalize_for_loop(), + live: frame.loop_detect_live_sample(), + })); } state } @@ -14089,7 +14109,7 @@ mod bounded_offer_conjunct_tests { .loop_detect_ring .back() .expect("the fixture builds a ring") - .as_ref() + .normalized .clone(); assert!( loop_states_equal_modulo_resources(&newest, &state), diff --git a/crates/engine/src/types/game_state.rs b/crates/engine/src/types/game_state.rs index cfbb5049a0..7f65b72be8 100644 --- a/crates/engine/src/types/game_state.rs +++ b/crates/engine/src/types/game_state.rs @@ -12706,6 +12706,32 @@ impl<'de> Deserialize<'de> for PendingLiminalEntryResume { } } +/// CR 104.4b + CR 732.2a: ONE retained loop-detection sample, with its two roles +/// separated at the type level. +/// +/// `normalized` is the **CR 104.4b comparand** — the only half +/// `loop_states_equal_modulo_resources` / `loop_states_cover_modulo_growth*` / +/// `ring_delta_signature` may read. It is byte-identical to the frame the ring held +/// before the split, because [`GameState::normalize_for_loop`] is unchanged. +/// +/// `live` is the **CR 732.2a evaluable** — the same beat un-normalized, and the only +/// half the period-touch consumers may read. Normalization zeroes `next_object_id` and +/// runs `clear_trigger_identity_recursive`, so evaluating a resolution against a +/// normalized frame allocates `ObjectId(0)` over a live object and loses the trigger +/// source identity; those are inputs to a mint and to a resolution probe, never to an +/// equality comparand. +/// +/// `Clone` is load-bearing, not decoration: ring elements are written through +/// `Arc::make_mut` (two sites in `analysis/resource.rs`), which is bounded +/// `T: CloneToUninit` ⇐ `T: Clone`. `PartialEq`/`Serialize`/`Default` are deliberately +/// absent — the field is `#[serde(skip, default)]` and excluded from `impl PartialEq for +/// GameState`, so no site needs them. +#[derive(Debug, Clone)] +pub struct LoopDetectSample { + pub normalized: GameState, + pub live: GameState, +} + #[derive(Debug, Clone, Serialize, Deserialize)] pub struct GameState { pub turn_number: u32, @@ -12988,7 +13014,9 @@ pub struct GameState { )] pub static_mode_presence: crate::types::statics::StaticModePresence, /// CR 732.2a loop-shortcut detection ring (PR-3). A bounded FIFO of recent - /// post-resolution NORMALIZED board snapshots, captured at the post-pipeline frame + /// post-resolution [`LoopDetectSample`]s — each carrying BOTH the CR 104.4b + /// `normalized` comparand (what this ring held before the two roles were split) and + /// the CR 732.2a `live` evaluable — captured at the post-pipeline frame /// of `game::engine::pass_priority_once_with_pipeline` (after /// `run_post_action_pipeline` places refilling triggers, CR 603.3) and scanned at /// the SBA-reconciliation seam (`game::engine::reconcile_terminal_result`). A @@ -13008,7 +13036,7 @@ pub struct GameState { /// `layers_dirty`, which are `serde(skip)` but ARE compared in `eq`) so AI-search /// dedup on semantically-identical positions is unaffected. #[serde(skip, default)] - pub loop_detect_ring: std::collections::VecDeque>, + pub loop_detect_ring: std::collections::VecDeque>, /// Live-only authority for the finite pre-cast shortcut. It is absent from /// raw/public serialization; trusted persistence uses the explicit codec /// envelope in `game::precast_copy_shortcut`. @@ -19114,10 +19142,27 @@ impl GameState { if self.loop_detect_ring.len() == LOOP_DETECT_RING_CAP { self.loop_detect_ring.pop_front(); } - let snapshot = std::sync::Arc::new(self.normalize_for_loop()); + let snapshot = std::sync::Arc::new(LoopDetectSample { + normalized: self.normalize_for_loop(), + live: self.loop_detect_live_sample(), + }); self.loop_detect_ring.push_back(snapshot); } + /// CR 732.2a: the un-normalized half of a [`LoopDetectSample`] — this beat exactly as + /// it stood, so a period-touch consumer evaluates against real object ids and real + /// trigger-source identity. + /// + /// The ring clear is mandatory and is `normalize_for_loop`'s own reason: samples are + /// produced from the live state, so without it each stored sample would carry a clone + /// of the live ring ⇒ recursive/quadratic growth. **Nothing else is touched** — every + /// other field is what makes this half the evaluable one. + pub(crate) fn loop_detect_live_sample(&self) -> GameState { + let mut clone = self.clone(); + clone.loop_detect_ring.clear(); + clone + } + /// CR 510.2 + CR 704.3 + CR 704.5a + CR 732.2a: drop the loop-detection ring when a /// turn-based action moved a life total with NO intervening priority. /// diff --git a/crates/engine/src/types/mod.rs b/crates/engine/src/types/mod.rs index a30fd16ab0..0dfb31a420 100644 --- a/crates/engine/src/types/mod.rs +++ b/crates/engine/src/types/mod.rs @@ -46,10 +46,10 @@ pub use events::GameEvent; pub use format::{DeckCopyLimit, FormatConfig, GameFormat}; pub use game_state::{ ActionResult, BattlefieldEntryRecord, CommanderDamageEntry, CostResume, GameState, LKISnapshot, - LandPlayRecord, NextSpellModifier, PayCostKind, PendingNextSpellModifier, PendingReplacement, - PendingSpellCostReduction, PlayerDeckPool, PriorityPassingMode, ScheduledTurnControl, - SpellCastRecord, StackEntry, StackEntryKind, TransientContinuousEffect, WaitingFor, - ZoneChangeRecord, + LandPlayRecord, LoopDetectSample, NextSpellModifier, PayCostKind, PendingNextSpellModifier, + PendingReplacement, PendingSpellCostReduction, PlayerDeckPool, PriorityPassingMode, + ScheduledTurnControl, SpellCastRecord, StackEntry, StackEntryKind, TransientContinuousEffect, + WaitingFor, ZoneChangeRecord, }; pub use identifiers::{ CardId, ObjectId, ObjectIdentityBinding, ObjectIncarnationRef, ObjectProvenance, diff --git a/crates/engine/tests/integration/loop_shortcut.rs b/crates/engine/tests/integration/loop_shortcut.rs index e8df594b37..15c32d6d62 100644 --- a/crates/engine/tests/integration/loop_shortcut.rs +++ b/crates/engine/tests/integration/loop_shortcut.rs @@ -355,7 +355,7 @@ fn drive_collect_primed( primed = state .loop_detect_ring .iter() - .any(|prior| loop_states_equal_modulo_resources(prior, state)); + .any(|prior| loop_states_equal_modulo_resources(&prior.normalized, state)); } } (all, runner.state().waiting_for.clone(), primed, declined) @@ -6105,8 +6105,10 @@ fn drawgo_ring_spans_turns_but_never_offers() { let before = state.loop_detect_ring.len(); let pair = (witness.is_none() && turn_based && before >= 4) .then(|| { - let front = state.loop_detect_ring.front()?.clone(); - let back = state.loop_detect_ring.back()?.clone(); + // The witness reports on the basis-B turn conjunct, which reads the + // CR 104.4b comparand half. + let front = state.loop_detect_ring.front()?.normalized.clone(); + let back = state.loop_detect_ring.back()?.normalized.clone(); (front.turn_number < state.turn_number).then_some((front, back)) }) .flatten(); @@ -6121,8 +6123,8 @@ fn drawgo_ring_spans_turns_but_never_offers() { front.turn_number, before, state.loop_detect_ring.len(), - (*front).clone(), - (*back).clone(), + front.clone(), + back.clone(), )); } } @@ -10057,3 +10059,120 @@ fn a_declared_target_made_illegal_mid_drive_stops_short_and_never_retargets() { not undone by the abort" ); } + +/// **Row R27 conjunct (a1) — THE SPLIT IS REAL AND THE TWO HALVES DIFFER.** +/// +/// CR 104.4b + CR 732.2a: `LoopDetectSample` separates the equality *comparand* from the +/// shortcut *evaluable*. Every later conjunct of R27 (a2/a3/b/c, U3) asserts that a +/// period-touch consumer reads the un-normalized half; **all of them are false PASSes if +/// the two halves happen to hold the same thing.** This row is the BASE/POST discipline +/// applied to the split itself: it pins that a real production sample's halves DIFFER on +/// the axis that made the split necessary. +/// +/// The axis is the object allocator. `normalize_for_loop` zeroes `next_object_id` +/// (`types/game_state.rs`, `clone.next_object_id = 0;`) while the live sample keeps it, +/// and `zones::create_object` allocates `ObjectId(state.next_object_id)` then +/// `state.objects.insert(id, obj)` — so evaluating a token creation against a normalized +/// frame allocates `ObjectId(0)` and REPLACES whatever object id 0 is, corrupting the map +/// the resolution runs on. That is the concrete defect the split exists to prevent. +/// +/// **Revert-probe:** make `GameState::loop_detect_live_sample` return +/// `self.normalize_for_loop()` (i.e. collapse the split) ⇒ `live.next_object_id` becomes +/// `0` ⇒ the `assert_ne!` and the `live == pre_sample` assertion both FAIL. The row is +/// deliberately NOT sensitive to which half any consumer reads — that is (a2)/(a3)'s job — +/// so it stays the honest positive control while those arms are the subject. +/// +/// Fixture: the tracked `dellian_emblem_conqueror_4p` dump, driven through the production +/// `apply()` path so the ring is populated by `record_loop_detect_sample` itself and not by +/// a hand-built fixture. +#[test] +fn a_recorded_loop_detect_sample_keeps_a_live_half_normalization_would_have_erased() { + let json = gunzip_dump(include_bytes!( + "../fixtures/dellian_emblem_conqueror_4p.json.gz" + )); + let mut state = restore_dump(&json); + + // ── REACH-GUARDS. Without these the assertions below are vacuous. + assert!( + state.loop_detection.samples(), + "reach-guard: the dump must load with a SAMPLING loop-detection mode, else no sample \ + is ever recorded; got {:?}", + state.loop_detection + ); + assert_eq!( + state.loop_detect_ring.len(), + 0, + "reach-guard: the dump ships with an EMPTY ring — every frame below was accumulated by \ + THIS drive through the production producer, not restored from the dump" + ); + + let pin = engine_live_opponents(&state, P0).first().copied(); + + // Drive until the production sampler has recorded at least one sample, capturing the + // live `next_object_id` observed at the beat immediately BEFORE the ring grew. That + // pre-sample value is what the `live` half must have preserved. + let mut witness: Option<(u64, u64, u64, u64)> = None; + for _ in 0..400 { + if matches!(state.waiting_for, WaitingFor::LoopShortcut { .. }) { + break; + } + let before = state.loop_detect_ring.len(); + let next_object_id_before = state.next_object_id; + if dump_drive_one_beat(&mut state, pin).is_err() { + break; + } + if state.loop_detect_ring.len() > before { + let sample = state + .loop_detect_ring + .back() + .expect("the ring just grew, so it has a back element"); + witness = Some(( + next_object_id_before, + sample.live.next_object_id, + sample.normalized.next_object_id, + state.next_object_id, + )); + break; + } + } + + let (before_beat, live, normalized, after_beat) = witness.expect( + "reach-guard: the drive must record at least one loop-detect sample, else this row \ + asserts about a ring that was never populated and passes vacuously", + ); + + // The whole point of the axis: it must be non-degenerate on this board, so that + // `live != normalized` is a real inequality and not `0 != 0` dressed up, and so that + // the lower bound below actually bites. + assert!( + before_beat > 0, + "reach-guard: the allocator axis must be non-degenerate — a board that had allocated \ + ZERO objects makes the split unobservable on this axis and every assertion below \ + trivially true; got next_object_id = {before_beat}" + ); + + // ── THE CLAIM, both directions. + assert_eq!( + normalized, 0, + "CR 104.4b: the comparand half is `normalize_for_loop()`d, which zeroes the volatile \ + monotonic allocator so two positions reached at different times can compare equal" + ); + // The sampler runs at the POST-pipeline frame, so objects allocated earlier in the same + // beat are already counted: the live half is bracketed by the beat's own endpoints + // rather than equal to either. Collapsing the split drives it to 0, which is below + // `before_beat` (> 0 by the reach-guard above) and so fails this bound. + assert!( + (before_beat..=after_beat).contains(&live), + "CR 732.2a: the evaluable half is the beat un-normalized — it must carry the live \ + allocator cursor as of the post-pipeline frame the sampler runs at, i.e. inside \ + [{before_beat}, {after_beat}], because a shortcut's 'predictable results' are \ + evaluated by really resolving against it and `zones::create_object` allocates \ + `ObjectId(state.next_object_id)`; got {live}" + ); + assert_ne!( + live, normalized, + "THE SPLIT IS REAL: if the two halves agreed on this axis, R27's later conjuncts \ + (a2)/(a3)/(b)/(c) — every one of which asserts that a period-touch consumer reads the \ + un-normalized half — would be satisfiable by a build in which the split does not exist" + ); +} From 7871f31774b0c51f2d35196f781fd14b26b92f77 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sat, 1 Aug 2026 14:43:06 -0500 Subject: [PATCH 13/62] feat(engine): event-derived resolution obligation and prompt-cause partition (5d U1) CR 616.1/614.1a: replacement-prompt causes derived from the proposed-event stream (ReplacementPromptCauses bit-set over find_applicable_replacements); 29-variant wildcard-free event_is_accounted partition; probe_resolution with the four Prompted arms; bind_resolution_scope extracted from resolve_top (CR 608.2k); UpTo guards on all six promoted quantity arms; forward-split verdict_memo::ProbeBudget (narrowed at U3). Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/analysis/resource.rs | 875 ++++++++--- crates/engine/src/game/ability_scan.rs | 762 +--------- crates/engine/src/game/effects/token.rs | 29 +- crates/engine/src/game/mod.rs | 1 + crates/engine/src/game/replacement.rs | 350 +++++ crates/engine/src/game/resolution_prompt.rs | 1503 +++++++++++++++++++ crates/engine/src/game/stack.rs | 375 ++++- 7 files changed, 2832 insertions(+), 1063 deletions(-) create mode 100644 crates/engine/src/game/resolution_prompt.rs diff --git a/crates/engine/src/analysis/resource.rs b/crates/engine/src/analysis/resource.rs index 9658b83f54..7c4f52cd53 100644 --- a/crates/engine/src/analysis/resource.rs +++ b/crates/engine/src/analysis/resource.rs @@ -38,6 +38,76 @@ use crate::types::player::{Player, PlayerId}; use crate::types::replacements::ReplacementEvent; use crate::types::zones::Zone; +/// CR 732.2a: the metered spend the resolution probe charges against. +/// +/// A NESTED module, not a new file, and that nesting is the enforcement: Rust +/// privacy is module-scoped, so a budget defined beside its consumers could be +/// re-constructed by any same-module code and its spend would be invisible to +/// the meter. Defining it one module down lets the constructor be narrowed +/// without also narrowing it away from this module's own wrappers. +mod verdict_memo { + /// The shipped probe cap, per classification run. + pub(crate) const PROBE_BUDGET: u32 = 12; + + /// CR 732.2a: cost is a COVERAGE knob, never a soundness knob — an + /// unaffordable probe degrades to honest-red (no certificate, no offer), + /// never to a wrong certificate and never to an unbounded stall. + /// + /// **Derive list pinned to exactly `#[derive(Debug)]`** — no `Default`, no + /// `Clone`/`Copy`. A derived constructor recompiles the construction escape + /// with `new` untouched: the derived value is a zero-cap always-denying + /// budget, which is fail-closed but meter-invisible and relief-disabling. + #[derive(Debug)] + pub(crate) struct ProbeBudget { + remaining: u32, + /// Latched by [`ProbeBudget::try_charge_one`] so an exhaustion can be + /// ATTRIBUTED rather than inferred from a zero remainder. Its production + /// reader is the metered mint's exhaustion accounting, which is not + /// built yet; until then the latch is exercised by this module's own + /// unit row, which is why the accessor is `cfg(test)`. + #[cfg_attr(not(test), allow(dead_code))] + denied: bool, + } + + impl ProbeBudget { + /// `pub(super)` while the parent module is the only constructor site. + pub(super) fn new(cap: u32) -> Self { + Self { + remaining: cap, + denied: false, + } + } + + /// `false` ⇒ exhausted, and the exhaustion fact is latched so it can be + /// attributed rather than inferred from a zero remainder. + pub(crate) fn try_charge_one(&mut self) -> bool { + if self.remaining == 0 { + self.denied = true; + return false; + } + self.remaining -= 1; + true + } + + /// Did any charge get denied against this budget? + #[cfg(test)] + pub(crate) fn denied(&self) -> bool { + self.denied + } + + /// TEST-ONLY constructor. `new` stays `pub(super)` so no PRODUCTION site + /// outside this module's own wrappers can mint a budget whose spend + /// would be invisible to a meter; a `cfg(test)` door cannot widen that, + /// because it does not exist in a production build. + #[cfg(test)] + pub(crate) fn for_test(cap: u32) -> Self { + Self::new(cap) + } + } +} + +pub(crate) use verdict_memo::{ProbeBudget, PROBE_BUDGET}; + /// WUBRG + colorless, the canonical index order used by [`ResourceVector::mana`]. /// /// Matches `ManaColor::ALL` (WUBRG) with colorless appended, so index `i` of the @@ -1344,8 +1414,9 @@ fn pinned_may_choice_relief( state: &GameState, entry: &StackEntry, scope: LoopWindowScope<'_>, -) -> Option { - use crate::game::ability_scan::ResolutionChoiceFreedom; + budget: &mut ProbeBudget, +) -> Option { + use crate::game::resolution_prompt::ResolutionChoiceFreedom; let pins = scope.pinned?; let published = crate::game::engine::entry_publishes_pin_slots(state, entry, pins.proposer)?; let may = published.may?; @@ -1360,7 +1431,18 @@ fn pinned_may_choice_relief( // the counterfactual instead of this module re-implementing its six reasons. let mut without_may_gate = (**ability).clone(); without_may_gate.optional = false; - match crate::game::ability_scan::ability_resolution_choice_freedom(&without_may_gate) { + // CR 603.4 + CR 608.2k: same resolution board the primary classification + // uses — this entry off the stack, scope bound. + let mut board = state.clone(); + board.stack.retain(|e| e.id != entry.id); + if !crate::game::stack::bind_resolution_scope(&mut board, entry, None) { + return None; + } + match crate::game::resolution_prompt::ability_resolution_choice_freedom( + &board, + &without_may_gate, + budget, + ) { ResolutionChoiceFreedom::MayPrompt => None, residual @ ResolutionChoiceFreedom::FreeUnlessReplacements(_) => Some(residual), } @@ -1418,7 +1500,7 @@ pub(crate) fn loop_states_cover_modulo_growth(prior: &GameState, current: &GameS /// for a triggered ability via CR 603.3d), the same /// [`stack_entry_resolution_choice_freedom`] (CR 608.2d resolution-time prompts), the same /// [`entry_target_choice_is_pinned`] / [`pinned_may_choice_relief`] pin relief, and the same -/// CR 616.1 [`replacement_environment_may_prompt`] environmental guard the +/// CR 616.1 [`proposed_event_prompt_cause`] environmental guard the /// `FreeUnlessReplacements` verdict's own contract requires. Nothing is re-derived here. /// /// STRICTER than gate (3) in one deliberate way: gate (3) examines only entries whose @@ -1468,29 +1550,61 @@ pub(crate) fn stack_choices_are_all_specified( } } // Resolution-time (gate (6)'s fact), including its paired CR 616.1 obligation. - // The obligation is a UNION over entries: a stack holding both a life entry and a - // draw entry owes both environmental checks, and each verdict names its own class. - let mut obligations = crate::game::ability_scan::ReplacementPromptClasses::NONE; + // The obligation is discharged PER ENTRY against the pipeline's own candidate + // authority, on the same board the entry's events were derived on. + let mut budget = ProbeBudget::new(PROBE_BUDGET); for entry in &state.stack { - match stack_entry_resolution_choice_freedom(entry) { - crate::game::ability_scan::ResolutionChoiceFreedom::MayPrompt => { - match pinned_may_choice_relief(state, entry, scope) { - Some( - crate::game::ability_scan::ResolutionChoiceFreedom::FreeUnlessReplacements( - classes, - ), - ) => obligations = obligations.or(classes), - Some(crate::game::ability_scan::ResolutionChoiceFreedom::MayPrompt) | None => { - return false - } + let verdict = match stack_entry_resolution_choice_freedom(state, entry, &mut budget) { + crate::game::resolution_prompt::ResolutionChoiceFreedom::MayPrompt => { + match pinned_may_choice_relief(state, entry, scope, &mut budget) { + Some(residual) => residual, + None => return false, } } - crate::game::ability_scan::ResolutionChoiceFreedom::FreeUnlessReplacements(classes) => { - obligations = obligations.or(classes) - } + free => free, + }; + if !resolution_events_are_discharged(state, verdict) { + return false; + } + } + true +} + +/// CR 614.1 + CR 616.1: discharge one entry's resolution verdict against the +/// replacement pipeline's own candidate authority, on the board its events were +/// derived on. +/// +/// `board` is the frame carrying the resolution. BOTH halves of this discharge +/// are frame-sensitive: the events are the EVENT half and +/// `proposed_event_prompt_cause`'s first argument is the CANDIDATE-AUTHORITY +/// half — it runs `find_applicable_replacements` over that board's replacement +/// population, so handing it a different board would check one frame's events +/// against another frame's candidates. +fn resolution_events_are_discharged( + board: &GameState, + verdict: crate::game::resolution_prompt::ResolutionChoiceFreedom, +) -> bool { + use crate::game::resolution_prompt::ResolutionChoiceFreedom; + match verdict { + ResolutionChoiceFreedom::MayPrompt => false, + ResolutionChoiceFreedom::FreeUnlessReplacements(events) => { + // `events` came from the RESOLVER, never from a per-arm list, and is + // non-empty by construction — `probe_resolution` returns `Prompted` + // on an empty derivation, so `any()` can never discharge vacuously. + debug_assert!( + !events.is_empty(), + "empty derivations are MayPrompt, never FreeUnlessReplacements" + ); + !events.iter().any(|ev| { + !crate::game::replacement::proposed_event_prompt_cause( + board, + ev, + crate::game::replacement::replacement_registry(), + ) + .is_empty() + }) } } - !replacement_environment_may_prompt(state, obligations) } /// CR 732.2a: [`loop_states_cover_modulo_growth`] with an OFFER's published pin slots in @@ -1671,29 +1785,21 @@ pub(crate) fn loop_states_cover_modulo_growth_scoped( // gating an unpinned entry gets, so `FreeUnlessReplacements` still arms the // CR 616.1 environmental guard below for the classes it names — a pinned target/"may" // says nothing about whose life- or draw-event replacements might prompt. - let mut obligations = crate::game::ability_scan::ReplacementPromptClasses::NONE; + let mut budget = ProbeBudget::new(PROBE_BUDGET); for entry in ¤t.stack { - match stack_entry_resolution_choice_freedom(entry) { - crate::game::ability_scan::ResolutionChoiceFreedom::MayPrompt => { - match pinned_may_choice_relief(current, entry, scope) { - Some( - crate::game::ability_scan::ResolutionChoiceFreedom::FreeUnlessReplacements( - classes, - ), - ) => obligations = obligations.or(classes), - Some(crate::game::ability_scan::ResolutionChoiceFreedom::MayPrompt) | None => { - return false - } + let verdict = match stack_entry_resolution_choice_freedom(current, entry, &mut budget) { + crate::game::resolution_prompt::ResolutionChoiceFreedom::MayPrompt => { + match pinned_may_choice_relief(current, entry, scope, &mut budget) { + Some(residual) => residual, + None => return false, } } - crate::game::ability_scan::ResolutionChoiceFreedom::FreeUnlessReplacements(classes) => { - obligations = obligations.or(classes) - } + free => free, + }; + if !resolution_events_are_discharged(current, verdict) { + return false; } } - if replacement_environment_may_prompt(current, obligations) { - return false; - } true } @@ -3555,12 +3661,37 @@ fn stack_entry_reads_projected_resource(entry: &StackEntry) -> bool { /// a real fixture needs it.) The trigger-level `condition` (intervening-if /// re-check, CR 603.4) is pure evaluation and contributes no prompt. fn stack_entry_resolution_choice_freedom( + state: &GameState, entry: &StackEntry, -) -> crate::game::ability_scan::ResolutionChoiceFreedom { - use crate::game::ability_scan::ResolutionChoiceFreedom; + budget: &mut ProbeBudget, +) -> crate::game::resolution_prompt::ResolutionChoiceFreedom { + use crate::game::resolution_prompt::ResolutionChoiceFreedom; match &entry.kind { StackEntryKind::TriggeredAbility { ability, .. } => { - crate::game::ability_scan::ability_resolution_choice_freedom(ability) + // CR 603.4 + CR 608.2k: the classifier probes a RESOLUTION, so it + // must be handed the board `resolve_top` would hand + // `resolve_ability_chain` — this entry off the stack, with + // resolution scope bound. Handing it the raw pre-resolution board + // resolves every `EventContextAmount` / `Triggering*` reference + // against an absent context and is FAIL-OPEN for the `> 0`-gated + // virtual replacement arms. + // + // The entry is removed BY ID, never by `pop`: the callers walk the + // stack at arbitrary depth, so "pop the top" is wrong for every + // non-top entry, while "this entry is the one resolving" is the + // counterfactual being asked. The clone lands only on the probe — + // `resolve_top` calls the same shared binding on its own + // `&mut GameState` and pays nothing. + let mut board = state.clone(); + board.stack.retain(|e| e.id != entry.id); + if !crate::game::stack::bind_resolution_scope(&mut board, entry, None) { + // CR 603.4 false ⇒ the live resolution proposes nothing, and an + // empty derivation is never "safe". + return ResolutionChoiceFreedom::MayPrompt; + } + crate::game::resolution_prompt::ability_resolution_choice_freedom( + &board, ability, budget, + ) } StackEntryKind::Spell { .. } | StackEntryKind::ActivatedAbility { .. } @@ -3884,183 +4015,6 @@ pub(crate) fn life_growth_is_observed(state: &GameState) -> bool { ) } -/// The proposed-event class a `ReplacementEvent` watches. CR 616.1 -/// material-ordering competition is counted PER proposed-event class, because a -/// single `ProposedEvent::LifeLoss` draws candidates from every LifeLoss-matching -/// registry key at once (`LoseLife` + `LifeReduced` + `PayLife`). -#[derive(Clone, Copy, PartialEq, Eq)] -enum ReplacedEventClass { - /// Matches `ProposedEvent::LifeGain`. - LifeGain, - /// Matches `ProposedEvent::LifeLoss`. - LifeLoss, - /// Matches `ProposedEvent::Draw`. - Draw, -} - -/// CR 614.1a: which proposed-event class does this replacement event's registry -/// matcher (`crate::game::replacement`) watch? Compiler-exhaustive over ALL -/// `ReplacementEvent` variants (no wildcard) so a NEW variant fails to compile until -/// classified against the coupling rule. -/// -/// COUPLING RULE (grep-enforced when the set is edited): a variant is classified by -/// the `ProposedEvent` its MATCHER matches, never by its name — a hand-picked set had -/// already missed `PayLife` and `LifeReduced`. Measured (`rg -n 'ProposedEvent::'` over -/// the matcher fns, cross-checked against `replacement_event_keys_for_event`, which is -/// what actually selects candidate keys for a proposed event): -/// `gain_life_matcher` (GainLife → LifeGain), `lose_life_matcher` (LoseLife → -/// LifeLoss), `life_reduced_matcher` (LifeReduced → LifeLoss), `pay_life_matcher` -/// (PayLife → LifeLoss), `draw_matcher` (Draw → Draw). -/// -/// `DrawCards` is classified `Draw` FAIL-CLOSED even though it cannot currently apply: -/// its registry entry is a `stub()` and `replacement_event_keys_for_event` emits only -/// `ReplacementEvent::Draw` for a `ProposedEvent::Draw`, so a `DrawCards` def is never -/// a live candidate. Counting it anyway only over-counts the CR 616.1 competition ⇒ -/// over-rejects ⇒ safe, and it survives the alias being wired up later. -fn replacement_event_proposed_class(event: &ReplacementEvent) -> Option { - match event { - ReplacementEvent::GainLife => Some(ReplacedEventClass::LifeGain), - ReplacementEvent::LoseLife | ReplacementEvent::LifeReduced | ReplacementEvent::PayLife => { - Some(ReplacedEventClass::LifeLoss) - } - ReplacementEvent::Draw | ReplacementEvent::DrawCards => Some(ReplacedEventClass::Draw), - // Unclassified events (explicitly listed ⇒ None, so a new variant must be - // classified against the coupling rule before it compiles). - ReplacementEvent::DamageDone - | ReplacementEvent::Destroy - | ReplacementEvent::Discard - | ReplacementEvent::TurnFaceUp - | ReplacementEvent::Counter - | ReplacementEvent::ChangeZone - | ReplacementEvent::Moved - | ReplacementEvent::AddCounter - | ReplacementEvent::RemoveCounter - | ReplacementEvent::CreateToken - | ReplacementEvent::Tap - | ReplacementEvent::Untap - | ReplacementEvent::DealtDamage - | ReplacementEvent::Mill - | ReplacementEvent::Attached - | ReplacementEvent::SearchFound - | ReplacementEvent::ProduceMana - | ReplacementEvent::Scry - | ReplacementEvent::CoinFlip - | ReplacementEvent::Transform - | ReplacementEvent::Explore - | ReplacementEvent::Connive - | ReplacementEvent::AssembleContraption - | ReplacementEvent::BeginPhase - | ReplacementEvent::BeginTurn - | ReplacementEvent::Cascade - | ReplacementEvent::CopySpell - | ReplacementEvent::DeclareBlocker - | ReplacementEvent::GameLoss - | ReplacementEvent::GameWin - | ReplacementEvent::Learn - | ReplacementEvent::LoseMana - | ReplacementEvent::PlanarDiceResult - | ReplacementEvent::Planeswalk - | ReplacementEvent::Proliferate - | ReplacementEvent::Other(_) => None, - } -} - -/// §2.2 item 6 environmental guard (CR 616.1 + CR 614.1a): can the current -/// replacement environment open a resolution-time prompt on an allow-listed -/// resolution of one of `classes`? Paired obligation of -/// `ResolutionChoiceFreedom::FreeUnlessReplacements`. -/// -/// PARAMETERIZED BY CLASS, not duplicated per class, because all three rejection -/// reasons below live in the EVENT-AGNOSTIC `pipeline_loop`: the optional-candidate -/// park (replacement.rs:8775-8798) and the CR 616.1 material-ordering park -/// (replacement.rs:8814-8838) branch on `replacement_is_optional` / -/// `replacement_ordering_is_material` and never inspect the event's class, and the -/// body-continuation stash (replacement.rs:7834-7847) is reached from the same -/// `(Execute, Mandatory)` arm for every proposed event. A per-class copy of this -/// function would have been three copies of one CR 616.1 argument. -/// -/// Over-approximates `find_applicable_replacements` fail-closed: conditions, -/// `valid_player` scopes, and amounts are deliberately ignored (over-count ⇒ -/// over-reject ⇒ fail-safe). Def sources = object-attached defs -/// (`active_replacements`, item 5's authority) CHAINED with the game-state-level -/// floating store `state.pending_damage_replacements` (sentinel `ObjectId(0)`, -/// scanned by `find_applicable_replacements` replacement.rs:4838-4862; skip -/// `is_consumed`, mirroring :4859-4861). `pending_step_end_mana_handlers` is a -/// different type gated behind `ProposedEvent::EmptyManaPool` -/// (replacement.rs:4971-4980) that structurally cannot produce a life- or draw-class -/// candidate ⇒ excluded. There are NO virtual life candidates in -/// `find_applicable_replacements` (measured — the only `ProposedEvent::LifeGain` -/// there is a `valid_player` filter, not a candidate creator, replacement.rs:4674). -/// -/// Rejects when an in-class def is: -/// (a) OPTIONAL — a single optional candidate prompts (replacement.rs:8775-8798). -/// This is the CR 702.52a dredge-class route on the draw side ("if you would draw -/// a card, you MAY instead mill N cards"): a "you may" replacement makes an -/// otherwise-mandatory draw genuinely choice-bearing; -/// (b) carries a body continuation (`execute`/`runtime_execute`) — a MANDATORY -/// body is stashed as a `PostReplacementContinuation` -/// (replacement.rs:7834-7847, `Resolved` for `runtime_execute` and `Template` -/// for a CR 614.11 draw-count rider's `sub_ability`) and drained via -/// `apply_pending_post_replacement_effect` (engine_replacement.rs:2273), -/// which runs an arbitrary `ResolvedAbility` and can set a non-priority -/// `waiting_for` (e.g. a Sacrifice body ⇒ EffectZoneChoice). `execute` is -/// also rejected by item 5 (resource.rs:1058-1060); re-checked here so the -/// guard does not depend on item ordering, and `runtime_execute` is NOT -/// otherwise covered (item 5 scans it only for projected reads, -/// resource.rs:976-981); -/// (c) one of ≥2 defs competing for the SAME proposed-event class — CR 616.1 -/// material-ordering prompt (replacement.rs:8814-8838). A single mandatory -/// quantity-mod def with no body (Bloodletter / Rhox Faithmender class on the -/// life side, Teferi's Ageless Insight class on the draw side) trips NONE of -/// these and resolves deterministically (replacement.rs:8839-8860). -fn replacement_environment_may_prompt( - state: &GameState, - classes: crate::game::ability_scan::ReplacementPromptClasses, -) -> bool { - let in_scope = |class: ReplacedEventClass| match class { - ReplacedEventClass::LifeGain | ReplacedEventClass::LifeLoss => classes.life, - ReplacedEventClass::Draw => classes.draw, - }; - // CR 614.1 / CR 113.6: `active_replacements` is all-zones (its callers restrict). - // `find_applicable_replacements` — the real pipeline this over-approximates — - // scans [Battlefield, Command] (plus the entering/discarded card, irrelevant to a - // life or draw event). An in-class replacement on a card in the library / hand / - // graveyard cannot apply during the loop; scanning it is the same all-zones - // false-reject class as the observer firewalls, so match the pipeline's scope. - let object_defs = crate::game::functioning_abilities::active_replacements(state) - .filter(|(_, obj, _)| matches!(obj.zone, Zone::Battlefield | Zone::Command)) - .map(|(_, _, def)| def); - let floating_defs = state - .pending_damage_replacements - .iter() - .filter(|def| !def.is_consumed); - - let mut gain_defs = 0usize; - let mut loss_defs = 0usize; - let mut draw_defs = 0usize; - for def in object_defs.chain(floating_defs) { - let Some(class) = replacement_event_proposed_class(&def.event).filter(|c| in_scope(*c)) - else { - continue; - }; - // (a) single optional candidate prompts. - if crate::game::replacement::replacement_mode_is_optional(&def.mode) { - return true; - } - // (b) mandatory body-continuation drain is prompt-capable. - if def.execute.is_some() || def.runtime_execute.is_some() { - return true; - } - match class { - ReplacedEventClass::LifeGain => gain_defs += 1, - ReplacedEventClass::LifeLoss => loss_defs += 1, - ReplacedEventClass::Draw => draw_defs += 1, - } - } - // (c) ≥2 defs competing for one proposed-event class ⇒ CR 616.1 ordering prompt. - gain_defs >= 2 || loss_defs >= 2 || draw_defs >= 2 -} - /// CR 614.1a: a replacement's BODY (not its `condition`) can read a projected /// player resource. `QuantityModification` variants are all fixed constants (no /// read). `DamageModification::LifeFloor` caps against a player's live life total @@ -5571,7 +5525,13 @@ mod tests { trigger_event: None, description: None, source_name: String::new(), - subject_match_count: None, + // CR 603.2c: the batched-subject count these entries' `event_amount()` + // drains resolve "that many" against. `bind_resolution_scope` lifts it + // into resolution scope; with it absent the drain's amount resolves to + // ZERO, the resolver proposes nothing, and gate (6)'s probe is + // fail-closed on the EMPTY derivation — a different fact from the ones + // these rows test. + subject_match_count: Some(1), die_result: None, }, } @@ -5754,11 +5714,22 @@ mod tests { } fn bf_object(state: &mut GameState, id: u64) -> ObjectId { + bf_object_owned_by(state, id, PlayerId(1)) + } + + /// CR 614.1: a replacement definition's applicability is scoped to ITS + /// controller's events, so a fixture that installs a def to be DRAWN as a + /// candidate must put it on a permanent controlled by the player whose + /// event it is meant to replace. The event-derived discharge asks the + /// pipeline's own `find_applicable_replacements`, which honours that scope; + /// the def-scan it replaced deliberately ignored it (over-count ⇒ + /// over-reject), so a P1-controlled def used to reject a P0 life gain. + fn bf_object_owned_by(state: &mut GameState, id: u64, owner: PlayerId) -> ObjectId { let oid = ObjectId(id); let object = crate::game::game_object::GameObject::new( oid, CardId(7), - PlayerId(1), + owner, "Test Board Permanent".to_string(), Zone::Battlefield, ); @@ -6443,8 +6414,12 @@ mod tests { "reach-guard: gate (4) passes ⇒ gate (6) is the rejector" ); assert_eq!( - crate::game::ability_scan::ability_resolution_choice_freedom(may_ability), - crate::game::ability_scan::ResolutionChoiceFreedom::MayPrompt, + crate::game::resolution_prompt::ability_resolution_choice_freedom( + &c_may, + may_ability, + &mut ProbeBudget::new(PROBE_BUDGET) + ), + crate::game::resolution_prompt::ResolutionChoiceFreedom::MayPrompt, "reach-guard: CR 603.5 `optional` is what makes this entry MayPrompt" ); assert!( @@ -6624,8 +6599,14 @@ mod tests { let (mut p_life, mut c_life) = grown_window(2, optional_drain); let mut def = ReplacementDefinition::new(ReplacementEvent::LoseLife); def.mode = ReplacementMode::Optional { decline: None }; + // CR 614.1a: a `valid_player`-less player-event replacement applies only + // to ITS controller's events (`replacement_source_player`). The residual + // this arm must re-arm is the drain's own `LifeLoss` on the OPPONENT + // (P1), so the def has to sit on a P1-controlled permanent to be drawn + // as a candidate at all. Measured: on a P0 permanent the same def draws + // ZERO candidates for `LifeLoss{P1}` and the arm would pass vacuously. for state in [&mut p_life, &mut c_life] { - let oid = bf_object(state, 812); + let oid = bf_object_owned_by(state, 812, PlayerId(1)); state .objects .get_mut(&oid) @@ -6633,13 +6614,20 @@ mod tests { .replacement_definitions .push(def.clone()); } + let life_loss = crate::types::proposed_event::ProposedEvent::LifeLoss { + player_id: PlayerId(1), + amount: 1, + applied: Default::default(), + }; assert!( - replacement_environment_may_prompt( + crate::game::replacement::proposed_event_prompt_cause( &c_life, - crate::game::ability_scan::ReplacementPromptClasses::LIFE - ), - "reach-guard: the installed optional def makes the CR 616.1 surface \ - prompt-capable (arm 2's bare board does not)" + &life_loss, + crate::game::replacement::replacement_registry(), + ) + .contains(crate::game::replacement::ReplacementPromptCause::OptionalCandidate), + "reach-guard: the installed optional def makes the CR 614.1a surface \ + prompt-capable for a LifeLoss event (arm 2's bare board does not)" ); let slots = [churn_src_slot(&c_life, 0), churn_src_slot(&c_life, 1)]; assert!( @@ -7173,7 +7161,8 @@ mod tests { fn with_object_def(def: ReplacementDefinition) -> (GameState, GameState) { let (mut prior, mut current) = cover_base(); for state in [&mut prior, &mut current] { - let oid = bf_object(state, 810); + // Owned by P0 — the player whose life gain these defs replace. + let oid = bf_object_owned_by(state, 810, PlayerId(0)); state .objects .get_mut(&oid) @@ -7199,12 +7188,21 @@ mod tests { { let (mut prior, mut current) = cover_base(); for state in [&mut prior, &mut current] { - let oid = bf_object(state, 811); + let oid = bf_object_owned_by(state, 811, PlayerId(0)); let obj = state.objects.get_mut(&oid).unwrap(); - obj.replacement_definitions - .push(ReplacementDefinition::new(ReplacementEvent::GainLife)); - obj.replacement_definitions - .push(ReplacementDefinition::new(ReplacementEvent::GainLife)); + // CR 616.1: ordering is a choice only when it is MATERIAL. Two + // no-op definitions COMMUTE, so the fixture must carry two + // modifications whose composition order changes the result — + // `+1` then `×2` is 4, `×2` then `+1` is 3. The def-scan this + // replaces counted definitions instead of asking the pipeline. + let mut plus = ReplacementDefinition::new(ReplacementEvent::GainLife); + plus.quantity_modification = + Some(crate::types::ability::QuantityModification::Plus { value: 1 }); + let mut times = ReplacementDefinition::new(ReplacementEvent::GainLife); + times.quantity_modification = + Some(crate::types::ability::QuantityModification::Times { factor: 2 }); + obj.replacement_definitions.push(plus); + obj.replacement_definitions.push(times); } assert!( !loop_states_cover_modulo_growth(&prior, ¤t), @@ -7227,7 +7225,7 @@ mod tests { current.stack.push_back(l(21)); current.stack.push_back(l(22)); for state in [&mut prior, &mut current] { - let oid = bf_object(state, 812); + let oid = bf_object_owned_by(state, 812, PlayerId(0)); let mut def = ReplacementDefinition::new(ReplacementEvent::PayLife); def.mode = ReplacementMode::Optional { decline: None }; state @@ -11715,7 +11713,9 @@ mod tests { fn with_replacements(entry: StackEntry, defs: &[ReplacementDefinition]) -> GameState { let mut state = GameState::new_two_player(7); state.stack.push_back(entry); - let oid = bf_object(&mut state, 900); + // Owned by P0 — the player whose draw these defs are meant to replace + // (CR 614.1 scopes a def to its controller's events). + let oid = bf_object_owned_by(&mut state, 900, PlayerId(0)); let object = state.objects.get_mut(&oid).expect("just inserted"); for def in defs { object.replacement_definitions.push(def.clone()); @@ -11724,10 +11724,24 @@ mod tests { } fn repl(event: ReplacementEvent, optional: bool) -> ReplacementDefinition { + let is_draw = matches!(event, ReplacementEvent::Draw); let mut def = ReplacementDefinition::new(event); if optional { def.mode = crate::types::ability::ReplacementMode::Optional { decline: None }; } + // CR 121.2: a Draw definition MUST declare whether it modifies the + // instruction's count or replaces one individual draw. The pipeline + // debug-asserts on a definition that declares neither; the def-scan this + // replaces never ran the pipeline, so the fixture could omit it. + if is_draw { + def.draw_scope = Some(crate::types::ability::DrawReplacementScope::IndividualDraw); + } + // CR 616.1: ordering is a player choice only when it is MATERIAL. Two + // no-op definitions commute, so a fixture built to exercise the ordering + // prompt must carry a modification whose composition order matters. The + // def-scan this replaces counted definitions instead of asking. + def.quantity_modification = + Some(crate::types::ability::QuantityModification::Plus { value: 1 }); def } @@ -11763,15 +11777,48 @@ mod tests { ); // (iii) CR 616.1 material ordering: two MANDATORY draw replacements compete. + // The second one multiplies where the first adds — measured, `Plus` and + // `Times` are different `CommuteClass`es, so their composition order changes + // the drawn count and the affected player must order them. Two `Plus` defs + // COMMUTE and the pipeline correctly opens no prompt for them (measured + // `replacement_ordering_is_material == false`), which is why this arm cannot + // be built from two copies of `repl(..)`. + let material_pair = { + let mut doubler = repl(ReplacementEvent::Draw, false); + doubler.quantity_modification = + Some(crate::types::ability::QuantityModification::Times { factor: 2 }); + [repl(ReplacementEvent::Draw, false), doubler] + }; + { + let board = with_replacements(draw_entry(10), &material_pair); + let drawn_event = crate::types::proposed_event::ProposedEvent::Draw { + player_id: PlayerId(0), + count: 1, + applied: Default::default(), + }; + let candidates = crate::game::replacement::find_applicable_replacements( + &board, + &drawn_event, + crate::game::replacement::replacement_registry(), + ); + assert_eq!( + candidates.len(), + 2, + "reach-guard: the live candidate authority draws BOTH defs for the \ + event this entry's resolution proposes" + ); + assert!( + crate::game::replacement::replacement_ordering_is_material( + &board, + &candidates, + &drawn_event + ), + "reach-guard: those two candidates really are CR 616.1 order-material" + ); + } assert!( !stack_choices_are_all_specified( - &with_replacements( - draw_entry(10), - &[ - repl(ReplacementEvent::Draw, false), - repl(ReplacementEvent::Draw, false) - ] - ), + &with_replacements(draw_entry(10), &material_pair), PlayerId(0), &[] ), @@ -11825,4 +11872,342 @@ mod tests { "positive control: the life guard still rejects its own class" ); } + + // ── §6 R24: the probe resolves on `resolve_top`'s board ── + + /// A drain entry whose `EventContextAmount` resolves against a batched + /// subject count of `match_count` (CR 603.2c) rather than `churn_entry`'s + /// fixed `Some(1)` — a distinctive amount is what makes R24(a)'s equality + /// non-degenerate. + fn scoped_drain_entry( + id: u64, + match_count: Option, + condition: Option, + ) -> StackEntry { + let mut ability = lose_life_targeting(event_amount(), opp_typed(vec![])); + ability.targets = vec![TargetRef::Player(PlayerId(1))]; + StackEntry { + id: ObjectId(id), + source_id: ObjectId(CHURN_SRC), + controller: PlayerId(0), + kind: StackEntryKind::TriggeredAbility { + source_id: ObjectId(CHURN_SRC), + ability: Box::new(ability), + condition, + trigger_event: None, + description: None, + source_name: String::new(), + subject_match_count: match_count, + die_result: None, + }, + } + } + + /// **§6 R24 — THE PROBE RESOLVES ON `resolve_top`'s BOARD: SCOPE BOUND, + /// ENTRY OFF THE STACK, CR 603.4 RE-CHECKED.** + /// + /// Three arms, each keyed to one thing the classifier gets wrong when it is + /// handed the raw pre-resolution board instead of the one + /// `resolve_top` hands `resolve_ability_chain`. + /// + /// * **(a) THE EVENT-CONTEXT AXIS — the FAIL-OPEN closer.** A + /// `LoseLife { amount: Ref(EventContextAmount) }` drain (the Sanguine Bond + /// shape) resolves "that many" against the entry's batched subject count + /// (CR 603.2c), which only `bind_resolution_scope` lifts. The derived + /// `ProposedEvent::LifeLoss.amount` must equal the amount the LIVE + /// resolution proposes, and must be non-zero. Without the lift the derived + /// amount is 0 — a `> 0`-gated virtual candidate is then never drawn and + /// the probe certifies a resolution the live pipeline would prompt on. + /// REVERT-PROBE (RUN): hand `probe_resolution` the raw board (drop the + /// `bind_resolution_scope` call from `stack_entry_resolution_choice_freedom`) + /// ⇒ derived `0` vs live `7` ⇒ FLIPS. + /// * **(b) CR 603.4.** The same entry with a FALSE intervening-if ⇒ + /// `bind_resolution_scope` returns `false` ⇒ `MayPrompt`; matched against + /// the TRUE twin, which classifies. Direction note, so the arm is not + /// over-claimed: skipping the re-check is fail-CLOSED (a superset of + /// events draws a superset of candidates), so (b) is a FIDELITY arm — + /// (a) is the fail-open closer. + /// * **(c) AMOUNT-INSENSITIVITY, and the zero arm RE-KEYED ON A + /// MEASUREMENT.** On one board with a single in-class (Compleated, + /// CR 702.150a) virtual candidate, sweeping the ability's resolved count + /// over `{1, 2, 7, 99}` yields an IDENTICAL candidate set — candidate + /// selection is amount-insensitive ABOVE zero. The `0` arm does NOT reach + /// the zero-payload accounting guard the plan predicted: measured, a + /// zero-count resolution proposes no event at all (as do + /// `DealDamage { amount: 0 }` and `Draw { count: 0 }`), so the refusal is + /// the `is_empty` arm and the plan's stated revert-probe for this arm + /// cannot reproduce. Both facts are asserted in place, with the + /// guard's own classification pinned separately on the partition. See the + /// block comment at the arm. + /// + /// REACH-GUARDS on every arm: `bind_resolution_scope` is asserted to have + /// returned `true` and the probe to have returned `Events(..)` on each + /// positive arm, so a board that refuses for an unrelated reason fails + /// LOUDLY instead of passing a negative vacuously. + #[test] + fn the_probe_resolves_on_resolve_tops_board_with_scope_bound_and_603_4_rechecked() { + use crate::game::resolution_prompt::ResolutionChoiceFreedom; + use crate::types::proposed_event::ProposedEvent; + + // ── (a) the event-context axis ── + const MATCHES: u32 = 7; + let mut state = drain_state(2); + let entry = scoped_drain_entry(20, Some(MATCHES), None); + state.stack.push_back(entry.clone()); + + // Reach-guard: the binding this arm is about actually succeeds. + let mut board = state.clone(); + board.stack.retain(|e| e.id != entry.id); + assert!( + crate::game::stack::bind_resolution_scope(&mut board, &entry, None), + "reach-guard: no CR 603.4 condition on this entry ⇒ the scope binds" + ); + + let freedom = stack_entry_resolution_choice_freedom( + &state, + &entry, + &mut ProbeBudget::new(PROBE_BUDGET), + ); + let ResolutionChoiceFreedom::FreeUnlessReplacements(derived) = freedom else { + panic!("reach-guard: the probe must return Events(..) on this board, got {freedom:?}"); + }; + let derived_amount = derived + .iter() + .find_map(|event| match event { + ProposedEvent::LifeLoss { + player_id, amount, .. + } if *player_id == PlayerId(1) => Some(*amount), + _ => None, + }) + .unwrap_or_else(|| panic!("no LifeLoss on P1 in the derived set: {derived:?}")); + + let mut live = state.clone(); + let before = live.players[1].life; + let mut events = Vec::new(); + crate::game::stack::resolve_top(&mut live, &mut events); + let live_amount = before - live.players[1].life; + assert_eq!( + i64::from(derived_amount), + i64::from(live_amount), + "CR 603.2c + CR 608.2k: the derived amount must equal the one the LIVE \ + resolution proposes — an unbound scope resolves EventContextAmount \ + against an absent context" + ); + assert_eq!( + derived_amount, MATCHES, + "non-degeneracy: the amount is the lifted batched subject count, not zero \ + and not a coincidental 1" + ); + + // ── (b) CR 603.4 intervening-if re-check ── + // `drain_state` builds a standard-format board (20 starting life; the `7` + // it passes is the RNG seed), so `LifeTotalGE 6` is TRUE and `LifeTotalGE 30` + // FALSE for the entry's controller. + for (label, condition, binds) in [ + ("TRUE", TriggerCondition::LifeTotalGE { minimum: 6 }, true), + ( + "FALSE", + TriggerCondition::LifeTotalGE { minimum: 30 }, + false, + ), + ] { + let mut s = drain_state(2); + let e = scoped_drain_entry(21, Some(MATCHES), Some(condition)); + s.stack.push_back(e.clone()); + + let mut b = s.clone(); + b.stack.retain(|x| x.id != e.id); + assert_eq!( + crate::game::stack::bind_resolution_scope(&mut b, &e, None), + binds, + "reach-guard: the CR 603.4 re-check is what decides arm ({label})" + ); + + let verdict = + stack_entry_resolution_choice_freedom(&s, &e, &mut ProbeBudget::new(PROBE_BUDGET)); + if binds { + assert!( + matches!(verdict, ResolutionChoiceFreedom::FreeUnlessReplacements(_)), + "the condition-TRUE twin classifies ({label}); got {verdict:?}" + ); + } else { + assert_eq!( + verdict, + ResolutionChoiceFreedom::MayPrompt, + "CR 603.4: a FALSE intervening-if means the live resolution proposes \ + NOTHING, and an empty derivation is never safe ({label})" + ); + } + } + + // ── (c) amount-insensitivity above zero, and the zero-payload guard ── + let mut counter_state = drain_state(2); + { + // CR 702.150a: the Compleated virtual AddCounter candidate is drawn + // only for a loyalty placement on a source whose Phyrexian life was paid. + let src = counter_state + .objects + .get_mut(&ObjectId(CHURN_SRC)) + .expect("fixture: the churn source exists"); + src.phyrexian_life_paid = 2; + src.keywords + .push(crate::types::keywords::Keyword::Compleated); + } + let loyalty_ability = |count: i32| { + ResolvedAbility::new( + Effect::PutCounter { + target: TargetFilter::SelfRef, + counter_type: crate::types::counter::CounterType::Loyalty, + count: QuantityExpr::Fixed { value: count }, + }, + vec![], + ObjectId(CHURN_SRC), + PlayerId(0), + ) + }; + let counter_entry = |count: i32| { + let mut e = scoped_drain_entry(22, Some(MATCHES), None); + let StackEntryKind::TriggeredAbility { ability, .. } = &mut e.kind else { + unreachable!("scoped_drain_entry builds a TriggeredAbility") + }; + **ability = loyalty_ability(count); + e + }; + + let mut candidate_sets = Vec::new(); + for count in [1, 2, 7, 99] { + let e = counter_entry(count); + let mut s = counter_state.clone(); + s.stack.push_back(e.clone()); + let verdict = + stack_entry_resolution_choice_freedom(&s, &e, &mut ProbeBudget::new(PROBE_BUDGET)); + let ResolutionChoiceFreedom::FreeUnlessReplacements(events) = verdict else { + panic!("reach-guard: count {count} must probe to Events(..), got {verdict:?}"); + }; + let add = events + .iter() + .find(|event| matches!(event, ProposedEvent::AddCounter { .. })) + .unwrap_or_else(|| panic!("count {count} derived no AddCounter: {events:?}")); + candidate_sets.push(crate::game::replacement::find_applicable_replacements( + &s, + add, + crate::game::replacement::replacement_registry(), + )); + } + assert!( + !candidate_sets[0].is_empty(), + "reach-guard: the CR 702.150a Compleated virtual candidate IS drawn above \ + zero — without it the sweep would compare four empty sets" + ); + assert!( + candidate_sets.windows(2).all(|pair| pair[0] == pair[1]), + "CR 614.1a: candidate SELECTION is amount-insensitive above zero; got \ + {candidate_sets:?}" + ); + + // The `0` arm, RE-KEYED ON A MEASUREMENT that contradicts the plan's + // stated mechanism — recorded here rather than papered over. + // + // The plan expects a zero-count `PutCounter` to DERIVE an + // `AddCounter { count: 0 }` which the zero-payload guard then classifies + // Unaccounted (arm 4). Measured on this board: the zero-count resolution + // proposes NOTHING AT ALL — and so do `DealDamage { amount: 0 }` and + // `Draw { count: 0 }`, the other two zero-payload classes. Every counter/ + // damage/draw resolver short-circuits above the pipeline at zero. So no + // zero-payload `ProposedEvent` is reachable through the six allow-listed + // classes, the refusal below is arm 3 (`is_empty`), and the plan's + // (c) revert-probe (delete the `AddCounter { count: 0 }` guard ⇒ the + // derivation certifies) CANNOT REPRODUCE — there is no derivation to + // certify. DIRECTION: fail-CLOSED either way, so this is a coverage fact, + // not a hole. The guards remain correct defence-in-depth for events + // proposed by non-allow-listed routes and are pinned directly on the + // partition in BOTH directions by + // `resolution_prompt::tests::an_unaccounted_derived_event_is_prompted_in_the_resolver`. + let zero_entry = counter_entry(0); + let mut zero_state = counter_state.clone(); + zero_state.stack.push_back(zero_entry.clone()); + let mut zero_board = zero_state.clone(); + zero_board.stack.retain(|e| e.id != zero_entry.id); + assert!( + crate::game::stack::bind_resolution_scope(&mut zero_board, &zero_entry, None), + "reach-guard: the zero arm's refusal is not the CR 603.4 arm" + ); + let zero_events = crate::game::replacement::record_proposed_events(|| { + let mut work = zero_board.clone(); + let mut sink = Vec::new(); + let _ = crate::game::effects::resolve_ability_chain( + &mut work, + &loyalty_ability(0), + &mut sink, + 0, + ); + }); + assert!( + zero_events.is_empty(), + "MEASURED, and the reason the arm is re-keyed: a zero count proposes no \ + event at all; recorded {zero_events:?}. If this ever becomes non-empty the \ + accounting arm becomes the reachable one and this arm must be re-keyed \ + back onto it." + ); + assert!( + !crate::game::replacement::event_is_accounted(&ProposedEvent::AddCounter { + placement: crate::types::proposed_event::CounterPlacement::Object { + actor: PlayerId(0), + object_id: ObjectId(CHURN_SRC), + counter_type: crate::types::counter::CounterType::Loyalty, + }, + count: 0, + applied: Default::default(), + }), + "the CR 702.150a zero-payload guard still classifies the event Unaccounted \ + — it is simply not reachable from an allow-listed resolution" + ); + assert_eq!( + stack_entry_resolution_choice_freedom( + &zero_state, + &zero_entry, + &mut ProbeBudget::new(PROBE_BUDGET) + ), + ResolutionChoiceFreedom::MayPrompt, + "CR 732.2a: at zero the live pipeline draws no candidate (`count > 0`) and \ + the resolution proposes nothing, so the probe refuses fail-CLOSED rather \ + than certifying an empty derivation" + ); + } + + /// CR 732.2a: `BUDGET-EXCEEDED ⇒ Prompted` is what keeps the probe's cost a + /// COVERAGE knob rather than an unbounded player-facing stall, so the budget + /// must actually stop granting and must LATCH the denial (an exhaustion that + /// is only inferable from a zero remainder cannot be attributed). + /// + /// Both directions asserted so neither can go vacuous: exactly + /// [`PROBE_BUDGET`] charges are granted with `denied()` still `false`, and + /// only the charge AFTER that flips it. + #[test] + fn probe_budget_grants_exactly_its_cap_then_latches_the_denial() { + let mut budget = ProbeBudget::new(PROBE_BUDGET); + for i in 0..PROBE_BUDGET { + assert!( + budget.try_charge_one(), + "charge {i} of {PROBE_BUDGET} must be granted" + ); + assert!( + !budget.denied(), + "no denial may be latched while charges are still granted (after {i})" + ); + } + assert!( + !budget.try_charge_one(), + "the charge past the cap must be refused" + ); + assert!( + budget.denied(), + "the exhaustion fact must be latched, not inferred from the remainder" + ); + // A zero-cap budget denies its FIRST charge — the shape a lowered cap + // takes, and the reason exhaustion is fail-closed rather than silent. + let mut starved = ProbeBudget::new(0); + assert!(!starved.try_charge_one()); + assert!(starved.denied()); + } } diff --git a/crates/engine/src/game/ability_scan.rs b/crates/engine/src/game/ability_scan.rs index 469f164f7b..b3181eed1d 100644 --- a/crates/engine/src/game/ability_scan.rs +++ b/crates/engine/src/game/ability_scan.rs @@ -55,22 +55,22 @@ //! classified before it compiles. Any type outside this set that can reach a read //! is in the conservative set above. //! -//! # Resolution-time choice classifier (a SEPARATE question family) +//! # Resolution-time choice classifier — LIVES IN `game::resolution_prompt` //! -//! Alongside the three read-axes lives an independent classifier -//! (`effect_resolution_choice_freedom` / `ability_resolution_choice_freedom`, -//! consumed by `analysis::resource::loop_states_cover_modulo_growth` item 6) -//! answering a FOURTH, orthogonal question (CR 608.2d): can resolving this -//! ability enter a resolution-time player choice (a non-priority `WaitingFor`)? -//! This is deliberately NOT a fourth `Axes` axis — `Axes::NONE` means "no -//! reads", which is orthogonal to "never prompts" (`Effect::Scry` reads nothing -//! yet always prompts), so folding a choice bit into `Axes` would make every -//! existing `NONE` arm silently claim choice-freeness. The classifier is -//! fail-closed (`MayPrompt` default — an unproven claim only costs a -//! false-negative cover rejection); promoting a variant to a choice-free -//! verdict is a SOUNDNESS claim ("resolving can never enter a non-priority -//! `WaitingFor`, for ANY state") and requires a resolver trace cited in the arm -//! plus a `..`-free destructure so a future field forces re-audit. +//! An independent classifier answering a FOURTH, orthogonal question +//! (CR 608.2d) — can resolving this ability enter a resolution-time player +//! choice (a non-priority `WaitingFor`)? — used to live here. It now lives in +//! `crate::game::resolution_prompt`, because answering it requires PROBING a +//! resolution and therefore requires a live board, which this module +//! deliberately never holds (pinned by +//! `resolution_prompt::tests::ability_scan_holds_no_game_state`, which asserts +//! this file carries no word-bounded board-type token at all — including in +//! this very sentence, which is why it is worded around the name). +//! +//! It is deliberately NOT a fourth `Axes` axis — `Axes::NONE` means "no reads", +//! which is orthogonal to "never prompts" (`Effect::Scry` reads nothing yet +//! always prompts), so folding a choice bit into `Axes` would make every +//! existing `NONE` arm silently claim choice-freeness. //! //! # Consumers of the read-axis classifiers after PR-6.75 //! @@ -96,8 +96,8 @@ use crate::types::ability::{ CountScope, Duration, EachDamageRecipient, Effect, EffectScope, FilterProp, ForEachCategoryAction, GuessSubject, KeeperConstraint, ManaProduction, ModalChoice, MultiTargetSpec, ObjectScope, PlayerFilter, PlayerScope, PtValue, QuantityExpr, QuantityRef, - RepeatContinuation, ReplacementCondition, ResolvedAbility, StaticCondition, TargetChoiceTiming, - TargetFilter, TrackedAnaphorSource, TriggerCondition, TypedFilter, + RepeatContinuation, ReplacementCondition, ResolvedAbility, StaticCondition, TargetFilter, + TrackedAnaphorSource, TriggerCondition, TypedFilter, }; use crate::types::game_state::TargetSelectionConstraint; use crate::types::keywords::{DisguiseCost, Keyword}; @@ -5881,433 +5881,6 @@ fn effect_census_role(e: &Effect) -> CensusRole { } } -// --------------------------------------------------------------------------- -// Resolution-time choice-freeness classifier (`analysis::resource` item 6). -// A separate question family from the three read-axes above — see the module -// header. Fail-closed default is `MayPrompt`. -// --------------------------------------------------------------------------- - -/// CR 616.1: the proposed-event classes whose replacement environment a -/// [`ResolutionChoiceFreedom::FreeUnlessReplacements`] verdict leaves for the caller -/// to discharge. -/// -/// A SET (same shape as [`Axes`] above), not one enum variant per class. Two reasons, -/// both load-bearing: a resolution chain joins `effect` with `sub_ability`/`else_ability` -/// and a mixed life+draw chain must accumulate BOTH obligations instead of collapsing -/// to `MayPrompt`; and the caller ORs the obligation across every stack entry, which is -/// a union, not a choice. Sibling variants (`FreeUnlessLifeReplacements` / -/// `FreeUnlessDrawReplacements`) would have re-derived that union at each of the three -/// consumers. -#[derive(Clone, Copy, PartialEq, Eq, Debug)] -pub(crate) struct ReplacementPromptClasses { - /// CR 119.3: the resolver runs the LIFE-event replacement pipeline - /// (`ProposedEvent::LifeGain` / `ProposedEvent::LifeLoss`). - pub(crate) life: bool, - /// CR 121.1: the resolver runs the DRAW-event replacement pipeline - /// (`ProposedEvent::Draw`). - pub(crate) draw: bool, -} - -impl ReplacementPromptClasses { - /// No obligation — the accumulator's identity for the caller's union fold. - pub(crate) const NONE: Self = Self { - life: false, - draw: false, - }; - pub(crate) const LIFE: Self = Self { - life: true, - draw: false, - }; - pub(crate) const DRAW: Self = Self { - life: false, - draw: true, - }; - - pub(crate) fn or(self, other: Self) -> Self { - Self { - life: self.life || other.life, - draw: self.draw || other.draw, - } - } -} - -/// CR 732.2a + CR 608.2d: resolution-time choice-freeness verdict for the -/// growing-cascade cover gate (`analysis::resource` item 6). NOT an `Axes` -/// axis — this classifies RESOLVER prompting behavior, not AST reads (module -/// header rationale). -#[derive(Clone, Copy, PartialEq, Eq, Debug)] -pub(crate) enum ResolutionChoiceFreedom { - /// Resolving can never enter a non-priority `WaitingFor` in ANY state, - /// EXCEPT through the replacement pipeline for the carried event classes - /// (single optional candidate, replacement.rs:8775-8798; CR 616.1 material - /// ordering, replacement.rs:8814-8838; mandatory body-continuation drain, - /// replacement.rs:7834-7847 → engine_replacement.rs:2273). All three of those - /// prompt seams live in the event-agnostic `pipeline_loop`, which is why one - /// parameterized obligation covers every class rather than one guard per class. - /// Callers MUST pair this verdict with - /// `analysis::resource::replacement_environment_may_prompt` for exactly the - /// carried classes — the paired environmental obligation is part of this - /// variant's contract. - /// - /// There is deliberately no plain `Free` variant yet: every allow-listed kind - /// genuinely can prompt through its own replacement pipeline, so `Free` would be - /// uninhabited today. Adding it later is compiler-guided (a new variant flags - /// every exhaustive match). - FreeUnlessReplacements(ReplacementPromptClasses), - /// May prompt, or unproven — the fail-closed default. - MayPrompt, -} - -impl ResolutionChoiceFreedom { - /// Worst-of join for a resolution chain: `MayPrompt` dominates (a chain that - /// can prompt on either branch can prompt); two free verdicts UNION their - /// outstanding replacement-environment obligations. - fn join(self, other: ResolutionChoiceFreedom) -> ResolutionChoiceFreedom { - match (self, other) { - ( - ResolutionChoiceFreedom::FreeUnlessReplacements(a), - ResolutionChoiceFreedom::FreeUnlessReplacements(b), - ) => ResolutionChoiceFreedom::FreeUnlessReplacements(a.or(b)), - _ => ResolutionChoiceFreedom::MayPrompt, - } - } -} - -/// CR 608.2d: is this `QuantityExpr` a CR 608.2d "up to N" count — a magnitude the -/// resolving player picks rather than one the state determines? -/// -/// Recursive and wildcard-free for the same reason the classifier it serves is: a NEW -/// `QuantityExpr` variant must be classified before it compiles, so an `UpTo` can never -/// be smuggled in under a newly-added wrapper. -/// -/// MEASURED DISCREPANCY, and the reason this guard exists at all: `Effect::Draw`'s own -/// type doc (types/ability.rs) says the drawer "chooses any 0..=resolve(max) at -/// resolution time via the `engine_resolution_choices` flow", but `effects/draw.rs` -/// never calls `QuantityExpr::peel_up_to` and contains no `WaitingFor` — the prompt is -/// documented, not implemented, so an `UpTo` draw currently draws the maximum. Rejecting -/// it is therefore a false-negative TODAY and stays sound the day the prompt is wired. -fn quantity_offers_up_to_choice(q: &QuantityExpr) -> bool { - match q { - QuantityExpr::UpTo { .. } => true, - QuantityExpr::Fixed { .. } | QuantityExpr::Ref { .. } => false, - QuantityExpr::DivideRounded { inner, .. } - | QuantityExpr::Offset { inner, .. } - | QuantityExpr::ClampMin { inner, .. } - | QuantityExpr::Multiply { inner, .. } => quantity_offers_up_to_choice(inner), - QuantityExpr::Power { exponent, base: _ } => quantity_offers_up_to_choice(exponent), - QuantityExpr::Difference { left, right } => { - quantity_offers_up_to_choice(left) || quantity_offers_up_to_choice(right) - } - QuantityExpr::Sum { exprs } | QuantityExpr::Max { exprs } => { - exprs.iter().any(quantity_offers_up_to_choice) - } - } -} - -/// CR 608.2d: can resolving this single `Effect` ever offer a resolution-time -/// player choice? Exhaustive `match` with NO wildcard catch-all arm — a NEW -/// `Effect` variant fails to compile here until it is classified. Only the -/// allow-list arms make a soundness claim (grounded by a resolver trace); every -/// other variant is the fail-closed `MayPrompt` (an ungrounded reject is only a -/// false-negative cover rejection, so grouped arms need no per-kind evidence). -fn effect_resolution_choice_freedom(e: &Effect) -> ResolutionChoiceFreedom { - match e { - // ---- allow-list: choice-free EXCEPT that kind's own replacement - // pipeline (destructured WITHOUT `..` so a new field forces a - // re-audit of the soundness claim) ---- - // - // CR 119.3 + CR 732.2a: resolver trace effects/life.rs — resolve_gain - // (life.rs:19-110) runs its OWN inline replace_event pipeline; its only - // prompt is ReplacementResult::NeedsChoice (life.rs:96-101). Player - // selection = pure filter eval (game/filter.rs: no WaitingFor); amount = - // pure quantity eval (game/quantity.rs: no WaitingFor). Verdict is - // payload-independent. CR 119.7 can't-gain short-circuit is deterministic. - // PAIRED OBLIGATION: caller runs replacement_environment_may_prompt for - // the LIFE class (resource.rs item 6), which also covers the mandatory - // body-continuation drain (H4 route c) and the Execute-arm stack.rs drain. - Effect::GainLife { - amount: _, - player: _, - } => ResolutionChoiceFreedom::FreeUnlessReplacements(ReplacementPromptClasses::LIFE), - // CR 119.3 + CR 732.2a: same shape — resolve_lose (life.rs:293-365), - // only prompt = NeedsChoice (life.rs:352-355). CR 119.8 can't-lose - // short-circuit is deterministic. Same PAIRED OBLIGATION. - Effect::LoseLife { - amount: _, - target: _, - } => ResolutionChoiceFreedom::FreeUnlessReplacements(ReplacementPromptClasses::LIFE), - // CR 121.1 + CR 121.2 + CR 732.2a: resolver trace effects/draw.rs — - // `resolve` (draw.rs:104-160) computes the count with a pure quantity eval - // (`resolve_quantity_with_targets`, game/quantity.rs: no WaitingFor) and the - // drawer with a pure lookup (`resolve_player_for_context_ref`, - // effects/mod.rs:6084: reads `ability`/`state`, returns a `PlayerId`), then - // hands the whole instruction to `start_draw_sequence_*` → - // `resume_draw_sequence`, i.e. the CR 121.2 per-card replacement pipeline. - // Its ONLY prompt is `ReplacementResult::NeedsChoice` (draw.rs:150); the - // whole file contains zero `WaitingFor` (`rg -c WaitingFor - // src/game/effects/draw.rs` == 0). Drawing from an empty library is not a - // prompt either — CR 704.5b makes it a state-based action. Same shape as the - // life pair, so the SAME parameterized PAIRED OBLIGATION applies, for the - // DRAW class. - // - // THE MECHANISM THIS ARM CLAIMS, and it is not "the variant is Draw": - // a draw is choice-free only when it is STARVED — when its sole route to a - // resolution-time prompt is the replacement ENVIRONMENT, which the paired - // obligation then measures. Two payload/context routes are NOT that, and both - // are excluded: - // * OPTIONAL draws ("you MAY draw a card", CR 603.5) never reach this arm. - // `ability_resolution_choice_freedom` returns `MayPrompt` on `optional` / - // `optional_targeting` / `optional_for` BEFORE dispatching to the effect - // classifier, and that refusal is CORRECT: the "may" is a genuine - // per-iteration CR 608.2d choice with no replacement effect involved. - // Widening keyed on the variant NAME would have silently swallowed it. - // * CR 608.2d "draw up to N" (`count: UpTo`) is a resolution-time COUNT - // choice; rejected here, fail-closed, by `quantity_offers_up_to_choice`. - Effect::Draw { count, target: _ } => { - if quantity_offers_up_to_choice(count) { - ResolutionChoiceFreedom::MayPrompt - } else { - ResolutionChoiceFreedom::FreeUnlessReplacements(ReplacementPromptClasses::DRAW) - } - } - // ---- everything else: fail-closed MayPrompt. Grouped so the compiler - // still enforces exhaustiveness (every variant is named); no payload - // scanning needed on the reject side. ---- - Effect::StartYourEngines { .. } - | Effect::ChangeSpeed { .. } - | Effect::DealDamage { .. } - | Effect::ApplyPostReplacementDamage { .. } - | Effect::EachDealsDamageEqualToPower { .. } - | Effect::OpponentGuess { .. } - | Effect::SwapChosenLabels { .. } - | Effect::Pump { .. } - | Effect::PairWith { .. } - | Effect::Destroy { .. } - | Effect::Regenerate { .. } - | Effect::RemoveAllDamage { .. } - | Effect::Counter { .. } - | Effect::CounterAll { .. } - | Effect::Token { .. } - | Effect::SetTapState { .. } - | Effect::RemoveCounter { .. } - | Effect::ChooseCounterKind { .. } - | Effect::PutChosenCounter { .. } - | Effect::Sacrifice { .. } - | Effect::DiscardCard { .. } - | Effect::Mill { .. } - | Effect::Scry { .. } - | Effect::PumpAll { .. } - | Effect::DamageAll { .. } - | Effect::DamageEachPlayer { .. } - | Effect::EachPlayerCopyChosen { .. } - | Effect::DestroyAll { .. } - | Effect::ChangeZone { .. } - | Effect::ChangeZoneAll { .. } - | Effect::Dig { .. } - | Effect::GainControl { .. } - | Effect::GainControlAll { .. } - | Effect::ControlNextTurn { .. } - | Effect::Attach { .. } - | Effect::UnattachAll { .. } - | Effect::Surveil { .. } - | Effect::Fight { .. } - | Effect::Bounce { .. } - | Effect::BounceAll { .. } - | Effect::Explore - | Effect::ExploreAll { .. } - | Effect::Investigate - | Effect::Tribute { .. } - | Effect::TimeTravel - | Effect::BecomeMonarch - | Effect::NoOp - | Effect::Proliferate - | Effect::ProliferateTarget { .. } - | Effect::Populate - | Effect::Clash - // CR 701.4a + CR 608.2d: behold may prompt (`WaitingFor::BeholdChoice` - // when 2+ candidates) — fail-closed MayPrompt. - | Effect::Behold { .. } - | Effect::EndTheTurn - | Effect::EndCombatPhase - | Effect::Vote { .. } - | Effect::SeparateIntoPiles { .. } - | Effect::SwitchPT { .. } - | Effect::CopySpell { .. } - | Effect::EpicCopy { .. } - | Effect::CastCopyOfCard { .. } - | Effect::CopyTokenOf { .. } - | Effect::CreateTokenCopyFromPool { .. } - | Effect::Myriad - | Effect::Encore - | Effect::CombineHost { .. } - | Effect::ChooseAugmentAndCombineWithHost { .. } - | Effect::Meld { .. } - | Effect::ExileHaunting { .. } - | Effect::HideawayConceal { .. } - | Effect::CopyTokenBlockingAttacker { .. } - | Effect::BecomeCopy { .. } - // CR 707.2c: raises `WaitingFor::CopyTargetChoice` — prompts, fail-closed - // MayPrompt (never resolved through the normal chain, but classified here - // to keep the match exhaustive). - | Effect::ChoosePermanent { .. } - | Effect::GainActivatedAbilitiesOfTarget { .. } - | Effect::ChooseCard { .. } - | Effect::PutCounter { .. } - | Effect::PutCounterAll { .. } - | Effect::MultiplyCounter { .. } - | Effect::DoublePT { .. } - | Effect::DoublePTAll { .. } - | Effect::MoveCounters { .. } - | Effect::Animate { .. } - | Effect::ReturnAsAura { .. } - | Effect::RegisterBending { .. } - | Effect::GenericEffect { .. } - | Effect::Cleanup { .. } - | Effect::Mana { .. } - | Effect::Discard { .. } - | Effect::Shuffle { .. } - | Effect::Transform { .. } - // CR 710.4: `flip_permanent` offers no resolution-time choice (it is a - // status change or a silent no-op), exactly like `Transform`. - | Effect::FlipPermanent { .. } - | Effect::SearchLibrary { .. } - | Effect::SearchOutsideGame { .. } - | Effect::RevealHand { .. } - | Effect::RevealFromHand { .. } - | Effect::Reveal { .. } - | Effect::RevealTop { .. } - | Effect::ExileTop { .. } - | Effect::ExileFaceDownPile { .. } - | Effect::TargetOnly { .. } - | Effect::Choose { .. } - | Effect::ChooseDamageSource { .. } - | Effect::Suspect { .. } - | Effect::Unsuspect { .. } - | Effect::Connive { .. } - | Effect::PhaseOut { .. } - | Effect::PhaseIn { .. } - | Effect::ForceBlock { .. } - | Effect::ForceAttack { .. } - | Effect::SolveCase - | Effect::BecomePrepared { .. } - | Effect::BecomeUnprepared { .. } - | Effect::BecomeSaddled { .. } - | Effect::BecomeBlocked { .. } - | Effect::SetClassLevel { .. } - | Effect::CreateDelayedTrigger { .. } - | Effect::AddTargetReplacement { .. } - | Effect::AddRestriction { .. } - | Effect::ReduceNextSpellCost { .. } - | Effect::GrantNextSpellAbility { .. } - | Effect::AddPendingETBCounters { .. } - | Effect::AddPendingEntersModifications { .. } - | Effect::CreateEmblem { .. } - | Effect::PayCost { .. } - | Effect::CastFromZone { .. } - | Effect::FreeCastFromZones { .. } - | Effect::ExileResolvingSpellInsteadOfGraveyard { .. } - | Effect::PreventDamage { .. } - | Effect::CreateDamageReplacement { .. } - | Effect::CreateDrawReplacement { .. } - | Effect::LoseTheGame { .. } - | Effect::WinTheGame { .. } - | Effect::RollDie { .. } - | Effect::FlipCoin { .. } - | Effect::FlipCoins { .. } - | Effect::FlipCoinUntilLose { .. } - | Effect::RingTemptsYou - | Effect::VentureIntoDungeon - | Effect::VentureInto { .. } - | Effect::TakeTheInitiative - | Effect::ArrangePlanarDeckTop { .. } - | Effect::Planeswalk - | Effect::OpenAttractions { .. } - | Effect::RollToVisitAttractions - | Effect::AssembleContraptions { .. } - | Effect::AssembleContraptionsFromRollDifference - | Effect::CrankContraptions { .. } - | Effect::ReassembleContraption { .. } - | Effect::AssembleContraptionOnSprocket { .. } - | Effect::ReassembleContraptionOnSprocket { .. } - | Effect::PutSticker { .. } - | Effect::ApplySticker { .. } - | Effect::ProcessRadCounters - | Effect::GrantCastingPermission { .. } - | Effect::ChooseFromZone { .. } - | Effect::RememberCard { .. } - | Effect::ForEachCategory { .. } - | Effect::ChooseObjectsIntoTrackedSet { .. } - | Effect::ChooseAndSacrificeRest { .. } - | Effect::Exploit { .. } - | Effect::GainEnergy { .. } - | Effect::GivePlayerCounter { .. } - | Effect::LoseAllPlayerCounters { .. } - | Effect::ExileFromTopUntil { .. } - | Effect::RevealUntil { .. } - | Effect::Discover { .. } - | Effect::Heist { .. } - | Effect::HeistExile - | Effect::Cascade - | Effect::Ripple { .. } - | Effect::MiracleCast { .. } - | Effect::MadnessCast { .. } - | Effect::PutAtLibraryPosition { .. } - | Effect::ChooseDrawnThisTurnPayOrTopdeck { .. } - | Effect::PutOnTopOrBottom { .. } - | Effect::GiftDelivery { .. } - | Effect::Goad { .. } - | Effect::GoadAll { .. } - | Effect::Detain { .. } - | Effect::SetRoomDoorLock { .. } - | Effect::ExchangeControl { .. } - | Effect::ChangeTargets { .. } - | Effect::Manifest { .. } - | Effect::ManifestDread - | Effect::Cloak { .. } - | Effect::TurnFaceUp { .. } - | Effect::TurnFaceDown { .. } - | Effect::ExtraTurn { .. } - | Effect::GrantExtraLoyaltyActivations { .. } - | Effect::SkipNextTurn { .. } - | Effect::SkipNextStep { .. } - | Effect::AdditionalPhase { .. } - | Effect::Double { .. } - | Effect::EachSourceDealsDamage { .. } - | Effect::RuntimeHandled { .. } - | Effect::Incubate { .. } - | Effect::Amass { .. } - | Effect::Monstrosity { .. } - | Effect::Specialize - | Effect::Renown { .. } - | Effect::Bolster { .. } - | Effect::Adapt { .. } - | Effect::Learn - | Effect::Forage - | Effect::Harness - | Effect::CollectEvidence { .. } - | Effect::Endure { .. } - | Effect::BlightEffect { .. } - | Effect::Seek { .. } - | Effect::SetLifeTotal { .. } - | Effect::ExchangeLifeWithStat { .. } - | Effect::ExchangeLifeTotals { .. } - | Effect::SetDayNight { .. } - | Effect::GiveControl { .. } - | Effect::RemoveFromCombat { .. } - | Effect::Conjure { .. } - | Effect::ApplyPerpetual { .. } - | Effect::Intensify { .. } - | Effect::DraftFromSpellbook { .. } - | Effect::ChooseCounterAdjustment { .. } - | Effect::CreatePlaneswalkReplacement { .. } - | Effect::ChaosEnsues - | Effect::RedistributeLifeTotals - | Effect::ReverseTurnOrder - | Effect::ChooseOneOf { .. } - | Effect::Unimplemented { .. } => ResolutionChoiceFreedom::MayPrompt, - } -} - /// CR 732.2a / CR 705.1 / CR 706.1a / CR 701.9b: does resolving this single /// `Effect` draw on game randomness whose outcome determines the next action — a /// coin flip (CR 705.1), a die roll (CR 706.1a, incl. the planar / attraction / @@ -6587,113 +6160,6 @@ pub(crate) fn spell_ability_bears_randomness(def: &AbilityDefinition) -> bool { effects.iter().any(|&e| effect_is_randomness_bearing(e)) } -/// CR 608.2d + CR 732.2a: does resolving this ability (its whole chain) ever -/// enter a resolution-time player choice? The `ResolvedAbility` destructure is -/// EXHAUSTIVE with no `..` — the read-walk's `resolved_ability_axes` (:116) -/// classifications are deliberately NOT reused (this is a different question: -/// e.g. `optional` is read-free yet choice-bearing). A FUTURE field fails to -/// compile here until classified for the choice question. -pub(crate) fn ability_resolution_choice_freedom(a: &ResolvedAbility) -> ResolutionChoiceFreedom { - let ResolvedAbility { - // ---- choice-bearing: folded into the verdict below ---- - effect, - sub_ability, - else_ability, - optional, - optional_for, - optional_targeting, - unless_pay, - target_chooser, - target_choice_timing, - modal, - mode_abilities, - repeat_until, - // ---- choice-free: bound `_` with a one-line justification ---- - condition: _, // resolution branch selector, pure eval (both branches recursed) - duration: _, // continuous-effect lifetime, no prompt - player_scope: _, // iteration fan-out, pure player-filter eval - starting_with: _, // APNAP start override, no prompt - repeat_for: _, // "for each" count, pure quantity eval (game/quantity.rs) - announced_x: _, // CR 601.2b announce-time count, pure quantity eval, no prompt - multi_target: _, // announce-time variable-count bounds (Resolution case caught by timing) - target_constraints: _, // announce-time cross-target legality, no resolution prompt - distribution: _, // CR 601.2d concrete pre-assigned portions (announce-time) - targets: _, // concrete announced target refs (already resolved) - source_id: _, // object id - source_incarnation: _, // self-transform epoch latch, no resolution-time choice - trigger_source: _, // exact triggered-source authority, no choice - trigger_definition_ref: _, // exact trigger occurrence, no choice - force_block_attacker: _, // exact force-block referent, no choice - controller: _, // player id - original_controller: _, // player id - scoped_player: _, // player id (iteration binding) - kind: _, // AbilityKind tag (no payload) - context: _, // SpellContext: cast-time fact snapshot, not a live choice - description: _, // display string - selected_mode_labels: _, // display strings, no resolution-time choice - min_x_value: _, // u32 - cant_be_copied: _, // bool - copy_count_status: _, // status tag - forward_result: _, // bool - chosen_x: _, // concrete cast-time X (chosen at announcement, not resolution) - cost_paid_object: _, // concrete captured-object snapshot - cost_paid_object_ids: _, // concrete captured-object ids (issue #4948) - effect_context_object: _, // concrete captured-object snapshot - amassed_army_object: _, // concrete captured-object snapshot - ability_index: _, // usize provenance - may_trigger_origin: _, // provenance tag - target_selection_mode: _, // Chosen/Random tag (announce-time) - chosen_players: _, // concrete chosen player ids (already selected) - replacement_applied: _, // replacement provenance set, no prompt - sub_link: _, // SubAbilityLink kind tag - sibling_condition: _, // SiblingCondition replication marker, no resolution-time choice - parent_target_missing_reason: _, // seam flag - } = a; - - // CR 608.2d: an optional effect / optional targeting / opponent-may - // effect prompts the controller (or opponent) before execution - // (WaitingFor::OptionalEffectChoice, effects/mod.rs:4294). - if *optional || *optional_targeting || optional_for.is_some() { - return ResolutionChoiceFreedom::MayPrompt; - } - // CR 118.12: "unless a player pays {cost}" is a resolution-time pay prompt - // (also item-4 redundant — ability_scan.rs sets `projected` for it). - if unless_pay.is_some() { - return ResolutionChoiceFreedom::MayPrompt; - } - // CR 601.2c + CR 603.3d: a resolution-time target chooser announces targets (H3). - if target_chooser.is_some() { - return ResolutionChoiceFreedom::MayPrompt; - } - // CR 608.2d: resolution-timed target selection is a resolution-time choice even - // though `targets` is empty on the stack, which the ordering gate can't see (H3). - if matches!(target_choice_timing, TargetChoiceTiming::Resolution) { - return ResolutionChoiceFreedom::MayPrompt; - } - // CR 700.2b + CR 603.3c: a modal header / reflexive per-mode abilities open a - // mode choice at resolution (conservative — rejected even when the mode is baked). - if modal.is_some() || !mode_abilities.is_empty() { - return ResolutionChoiceFreedom::MayPrompt; - } - // CR 608.2c + CR 107.1c: only the controller-prompted repeat variant is a - // player choice; while / until-stop predicates are pure re-evaluation. - if matches!(repeat_until, Some(RepeatContinuation::ControllerChoice)) { - return ResolutionChoiceFreedom::MayPrompt; - } - - // CR 608.2c: the chain resolves the effect and, on the taken branch, a - // sub_ability / else_ability effect — join both (fail-safe: reject if either - // can prompt). - let mut acc = effect_resolution_choice_freedom(effect); - if let Some(sub) = sub_ability { - acc = acc.join(ability_resolution_choice_freedom(sub)); - } - if let Some(else_branch) = else_ability { - acc = acc.join(ability_resolution_choice_freedom(else_branch)); - } - acc -} - #[cfg(test)] mod tests { use super::*; @@ -8319,200 +7785,6 @@ mod tests { assert!(!ability_reads_sibling_mutable(&fixed_drain())); } - // ---- Resolution-time choice classifier: pinned in BOTH directions ---- - /// Guard test (9092a8961 standard): pins `effect_resolution_choice_freedom` - /// and the ability-level wrapper flips. - /// - /// The `FreeUnlessReplacements` allow set is EXACTLY - /// `{Effect::GainLife, Effect::LoseLife, non-"up to" Effect::Draw}` — asserted - /// below and pinned by the allow-arm census - /// (`rg -c 'FreeUnlessReplacements\(ReplacementPromptClasses::' ability_scan.rs` - /// == 3, all inside `effect_resolution_choice_freedom`). The census matches on the - /// named-const payload on purpose: the looser - /// `FreeUnlessReplacements\(` counts 6, because `join`'s three match patterns bind - /// the payload as a variable and would drown the signal. A future fourth allow arm - /// must update this pin, the census, and add a resolver-trace grounding row. - /// Each allow arm's obligation CLASS is asserted too, not just its variant: a - /// life arm that returned `DRAW` would pass a variant-only assertion while - /// silently checking the wrong replacement environment. - /// - /// Compiler-exhaustiveness leg: `effect_resolution_choice_freedom`'s match has - /// no wildcard catch-all, so a NEW `Effect` variant fails to compile until classified. - /// Executed revert-fail (documented in the commit): classifying `Effect::Scry` - /// ⇒ `FreeUnlessReplacements` turns this test RED. - #[test] - fn resolution_choice_verdicts_are_exactly_pinned() { - use crate::types::ability::{ - AbilityCost, AbilityDefinition, AbilityKind, UnlessPayModifier, - }; - use ResolutionChoiceFreedom::{FreeUnlessReplacements, MayPrompt}; - - // Allow-list (soundness claims) ⇒ FreeUnlessReplacements, each naming the - // event class whose replacement environment the caller must then check. - let gain = Effect::GainLife { - amount: QuantityExpr::Fixed { value: 1 }, - player: TargetFilter::Controller, - }; - let lose = Effect::LoseLife { - amount: QuantityExpr::Fixed { value: 1 }, - target: None, - }; - let draw = Effect::Draw { - count: QuantityExpr::Fixed { value: 1 }, - target: TargetFilter::Controller, - }; - assert_eq!( - effect_resolution_choice_freedom(&gain), - FreeUnlessReplacements(ReplacementPromptClasses::LIFE) - ); - assert_eq!( - effect_resolution_choice_freedom(&lose), - FreeUnlessReplacements(ReplacementPromptClasses::LIFE) - ); - // CR 121.1: a MANDATORY, non-"up to" draw is starved — its only prompt route - // is the CR 616.1 draw-replacement environment, which the DRAW obligation - // hands to the caller. - assert_eq!( - effect_resolution_choice_freedom(&draw), - FreeUnlessReplacements(ReplacementPromptClasses::DRAW) - ); - // CR 608.2d: "draw up to N" is a resolution-time COUNT choice ⇒ excluded, - // including under an arithmetic wrapper (the recursion, not just the top level). - for count in [ - QuantityExpr::UpTo { - max: Box::new(QuantityExpr::Fixed { value: 3 }), - }, - QuantityExpr::Offset { - inner: Box::new(QuantityExpr::UpTo { - max: Box::new(QuantityExpr::Fixed { value: 3 }), - }), - offset: 1, - }, - ] { - assert_eq!( - effect_resolution_choice_freedom(&Effect::Draw { - count: count.clone(), - target: TargetFilter::Controller, - }), - MayPrompt, - "up-to draw count {count:?} is a CR 608.2d resolution-time choice" - ); - } - // The join is a UNION of obligations, not a collapse to MayPrompt: a chain - // that both drains and draws owes BOTH environmental checks. - assert_eq!( - effect_resolution_choice_freedom(&lose).join(effect_resolution_choice_freedom(&draw)), - FreeUnlessReplacements(ReplacementPromptClasses { - life: true, - draw: true - }) - ); - - // Reject side: the finding's kinds + adjacent siblings ⇒ MayPrompt, each - // with its resolver-prompt raise-site citation. - let rejects = [ - Effect::Proliferate, // WaitingFor::ProliferateChoice — proliferate.rs:109 - Effect::Populate, // WaitingFor::PopulateChoice — populate.rs:50 - Effect::Clash, // WaitingFor::ClashChooseOpponent — clash.rs:47 - Effect::Behold { - filter: TargetFilter::Any, - }, // WaitingFor::BeholdChoice — behold.rs (2+ candidates) - Effect::Explore, // WaitingFor::ExploreChoice — explore.rs:191 - Effect::Scry { - count: QuantityExpr::Fixed { value: 1 }, - target: TargetFilter::Controller, - }, // Scry always prompts (bottom/top ordering) - Effect::Sacrifice { - target: TargetFilter::Any, - count: QuantityExpr::Fixed { value: 1 }, - min_count: 0, - }, // WaitingFor::EffectZoneChoice — sacrifice.rs:306 - Effect::DiscardCard { - count: 1, - target: TargetFilter::Any, - }, // discard selection prompt - ]; - for e in &rejects { - assert_eq!( - effect_resolution_choice_freedom(e), - MayPrompt, - "{e:?} must be MayPrompt" - ); - } - - // Explicit allow-set pin: exactly {GainLife, LoseLife, non-"up to" Draw}. - // Every other kind sampled above is on the reject side; the allow-arm census - // is the structural guard against a silent fourth allow arm. - assert!( - rejects - .iter() - .all(|e| effect_resolution_choice_freedom(e) == MayPrompt), - "the FreeUnlessReplacements set is exactly {{GainLife, LoseLife, non-up-to Draw}}" - ); - - // Ability-level wrapper flips: base ⇒ Free (paired positive reach-guard), - // each single-field mutation ⇒ MayPrompt (proves the FLIP, not something - // upstream, causes the rejection). - let base = ResolvedAbility::new(gain.clone(), Vec::new(), ObjectId(1), PlayerId(0)); - assert_eq!( - ability_resolution_choice_freedom(&base), - FreeUnlessReplacements(ReplacementPromptClasses::LIFE) - ); - - let mut a = base.clone(); - a.optional = true; - assert_eq!(ability_resolution_choice_freedom(&a), MayPrompt); - - // CR 603.5: THE MECHANISM GUARD for the draw widening. The same - // `Effect::Draw` payload classifies FREE when the ability is mandatory and - // `MayPrompt` when it is optional — proving the allow arm is keyed on the - // starved MECHANISM and not on the variant name. Both directions asserted, so - // neither can go vacuous. - let draw_base = ResolvedAbility::new(draw.clone(), Vec::new(), ObjectId(1), PlayerId(0)); - assert_eq!( - ability_resolution_choice_freedom(&draw_base), - FreeUnlessReplacements(ReplacementPromptClasses::DRAW) - ); - let mut optional_draw = draw_base.clone(); - optional_draw.optional = true; - assert_eq!( - ability_resolution_choice_freedom(&optional_draw), - MayPrompt, - "an optional draw is a genuine CR 603.5 resolution-time choice and must NOT be \ - swallowed by the mandatory-draw allow arm" - ); - - let mut a = base.clone(); - a.optional_targeting = true; - assert_eq!(ability_resolution_choice_freedom(&a), MayPrompt); - - let mut a = base.clone(); - a.unless_pay = Some(UnlessPayModifier { - cost: AbilityCost::Tap, - payer: TargetFilter::Controller, - }); - assert_eq!(ability_resolution_choice_freedom(&a), MayPrompt); - - let mut a = base.clone(); - a.target_chooser = Some(TargetFilter::Controller); - assert_eq!(ability_resolution_choice_freedom(&a), MayPrompt); - - let mut a = base.clone(); - a.target_choice_timing = TargetChoiceTiming::Resolution; - assert_eq!(ability_resolution_choice_freedom(&a), MayPrompt); - - let mut a = base.clone(); - a.mode_abilities = vec![AbilityDefinition::new(AbilityKind::Spell, Effect::NoOp)]; - assert_eq!(ability_resolution_choice_freedom(&a), MayPrompt); - - let mut a = base.clone(); - a.repeat_until = Some(RepeatContinuation::ControllerChoice); - assert_eq!(ability_resolution_choice_freedom(&a), MayPrompt); - - let mut a = base.clone(); - a.modal = Some(ModalChoice::default()); - assert_eq!(ability_resolution_choice_freedom(&a), MayPrompt); - } // ---- PR #5872 blocker-2 regression: scry look count is event-context ---- /// CR 701.22a + CR 603.2c: "the number of cards looked at while scrying diff --git a/crates/engine/src/game/effects/token.rs b/crates/engine/src/game/effects/token.rs index c9b1fd45a1..67eeeac799 100644 --- a/crates/engine/src/game/effects/token.rs +++ b/crates/engine/src/game/effects/token.rs @@ -2076,23 +2076,18 @@ fn token_creation_needs_choice( count, applied: HashSet::new(), }; - let candidates = replacement::find_applicable_replacements(state, &proposed, registry); - if candidates.is_empty() { - return false; - } - // (1) any single optional/MayCost applicable replacement → interactive. - let any_optional = candidates.iter().any(|rid| { - state - .objects - .get(&rid.source) - .and_then(|o| o.replacement_definitions.get(rid.index)) - .map(|r| replacement::replacement_mode_is_optional(&r.mode)) - .unwrap_or(true) // unknown ⇒ conservatively interactive - }); - // (2) ≥2 candidates whose ordering is material → CR 616.1 player choice. - let ordering_material = candidates.len() >= 2 - && replacement::replacement_ordering_is_material(state, &candidates, &proposed); - any_optional || ordering_material + // Delegates to the ONE prompt-cause authority. Term for term HEAD's two + // disjuncts: `OptionalCandidate` is the `any_optional` scan (with an + // unresolvable def — every virtual — conservatively optional) and + // `OrderingMaterial` is the `len() >= 2 && ordering_is_material` conjunct. + // + // `MandatoryBodyContinuation` is deliberately NOT read here. A drained body + // can set a non-priority `waiting_for`, so taking it would be a real + // token-batching change; it is left to its own change rather than smuggled + // into this delegation. + let causes = replacement::proposed_event_prompt_cause(state, &proposed, registry); + causes.contains(replacement::ReplacementPromptCause::OptionalCandidate) + || causes.contains(replacement::ReplacementPromptCause::OrderingMaterial) } /// CR 205: Extract the concrete `CoreType` set a `TypeFilter` counts, for the diff --git a/crates/engine/src/game/mod.rs b/crates/engine/src/game/mod.rs index 32cfc719ea..004b4b090b 100644 --- a/crates/engine/src/game/mod.rs +++ b/crates/engine/src/game/mod.rs @@ -144,6 +144,7 @@ pub mod public_state; pub mod quantity; pub mod replacement; pub mod replay; +pub(crate) mod resolution_prompt; pub mod restrictions; pub mod room; pub(crate) mod sacrifice; diff --git a/crates/engine/src/game/replacement.rs b/crates/engine/src/game/replacement.rs index c931c0403d..48a70eb5df 100644 --- a/crates/engine/src/game/replacement.rs +++ b/crates/engine/src/game/replacement.rs @@ -7353,6 +7353,237 @@ pub fn find_applicable_replacements( candidates } +// =========================================================================== +// CR 614.1a + CR 616.1 — the ONE prompt-cause authority over a proposed event. +// +// Derived from the SAME candidate authority the live pipeline uses +// (`find_applicable_replacements`), so VIRTUAL candidates — which have no +// `ReplacementDefinition` at all and are therefore invisible to any def scan — +// are included by construction. A name-derived class map was fail-open twice +// over: a `ProposedEvent::CreateToken` also draws `ReplacementEvent::ChangeZone` +// defs (Giada, Font of Hope), and no def scan can see a virtual. +// =========================================================================== + +/// CR 614.1a + CR 616.1: why the live replacement pipeline can open a player +/// choice on one proposed event. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub(crate) enum ReplacementPromptCause { + /// CR 614.1a: a single optional / `MayCost` candidate prompts. An + /// unresolvable def — which every virtual candidate is — is conservatively + /// optional, mirroring `unwrap_or(true)` at the token gate. + OptionalCandidate, + /// A mandatory body continuation (`execute` / `runtime_execute`) is stashed + /// as a `PostReplacementContinuation` and drained through an arbitrary + /// `ResolvedAbility`, which can set a non-priority `waiting_for`. + MandatoryBodyContinuation, + /// CR 616.1: two or more candidates whose ordering is material — the + /// affected player orders them. + OrderingMaterial, +} + +impl ReplacementPromptCause { + const fn bit(self) -> u8 { + match self { + ReplacementPromptCause::OptionalCandidate => 1 << 0, + ReplacementPromptCause::MandatoryBodyContinuation => 1 << 1, + ReplacementPromptCause::OrderingMaterial => 1 << 2, + } + } +} + +/// A SET of [`ReplacementPromptCause`], never one cause. +/// +/// The shape production already computes: `token_creation_needs_choice` asks +/// `any_optional || ordering_material` — a DISJUNCTION over the whole candidate +/// list. A single-cause return cannot express a disjunction, so on a board whose +/// first-decided cause is `MandatoryBodyContinuation` while a *different* +/// candidate is optional it would answer `false` where the live gate answers +/// `true` — fail-OPEN. No precedence is invented, because production asks for +/// none. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] +pub(crate) struct ReplacementPromptCauses(u8); + +impl ReplacementPromptCauses { + /// No cause — the identity for [`ReplacementPromptCauses::union`]. + pub(crate) const NONE: Self = Self(0); + + pub(crate) const fn of(cause: ReplacementPromptCause) -> Self { + Self(cause.bit()) + } + + pub(crate) const fn contains(self, cause: ReplacementPromptCause) -> bool { + self.0 & cause.bit() != 0 + } + + pub(crate) const fn union(self, other: Self) -> Self { + Self(self.0 | other.0) + } + + pub(crate) const fn is_empty(self) -> bool { + self.0 == 0 + } +} + +/// CR 614.1a + CR 616.1: can the live replacement pipeline open a player choice +/// on THIS proposed event, and why? Read-only (`&GameState`, no +/// `apply_single_replacement`), and derived from the pipeline's own candidate +/// authority rather than from a name-keyed class map. +pub(crate) fn proposed_event_prompt_cause( + state: &GameState, + event: &ProposedEvent, + registry: &IndexMap, +) -> ReplacementPromptCauses { + let candidates = find_applicable_replacements(state, event, registry); + if candidates.is_empty() { + return ReplacementPromptCauses::NONE; + } + let mut causes = ReplacementPromptCauses::NONE; + for rid in &candidates { + let def = state + .objects + .get(&rid.source) + .and_then(|o| o.replacement_definitions.get(rid.index)); + let Some(def) = def else { + // CR 614.1a: no resolvable definition (every virtual candidate) ⇒ + // conservatively interactive. + causes = causes.union(ReplacementPromptCauses::of( + ReplacementPromptCause::OptionalCandidate, + )); + continue; + }; + if replacement_mode_is_optional(&def.mode) { + causes = causes.union(ReplacementPromptCauses::of( + ReplacementPromptCause::OptionalCandidate, + )); + } else if def.execute.is_some() || def.runtime_execute.is_some() { + causes = causes.union(ReplacementPromptCauses::of( + ReplacementPromptCause::MandatoryBodyContinuation, + )); + } + } + // CR 616.1: ordering is only a choice when at least two candidates compete. + if candidates.len() >= 2 && replacement_ordering_is_material(state, &candidates, event) { + causes = causes.union(ReplacementPromptCauses::of( + ReplacementPromptCause::OrderingMaterial, + )); + } + causes +} + +/// CR 732.2a: does this proposed event's applier write a board axis the +/// completeness witness can observe — life, poison, counters, battlefield +/// cardinality, the CR 121.1 draw ledger or the CR 120.3a damage ledger? +/// +/// EXHAUSTIVE over all 29 `ProposedEvent` variants with NO wildcard: a new +/// variant fails to compile until it is classified, and an unclassified variant +/// costs COVERAGE (the probe refuses) rather than soundness. This is the single +/// partition — `probe_resolution`'s fourth `Prompted` arm and the R10′ witness's +/// `predicted_axes` both read it, so the resolver and the witness cannot drift +/// about which variants are accounted. +/// +/// THREE ZERO-PAYLOAD GUARDS ride the same rule, because a zero-valued event +/// writes no axis while still drawing candidates: candidate selection carries +/// `> 0` gates (the shield-damage arm and the CR 702.150a Compleated loyalty +/// arm), so a still-zero amount must be honest-red rather than silently +/// candidate-free. +pub(crate) fn event_is_accounted(event: &ProposedEvent) -> bool { + match event { + // ---- accounted: the applier's principal board write, or its own + // engine-maintained turn ledger, is on an axis the witness reads ---- + // CR 119.3: `player.life`. + ProposedEvent::LifeGain { .. } | ProposedEvent::LifeLoss { .. } => true, + // Zone cardinalities. + ProposedEvent::ZoneChange { .. } => true, + // Object / player counters. Zero-payload guard: the CR 702.150a + // Compleated virtual candidate is drawn under `count > 0`. + ProposedEvent::AddCounter { count, .. } => *count > 0, + // `zones::create_object` ⇒ battlefield cardinality. + ProposedEvent::CreateToken { .. } => true, + // CR 120.3a: the player branch DELEGATES its life write to a companion + // `LifeLoss`, but keeps `state.damage_dealt_this_turn`. Zero-payload + // guard: the shield-damage virtual candidate is drawn under `amount > 0`. + ProposedEvent::Damage { amount, .. } => *amount > 0, + // CR 121.1: DELEGATES every card to `zone_pipeline::move_object`, but + // keeps `player.cards_drawn_this_turn`. + ProposedEvent::Draw { count, .. } => *count > 0, + // ---- unaccounted: no axis of its own ⇒ the probe refuses. Named, not + // wildcarded, so a new variant is a compile error here. ---- + ProposedEvent::TokenEntry { .. } + | ProposedEvent::SearchFound { .. } + | ProposedEvent::Scry { .. } + | ProposedEvent::Mill { .. } + | ProposedEvent::CoinFlip { .. } + | ProposedEvent::Explore { .. } + | ProposedEvent::Connive { .. } + | ProposedEvent::Proliferate { .. } + | ProposedEvent::RemoveCounter { .. } + | ProposedEvent::MoveCounter { .. } + | ProposedEvent::Discard { .. } + | ProposedEvent::Tap { .. } + | ProposedEvent::Untap { .. } + | ProposedEvent::TurnFaceUp { .. } + | ProposedEvent::Destroy { .. } + | ProposedEvent::Sacrifice { .. } + | ProposedEvent::BeginTurn { .. } + | ProposedEvent::BeginPhase { .. } + | ProposedEvent::ProduceMana { .. } + | ProposedEvent::EmptyManaPool { .. } + | ProposedEvent::Planeswalk { .. } + | ProposedEvent::Attach { .. } => false, + } +} + +thread_local! { + /// CR 614.1a: armed only inside a speculative probe run. `None` = disarmed, + /// which is every production resolution. + static PROPOSED_EVENT_RECORDER: std::cell::RefCell>> = + const { std::cell::RefCell::new(None) }; +} + +/// Restores the PREVIOUS recorder on drop, not a hard reset, so nesting composes +/// exactly as `SimulationProbeGuard` does. `[profile.dev]` / `[profile.test]` +/// set no `panic` key, so the default is `unwind` — save/restore alone would +/// leak the armed recorder past a caught panic in the test profile as well as +/// in the server build. +struct ProposedEventRecorderGuard(Option>); + +impl Drop for ProposedEventRecorderGuard { + fn drop(&mut self) { + let previous = self.0.take(); + PROPOSED_EVENT_RECORDER.with(|cell| *cell.borrow_mut() = previous); + } +} + +/// Runs `f` with the recorder armed; returns every [`ProposedEvent`] that +/// reached `pipeline_loop` inside it — the pipeline BODY, not the +/// `replace_event` wrapper. `pipeline_loop` has 9 call sites and +/// `replace_combat_damage_batch` bypasses `replace_event` entirely, so recording +/// at the wrapper would be blind to every combat-damage event. +/// +/// Purely OBSERVATIONAL: `pipeline_loop` takes no behavioural branch on the +/// recorder, so an armed run and an unarmed run cannot diverge. +pub(crate) fn record_proposed_events(f: F) -> Vec { + let guard = ProposedEventRecorderGuard( + PROPOSED_EVENT_RECORDER.with(|cell| cell.borrow_mut().replace(Vec::new())), + ); + f(); + let recorded = PROPOSED_EVENT_RECORDER + .with(|cell| cell.borrow_mut().take()) + .unwrap_or_default(); + drop(guard); + recorded +} + +/// The recorder hook. Called once per `pipeline_loop` entry, before any +/// candidate is drawn, so the recorded event is the one the resolver proposed. +fn record_proposed_event(event: &ProposedEvent) { + PROPOSED_EVENT_RECORDER.with(|cell| { + if let Some(buffer) = cell.borrow_mut().as_mut() { + buffer.push(event.clone()); + } + }); +} + /// CR 614.1b + CR 614.10: Read-only probe for whether a turn-start skip /// replacement would replace the proposed turn with nothing. This deliberately /// does not call `replace_event`, so projection code can answer display-only @@ -8942,6 +9173,11 @@ fn pipeline_loop( registry: &IndexMap, events: &mut Vec, ) -> ReplacementResult { + // The single recording point (CR 614.1a). This is the pipeline BODY every one + // of the 9 entries runs, so an event a resolver proposes cannot avoid it. + // Disarmed (a no-op) outside a speculative probe. + record_proposed_event(&proposed); + loop { if depth >= MAX_REPLACEMENT_DEPTH { break; @@ -19678,6 +19914,120 @@ mod tests { "damage dealt TO Swans must still be prevented" ); } + + /// **§6 R13 — RECORDING-POINT COMPLETENESS.** + /// + /// The derivation `probe_resolution` builds is only as complete as the point + /// the recorder is hooked at. R13 pins the INVARIANT, never a call-site + /// count (U1 itself moves one caller of `find_applicable_replacements` from + /// `effects/token.rs` into this file): **every production path that goes on + /// to apply a replacement routes through `fn pipeline_loop`, where the one + /// hook sits.** + /// + /// Two conjuncts, because either alone is passable for the wrong reason: + /// + /// 1. STRUCTURAL — exactly one hook call site, and its enclosing top-level + /// `fn` is `pipeline_loop`. The needle is ASSEMBLED AT RUNTIME so this + /// test's own source text cannot be counted by its own instrument (the + /// self-referential-contamination shape that made the deleted + /// `resolution_choice_verdicts_are_exactly_pinned` census state `== 3` + /// while returning 8). + /// 2. RUNTIME — the two production appliers that reach the pipeline by + /// DIFFERENT routes both land in the recorder. `replace_combat_damage_batch` + /// is the discriminating one: it calls `pipeline_loop` directly and + /// **bypasses `replace_event` entirely**, so a hook on the wrapper is blind + /// to every combat-damage event while still passing conjunct 1's spirit. + /// + /// REVERT-PROBE (RUN, not argued): move the hook from `pipeline_loop` into + /// `replace_event` ⇒ the batch arm records nothing ⇒ this test FAILS. + #[test] + fn every_applying_path_reaches_the_recorder_because_the_hook_is_in_pipeline_loop() { + // Assembled, never written whole: a literal needle would appear in this + // file and be counted by the very scan that looks for it. + let hook_needle = format!("{}{}", "record_proposed_", "event(&"); + let fn_header = format!("\n{}{} ", "fn ", "pipeline_loop("); + let src = std::fs::read_to_string(format!( + "{}/src/game/replacement.rs", + env!("CARGO_MANIFEST_DIR") + )) + .expect("this module's own source is readable"); + let sites: Vec = src.match_indices(&hook_needle).map(|(at, _)| at).collect(); + assert_eq!( + sites.len(), + 1, + "the recorder must have exactly ONE call site; found {}", + sites.len() + ); + // EVERY top-level visibility, not just the bare `fn `. Measured: with + // only `"\nfn "` this scan silently passed when the hook was moved into + // `pub fn replace_event` — the nearest preceding COLUMN-0 `fn ` was + // `pipeline_loop`'s own header, so the wrong placement read as right. + let enclosing = ["\nfn ", "\npub fn ", "\npub(crate) fn "] + .iter() + .filter_map(|header| src[..sites[0]].rfind(header)) + .max() + .expect("a top-level `fn` encloses the hook"); + assert!( + src[enclosing..].starts_with(fn_header.trim_end()), + "the hook must sit in `pipeline_loop` — the pipeline BODY every entry \ + runs — not in the `replace_event` wrapper that \ + `replace_combat_damage_batch` bypasses" + ); + + // Conjunct 2. One board, one event, two routes. + let mut state = GameState::new_two_player(7); + let source = crate::game::zones::create_object( + &mut state, + CardId(1), + PlayerId(0), + "R13 Source".to_string(), + Zone::Battlefield, + ); + let damage = ProposedEvent::Damage { + source_id: source, + target: TargetRef::Player(PlayerId(1)), + amount: 3, + is_combat: true, + applied: HashSet::new(), + }; + let is_our_damage = |event: &ProposedEvent| { + matches!( + event, + ProposedEvent::Damage { + amount: 3, + is_combat: true, + .. + } + ) + }; + + let mut events = Vec::new(); + let batch_recorded = record_proposed_events(|| { + let _ = replace_combat_damage_batch(&mut state, &mut events, vec![damage.clone()]); + }); + assert!( + batch_recorded.iter().any(is_our_damage), + "CR 510.2: the combat-damage batch enters `pipeline_loop` DIRECTLY, so its \ + proposed events must still reach the derivation; recorded {batch_recorded:?}" + ); + + let wrapper_recorded = record_proposed_events(|| { + let _ = replace_event(&mut state, damage.clone(), &mut events); + }); + assert!( + wrapper_recorded.iter().any(is_our_damage), + "positive control on the OTHER route: the `replace_event` wrapper also \ + funnels through the same hook; recorded {wrapper_recorded:?}" + ); + + // Non-vacuity of the instrument itself: an armed extent that proposes + // nothing records nothing, so the two `any(..)`s above are attributable + // to the drives and not to a recorder that always reports something. + assert!( + record_proposed_events(|| {}).is_empty(), + "an armed extent with no pipeline entry records nothing" + ); + } } #[cfg(test)] diff --git a/crates/engine/src/game/resolution_prompt.rs b/crates/engine/src/game/resolution_prompt.rs new file mode 100644 index 0000000000..996b3129ff --- /dev/null +++ b/crates/engine/src/game/resolution_prompt.rs @@ -0,0 +1,1503 @@ +//! CR 608.2d + CR 616.1 + CR 732.2a — resolution-time choice-freeness. +//! +//! Split out of `game/ability_scan.rs`, which the module header defines as *"a +//! single compiler-exhaustive, wildcard-free walk of a resolved ability's typed +//! AST"* and which contains ZERO references to `GameState` in any form. Probing a +//! resolution needs a board, so threading `&GameState` into that file would break +//! its stated contract. `ResolutionChoiceFreedom`'s own doc already flagged the +//! mismatch: it *"classifies RESOLVER prompting behavior, not AST reads"*. +//! +//! The verdict carries the EVENTS the resolution proposes, not a class name. A +//! name-derived replacement class map was fail-open in two independent ways — +//! it missed defs drawn through a second registry key, and it could not see a +//! virtual candidate at all, because a virtual has no `ReplacementDefinition`. + +use crate::game::engine::SimulationProbeGuard; +use crate::game::{effects, replacement}; +use crate::types::ability::{ + Effect, QuantityExpr, RepeatContinuation, ResolvedAbility, TargetChoiceTiming, +}; +use crate::types::game_state::GameState; +use crate::types::proposed_event::ProposedEvent; + +use crate::analysis::resource::ProbeBudget; + +/// CR 732.2a + CR 608.2d: resolution-time choice-freeness verdict for the +/// growing-cascade cover gate (`analysis::resource` item 6). NOT an +/// `ability_scan::Axes` axis — this classifies RESOLVER prompting behavior, not +/// AST reads. +#[derive(Clone, PartialEq, Debug)] +pub(crate) enum ResolutionChoiceFreedom { + /// The exact `ProposedEvent`s this resolution runs through the replacement + /// pipeline, DERIVED by running the real resolver on a throwaway clone. + /// + /// The caller discharges CR 616.1 against the pipeline's own candidate + /// authority (`replacement::proposed_event_prompt_cause`) — never against a + /// name-derived class map, which was fail-open: a + /// `ProposedEvent::CreateToken` draws `ReplacementEvent::ChangeZone` defs + /// too, and no def scan sees a virtual candidate. + /// + /// NEVER EMPTY: `probe_resolution` returns `Prompted` on an empty + /// derivation, so a caller's `events.iter().any(..)` can never discharge + /// vacuously. + FreeUnlessReplacements(Vec), + /// May prompt, or unproven — the fail-closed default. + MayPrompt, +} + +impl ResolutionChoiceFreedom { + /// Worst-of join for a resolution chain: `MayPrompt` dominates (a chain that + /// can prompt on either branch can prompt); two free verdicts CONCATENATE + /// their derived event sets, because the caller's obligation is per-event + /// and a chain runs both branches' events through the same pipeline. + fn join(self, other: ResolutionChoiceFreedom) -> ResolutionChoiceFreedom { + match (self, other) { + ( + ResolutionChoiceFreedom::FreeUnlessReplacements(mut a), + ResolutionChoiceFreedom::FreeUnlessReplacements(b), + ) => { + a.extend(b); + ResolutionChoiceFreedom::FreeUnlessReplacements(a) + } + _ => ResolutionChoiceFreedom::MayPrompt, + } + } +} + +/// CR 616.1 + CR 614.1a: what ONE resolution asks of the player, observed by +/// RUNNING the real resolver on a throwaway clone. Never a hand-written +/// per-effect event list — measured, one `Effect::DealDamage` resolution +/// proposes `{Damage, LifeLoss}` (CR 120.3a) and one `Effect::Draw` proposes +/// `{Draw, ZoneChange}` (CR 121.1); a hand list omitted both companions. +#[derive(Clone, PartialEq, Debug)] +pub(crate) enum ResolutionProbe { + /// The resolver ran without opening a prompt of its own. These are EVERY + /// event it handed to the replacement pipeline. + Events(Vec), + /// The resolver parked — an intrinsic prompt, or a replacement that already + /// prompts on THIS board, or a budget/accounting refusal. Fail-closed. + Prompted, +} + +/// CR 616.1 + CR 614.1a: run `a`'s whole chain on a clone of `state` and report +/// what it asked of the player. +/// +/// `state` must be the RESOLUTION BOARD the caller built — the entry removed and +/// `stack::bind_resolution_scope(..)` run on it, so CR 608.2k / CR 603.2c / +/// CR 706.2 resolution scope is bound and the CR 603.4 intervening-if has +/// already been re-checked. Handing this function a raw pre-resolution +/// `GameState` resolves every `EventContextAmount` / `Triggering*` reference +/// against an absent context and is FAIL-OPEN for the `> 0`-gated virtual +/// replacement arms. +pub(crate) fn probe_resolution( + state: &GameState, + a: &ResolvedAbility, + budget: &mut ProbeBudget, +) -> ResolutionProbe { + // CR 732.2a: BUDGET-EXCEEDED ⇒ `Prompted`. Cost is a COVERAGE knob, never a + // soundness knob — an unaffordable probe degrades to honest-red (no + // certificate, no offer), never to a wrong certificate and never to an + // unbounded stall. Same shape as the `is_empty ⇒ Prompted` arm below. + if !budget.try_charge_one() { + return ResolutionProbe::Prompted; + } + // The SAME re-entrancy guard `apply_confirmed_shortcut` holds across its own + // clone-and-drive. It suppresses ring accumulation and shortcut detection + // inside the probe, which is exactly the recursion hazard a speculative + // resolve would otherwise open. + let _probe = SimulationProbeGuard::enter(); + let mut work = state.clone(); + let events = replacement::record_proposed_events(|| { + let mut ev = Vec::new(); + // `resolve_ability_chain`, NOT `resolve_effect`: the chain is the + // documented production entry and is where `optional`, the chained + // sub-abilities and the `repeat_for` / `RepeatDecision` prompt sites + // live. `resolve_effect` is the reserved-for-tests entry and is blind to + // all of them. + let _ = effects::resolve_ability_chain(&mut work, a, &mut ev, 0); + }); + // CR 732.2a: an unanswered prompt is a choice the certificate cannot + // describe. + if std::mem::discriminant(&work.waiting_for) != std::mem::discriminant(&state.waiting_for) { + return ResolutionProbe::Prompted; + } + // FAIL-CLOSED on an empty set. Measured: every empty derivation observed was + // an entry whose targets were not yet announced, and the resolver still + // returned `Ok` — so the `Result` does NOT discriminate "proposes nothing" + // from "could not run". + if events.is_empty() { + return ResolutionProbe::Prompted; + } + // CR 732.2a: an event whose board effect the certificate cannot account for + // is a choice surface the certificate cannot describe. `event_is_accounted` + // is the SAME exhaustive, wildcard-free partition the completeness witness + // uses — one function, two callers — so the resolver and the witness cannot + // drift about which variants are accounted. + if events.iter().any(|ev| !replacement::event_is_accounted(ev)) { + return ResolutionProbe::Prompted; + } + ResolutionProbe::Events(events) +} + +/// The one adapter every allow-listed arm funnels through: `Prompted ⇒ +/// MayPrompt`, `Events(v) ⇒ FreeUnlessReplacements(v)`. +fn resolution_probe_verdict( + state: &GameState, + ability: &ResolvedAbility, + budget: &mut ProbeBudget, +) -> ResolutionChoiceFreedom { + match probe_resolution(state, ability, budget) { + ResolutionProbe::Prompted => ResolutionChoiceFreedom::MayPrompt, + ResolutionProbe::Events(events) => ResolutionChoiceFreedom::FreeUnlessReplacements(events), + } +} + +/// CR 608.2d: is this `QuantityExpr` a CR 608.2d "up to N" count — a magnitude +/// the resolving player picks rather than one the state determines? +/// +/// Recursive and wildcard-free for the same reason the classifier it serves is: +/// a NEW `QuantityExpr` variant must be classified before it compiles, so an +/// `UpTo` can never be smuggled in under a newly-added wrapper. +/// +/// MEASURED DISCREPANCY, and the reason this guard exists at all: +/// `game/quantity.rs` resolves `UpTo { max } => recurse(max)` — it SILENTLY +/// ANSWERS the CR 107.1c / CR 608.2d resolution-time count choice as the maximum +/// rather than surfacing it. Only the resolvers that call +/// `QuantityExpr::peel_up_to` honour the flag, and none of the six allow-listed +/// classes does. So an unguarded arm would probe choice-free on an ability whose +/// resolution opens a count prompt. +fn quantity_offers_up_to_choice(q: &QuantityExpr) -> bool { + match q { + QuantityExpr::UpTo { .. } => true, + QuantityExpr::Fixed { .. } | QuantityExpr::Ref { .. } => false, + QuantityExpr::DivideRounded { inner, .. } + | QuantityExpr::Offset { inner, .. } + | QuantityExpr::ClampMin { inner, .. } + | QuantityExpr::Multiply { inner, .. } => quantity_offers_up_to_choice(inner), + QuantityExpr::Power { exponent, base: _ } => quantity_offers_up_to_choice(exponent), + QuantityExpr::Difference { left, right } => { + quantity_offers_up_to_choice(left) || quantity_offers_up_to_choice(right) + } + QuantityExpr::Sum { exprs } | QuantityExpr::Max { exprs } => { + exprs.iter().any(quantity_offers_up_to_choice) + } + } +} + +/// CR 608.2d: can resolving this single `Effect` ever offer a resolution-time +/// player choice? Exhaustive `match` with NO wildcard catch-all arm — a NEW +/// `Effect` variant fails to compile here until it is classified. +/// +/// THE ALLOW LIST IS A SCOPE/COST FILTER, NOT A SOUNDNESS CARRIER. At HEAD each +/// arm carried a hand-audited "its only prompt is `ReplacementResult::NeedsChoice`" +/// claim in its doc comment. That is a hand enumeration, and it went stale the +/// moment a resolver gained a prompt. The soundness is now carried by +/// `ResolutionProbe::Prompted`, which OBSERVES the real resolver opening a real +/// prompt on the real board. The arm only decides which classes are worth paying +/// a clone for. +fn effect_resolution_choice_freedom( + state: &GameState, + ability: &ResolvedAbility, + e: &Effect, + budget: &mut ProbeBudget, +) -> ResolutionChoiceFreedom { + match e { + // ---- SCOPE FILTER. DESTRUCTURED WITHOUT `..` on every arm, exactly as + // HEAD's three allow arms are, so a new field on any of them forces + // a re-audit of whether the class is still in scope. + // ⚠ `..` IS FORBIDDEN ON EVERY ARM BELOW. If a new `Effect` field + // makes one of them stop compiling, THAT E0027 IS THE GUARD FIRING + // — it is not a compile error to silence. rustc's own diagnostic + // prints a `help:` suggesting `..`, which silently disarms the + // guard. Classify the new field against the scope filter, then name + // it `_`. The 14-field `Effect::Token` arm is the one that maximally + // invites the `..`. + // + // CR 107.1c + CR 608.2d: THE `UpTo` GUARD IS ON *EVERY* + // QUANTITY-CARRYING ARM, not only `Draw`. All six allow-listed arms + // carry a `QuantityExpr` at their count/amount field, and + // `game/quantity.rs` answers `UpTo` as the maximum instead of + // prompting — so an unguarded arm would report choice-free on an + // ability whose resolution opens a count choice. DIRECTION: + // fail-closed. It can only turn a probe verdict into `MayPrompt`, + // never the reverse. ---- + Effect::GainLife { amount, player: _ } + | Effect::LoseLife { amount, target: _ } + | Effect::DealDamage { + amount, + target: _, + damage_source: _, + excess: _, + } => { + if quantity_offers_up_to_choice(amount) { + ResolutionChoiceFreedom::MayPrompt + } else { + resolution_probe_verdict(state, ability, budget) + } + } + Effect::PutCounter { + target: _, + counter_type: _, + count, + } + | Effect::Token { + name: _, + power: _, + toughness: _, + types: _, + colors: _, + keywords: _, + tapped: _, + count, + owner: _, + attach_to: _, + enters_attacking: _, + supertypes: _, + static_abilities: _, + enter_with_counters: _, + } => { + if quantity_offers_up_to_choice(count) { + ResolutionChoiceFreedom::MayPrompt + } else { + resolution_probe_verdict(state, ability, budget) + } + } + // HEAD's own arm shape, kept verbatim (single arm + inner `if`, no match + // guard). CR 608.2d: an "up to N" draw is a resolution-time COUNT choice + // the probe would ANSWER rather than surface, because the count is read, + // not prompted, inside `draw::resolve`. + Effect::Draw { count, target: _ } => { + if quantity_offers_up_to_choice(count) { + ResolutionChoiceFreedom::MayPrompt + } else { + resolution_probe_verdict(state, ability, budget) + } + } + // ---- everything else: fail-closed MayPrompt. HEAD's named list + // VERBATIM, minus the three variants promoted above + // (`DealDamage`, `PutCounter`, `Token`), and with NO wildcard, so + // the compiler still enforces exhaustiveness and a new `Effect` + // variant fails to compile until it is classified. ---- + Effect::StartYourEngines { .. } + | Effect::ChangeSpeed { .. } + | Effect::ApplyPostReplacementDamage { .. } + | Effect::EachDealsDamageEqualToPower { .. } + | Effect::OpponentGuess { .. } + | Effect::SwapChosenLabels { .. } + | Effect::Pump { .. } + | Effect::PairWith { .. } + | Effect::Destroy { .. } + | Effect::Regenerate { .. } + | Effect::RemoveAllDamage { .. } + | Effect::Counter { .. } + | Effect::CounterAll { .. } + | Effect::SetTapState { .. } + | Effect::RemoveCounter { .. } + | Effect::ChooseCounterKind { .. } + | Effect::PutChosenCounter { .. } + | Effect::Sacrifice { .. } + | Effect::DiscardCard { .. } + | Effect::Mill { .. } + | Effect::Scry { .. } + | Effect::PumpAll { .. } + | Effect::DamageAll { .. } + | Effect::DamageEachPlayer { .. } + | Effect::EachPlayerCopyChosen { .. } + | Effect::DestroyAll { .. } + | Effect::ChangeZone { .. } + | Effect::ChangeZoneAll { .. } + | Effect::Dig { .. } + | Effect::GainControl { .. } + | Effect::GainControlAll { .. } + | Effect::ControlNextTurn { .. } + | Effect::Attach { .. } + | Effect::UnattachAll { .. } + | Effect::Surveil { .. } + | Effect::Fight { .. } + | Effect::Bounce { .. } + | Effect::BounceAll { .. } + | Effect::Explore + | Effect::ExploreAll { .. } + | Effect::Investigate + | Effect::Tribute { .. } + | Effect::TimeTravel + | Effect::BecomeMonarch + | Effect::NoOp + | Effect::Proliferate + | Effect::ProliferateTarget { .. } + | Effect::Populate + | Effect::Clash + // CR 701.4a + CR 608.2d: behold may prompt (`WaitingFor::BeholdChoice` + // when 2+ candidates) — fail-closed MayPrompt. + | Effect::Behold { .. } + | Effect::EndTheTurn + | Effect::EndCombatPhase + | Effect::Vote { .. } + | Effect::SeparateIntoPiles { .. } + | Effect::SwitchPT { .. } + | Effect::CopySpell { .. } + | Effect::EpicCopy { .. } + | Effect::CastCopyOfCard { .. } + | Effect::CopyTokenOf { .. } + | Effect::CreateTokenCopyFromPool { .. } + | Effect::Myriad + | Effect::Encore + | Effect::CombineHost { .. } + | Effect::ChooseAugmentAndCombineWithHost { .. } + | Effect::Meld { .. } + | Effect::ExileHaunting { .. } + | Effect::HideawayConceal { .. } + | Effect::CopyTokenBlockingAttacker { .. } + | Effect::BecomeCopy { .. } + // CR 707.2c: raises `WaitingFor::CopyTargetChoice` — prompts, fail-closed + // MayPrompt (never resolved through the normal chain, but classified here + // to keep the match exhaustive). + | Effect::ChoosePermanent { .. } + | Effect::GainActivatedAbilitiesOfTarget { .. } + | Effect::ChooseCard { .. } + | Effect::PutCounterAll { .. } + | Effect::MultiplyCounter { .. } + | Effect::DoublePT { .. } + | Effect::DoublePTAll { .. } + | Effect::MoveCounters { .. } + | Effect::Animate { .. } + | Effect::ReturnAsAura { .. } + | Effect::RegisterBending { .. } + | Effect::GenericEffect { .. } + | Effect::Cleanup { .. } + | Effect::Mana { .. } + | Effect::Discard { .. } + | Effect::Shuffle { .. } + | Effect::Transform { .. } + // CR 710.4: `flip_permanent` offers no resolution-time choice (it is a + // status change or a silent no-op), exactly like `Transform`. + | Effect::FlipPermanent { .. } + | Effect::SearchLibrary { .. } + | Effect::SearchOutsideGame { .. } + | Effect::RevealHand { .. } + | Effect::RevealFromHand { .. } + | Effect::Reveal { .. } + | Effect::RevealTop { .. } + | Effect::ExileTop { .. } + | Effect::ExileFaceDownPile { .. } + | Effect::TargetOnly { .. } + | Effect::Choose { .. } + | Effect::ChooseDamageSource { .. } + | Effect::Suspect { .. } + | Effect::Unsuspect { .. } + | Effect::Connive { .. } + | Effect::PhaseOut { .. } + | Effect::PhaseIn { .. } + | Effect::ForceBlock { .. } + | Effect::ForceAttack { .. } + | Effect::SolveCase + | Effect::BecomePrepared { .. } + | Effect::BecomeUnprepared { .. } + | Effect::BecomeSaddled { .. } + | Effect::BecomeBlocked { .. } + | Effect::SetClassLevel { .. } + | Effect::CreateDelayedTrigger { .. } + | Effect::AddTargetReplacement { .. } + | Effect::AddRestriction { .. } + | Effect::ReduceNextSpellCost { .. } + | Effect::GrantNextSpellAbility { .. } + | Effect::AddPendingETBCounters { .. } + | Effect::AddPendingEntersModifications { .. } + | Effect::CreateEmblem { .. } + | Effect::PayCost { .. } + | Effect::CastFromZone { .. } + | Effect::FreeCastFromZones { .. } + | Effect::ExileResolvingSpellInsteadOfGraveyard { .. } + | Effect::PreventDamage { .. } + | Effect::CreateDamageReplacement { .. } + | Effect::CreateDrawReplacement { .. } + | Effect::LoseTheGame { .. } + | Effect::WinTheGame { .. } + | Effect::RollDie { .. } + | Effect::FlipCoin { .. } + | Effect::FlipCoins { .. } + | Effect::FlipCoinUntilLose { .. } + | Effect::RingTemptsYou + | Effect::VentureIntoDungeon + | Effect::VentureInto { .. } + | Effect::TakeTheInitiative + | Effect::ArrangePlanarDeckTop { .. } + | Effect::Planeswalk + | Effect::OpenAttractions { .. } + | Effect::RollToVisitAttractions + | Effect::AssembleContraptions { .. } + | Effect::AssembleContraptionsFromRollDifference + | Effect::CrankContraptions { .. } + | Effect::ReassembleContraption { .. } + | Effect::AssembleContraptionOnSprocket { .. } + | Effect::ReassembleContraptionOnSprocket { .. } + | Effect::PutSticker { .. } + | Effect::ApplySticker { .. } + | Effect::ProcessRadCounters + | Effect::GrantCastingPermission { .. } + | Effect::ChooseFromZone { .. } + | Effect::RememberCard { .. } + | Effect::ForEachCategory { .. } + | Effect::ChooseObjectsIntoTrackedSet { .. } + | Effect::ChooseAndSacrificeRest { .. } + | Effect::Exploit { .. } + | Effect::GainEnergy { .. } + | Effect::GivePlayerCounter { .. } + | Effect::LoseAllPlayerCounters { .. } + | Effect::ExileFromTopUntil { .. } + | Effect::RevealUntil { .. } + | Effect::Discover { .. } + | Effect::Heist { .. } + | Effect::HeistExile + | Effect::Cascade + | Effect::Ripple { .. } + | Effect::MiracleCast { .. } + | Effect::MadnessCast { .. } + | Effect::PutAtLibraryPosition { .. } + | Effect::ChooseDrawnThisTurnPayOrTopdeck { .. } + | Effect::PutOnTopOrBottom { .. } + | Effect::GiftDelivery { .. } + | Effect::Goad { .. } + | Effect::GoadAll { .. } + | Effect::Detain { .. } + | Effect::SetRoomDoorLock { .. } + | Effect::ExchangeControl { .. } + | Effect::ChangeTargets { .. } + | Effect::Manifest { .. } + | Effect::ManifestDread + | Effect::Cloak { .. } + | Effect::TurnFaceUp { .. } + | Effect::TurnFaceDown { .. } + | Effect::ExtraTurn { .. } + | Effect::GrantExtraLoyaltyActivations { .. } + | Effect::SkipNextTurn { .. } + | Effect::SkipNextStep { .. } + | Effect::AdditionalPhase { .. } + | Effect::Double { .. } + | Effect::EachSourceDealsDamage { .. } + | Effect::RuntimeHandled { .. } + | Effect::Incubate { .. } + | Effect::Amass { .. } + | Effect::Monstrosity { .. } + | Effect::Specialize + | Effect::Renown { .. } + | Effect::Bolster { .. } + | Effect::Adapt { .. } + | Effect::Learn + | Effect::Forage + | Effect::Harness + | Effect::CollectEvidence { .. } + | Effect::Endure { .. } + | Effect::BlightEffect { .. } + | Effect::Seek { .. } + | Effect::SetLifeTotal { .. } + | Effect::ExchangeLifeWithStat { .. } + | Effect::ExchangeLifeTotals { .. } + | Effect::SetDayNight { .. } + | Effect::GiveControl { .. } + | Effect::RemoveFromCombat { .. } + | Effect::Conjure { .. } + | Effect::ApplyPerpetual { .. } + | Effect::Intensify { .. } + | Effect::DraftFromSpellbook { .. } + | Effect::ChooseCounterAdjustment { .. } + | Effect::CreatePlaneswalkReplacement { .. } + | Effect::ChaosEnsues + | Effect::RedistributeLifeTotals + | Effect::ReverseTurnOrder + | Effect::ChooseOneOf { .. } + | Effect::Unimplemented { .. } => ResolutionChoiceFreedom::MayPrompt, + } +} + +/// CR 608.2d + CR 732.2a: does resolving this ability (its whole chain) ever +/// enter a resolution-time player choice? The `ResolvedAbility` destructure is +/// EXHAUSTIVE with no `..` — `ability_scan::resolved_ability_axes`'s +/// classifications are deliberately NOT reused (this is a different question: +/// e.g. `optional` is read-free yet choice-bearing). A FUTURE field fails to +/// compile here until classified for the choice question. +pub(crate) fn ability_resolution_choice_freedom( + state: &GameState, + a: &ResolvedAbility, + budget: &mut ProbeBudget, +) -> ResolutionChoiceFreedom { + let ResolvedAbility { + // ---- choice-bearing: folded into the verdict below ---- + effect, + sub_ability, + else_ability, + optional, + optional_for, + optional_targeting, + unless_pay, + target_chooser, + target_choice_timing, + modal, + mode_abilities, + repeat_until, + // ---- choice-free: bound `_` with a one-line justification ---- + condition: _, // resolution branch selector, pure eval (both branches recursed) + duration: _, // continuous-effect lifetime, no prompt + player_scope: _, // iteration fan-out, pure player-filter eval + starting_with: _, // APNAP start override, no prompt + repeat_for: _, // "for each" count, pure quantity eval (game/quantity.rs) + announced_x: _, // CR 601.2b announce-time count, pure quantity eval, no prompt + multi_target: _, // announce-time variable-count bounds (Resolution case caught by timing) + target_constraints: _, // announce-time cross-target legality, no resolution prompt + distribution: _, // CR 601.2d concrete pre-assigned portions (announce-time) + targets: _, // concrete announced target refs (already resolved) + source_id: _, // object id + source_incarnation: _, // self-transform epoch latch, no resolution-time choice + trigger_source: _, // exact triggered-source authority, no choice + trigger_definition_ref: _, // exact trigger occurrence, no choice + force_block_attacker: _, // exact force-block referent, no choice + controller: _, // player id + original_controller: _, // player id + scoped_player: _, // player id (iteration binding) + kind: _, // AbilityKind tag (no payload) + context: _, // SpellContext: cast-time fact snapshot, not a live choice + description: _, // display string + selected_mode_labels: _, // display strings, no resolution-time choice + min_x_value: _, // u32 + cant_be_copied: _, // bool + copy_count_status: _, // status tag + forward_result: _, // bool + chosen_x: _, // concrete cast-time X (chosen at announcement, not resolution) + cost_paid_object: _, // concrete captured-object snapshot + cost_paid_object_ids: _, // concrete captured-object ids (issue #4948) + effect_context_object: _, // concrete captured-object snapshot + amassed_army_object: _, // concrete captured-object snapshot + ability_index: _, // usize provenance + may_trigger_origin: _, // provenance tag + target_selection_mode: _, // Chosen/Random tag (announce-time) + chosen_players: _, // concrete chosen player ids (already selected) + replacement_applied: _, // replacement provenance set, no prompt + sub_link: _, // SubAbilityLink kind tag + sibling_condition: _, // SiblingCondition replication marker, no resolution-time choice + parent_target_missing_reason: _, // seam flag + } = a; + + // CR 603.5 + CR 608.2d: an optional effect / optional targeting / + // opponent-may effect prompts the controller (or opponent) before execution. + if *optional || *optional_targeting || optional_for.is_some() { + return ResolutionChoiceFreedom::MayPrompt; + } + // CR 118.12: "unless a player pays {cost}" is a resolution-time pay prompt. + if unless_pay.is_some() { + return ResolutionChoiceFreedom::MayPrompt; + } + // CR 601.2c + CR 603.3d: a resolution-time target chooser announces targets. + if target_chooser.is_some() { + return ResolutionChoiceFreedom::MayPrompt; + } + // CR 608.2d: resolution-timed target selection is a resolution-time choice + // even though `targets` is empty on the stack. + if matches!(target_choice_timing, TargetChoiceTiming::Resolution) { + return ResolutionChoiceFreedom::MayPrompt; + } + // CR 700.2b + CR 603.3c: a modal header / reflexive per-mode abilities open a + // mode choice at resolution (conservative — rejected even when the mode is + // baked). + if modal.is_some() || !mode_abilities.is_empty() { + return ResolutionChoiceFreedom::MayPrompt; + } + // CR 608.2c + CR 107.1c: only the controller-prompted repeat variant is a + // player choice; while / until-stop predicates are pure re-evaluation. + if matches!(repeat_until, Some(RepeatContinuation::ControllerChoice)) { + return ResolutionChoiceFreedom::MayPrompt; + } + + // CR 608.2c: the chain resolves the effect and, on the taken branch, a + // sub_ability / else_ability effect — join both (fail-safe: reject if either + // can prompt). + let mut acc = effect_resolution_choice_freedom(state, a, effect, budget); + if let Some(sub) = sub_ability { + acc = acc.join(ability_resolution_choice_freedom(state, sub, budget)); + } + if let Some(else_branch) = else_ability { + acc = acc.join(ability_resolution_choice_freedom( + state, + else_branch, + budget, + )); + } + acc +} + +/// The RECORDER-FREE half of the completeness witness (R10′). +/// +/// Every axis below is written by the engine whether or not any recorder +/// exists, which is the whole point: a witness built from the recorder would +/// share its deepest dependency with the thing it checks, and the check would be +/// an identity. Two of them are the delegating legs' own turn ledgers — +/// `Damage`'s player branch delegates its life write to a companion `LifeLoss` +/// (CR 120.3a) and `Draw` delegates every card to the zone pipeline (CR 121.1), +/// so a board-resource-only axis set is BLIND on both. +#[cfg(test)] +#[derive(Debug, Default, PartialEq, Eq, Clone)] +pub(crate) struct BoardAxes { + life: std::collections::BTreeMap, + poison: std::collections::BTreeMap, + counters: i64, + battlefield: i64, + cards_drawn: std::collections::BTreeMap, + damage_records: i64, +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::game::zones::create_object; + use crate::types::ability::{ + AbilityCost, AbilityDefinition, AbilityKind, EffectScope, ModalChoice, PtValue, + QuantityExpr, TapStateChange, TargetFilter, TargetRef, UnlessPayModifier, + }; + use crate::types::counter::CounterType; + use crate::types::identifiers::{CardId, ObjectId}; + use crate::types::player::PlayerId; + use crate::types::proposed_event::CounterPlacement; + use crate::types::zones::Zone; + use std::collections::BTreeMap; + + use crate::analysis::resource::{ProbeBudget, PROBE_BUDGET}; + + fn budget() -> ProbeBudget { + ProbeBudget::for_test(PROBE_BUDGET) + } + + /// Snapshot every axis the witness reads. + fn board_axes(state: &GameState) -> BoardAxes { + BoardAxes { + life: state + .players + .iter() + .map(|p| (p.id, i64::from(p.life))) + .collect(), + poison: state + .players + .iter() + .map(|p| (p.id, i64::from(p.poison_counters))) + .collect(), + counters: state + .objects + .values() + .map(|o| o.counters.values().map(|n| i64::from(*n)).sum::()) + .sum(), + battlefield: state.battlefield.len() as i64, + cards_drawn: state + .players + .iter() + .map(|p| (p.id, i64::from(p.cards_drawn_this_turn))) + .collect(), + damage_records: state.damage_dealt_this_turn.len() as i64, + } + } + + fn axis_delta(before: &BoardAxes, after: &BoardAxes) -> BoardAxes { + let map_delta = |b: &BTreeMap, a: &BTreeMap| { + let mut out = BTreeMap::new(); + for (id, av) in a { + let d = av - b.get(id).copied().unwrap_or(0); + if d != 0 { + out.insert(*id, d); + } + } + out + }; + BoardAxes { + life: map_delta(&before.life, &after.life), + poison: map_delta(&before.poison, &after.poison), + counters: after.counters - before.counters, + battlefield: after.battlefield - before.battlefield, + cards_drawn: map_delta(&before.cards_drawn, &after.cards_drawn), + damage_records: after.damage_records - before.damage_records, + } + } + + /// The RECORDER half's prediction. `None` ⇒ the derived set contains a + /// variant whose board effect this witness cannot account for, which + /// `probe_resolution` turns into `Prompted`. + /// + /// The accounted/unaccounted partition is NOT re-derived here: it is + /// `replacement::event_is_accounted`, the same function `probe_resolution` + /// reads, so the resolver and the witness cannot drift. + fn predicted_axes(events: &[ProposedEvent]) -> Option { + let mut axes = BoardAxes::default(); + for ev in events { + if !replacement::event_is_accounted(ev) { + return None; + } + match ev { + ProposedEvent::LifeGain { + player_id, amount, .. + } => *axes.life.entry(*player_id).or_default() += i64::from(*amount), + ProposedEvent::LifeLoss { + player_id, amount, .. + } => *axes.life.entry(*player_id).or_default() -= i64::from(*amount), + ProposedEvent::ZoneChange { from, to, .. } => { + axes.battlefield += + i64::from(*to == Zone::Battlefield) - i64::from(*from == Zone::Battlefield); + } + ProposedEvent::AddCounter { + placement, count, .. + } => match placement { + CounterPlacement::Object { .. } => axes.counters += i64::from(*count), + CounterPlacement::Player { + player_id, + counter_kind, + .. + } => { + if matches!( + counter_kind, + crate::types::player::PlayerCounterKind::Poison + ) { + *axes.poison.entry(*player_id).or_default() += i64::from(*count); + } + } + CounterPlacement::Energy { .. } => {} + }, + ProposedEvent::CreateToken { count, .. } => axes.battlefield += i64::from(*count), + // CR 120.3a: the life write is the companion `LifeLoss`'s; this + // variant's own axis is the damage ledger. + ProposedEvent::Damage { .. } => axes.damage_records += 1, + // CR 121.1: the zone write is the companion `ZoneChange`'s; this + // variant's own axis is the draw ledger. + ProposedEvent::Draw { + player_id, count, .. + } => *axes.cards_drawn.entry(*player_id).or_default() += i64::from(*count), + other => unreachable!( + "accounted variant with no axis arm — the partition and this witness \ + have drifted: {other:?}" + ), + } + } + // Drop zeroed map entries so the prediction is delta-shaped like the + // observation. + axes.life.retain(|_, v| *v != 0); + axes.poison.retain(|_, v| *v != 0); + axes.cards_drawn.retain(|_, v| *v != 0); + Some(axes) + } + + /// A 2p board with a P0 source creature on the battlefield, one card in each + /// library, and a P1 creature to damage / counter. + fn probe_board() -> GameState { + let mut state = GameState::new_two_player(7); + create_object( + &mut state, + CardId(1), + PlayerId(0), + "Source".to_string(), + Zone::Battlefield, + ); + create_object( + &mut state, + CardId(2), + PlayerId(1), + "Victim".to_string(), + Zone::Battlefield, + ); + for owner in [PlayerId(0), PlayerId(1)] { + create_object( + &mut state, + CardId(3), + owner, + "Deck Card".to_string(), + Zone::Library, + ); + } + state + } + + fn source_id(state: &GameState) -> ObjectId { + *state.battlefield.front().expect("source on battlefield") + } + + fn victim_id(state: &GameState) -> ObjectId { + *state.battlefield.get(1).expect("victim on battlefield") + } + + fn ability(state: &GameState, effect: Effect, targets: Vec) -> ResolvedAbility { + ResolvedAbility::new(effect, targets, source_id(state), PlayerId(0)) + } + + fn fixed(n: i32) -> QuantityExpr { + QuantityExpr::Fixed { value: n } + } + + fn up_to(n: i32) -> QuantityExpr { + QuantityExpr::UpTo { + max: Box::new(fixed(n)), + } + } + + fn token_effect(count: QuantityExpr) -> Effect { + Effect::Token { + name: "Servo".to_string(), + power: PtValue::Fixed(1), + toughness: PtValue::Fixed(1), + types: vec!["Creature".to_string()], + colors: vec![], + keywords: vec![], + tapped: false, + count, + owner: TargetFilter::Controller, + attach_to: None, + enters_attacking: false, + supertypes: vec![], + static_abilities: vec![], + enter_with_counters: vec![], + } + } + + /// The six allow-listed classes, each with a board that exercises it and the + /// name the population conjunct reports. + fn six_allow_listed_arms(state: &GameState) -> Vec<(&'static str, ResolvedAbility)> { + vec![ + ( + "GainLife", + ability( + state, + Effect::GainLife { + amount: fixed(3), + player: TargetFilter::Controller, + }, + vec![], + ), + ), + ( + "LoseLife", + ability( + state, + Effect::LoseLife { + amount: fixed(2), + target: Some(TargetFilter::Controller), + }, + vec![], + ), + ), + ( + "DealDamage", + ability( + state, + Effect::DealDamage { + amount: fixed(1), + target: TargetFilter::Any, + damage_source: None, + excess: None, + }, + vec![TargetRef::Player(PlayerId(1))], + ), + ), + ( + "PutCounter", + ability( + state, + Effect::PutCounter { + target: TargetFilter::Any, + counter_type: CounterType::Plus1Plus1, + count: fixed(2), + }, + vec![TargetRef::Object(victim_id(state))], + ), + ), + ("Token", ability(state, token_effect(fixed(1)), vec![])), + ( + "Draw", + ability( + state, + Effect::Draw { + count: fixed(1), + target: TargetFilter::Controller, + }, + vec![], + ), + ), + ] + } + + /// R10′ — THE AXIS-COMPLETENESS WITNESS, over ALL SIX allow-listed arms. + /// + /// Two INDEPENDENT clone-and-resolves of the same ability on the same board: + /// ARM 1 derives the event set through the recorder; ARM 2 reads the axes + /// before/after and touches no recorder, no `ProposedEvent`, no + /// `replace_event`, no `pipeline_loop`. The two arms share + /// `resolve_ability_chain` + `GameState` — the SUBJECT under test — and + /// share NOTHING on the CHECKING side. That is the whole point: a check that + /// shares its deepest dependency with the thing checked is an identity. + /// + /// CONJUNCT 2 (the population gate) is asserted as a conjunct that FAILS the + /// test, not promised in prose: the set of arms observed must equal all six. + #[test] + fn derived_event_set_accounts_for_every_board_axis_on_all_six_allow_listed_arms() { + let state = probe_board(); + let mut observed_arms: Vec<&'static str> = Vec::new(); + + for (name, a) in six_allow_listed_arms(&state) { + // ARM 1 — the recorder. + let events = match probe_resolution(&state, &a, &mut budget()) { + ResolutionProbe::Events(events) => events, + ResolutionProbe::Prompted => { + panic!("{name}: the probe must reach the recorder arm on this board") + } + }; + assert!(!events.is_empty(), "{name}: derivation must be non-empty"); + + // ARM 2 — recorder-free. A separate clone, resolved directly. + let before = board_axes(&state); + let mut work = state.clone(); + let mut ev = Vec::new(); + let _ = effects::resolve_ability_chain(&mut work, &a, &mut ev, 0); + let observed = axis_delta(&before, &board_axes(&work)); + + let predicted = predicted_axes(&events) + .unwrap_or_else(|| panic!("{name}: derived set contains an Unaccounted variant")); + assert_eq!( + predicted, observed, + "{name}: the derived set must ACCOUNT FOR what the resolution did to the board \ + (events {events:?})" + ); + observed_arms.push(name); + } + + observed_arms.sort_unstable(); + let mut expected = [ + "DealDamage", + "Draw", + "GainLife", + "LoseLife", + "PutCounter", + "Token", + ]; + expected.sort_unstable(); + assert_eq!( + observed_arms, expected, + "the witness must range over ALL SIX allow-listed arms — an unexercised arm is an \ + unmeasured population, not a passing row" + ); + } + + /// R10′'s own discriminating control: a witness blind on a delegating leg + /// scores CLEAN on a recorder that lost that leg's variant. Cripple the + /// recorded set by dropping `Damage`, then `Draw`, and assert the SIX-axis + /// witness catches both — while the four board-resource axes alone do not. + #[test] + fn the_two_ledger_axes_are_load_bearing_not_decorative() { + let state = probe_board(); + let arms = six_allow_listed_arms(&state); + + for (name, dropped) in [("DealDamage", "Damage"), ("Draw", "Draw")] { + let (_, a) = arms + .iter() + .find(|(n, _)| *n == name) + .expect("arm present in the six"); + let ResolutionProbe::Events(events) = probe_resolution(&state, a, &mut budget()) else { + panic!("{name}: reach-guard — the probe must produce events here"); + }; + let before = board_axes(&state); + let mut work = state.clone(); + let mut ev = Vec::new(); + let _ = effects::resolve_ability_chain(&mut work, a, &mut ev, 0); + let observed = axis_delta(&before, &board_axes(&work)); + + // HEALTHY: the full six-axis witness agrees. + assert_eq!( + predicted_axes(&events).expect("accounted"), + observed, + "{name}: healthy control must be CLEAN" + ); + + // CRIPPLED: drop the delegating variant from the RECORDED set only. + let crippled: Vec = events + .iter() + .filter(|e| { + !matches!( + (dropped, e), + ("Damage", ProposedEvent::Damage { .. }) + | ("Draw", ProposedEvent::Draw { .. }) + ) + }) + .cloned() + .collect(); + assert!( + crippled.len() < events.len(), + "{name}: reach-guard — the cripple must actually remove a {dropped} event \ + (events {events:?})" + ); + let crippled_prediction = predicted_axes(&crippled).expect("accounted"); + assert_ne!( + crippled_prediction, observed, + "{name}: the six-axis witness must MISMATCH once {dropped} is dropped" + ); + + // And the exact defect the two ledger axes close: with them deleted + // (round 5's board-resource-only axis set) the same cripple scores + // CLEAN — the blindness, reproduced in the same test. + let blind = + |x: &BoardAxes| (x.life.clone(), x.poison.clone(), x.counters, x.battlefield); + assert_eq!( + blind(&crippled_prediction), + blind(&observed), + "{name}: a board-resource-only axis set is BLIND on this delegating leg — this \ + is why `cards_drawn` and `damage_records` are axes" + ); + } + } + + /// R11 — AN EMPTY DERIVATION IS FAIL-CLOSED. + /// + /// Measured: an entry whose targets are not yet announced derives ZERO + /// events while the resolver still returns `Ok`, so the `Result` does NOT + /// discriminate "proposes nothing" from "could not run". Without the + /// `is_empty ⇒ Prompted` arm the caller's `any()` discharges vacuously and + /// an entry that has made no choices yet certifies as choice-free. + #[test] + fn an_unannounced_target_derives_nothing_and_is_prompted() { + let state = probe_board(); + let unannounced = ability( + &state, + Effect::DealDamage { + amount: fixed(1), + target: TargetFilter::Any, + damage_source: None, + excess: None, + }, + vec![], + ); + assert_eq!( + probe_resolution(&state, &unannounced, &mut budget()), + ResolutionProbe::Prompted, + "an entry with no announced target proposes nothing, and nothing is never 'safe'" + ); + // PAIRED POSITIVE, differing in exactly the announced target: the same + // ability one announcement later derives {Damage, LifeLoss}. Without it + // the negative above could pass on a board where nothing resolves at all. + let announced = ability( + &state, + Effect::DealDamage { + amount: fixed(1), + target: TargetFilter::Any, + damage_source: None, + excess: None, + }, + vec![TargetRef::Player(PlayerId(1))], + ); + let ResolutionProbe::Events(events) = probe_resolution(&state, &announced, &mut budget()) + else { + panic!("reach-guard: the announced twin must derive events"); + }; + assert!( + events + .iter() + .any(|e| matches!(e, ProposedEvent::Damage { .. })), + "CR 120.3a: the announced twin derives the damage event ({events:?})" + ); + assert!( + events + .iter() + .any(|e| matches!(e, ProposedEvent::LifeLoss { .. })), + "CR 120.3a: damage to a player delegates a companion LifeLoss ({events:?})" + ); + } + + /// R12 — INTRINSIC-PROMPT DETECTION, a matched pair on one board. + /// + /// This is the row that turns the allow-list's old *"its only prompt is + /// `NeedsChoice`"* doc claim into a measurement: the probe OBSERVES the real + /// resolver opening a real prompt instead of trusting a comment that was + /// true when it was written. + #[test] + fn an_intrinsically_prompting_resolver_is_prompted_and_the_six_arms_are_not() { + let state = probe_board(); + let scry = ability( + &state, + Effect::Scry { + count: fixed(1), + target: TargetFilter::Controller, + }, + vec![], + ); + assert_eq!( + probe_resolution(&state, &scry, &mut budget()), + ResolutionProbe::Prompted, + "CR 732.2a: a resolver that parks on its own is a choice the certificate cannot \ + describe" + ); + // The same instrument, the same board, the same axis: none of the six + // allow-listed classes parks. Without this half the row would pass by + // refusing everything. + for (name, a) in six_allow_listed_arms(&state) { + assert!( + matches!( + probe_resolution(&state, &a, &mut budget()), + ResolutionProbe::Events(_) + ), + "{name} must NOT be Prompted on the same board that makes Scry Prompted" + ); + } + } + + /// R19a — `Unaccounted ⇒ Prompted` FIRES IN THE RESOLVER, not only in the + /// witness. A gate that ships only inside a test is not a gate. + /// + /// KEYED on a board that ACTUALLY DERIVES an `Unaccounted` variant: a draw + /// chained with a tap. `ProposedEvent::Tap` writes none of the six axes, so + /// the certificate cannot account for what that resolution did to the board + /// even though every other event in the set is accounted. + /// + /// TWO ARM-ATTRIBUTION CONJUNCTS, because `probe_resolution`'s `Prompted` + /// arms are ordered budget → `waiting_for` discriminant → `is_empty` → + /// `event_is_accounted`: without them an upstream arm could dominate, the + /// row would pass for the wrong reason, and deleting the accounting arm + /// could not flip it. + #[test] + fn an_unaccounted_derived_event_is_prompted_in_the_resolver() { + let state = probe_board(); + let victim = victim_id(&state); + let mut chained = ability( + &state, + Effect::Draw { + count: fixed(1), + target: TargetFilter::Controller, + }, + vec![], + ); + chained.sub_ability = Some(Box::new(ResolvedAbility::new( + Effect::SetTapState { + target: TargetFilter::Any, + scope: EffectScope::Single, + state: TapStateChange::Tap, + }, + vec![TargetRef::Object(victim)], + source_id(&state), + PlayerId(0), + ))); + + // ATTRIBUTION (i)+(ii): re-derive the same run's inputs to the verdict so + // the outcome is pinned to the accounting arm and to no other. + let events = replacement::record_proposed_events(|| { + let _probe = SimulationProbeGuard::enter(); + let mut work = state.clone(); + let mut ev = Vec::new(); + let _ = effects::resolve_ability_chain(&mut work, &chained, &mut ev, 0); + assert_eq!( + std::mem::discriminant(&work.waiting_for), + std::mem::discriminant(&state.waiting_for), + "attribution (i): the waiting_for arm must NOT be what fires here" + ); + }); + assert!( + !events.is_empty(), + "attribution (ii): the is_empty arm must NOT be what fires here" + ); + assert!( + events + .iter() + .any(|e| matches!(e, ProposedEvent::Tap { .. })), + "reach-guard: the derived set must actually carry the Unaccounted variant ({events:?})" + ); + assert!( + events.iter().any(replacement::event_is_accounted), + "reach-guard: the set must ALSO carry accounted events, so the refusal is \ + attributable to the one unaccounted member and not to an all-unknown set" + ); + + assert_eq!( + probe_resolution(&state, &chained, &mut budget()), + ResolutionProbe::Prompted, + "CR 732.2a: an event whose board effect the certificate cannot account for is a \ + choice surface the certificate cannot describe" + ); + + // PAIRED POSITIVE, differing in exactly the chained tap: the same draw + // without it is fully accounted and is NOT Prompted, so the row cannot + // pass by refusing everything. + let mut plain = chained.clone(); + plain.sub_ability = None; + assert!( + matches!( + probe_resolution(&state, &plain, &mut budget()), + ResolutionProbe::Events(_) + ), + "the same draw without the chained tap is accounted" + ); + + // The zero-payload guards are the other members of this class, pinned on + // the partition itself: a zero-valued event writes no axis while still + // being drawn as a candidate under a `> 0` gate. + assert!(!replacement::event_is_accounted( + &ProposedEvent::TokenEntry { + entry_ref: victim, + enter_tapped: Default::default(), + enter_with_counters: Vec::new(), + applied: Default::default(), + } + )); + for (accounted, count) in [(false, 0u32), (true, 1u32)] { + assert_eq!( + replacement::event_is_accounted(&ProposedEvent::AddCounter { + placement: CounterPlacement::Object { + actor: PlayerId(0), + object_id: victim, + counter_type: CounterType::Plus1Plus1, + }, + count, + applied: Default::default(), + }), + accounted, + "CR 702.150a: the Compleated virtual candidate is gated on `count > 0`, so a \ + zero-count placement must be honest-red rather than silently candidate-free" + ); + assert_eq!( + replacement::event_is_accounted(&ProposedEvent::Damage { + source_id: source_id(&state), + target: TargetRef::Player(PlayerId(1)), + amount: count, + is_combat: false, + applied: Default::default(), + }), + accounted, + "the shield-damage virtual candidate is gated on `amount > 0`" + ); + assert_eq!( + replacement::event_is_accounted(&ProposedEvent::Draw { + player_id: PlayerId(0), + count, + applied: Default::default(), + }), + accounted + ); + } + } + + /// CR 107.1c + CR 608.2d: THE `UpTo` GUARD IS ON EVERY QUANTITY-CARRYING + /// ARM, not only `Draw`. + /// + /// `game/quantity.rs` resolves `UpTo { max }` as the maximum instead of + /// prompting, and none of the six allow-listed classes calls + /// `QuantityExpr::peel_up_to`. So an unguarded arm reports choice-free on an + /// ability whose resolution opens a count choice — a fail-OPEN, not a + /// coverage gap. Both directions are asserted per arm so neither can go + /// vacuous. + #[test] + fn an_up_to_count_is_may_prompt_on_every_quantity_carrying_arm() { + let state = probe_board(); + let victim = victim_id(&state); + let cases: Vec<(&str, Effect, Effect, Vec)> = vec![ + ( + "GainLife", + Effect::GainLife { + amount: up_to(3), + player: TargetFilter::Controller, + }, + Effect::GainLife { + amount: fixed(3), + player: TargetFilter::Controller, + }, + vec![], + ), + ( + "LoseLife", + Effect::LoseLife { + amount: up_to(2), + target: Some(TargetFilter::Controller), + }, + Effect::LoseLife { + amount: fixed(2), + target: Some(TargetFilter::Controller), + }, + vec![], + ), + ( + "DealDamage", + Effect::DealDamage { + amount: up_to(1), + target: TargetFilter::Any, + damage_source: None, + excess: None, + }, + Effect::DealDamage { + amount: fixed(1), + target: TargetFilter::Any, + damage_source: None, + excess: None, + }, + vec![TargetRef::Player(PlayerId(1))], + ), + ( + "PutCounter", + Effect::PutCounter { + target: TargetFilter::Any, + counter_type: CounterType::Plus1Plus1, + count: up_to(2), + }, + Effect::PutCounter { + target: TargetFilter::Any, + counter_type: CounterType::Plus1Plus1, + count: fixed(2), + }, + vec![TargetRef::Object(victim)], + ), + ( + "Token", + token_effect(up_to(1)), + token_effect(fixed(1)), + vec![], + ), + ( + "Draw", + Effect::Draw { + count: up_to(1), + target: TargetFilter::Controller, + }, + Effect::Draw { + count: fixed(1), + target: TargetFilter::Controller, + }, + vec![], + ), + ]; + for (name, up_to_effect, fixed_effect, targets) in cases { + let guarded = ability(&state, up_to_effect, targets.clone()); + assert_eq!( + ability_resolution_choice_freedom(&state, &guarded, &mut budget()), + ResolutionChoiceFreedom::MayPrompt, + "{name}: an `up to N` count is a CR 608.2d resolution-time choice the probe \ + would ANSWER rather than surface" + ); + // MATCHED POSITIVE: the same arm at a fixed count is probe-backed, + // so the `MayPrompt` above is attributable to the guard and not to + // the arm being out of scope. + let unguarded = ability(&state, fixed_effect, targets); + assert!( + matches!( + ability_resolution_choice_freedom(&state, &unguarded, &mut budget()), + ResolutionChoiceFreedom::FreeUnlessReplacements(_) + ), + "{name}: the same arm at a fixed count must be probe-backed" + ); + } + } + + /// The reject side stays fail-closed, and the ability-level wrapper flips. + /// + /// Successor to `ability_scan::resolution_choice_verdicts_are_exactly_pinned` + /// for the halves that survive the payload change; the per-arm obligation + /// pin it carried is superseded by the derived-event witness above, which + /// pins the EVENTS rather than a class name and cannot go stale. + #[test] + fn the_reject_side_and_the_ability_level_gates_are_pinned_in_both_directions() { + let state = probe_board(); + let rejects = [ + Effect::Proliferate, + Effect::Populate, + Effect::Clash, + Effect::Explore, + Effect::Scry { + count: fixed(1), + target: TargetFilter::Controller, + }, + Effect::Sacrifice { + target: TargetFilter::Any, + count: fixed(1), + min_count: 0, + }, + Effect::DiscardCard { + count: 1, + target: TargetFilter::Any, + }, + ]; + for e in rejects { + let a = ability(&state, e.clone(), vec![]); + assert_eq!( + ability_resolution_choice_freedom(&state, &a, &mut budget()), + ResolutionChoiceFreedom::MayPrompt, + "{e:?} must be MayPrompt" + ); + } + + // Base ⇒ probe-backed (the paired positive reach-guard); each single-field + // mutation ⇒ MayPrompt, proving the FLIP causes the rejection and not + // something upstream. + let base = ability( + &state, + Effect::GainLife { + amount: fixed(1), + player: TargetFilter::Controller, + }, + vec![], + ); + assert!( + matches!( + ability_resolution_choice_freedom(&state, &base, &mut budget()), + ResolutionChoiceFreedom::FreeUnlessReplacements(_) + ), + "reach-guard: the unmutated base is probe-backed" + ); + + let mut mutations: Vec<(&str, ResolvedAbility)> = Vec::new(); + let mut push = |label: &'static str, f: &dyn Fn(&mut ResolvedAbility)| { + let mut a = base.clone(); + f(&mut a); + mutations.push((label, a)); + }; + push("optional", &|a| a.optional = true); + push("optional_targeting", &|a| a.optional_targeting = true); + push("unless_pay", &|a| { + a.unless_pay = Some(UnlessPayModifier { + cost: AbilityCost::Tap, + payer: TargetFilter::Controller, + }) + }); + push("target_chooser", &|a| { + a.target_chooser = Some(TargetFilter::Controller) + }); + push("target_choice_timing", &|a| { + a.target_choice_timing = TargetChoiceTiming::Resolution + }); + push("mode_abilities", &|a| { + a.mode_abilities = vec![AbilityDefinition::new(AbilityKind::Spell, Effect::NoOp)] + }); + push("repeat_until", &|a| { + a.repeat_until = Some(RepeatContinuation::ControllerChoice) + }); + push("modal", &|a| a.modal = Some(ModalChoice::default())); + for (label, a) in mutations { + assert_eq!( + ability_resolution_choice_freedom(&state, &a, &mut budget()), + ResolutionChoiceFreedom::MayPrompt, + "{label} is a resolution-time choice the probe must not swallow" + ); + } + } + + /// STRUCTURAL INVARIANT: `game/ability_scan.rs` holds NO `GameState`. + /// + /// The module header defines it as a pure AST walk, and that contract is + /// exactly why the resolution-choice classifier moved out of it. Pinned at + /// the WIDEST form — a word-bounded `GameState` token anywhere in the file — + /// because the narrow `state: &GameState` spelling is evaded by `st:` or + /// `&mut`. Keyed by this file, which contains many. + #[test] + fn ability_scan_holds_no_game_state() { + let count_tokens = |path: &str| -> usize { + let src = std::fs::read_to_string(path).expect("source file readable"); + src.split(|c: char| !(c.is_alphanumeric() || c == '_')) + .filter(|tok| *tok == "GameState") + .count() + }; + let dir = env!("CARGO_MANIFEST_DIR"); + let scanner = format!("{dir}/src/game/ability_scan.rs"); + let here = format!("{dir}/src/game/resolution_prompt.rs"); + assert!( + count_tokens(&here) > 0, + "positive control: this file names GameState, so the instrument can return non-zero" + ); + assert_eq!( + count_tokens(&scanner), + 0, + "ability_scan.rs is a pure AST walk and must hold no board — probing a resolution \ + needs one, which is why that classifier lives here instead" + ); + } +} diff --git a/crates/engine/src/game/stack.rs b/crates/engine/src/game/stack.rs index 432ad39b99..bfccd05d89 100644 --- a/crates/engine/src/game/stack.rs +++ b/crates/engine/src/game/stack.rs @@ -810,6 +810,95 @@ fn pending_spell_resolution_snapshot( } } +/// CR 603.4 + CR 608.2k + CR 603.2c + CR 706.2: bind the resolution scope +/// [`resolve_top`] hands to `resolve_ability_chain`, for an entry ALREADY off +/// the stack. +/// +/// Returns `false` iff the CR 603.4 intervening-if re-check fails — i.e. the +/// live resolution proposes NOTHING. The caller owns the consequence: +/// [`resolve_top`] pushes `GameEvent::StackResolved` and returns; an analysis +/// caller returns its fail-closed verdict. The event is deliberately NOT pushed +/// here — this function takes no event sink, which is what keeps it callable +/// from the analysis crate. +/// +/// CR 608.2k is the rule for the `current_trigger_event` lift: *"If an ability's +/// effect refers to a specific untargeted object that has been previously +/// referred to by that ability's cost or trigger condition, it still affects +/// that object even if the object has changed characteristics."* The +/// `Triggering*` anaphors are exactly untargeted back-references to the object +/// the TRIGGER CONDITION matched (carried on the entry as `trigger_event`); the +/// lift is the mechanism that keeps that object reachable while the ability +/// resolves, and it CLONES the recorded event rather than re-evaluating the +/// condition, so the binding survives characteristic change by construction. +/// CR 608.2h is why a clone rather than a re-derivation is right: the answer is +/// determined only once, when the effect is applied. +/// +/// The in-order-written execution of those anaphor arms is CR 608.2c; the +/// batched-subject-count re-stamp is CR 603.2c; the die-roll re-stamp is +/// CR 706.2. +pub(crate) fn bind_resolution_scope( + state: &mut GameState, + entry: &StackEntry, + trigger_event_batch: Option>, +) -> bool { + // CR 603.4: Intervening-if condition rechecked at resolution time. + if let StackEntryKind::TriggeredAbility { + condition: Some(ref condition), + source_id: _, + ref trigger_event, + .. + } = &entry.kind + { + let trigger_source = entry + .ability() + .and_then(|ability| ability.trigger_source.as_ref()); + if !super::triggers::check_trigger_condition_with_source( + state, + condition, + entry.controller, + trigger_source, + trigger_event.as_ref(), + ) { + return false; + } + } + + // CR 608.2k: Set trigger event context for event-context target resolution. + // TriggeringSpellController, TriggeringSource, etc. read this during resolution. + if let StackEntryKind::TriggeredAbility { + trigger_event: Some(ref te), + .. + } = entry.kind + { + state.current_trigger_event = Some(te.clone()); + state.current_trigger_events = trigger_event_batch.unwrap_or_else(|| vec![te.clone()]); + } else if let Some(trigger_events) = trigger_event_batch { + state.current_trigger_event = trigger_events.first().cloned(); + state.current_trigger_events = trigger_events; + } + + // CR 603.2c: Lift the filtered subject count of a batched trigger into + // resolution scope so `QuantityRef::EventContextAmount` resolves "that + // many" against the count, not against zero. Set in lockstep with + // `current_trigger_event` and cleared at every reset site below. + if let StackEntryKind::TriggeredAbility { + subject_match_count, + die_result, + .. + } = entry.kind + { + state.current_trigger_match_count = subject_match_count; + // CR 706.2 + CR 706.4 + CR 603.12: re-stamp the carried die-roll result + // into resolution scope so a reflexive "When you do … the result" + // sub-ability resolving on its own stack entry (a later apply(), after + // the original roll's resolution scope cleared) reads the rolled value + // via the `QuantityRef::EventContextAmount` cascade. + state.die_result_this_resolution = die_result; + } + + true +} + /// CR 608.2: Resolve the top object on the stack. pub fn resolve_top(state: &mut GameState, events: &mut Vec) { // CR 603.3c + CR 603.3d: The top of the stack may be a trigger entry that @@ -873,62 +962,11 @@ pub fn resolve_top(state: &mut GameState, events: &mut Vec) { return; } - // CR 603.4: Intervening-if condition rechecked at resolution time. - if let StackEntryKind::TriggeredAbility { - condition: Some(ref condition), - source_id: _, - ref trigger_event, - .. - } = &entry.kind - { - let trigger_source = entry - .ability() - .and_then(|ability| ability.trigger_source.as_ref()); - if !super::triggers::check_trigger_condition_with_source( - state, - condition, - entry.controller, - trigger_source, - trigger_event.as_ref(), - ) { - events.push(GameEvent::StackResolved { - object_id: entry.id, - }); - return; - } - } - - // CR 603.7c: Set trigger event context for event-context target resolution. - // TriggeringSpellController, TriggeringSource, etc. read this during resolution. - if let StackEntryKind::TriggeredAbility { - trigger_event: Some(ref te), - .. - } = entry.kind - { - state.current_trigger_event = Some(te.clone()); - state.current_trigger_events = trigger_event_batch.unwrap_or_else(|| vec![te.clone()]); - } else if let Some(trigger_events) = trigger_event_batch { - state.current_trigger_event = trigger_events.first().cloned(); - state.current_trigger_events = trigger_events; - } - - // CR 603.2c: Lift the filtered subject count of a batched trigger into - // resolution scope so `QuantityRef::EventContextAmount` resolves "that - // many" against the count, not against zero. Set in lockstep with - // `current_trigger_event` and cleared at every reset site below. - if let StackEntryKind::TriggeredAbility { - subject_match_count, - die_result, - .. - } = entry.kind - { - state.current_trigger_match_count = subject_match_count; - // CR 706.2 + CR 706.4 + CR 603.12: re-stamp the carried die-roll result - // into resolution scope so a reflexive "When you do … the result" - // sub-ability resolving on its own stack entry (a later apply(), after - // the original roll's resolution scope cleared) reads the rolled value - // via the `QuantityRef::EventContextAmount` cascade. - state.die_result_this_resolution = die_result; + if !bind_resolution_scope(state, &entry, trigger_event_batch) { + events.push(GameEvent::StackResolved { + object_id: entry.id, + }); + return; } // Extract the resolved ability from the stack entry. `KeywordAction` is @@ -11085,6 +11123,231 @@ mod tests { assert_eq!(obj.defense, Some(5)); } + /// **§6 R26 — `resolve_top`'s BEHAVIOUR IS UNCHANGED ACROSS THE + /// `bind_resolution_scope` EXTRACTION.** + /// + /// U1 moves the CR 603.4 re-check and the CR 608.2k / CR 603.2c / CR 706.2 + /// resolution-scope binding out of the universal resolution chokepoint into + /// a shared function the analysis probe can also call. Three matched pairs, + /// each keyed to one thing a WIDER extraction boundary would have broken — + /// the boundary this plan struck, which would have pulled the pop, the + /// keyword-action branch and the `StackResolved` pushes across with it: + /// + /// * **(a) CR 113.3b keyword actions still resolve.** The `KeywordAction` + /// early return sits ABOVE the extracted region and must stay in + /// `resolve_top` (it needs `&mut Vec`, which the shared + /// function deliberately does not take). Equip attaches, and + /// `StackResolved` is emitted exactly once. + /// * **(b) CR 603.4 false ⇒ removed from the stack, does nothing, + /// `StackResolved` STILL emitted.** The event is pushed by the CALLER — + /// the extracted function returns a bare `bool` and has no event sink, so + /// this is the seam the struck `Option` signature had no + /// channel for. Matched against the condition-TRUE twin, which resolves. + /// * **(c) CR 107.3m + CR 707.10 `paid_facts` survives.** The pop and its + /// `paid_snapshot` binding stayed in `resolve_top`: a permanent spell with + /// printed loyalty `X` enters with the snapshot's `x_value` in loyalty + /// counters. Matched against the same spell with NO snapshot, which enters + /// with none. + /// + /// REACH-GUARD on all three: the stack depth decreased by exactly 1, so an + /// entry that never resolved cannot satisfy a "did nothing" arm vacuously. + /// + /// REVERT-PROBES (the plan's, each a single edit): (a) move the + /// `KeywordAction` branch into `bind_resolution_scope` and return `false` + /// for it ⇒ the equipment never attaches; (b) delete the + /// `events.push(StackResolved)` from `resolve_top`'s `false` arm ⇒ the event + /// assertion flips; (c) move the pop into the shared function so + /// `paid_snapshot` is dropped ⇒ the spell enters at `cost_x_paid`/0 loyalty. + #[test] + fn resolve_top_behaviour_is_unchanged_across_the_bind_resolution_scope_extraction() { + let resolved_once = |events: &[GameEvent], id: ObjectId| { + events + .iter() + .filter(|e| matches!(e, GameEvent::StackResolved { object_id } if *object_id == id)) + .count() + }; + + // ── (a) CR 113.3b: the keyword-action early return ── + { + let mut state = setup(); + let equipment = create_object( + &mut state, + CardId(701), + PlayerId(0), + "Test Equipment".to_string(), + Zone::Battlefield, + ); + let creature = create_object( + &mut state, + CardId(702), + PlayerId(0), + "Test Bearer".to_string(), + Zone::Battlefield, + ); + state + .objects + .get_mut(&creature) + .unwrap() + .card_types + .core_types + .push(CoreType::Creature); + let entry_id = ObjectId(7010); + state.stack.push_back(StackEntry { + id: entry_id, + source_id: equipment, + controller: PlayerId(0), + kind: StackEntryKind::KeywordAction { + action: KeywordAction::Equip { + equipment_id: equipment, + target_creature_id: creature, + }, + }, + }); + let depth = state.stack.len(); + + let mut events = Vec::new(); + resolve_top(&mut state, &mut events); + + assert_eq!(state.stack.len(), depth - 1, "reach-guard (a): it resolved"); + assert_eq!( + state.objects[&equipment].attached_to, + Some(crate::game::game_object::AttachTarget::Object(creature)), + "CR 702.6a: the equip keyword action must still attach — its branch \ + returns EARLY, above the extracted region" + ); + assert_eq!( + resolved_once(&events, entry_id), + 1, + "CR 405.5: exactly one StackResolved for the keyword action" + ); + } + + // ── (b) CR 603.4: a FALSE intervening-if still emits StackResolved ── + // `setup()` is a standard-format board (20 starting life), so the + // intervening-if `LifeTotalGE 5` is TRUE and `LifeTotalGE 99` FALSE. + for (label, minimum, expect_gain) in [("TRUE", 5, 3i32), ("FALSE", 99, 0)] { + let mut state = setup(); + let source = create_object( + &mut state, + CardId(703), + PlayerId(0), + "Conditional Trigger".to_string(), + Zone::Battlefield, + ); + let entry_id = ObjectId(7020); + state.stack.push_back(StackEntry { + id: entry_id, + source_id: source, + controller: PlayerId(0), + kind: StackEntryKind::TriggeredAbility { + source_id: source, + ability: Box::new(ResolvedAbility::new( + Effect::GainLife { + amount: QuantityExpr::Fixed { value: 3 }, + player: TargetFilter::Controller, + }, + vec![], + source, + PlayerId(0), + )), + condition: Some(TriggerCondition::LifeTotalGE { minimum }), + trigger_event: None, + description: None, + source_name: "Conditional Trigger".to_string(), + subject_match_count: None, + die_result: None, + }, + }); + let depth = state.stack.len(); + let life_before = state.players[0].life; + + let mut events = Vec::new(); + resolve_top(&mut state, &mut events); + + assert_eq!( + state.stack.len(), + depth - 1, + "reach-guard (b/{label}): the entry left the stack either way" + ); + assert_eq!( + state.players[0].life - life_before, + expect_gain, + "CR 603.4 ({label}): the effect runs only when the intervening-if holds" + ); + assert_eq!( + resolved_once(&events, entry_id), + 1, + "CR 405.5 ({label}): the CALLER pushes StackResolved on BOTH sides of \ + the extracted check — the shared function takes no event sink" + ); + } + + // ── (c) CR 107.3m + CR 707.10: the popped paid snapshot survives ── + for (label, snapshot_x, expected_loyalty) in + [("snapshot X=3", Some(3u32), 3u32), ("no snapshot", None, 0)] + { + let mut state = setup(); + let spell_id = create_object( + &mut state, + CardId(704), + PlayerId(0), + "X Loyalty Walker".to_string(), + Zone::Stack, + ); + { + let obj = state.objects.get_mut(&spell_id).unwrap(); + obj.card_types.core_types.push(CoreType::Planeswalker); + obj.printed_loyalty = Some(crate::types::card::PrintedLoyalty::X); + obj.loyalty = None; + } + if let Some(x_value) = snapshot_x { + state.stack_paid_facts.insert( + spell_id, + StackPaidSnapshot { + x_value: Some(x_value), + ..Default::default() + }, + ); + } + state.stack.push_back(StackEntry { + id: spell_id, + source_id: spell_id, + controller: PlayerId(0), + kind: StackEntryKind::Spell { + card_id: CardId(704), + ability: None, + casting_variant: CastingVariant::Normal, + actual_mana_spent: 0, + }, + }); + let depth = state.stack.len(); + + let mut events = Vec::new(); + resolve_top(&mut state, &mut events); + + assert_eq!( + state.stack.len(), + depth - 1, + "reach-guard (c/{label}): the spell resolved" + ); + assert_eq!( + state.objects[&spell_id].zone, + Zone::Battlefield, + "reach-guard (c/{label}): the permanent spell entered the battlefield" + ); + assert_eq!( + state.objects[&spell_id] + .counters + .get(&CounterType::Loyalty) + .copied() + .unwrap_or(0), + expected_loyalty, + "CR 107.3m ({label}): the ETB counter count comes from the POPPED \ + payment snapshot, which stays bound in `resolve_top`" + ); + } + } + // ----------------------------------------------------------------------- // C2: resolution-default moves route through the zone pipeline so Moved // graveyard→exile redirects (Rest in Peace / Leyline of the Void class) From a2bf20b27fc8c1355ba7677498a523c77e75d2ab Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sat, 1 Aug 2026 16:15:53 -0500 Subject: [PATCH 14/62] feat(engine): shape-B mint conjuncts and declare-time owner firewall (5d U2) CR 603.5/732.2a: entry_publishes_pin_slots gains the recipient, stored-auto-choice, and mint-level cardinality conjuncts for both mint shapes; declare-time owner firewall validates against LoopShortcutOffer.proposer with apply_confirmed_shortcut re-validation; firewall placement covers the empty-schema route (R28 a-double-prime pins it). Known pre-existing defect disclosed, not fixed here: ShortcutProposal.per_cycle PlayerId-keyed map fails JSON key deserialization, making persisted bounded-shortcut saves unloadable. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/analysis/resource.rs | 310 +++++++- crates/engine/src/game/effects/mod.rs | 11 +- crates/engine/src/game/engine.rs | 724 +++++++++++++++++- .../engine/tests/integration/loop_shortcut.rs | 369 ++++++++- 4 files changed, 1378 insertions(+), 36 deletions(-) diff --git a/crates/engine/src/analysis/resource.rs b/crates/engine/src/analysis/resource.rs index 7c4f52cd53..ea46dcf418 100644 --- a/crates/engine/src/analysis/resource.rs +++ b/crates/engine/src/analysis/resource.rs @@ -1389,8 +1389,13 @@ fn entry_target_choice_is_pinned( if state.pending_trigger_entry == Some(entry.id) { return false; } + // CR 601.2c: a may-only entry (shape (B)) publishes NO target slot, so it is not + // target-relieved here — its announcement freedom comes from + // `stack_entry_has_no_ordering_input`'s own `targets.is_empty()` arm instead. Requiring + // `Some` keeps this predicate strictly narrower than the mint, never coarser. crate::game::engine::entry_publishes_pin_slots(state, entry, pins.proposer) - .is_some_and(|e| pins.slots.contains(&e.target)) + .and_then(|e| e.target) + .is_some_and(|target| pins.slots.contains(&target)) } /// CR 732.2a + CR 603.5: is this entry's RESOLUTION-time `MayPrompt` (gate (6)) fully @@ -1420,7 +1425,16 @@ fn pinned_may_choice_relief( let pins = scope.pinned?; let published = crate::game::engine::entry_publishes_pin_slots(state, entry, pins.proposer)?; let may = published.may?; - if !pins.slots.contains(&may) || !pins.slots.contains(&published.target) { + // Strictly the mint's own facts, never coarser (CR 603.5): the `may` slot must be + // pinned, and the target slot must be pinned WHEN THERE IS ONE. Shape (B) publishes + // `target: None` — an entry that announces no choice has none for a pin to leave + // unspecified — so demanding a pinned target there would refuse relief the mint's own + // schema fully describes. + if !pins.slots.contains(&may) + || published + .target + .is_some_and(|target| !pins.slots.contains(&target)) + { return None; } let StackEntryKind::TriggeredAbility { ability, .. } = &entry.kind else { @@ -12210,4 +12224,296 @@ mod tests { assert!(!starved.try_charge_one()); assert!(starved.denied()); } + // ───────────────── 5d U2 — the shape-(B) mint's relief-side rows ───────────────── + + /// A 3-seat board with one battlefield source, shared by the two U2 relief rows. + fn u2_relief_board() -> (GameState, ObjectId) { + use crate::game::scenario::GameScenario; + let mut state = GameScenario::new_n_player(3, 7).build().state().clone(); + let src = ObjectId(970); + let mut obj = crate::game::game_object::GameObject::new( + src, + crate::types::identifiers::CardId(0), + PlayerId(0), + "U2 Source".to_string(), + crate::types::zones::Zone::Battlefield, + ); + obj.incarnation = 3; + state.objects.insert(src, obj); + (state, src) + } + + /// Shape (B): a proposer-controlled OPTIONAL, NO-TARGET triggered ability. + /// + /// Shape (B) is reached whenever `build_target_slots` yields ZERO slots. There are two + /// routes to that, and the difference matters HERE and not at the mint: an effect whose + /// head filter announces nothing (`Draw { target: Controller }`) leaves the residual + /// classification choice-FREE, while `TargetChoiceTiming::Resolution` (the Braids + /// per-player-upkeep shape the mint rows use) is itself one of the six `MayPrompt` + /// reasons — such an entry mints but can never be RELIEVED, so its offer is refused at + /// conjunct (6). That is the fail-closed direction, and it is why the relief rows below + /// take the announce-nothing route rather than the resolution-timing one. + fn u2_shape_b_entry( + src: ObjectId, + id: u64, + effect: crate::types::ability::Effect, + mutate: impl FnOnce(&mut crate::types::ability::ResolvedAbility), + ) -> StackEntry { + let mut ability = + crate::types::ability::ResolvedAbility::new(effect, vec![], src, PlayerId(0)); + ability.optional = true; + mutate(&mut ability); + StackEntry { + id: ObjectId(id), + source_id: src, + controller: PlayerId(0), + kind: StackEntryKind::TriggeredAbility { + source_id: src, + ability: Box::new(ability), + condition: None, + trigger_event: None, + description: None, + source_name: String::new(), + subject_match_count: None, + die_result: None, + }, + } + } + + fn u2_draw_effect() -> crate::types::ability::Effect { + crate::types::ability::Effect::Draw { + count: crate::types::ability::QuantityExpr::Fixed { value: 1 }, + target: crate::types::ability::TargetFilter::Controller, + } + } + + /// The `LoopWindowScope` an offer that published exactly `slots` hands the relief. + fn u2_scope(slots: &[DecisionSlot]) -> LoopWindowScope<'_> { + LoopWindowScope { + phase_invariant: None, + sole_driver: None, + pinned: Some(PinnedChoices { + proposer: PlayerId(0), + slots, + }), + cast_card_ids: None, + } + } + + /// R6 — **an optional trigger carrying an additional unpublishable axis still refuses, + /// and the RELIEF is the layer that refuses it.** + /// + /// `ability_resolution_choice_freedom` returns `MayPrompt` for six independent reasons and + /// the offer publishes a `MayChoice` point for exactly ONE of them (`ability.optional`). + /// `pinned_may_choice_relief` therefore re-classifies the ability with `optional` cleared: + /// an `unless_pay` (CR 118.12) keeps coming back `MayPrompt` and gets no relief, because + /// no published pin specifies it. + /// + /// **(a′) THE MATCHED POSITIVE (ROUND-42 M15), byte-identical except the axis.** Without + /// it this row is a dominated negative: `entry_publishes_pin_slots` returns `None` from + /// four conjuncts that all sit ABOVE R6's axis (`entry.controller != proposer`, the + /// `TriggeredAbility` let-else, and the `multi_target`/`distribution`/`target_constraints` + /// block), so a fixture tripping any of them would refuse for a reason that has nothing to + /// do with the residual re-classification. The positive proves the fixture is + /// proposer-controlled, is a triggered ability, carries none of those three, and reaches + /// the mint — and this row additionally asserts the negative fixture MINTS, so the refusal + /// is attributable to the relief and to nothing upstream of it. + /// + /// SCOPE, so this row is not read as covering the cardinality axis: `unless_pay` and a + /// modal header are axes the relief catches. A `repeat_for`-driven multi-prompt ability + /// does NOT fail that way — it can re-classify choice-free while the resolution still + /// opens N prompts — so it is caught one layer earlier, at the mint, by + /// `one_published_may_slot_stands_for_exactly_one_cr_603_5_prompt`. + /// + /// REVERT-PROBE: make `pinned_may_choice_relief` return the residual without + /// re-classifying (drop the `without_may_gate` round-trip and return + /// `FreeUnlessReplacements` unconditionally) ⇒ the `unless_pay` arm is relieved ⇒ FLIPS. + #[test] + fn an_unpublishable_residual_axis_is_refused_by_the_relief_not_by_the_mint() { + use crate::game::engine::entry_publishes_pin_slots; + use crate::game::resolution_prompt::ResolutionChoiceFreedom; + + let (state, src) = u2_relief_board(); + + // ── (a′) matched positive: no residual axis ── + let clean = u2_shape_b_entry(src, 980, u2_draw_effect(), |_| {}); + let published = entry_publishes_pin_slots(&state, &clean, PlayerId(0)) + .expect("(a′) reach-guard: the clean fixture must reach the mint"); + let may = published + .may + .expect("(a′) the clean fixture publishes its CR 603.5 gate"); + assert!( + published.target.is_none(), + "(a′) shape (B): no announcement choice, so no target slot" + ); + let slots = vec![may.clone()]; + let mut budget = ProbeBudget::new(PROBE_BUDGET); + assert!( + matches!( + pinned_may_choice_relief(&state, &clean, u2_scope(&slots), &mut budget), + Some(ResolutionChoiceFreedom::FreeUnlessReplacements(_)) + ), + "(a′) with the may pinned and no other axis, the residual classification is \ + choice-free and the entry is relieved" + ); + + // ── (a) the negative: one CR 118.12 `unless_pay` axis, nothing else changed ── + let gated = u2_shape_b_entry(src, 981, u2_draw_effect(), |ability| { + ability.unless_pay = Some(crate::types::ability::UnlessPayModifier { + cost: crate::types::ability::AbilityCost::Mana { + cost: crate::types::mana::ManaCost::Cost { + shards: vec![], + generic: 2, + }, + }, + payer: crate::types::ability::TargetFilter::Controller, + }); + }); + let gated_published = entry_publishes_pin_slots(&state, &gated, PlayerId(0)) + .expect("(a) reach-guard: the MINT still publishes — it does not read `unless_pay`"); + assert_eq!( + gated_published.may.as_ref(), + Some(&may), + "(a) reach-guard: the same slot is published, so the two arms differ ONLY in the \ + residual axis and the refusal below cannot come from the mint" + ); + let mut budget = ProbeBudget::new(PROBE_BUDGET); + assert!( + pinned_may_choice_relief(&state, &gated, u2_scope(&slots), &mut budget).is_none(), + "(a) CR 118.12: an `unless_pay` is a SECOND resolution-time choice no published \ + pin specifies, so the residual re-classification still returns `MayPrompt` and \ + the entry gets no relief" + ); + } + + /// R31 — **the `may` mint's recipient conjunct may read the board, but it can never move + /// a published offer.** + /// + /// Conjunct (a) calls `optional_prompt_player`, whose sole state-touching callee is + /// `targeting::resolve_effect_player_ref`, reaching eleven distinct `GameState` fields + /// (`players`, `seat_order`, `format_config`, `objects`, `lki_cache`, `stack`, + /// `current_trigger_event`, `last_created_token_ids`, `last_revealed_ids`, + /// `last_zone_changed_ids`, `resolution_stack`). Every one of the three branches that + /// reach it is gated on an `Effect` that `effect_resolution_choice_freedom` puts in its + /// fail-closed grouped arm — so conjunct (6) refuses any offer carrying such an entry. + /// The reads happen; they cannot bear on a published result. + /// + /// NO PRODUCTION DELTA: this row pins an ARGUMENT, which is why it needs a revert-probe + /// that edits code rather than deletes a guard. + /// + /// THREE ARMS, and the first two exist so the third cannot pass vacuously: + /// * **(a) the branch is REACHED** — `Effect::PayCost { payer: Controller }` routes + /// through `resolve_effect_player_ref`'s `Controller` arm and returns the proposer ⇒ a + /// `may` slot IS published. + /// * **(a′) matched negative, differing in exactly the payer filter** — `payer: Opponent` + /// resolves through `players::is_opponent`/`opponents` to a seat ≠ proposer ⇒ no slot. + /// The pair proves the verdict is decided BY the callee's return value, which is why no + /// function-level inertness is claimed anywhere. + /// * **(b) the closure** — the offer is refused anyway, repeated for all three + /// state-reading branches (`PayCost`, `Sacrifice`, `SearchLibrary`) so the arm covers + /// the closure's whole population rather than one member of it. + /// + /// REVERT-PROBE (symbol-anchored, so it survives file moves): in + /// `game/resolution_prompt.rs`, move `Effect::PayCost { .. }` out of + /// `effect_resolution_choice_freedom`'s fail-closed grouped arm into a + /// `FreeUnlessReplacements(vec![])` arm ⇒ **(b) FLIPS to `true`** for the `PayCost` case + /// while (a)/(a′) stay green — proving the closure rests on the scope filter and not on + /// the fixture. + /// + /// The COMPLETENESS arm ("every minted pair is scanned") ships in U3: its probe names + /// `touch.announced`, which does not exist until the announcement loop gains its window. + #[test] + fn the_recipient_conjunct_reads_the_board_but_can_never_move_a_published_offer() { + use crate::game::engine::entry_publishes_pin_slots; + use crate::types::ability::{AbilityCost, Effect, QuantityExpr, TargetFilter}; + + let (state, src) = u2_relief_board(); + let mana = || AbilityCost::Mana { + cost: crate::types::mana::ManaCost::Cost { + shards: vec![], + generic: 1, + }, + }; + let pay_cost = |payer: TargetFilter| Effect::PayCost { + cost: mana(), + scale: None, + payer, + }; + + // ── (a) the state-reading branch is REACHED and returns the proposer ── + let reached = u2_shape_b_entry(src, 990, pay_cost(TargetFilter::Controller), |_| {}); + let StackEntryKind::TriggeredAbility { ability, .. } = &reached.kind else { + panic!("the fixture is a triggered ability"); + }; + assert_eq!( + crate::game::effects::optional_prompt_player(&state, ability), + PlayerId(0), + "(a) reach-guard: the `PayCost` branch really routes through \ + `resolve_effect_player_ref`'s `Controller` arm and returns the proposer" + ); + let published = entry_publishes_pin_slots(&state, &reached, PlayerId(0)) + .expect("(a) the state-reading branch publishes"); + let may = published + .may + .expect("(a) a `may` slot IS minted through the state-reading branch"); + + // ── (a′) matched negative: exactly the payer filter differs ── + let opposed = u2_shape_b_entry(src, 991, pay_cost(TargetFilter::Opponent), |_| {}); + let StackEntryKind::TriggeredAbility { ability, .. } = &opposed.kind else { + panic!("the fixture is a triggered ability"); + }; + assert_ne!( + crate::game::effects::optional_prompt_player(&state, ability), + PlayerId(0), + "(a′) reach-guard: the `Opponent` arm resolves to a seat that is NOT the proposer" + ); + assert!( + entry_publishes_pin_slots(&state, &opposed, PlayerId(0)).is_none(), + "(a′) the mint's verdict is decided by `resolve_effect_player_ref`'s RETURN value, \ + not by the effect's shape — so the state reads really are result-bearing" + ); + + // ── (b) the closure: the offer is refused anyway, on all three branches ── + let branches: Vec<(&str, Effect)> = vec![ + ("PayCost", pay_cost(TargetFilter::Controller)), + ( + "Sacrifice", + Effect::Sacrifice { + target: TargetFilter::ParentTargetController, + count: QuantityExpr::Fixed { value: 1 }, + min_count: 1, + }, + ), + ( + "SearchLibrary", + Effect::SearchLibrary { + source_zones: vec![crate::types::zones::Zone::Library], + filter: TargetFilter::Controller, + count: QuantityExpr::Fixed { value: 1 }, + reveal: false, + target_player: Some(TargetFilter::ParentTargetController), + selection_constraint: Default::default(), + split: None, + }, + ), + ]; + for (label, effect) in branches { + let mut board = state.clone(); + let entry = u2_shape_b_entry(src, 992, effect, |_| {}); + // Reach-guard for the ANNOUNCEMENT loop: without this, a `false` below could come + // from gate (3) instead of from gate (6) and the closure claim would be vacuous. + assert!( + stack_entry_has_no_ordering_input(&board, &entry), + "{label}: reach-guard — shape (B) announces no choice, so the announcement \ + loop must PASS and the refusal below is attributable to gate (6)" + ); + board.stack.push_back(entry); + assert!( + !stack_choices_are_all_specified(&board, PlayerId(0), std::slice::from_ref(&may)), + "{label}: CR 732.2a conjunct (6) refuses the offer — the effect sits in \ + `effect_resolution_choice_freedom`'s fail-closed grouped arm, so a `may` \ + slot minted through a state-reading branch can never reach a published offer" + ); + } + } } diff --git a/crates/engine/src/game/effects/mod.rs b/crates/engine/src/game/effects/mod.rs index 3e78872990..fd125f214b 100644 --- a/crates/engine/src/game/effects/mod.rs +++ b/crates/engine/src/game/effects/mod.rs @@ -5658,7 +5658,7 @@ fn rebind_first_object_target( /// see the card's official ruling), so the up-front single-gate at the top of /// `resolve_chain_body` is suppressed for this shape and optionality is fired /// per-iteration inside the `repeat_for` loop instead. -fn has_kind_driven_repeat(ability: &ResolvedAbility) -> bool { +pub(crate) fn has_kind_driven_repeat(ability: &ResolvedAbility) -> bool { matches!( ability.repeat_for, Some(QuantityExpr::Ref { @@ -5681,7 +5681,10 @@ fn has_member_driven_repeat(ability: &ResolvedAbility) -> bool { ) && effect_iterates_over_parent_target(&ability.effect) } -fn has_member_driven_repeat_after_hydration(state: &GameState, ability: &ResolvedAbility) -> bool { +pub(crate) fn has_member_driven_repeat_after_hydration( + state: &GameState, + ability: &ResolvedAbility, +) -> bool { has_member_driven_repeat(&ability_with_event_context_targets(state, ability)) } @@ -5823,7 +5826,7 @@ fn optional_effect_is_infeasible(state: &GameState, ability: &ResolvedAbility) - /// continuation. Any repeated-optional ability whose cost pauses falls through to /// the generic `repeat_for` path and stays honestly unimplemented (no false /// green) until the driver gains pause-resume plumbing. -fn is_repeated_optional_payment(ability: &ResolvedAbility) -> bool { +pub(crate) fn is_repeated_optional_payment(ability: &ResolvedAbility) -> bool { ability.optional && is_synchronous_mana_pay_cost(&ability.effect) && matches!(ability.repeat_for, Some(QuantityExpr::Fixed { .. })) @@ -6390,7 +6393,7 @@ pub(crate) fn resolve_player_for_context_ref( /// acting subject (the target permanent's controller). This mirrors the /// `resolve_library_owner` logic in `search_library.rs` but applies generally /// to any optional effect whose embedded player-scope target is a context-ref. -fn optional_prompt_player(state: &GameState, ability: &ResolvedAbility) -> PlayerId { +pub(crate) fn optional_prompt_player(state: &GameState, ability: &ResolvedAbility) -> PlayerId { if let Effect::PayCost { payer, .. } = &ability.effect { if let Some(player) = crate::game::targeting::resolve_effect_player_ref(state, ability, payer) diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index de5e55d903..d5878abb44 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -1478,16 +1478,22 @@ fn declares_opponent_player_target(ability: &crate::types::ability::ResolvedAbil /// What ONE accepted stack entry publishes: the slot keys, plus the legal set the /// ANNOUNCEMENT authority itself built for the target slot. pub(crate) struct EntryPinSlots { - /// CR 115.2 target choice — `index: 0`. - pub(crate) target: crate::analysis::decision_template::DecisionSlot, - /// CR 603.5 "may" gate — `index: 1`, `Some` iff `ability.optional`. `DecisionSlot`'s - /// sub-index disambiguates two choices of ONE ability instance (target vs. may gate). + /// CR 115.2 target choice — `index: 0`. `None` for shape (B), the may-only entry: + /// announcing it surfaces NO choice at all (`targets.is_empty()` and zero built slots), + /// so there is no CR 601.2c announcement choice for a pin to specify. + pub(crate) target: Option, + /// CR 603.5 "may" gate — `index: 1`, `Some` only if `ability.optional` — the mint + /// additionally refuses on recipient, stored auto-choice and prompt-cardinality grounds + /// (see the `may` mint below), so `None` here does NOT imply the ability is mandatory. + /// `DecisionSlot`'s sub-index disambiguates two choices of ONE ability instance (target + /// vs. may gate). pub(crate) may: Option, /// The legal set of the ONE announcement slot, taken VERBATIM from /// `ability_utils::build_target_slots` — the same authority that decided there is /// exactly one mandatory choice. Deriving it a second time from the head effect's /// filter would let the two disagree about WHICH choice is being published, which is /// the same class of divergence the cardinality conjunct closes about HOW MANY. + /// Empty for shape (B), which publishes no target slot to carry a legal set for. pub(crate) legal_targets: Vec, } @@ -1505,12 +1511,13 @@ pub(crate) struct EntryPinSlots { /// (c) `entry.controller == proposer` — CR 732.2a leaves every OTHER player owning their own /// choices, so an opponent-controlled entry is never pinnable; the entry is a triggered /// ability (a spell / activated ability re-announces from scratch); ANNOUNCING it requires -/// exactly one mandatory choice OVER PLAYERS, asked of the announcement authority itself -/// (`ability_utils::build_target_slots`, the function the relief's own -/// `forced_unique_targeting` rebuilds slots with) rather than of a proxy; its head effect -/// declares the player-target shape ([`declares_opponent_player_target`]); and its source -/// object still exists, so the slot can re-bind (CR 400.7 incarnation, fail-closed on -/// absence). +/// either exactly one mandatory choice over players whose head effect declares the +/// player-target shape (shape (A): asked of the announcement authority itself, +/// `ability_utils::build_target_slots` — the function the relief's own +/// `forced_unique_targeting` rebuilds slots with — rather than of a proxy, plus +/// [`declares_opponent_player_target`]), or NO announcement choice at all (shape (B): +/// `targets.is_empty()` and zero built slots); and its source object still exists, so the +/// slot can re-bind (CR 400.7 incarnation, fail-closed on absence). /// /// SCOPE OF THE ANSWER: because the relief is a `continue` at gate (3), the relief /// predicate must be no coarser than EVERY fact `stack_entry_has_no_ordering_input` @@ -1544,8 +1551,18 @@ pub(crate) fn entry_publishes_pin_slots( // The fourth fact that function rejects on — `pending_trigger_entry == entry.id`, // CR 603.3c mid-construction — is deliberately NOT here: it is a property of the // COMPARED STATE, not of the offer's schema, and reading it would break this - // enumerator's purity contract (see [`bounded_cycle_pin_slots`]: pure over - // `(state.stack, state.objects, proposer)`, never `waiting_for`). It is set exactly + // enumerator's PROMPT-state independence (see [`bounded_cycle_pin_slots`]: it never + // reads `waiting_for`, nor `pending_trigger_entry`, which is set exactly while a prompt + // is up). NOT a claim of purity over a three-field surface: the CR 603.5 recipient + // conjunct below resolves a player through `optional_prompt_player` → + // `resolve_effect_player_ref`, which reaches ELEVEN distinct `GameState` fields — + // `state.players`, `state.seat_order`, `state.format_config`, `state.objects`, + // `state.lki_cache`, `state.stack`, `state.current_trigger_event`, + // `state.last_created_token_ids`, `state.last_revealed_ids`, + // `state.last_zone_changed_ids` and `state.resolution_stack`. The contract is narrower + // and exact — the mint is a function of the BOARD, never of the PROMPT — and it is what + // keeps the mint's verdict stable across a prompted and an unprompted beat. + // It is set exactly // while a `TriggerTargetSelection` prompt is up, so a mint that read it would publish // nothing on a prompted board — measured on dump B, where it zeroes the emblem slot. // It is enforced at the relief instead (`analysis::resource::entry_target_choice_is_pinned`), @@ -1592,7 +1609,72 @@ pub(crate) fn entry_publishes_pin_slots( // function's contract that the schema can only ever UNDER-publish. Purity survives: // `build_target_slots` never reads `state.waiting_for` (its only hit in // `ability_utils.rs` is a test at `:7722`). + let source = object_decision_source(state, entry.source_id)?; + // CR 603.5 + CR 732.2a: `entry.controller == proposer` above bounds who OWNS the entry; + // it does NOT bound who the resolver ASKS, nor WHETHER it asks, nor HOW MANY TIMES. + // Three mint-time conjunct groups, all FAIL-CLOSED pre-filters on the ONE gate a + // `MayChoice` pin is for — the CR 603.5 gate inside `resolve_chain_body` + // (`effects/mod.rs`, the `if ability.optional && !has_kind_driven_repeat(..)` block). + // THIS IS THE ONE PLACE `may` IS MINTED, so the guards cover shape (A) and shape (B) + // together rather than being restated per shape. Soundness over the OTHER FOUR + // production producers of `WaitingFor::OptionalEffectChoice` is NOT claimed here; it is + // discharged at the consumption point, where the instrument is total. + // + // (a) RECIPIENT. `optional_prompt_player` is THIS gate's own recipient authority — + // five of its branches route to a NON-controller and the last is EFFECT-AGNOSTIC + // (CR 503.1a + CR 608.2d, the Braids / Conjurer Adept `scoped_player` class), so + // asking the same function the gate asks keeps THIS pair from drifting. Without + // it a proposer's pin can be spent as another seat's CR 603.5 choice. + // (b) SECOND AUTHORITY. A stored "don't ask again" auto-choice ALREADY ANSWERS this + // may and the gate returns BEFORE setting any prompt, so a pin minted here would + // be silently unused — invisible even to a fail-closed inject arm. The key is + // built exactly as the gate builds it; `player` is `proposer` only because `&&` + // short-circuits left to right and (a) has already proved them equal. Present ⇒ + // refuse; `may_trigger_origin: None` ⇒ no key exists ⇒ nothing to refuse. + // (c) CARDINALITY. CR 732.2a: the shortcut describes THE sequence of choices, so one + // published slot may stand for exactly ONE CR 603.5 prompt. Production suppresses + // the single up-front gate for three `repeat_for` shapes and re-fires optionality + // PER ITERATION (CR 608.2c + CR 608.2d) instead. `has_kind_driven_repeat` keys on + // `repeat_for` ALONE — no `Effect` restriction — so an optional `PutCounter` / + // `Draw` / `Token` of that shape would otherwise mint ONE slot for N prompts. Ask + // production's own three predicates rather than re-deriving them here, which is + // the same authority-sharing rule (a) follows. + let may = (ability.optional + && crate::game::effects::optional_prompt_player(state, ability) == proposer + && !crate::game::effects::has_kind_driven_repeat(ability) + && !crate::game::effects::has_member_driven_repeat_after_hydration(state, ability) + && !crate::game::effects::is_repeated_optional_payment(ability) + && ability.may_trigger_origin.as_ref().is_none_or(|origin| { + state + .may_trigger_auto_choice(&crate::types::game_state::MayTriggerAutoChoiceKey { + player: proposer, + source_id: ability.source_id, + origin: origin.clone(), + }) + .is_none() + })) + .then(|| DecisionSlot { + source: source.clone(), + index: 1, + }); let mut slots = super::ability_utils::build_target_slots(state, ability).ok()?; + // SHAPE (B) — may-only. The announcement authority surfaced NO choice, so there is no + // CR 601.2c target for a pin to specify and the entry publishes its CR 603.5 gate + // alone. `ability.targets.is_empty()` is what makes "zero built slots" mean "declares + // nothing" rather than "declared something the builder declined"; `optional` is + // inherited from the `may` expression, which is `None` without it. A `may` the three + // conjunct groups above suppressed leaves shape (B) with NO slot at all, so the whole + // entry publishes `None` — the fail-closed direction. + if slots.is_empty() { + if !ability.targets.is_empty() { + return None; + } + return Some(EntryPinSlots { + target: None, + may: Some(may?), + legal_targets: vec![], + }); + } if slots.len() != 1 { return None; } @@ -1614,15 +1696,11 @@ pub(crate) fn entry_publishes_pin_slots( if !declares_opponent_player_target(ability) { return None; } - let source = object_decision_source(state, entry.source_id)?; + // Shape (A) — targeted. Index 1 is kept for the may slot in BOTH shapes, so slot + // identity is stable across them. Some(EntryPinSlots { - target: DecisionSlot { - source: source.clone(), - index: 0, - }, - may: ability - .optional - .then_some(DecisionSlot { source, index: 1 }), + target: Some(DecisionSlot { source, index: 0 }), + may, legal_targets: slot.legal_targets, }) } @@ -1689,9 +1767,12 @@ pub fn bounded_cycle_pin_slots( let Some(pins) = entry_publishes_pin_slots(state, entry, proposer) else { continue; }; - if !points.iter().any(|p| p.slot == pins.target) { + // CR 601.2c: a `Targets` point only when the entry actually announces a choice. + // Shape (B) publishes `target: None` — announcing it surfaces no target at all — + // so a `min_targets: 1` point would over-state the sequence CR 732.2a describes. + if let Some(target) = pins.target.filter(|t| !points.iter().any(|p| &p.slot == t)) { points.push(DecisionPoint { - slot: pins.target, + slot: target, kind: DecisionPointKind::Targets { // VERBATIM the slot `ability_utils::build_target_slots` built for this // announcement — not a second derivation. That is what makes WHICH @@ -1818,6 +1899,19 @@ fn apply_confirmed_shortcut( || proposal .predicted_winner .is_some_and(|winner| !crate::game::players::is_alive(state, winner)) + // CR 732.2a + CR 603.5: `template.owner` decides WHOSE CR 603.5 choice a pin may + // answer (the drive's seat guard in `inject_pinned_answer`). The two live ingresses + // bind it at declare; a RESTORED `WaitingFor::RespondToShortcut` is plain serde and + // the untrusted-restore scrubber rewrites only the two PRE-CAST waits, so it never + // ran that firewall. Re-validate the SAME invariant at the one point every drive + // passes through, so the seat guard is meaningful on every ingress and not only the + // two live ones. Refusing (rather than forcing `owner = proposer`) keeps the + // fail-closed direction every other conjunct at this seam uses: forcing would make a + // tampered proposal runnable under a rewritten owner. + || proposal + .template + .as_ref() + .is_some_and(|t| t.owner != proposal.proposer) { priority::reset_priority(state); // CR 800.4a: priority passes to the next player in turn order still in the game. @@ -3842,9 +3936,11 @@ fn handle_declare_shortcut( // `shortcut_validated_range` derives the validated range FROM the declared count and so // must not be handed an unchecked one — a `Fixed(4_000_000_000)` would otherwise become // a four-billion-iteration validation loop. Observation-equivalence of the reorder is - // structural: every refusal arm in BOTH blocks lands on the same single authority - // (`reject_shortcut_declaration`), and `handle_declare_shortcut` pushes NO events at all, - // so no row can observe which block refused first. + // structural: all six refusal arms across the three blocks (this match, the CR 732.2a + + // CR 603.5 `template.owner` firewall between them, and the pin-validation block) land on + // the same single authority (`reject_shortcut_declaration`), and + // `handle_declare_shortcut` pushes NO events at all, so no row can observe which block + // refused first. // IMPLEMENTATION BUDGET BOUND (see MAX_SHORTCUT_CYCLES) — deliberately NOT labelled as a // CR 732.2a constraint: the rules place no ceiling on how many times a shortcut may be // repeated (CR 732.2a's own example runs to a million), so this ceiling is ours, not the @@ -3894,6 +3990,26 @@ fn handle_declare_shortcut( crate::analysis::decision_template::IterationCount::Fixed(_) | crate::analysis::decision_template::IterationCount::UntilLethal => {} } + // CR 732.2a + CR 603.5: the declared template's `owner` is CLIENT-SUPPLIED — the + // `GameAction::DeclareShortcut { template }` payload arrives here verbatim — and it is + // the comparand `inject_pinned_answer` uses to decide WHOSE CR 603.5 choice a pin may + // answer. Bind it to the engine-issued seat here, at declare, or that seat guard + // compares an attacker-chosen value against itself. `offer.proposer` is engine state, + // copied from `WaitingFor::LoopShortcut { proposer }`. + // + // PLACEMENT IS LOAD-BEARING: this sits OUTSIDE the `!offer.schema.points.is_empty()` + // block below, so it is reached for every declaration regardless of schema emptiness — + // an empty-schema offer skips `predictability_gate` / `validate_pins` entirely and would + // otherwise reach the proposal with an unvalidated owner. It is the SIXTH sibling of the + // five refusal arms and lands on their single authority (`reject_shortcut_declaration`), + // so no row can observe which refusal fired first — the "sixth reject path added later" + // that authority's doc anticipates. Defence in depth for the RESTORE ingress (a persisted + // `WaitingFor::RespondToShortcut` never runs this handler) lives on + // `apply_confirmed_shortcut`'s consumption guard. + if template.as_ref().is_some_and(|t| t.owner != offer.proposer) { + reject_shortcut_declaration(state, &mut result); + return Ok(result); + } if !offer.schema.points.is_empty() { match &template { Some(t) => { @@ -13100,10 +13216,26 @@ mod stage2_injector_tests { .expect("reach-guard: the dump carries the emblem's trigger") .clone(); let single = bounded_cycle_pin_slots(&state, P0); + // Reach-guard, re-derived from the loaded board rather than from a literal: the + // mint qualifies FOUR sources here — the CR 115.2 emblem target (541) plus three + // shape-(B) CR 603.5 may-only sources (126, 208, 274). 126 and 208 carry 34 stack + // entries apiece, so the shipped board ALREADY exercises the dedupe: without it + // this count would be 69, not 4. assert_eq!( single.len(), + 4, + "reach-guard: the shipped board qualifies exactly four sources" + ); + assert_eq!( + single + .iter() + .filter(|p| matches!( + p.kind, + crate::analysis::decision_template::DecisionPointKind::Targets { .. } + )) + .count(), 1, - "reach-guard: the shipped board qualifies exactly one source" + "reach-guard: exactly one of them is the emblem's TARGETS point" ); let mut second = emblem_entry; @@ -13253,6 +13385,546 @@ mod stage2_injector_tests { "a pin for another source does not answer the emblem's prompt" ); } + + // ───────────────────────── 5d U2 — the shape-(B) mint ───────────────────────── + + use crate::types::ability::ResolvedAbility; + + /// A 3-seat board plus one battlefield source object, shared by every U2 mint row so a + /// row's verdict cannot come from board differences. + fn u2_board() -> (GameState, ObjectId) { + let mut state = GameScenario::new_n_player(3, 7).build().state().clone(); + let src = place(&mut state, 930, crate::types::zones::Zone::Battlefield); + (state, src) + } + + /// A proposer-controlled OPTIONAL, NO-TARGET triggered ability — shape (B)'s own shape. + /// + /// `target_choice_timing: Resolution` is what makes it shape (B), and it is the class's + /// real rules shape rather than a test convenience: CR 601.2c announces only DECLARED + /// targets, so a per-player-upkeep "that player may put a +1/+1 counter on a creature + /// they control" (Braids / Conjurer Adept — CR 503.1a + CR 608.2d) chooses its subject + /// AT RESOLUTION and surfaces zero announcement slots. Measured on `u2_board`: + /// `build_target_slots` returns `Ok(0)` for every fixture below (each row asserts the + /// consequence through its own matched positive), so each really reaches the shape-(B) + /// arm rather than falling out at an upstream conjunct. + fn shape_b(src: ObjectId, effect: crate::types::ability::Effect) -> ResolvedAbility { + let mut ability = ResolvedAbility::new(effect, vec![], src, P0); + ability.optional = true; + ability.target_choice_timing = crate::types::ability::TargetChoiceTiming::Resolution; + ability + } + + fn shape_b_entry(id: u64, src: ObjectId, ability: ResolvedAbility) -> StackEntry { + StackEntry { + id: ObjectId(id), + source_id: src, + controller: P0, + kind: StackEntryKind::TriggeredAbility { + source_id: src, + ability: Box::new(ability), + condition: None, + trigger_event: None, + description: None, + source_name: String::new(), + subject_match_count: None, + die_result: None, + }, + } + } + + /// `Effect::PutCounter` on a `ScopedPlayer`-scoped creature filter — inside D4.3's + /// six-arm scope filter, and the exact filter shape + /// `filter_uses_relative_controller_scoped` keys on. + fn scoped_put_counter() -> crate::types::ability::Effect { + use crate::types::ability::{ + ControllerRef, Effect, QuantityExpr, TargetFilter, TypedFilter, + }; + Effect::PutCounter { + target: TargetFilter::Typed(TypedFilter { + type_filters: vec![crate::types::ability::TypeFilter::Creature], + controller: Some(ControllerRef::ScopedPlayer), + properties: vec![], + }), + counter_type: crate::types::counter::CounterType::Plus1Plus1, + count: QuantityExpr::Fixed { value: 1 }, + } + } + + /// R23, conjuncts 1–2 — **CR 603.5: the `may` pin binds the prompt's RECIPIENT, not only + /// the entry's OWNER.** + /// + /// Asserted AT THE MINT SEAM, deliberately: an offer-level negative would be satisfied by + /// D4.3's scope filter on many boards regardless of this guard (the + /// upstream-conjunct-dominates trap). The mint has no such upstream. + /// + /// `entry.controller == proposer` bounds who OWNS the entry; it does not bound who the + /// resolver ASKS. `optional_prompt_player`'s last branch is EFFECT-AGNOSTIC — it fires on + /// `ability.scoped_player` plus a `ScopedPlayer`-scoped `target_filter()` (CR 503.1a + + /// CR 608.2d, the Braids / Conjurer Adept class) — so an allow-listed `PutCounter` reaches + /// it. Without the conjunct, P0's pin would be spendable as P1's CR 603.5 choice. + /// + /// MATCHED POSITIVE, on the same instrument and differing in exactly `scoped_player`: it + /// proves the fixture reaches the mint at all, so the negative is keyed to the recipient + /// axis and not to one of the four upstream conjuncts. + /// + /// REVERT-PROBE: delete `&& effects::optional_prompt_player(state, ability) == proposer` + /// from the `may` mint ⇒ the scoped-player entry publishes a `MayChoice` slot ⇒ the + /// negative arm FLIPS TO FAIL. + #[test] + fn a_may_slot_is_minted_only_for_the_seat_the_cr_603_5_gate_will_ask() { + let (mut state, src) = u2_board(); + + // ── negative: the gate will ask P1, not the proposer ── + let mut scoped = shape_b(src, scoped_put_counter()); + scoped.scoped_player = Some(P1); + assert_eq!( + crate::game::effects::optional_prompt_player(&state, &scoped), + P1, + "reach-guard: the recipient authority must really route this entry to the OTHER \ + seat, or the negative below is about nothing" + ); + let negative = shape_b_entry(940, src, scoped); + assert!( + entry_publishes_pin_slots(&state, &negative, P0).is_none(), + "CR 603.5: a `may` the resolver will ask ANOTHER seat publishes no pin slot" + ); + + // ── matched positive: byte-identical except `scoped_player` ── + let unscoped = shape_b(src, scoped_put_counter()); + assert_eq!( + crate::game::effects::optional_prompt_player(&state, &unscoped), + P0, + "reach-guard: with no scoped player the gate asks the controller = proposer" + ); + let positive = shape_b_entry(941, src, unscoped); + let published = entry_publishes_pin_slots(&state, &positive, P0) + .expect("the matched positive must reach the mint and publish"); + assert!( + published.may.is_some(), + "the matched positive publishes the CR 603.5 gate" + ); + assert!( + published.target.is_none(), + "shape (B): announcing it surfaces no CR 601.2c choice, so no target slot" + ); + assert!( + published.legal_targets.is_empty(), + "no target slot carries no legal set" + ); + + // The published pair also reaches the point mint as ONE `MayChoice` point. + state.stack.push_back(positive); + let points = bounded_cycle_pin_slots(&state, P0); + assert_eq!( + points.len(), + 1, + "shape (B) publishes exactly the may point: {points:?}" + ); + assert_eq!( + points[0].kind, + crate::analysis::decision_template::DecisionPointKind::MayChoice + ); + assert_eq!( + points[0].slot.index, 1, + "index 1 is the may slot in BOTH shapes" + ); + } + + /// R23, conjunct 3 — **the PRODUCER census, so a new producer is a COUNTED event.** + /// + /// The struck form of this conjunct pinned `optional_prompt_player`'s own call-site count, + /// which is trivially stable at 2 and moves neither when the guard is deleted nor when an + /// unguarded producer is added — this plan's own "verify the seam, not the line" defect, + /// committed. What actually bounds the mint conjunct's reach is how many things PRODUCE + /// `WaitingFor::OptionalEffectChoice`: the conjunct is a fail-closed pre-filter on ONE of + /// them, and soundness over the others is discharged at the consumption point. + /// + /// The five production producers are named individually, and exactly one of them is inside + /// the CR 603.5 gate that consults the recipient authority. If a sixth appears, this row + /// fails and whoever added it must decide where its recipient is bound. + #[test] + fn the_cr_603_5_prompt_census_is_pinned_so_a_sixth_producer_is_a_counted_event() { + /// Every `.rs` under the crate's `src`, and the `#[cfg(test)]`-attributed + /// column-0 `mod … {` … column-0 `}` spans inside it. A whole file whose stem + /// ends `_tests` is test-only (its parent declares it under `#[cfg(test)]`). + fn rs_files(dir: &std::path::Path, out: &mut Vec) { + for entry in std::fs::read_dir(dir).expect("readable source dir") { + let path = entry.expect("readable dir entry").path(); + if path.is_dir() { + rs_files(&path, out); + } else if path.extension().is_some_and(|e| e == "rs") { + out.push(path); + } + } + } + fn cfg_test_spans(lines: &[&str]) -> Vec<(usize, usize)> { + let mut spans = Vec::new(); + let mut i = 0; + while i < lines.len() { + if lines[i].trim() == "#[cfg(test)]" { + let mut j = i + 1; + while j < lines.len() + && (lines[j].trim_start().starts_with("#[") || lines[j].trim().is_empty()) + { + j += 1; + } + let is_mod = j < lines.len() + && lines[j].starts_with(['m', 'p']) + && lines[j].contains("mod ") + && lines[j].trim_end().ends_with('{'); + if is_mod { + let mut k = j + 1; + while k < lines.len() && lines[k] != "}" { + k += 1; + } + spans.push((j, k)); + i = k; + } + } + i += 1; + } + spans + } + + let root = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("src"); + let mut files = Vec::new(); + rs_files(&root, &mut files); + files.sort(); + assert!(files.len() > 100, "reach-guard: the walker found the crate"); + + // The needle is ASSEMBLED so this row's own source cannot be counted by its own + // instrument. `..` excludes multi-line READ destructures whose rest-pattern sits on + // a later line — the inflation the raw grep suffers from. + let needle = format!("WaitingFor::{}Choice {{", "OptionalEffect"); + let (mut producers, mut readers, mut in_test) = (Vec::new(), Vec::new(), 0usize); + for path in &files { + let text = std::fs::read_to_string(path).expect("readable source file"); + let lines: Vec<&str> = text.lines().collect(); + let spans = cfg_test_spans(&lines); + let rel = path + .strip_prefix(&root) + .expect("under src") + .display() + .to_string(); + let test_file = rel.trim_end_matches(".rs").ends_with("_tests"); + for (n, line) in lines.iter().enumerate() { + if !line.contains(&needle) || line.contains("..") { + continue; + } + if test_file || spans.iter().any(|(a, b)| (*a..=*b).contains(&n)) { + in_test += 1; + } else if line.contains("waiting_for = ") || line.contains("Ok(Some(") { + producers.push(format!("{rel}:{}", n + 1)); + } else { + readers.push(format!("{rel}:{}", n + 1)); + } + } + } + + assert_eq!( + producers.len() + readers.len() + in_test, + 34, + "CR 603.5 prompt census drifted. A new PRODUCER must have its recipient bound \ + somewhere — the mint's conjunct (a) covers exactly ONE of them.\n\ + producers={producers:#?}\nreaders={readers:#?}" + ); + assert_eq!( + (producers.len(), readers.len(), in_test), + (5, 6, 23), + "the partition, not just the total: five PRODUCTION producers, six PRODUCTION \ + readers (they read `state.waiting_for` and never write it), 23 `#[cfg(test)]` \ + lines.\nproducers={producers:#?}\nreaders={readers:#?}" + ); + assert_eq!( + producers, + vec![ + "game/effects/mod.rs:5896".to_string(), + "game/effects/mod.rs:5973".to_string(), + "game/effects/mod.rs:8927".to_string(), + "game/effects/scoped_library_search.rs:452".to_string(), + "game/engine.rs:10155".to_string(), + ], + "the five production producers, NAMED: the CR 603.5 gate in `resolve_chain_body` \ + plus the two repeated-optional-payment drivers, the per-player acceptance cursor \ + in `scoped_library_search`, and `begin_pending_trigger_target_selection`'s \ + ANNOUNCEMENT-time modal prompt. Four of the five choose `player` WITHOUT \ + consulting the recipient authority, which is exactly why the mint conjunct is a \ + fail-closed pre-filter and not a soundness proof" + ); + + // Exactly ONE of them routes through the recipient authority: the CR 603.5 gate. + let effects_src = std::fs::read_to_string(root.join("game/effects/mod.rs")) + .expect("readable effects module"); + let authority = format!("{}_prompt_player", "optional"); + assert_eq!( + effects_src.matches(&authority).count(), + 2, + "one definition + exactly one call — the CR 603.5 gate's `let prompt_player = ..`. \ + A second call inside `effects/mod.rs` means a second producer started consulting \ + the authority and this row's partition needs re-deriving" + ); + } + + /// R25 — **a stored `may` auto-choice is a SECOND authority on the same CR 603.5 + /// question, and the mint must refuse to it.** + /// + /// Without the conjunct the pin is minted, then the gate consumes the stored choice and + /// **returns before setting any prompt** — so `inject_pinned_answer` is never entered and + /// the fail-closed `_ => Err(RecastAbort)` arm the design leans on cannot fire on a prompt + /// that is never raised. The declared `Take` would be silently replaced by the stored + /// `Decline`. `MayTriggerAutoChoiceKey`/`Record` are `Serialize + Deserialize`, so a real + /// dump can carry one. + /// + /// MATCHED POSITIVE, differing ONLY in the seeded record, so no upstream conjunct can + /// dominate. + /// + /// REVERT-PROBE: delete the `ability.may_trigger_origin.as_ref().is_none_or(…is_none())` + /// conjunct from the `may` mint ⇒ the seeded entry publishes a `MayChoice` slot ⇒ the + /// negative arm FLIPS TO FAIL. + #[test] + fn a_stored_may_auto_choice_is_a_second_authority_the_mint_refuses_to() { + use crate::types::ability::{ + Effect, QuantityExpr, TargetFilter, TriggerBaseSetInstanceRef, + TriggerDefinitionOccurrenceRef, TriggerDefinitionRef, + }; + use crate::types::game_state::{AutoMayChoice, MayTriggerAutoChoiceKey, MayTriggerOrigin}; + use crate::types::identifiers::ObjectIncarnationRef; + + let (mut state, src) = u2_board(); + // The production shape: `triggers.rs` mints `Definition { definition_ref }` from the + // source's own incarnation plus the printed occurrence — built here identically. + let origin = MayTriggerOrigin::Definition { + definition_ref: TriggerDefinitionRef { + source: ObjectIncarnationRef::of(src, 3), + occurrence: TriggerDefinitionOccurrenceRef::Printed { + base_set: TriggerBaseSetInstanceRef::INITIAL, + printed_index: 0, + }, + }, + }; + let with_origin = |src: ObjectId| { + let mut ability = shape_b( + src, + Effect::Draw { + count: QuantityExpr::Fixed { value: 1 }, + target: TargetFilter::Controller, + }, + ); + ability.may_trigger_origin = Some(origin.clone()); + ability + }; + + // ── matched positive: no stored record ⇒ the gate WILL prompt ⇒ mint publishes ── + let entry = shape_b_entry(950, src, with_origin(src)); + assert!( + state.may_trigger_auto_choices.is_empty(), + "reach-guard: the positive arm runs with NO stored record" + ); + assert!( + entry_publishes_pin_slots(&state, &entry, P0) + .expect("the positive arm publishes") + .may + .is_some(), + "with no stored answer the CR 603.5 gate really asks, so the pin is spendable" + ); + + // ── negative: the SAME board with one record seeded ── + state.set_may_trigger_auto_choice( + MayTriggerAutoChoiceKey { + player: P0, + source_id: src, + origin: origin.clone(), + }, + AutoMayChoice::Decline, + ); + assert_eq!( + state.may_trigger_auto_choice(&MayTriggerAutoChoiceKey { + player: P0, + source_id: src, + origin, + }), + Some(AutoMayChoice::Decline), + "reach-guard: the mint's key must be the key the seed stored, or the negative \ + passes for the wrong reason" + ); + assert!( + entry_publishes_pin_slots(&state, &entry, P0).is_none(), + "CR 603.5: a stored auto-choice already answers this may, so a minted pin would \ + be silently unused — refuse it at the mint. Shape (B) has no other slot, so the \ + whole entry publishes nothing" + ); + } + + /// R30 — **one published `MayChoice` slot stands for exactly ONE CR 603.5 prompt.** + /// + /// CR 732.2a requires the shortcut to describe *the* sequence of choices; a schema point + /// is a choice SURFACE, so a slot that answers one prompt while the resolution opens N is + /// a schema that under-describes its own sequence. Production suppresses the single + /// up-front CR 603.5 gate for three `repeat_for` shapes and re-fires optionality PER + /// ITERATION (CR 608.2c + CR 608.2d) instead. The mint asks production's own three + /// predicates rather than re-deriving them — re-deriving is the drift defect one symbol + /// over. + /// + /// THREE ARMS, one per predicate, each with its matched positive on the same instrument: + /// * **(a) kind-driven — the reachable one.** `has_kind_driven_repeat` matches on + /// `repeat_for` and on NOTHING else (no `Effect` restriction), so an allow-listed + /// optional `PutCounter` of that shape reaches it. **(a′)** differs only in + /// `repeat_for: None`. + /// * **(b) member-driven — live for an allow-listed effect.** `Effect::Token` with + /// `attach_to: Some(ParentTarget)` (Asinine Antics' shape, named in + /// `effect_parent_ref_slots`' own doc) is inside the allow list and reaches + /// `effect_iterates_over_parent_target`. **(b′)** differs in exactly the predicate's + /// own deciding leaf: `attach_to: Some(LastCreated)` is ALSO a context ref, so the head + /// filter is still `owner`, the shape is still (B) and the `repeat_for` is still + /// `ObjectCount` — only `filter_refs_parent_target` flips. Without (b′) a blanket + /// "refuse every `ObjectCount`" would pass, which is coarser than production and a mint + /// cost. + /// * **(c) repeated optional payment — DISCLOSED as not independently reachable.** It + /// requires `Effect::PayCost`, which D4.3's scope filter refuses at conjunct (6), so no + /// certifiable offer carries such an entry. The arm asserts the mint's refusal only and + /// claims NO closed hole; it ships so the mint asks the same three questions production + /// asks. + /// + /// REVERT-PROBE: delete the three sub-conjuncts from the `may` mint ⇒ (a) and (b) FLIP TO + /// FAIL while (a′)/(b′) stay green — the pairs discriminate the conjunct, not the fixture. + #[test] + fn one_published_may_slot_stands_for_exactly_one_cr_603_5_prompt() { + use crate::types::ability::{ + AbilityCondition, AbilityCost, Effect, PtValue, QuantityExpr, QuantityRef, TargetFilter, + }; + + let (state, src) = u2_board(); + let publishes_may = |ability: ResolvedAbility, id: u64| -> bool { + let entry = shape_b_entry(id, src, ability); + entry_publishes_pin_slots(&state, &entry, P0) + .and_then(|p| p.may) + .is_some() + }; + + // ── (a) kind-driven, and (a′) its matched positive ── + let kind_driven = || { + let mut a = shape_b(src, scoped_put_counter()); + a.repeat_for = Some(QuantityExpr::Ref { + qty: QuantityRef::DistinctCounterKindsAmong { + filter: TargetFilter::Controller, + }, + }); + a + }; + assert!( + crate::game::effects::has_kind_driven_repeat(&kind_driven()), + "reach-guard: production's own predicate must say TRUE for arm (a)'s fixture" + ); + assert!( + !publishes_may(kind_driven(), 960), + "(a) CR 608.2c/608.2d: a `DistinctCounterKindsAmong` repeat fires ONE prompt PER \ + ITERATION, so a single slot would under-describe the CR 732.2a sequence" + ); + let mut kind_positive = kind_driven(); + kind_positive.repeat_for = None; + assert!( + publishes_may(kind_positive, 961), + "(a′) byte-identical except `repeat_for: None` ⇒ published, so (a) keys on the \ + repeat axis and not on `optional`, the recipient or the auto-choice conjunct" + ); + + // ── (b) member-driven, and (b′) the one-leaf matched positive ── + let token_attached = |attach: TargetFilter| { + let mut a = shape_b( + src, + Effect::Token { + name: "Cursed Role".to_string(), + power: PtValue::Fixed(1), + toughness: PtValue::Fixed(1), + types: vec!["Enchantment".to_string()], + colors: vec![], + keywords: vec![], + tapped: false, + count: QuantityExpr::Fixed { value: 1 }, + owner: TargetFilter::Controller, + attach_to: Some(attach), + enters_attacking: false, + supertypes: vec![], + static_abilities: vec![], + enter_with_counters: vec![], + }, + ); + a.repeat_for = Some(QuantityExpr::Ref { + qty: QuantityRef::ObjectCount { + filter: TargetFilter::Controller, + }, + }); + a + }; + assert!( + crate::game::effects::has_member_driven_repeat_after_hydration( + &state, + &token_attached(TargetFilter::ParentTarget) + ), + "reach-guard: the `ParentTarget` fixture must really reach \ + `effect_iterates_over_parent_target`" + ); + assert!( + !publishes_may(token_attached(TargetFilter::ParentTarget), 962), + "(b) CR 608.2c/608.2d: an `ObjectCount` repeat over a parent-target ref fires one \ + prompt per iterated member" + ); + assert!( + !crate::game::effects::has_member_driven_repeat_after_hydration( + &state, + &token_attached(TargetFilter::LastCreated) + ), + "reach-guard: `LastCreated` is also a context ref, so (b′) differs from (b) in \ + the predicate's own deciding leaf and in nothing else" + ); + assert!( + publishes_may(token_attached(TargetFilter::LastCreated), 963), + "(b′) a blanket `refuse every ObjectCount` would be coarser than production and \ + would fail here" + ); + + // ── (c) repeated optional payment — refusal asserted, reach DISCLOSED as closed ── + let repeated_payment = || { + let mut a = shape_b( + src, + Effect::PayCost { + cost: AbilityCost::Mana { + cost: crate::types::mana::ManaCost::Cost { + shards: vec![], + generic: 1, + }, + }, + scale: None, + payer: TargetFilter::Controller, + }, + ); + a.repeat_for = Some(QuantityExpr::Fixed { value: 2 }); + let mut sub = ResolvedAbility::new( + Effect::Draw { + count: QuantityExpr::Fixed { value: 1 }, + target: TargetFilter::Controller, + }, + vec![], + src, + P0, + ); + sub.condition = Some(AbilityCondition::WhenYouDo); + a.sub_ability = Some(Box::new(sub)); + a + }; + assert!( + crate::game::effects::is_repeated_optional_payment(&repeated_payment()), + "reach-guard: production's own predicate must say TRUE for arm (c)'s fixture" + ); + assert!( + !publishes_may(repeated_payment(), 964), + "(c) CR 603.12a: the payment process offers its `may` PER iteration. This arm \ + asserts the mint's refusal only — `Effect::PayCost` is outside D4.3's six-arm \ + allow list, so no certifiable offer carries such an entry and NO closed hole is \ + claimed here" + ); + } } /// FIX-1 interruptibility (memory: combo-interruptibility-acceptance-criterion) — the Kilo loop's diff --git a/crates/engine/tests/integration/loop_shortcut.rs b/crates/engine/tests/integration/loop_shortcut.rs index 15c32d6d62..a17eb8ec7d 100644 --- a/crates/engine/tests/integration/loop_shortcut.rs +++ b/crates/engine/tests/integration/loop_shortcut.rs @@ -5736,13 +5736,20 @@ fn bounded_cycle_pin_slots_enumerates_the_emblem_slot() { state.waiting_for ); let with_prompt = bounded_cycle_pin_slots(&state, P0); + // The CR 115.2 TARGETS half — this row's subject. Filtered rather than counted whole + // because the mint also admits shape (B) (may-only, no announcement choice), whose + // points are asserted separately below; before shape (B) existed the two coincided. + let targets: Vec<_> = with_prompt + .iter() + .filter(|p| matches!(p.kind, DecisionPointKind::Targets { .. })) + .collect(); assert_eq!( - with_prompt.len(), + targets.len(), emblem_entries, - "one point per qualifying SOURCE; on this board that count coincides with the \ - emblem's single entry, which is asserted above rather than assumed" + "one TARGETS point per qualifying SOURCE; on this board that count coincides with \ + the emblem's single entry, which is asserted above rather than assumed" ); - for point in &with_prompt { + for point in &targets { assert_eq!( point.slot, expected_slot, "the slot names the CR 114.2 command-zone emblem at its CR 400.7 incarnation" @@ -5759,6 +5766,32 @@ fn bounded_cycle_pin_slots_enumerates_the_emblem_slot() { declaration echo" ); } + // ── the shape-(B) half, measured on the SAME board rather than asserted elsewhere ── + // CR 603.5: three P0-controlled optional no-target triggers (sources 126, 208, 274) + // publish a `MayChoice` gate each. 126 and 208 carry 34 stack entries apiece here, so + // this count is ALSO the per-source dedupe on a real board: without it the shipped + // dump would publish 69 may points, not 3. + let may_sources: Vec<_> = with_prompt + .iter() + .filter(|p| p.kind == DecisionPointKind::MayChoice) + .map(|p| match &p.slot.source { + YieldTarget::ThisObject { source_id, .. } => *source_id, + other => panic!("a mint slot names an object source; got {other:?}"), + }) + .collect(); + assert_eq!( + may_sources, + vec![ObjectId(126), ObjectId(208), ObjectId(274)], + "CR 603.5: the may-only (shape (B)) sources this board publishes, deduped per \ + SOURCE across their 34/34/1 stack entries" + ); + for src in [ObjectId(126), ObjectId(208)] { + assert!( + state.stack.iter().filter(|e| e.source_id == src).count() > 1, + "reach-guard: {src:?} must carry MORE than one entry, or the dedupe assertion \ + above is vacuous" + ); + } // ── arm ⓑ: the SAME state at the real offer beat — one field reassigned ── state.waiting_for = WaitingFor::Priority { player: P0 }; @@ -10176,3 +10209,331 @@ fn a_recorded_loop_detect_sample_keeps_a_live_half_normalization_would_have_eras un-normalized half — would be satisfiable by a build in which the split does not exist" ); } + +// ─────────── 5d U2 / R28 — the declared template's `owner` is ENGINE-BOUND ─────────── + +/// The engine-issued offer's own point set, hand-assembled to match `r5_pin_template`'s slot. +/// +/// The R5 board's live offer publishes an EMPTY schema (`r5_reach_offer` asserts it), so a +/// NON-empty-schema declaration has to be staged. This is the tree's own idiom for staging a +/// `LoopShortcut` wait; `offer.proposer` — the firewall's engine-issued comparand — still comes +/// from `WaitingFor::LoopShortcut`, which is what the row is about. +fn r28_nonempty_schema_offer(runner: &mut GameRunner, bond: ObjectId) { + let WaitingFor::LoopShortcut { + proposer, + predicted_winner, + certificate, + schema, + } = runner.state().waiting_for.clone() + else { + panic!("staged from the live offer, never from thin air"); + }; + let slot = DecisionSlot { + source: YieldTarget::ThisObject { + source_id: bond, + incarnation: None, + trigger_description: None, + }, + index: 0, + }; + runner.state_mut().waiting_for = WaitingFor::LoopShortcut { + proposer, + predicted_winner, + certificate, + schema: ShortcutDecisionSchema { + points: vec![DecisionPoint { + slot, + kind: DecisionPointKind::Targets { + legal_targets: vec![ + TargetRef::Player(P1), + TargetRef::Player(P2), + TargetRef::Player(P3), + ], + min_targets: 1, + max_targets: 1, + ordered: false, + }, + }], + ..schema + }, + }; +} + +/// R28 arms (a)/(a′) — **CR 732.2a + CR 603.5: a declaration whose `template.owner` names +/// another seat is refused AT DECLARE.** +/// +/// `template.owner` arrives VERBATIM from the client (`GameAction::DeclareShortcut { template }` +/// is forwarded whole) and it is the comparand the drive's seat guard uses to decide whose +/// CR 603.5 choice a pin may answer. Without a declare-time binding to the engine-issued +/// `LoopShortcutOffer.proposer`, that guard compares an attacker-chosen value against itself: +/// a declaration carrying `owner: ` satisfies `*player != template.owner` exactly +/// when the prompt's recipient IS that other seat, and the proposer's pinned value is +/// dispatched as the other seat's `GameAction::DecideOptionalEffect`. +/// +/// **(a′) is the reach-guard**: the byte-identical declaration with `owner = P0` builds the +/// proposal and opens APNAP, proving the fixture reaches the firewall and that (a) is keyed to +/// the `owner` axis rather than to `predictability_gate` / `validate_pins` / the count cap. +/// +/// REVERT-PROBE: delete `if template.as_ref().is_some_and(|t| t.owner != offer.proposer) { .. }` +/// from `handle_declare_shortcut` ⇒ the wrong-owner declaration is accepted, a proposal is +/// built, APNAP opens ⇒ **(a) FLIPS TO FAIL** while (a′) stays green. +#[test] +fn r28_a_declared_template_owning_another_seat_is_refused_at_declare() { + for hostile in [false, true] { + let (mut runner, bond, _hexproof, _lives) = r5_reach_offer(); + r28_nonempty_schema_offer(&mut runner, bond); + let WaitingFor::LoopShortcut { schema, .. } = runner.state().waiting_for.clone() else { + panic!("staged offer"); + }; + assert_eq!( + schema.points.len(), + 1, + "reach-guard: this arm runs on a NON-empty schema, so `predictability_gate` and \ + `validate_pins` really run and (a′) proves they PASS" + ); + + let mut template = r5_pin_template(bond, P1, 1); + if hostile { + template.owner = P1; + } + assert_eq!( + template.owner, + if hostile { P1 } else { P0 }, + "the two arms differ in exactly one field" + ); + let before = runner.state().clone(); + let result = runner + .act(GameAction::DeclareShortcut { + count: IterationCount::Fixed(1), + template: Some(template), + }) + .expect("the declaration is dispatched either way — refusal is a HANDBACK"); + + if hostile { + // (a) refused into the manual handback. + assert!( + matches!(runner.state().waiting_for, WaitingFor::Priority { .. }), + "(a) CR 800.4a: a wrong-`owner` declaration hands priority back, got {:?}", + runner.state().waiting_for + ); + assert!( + !matches!( + runner.state().waiting_for, + WaitingFor::RespondToShortcut { .. } + ), + "(a) no `ShortcutProposal` may be built" + ); + assert!( + result.events.is_empty(), + "(a) `handle_declare_shortcut` pushes NO events at all, so this is an exact \ + assertion rather than a wildcard: {:?}", + result.events + ); + assert_eq!( + before.players.iter().map(|p| p.life).collect::>(), + runner + .state() + .players + .iter() + .map(|p| p.life) + .collect::>(), + "(a) nothing was driven" + ); + } else { + // (a′) the matched positive: the proposal IS built and APNAP opens. + let WaitingFor::RespondToShortcut { proposal, .. } = &runner.state().waiting_for else { + panic!( + "(a′) the honest declaration must open APNAP, got {:?}", + runner.state().waiting_for + ); + }; + assert_eq!( + proposal.template.as_ref().map(|t| t.owner), + Some(P0), + "(a′) the proposal carries the engine-bound owner" + ); + } + } +} + +/// R28 arm (a″) — **the firewall's PLACEMENT, which no other arm can see.** +/// +/// The firewall sits OUTSIDE `if !offer.schema.points.is_empty()`. On an EMPTY-schema offer +/// that block is skipped entirely, so a `Some(template)` declaration would otherwise reach the +/// proposal without passing any template validation at all — `predictability_gate` and +/// `validate_pins` both live inside it. Arms (a)/(a′) run on a non-empty schema and therefore +/// pass whether the firewall is inside the block or outside it. +/// +/// The R5 offer's schema is empty (asserted by `r5_reach_offer`), so this arm reaches exactly +/// that path. +/// +/// REVERT-PROBE: move the firewall INSIDE the `!offer.schema.points.is_empty()` block ⇒ the +/// wrong-owner declaration is accepted here ⇒ **(a″) FLIPS TO FAIL** while (a)/(a′) stay green. +#[test] +fn r28_a_the_owner_firewall_is_reached_on_an_empty_schema_offer_too() { + // matched positive first: the empty-schema path DOES accept an honest declaration. + let (mut runner, bond, _h, _l) = r5_reach_offer(); + runner + .act(GameAction::DeclareShortcut { + count: IterationCount::Fixed(1), + template: Some(r5_pin_template(bond, P1, 1)), + }) + .expect("declare"); + assert!( + matches!( + runner.state().waiting_for, + WaitingFor::RespondToShortcut { .. } + ), + "(a″) reach-guard: an EMPTY-schema offer accepts an owner-correct declaration, so the \ + refusal below is the firewall and not the empty-schema path refusing everything" + ); + + let (mut runner, bond, _h, _l) = r5_reach_offer(); + let mut template = r5_pin_template(bond, P1, 1); + template.owner = P1; + let result = runner + .act(GameAction::DeclareShortcut { + count: IterationCount::Fixed(1), + template: Some(template), + }) + .expect("dispatched"); + assert!( + matches!(runner.state().waiting_for, WaitingFor::Priority { .. }), + "(a″) the firewall runs BEFORE the `!points.is_empty()` guard, so an empty-schema \ + offer is covered too, got {:?}", + runner.state().waiting_for + ); + assert!(result.events.is_empty(), "(a″) no events on the handback"); +} + +/// R28 arms (c)/(c′)/(c″) — **the RESTORE ingress, the only one the declare firewall cannot +/// see, closed at the single consumption chokepoint.** +/// +/// `ShortcutProposal` is plainly serialized inside `GameState.waiting_for`, and the +/// untrusted-restore scrubber rewrites only the two PRE-CAST waits — so a persisted +/// `WaitingFor::RespondToShortcut` decodes with its template intact, having never run +/// `handle_declare_shortcut`. `apply_confirmed_shortcut` is the sole route into both drives, +/// which is why the re-validation conjunct joins ITS existing fail-closed guard. +/// +/// Driven over BOTH trust branches, because `Deserialize for PersistedGameState` dispatches on +/// the presence of a top-level `"state"` key and only the RAW arm runs the scrubber. Asserting +/// one branch would leave the other untested — and (c″) below shows they really are different +/// code paths rather than one path asserted twice. +/// +/// * **(c)** `t.owner = P1` on a `proposal.proposer = P0` proposal ⇒ Accept is refused into the +/// manual handback: priority to a living seat, ZERO cycles committed, no `GameOver`. +/// * **(c′)** MATCHED POSITIVE, byte-identical except that one field ⇒ the drive runs and +/// commits. This is the reach-guard proving the fixture reaches `apply_confirmed_shortcut` at +/// all, and that (c) is keyed to the `owner` axis rather than to `is_alive`, the count cap or +/// the conformance check. +/// * **(c″-Raw)** the scrubber RUNS on this branch and leaves the wait untouched — which is the +/// mechanism that makes (c) necessary. **(c″-Trusted)** is a DIFFERENT claim: the scrubber is +/// not on that path at all, so the arm asserts survival across the trusted envelope and +/// claims nothing about the scrubber. +/// +/// REVERT-PROBE: delete the `|| proposal.template.as_ref().is_some_and(|t| t.owner != +/// proposal.proposer)` conjunct from `apply_confirmed_shortcut`'s guard ⇒ the round-tripped +/// wrong-owner proposal drives and commits ⇒ **(c) FLIPS TO FAIL** on both branches, while +/// (c′) stays green (it never depended on the conjunct). +#[test] +fn r28_c_a_restored_proposal_with_a_foreign_template_owner_is_refused_at_consumption() { + for hostile in [false, true] { + for trusted in [false, true] { + let label = format!("hostile={hostile} trusted={trusted}"); + let (mut runner, bond, _h, lives) = r5_reach_offer(); + runner + .act(GameAction::DeclareShortcut { + count: IterationCount::Fixed(1), + template: Some(r5_pin_template(bond, P1, 1)), + }) + .expect("declare opens APNAP"); + + // Tamper the persisted wait exactly as a hand-edited dump would, THEN round-trip. + // The declare firewall has already run and passed on the honest value, so nothing + // below can be attributed to it. + let WaitingFor::RespondToShortcut { proposal, .. } = + &mut runner.state_mut().waiting_for + else { + panic!("{label}: APNAP must be open"); + }; + let expected_owner = if hostile { P1 } else { P0 }; + proposal + .template + .as_mut() + .expect("the declared template rode into the proposal") + .owner = expected_owner; + // MEASURED CONSTRAINT ON THIS INGRESS, applied to BOTH arms so they stay + // byte-identical except `owner`: `ShortcutProposal.per_cycle` carries a + // `PlayerId`-keyed resource map, and `PlayerId` cannot deserialize from a JSON + // object KEY — so a persisted `RespondToShortcut` whose proposal carries a + // per-cycle signature fails to decode with `invalid type: string "0", expected + // u8`. That is a pre-existing serde asymmetry this change does not touch; its + // consequence here is that ingress I3 is reachable only for `per_cycle: None` + // proposals, which is exactly the shipped `Some(template)` population. The guard + // under test does not read `per_cycle`, so nulling it costs the row nothing. + proposal.per_cycle = None; + + let raw = serde_json::to_value(runner.state()).expect("state serializes"); + let payload = if trusted { + serde_json::json!({ "state": raw }) + } else { + raw + }; + let restored: GameState = + serde_json::from_value::(payload) + .expect("decodes through the production boundary") + .into_game_state(); + + // (c″) — the wait and its tampered owner SURVIVE the decode. On the Raw branch the + // scrubber ran and left it alone (its `semantic_owner` match names only the two + // pre-cast waits); on the Trusted branch the scrubber is not on the path at all. + let WaitingFor::RespondToShortcut { proposal, .. } = &restored.waiting_for else { + panic!( + "{label}: (c\u{2033}) the restore must NOT drop the wait — otherwise (c) \ + would pass by a different mechanism entirely; got {:?}", + restored.waiting_for + ); + }; + assert_eq!( + proposal.template.as_ref().map(|t| t.owner), + Some(expected_owner), + "{label}: (c\u{2033}) the tampered owner reaches `apply_confirmed_shortcut` \ + unchanged" + ); + assert_eq!( + proposal.proposer, P0, + "{label}: the proposer is engine state" + ); + + let mut restored_runner = GameRunner::from_state(restored); + accept_all_opponents(&mut restored_runner); + + let after: Vec = restored_runner + .state() + .players + .iter() + .map(|p| p.life) + .collect(); + if hostile { + assert!( + matches!( + restored_runner.state().waiting_for, + WaitingFor::Priority { .. } + ), + "{label}: (c) CR 800.4a manual handback, got {:?}", + restored_runner.state().waiting_for + ); + assert_eq!( + after, lives, + "{label}: (c) ZERO cycles committed — the board is byte-equal on life" + ); + } else { + assert_ne!( + after, lives, + "{label}: (c\u{2032}) the honest proposal DRIVES — without this the \ + hostile arm's `no delta` assertion is vacuous" + ); + } + } + } +} From 4f4c651489d2daaa0d561c5ce86256c51e540877 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sat, 1 Aug 2026 19:39:43 -0500 Subject: [PATCH 15/62] fix(engine): re-derive the loop-shortcut probe budget from the offering beat MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Measured through `try_offer_bounded_cycle_shortcut_metered`, three real 4p dumps driven through `apply()` at an unbounded cap: dina beat 19 spent=13 asks=13 skips=0 ring=3 stack=10 OFFER dina beat 45 spent=73 OFFER (post-fast-forward) dellian max spent=107 asks=5 ring=16 stack=177 no offer in 200 beats f4 max spent=0 no offer in 200 beats R16(ii-a): demand at the corpus's acceptance beat is 13, so the shipped cap of 12 starved it by exactly one charge. PROBE_BUDGET 12 -> 26 (2x the measured demand; the unexempted sweep measures 96-107, so an unexempted classification still exhausts and still refuses fail-closed). R16(ii-b), recorded: the max spend across ALL mintable beats is 107, at non-offering dellian beats where refusal is correct. BOTH AXES at the offering beat, per the R33 escalation: basis = B (`ResourceSignatureOnly`); the within-basis-A disjunct has NO VALUE — basis A certified 0 times across all three dumps (129 basis-B certifications). Named-dump caveat: dellian and F4 reached no offering beat in 200 beats under `dump_drive_one_beat`, so the witness is dina. Consequence for the cost table (§3 D4.3): the frozen exemption's speed-up applies at dellian-shaped beats, which exist in-corpus but never offer under the shipped driver. THE OFFERING BEAT PAYS THE FULL UNEXEMPTED SWEEP — `skips=0` there — so the 854x headline no longer describes the beat this class actually offers on. `MintMeter` gains `certification`, the only surface on which the certifying disjunct is observable: both bases publish `frames_per_period`, so the published `LoopCertificate` discriminates in neither direction. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/analysis/resource.rs | 983 ++++++++++++++---- crates/engine/src/game/engine.rs | 370 ++++++- .../engine/tests/integration/loop_shortcut.rs | 100 ++ 3 files changed, 1224 insertions(+), 229 deletions(-) diff --git a/crates/engine/src/analysis/resource.rs b/crates/engine/src/analysis/resource.rs index ea46dcf418..511c230734 100644 --- a/crates/engine/src/analysis/resource.rs +++ b/crates/engine/src/analysis/resource.rs @@ -46,8 +46,31 @@ use crate::types::zones::Zone; /// the meter. Defining it one module down lets the constructor be narrowed /// without also narrowing it away from this module's own wrappers. mod verdict_memo { + use std::collections::BTreeMap; + + use crate::game::engine::{CapAuthority, EntryPinSlots}; + use crate::game::resolution_prompt::ResolutionChoiceFreedom; + use crate::types::game_state::{GameState, StackEntry}; + use crate::types::identifiers::ObjectId; + use crate::types::player::PlayerId; + /// The shipped probe cap, per classification run. - pub(crate) const PROBE_BUDGET: u32 = 12; + /// + /// RE-DERIVED FROM MEASUREMENT. The retired `12` was fitted to per-mint charge + /// counts (dellian 2–4 / F4 1) taken over the CURRENT STACK only, before the + /// verdict door existed. Over the door's derived `(frame, entry)` population the + /// announcement gate mints keys too, and the measured demand at the corpus's one + /// offering beat — dina `beat=19`, `ring=3 stack=10`, driven through `apply()` — + /// is **13 charges** (`asks=13`, one charge per key), i.e. `12` starved the + /// acceptance offer by exactly one. + /// + /// `26` is `2 ×` that measured demand: an offering beat may carry double the + /// observed key population (≈ a 20-entry stack at the measured 1.3 keys/entry) + /// and still certify. The ceiling is not arbitrary either — it stays far below + /// the unexempted sweep the frozen exemption exists to prevent, whose demand + /// measures **96–107** on dellian's `ring=16 stack≈176` beats, so an unexempted + /// full-stack classification still exhausts and still refuses fail-closed. + pub(crate) const PROBE_BUDGET: u32 = 26; /// CR 732.2a: cost is a COVERAGE knob, never a soundness knob — an /// unaffordable probe degrades to honest-red (no certificate, no offer), @@ -61,17 +84,20 @@ mod verdict_memo { pub(crate) struct ProbeBudget { remaining: u32, /// Latched by [`ProbeBudget::try_charge_one`] so an exhaustion can be - /// ATTRIBUTED rather than inferred from a zero remainder. Its production - /// reader is the metered mint's exhaustion accounting, which is not - /// built yet; until then the latch is exercised by this module's own - /// unit row, which is why the accessor is `cfg(test)`. - #[cfg_attr(not(test), allow(dead_code))] + /// ATTRIBUTED rather than inferred from a zero remainder. Read in + /// production by [`PeriodVerdicts::denied`], which the metered mint + /// carries out in its `MintMeter`. denied: bool, } impl ProbeBudget { - /// `pub(super)` while the parent module is the only constructor site. - pub(super) fn new(cap: u32) -> Self { + /// MODULE-PRIVATE. Every budget is born inside this module, so the + /// container that owns the meter is the only thing that can start a + /// spend — a fresh budget compiled beside a consumer would be a spend + /// the mint's meter never sees. Re-adding a + /// `ProbeBudget::new(PROBE_BUDGET)` call in `analysis::resource` is + /// E0624, which is the closure stated as a compile fact. + fn new(cap: u32) -> Self { Self { remaining: cap, denied: false, @@ -90,23 +116,243 @@ mod verdict_memo { } /// Did any charge get denied against this budget? - #[cfg(test)] pub(crate) fn denied(&self) -> bool { self.denied } - /// TEST-ONLY constructor. `new` stays `pub(super)` so no PRODUCTION site - /// outside this module's own wrappers can mint a budget whose spend - /// would be invisible to a meter; a `cfg(test)` door cannot widen that, - /// because it does not exist in a production build. + /// TEST-ONLY constructor. `new` is module-private so no site outside + /// this module can mint a budget whose spend would be invisible to a + /// meter; a `cfg(test)` door cannot widen that, because it does not + /// exist in a production build. #[cfg(test)] pub(crate) fn for_test(cap: u32) -> Self { Self::new(cap) } } + + /// A frame's position in ONE container's OWN `frames` table. + /// + /// The field is private and there is no public constructor and no + /// `From`: a `FrameIx` can only be minted by + /// [`PeriodVerdicts::frame_ix`], which resolves a `&GameState` by POINTER + /// IDENTITY against the very table [`PeriodVerdicts::verdict`] indexes. No + /// index arithmetic exists anywhere on the mint path, so the + /// window-relative off-by-`idx` class is unconstructible rather than merely + /// unobserved — forging `FrameIx(3)` one module out is E0603. + #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] + pub(crate) struct FrameIx(usize); + + /// Everything ONE `(frame, entry)` pair answers, computed on first demand by + /// [`PeriodVerdicts::verdict`] and memoized for the rest of the mint. + /// + /// Every field is produced by a function whose signature takes NO published + /// slots, which is what removes the key-completeness obligation: a slot list + /// is a *window* fact and would make the memo key incomplete, so a fourth + /// field that reads one is a design error rather than an addition. + pub(crate) struct EntryVerdict { + /// THE MINT, CACHED — `entry_publishes_pin_slots(frame, entry, + /// proposer)` with the CONTAINER's bound proposer. A proposer-less + /// (`unproven`) container computes `None` for every key: nothing is + /// published when no offer binds a proposer, which is the mint's own + /// answer rather than an invented one. + pub(crate) published: Option, + /// `stack_entry_resolution_choice_freedom(frame, entry, budget)` on the + /// ability AS IT STANDS. + pub(crate) primary: ResolutionChoiceFreedom, + /// CR 603.5: the optional-cleared re-classification the relief used to + /// compute inline. `None` for an entry whose mint publishes no `may` + /// slot, and for one whose resolution scope cannot bind (CR 603.4). + pub(crate) residual: Option, + } + + /// CR 732.2a: the ONE per-mint verdict door — a TOTAL, `(FrameIx, + /// ObjectId)`-keyed, compute-on-miss memo that OWNS the probe budget. + /// + /// Totality is scoped honestly: [`PeriodVerdicts::verdict`] is total over + /// every `FrameIx` this container minted, and MINTING + /// ([`PeriodVerdicts::frame_ix`]) is the membership question — it returns + /// `Option` and every consumer treats `None` as a refusal, so a frame + /// outside the period costs a certificate, never a wrong one. + pub(crate) struct PeriodVerdicts<'a> { + /// `ring ++ [current]` — PRIVATE and not indexable, so a `FrameIx` + /// cannot be turned back into a board by the parent module. + frames: Vec<&'a GameState>, + memo: BTreeMap<(FrameIx, ObjectId), EntryVerdict>, + /// PRIVATE: the field route to a fresh spend is E0616 from the parent + /// module, and the construction route is shut by `new`'s module + /// privacy above. + budget: ProbeBudget, + /// The cap this container was born at, so `spent()` is a difference + /// rather than a second counter that could drift from the budget. + cap: u32, + /// The THIRD argument of the memoized mint, fixed at construction, so + /// the EFFECTIVE key is `(proposer, FrameIx, ObjectId)` with the first + /// component constant per container. + proposer: Option, + conjunct6_asks: u32, + conjunct6_frozen_skips: u32, + conjunct4_scans: u32, + } + + impl<'a> PeriodVerdicts<'a> { + fn build( + ring: &[&'a GameState], + current: &'a GameState, + proposer: Option, + cap: u32, + ) -> Self { + let mut frames: Vec<&'a GameState> = ring.to_vec(); + frames.push(current); + Self { + frames, + memo: BTreeMap::new(), + budget: ProbeBudget::new(cap), + cap, + proposer, + conjunct6_asks: 0, + conjunct6_frozen_skips: 0, + conjunct4_scans: 0, + } + } + + /// The default-cap constructor, bound to the mint's own proposer. + /// + /// `pub(super)` and not `pub(crate)`: every in-scope construction site + /// lives in `analysis::resource` or a descendant, while an out-of-file + /// fresh container — whose spend the mint's meter would never see — is + /// E0624. The OFFER path constructs through + /// [`PeriodVerdicts::for_period_with_cap`] instead, because + /// `verdict_memo` cannot mint the `CapAuthority` that door demands. + /// + /// Every U3 caller is a `#[cfg(test)]` site, so the plain lib target sees + /// this as dead (U1's `denied()` precedent). Its production reader is the + /// still-unwritten R22 row; keeping the gate `not(test)`-scoped means that + /// row lands with no annotation churn. + #[cfg_attr(not(test), allow(dead_code))] + pub(super) fn for_period( + ring: &[&'a GameState], + current: &'a GameState, + proposer: PlayerId, + ) -> Self { + Self::build(ring, current, Some(proposer), PROBE_BUDGET) + } + + /// The cap-parameterised twin — the ONLY budget-raise/lower channel, + /// and the reason it is safe is CAPABILITY rather than visibility: the + /// final parameter is a token whose tuple constructor is private to + /// `game::engine`, the metered seam's own module, so a fresh + /// arbitrary-cap container built anywhere else is E0603. + /// + /// `for_period` is this function at `cap = PROBE_BUDGET`; both construct + /// through the module-private `ProbeBudget::new`. + pub(crate) fn for_period_with_cap( + ring: &[&'a GameState], + current: &'a GameState, + proposer: PlayerId, + cap: u32, + _auth: CapAuthority, + ) -> Self { + Self::build(ring, current, Some(proposer), cap) + } + + /// Every other path (including the unscoped sibling): frames = + /// `[current]`, NO proposer ⇒ nothing published ⇒ no relief. That is + /// byte-identical to the pre-change unproven behaviour, where relief + /// died on `scope.pinned == None` before any mint call. + pub(super) fn unproven(current: &'a GameState) -> Self { + Self::build(&[], current, None, PROBE_BUDGET) + } + + /// THE ONLY `FrameIx` MINT. Resolves a frame to its position in + /// `self.frames` by `std::ptr::eq` — the same table `verdict` reads, so + /// the returned index is correct BY IDENTITY, not by arithmetic. + /// `rposition`, so the only conceivable duplicate (one pointer appearing + /// twice) resolves newest; a duplicate pointer is the same state, hence + /// the same verdict. + /// + /// `None` ⇒ the frame is not in this period ⇒ the CALLER refuses. That + /// is what makes "the memo's last frame IS the caller's current" + /// structural rather than a `debug_assert` compiled out of release. + pub(crate) fn frame_ix(&self, frame: &GameState) -> Option { + self.frames + .iter() + .rposition(|f| std::ptr::eq(*f, frame)) + .map(FrameIx) + } + + /// THE ONE DOOR. Computes on miss against `self.frames[f.0]` — the memo, + /// never the caller, converts `FrameIx` back to a board — charges the + /// OWNED budget, and memoizes. Total over minted keys: it returns a + /// value, never an `Option`, so there is no miss contract to get wrong. + pub(crate) fn verdict(&mut self, f: FrameIx, entry: &StackEntry) -> &EntryVerdict { + let key = (f, entry.id); + if !self.memo.contains_key(&key) { + let frame = self.frames[f.0]; + let published = self + .proposer + .and_then(|p| crate::game::engine::entry_publishes_pin_slots(frame, entry, p)); + let primary = + super::stack_entry_resolution_choice_freedom(frame, entry, &mut self.budget); + let residual = match published.as_ref().and_then(|p| p.may.as_ref()) { + Some(_) => { + super::optional_cleared_classification(frame, entry, &mut self.budget) + } + None => None, + }; + self.memo.insert( + key, + EntryVerdict { + published, + primary, + residual, + }, + ); + } + &self.memo[&key] + } + + /// Read-only: the bound proposer, for the relief-side agreement guard. + pub(crate) fn proposer(&self) -> Option { + self.proposer + } + + /// THE METER: charges taken against this container's one budget. + pub(crate) fn spent(&self) -> u32 { + self.cap - self.budget.remaining + } + + /// At least one charge was REFUSED — the exhaustion fact, attributed + /// rather than inferred from a zero remainder. + pub(crate) fn denied(&self) -> bool { + self.budget.denied() + } + + /// Item (6) loop bodies that reached the verdict door. + pub(crate) fn conjunct6_asks(&self) -> u32 { + self.conjunct6_asks + } + /// Frozen `continue`s taken in item (6) — the exemption, counted. + pub(crate) fn conjunct6_frozen_skips(&self) -> u32 { + self.conjunct6_frozen_skips + } + /// Calls of `stack_entry_reads_projected_resource` from item (4)'s + /// `.any()`, which is the only body change item (4) takes. + pub(crate) fn conjunct4_scans(&self) -> u32 { + self.conjunct4_scans + } + pub(crate) fn note_conjunct6_ask(&mut self) { + self.conjunct6_asks += 1; + } + pub(crate) fn note_conjunct6_frozen_skip(&mut self) { + self.conjunct6_frozen_skips += 1; + } + pub(crate) fn note_conjunct4_scan(&mut self) { + self.conjunct4_scans += 1; + } + } } -pub(crate) use verdict_memo::{ProbeBudget, PROBE_BUDGET}; +pub(crate) use verdict_memo::{FrameIx, PeriodVerdicts, ProbeBudget, PROBE_BUDGET}; /// WUBRG + colorless, the canonical index order used by [`ResourceVector::mana`]. /// @@ -1072,7 +1318,7 @@ pub(crate) fn ring_delta_signature(state: &GameState) -> Option<(u32, ResourceVe .map(|f| &f.normalized) .collect(); if !window.windows(2).all(|w| { - window_scope_from_cover_frames(w[0], w[1], None) + window_scope_from_cover_frames(w[0], w[1], None, None) .phase_invariant .is_some() }) { @@ -1227,6 +1473,182 @@ pub fn board_delta(before: &GameState, after: &GameState) -> BoardDelta { BoardDelta { added, removed } } +/// CR 732.2a: WHICH certificate a window's touch is derived under. +/// +/// The frozen exemption's extrapolation limb needs BOTH a board-level premise +/// that the certified period cannot SHRINK the stack (P2) AND the Karp–Miller +/// read-surface guard that makes the fast-forward the repetition of the observed +/// period (P4). Exactly one certifying disjunct supplies both, so the exemption +/// is keyed to the DISJUNCT rather than to the basis — as a type rather than a +/// call-site convention, because a convention an executor drops compiles and is +/// fail-OPEN. +/// +/// Three variants, two of which behave identically today, and that is +/// deliberate: collapsing the equality disjunct onto [`PeriodCertification:: +/// ResourceSignatureOnly`] would make the type lie about provenance (equality +/// DOES consult a board predicate), and a mislabel is the fail-open re-entry +/// path — the obvious future "fix" for an equality pair tagged +/// `ResourceSignatureOnly` is to retag it `BoardCovered`. +/// `pub` rather than `pub(crate)` for ONE reason, named so a future reader does not +/// widen it further: it is the type of [`crate::game::engine::MintMeter`]'s +/// `certification` field, the only surface on which the certifying disjunct is +/// observable at all. It is not serialized, not a variant on any gated engine enum, +/// and no card-data export reads it. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum PeriodCertification { + /// Basis A, COVER disjunct — the pair passed + /// [`loop_states_cover_modulo_growth_pinned`]. P2: item (2)'s `stack_covers` + /// ⇒ strictly growing depth. P4: items (4)/(5) ⇒ no current-stack entry and + /// no live fire-time condition reads a still-projected axis. This is the + /// ONLY value under which `frozen_ids` is non-empty. + BoardCovered, + /// Basis A, EQUALITY disjunct — the pair passed + /// [`loop_states_equal_modulo_resources`]. P2 holds (the stack is compared + /// exactly ⇒ constant depth) but P4 does NOT: that predicate has no items + /// (4)/(5), and this crate says so in its own words — the Karp–Miller NOTE + /// above [`loop_states_cover_modulo_growth`] ("makes the SAME extrapolation + /// with NONE of these") and that predicate's own inherited-assumption + /// section. A replacement that arms mid-extrapolation is exactly the route + /// P4 forecloses, so `frozen_ids` is forced EMPTY here. The shipped + /// constant-depth 2p drain detection is unaffected: this value narrows only + /// the NEW subtraction. + BoardEqualOnly, + /// Basis B — [`ring_delta_signature`] only, which by its own doc "does not + /// consult a board predicate". Neither P2 nor P4 ⇒ `frozen_ids` is forced + /// EMPTY and the resolution gate scans every current-stack entry, exactly as + /// before this change. + ResourceSignatureOnly, +} + +/// CR 732.2a + CR 608.1: what ONE certified period actually announced, and which +/// current-stack entries the window proves it never touched. +/// +/// Derived from the retained ring window `[cert_prior .. current]` — never from +/// the offer-beat stack snapshot. Its frames and entries are the ring sample's +/// **LIVE** halves, never `normalize_for_loop()` products: normalization zeroes +/// `next_object_id` and strips trigger identity, so a normalized frame is a +/// CR 104.4b comparand and not an evaluation board. +/// +/// Fail-closed both ways: an id the window cannot prove frozen is TOUCHED +/// (scanned/refused as before), and an entry the window never shows announcing +/// is not enumerable for pins (the offer under-publishes ⇒ the choice gate +/// refuses ⇒ no offer). +#[derive(Debug)] +pub(crate) struct PeriodTouch<'a> { + /// `(carrying_frame, entry)` for every entry that ANNOUNCED inside the + /// window: present on frame `i`'s stack, absent from frame `i-1`'s (by + /// `StackEntry.id`). The carrying frame is the state the entry is evaluated + /// against — CR 603.3d announcement choices are a property of the board the + /// ability was put on the stack against. + pub(crate) announced: Vec<(&'a GameState, &'a StackEntry)>, + /// Entry ids of `current.stack` that the window proves FROZEN: the same id + /// at the same index in EVERY window frame AND in `current`. CR 608.1: only + /// the top of the stack resolves, so an entry that held its `(index, id)` + /// through the whole window neither announced nor resolved in it. + /// + /// NON-EMPTY ONLY UNDER [`PeriodCertification::BoardCovered`]: the + /// subtraction is the one fail-open half of this type, and the other two + /// certificates do not supply the premises it rests on. + pub(crate) frozen_ids: BTreeSet, +} + +/// CR 732.2a: derive one window's [`PeriodTouch`] under the certificate its +/// caller actually holds. +/// +/// `window` is `ring_live[cert_idx..]`, oldest first; the observed frame +/// sequence is `window ++ [current]`. `announced` is IDENTICAL on all three +/// certificate values — widening the announced set is the fail-CLOSED direction +/// — and only the frozen subtraction is keyed. +pub(crate) fn certified_period_touch<'a>( + window: &[&'a GameState], + current: &'a GameState, + cert: PeriodCertification, +) -> PeriodTouch<'a> { + if window.is_empty() { + // CR 608.1 + CR 732.2a: with NO window frame there is no transition to + // observe, so there is no frozen proof and no observed period; the + // honest degenerate reading is "every current entry may announce", + // which is exactly the snapshot mint this function's alias replaces. + return PeriodTouch { + announced: current.stack.iter().map(|e| (current, e)).collect(), + frozen_ids: BTreeSet::new(), + }; + } + + let mut announced: Vec<(&'a GameState, &'a StackEntry)> = Vec::new(); + let mut prev_ids: HashSet = window[0].stack.iter().map(|e| e.id).collect(); + for frame in window + .iter() + .skip(1) + .copied() + .chain(std::iter::once(current)) + { + for entry in &frame.stack { + if !prev_ids.contains(&entry.id) { + announced.push((frame, entry)); + } + } + prev_ids = frame.stack.iter().map(|e| e.id).collect(); + } + + // The fail-open subtraction, and the ONLY thing the certificate keys. Taken + // BEFORE the frozen walk, so a non-cover certificate never pays it either. + if !matches!(cert, PeriodCertification::BoardCovered) { + return PeriodTouch { + announced, + frozen_ids: BTreeSet::new(), + }; + } + + let frozen_ids = current + .stack + .iter() + .enumerate() + .filter(|(index, entry)| { + window + .iter() + .all(|frame| frame.stack.get(*index).map(|e| e.id) == Some(entry.id)) + }) + .map(|(_, entry)| entry.id) + .collect(); + PeriodTouch { + announced, + frozen_ids, + } +} + +/// CR 603.5 + CR 603.4 + CR 608.2k: re-classify ONE entry's ability with its +/// published "may" gate discharged, on the board `resolve_top` would hand the +/// resolver — this entry off the stack, resolution scope bound. +/// +/// The ONE classifier answers the counterfactual; this module never +/// re-implements the six independent reasons the classifier returns `MayPrompt` +/// for. `None` ⇒ not a triggered ability, or the resolution scope cannot bind, +/// both of which are refusals rather than relief. +fn optional_cleared_classification( + frame: &GameState, + entry: &StackEntry, + budget: &mut ProbeBudget, +) -> Option { + let StackEntryKind::TriggeredAbility { ability, .. } = &entry.kind else { + return None; + }; + let mut without_may_gate = (**ability).clone(); + without_may_gate.optional = false; + let mut board = frame.clone(); + board.stack.retain(|e| e.id != entry.id); + if !crate::game::stack::bind_resolution_scope(&mut board, entry, None) { + return None; + } + Some( + crate::game::resolution_prompt::ability_resolution_choice_freedom( + &board, + &without_may_gate, + budget, + ), + ) +} + /// CR 732.2a: the facts a CALLER has PROVED about the loop window it is asking a /// window predicate to certify. Every field is a *proof obligation discharged by the /// caller*, never a request: a caller that has proved nothing passes @@ -1259,6 +1681,14 @@ pub(crate) struct LoopWindowScope<'a> { /// caller proved the EXACT set of card ids this window casts — `Some(&[])` for a /// window that provably casts nothing. `None` means NO PROOF, i.e. scan everything. cast_card_ids: Option<&'a [CardId]>, + /// CR 732.2a + CR 608.1: `Some(touch)` iff the caller proved WHICH pairs the + /// certified period announced and which current-stack entries it left + /// frozen. A Copy HANDLE, never the owned value — [`PeriodTouch`] owns a + /// `Vec` and a `BTreeSet`, so an owned field would be E0204 against this + /// struct's shipped `Copy` derive, while `Option<&T>` is `Copy` regardless + /// of `T`. `None` means NO PROOF: nothing is exempt and nothing is + /// enumerable, i.e. the pre-change width. + period: Option<&'a PeriodTouch<'a>>, } /// CR 732.2a: the per-iteration choice slots ONE offer published, carried together with the @@ -1289,6 +1719,11 @@ impl LoopWindowScope<'static> { sole_driver: None, pinned: None, cast_card_ids: None, + // DELIBERATE, and it is the whole meaning of this constructor: a + // caller that has proved nothing gets byte-identical pre-change + // behaviour. `Option<&PeriodTouch>` is const-constructible as + // `None`, so this stays a `const fn` on `LoopWindowScope<'static>`. + period: None, } } } @@ -1320,6 +1755,7 @@ fn window_scope_from_cover_frames<'a>( pa: &GameState, pb: &GameState, pinned: Option>, + period: Option<&'a PeriodTouch<'a>>, ) -> LoopWindowScope<'a> { // (p1) same turn, (p2) same step-granular phase, (p3) no pending extra phase in // either frame (CR 500.8). @@ -1352,6 +1788,11 @@ fn window_scope_from_cover_frames<'a>( pinned, // 2b's axis (the PROJECTED covers), derived at its own call site. cast_card_ids: None, + // From the parameter: the SINGLE scope authority must be able to carry + // the period proof, or the cover disjunct's own caller would have to + // assemble a scope itself — which is exactly what the private fields + // exist to prevent. + period, } } @@ -1378,24 +1819,44 @@ fn window_scope_from_cover_frames<'a>( /// Fail-closed in every branch: no published pins, a non-qualifying entry, a missing source /// object, or a mid-construction entry ⇒ not pinned ⇒ the gate that called this keeps /// rejecting. +/// THE BOARD IS THE PAIR'S CARRYING FRAME — the identical `&GameState` the caller +/// handed [`PeriodVerdicts::frame_ix`] to mint `f`, never a second board. That is +/// what makes the two halves agree by construction: the cached `published` is +/// `entry_publishes_pin_slots(frames[f], entry, proposer)`, so the mint half and +/// the CR 603.3c half read ONE board per key. Dropping the board (and with it the +/// CR 603.3c conjunct) would COMPILE and would be fail-OPEN, which is why it is a +/// parameter rather than something a `FrameIx` is expected to recover: +/// `PeriodVerdicts.frames` is private to `verdict_memo`. fn entry_target_choice_is_pinned( - state: &GameState, + board: &GameState, + f: FrameIx, entry: &StackEntry, + verdicts: &mut PeriodVerdicts<'_>, scope: LoopWindowScope<'_>, ) -> bool { let Some(pins) = scope.pinned else { return false; }; - if state.pending_trigger_entry == Some(entry.id) { + // A container bound to one proposer can never relieve pins minted for + // another seat: the cached `published` IS the mint's answer for the + // container's own proposer, so consuming it under different pins would be + // reading a verdict minted for someone else. + if verdicts.proposer() != Some(pins.proposer) { + return false; + } + if board.pending_trigger_entry == Some(entry.id) { return false; } // CR 601.2c: a may-only entry (shape (B)) publishes NO target slot, so it is not // target-relieved here — its announcement freedom comes from // `stack_entry_has_no_ordering_input`'s own `targets.is_empty()` arm instead. Requiring // `Some` keeps this predicate strictly narrower than the mint, never coarser. - crate::game::engine::entry_publishes_pin_slots(state, entry, pins.proposer) - .and_then(|e| e.target) - .is_some_and(|target| pins.slots.contains(&target)) + verdicts + .verdict(f, entry) + .published + .as_ref() + .and_then(|e| e.target.as_ref()) + .is_some_and(|target| pins.slots.contains(target)) } /// CR 732.2a + CR 603.5: is this entry's RESOLUTION-time `MayPrompt` (gate (6)) fully @@ -1415,50 +1876,41 @@ fn entry_target_choice_is_pinned( /// `unless_pay`, a resolution-time target chooser, a modal header, a controller-choice /// repeat, or a CR 701.34a proliferate sub-ability keeps returning `MayPrompt` and gets no /// relief, because no published pin specifies it. +/// It performs NO classification of its own and calls the mint not at all: both +/// the published slots and the optional-cleared residual are read through the ONE +/// door, which is what keeps the relief from being a second, drifting authority. fn pinned_may_choice_relief( - state: &GameState, + f: FrameIx, entry: &StackEntry, + verdicts: &mut PeriodVerdicts<'_>, scope: LoopWindowScope<'_>, - budget: &mut ProbeBudget, ) -> Option { use crate::game::resolution_prompt::ResolutionChoiceFreedom; let pins = scope.pinned?; - let published = crate::game::engine::entry_publishes_pin_slots(state, entry, pins.proposer)?; - let may = published.may?; + // Fail-closed agreement guard: relief may only consume a verdict minted for + // the seat whose offer published these pins. + if verdicts.proposer() != Some(pins.proposer) { + return None; + } + let cached = verdicts.verdict(f, entry); + let published = cached.published.as_ref()?; + let may = published.may.as_ref()?; // Strictly the mint's own facts, never coarser (CR 603.5): the `may` slot must be // pinned, and the target slot must be pinned WHEN THERE IS ONE. Shape (B) publishes // `target: None` — an entry that announces no choice has none for a pin to leave // unspecified — so demanding a pinned target there would refuse relief the mint's own // schema fully describes. - if !pins.slots.contains(&may) + if !pins.slots.contains(may) || published .target - .is_some_and(|target| !pins.slots.contains(&target)) + .as_ref() + .is_some_and(|target| !pins.slots.contains(target)) { return None; } - let StackEntryKind::TriggeredAbility { ability, .. } = &entry.kind else { - return None; - }; - // The clone is confined to this path (a published-and-pinned optional entry, so never - // reached while `scope.pinned` is `None`) and is what lets the ONE classifier answer - // the counterfactual instead of this module re-implementing its six reasons. - let mut without_may_gate = (**ability).clone(); - without_may_gate.optional = false; - // CR 603.4 + CR 608.2k: same resolution board the primary classification - // uses — this entry off the stack, scope bound. - let mut board = state.clone(); - board.stack.retain(|e| e.id != entry.id); - if !crate::game::stack::bind_resolution_scope(&mut board, entry, None) { - return None; - } - match crate::game::resolution_prompt::ability_resolution_choice_freedom( - &board, - &without_may_gate, - budget, - ) { + match cached.residual.as_ref()? { ResolutionChoiceFreedom::MayPrompt => None, - residual @ ResolutionChoiceFreedom::FreeUnlessReplacements(_) => Some(residual), + residual @ ResolutionChoiceFreedom::FreeUnlessReplacements(_) => Some(residual.clone()), } } @@ -1495,7 +1947,16 @@ fn pinned_may_choice_relief( /// choice — either intrinsically or through the life-event replacement /// environment (item 6, CR 732.2a + CR 608.2d). pub(crate) fn loop_states_cover_modulo_growth(prior: &GameState, current: &GameState) -> bool { - loop_states_cover_modulo_growth_scoped(prior, current, LoopWindowScope::unproven()) + // The zero-proof container: frames = `[current]`, no proposer ⇒ nothing published ⇒ no + // relief, which is byte-identically what an `unproven()` scope already meant. The four + // production callers of this 2-arg entry point are therefore untouched. + let mut verdicts = PeriodVerdicts::unproven(current); + loop_states_cover_modulo_growth_scoped( + prior, + current, + LoopWindowScope::unproven(), + &mut verdicts, + ) } /// CR 732.2a "predictable results": is EVERY per-iteration choice this stack can open a @@ -1517,48 +1978,76 @@ pub(crate) fn loop_states_cover_modulo_growth(prior: &GameState, current: &GameS /// CR 616.1 [`proposed_event_prompt_cause`] environmental guard the /// `FreeUnlessReplacements` verdict's own contract requires. Nothing is re-derived here. /// -/// STRICTER than gate (3) in one deliberate way: gate (3) examines only entries whose -/// normalized kind strictly GREW, because a non-grown place is one the window already -/// observed resolving. An offer makes a stronger claim — that N FUTURE repetitions are -/// predictable — so every entry is examined, not only the grown ones. +/// THE WIDTH IS THE CERTIFIED PERIOD'S, NOT THE OFFER-BEAT STACK'S. Both loops range over +/// `touch.announced` ∪ (`state.stack` \ `touch.frozen_ids`), each pair evaluated against its +/// own carrying frame. That is WIDER than the offer-beat stack on the announced half — the +/// majority population on both measured dumps, 157/161 (F4) and 19/23 (dellian) beats carry +/// off-stack announced pairs — and NARROWER only on the proven-frozen half. /// -/// ⚠ THE ORIGINAL JUSTIFICATION FOR THAT WIDTH WAS MEASURED FALSE AND IS CORRECTED HERE. -/// It read: "in an exact-recurrence window every entry re-announces each cycle, so every -/// entry is examined." A shortcut window need not be exact-recurrence at all, and when it -/// is a GROWING CASCADE the premise fails outright. Measured on the `dellian` 4p fixture: -/// the window is a growing cascade over a FROZEN bottom prefix that never re-announces. +/// ⚠ THE JUSTIFICATION THIS DOC USED TO CARRY FOR SCANNING EVERY CURRENT-STACK ENTRY WAS +/// CORRECT FOR A FUNCTION WITH NO WINDOW, AND IS NOW SUPERSEDED BY ONE. It read: "a frozen +/// entry is one the window has NO evidence about, which is precisely the entry a grown-only +/// scan would skip. The width is right." Its PREMISE survives — without a window parameter +/// "no evidence" was all this predicate could say. With one, absence of evidence about +/// RESOLUTION becomes positive evidence about POSITION: a frozen id is PROVEN to hold the +/// same (index, id) in every certified frame and in `state`, under a certificate that forbids +/// the stack shrinking. Measured on the `dellian` 4p fixture, a growing cascade over a frozen +/// bottom prefix: up to 152 of 156 current-stack entries are exempt at the certified beat. /// -/// ⚠ THE TWO NUMBERS THIS CLAUSE USED TO CARRY ("a FROZEN 140-deep bottom prefix — the same -/// 107 entries") CONTRADICTED EACH OTHER, and RE-MEASUREMENT shows neither was right. Driving -/// `dellian_emblem_conqueror_4p.json.gz` 220 beats from its shipped state through the -/// production per-beat driver, recording the stack's `ObjectId` sequence at every beat: -/// stack depth 152 at beat 0, min 152, max 182 over the run -/// FROZEN BOTTOM PREFIX = **151** entries — same `ObjectId` at the same index at every -/// one of the 220 beats -/// So the cascade grows entirely ABOVE a 151-deep prefix. Those 151 entries provably never -/// re-announced and never resolved, so nothing the window observed says anything about them. -/// That does not weaken the predicate — it STRENGTHENS the case for scanning every entry: -/// a frozen entry is one the window has NO evidence about, which is precisely the entry a -/// grown-only scan would skip. The width is right; only the stated reason was wrong. -pub(crate) fn stack_choices_are_all_specified( - state: &GameState, +/// WHAT LICENSES THE EXEMPTION HERE, since this function establishes none of the cover +/// predicate's premises itself (its whole body is the two loops plus the CR 616.1 tail): a +/// non-empty `frozen_ids` can only have been built under [`PeriodCertification::BoardCovered`] +/// ⟺ the offer's basis-A `else if` matched ⟺ [`loop_states_cover_modulo_growth_pinned`] +/// returned `true` ⇒ that predicate's items (2)/(4)/(5) all passed UNEXEMPTED, and those run +/// strictly before this conjunct. The premises are inherited as discharged facts about the +/// same `(prior, current)` pair, never assumed. When `frozen_ids` is empty — every basis-B +/// path, every equality-certified path, the degenerate alias — every current-stack entry is +/// scanned exactly as before this change. +pub(crate) fn stack_choices_are_all_specified<'a>( + state: &'a GameState, proposer: PlayerId, slots: &[DecisionSlot], + touch: Option<&PeriodTouch<'a>>, + verdicts: &mut PeriodVerdicts<'a>, ) -> bool { - // Only `pinned` is read by the two relief predicates below; the other three proofs belong - // to the cover axes and this predicate makes no claim about them. Written out in full so a - // future FIFTH field is a compile error that forces a decision rather than a silent - // default. + // Only `pinned` and `period` are read below; the other three proofs belong to the cover + // axes and this predicate makes no claim about them. Written out in full so a future SIXTH + // field is a compile error that forces a decision rather than a silent default. let scope = LoopWindowScope { phase_invariant: None, sole_driver: None, pinned: Some(PinnedChoices { proposer, slots }), cast_card_ids: None, + period: touch, }; - // Announcement-time (gate (3)'s fact). + // CR 732.2a: the described sequence is EVERY choice the shortcut makes, not the subset + // that happens to sit on the stack at the offer beat. The mint's own domain is + // `touch.announced`, so both loops range over the announced pairs UNION the current-stack + // entries the window did not prove frozen — each pair evaluated against ITS OWN carrying + // frame, never against the live board (a target legal on the frame but gone from `current` + // would collapse the assignment to "forced" and relieve a choice that is not forced). + let mut pairs: Vec<(&'a GameState, &'a StackEntry)> = Vec::new(); + if let Some(t) = touch { + pairs.extend(t.announced.iter().copied()); + } for entry in &state.stack { - if !(entry_target_choice_is_pinned(state, entry, scope) - || stack_entry_has_no_ordering_input(state, entry)) + // CR 608.1: an entry the window proves held its (index, id) through every certified + // frame neither announced nor resolved in the described sequence. + if touch.is_some_and(|t| t.frozen_ids.contains(&entry.id)) { + verdicts.note_conjunct6_frozen_skip(); + continue; + } + pairs.push((state, entry)); + } + + // Announcement-time (gate (3)'s fact), CR 603.3d. + for (frame, entry) in &pairs { + // Fail-closed: a frame outside this container's period cannot be asked about. + let Some(f) = verdicts.frame_ix(frame) else { + return false; + }; + if !(entry_target_choice_is_pinned(frame, f, entry, verdicts, scope) + || stack_entry_has_no_ordering_input(frame, entry)) { return false; } @@ -1566,18 +2055,22 @@ pub(crate) fn stack_choices_are_all_specified( // Resolution-time (gate (6)'s fact), including its paired CR 616.1 obligation. // The obligation is discharged PER ENTRY against the pipeline's own candidate // authority, on the same board the entry's events were derived on. - let mut budget = ProbeBudget::new(PROBE_BUDGET); - for entry in &state.stack { - let verdict = match stack_entry_resolution_choice_freedom(state, entry, &mut budget) { + for (frame, entry) in &pairs { + let Some(f) = verdicts.frame_ix(frame) else { + return false; + }; + verdicts.note_conjunct6_ask(); + let primary = verdicts.verdict(f, entry).primary.clone(); + let verdict = match primary { crate::game::resolution_prompt::ResolutionChoiceFreedom::MayPrompt => { - match pinned_may_choice_relief(state, entry, scope, &mut budget) { + match pinned_may_choice_relief(f, entry, verdicts, scope) { Some(residual) => residual, None => return false, } } free => free, }; - if !resolution_events_are_discharged(state, verdict) { + if !resolution_events_are_discharged(frame, verdict) { return false; } } @@ -1632,15 +2125,21 @@ fn resolution_events_are_discharged( /// { slots: &[] })` still names a proposer whose entries the relief tests, and every such /// test fails on an empty slot list, so an empty publication is byte-identically as strict /// as [`LoopWindowScope::unproven`]. -pub(crate) fn loop_states_cover_modulo_growth_pinned( +pub(crate) fn loop_states_cover_modulo_growth_pinned<'a>( prior: &GameState, - current: &GameState, + current: &'a GameState, proposer: PlayerId, slots: &[DecisionSlot], + touch: &PeriodTouch<'_>, + verdicts: &mut PeriodVerdicts<'a>, ) -> bool { - let scope = - window_scope_from_cover_frames(prior, current, Some(PinnedChoices { proposer, slots })); - loop_states_cover_modulo_growth_scoped(prior, current, scope) + let scope = window_scope_from_cover_frames( + prior, + current, + Some(PinnedChoices { proposer, slots }), + Some(touch), + ); + loop_states_cover_modulo_growth_scoped(prior, current, scope, verdicts) } /// CR 601.2f + CR 601.2a: the set of card ids this loop window's recorded driving @@ -1684,10 +2183,11 @@ fn window_cast_card_ids(state: &GameState) -> Option> { /// ([`window_cast_card_ids`]), and the `projected_scope` built for that call /// deliberately holds `pinned: None` — the projected firewall is a different /// axis and must not inherit the caller's pins. -pub(crate) fn loop_states_cover_modulo_growth_scoped( +pub(crate) fn loop_states_cover_modulo_growth_scoped<'a>( prior: &GameState, - current: &GameState, + current: &'a GameState, scope: LoopWindowScope<'_>, + verdicts: &mut PeriodVerdicts<'a>, ) -> bool { // (1) Board equal modulo the NARROWED projection AND modulo the stack, with the // object resource axes STRICT-COMPARED (R5-B1). Project both, clear both stacks @@ -1718,11 +2218,19 @@ pub(crate) fn loop_states_cover_modulo_growth_scoped( // (3) Every grown place is a mandatory, no-ordering-input triggered ability. // Iterate the ORIGINAL current-stack entries (so the mid-construction firewall // sees real stack-entry ids) and check each whose normalized kind strictly grew. + // Fail-closed: this predicate only answers about a `current` the container holds. + let Some(f_current) = verdicts.frame_ix(current) else { + return false; + }; for (orig, norm) in current.stack.iter().zip(cur_stack.iter()) { // CR 732.2a EXTENSION POINT (see item 6's block): a slot the OFFER publishes is // a SPECIFIED choice, not a free one, so its announcement-time target input is // no longer player ordering input. - if entry_target_choice_is_pinned(current, orig, scope) { + // + // Deliberately NOT frozen-filtered: the PLACEMENT RULE keeps the frozen skip in + // item (6) alone, because items (4)/(5) are what establish the premise that skip + // consumes — reading it here would consume a premise not yet proved. + if entry_target_choice_is_pinned(current, f_current, orig, verdicts, scope) { continue; } let cn = cur_stack.iter().filter(|e| *e == norm).count(); @@ -1735,11 +2243,14 @@ pub(crate) fn loop_states_cover_modulo_growth_scoped( // (4) On-stack fail-closed resource-read guard: NO entry on `current`'s stack may // carry an AST that reads a still-projected axis (player monotone resources + // journals). Object-axis readers pass — their drift breaks gate (1) instead. - if current - .stack - .iter() - .any(stack_entry_reads_projected_resource) - { + // The closure is the ONLY body change item (4) takes: it counts the scans so the + // PLACEMENT RULE ("the frozen skip lives in item (6) and nowhere earlier") has an + // assertable surface instead of an argued one. The population is the UNEXEMPTED + // current stack — `frozen_ids` is deliberately not read here. + if current.stack.iter().any(|e| { + verdicts.note_conjunct4_scan(); + stack_entry_reads_projected_resource(e) + }) { return false; } @@ -1757,6 +2268,9 @@ pub(crate) fn loop_states_cover_modulo_growth_scoped( sole_driver: None, pinned: None, cast_card_ids: cast_ids.as_deref(), + // DELIBERATE, same rationale as the `pinned: None` above: the projected firewall is + // a different axis and must not inherit the caller's period proof. + period: None, }; if fire_time_conditions_read_projected_resource_scoped(current, projected_scope) { return false; @@ -1799,11 +2313,27 @@ pub(crate) fn loop_states_cover_modulo_growth_scoped( // gating an unpinned entry gets, so `FreeUnlessReplacements` still arms the // CR 616.1 environmental guard below for the classes it names — a pinned target/"may" // says nothing about whose life- or draw-event replacements might prompt. - let mut budget = ProbeBudget::new(PROBE_BUDGET); + // + // CR 608.1 + CR 732.2a: an entry the certified window proves FROZEN — same id at the + // same index in every window frame and in `current` — neither announced nor resolved in + // the described sequence, so it makes no choice there. THE FROZEN SKIP LIVES HERE AND + // NOWHERE EARLIER: items (2)/(4)/(5) are what establish the premises it consumes, and + // each of them returns on failure strictly above this loop, so by the time control + // arrives the premises are discharged facts about `(prior, current)` rather than + // assumptions about this predicate's own eventual answer. for entry in ¤t.stack { - let verdict = match stack_entry_resolution_choice_freedom(current, entry, &mut budget) { + if scope + .period + .is_some_and(|t| t.frozen_ids.contains(&entry.id)) + { + verdicts.note_conjunct6_frozen_skip(); + continue; + } + verdicts.note_conjunct6_ask(); + let primary = verdicts.verdict(f_current, entry).primary.clone(); + let verdict = match primary { crate::game::resolution_prompt::ResolutionChoiceFreedom::MayPrompt => { - match pinned_may_choice_relief(current, entry, scope, &mut budget) { + match pinned_may_choice_relief(f_current, entry, verdicts, scope) { Some(residual) => residual, None => return false, } @@ -1942,7 +2472,7 @@ pub(crate) fn loop_states_cover_modulo_object_growth( if fire_time_conditions_read_growing_class_scoped( &cf, None, - window_scope_from_cover_frames(&pa, &pb, None), + window_scope_from_cover_frames(&pa, &pb, None, None), ) { return false; } @@ -2150,7 +2680,7 @@ pub(crate) fn loop_states_cover_modulo_fodder_growth( if fire_time_conditions_read_growing_class_scoped( &cf, Some(&class_members), - window_scope_from_cover_frames(&pa, &pb, None), + window_scope_from_cover_frames(&pa, &pb, None, None), ) { return false; } @@ -3597,8 +4127,14 @@ fn stack_entry_has_no_ordering_input(state: &GameState, entry: &StackEntry) -> b } // CR 603.3d + CR 608.2b + CR 732.2a: a non-empty target list is NOT player // ordering input when exactly one legal assignment exists — the choice is - // FORCED, so the shortcut stays deterministic. Re-derived per-iteration against - // the live state (the SOLE caller iterates the grown current-stack entries). + // FORCED, so the shortcut stays deterministic. Re-derived per call against the + // board the CALLER passes, and that board is load-bearing rather than incidental: + // there are THREE call sites and none of them is "the live state" by construction + // — the announced loop passes the pair's own CARRYING FRAME (a retained ring + // sample), the current-stack loops pass `current`. The verdict is a function of + // the board's legal-target population, so handing a retained pair the live board + // is fail-OPEN: a target legal on the frame but gone from `current` collapses the + // assignment to "forced" and relieves a choice that is not forced. forced_unique_targeting(state, ability) } @@ -5990,7 +6526,12 @@ mod tests { let slot = churn_src_slot(¤t, 0); for pinned in [&[][..], std::slice::from_ref(&slot)] { assert!( - !loop_states_cover_modulo_growth_scoped(&prior, ¤t, pinned_scope(pinned)), + !loop_states_cover_modulo_growth_scoped( + &prior, + ¤t, + pinned_scope(pinned), + &mut PeriodVerdicts::for_period(&[], ¤t, PlayerId(0)) + ), "gate (3)'s relief is a bare `continue`: an unpublished second target choice \ must keep rejecting ({} pinned slot(s))", pinned.len() @@ -6188,7 +6729,12 @@ mod tests { let slot = churn_src_slot(¤t, 0); for pinned in [&[][..], std::slice::from_ref(&slot)] { assert!( - !loop_states_cover_modulo_growth_scoped(&prior, ¤t, pinned_scope(pinned)), + !loop_states_cover_modulo_growth_scoped( + &prior, + ¤t, + pinned_scope(pinned), + &mut PeriodVerdicts::for_period(&[], ¤t, PlayerId(0)) + ), "gate (3)'s relief is a bare `continue`: an object-valued announcement choice \ must keep rejecting ({} pinned slot(s))", pinned.len() @@ -6304,6 +6850,7 @@ mod tests { slots, }), cast_card_ids: None, + period: None, } } @@ -6401,7 +6948,12 @@ mod tests { "reach-guard: two opponents ⇒ not forced-unique ⇒ gate (3) is the rejector" ); assert!( - !loop_states_cover_modulo_growth_scoped(&prior, ¤t, pinned_scope(&[])), + !loop_states_cover_modulo_growth_scoped( + &prior, + ¤t, + pinned_scope(&[]), + &mut PeriodVerdicts::for_period(&[], ¤t, PlayerId(0)) + ), "UNPINNED: an open per-opponent target choice is a free choice ⇒ reject" ); let target_slot = churn_src_slot(¤t, 0); @@ -6409,7 +6961,8 @@ mod tests { loop_states_cover_modulo_growth_scoped( &prior, ¤t, - pinned_scope(std::slice::from_ref(&target_slot)) + pinned_scope(std::slice::from_ref(&target_slot)), + &mut PeriodVerdicts::for_period(&[], ¤t, PlayerId(0)) ), "PINNED: the offer published this slot ⇒ CR 732.2a specified choice ⇒ cover" ); @@ -6431,24 +6984,39 @@ mod tests { crate::game::resolution_prompt::ability_resolution_choice_freedom( &c_may, may_ability, - &mut ProbeBudget::new(PROBE_BUDGET) + &mut ProbeBudget::for_test(PROBE_BUDGET) ), crate::game::resolution_prompt::ResolutionChoiceFreedom::MayPrompt, "reach-guard: CR 603.5 `optional` is what makes this entry MayPrompt" ); assert!( - !loop_states_cover_modulo_growth_scoped(&p_may, &c_may, pinned_scope(&[])), + !loop_states_cover_modulo_growth_scoped( + &p_may, + &c_may, + pinned_scope(&[]), + &mut PeriodVerdicts::for_period(&[], &c_may, PlayerId(0)) + ), "UNPINNED: an optional trigger's take/decline is a free choice ⇒ reject" ); let may_slots = [churn_src_slot(&c_may, 0), churn_src_slot(&c_may, 1)]; assert!( - loop_states_cover_modulo_growth_scoped(&p_may, &c_may, pinned_scope(&may_slots)), + loop_states_cover_modulo_growth_scoped( + &p_may, + &c_may, + pinned_scope(&may_slots), + &mut PeriodVerdicts::for_period(&[], &c_may, PlayerId(0)) + ), "PINNED: the published CR 603.5 gate specifies that choice ⇒ cover" ); // The MayChoice point is load-bearing on its own: pinning only the target slot // leaves the resolution choice unspecified. assert!( - !loop_states_cover_modulo_growth_scoped(&p_may, &c_may, pinned_scope(&may_slots[..1])), + !loop_states_cover_modulo_growth_scoped( + &p_may, + &c_may, + pinned_scope(&may_slots[..1]), + &mut PeriodVerdicts::for_period(&[], &c_may, PlayerId(0)) + ), "a pinned TARGET does not specify the CR 603.5 take/decline choice" ); @@ -6470,7 +7038,12 @@ mod tests { let slots = [churn_src_slot(&c6, 0), churn_src_slot(&c6, 1)]; for pinned in [&slots[..0], &slots[..1], &slots[..]] { assert!( - !loop_states_cover_modulo_growth_scoped(&p6, &c6, pinned_scope(pinned)), + !loop_states_cover_modulo_growth_scoped( + &p6, + &c6, + pinned_scope(pinned), + &mut PeriodVerdicts::for_period(&[], &c6, PlayerId(0)) + ), "CR 701.34a proliferate is a resolution-time choice NO published slot \ specifies (optional={optional}, {} pinned slot(s))", pinned.len() @@ -6500,7 +7073,8 @@ mod tests { !loop_states_cover_modulo_growth_scoped( &p_foreign, &c_foreign, - pinned_scope(std::slice::from_ref(&target_slot)) + pinned_scope(std::slice::from_ref(&target_slot)), + &mut PeriodVerdicts::for_period(&[], &c_foreign, PlayerId(0)) ), "CR 732.2a precondition (c): P0's offer specifies none of P1's choices" ); @@ -6546,7 +7120,12 @@ mod tests { let slot = churn_src_slot(&c5, 0); for pinned in [&[][..], std::slice::from_ref(&slot)] { assert!( - !loop_states_cover_modulo_growth_scoped(&p5, &c5, pinned_scope(pinned)), + !loop_states_cover_modulo_growth_scoped( + &p5, + &c5, + pinned_scope(pinned), + &mut PeriodVerdicts::for_period(&[], &c5, PlayerId(0)) + ), "a published slot specifies ONE target; {label} is announcement-time \ ordering input no slot specifies ({} pinned)", pinned.len() @@ -6569,7 +7148,8 @@ mod tests { loop_states_cover_modulo_growth_scoped( &p_pend, &c_pend, - pinned_scope(std::slice::from_ref(&pend_slot)) + pinned_scope(std::slice::from_ref(&pend_slot)), + &mut PeriodVerdicts::for_period(&[], &c_pend, PlayerId(0)) ), "positive control: this entry's published slot IS otherwise matched" ); @@ -6582,7 +7162,8 @@ mod tests { !loop_states_cover_modulo_growth_scoped( &p_mid, &c_mid, - pinned_scope(std::slice::from_ref(&pend_slot)) + pinned_scope(std::slice::from_ref(&pend_slot)), + &mut PeriodVerdicts::for_period(&[], &c_mid, PlayerId(0)) ), "CR 603.3c: a mid-construction announcement is not specified by any \ published slot — the relief must not discharge item 3's firewall" @@ -6598,7 +7179,8 @@ mod tests { loop_states_cover_modulo_growth_scoped( &p_other, &c_other, - pinned_scope(std::slice::from_ref(&pend_slot)) + pinned_scope(std::slice::from_ref(&pend_slot)), + &mut PeriodVerdicts::for_period(&[], &c_other, PlayerId(0)) ), "gate-(1) control: a `pending_trigger_entry` naming no live entry is not \ what rejects — CR 603.3c's firewall is entry-scoped" @@ -6645,7 +7227,12 @@ mod tests { ); let slots = [churn_src_slot(&c_life, 0), churn_src_slot(&c_life, 1)]; assert!( - !loop_states_cover_modulo_growth_scoped(&p_life, &c_life, pinned_scope(&slots)), + !loop_states_cover_modulo_growth_scoped( + &p_life, + &c_life, + pinned_scope(&slots), + &mut PeriodVerdicts::for_period(&[], &c_life, PlayerId(0)) + ), "the discharged `may` leaves a FreeUnlessReplacements(LIFE) RESIDUAL that must \ re-arm the CR 616.1 guard — relief is not a `continue`" ); @@ -6665,7 +7252,8 @@ mod tests { !loop_states_cover_modulo_growth_scoped( p, c, - pinned_scope(std::slice::from_ref(&unrelated)) + pinned_scope(std::slice::from_ref(&unrelated)), + &mut PeriodVerdicts::for_period(&[], c, PlayerId(0)) ), "{label}: a pin on a DIFFERENT source must not relieve this entry" ); @@ -6684,7 +7272,8 @@ mod tests { !loop_states_cover_modulo_growth_scoped( &prior, ¤t, - pinned_scope(std::slice::from_ref(&stale)) + pinned_scope(std::slice::from_ref(&stale)), + &mut PeriodVerdicts::for_period(&[], ¤t, PlayerId(0)) ), "CR 400.7: a pin latched to a stale incarnation does not match the live source" ); @@ -8116,6 +8705,7 @@ mod tests { sole_driver: Some(PlayerId(0)), pinned: None, cast_card_ids: None, + period: None, }; let (subject, observer) = build(AbilityKind::Spell); @@ -8191,6 +8781,7 @@ mod tests { sole_driver: Some(PlayerId(0)), pinned: None, cast_card_ids: None, + period: None, }; let (subject, observer) = build(Some(PlayerFilter::All)); @@ -9034,7 +9625,12 @@ mod tests { let plain = loop_states_cover_modulo_growth(prior, current); assert_eq!( plain, - loop_states_cover_modulo_growth_scoped(prior, current, LoopWindowScope::unproven()), + loop_states_cover_modulo_growth_scoped( + prior, + current, + LoopWindowScope::unproven(), + &mut PeriodVerdicts::unproven(current) + ), "loop_states_cover_modulo_growth must be its _scoped sibling at unproven()" ); plain @@ -10130,6 +10726,7 @@ mod tests { sole_driver: None, pinned: None, cast_card_ids: Some(&never_cast), + period: None, }; assert!( !fire_time_conditions_read_projected_resource_scoped(&state, scope), @@ -10152,6 +10749,7 @@ mod tests { sole_driver: None, pinned: None, cast_card_ids: Some(&never_cast), + period: None, }; assert!( fire_time_conditions_read_projected_resource_scoped(¬_modify_cost, scope), @@ -10187,6 +10785,7 @@ mod tests { sole_driver: None, pinned: None, cast_card_ids: Some(&recast), + period: None, }; assert!( fire_time_conditions_read_projected_resource_scoped(&state, scope), @@ -10202,6 +10801,7 @@ mod tests { sole_driver: None, pinned: None, cast_card_ids: Some(&other), + period: None, }; assert!( !fire_time_conditions_read_projected_resource_scoped(&state, relieved_scope), @@ -10459,6 +11059,7 @@ mod tests { sole_driver: None, pinned: None, cast_card_ids: Some(&cast), + period: None, }; assert!( !fire_time_conditions_read_projected_resource_scoped(&state, scope), @@ -10477,6 +11078,7 @@ mod tests { sole_driver: None, pinned: None, cast_card_ids: Some(&recast), + period: None, }; assert!( fire_time_conditions_read_projected_resource_scoped(&state, recast_scope), @@ -11163,7 +11765,7 @@ mod tests { // ── `sole_driver` — CR 117.1 ── let (pa, pb) = (base(), base()); assert_eq!( - window_scope_from_cover_frames(&pa, &pb, None).sole_driver, + window_scope_from_cover_frames(&pa, &pb, None, None).sole_driver, Some(PlayerId(0)), "PAIRED POSITIVE: a homogeneous single-driver window proves CR 117.1's premise" ); @@ -11173,7 +11775,7 @@ mod tests { let mut pb_other = base(); pb_other.last_loop_action_sequence = vec![ctx(1)]; assert_eq!( - window_scope_from_cover_frames(&pa, &pb_other, None).sole_driver, + window_scope_from_cover_frames(&pa, &pb_other, None, None).sole_driver, None, "(s2) a two-controller window proves nothing about who holds priority" ); @@ -11182,7 +11784,7 @@ mod tests { let mut pa_mixed = base(); pa_mixed.last_loop_action_sequence = vec![ctx(0), ctx(1)]; assert_eq!( - window_scope_from_cover_frames(&pa_mixed, &pb, None).sole_driver, + window_scope_from_cover_frames(&pa_mixed, &pb, None, None).sole_driver, None, "(s2) an interleaved sequence is fail-closed" ); @@ -11191,14 +11793,14 @@ mod tests { let mut pb_empty = base(); pb_empty.last_loop_action_sequence.clear(); assert_eq!( - window_scope_from_cover_frames(&pa, &pb_empty, None).sole_driver, + window_scope_from_cover_frames(&pa, &pb_empty, None, None).sole_driver, None, "(s1) an empty driving sequence is NO PROOF, so it cannot relieve anything" ); // ── `phase_invariant` — CR 500.1 / CR 506.1 / CR 500.8 ── assert_eq!( - window_scope_from_cover_frames(&pa, &pb, None).phase_invariant, + window_scope_from_cover_frames(&pa, &pb, None, None).phase_invariant, Some(Phase::PreCombatMain), "PAIRED POSITIVE: agreeing frames with no extra phase prove the window's phase" ); @@ -11215,7 +11817,7 @@ mod tests { attacker_restriction_source: None, }); assert_eq!( - window_scope_from_cover_frames(&pa, &pb_extra, None).phase_invariant, + window_scope_from_cover_frames(&pa, &pb_extra, None, None).phase_invariant, None, "(p3) CR 500.8: a pending extra phase breaks `equal phase ⇒ never left it`" ); @@ -11224,7 +11826,7 @@ mod tests { let mut pb_turn = base(); pb_turn.turn_number = 14; assert_eq!( - window_scope_from_cover_frames(&pa, &pb_turn, None).phase_invariant, + window_scope_from_cover_frames(&pa, &pb_turn, None, None).phase_invariant, None, "(p1) frames from different turns bound nothing about one window's phase" ); @@ -11233,7 +11835,7 @@ mod tests { let mut pb_phase = base(); pb_phase.phase = Phase::PostCombatMain; assert_eq!( - window_scope_from_cover_frames(&pa, &pb_phase, None).phase_invariant, + window_scope_from_cover_frames(&pa, &pb_phase, None, None).phase_invariant, None, "(p2) a window that crosses a phase boundary is not phase-invariant" ); @@ -11759,6 +12361,22 @@ mod tests { def } + /// The board is bound ONCE and handed to both the predicate and the container it is + /// asked through. That is not a style choice: `PeriodVerdicts::frame_ix` resolves a + /// frame by POINTER IDENTITY, so building the container from a second, equal-valued + /// `GameState` would be a frame the container does not hold and the predicate would + /// fail closed — which is exactly the production guard doing its job, and exactly the + /// vacuity a copy-pasted expression would introduce here. + fn specified_on(board: &GameState) -> bool { + stack_choices_are_all_specified( + board, + PlayerId(0), + &[], + None, + &mut PeriodVerdicts::for_period(&[], board, PlayerId(0)), + ) + } + /// CR 616.1 + CR 121.1: the draw verdict's environmental obligation is REAL (it can /// reject) and CLASS-SCOPED (it rejects only on its own event class). /// @@ -11772,21 +12390,16 @@ mod tests { // (i) REACH-GUARD: a bare board with a mandatory draw on the stack PASSES. This // is the assertion that flips if `Effect::Draw` goes back to `MayPrompt`. assert!( - stack_choices_are_all_specified( - &with_replacements(draw_entry(10), &[]), - PlayerId(0), - &[] - ), + specified_on(&with_replacements(draw_entry(10), &[])), "a mandatory non-`up to` draw is starved: no replacement environment, no prompt" ); // (ii) CR 702.52a dredge-class: a single OPTIONAL draw replacement prompts. assert!( - !stack_choices_are_all_specified( - &with_replacements(draw_entry(10), &[repl(ReplacementEvent::Draw, true)]), - PlayerId(0), - &[] - ), + !specified_on(&with_replacements( + draw_entry(10), + &[repl(ReplacementEvent::Draw, true)] + )), "an optional draw replacement is a genuine CR 608.2d resolution-time choice" ); @@ -11831,11 +12444,7 @@ mod tests { ); } assert!( - !stack_choices_are_all_specified( - &with_replacements(draw_entry(10), &material_pair), - PlayerId(0), - &[] - ), + !specified_on(&with_replacements(draw_entry(10), &material_pair)), "CR 616.1: the affected player orders two competing mandatory replacements" ); @@ -11843,46 +12452,36 @@ mod tests { // Ageless Insight class) resolves deterministically — the guard is not a blanket // "any draw replacement rejects". assert!( - stack_choices_are_all_specified( - &with_replacements(draw_entry(10), &[repl(ReplacementEvent::Draw, false)]), - PlayerId(0), - &[] - ), + specified_on(&with_replacements( + draw_entry(10), + &[repl(ReplacementEvent::Draw, false)] + )), "a lone mandatory quantity-mod replacement applies without a prompt" ); // (v) CLASS SCOPING, both directions. A LIFE replacement says nothing about a // DRAW-only stack and vice versa; an unparameterized guard would reject both. assert!( - stack_choices_are_all_specified( - &with_replacements(draw_entry(10), &[repl(ReplacementEvent::GainLife, true)]), - PlayerId(0), - &[] - ), + specified_on(&with_replacements( + draw_entry(10), + &[repl(ReplacementEvent::GainLife, true)] + )), "an optional LIFE replacement cannot prompt on a draw-only stack" ); assert!( - stack_choices_are_all_specified( - &with_replacements( - churn_entry(11, 0, lose_ability(1), None), - &[repl(ReplacementEvent::Draw, true)] - ), - PlayerId(0), - &[] - ), + specified_on(&with_replacements( + churn_entry(11, 0, lose_ability(1), None), + &[repl(ReplacementEvent::Draw, true)] + )), "an optional DRAW replacement cannot prompt on a life-only stack" ); // …and the same optional LIFE replacement DOES reject a life stack, proving the // arm above passes because of scoping and not because the def is inert. assert!( - !stack_choices_are_all_specified( - &with_replacements( - churn_entry(11, 0, lose_ability(1), None), - &[repl(ReplacementEvent::LoseLife, true)] - ), - PlayerId(0), - &[] - ), + !specified_on(&with_replacements( + churn_entry(11, 0, lose_ability(1), None), + &[repl(ReplacementEvent::LoseLife, true)] + )), "positive control: the life guard still rejects its own class" ); } @@ -11980,7 +12579,7 @@ mod tests { let freedom = stack_entry_resolution_choice_freedom( &state, &entry, - &mut ProbeBudget::new(PROBE_BUDGET), + &mut ProbeBudget::for_test(PROBE_BUDGET), ); let ResolutionChoiceFreedom::FreeUnlessReplacements(derived) = freedom else { panic!("reach-guard: the probe must return Events(..) on this board, got {freedom:?}"); @@ -12037,8 +12636,11 @@ mod tests { "reach-guard: the CR 603.4 re-check is what decides arm ({label})" ); - let verdict = - stack_entry_resolution_choice_freedom(&s, &e, &mut ProbeBudget::new(PROBE_BUDGET)); + let verdict = stack_entry_resolution_choice_freedom( + &s, + &e, + &mut ProbeBudget::for_test(PROBE_BUDGET), + ); if binds { assert!( matches!(verdict, ResolutionChoiceFreedom::FreeUnlessReplacements(_)), @@ -12093,8 +12695,11 @@ mod tests { let e = counter_entry(count); let mut s = counter_state.clone(); s.stack.push_back(e.clone()); - let verdict = - stack_entry_resolution_choice_freedom(&s, &e, &mut ProbeBudget::new(PROBE_BUDGET)); + let verdict = stack_entry_resolution_choice_freedom( + &s, + &e, + &mut ProbeBudget::for_test(PROBE_BUDGET), + ); let ResolutionChoiceFreedom::FreeUnlessReplacements(events) = verdict else { panic!("reach-guard: count {count} must probe to Events(..), got {verdict:?}"); }; @@ -12180,7 +12785,7 @@ mod tests { stack_entry_resolution_choice_freedom( &zero_state, &zero_entry, - &mut ProbeBudget::new(PROBE_BUDGET) + &mut ProbeBudget::for_test(PROBE_BUDGET) ), ResolutionChoiceFreedom::MayPrompt, "CR 732.2a: at zero the live pipeline draws no candidate (`count > 0`) and \ @@ -12199,7 +12804,7 @@ mod tests { /// only the charge AFTER that flips it. #[test] fn probe_budget_grants_exactly_its_cap_then_latches_the_denial() { - let mut budget = ProbeBudget::new(PROBE_BUDGET); + let mut budget = ProbeBudget::for_test(PROBE_BUDGET); for i in 0..PROBE_BUDGET { assert!( budget.try_charge_one(), @@ -12220,7 +12825,7 @@ mod tests { ); // A zero-cap budget denies its FIRST charge — the shape a lowered cap // takes, and the reason exhaustion is fail-closed rather than silent. - let mut starved = ProbeBudget::new(0); + let mut starved = ProbeBudget::for_test(0); assert!(!starved.try_charge_one()); assert!(starved.denied()); } @@ -12297,6 +12902,7 @@ mod tests { slots, }), cast_card_ids: None, + period: None, } } @@ -12347,10 +12953,16 @@ mod tests { "(a′) shape (B): no announcement choice, so no target slot" ); let slots = vec![may.clone()]; - let mut budget = ProbeBudget::new(PROBE_BUDGET); + // The relief reads the mint and the residual through the ONE door, so the row drives + // a real container bound to the same proposer the pins carry; `frame_ix` is the only + // `FrameIx` mint and its `None` would be a refusal, so the `expect` is a reach-guard. + let mut verdicts = PeriodVerdicts::for_period(&[], &state, PlayerId(0)); + let f = verdicts + .frame_ix(&state) + .expect("(a′) reach-guard: the container holds the board the relief is asked about"); assert!( matches!( - pinned_may_choice_relief(&state, &clean, u2_scope(&slots), &mut budget), + pinned_may_choice_relief(f, &clean, &mut verdicts, u2_scope(&slots)), Some(ResolutionChoiceFreedom::FreeUnlessReplacements(_)) ), "(a′) with the may pinned and no other axis, the residual classification is \ @@ -12377,9 +12989,8 @@ mod tests { "(a) reach-guard: the same slot is published, so the two arms differ ONLY in the \ residual axis and the refusal below cannot come from the mint" ); - let mut budget = ProbeBudget::new(PROBE_BUDGET); assert!( - pinned_may_choice_relief(&state, &gated, u2_scope(&slots), &mut budget).is_none(), + pinned_may_choice_relief(f, &gated, &mut verdicts, u2_scope(&slots)).is_none(), "(a) CR 118.12: an `unless_pay` is a SECOND resolution-time choice no published \ pin specifies, so the residual re-classification still returns `MayPrompt` and \ the entry gets no relief" @@ -12509,7 +13120,13 @@ mod tests { ); board.stack.push_back(entry); assert!( - !stack_choices_are_all_specified(&board, PlayerId(0), std::slice::from_ref(&may)), + !stack_choices_are_all_specified( + &board, + PlayerId(0), + std::slice::from_ref(&may), + None, + &mut PeriodVerdicts::for_period(&[], &board, PlayerId(0)) + ), "{label}: CR 732.2a conjunct (6) refuses the offer — the effect sits in \ `effect_resolution_choice_freedom`'s fail-closed grouped arm, so a `may` \ slot minted through a state-reading branch can never reach a published offer" diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index d5878abb44..ee7e6ec425 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -1053,13 +1053,104 @@ pub enum BoundedOfferRefusal { /// row asserting only the absence of an offer passes for the wrong reason as soon as an /// upstream conjunct starts refusing first (domination), and `BoundedOfferRefusal` is what /// lets such a row name the conjunct it is actually about. +/// CR 732.2a: the capability token that gates the cap-parameterised +/// [`crate::analysis::resource::PeriodVerdicts`] constructor. +/// +/// The unit field is PRIVATE, so the tuple constructor is nameable only inside +/// `game::engine` — the metered seam's own module. Any other site that tried to +/// build a fresh arbitrary-cap verdict container, whose spend the mint's meter +/// would never see, is E0603. Derive list pinned to `#[derive(Debug)]`: a derived +/// constructor would re-open arbitrary caps crate-wide, which is the same +/// strength as the defect this token closes. +#[derive(Debug)] +pub(crate) struct CapAuthority(()); + +/// CR 732.2a: the CLOSED cap domain the metered seam accepts. +/// +/// The seam is `pub` because rows outside this crate ride it, and it mints its +/// own [`CapAuthority`] for whoever calls it — so no token mechanism can gate +/// this route. It is gated at the VALUE instead: an arbitrary raise is +/// unrepresentable, and every image is fail-closed. Resolution is the SEAM's, +/// never the caller's. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum ProbeCap { + /// The shipped budget. + Shipped, + /// `min(n, PROBE_BUDGET)` — expresses every starvation arm and can never raise. + Lowered(u32), + /// Twice the board's own link count, derived from the `state` the seam + /// probes rather than chosen by the caller. At the seam no window has been + /// selected yet, so nothing is exempt and the whole current stack IS the + /// non-exempt population; the work is therefore proportional to the input + /// the caller itself supplied. + RaisedTwiceLinks, +} + +/// CR 732.2a: the mint's meter SNAPSHOT, taken at seam exit. +/// +/// `spent`/`denied` are the probe budget's; the three `conjunct*` counters are +/// the verdict door's own, so an iteration claim has a surface to be asserted on +/// rather than being inferred from charges (which are measurably not a proxy for +/// iterations). +#[derive(Debug, Clone, Copy)] +pub struct MintMeter { + pub spent: u32, + pub denied: bool, + pub conjunct6_asks: u32, + pub conjunct6_frozen_skips: u32, + pub conjunct4_scans: u32, + /// CR 732.2a: WHICH certificate step 4/4b selected — `None` when the mint refused + /// before certification (steps 1/1b/2/2b, or no basis matched at all). + /// + /// It exists because the axis has NO other surface. Both bases now MEASURE + /// `frames_per_period`, so the published [`crate::analysis::loop_check::LoopCertificate`] + /// discriminates in neither direction (see `certified_bounded_cycle_offer`'s + /// attribution note), and the disjunct within basis A is invisible there entirely. + /// A row that must prove a real beat certified through a particular disjunct — the + /// frozen exemption is keyed to exactly one — would otherwise have no assert site. + pub certification: Option, +} + +/// The production entry point: delegates at the shipped cap and drops the meter, +/// so the refusal contract and every existing caller are untouched. pub fn try_offer_bounded_cycle_shortcut( state: &GameState, mandatory: bool, ) -> Result { - use crate::analysis::decision_template::{DecisionPointKind, DecisionSlot, IterationCount}; - use crate::analysis::resource::{PeriodicDelta, ResourceVector}; - use crate::types::ability::TargetRef; + try_offer_bounded_cycle_shortcut_metered(state, mandatory, ProbeCap::Shipped).0 +} + +/// CR 732.2a: the OBSERVATION-AND-CAP seam — the same mint, with the per-mint +/// probe cap supplied from the closed [`ProbeCap`] domain and the meter returned +/// instead of dropped. +/// +/// This is the only channel by which a cap other than the shipped one enters, and +/// the only surface on which `spent` / `denied` / the conjunct counters are +/// readable at all: the verdict container never escapes this function. +pub fn try_offer_bounded_cycle_shortcut_metered( + state: &GameState, + mandatory: bool, + cap: ProbeCap, +) -> (Result, MintMeter) { + let mut meter = MintMeter { + spent: 0, + denied: false, + conjunct6_asks: 0, + conjunct6_frozen_skips: 0, + conjunct4_scans: 0, + certification: None, + }; + let outcome = bounded_cycle_offer(state, mandatory, cap, &mut meter); + (outcome, meter) +} + +fn bounded_cycle_offer( + state: &GameState, + mandatory: bool, + cap: ProbeCap, + meter: &mut MintMeter, +) -> Result { + use crate::analysis::resource::{PeriodVerdicts, PROBE_BUDGET}; // (1) CR 732.2a: "the player with priority may suggest a shortcut." let WaitingFor::Priority { player: proposer } = state.waiting_for else { @@ -1089,9 +1180,14 @@ pub fn try_offer_bounded_cycle_shortcut( if proposer != state.active_player { return Err(BoundedOfferRefusal::ProposerIsNotActivePlayer); } - // (3) The published per-iteration choices (5a's single authority). - let points = bounded_cycle_pin_slots(state, proposer); - let slots: Vec = points.iter().map(|p| p.slot.clone()).collect(); + // (2b) CR 732.2a: with fewer than two retained frames there is no window, hence no + // certificate is reachable at all — basis A needs `span >= 1` and basis B needs three + // frames. Refusing HERE, before anything is materialized or classified, is what makes + // "nothing spends before the ring gate" structural: the verdict container does not yet + // exist for a consumer to ask. + if state.loop_detect_ring.len() < 2 { + return Err(BoundedOfferRefusal::NoCertification); + } // (4) CERTIFICATION — two bases, first match wins, NEVER combined. // @@ -1101,14 +1197,90 @@ pub fn try_offer_bounded_cycle_shortcut( // copy … the `On` arm stays VERBATIM (byte-identity gate)" — and retargeting the four // shipped walks would edit byte-identity-gated paths inside a feature commit. Newest // prior first: the most recent recurrence is the least extrapolation. - // CR 104.4b comparand half — every certification reader, unchanged in value from HEAD. + // + // TWO PARALLEL VECS OVER ONE INDEX SPACE. They are built from the same `VecDeque` in the + // same order, so `ring.len() == ring_live.len()` by construction and `span`, `[idx..]` + // and basis B's `n - 1 - k` are unchanged expressions on both. + // CR 104.4b comparand half — every certification reader, unchanged in value. let ring: Vec<&GameState> = state .loop_detect_ring .iter() .map(|f| &f.normalized) .collect(); + // CR 732.2a evaluable half — the period-touch domain. A normalized frame zeroes + // `next_object_id` and strips trigger identity, so it is a comparand and never a board to + // evaluate an announcement or a resolution against. + let ring_live: Vec<&GameState> = state.loop_detect_ring.iter().map(|f| &f.live).collect(); + + // The per-mint verdict door, constructed immediately after the ring materialization and + // before anything asks it. It allocates an empty memo and a `u32` budget and classifies + // NOTHING; the seam mints its own capability token because it, not its caller, resolves + // the cap. + let cap_value = match cap { + ProbeCap::Shipped => PROBE_BUDGET, + ProbeCap::Lowered(n) => n.min(PROBE_BUDGET), + ProbeCap::RaisedTwiceLinks => 2 * state.stack.len() as u32, + }; + let mut verdicts = PeriodVerdicts::for_period_with_cap( + &ring_live, + state, + proposer, + cap_value, + CapAuthority(()), + ); + + // ONE exit for the meter: everything that can ask the door lives below, and the snapshot + // is taken here rather than at each refusal so a future refusal arm cannot forget it. + // `certification` is the exception BY NECESSITY — it is not a counter the container + // accumulates but a choice made mid-walk, so it is written where it is decided and read + // back here through the same one exit. + let outcome = certified_bounded_cycle_offer( + state, + mandatory, + proposer, + &ring, + &ring_live, + &mut verdicts, + &mut meter.certification, + ); + meter.spent = verdicts.spent(); + meter.denied = verdicts.denied(); + meter.conjunct6_asks = verdicts.conjunct6_asks(); + meter.conjunct6_frozen_skips = verdicts.conjunct6_frozen_skips(); + meter.conjunct4_scans = verdicts.conjunct4_scans(); + outcome +} + +/// CR 732.2a: certification (step 4/4b), the choice gate and the bound — everything that can +/// ask the verdict door, split out so its caller owns exactly one meter snapshot. +#[allow(clippy::too_many_arguments)] +fn certified_bounded_cycle_offer<'a>( + state: &'a GameState, + mandatory: bool, + proposer: PlayerId, + ring: &[&'a GameState], + ring_live: &[&'a GameState], + verdicts: &mut crate::analysis::resource::PeriodVerdicts<'a>, + cert_out: &mut Option, +) -> Result { + use crate::analysis::decision_template::{ + DecisionPoint, DecisionPointKind, DecisionSlot, IterationCount, + }; + use crate::analysis::resource::{ + certified_period_touch, PeriodCertification, PeriodTouch, PeriodicDelta, ResourceVector, + }; + use crate::types::ability::TargetRef; + let cur = ResourceVector::snapshot(state); - let basis_a = ring.iter().enumerate().rev().find_map(|(idx, &prior)| { + // Written as an explicit newest-first walk rather than `find_map` because the candidate + // body now threads `&mut verdicts` and carries an owned per-candidate `PeriodTouch` out. + let mut basis_a: Option<( + &GameState, + Vec, + PeriodTouch<'_>, + PeriodicDelta, + )> = None; + for idx in (0..ring.len()).rev() { // The span, in RETAINED RING FRAMES, that this candidate pair covers. // `ring.last()` is the sample `pass_priority_once_with_pipeline` recorded at THIS // beat, before the bridge ran, so the newest frame is the current state and the @@ -1120,32 +1292,80 @@ pub fn try_offer_bounded_cycle_shortcut( // now DELIMITS a committed cycle by this count, and a published `0` would mean // "one repetition spans no frames", which no drive can honour. Fail closed on the // degenerate pair rather than rely on a downstream conjunct to catch it. + // + // EVALUATED FIRST, before the window is built, touched or minted from — `span >= 1` + // is `window.len() >= 2` identically, so this guard is also what keeps a degenerate + // window out of the touch and the mint. let span = ring.len() - 1 - idx; + if span < 1 { + continue; + } + let prior = ring[idx]; + let window = &ring_live[idx..]; + // Built under `BoardCovered` unconditionally, because step 4 does not yet know which + // disjunct will match; step 4b keeps it or rebuilds it. + let touch_cover = certified_period_touch(window, state, PeriodCertification::BoardCovered); + // (3) The published per-iteration choices (5a's single authority), now enumerated + // over the CERTIFIED PERIOD's announced pairs rather than over the offer-beat stack. + let points = bounded_cycle_pin_slots_for_window(&touch_cover, proposer); + let slots: Vec = points.iter().map(|p| p.slot.clone()).collect(); let delta = ResourceVector::delta(&ResourceVector::snapshot(prior), &cur); - (span >= 1 - && (crate::analysis::resource::loop_states_equal_modulo_resources(prior, state) - || crate::analysis::resource::loop_states_cover_modulo_growth_pinned( - prior, state, proposer, &slots, - )) - && delta.net_progress_for(proposer)) - .then(|| { - ( - prior, - state, - PeriodicDelta { - // MEASURED span, not the former hardcoded `1`. The walk is `.rev()`, so - // `idx` is usually `len - 2` and the span is 1 — but it is 1 by - // MEASUREMENT, not by assumption, and it is NOT always 1: the - // `interactive_3p_subset_lethal_does_not_crown` fixture's repetition - // spans TWO frames (a gain-life resolution then a lose-life one), and - // under the old hardcode its accepted drive committed nothing at all. - frames_per_period: span as u32, - delta, - victim_slot: Vec::new(), - }, - ) - }) - }); + // The existing disjunction, written as an `if / else if` that RECORDS the matching + // disjunct instead of discarding it. Semantics are byte-for-byte the `||` it + // replaces: the equality arm is still evaluated first and `_pinned` still runs only + // when it fails. The two disjuncts are mutually exclusive — equality compares the + // stack exactly (constant depth) while cover's item (2) forces strictly growing depth + // — so "which disjunct" is a total function with no both-matched case. + let cert = if crate::analysis::resource::loop_states_equal_modulo_resources(prior, state) { + Some(PeriodCertification::BoardEqualOnly) + } else if crate::analysis::resource::loop_states_cover_modulo_growth_pinned( + prior, + state, + proposer, + &slots, + &touch_cover, + verdicts, + ) { + Some(PeriodCertification::BoardCovered) + } else { + None + }; + let Some(cert) = cert else { + continue; + }; + if !delta.net_progress_for(proposer) { + continue; + } + // (4b) THE CERTIFIED TOUCH, keyed to the disjunct that actually matched. The cover + // disjunct supplies both premises the frozen subtraction rests on; the equality + // disjunct supplies only the depth one, so its period is rebuilt with the exemption + // withdrawn. `announced` is identical on both, so the mint is not re-derived. + let touch = match cert { + PeriodCertification::BoardCovered => touch_cover, + c => certified_period_touch(window, state, c), + }; + // Recorded HERE and not at the `if / else if`: a candidate that certifies and then + // dies on `net_progress_for` is not the certificate the mint carries forward, and a + // meter that named it would attribute the offer to a pair the walk discarded. + *cert_out = Some(cert); + basis_a = Some(( + prior, + points, + touch, + PeriodicDelta { + // MEASURED span, not the former hardcoded `1`. The walk is `.rev()`, so + // `idx` is usually `len - 2` and the span is 1 — but it is 1 by + // MEASUREMENT, not by assumption, and it is NOT always 1: the + // `interactive_3p_subset_lethal_does_not_crown` fixture's repetition + // spans TWO frames (a gain-life resolution then a lose-life one), and + // under the old hardcode its accepted drive committed nothing at all. + frames_per_period: span as u32, + delta, + victim_slot: Vec::new(), + }, + )); + break; + } // Basis B consults NO board predicate: a period whose frame-deltas repeated twice in the // retained ring is a signature on its own. Its certifying pair is the ring frame one // period back and the ring's newest frame — the very pair `ring_delta_signature` @@ -1185,20 +1405,35 @@ pub fn try_offer_bounded_cycle_shortcut( // fixture publishes.) The only sound attribution is a discriminating probe: force // `ring_delta_signature` to return `None` (basis B's sole entry point is the `None =>` // arm below) — the rows that survive are basis A, the rows that fail are basis B. - let (cert_prior, cert_current, mut periodic) = match basis_a { + let (cert_prior, points, touch, mut periodic) = match basis_a { Some(hit) => hit, None => { let (k, delta) = crate::analysis::resource::ring_delta_signature(state) .ok_or(BoundedOfferRefusal::NoCertification)?; let n = ring.len(); + let start = n + .checked_sub(1 + k as usize) + .ok_or(BoundedOfferRefusal::NoCertification)?; + let cert_prior = *ring + .get(start) + .ok_or(BoundedOfferRefusal::NoCertification)?; + // Basis B EXEMPTS NOTHING, and that is derived rather than cautious: its + // certificate consults no board predicate, so it supplies no premise that the + // period cannot SHRINK the stack — a stack draining from the top under a ticking + // monotone resource satisfies the delta signature and leaves a large frozen + // bottom prefix the drain will reach. `announced` is unchanged; only the + // subtraction is withdrawn. + let window = ring_live + .get(start..) + .ok_or(BoundedOfferRefusal::NoCertification)?; + let touch = + certified_period_touch(window, state, PeriodCertification::ResourceSignatureOnly); + *cert_out = Some(PeriodCertification::ResourceSignatureOnly); + let points = bounded_cycle_pin_slots_for_window(&touch, proposer); ( - *ring - .get( - n.checked_sub(1 + k as usize) - .ok_or(BoundedOfferRefusal::NoCertification)?, - ) - .ok_or(BoundedOfferRefusal::NoCertification)?, - *ring.last().ok_or(BoundedOfferRefusal::NoCertification)?, + cert_prior, + points, + touch, PeriodicDelta { frames_per_period: k, delta, @@ -1240,7 +1475,14 @@ pub fn try_offer_bounded_cycle_shortcut( // population rather than overwritten with an unmeasured claim. Either way the conjunct's // JUSTIFICATION is unchanged: cover refuses on board facts, and this seam asks about // choices. - if !crate::analysis::resource::stack_choices_are_all_specified(state, proposer, &slots) { + let slots: Vec = points.iter().map(|p| p.slot.clone()).collect(); + if !crate::analysis::resource::stack_choices_are_all_specified( + state, + proposer, + &slots, + Some(&touch), + verdicts, + ) { return Err(BoundedOfferRefusal::UnspecifiedChoiceWindow); } @@ -1293,7 +1535,9 @@ pub fn try_offer_bounded_cycle_shortcut( // (8) The certificate, with the two fields the bounded class states differently from // Path A's spelled out at the site rather than mutated after the fact. - let base = build_cert(cert_prior, cert_current, &periodic.delta, proposer); + // `cert_current` is the live `state` on both bases, exactly as before: `build_cert`'s only + // use of the pair is `board_delta`, a comparand read. + let base = build_cert(cert_prior, state, &periodic.delta, proposer); let certificate = crate::analysis::loop_check::LoopCertificate { per_cycle: Some(periodic), // CR 732.5: honest, and currently read by nothing in production — a loop nobody can @@ -1501,7 +1745,8 @@ pub(crate) struct EntryPinSlots { /// `None` when it publishes none. /// /// SINGLE AUTHORITY, and that is the whole point of its existence: the MINT -/// ([`bounded_cycle_pin_slots`]) maps it over `state.stack`, and the RELIEF +/// ([`bounded_cycle_pin_slots_for_window`]) maps it over the certified period's announced +/// pairs, of which `state.stack` is the zero-window degenerate case, and the RELIEF /// (`analysis::resource`'s CR 732.2a gate-(3)/(6) pin skip) calls it for one entry. Because /// both sides ask the same function, the relief predicate cannot be COARSER than the mint /// predicate — relieving a verdict the published pin does not specify is impossible by @@ -1760,11 +2005,44 @@ pub(crate) fn entry_publishes_pin_slots( pub fn bounded_cycle_pin_slots( state: &GameState, proposer: PlayerId, +) -> Vec { + // The DEGENERATE one-frame case of the window enumerator: with no window frame there is + // no transition to observe, so `certified_period_touch`'s `window.is_empty()` branch seeds + // `announced` from `state.stack` — same authority, same set, same order, same dedup, hence + // byte-identical to the snapshot mint this used to be. The alias holds NO certificate, so + // it passes `ResourceSignatureOnly`: the type is never allowed to claim one its caller + // does not hold (and the empty-window branch yields `frozen_ids: ∅` on any value). + bounded_cycle_pin_slots_for_window( + &crate::analysis::resource::certified_period_touch( + &[], + state, + crate::analysis::resource::PeriodCertification::ResourceSignatureOnly, + ), + proposer, + ) +} + +/// CR 732.2a: the per-iteration choice slots ONE CERTIFIED PERIOD publishes for `proposer`. +/// +/// Maps the single authority [`entry_publishes_pin_slots`] over `touch.announced`, with the +/// same per-slot dedup [`bounded_cycle_pin_slots`] applies — each pair evaluated against ITS +/// OWN carrying frame, which is the ring sample's LIVE half and never a `normalize_for_loop` +/// product: a normalized frame would key the stored-auto-choice refusal on `ObjectId(0)` and +/// would make `build_target_slots` take its `trigger_source: None` fall-through and publish a +/// WIDER legal set than the live board admits. +/// +/// It calls the RAW mint rather than the verdict door on purpose: routing it through the door +/// would eagerly classify (and charge for) every announced pair at slot-enumeration time, +/// which is exactly the pre-population pass this design removes. The relief side reads the +/// CACHED mint through the door instead. +pub(crate) fn bounded_cycle_pin_slots_for_window( + touch: &crate::analysis::resource::PeriodTouch<'_>, + proposer: PlayerId, ) -> Vec { use crate::analysis::decision_template::{DecisionPoint, DecisionPointKind}; let mut points: Vec = Vec::new(); - for entry in &state.stack { - let Some(pins) = entry_publishes_pin_slots(state, entry, proposer) else { + for (frame, entry) in &touch.announced { + let Some(pins) = entry_publishes_pin_slots(frame, entry, proposer) else { continue; }; // CR 601.2c: a `Targets` point only when the entry actually announces a choice. @@ -13643,7 +13921,7 @@ mod stage2_injector_tests { "game/effects/mod.rs:5973".to_string(), "game/effects/mod.rs:8927".to_string(), "game/effects/scoped_library_search.rs:452".to_string(), - "game/engine.rs:10155".to_string(), + "game/engine.rs:10433".to_string(), ], "the five production producers, NAMED: the CR 603.5 gate in `resolve_chain_body` \ plus the two repeated-optional-payment drivers, the per-player acceptance cursor \ diff --git a/crates/engine/tests/integration/loop_shortcut.rs b/crates/engine/tests/integration/loop_shortcut.rs index a17eb8ec7d..cc27667423 100644 --- a/crates/engine/tests/integration/loop_shortcut.rs +++ b/crates/engine/tests/integration/loop_shortcut.rs @@ -7783,6 +7783,106 @@ fn dina_untargeted_drain_4p_offers_at_three_live_opponents() { ); } +/// R33 arm (d) — THE CORPUS'S ONE OFFERING BEAT CERTIFIES THROUGH BASIS B, AND THE FROZEN +/// EXEMPTION IS THEREFORE WITHDRAWN THERE. +/// +/// CR 732.2a. The row R33 (a)/(b)/(a′) prove at the constructor and the selection site; this +/// arm proves it on the REAL board the engine actually offers on, because the plan's cost +/// argument (the frozen subtraction, and the speed-up that rests on it) was measured at +/// *dellian-shaped* beats and this is the beat the corpus *offers* at. Escalated to the lead +/// and ruled on before this test was written; the figures are in the commit message. +/// +/// MEASUREMENT, not re-assertion of a design: the certifying disjunct has no other surface. +/// Both bases publish `frames_per_period`, so `LoopCertificate` discriminates in NEITHER +/// direction — hence [`MintMeter::certification`]. +/// +/// FIDELITY OF THE OBSERVATION, which is this row's real risk. The production mint runs +/// INSIDE the offering beat's `apply()`, from a `Priority` window the bridge has already +/// consumed by the time the drive returns, so the beat's own meter is unreachable from a +/// test. The mint is re-run here on the offer beat's state with that window restored, and +/// the reconstruction is PROVEN faithful rather than assumed: it must (1) offer at all and +/// (2) publish a `per_cycle` EQUAL to the one the production path wrote into `waiting_for`. +/// A reconstruction that drifted would fail (1) or (2) before the basis assertion is reached. +#[test] +fn dina_offering_beat_certifies_through_basis_b_and_exempts_nothing() { + use engine::analysis::resource::PeriodCertification; + use engine::game::engine::{try_offer_bounded_cycle_shortcut_metered, ProbeCap}; + + let mut state = restore_dump(&gunzip_dump(include_bytes!( + "../fixtures/dina_conqueror_4p.json.gz" + ))); + let beat = drive_to_bounded_offer(&mut state, 400) + .expect("CR 732.2a: the bounded offer must FIRE on this real 4p drain"); + let (proposer, certificate, _) = bounded_offer_parts(&state); + let published = certificate + .per_cycle + .clone() + .expect("the bounded offer publishes a per-cycle signature"); + + // Restore the window the bridge consumed. Everything else the mint reads — the ring, the + // stack, the resources, `last_loop_action_sequence` — is the offer beat's own state. + let mut replay = state.clone(); + replay.waiting_for = WaitingFor::Priority { player: proposer }; + let (outcome, meter) = + try_offer_bounded_cycle_shortcut_metered(&replay, false, ProbeCap::Shipped); + + // (1) reconstruction fidelity, part one + assert!( + outcome.is_ok(), + "REACH-GUARD: the replayed mint must reach the same OFFER the production path raised \ + at beat {beat}; a refusal here means this row measures a different board than the \ + engine did, and the basis assertion below would be about nothing. Got {outcome:?}, \ + meter {meter:?}" + ); + // (1) reconstruction fidelity, part two — the same certificate, not merely some offer + let WaitingFor::LoopShortcut { + certificate: replayed, + .. + } = outcome.expect("asserted Ok above") + else { + panic!("the bounded offer is a LoopShortcut window"); + }; + assert_eq!( + replayed.per_cycle.as_ref(), + Some(&published), + "REACH-GUARD: the replayed mint must publish the SAME per-cycle signature as the \ + production offer at beat {beat}" + ); + + // (2) THE MEASURED AXIS. Basis A certified NOTHING corpus-wide (0 of 129 certifications + // across the three 4p dumps); this beat takes `ring_delta_signature`, which by its own + // doc consults no board predicate. + assert_eq!( + meter.certification, + Some(PeriodCertification::ResourceSignatureOnly), + "R33: the corpus's one offering beat (beat {beat}) certifies through BASIS B. If this \ + ever reads `BoardCovered`, the frozen exemption became available at an offering beat \ + and the plan's exempted-cost row must be re-derived before that is relied on" + ); + + // (3) THE CONSEQUENCE, which is the half that makes this arm about the exemption rather + // than about a label: under a non-`BoardCovered` certificate `frozen_ids` is empty, so + // conjunct (6) skips NOTHING and scans every non-exempt entry it is handed. + assert_eq!( + meter.conjunct6_frozen_skips, 0, + "R33: `ResourceSignatureOnly` supplies neither P2 nor P4, so the subtraction is \ + withdrawn and conjunct (6) exempts nothing at this beat" + ); + assert!( + meter.conjunct6_asks > 0, + "REACH-GUARD against a vacuous skip count: conjunct (6) must actually have RUN at \ + this beat, else `frozen_skips == 0` is trivially true; meter {meter:?}" + ); + + // (4) THE BUDGET, re-derived from this very beat (R16(ii-a)). The offer fires WITH the + // cap binding, not because the cap stopped mattering. + assert!( + !meter.denied, + "R16(ii-a): the shipped cap must not starve the corpus's acceptance offer; measured \ + demand at this beat is 13 charges. meter {meter:?}" + ); +} + /// Drive a `GameScenario`-built board until the ENGINE writes a bounded offer, declining /// nothing and injecting nothing. Returns the beat, or `None` if the cap ran out. Reads /// `state.waiting_for` — the production Path D write — never an out-of-band predicate call. From 30cc3cec6c0b300c926fa113d933d6fcab68b823 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sat, 1 Aug 2026 20:14:11 -0500 Subject: [PATCH 16/62] test(engine): pin the frozen exemption to its certifying disjunct (5d U3, R33) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Six arms on the CR 732.2a bounded-offer frozen exemption, all on real-dump or constructed-equality windows driven through `apply()`: - (a)/(b)/(a'1)/(c1)/(c2) on the real dellian window — beat SEARCHED by construction requirements, landing on beat 14 / 152 frozen, independently agreeing with the plan's RF13-BEAT row; (a) bounded by an independent longest-common-prefix scan, never f(x)==f(x). - (a'2) at the SELECTION site on a constructed equality-certified ring, with both reach-guards firing (non-empty BoardCovered frozen set; certification == Some(BoardEqualOnly)). - (d) landed previously (060d0cf64). Revert-probes, all run and restored byte-identical: 1. delete the pre-walk early return => (b) flips, 152 frozen leak back 2. basis-B call site -> BoardCovered => (d) flips 3. delete step 4b (round-39 shape) => (a'2) ALONE flips while a/b/a'1/c/(d) all still pass — the round-40-vs-round-39 discriminator this arm exists for. R33(c2) keys to the PROBE_BUDGET constant (12->26 needed no edit); the 96-107 unexempted band is recorded, not asserted. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/analysis/resource.rs | 233 +++++++++++++++++++++++++ crates/engine/src/game/engine.rs | 123 +++++++++++++ 2 files changed, 356 insertions(+) diff --git a/crates/engine/src/analysis/resource.rs b/crates/engine/src/analysis/resource.rs index 511c230734..79853193ff 100644 --- a/crates/engine/src/analysis/resource.rs +++ b/crates/engine/src/analysis/resource.rs @@ -5099,6 +5099,84 @@ mod tests { oid } + /// Inflate one of the real 4p dumps through the PRODUCTION decoder — the same + /// chokepoint the server's `from_persisted` and WASM's `decode_restored_game_state` + /// funnel through, never a bare `GameState` decode. + fn dump_state(gz: &[u8]) -> GameState { + use std::io::Read; + let mut json = String::new(); + flate2::read::GzDecoder::new(gz) + .read_to_string(&mut json) + .expect("fixture .json.gz must inflate to UTF-8 JSON"); + let envelope: serde_json::Value = + serde_json::from_str(&json).expect("dump envelope parses as JSON"); + serde_json::from_value::( + envelope["gameState"].clone(), + ) + .expect("gameState deserializes through the production decoder") + .into_game_state() + } + + /// One beat of the shared dump drive policy (`tests/integration/loop_shortcut.rs`'s + /// `dump_drive_one_beat`): at `Priority` always pass — the mandatory triggers resolve + /// and re-trigger, which IS the loop when there is one — otherwise take the first + /// legal non-terminal action. Every beat crosses `apply()`. + fn dump_drive_one_beat(state: &mut GameState) -> Result<(), String> { + use crate::types::actions::GameAction; + use crate::types::game_state::WaitingFor; + + let actor = state + .waiting_for + .acting_player() + .into_iter() + .chain(state.players.iter().map(|p| p.id)) + .find_map(|p| { + let (actions, _costs, _grouped) = + crate::ai_support::legal_actions_for_viewer(state, p); + (!actions.is_empty()).then_some((p, actions)) + }); + let Some((who, actions)) = actor else { + return Err(format!("no legal actor at {:?}", state.waiting_for)); + }; + let forbidden = + |a: &GameAction| matches!(a, GameAction::Concede { .. } | GameAction::Debug(_)); + let chosen = if matches!(state.waiting_for, WaitingFor::Priority { .. }) { + actions + .iter() + .find(|a| matches!(a, GameAction::PassPriority)) + } else { + actions + .iter() + .find(|a| !matches!(a, GameAction::PassPriority) && !forbidden(a)) + .or_else(|| actions.iter().find(|a| !forbidden(a))) + }; + let Some(action) = chosen.cloned() else { + return Err(format!("empty action list at {:?}", state.waiting_for)); + }; + crate::game::engine::apply(state, who, action.clone()) + .map(|_| ()) + .map_err(|e| format!("apply err ({action:?}): {e:?}")) + } + + /// A frozen-set LOWER BOUND computed INDEPENDENTLY of the function under test: the + /// longest common prefix, by object id, of every window frame's stack and `current`'s. + /// + /// Sound because it is a strictly weaker computation than the predicate it bounds — + /// `certified_period_touch` freezes an id iff it sits at the SAME INDEX in every window + /// frame, and every position inside a common prefix satisfies that by construction. It + /// is a prefix scan that stops at the first disagreement, not a per-index filter over + /// the whole stack, so it cannot degenerate into `f(x) == f(x)` against the callee. + fn frozen_lower_bound(window: &[&GameState], current: &GameState) -> usize { + (0..current.stack.len()) + .take_while(|&i| { + let id = current.stack[i].id; + window + .iter() + .all(|f| f.stack.get(i).map(|e| e.id) == Some(id)) + }) + .count() + } + fn test_trigger_ref(state: &GameState, object_id: ObjectId) -> TriggerDefinitionRef { let object = &state.objects[&object_id]; TriggerDefinitionRef { @@ -13133,4 +13211,159 @@ mod tests { ); } } + + /// R33 arms (a) / (b) / (a′1) / (c) — THE FROZEN EXEMPTION IS KEYED TO THE CERTIFYING + /// DISJUNCT, AT THE CONSTRUCTOR **AND** AT THE CONSUMER, ON A REAL DRIVEN WINDOW. + /// + /// CR 732.2a + CR 608.1. The exemption's limb (*observed-frozen ⇒ frozen across the + /// fast-forward*) needs P2 (the period cannot SHRINK the stack) and P4 (the fast-forward + /// IS the repetition of the observed period). Exactly one certifying disjunct supplies + /// both, so `frozen_ids` is non-empty under `BoardCovered` and EMPTY under the other two. + /// + /// The board is the dellian dump DRIVEN through `apply()` — the dump ships with an empty + /// ring, so every frame the window is built from was accumulated by this drive. The beat + /// is SEARCHED FOR by its construction requirements rather than hardcoded, because a + /// hardcoded beat index is a fixture that drifts silently when the drive policy moves. + /// + /// (a) the window really freezes something — asserted against an INDEPENDENT lower bound + /// ([`frozen_lower_bound`]), never against the callee's own answer. (b)/(a′1) the two + /// matched negatives, differing from (a) in EXACTLY ONE ARGUMENT. (c) the consumer half: + /// the same two touches through `stack_choices_are_all_specified`, where the boolean flip + /// is the load-bearing assertion and the counters are its attribution. + /// + /// REVERT-PROBE 1: delete `certified_period_touch`'s pre-walk early return so `frozen_ids` + /// is computed unconditionally ⇒ (b) and (a′1) FLIP from empty to the full set and (c)'s + /// two arms collapse to equal populations. + #[test] + fn r33_frozen_exemption_is_keyed_to_the_certificate_on_the_real_dellian_window() { + let mut state = dump_state(include_bytes!( + "../../tests/fixtures/dellian_emblem_conqueror_4p.json.gz" + )); + assert_eq!( + state.loop_detect_ring.len(), + 0, + "reach-guard: the dump must ship with an EMPTY ring — every frame the window \ + below is built from is accumulated by THIS drive, not restored" + ); + + // Drive until a beat satisfies the row's construction requirements: a usable ring + // AND a window that genuinely freezes something. Both are checked BEFORE the board + // is captured, so the arms below cannot run on a beat that does not carry them. + let mut hit: Option<(usize, GameState)> = None; + for beat in 0..80usize { + if state.loop_detect_ring.len() >= 2 { + let live: Vec<&GameState> = + state.loop_detect_ring.iter().map(|f| &f.live).collect(); + let window = &live[live.len() - 2..]; + if frozen_lower_bound(window, &state) > 0 { + drop(live); + hit = Some((beat, state.clone())); + break; + } + } + if dump_drive_one_beat(&mut state).is_err() { + break; + } + } + let (beat, board) = hit.expect( + "REACH-GUARD: no driven beat carried a ring >= 2 frames AND a window with a \ + non-empty observed-frozen prefix. Every arm below would be vacuous on such a \ + beat, so the row FAILS rather than passing over a window that freezes nothing", + ); + + let live: Vec<&GameState> = board.loop_detect_ring.iter().map(|f| &f.live).collect(); + // The newest candidate pair, i.e. `span == 1` — the shape §3 D2's walk reaches first. + let window = &live[live.len() - 2..]; + let bound = frozen_lower_bound(window, &board); + let proposer = board.active_player; + + // ── (a) the exemption is genuinely AVAILABLE on this window ────────────────────── + let cover = certified_period_touch(window, &board, PeriodCertification::BoardCovered); + assert!( + cover.frozen_ids.len() >= bound && bound > 0, + "(a) beat {beat}: the cover certificate must freeze at least the {bound} entries \ + the independent common-prefix bound proves are index-stable across every window \ + frame; got {}", + cover.frozen_ids.len() + ); + + // ── (b) / (a′1) the two matched negatives, ONE argument different ──────────────── + let sig = + certified_period_touch(window, &board, PeriodCertification::ResourceSignatureOnly); + assert!( + sig.frozen_ids.is_empty(), + "(b) beat {beat}: basis B consults no board predicate, so it supplies neither P2 \ + nor P4 and the subtraction is withdrawn; got {} frozen", + sig.frozen_ids.len() + ); + let eq = certified_period_touch(window, &board, PeriodCertification::BoardEqualOnly); + assert!( + eq.frozen_ids.is_empty(), + "(a′1) beat {beat}: the equality disjunct supplies P2 but NOT P4 — it has no \ + items (4)/(5) — so it is as fail-closed as basis B; got {} frozen", + eq.frozen_ids.len() + ); + + // ANTI-OVER-NARROWING: only the SUBTRACTION is keyed. A certificate change must not + // zero the whole touch — that would under-publish the mint instead of un-exempting. + let ids = |t: &PeriodTouch<'_>| -> Vec { + t.announced.iter().map(|(_, e)| e.id).collect() + }; + assert_eq!( + ids(&sig), + ids(&cover), + "the certificate keys the frozen subtraction ONLY: `announced` must be \ + element-for-element identical under every value" + ); + assert_eq!(ids(&eq), ids(&cover), "same, for the equality value"); + + // ── (c) THE CONSUMER HALF: the same two touches, through conjunct (6) ──────────── + // Fresh containers per arm — a shared one would carry a warm memo and a part-spent + // budget into the second arm, making the counters incomparable. + let mut v_cover = PeriodVerdicts::for_period(&live, &board, proposer); + let c1 = stack_choices_are_all_specified(&board, proposer, &[], Some(&cover), &mut v_cover); + let mut v_sig = PeriodVerdicts::for_period(&live, &board, proposer); + let c2 = stack_choices_are_all_specified(&board, proposer, &[], Some(&sig), &mut v_sig); + + // The BOOLEAN FLIP is the load-bearing assertion; the counters are its attribution. + assert!( + c1 && !c2, + "(c) beat {beat}: conjunct (6) must ACCEPT under the exempting certificate and \ + REFUSE under the non-exempting one. Measured c1={c1} (asks={}, skips={}, \ + spent={}, denied={}) c2={c2} (asks={}, skips={}, spent={}, denied={}), stack={}", + v_cover.conjunct6_asks(), + v_cover.conjunct6_frozen_skips(), + v_cover.spent(), + v_cover.denied(), + v_sig.conjunct6_asks(), + v_sig.conjunct6_frozen_skips(), + v_sig.spent(), + v_sig.denied(), + board.stack.len() + ); + assert!( + v_cover.conjunct6_frozen_skips() as usize >= bound, + "(c1) the accepted arm must have SKIPPED the frozen ids rather than classified \ + them; skips={} bound={bound}", + v_cover.conjunct6_frozen_skips() + ); + assert!( + !v_cover.denied() && v_cover.spent() <= PROBE_BUDGET, + "(c1) the exempted classification must fit the cap: spent={} denied={}", + v_cover.spent(), + v_cover.denied() + ); + assert_eq!( + v_sig.conjunct6_frozen_skips(), + 0, + "(c2) the non-exempting certificate must skip NOTHING" + ); + assert!( + v_sig.denied() && v_sig.spent() == PROBE_BUDGET, + "(c2) the unexempted sweep must exhaust the cap and refuse fail-closed — its \ + measured demand is far above it. spent={} denied={} cap={PROBE_BUDGET}", + v_sig.spent(), + v_sig.denied() + ); + } } diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index ee7e6ec425..d6cd1fc29c 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -14839,6 +14839,129 @@ mod bounded_offer_conjunct_tests { state } + /// R33 arm (a′2) — THE SELECTION SITE: AN EQUALITY-CERTIFIED CANDIDATE CARRIES NO FROZEN + /// EXEMPTION, EVEN THOUGH ITS WINDOW HAS ONE AVAILABLE. + /// + /// CR 732.2a + CR 608.1. Arms (a)/(b)/(a′1) prove the CONSTRUCTOR keys the subtraction to + /// the certificate value. This arm proves §3 D2's step 4b actually SELECTS the right + /// value: it is the only arm that fails on the round-39 shape (one `BoardCovered` + /// certificate for the whole `equality || cover` disjunction), which every other arm in + /// the row passes unchanged. + /// + /// The fixture is CONSTRUCTED, not fixture-mined: `drain_ring`'s frames are board-equal at + /// every index, so `loop_states_equal_modulo_resources` matches and — by the mutual + /// exclusivity of the two disjuncts (equality = constant depth, cover = strictly growing + /// depth) — `stack_covers` cannot. One stack entry is seeded IDENTICALLY into `current` + /// and into both halves of every retained frame, which is what makes the window carry a + /// non-empty observed-frozen set: the exemption is genuinely AVAILABLE here, and the row + /// is about it being genuinely WITHDRAWN. + /// + /// REVERT-PROBE 3 (the round's signature probe): delete step 4b and let conjunct (6) + /// consume step 3's `touch_cover` directly ⇒ this row FLIPS while (a)/(b)/(a′1)/(c) all + /// still pass — which is exactly why the arm exists. + #[test] + fn r33_equality_certified_candidate_carries_no_frozen_exemption() { + use crate::analysis::resource::{certified_period_touch, PeriodCertification}; + use crate::game::engine::{try_offer_bounded_cycle_shortcut_metered, ProbeCap}; + use crate::types::ability::{Effect, QuantityExpr, ResolvedAbility}; + use crate::types::game_state::{StackEntry, StackEntryKind}; + use crate::types::identifiers::{CardId, ObjectId}; + use crate::types::LoopDetectSample; + use std::sync::Arc; + + let mut state = drain_ring(P1, 3); + let src = ObjectId(941); + let mut source = crate::game::game_object::GameObject::new( + src, + CardId(0), + P0, + "Frozen Ticker".to_string(), + crate::types::zones::Zone::Battlefield, + ); + source.incarnation = 3; + // A MANDATORY, choice-free resolution: conjunct (6) must be able to accept it, so a + // refusal below is attributable to the exemption and not to an unspecified choice. + let entry = StackEntry { + id: ObjectId(951), + source_id: src, + controller: P0, + kind: StackEntryKind::TriggeredAbility { + source_id: src, + ability: Box::new(ResolvedAbility::new( + Effect::LoseLife { + amount: QuantityExpr::Fixed { value: 1 }, + target: None, + }, + vec![], + src, + P0, + )), + condition: None, + trigger_event: None, + description: None, + source_name: String::new(), + subject_match_count: None, + die_result: None, + }, + }; + // Injected identically everywhere, so board equality is preserved and the entry sits + // at the SAME INDEX in every window frame — the frozen predicate's exact condition. + let inject = |g: &mut GameState| { + g.objects.insert(src, source.clone()); + g.battlefield.push_back(src); + g.stack.push_back(entry.clone()); + }; + inject(&mut state); + let frames: std::collections::VecDeque> = state + .loop_detect_ring + .iter() + .map(|s| { + let mut normalized = s.normalized.clone(); + let mut live = s.live.clone(); + inject(&mut normalized); + inject(&mut live); + Arc::new(LoopDetectSample { normalized, live }) + }) + .collect(); + state.loop_detect_ring = frames; + + // REACH-GUARD 1: the exemption is genuinely AVAILABLE on this candidate's window — + // otherwise "withdrawn" is indistinguishable from "there was nothing to withdraw". + let live: Vec<&GameState> = state.loop_detect_ring.iter().map(|f| &f.live).collect(); + let window = &live[live.len() - 2..]; + let available = certified_period_touch(window, &state, PeriodCertification::BoardCovered); + assert!( + !available.frozen_ids.is_empty(), + "REACH-GUARD: the constructed window must carry a non-empty observed-frozen set" + ); + + let (outcome, meter) = + try_offer_bounded_cycle_shortcut_metered(&state, false, ProbeCap::Shipped); + + // REACH-GUARD 2: the EQUALITY arm is the one that matched. Without this the row could + // pass on a candidate that never certified, or one that took the cover disjunct. + assert_eq!( + meter.certification, + Some(PeriodCertification::BoardEqualOnly), + "REACH-GUARD: the constructed pair must certify through the EQUALITY disjunct, \ + which is the case this arm is about; outcome {outcome:?}" + ); + + // THE RULING: equality supplies P2 but not P4, so the period carried forward exempts + // NOTHING — observable as conjunct (6) skipping nothing while it really does run. + assert_eq!( + meter.conjunct6_frozen_skips, 0, + "(a′2) step 4b must REBUILD the equality candidate's period with the subtraction \ + withdrawn; a non-zero skip count means the `BoardCovered` touch from step 3 was \ + carried into conjunct (6). meter {meter:?}" + ); + assert!( + meter.conjunct6_asks > 0, + "REACH-GUARD against a vacuous skip count: conjunct (6) must actually have RUN, \ + else `skips == 0` is trivially true. meter {meter:?}" + ); + } + /// Mill `victim` by one card per retained frame — a constant per-frame library delta, which /// is a period observed twice at `frames >= 3`. fn mill_ring(victim: PlayerId, frames: usize) -> GameState { From d5207644e631b285df8c27907b2172c4b4497412 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sat, 1 Aug 2026 21:07:18 -0500 Subject: [PATCH 17/62] test(engine): budget-refusal and warmup-meter rows for the bounded offer (5d U3, R15/R16(v)/R20) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - R15: the real dina offer beat replayed at ProbeCap::Lowered(0) refuses with UnspecifiedChoiceWindow while Shipped offers; probe (delete probe_resolution's try_charge_one arm) FLIPPED — the zero-cap board offers at spent:0 asks:13, D=13 confirmed by a third independent instrument. Basis B certifies for free at any cap (no board predicate); the denial is conjunct (6)'s. - R16(v): a ring-starved dellian beat at priority (stack > 2) yields NoCertification with (spent, denied, asks, scans) == (0,false,0,0). DISCLOSED LIMITATION in the test doc: MintMeter is snapshotted below the ring gate's early return, so a hoisted eager pass is invisible to this instrument — the observable half is pinned; the structural half rests on construction order. - R20: 27 entries (PROBE_BUDGET + 1) with the last CHAINED so the bound is per-link; the same board offers at RaisedTwiceLinks, refuses at Shipped with denied at spent == PROBE_BUDGET, and a pre-charge NotAtPriority control leaves a clean meter. Probe run twice: run 1 masked by (i)'s spent >= entries clause (re-keyed to conjunct6_asks — what the gate examined, not what it charged); run 2 flips in the plan's direction (over-budget board OFFERS, asks:27 spent:0). - Shared fixtures extracted (dina_driven_to_bounded_offer, replay_at_priority, equality_ring_with_stack); R33 arm (a'2) rewired to the helper and re-run green. All probes restored byte-identical; resolution_prompt.rs carries zero diff. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/game/engine.rs | 258 ++++++++++++++---- .../engine/tests/integration/loop_shortcut.rs | 190 ++++++++++++- 2 files changed, 379 insertions(+), 69 deletions(-) diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index d6cd1fc29c..3b45e079d3 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -14839,6 +14839,117 @@ mod bounded_offer_conjunct_tests { state } + /// R20 — RELIEF-PATH BUDGET STARVATION IS COVERAGE, NEVER SOUNDNESS. + /// + /// CR 732.2a. The named regression row for the branch NOT taken (hoist only the primary + /// and let the budget absorb the relief path). A board whose non-exempt stack carries more + /// in-scope chain LINKS than the cap can pay for must REFUSE — no certificate consumed, no + /// offer, no `WaitingFor::LoopShortcut` write — and the refusal must be attributable to + /// the budget rather than to any upstream conjunct. + /// + /// THE BOUND IS PER-LINK, NOT PER-ENTRY, which is why the last entry is CHAINED: the + /// classifier recurses into `sub_ability`, so an N-link chain charges up to N. A per-entry + /// regression passes a per-entry row and fails this one. + /// + /// THREE CONJUNCTS, because `spent == cap` alone proves consumption, not BINDINGNESS: + /// (i) the SAME board offers once the budget stops binding (`ProbeCap::RaisedTwiceLinks`, + /// board-derived so no arbitrary raise is representable) — a matched positive on the + /// constructed board, not on a proxy; (ii) at the shipped cap the refusal is + /// `UnspecifiedChoiceWindow` with `denied == true` at `spent == PROBE_BUDGET`; (iii) a + /// PRE-CHARGE refusal on the same board reads a clean meter, which is the control that + /// keeps `denied` meaningful. + /// + /// (ii)'s VARIANT is reachable only because this board's basis-A match comes from the + /// EQUALITY disjunct: the `||` short-circuits, the charging cover call never runs, and + /// exhaustion lands one gate later in `stack_choices_are_all_specified`. That precondition + /// is carried as an EXECUTABLE reach-guard, not as prose, so a fixture drift to the cover + /// path fails loudly instead of silently flipping the variant. + /// + /// REVERT-PROBE: delete `probe_resolution`'s `try_charge_one` arm ⇒ the exhausted budget + /// falls through to the clone-and-resolve ⇒ the over-budget board OFFERS ⇒ FLIPS. + #[test] + fn r20_an_over_budget_relief_path_refuses_instead_of_certifying() { + use crate::analysis::resource::{loop_states_equal_modulo_resources, PROBE_BUDGET}; + use crate::game::engine::{try_offer_bounded_cycle_shortcut_metered, ProbeCap}; + + // One more entry than the cap can pay for, with the last one CHAINED so the population + // is links rather than entries. + let entries = PROBE_BUDGET as usize + 1; + let state = equality_ring_with_stack(entries, true); + + // ── reach-guards, all three before any verdict ────────────────────────────────── + assert!( + state.loop_detect_ring.len() >= 2, + "REACH-GUARD: a ring-starved board refuses at the ring gate with a clean meter and \ + this row would pass for the wrong reason" + ); + assert_eq!( + state.stack.len(), + entries, + "REACH-GUARD: the non-exempt population must exceed the cap ({PROBE_BUDGET})" + ); + let prior = &state.loop_detect_ring[state.loop_detect_ring.len() - 2].normalized; + assert!( + loop_states_equal_modulo_resources(prior, &state), + "REACH-GUARD (the (ii) precondition, executable rather than prose): this board must \ + match basis A through the EQUALITY disjunct. On a cover-matched board the charging \ + cover call exhausts FIRST and the refusal is `NoCertification` with the same meter" + ); + + // ── (i) THE SAME BOARD OFFERS once the budget stops binding ───────────────────── + let (raised, raised_meter) = + try_offer_bounded_cycle_shortcut_metered(&state, false, ProbeCap::RaisedTwiceLinks); + assert!( + raised.is_ok(), + "(i) with the cap raised to 2x the board's own link count the SAME board must \ + certify and offer — this is what pins the budget as the binding refusal below, \ + rather than some upstream conjunct. Got {raised:?}, meter {raised_meter:?}" + ); + // Keyed to the POPULATION counter, not to `spent`, and deliberately: `spent` measures + // CHARGING, so a revert-probe that deletes the charge arm would abort this conjunct + // first and mask the flip belonging to (ii). `conjunct6_asks` measures what the gate + // actually examined, which is the evidence (i) is here to give. + assert!( + !raised_meter.denied && raised_meter.conjunct6_asks >= entries as u32, + "(i) the raised arm must have examined the whole non-exempt population without \ + denial; meter {raised_meter:?}" + ); + + // ── (ii) AT THE SHIPPED CAP: refuse, exhausted, and no offer ──────────────────── + let (refused, meter) = + try_offer_bounded_cycle_shortcut_metered(&state, false, ProbeCap::Shipped); + assert!( + matches!(refused, Err(BoundedOfferRefusal::UnspecifiedChoiceWindow)), + "(ii) exhaustion reads `Prompted`, so the step-6 predicate goes false and the \ + refusal is an unspecified window. Got {refused:?}, meter {meter:?}" + ); + assert!( + meter.denied && meter.spent == PROBE_BUDGET, + "(ii) the cap must be CONSUMED and the denial latched — that pair is the \ + exhaustion witness the refusal variant alone cannot carry. meter {meter:?}" + ); + + // ── (iii) THE CLEAN-METER CONTROL, keyed to a PRE-CHARGE refusal on the SAME board ─ + let mut not_at_priority = state.clone(); + not_at_priority.waiting_for = WaitingFor::DiscardToHandSize { + player: P0, + count: 1, + cards: Vec::new(), + }; + let (control, control_meter) = + try_offer_bounded_cycle_shortcut_metered(¬_at_priority, false, ProbeCap::Shipped); + assert!( + matches!(control, Err(BoundedOfferRefusal::NotAtPriority)), + "(iii) the control arm must refuse UPSTREAM of the first charge; got {control:?}" + ); + assert!( + !control_meter.denied && control_meter.spent == 0, + "(iii) a pre-charge refusal reads a clean meter BY CONTROL-FLOW POSITION — without \ + this control, `denied` would look like a property of refusals in general \ + rather than of exhaustion. meter {control_meter:?}" + ); + } + /// R33 arm (a′2) — THE SELECTION SITE: AN EQUALITY-CERTIFIED CANDIDATE CARRIES NO FROZEN /// EXEMPTION, EVEN THOUGH ITS WINDOW HAS ONE AVAILABLE. /// @@ -14863,67 +14974,8 @@ mod bounded_offer_conjunct_tests { fn r33_equality_certified_candidate_carries_no_frozen_exemption() { use crate::analysis::resource::{certified_period_touch, PeriodCertification}; use crate::game::engine::{try_offer_bounded_cycle_shortcut_metered, ProbeCap}; - use crate::types::ability::{Effect, QuantityExpr, ResolvedAbility}; - use crate::types::game_state::{StackEntry, StackEntryKind}; - use crate::types::identifiers::{CardId, ObjectId}; - use crate::types::LoopDetectSample; - use std::sync::Arc; - let mut state = drain_ring(P1, 3); - let src = ObjectId(941); - let mut source = crate::game::game_object::GameObject::new( - src, - CardId(0), - P0, - "Frozen Ticker".to_string(), - crate::types::zones::Zone::Battlefield, - ); - source.incarnation = 3; - // A MANDATORY, choice-free resolution: conjunct (6) must be able to accept it, so a - // refusal below is attributable to the exemption and not to an unspecified choice. - let entry = StackEntry { - id: ObjectId(951), - source_id: src, - controller: P0, - kind: StackEntryKind::TriggeredAbility { - source_id: src, - ability: Box::new(ResolvedAbility::new( - Effect::LoseLife { - amount: QuantityExpr::Fixed { value: 1 }, - target: None, - }, - vec![], - src, - P0, - )), - condition: None, - trigger_event: None, - description: None, - source_name: String::new(), - subject_match_count: None, - die_result: None, - }, - }; - // Injected identically everywhere, so board equality is preserved and the entry sits - // at the SAME INDEX in every window frame — the frozen predicate's exact condition. - let inject = |g: &mut GameState| { - g.objects.insert(src, source.clone()); - g.battlefield.push_back(src); - g.stack.push_back(entry.clone()); - }; - inject(&mut state); - let frames: std::collections::VecDeque> = state - .loop_detect_ring - .iter() - .map(|s| { - let mut normalized = s.normalized.clone(); - let mut live = s.live.clone(); - inject(&mut normalized); - inject(&mut live); - Arc::new(LoopDetectSample { normalized, live }) - }) - .collect(); - state.loop_detect_ring = frames; + let state = equality_ring_with_stack(1, false); // REACH-GUARD 1: the exemption is genuinely AVAILABLE on this candidate's window — // otherwise "withdrawn" is indistinguishable from "there was nothing to withdraw". @@ -15008,6 +15060,92 @@ mod bounded_offer_conjunct_tests { }) } + /// A [`drain_ring`] whose stack carries `links` in-scope chain links, seeded IDENTICALLY + /// into `current` and into both halves of every retained frame. + /// + /// Two properties come out of that one construction, which is why both rows share it: + /// board equality survives (so basis A matches on its FIRST disjunct), and every entry + /// sits at the SAME INDEX in every window frame (so the window carries a non-empty + /// observed-frozen set — the thing the certificate is allowed to subtract, or not). + /// + /// Each entry is a MANDATORY, choice-free `LoseLife`, so conjunct (6) can accept it and a + /// refusal is never attributable to an unspecified choice. `chained` gives the LAST entry + /// a `sub_ability`, which the classifier recurses into: that is what makes the budget a + /// per-LINK bound rather than a per-ENTRY one, and what a per-entry regression would miss. + fn equality_ring_with_stack(entries: usize, chained: bool) -> GameState { + use crate::types::ability::{Effect, QuantityExpr, ResolvedAbility}; + use crate::types::game_state::{StackEntry, StackEntryKind}; + use crate::types::identifiers::{CardId, ObjectId}; + use crate::types::LoopDetectSample; + use std::sync::Arc; + + let mut state = drain_ring(P1, 3); + let src = ObjectId(941); + let mut source = crate::game::game_object::GameObject::new( + src, + CardId(0), + P0, + "Frozen Ticker".to_string(), + crate::types::zones::Zone::Battlefield, + ); + source.incarnation = 3; + let lose_one = || { + ResolvedAbility::new( + Effect::LoseLife { + amount: QuantityExpr::Fixed { value: 1 }, + target: None, + }, + vec![], + src, + P0, + ) + }; + let built: Vec = (0..entries) + .map(|i| { + let mut ability = lose_one(); + if chained && i + 1 == entries { + ability.sub_ability = Some(Box::new(lose_one())); + } + StackEntry { + id: ObjectId(951 + i as u64), + source_id: src, + controller: P0, + kind: StackEntryKind::TriggeredAbility { + source_id: src, + ability: Box::new(ability), + condition: None, + trigger_event: None, + description: None, + source_name: String::new(), + subject_match_count: None, + die_result: None, + }, + } + }) + .collect(); + let inject = |g: &mut GameState| { + g.objects.insert(src, source.clone()); + g.battlefield.push_back(src); + for e in &built { + g.stack.push_back(e.clone()); + } + }; + inject(&mut state); + let frames: std::collections::VecDeque> = state + .loop_detect_ring + .iter() + .map(|s| { + let mut normalized = s.normalized.clone(); + let mut live = s.live.clone(); + inject(&mut normalized); + inject(&mut live); + Arc::new(LoopDetectSample { normalized, live }) + }) + .collect(); + state.loop_detect_ring = frames; + state + } + /// STEP (2) `ProposerIsNotActivePlayer`. CR 732.2a lets the player with priority propose; /// this conjunct additionally requires that player to be the ACTIVE one, because the ring /// sampler only samples at `Priority{active_player}` — which is what establishes the diff --git a/crates/engine/tests/integration/loop_shortcut.rs b/crates/engine/tests/integration/loop_shortcut.rs index cc27667423..429ebd5580 100644 --- a/crates/engine/tests/integration/loop_shortcut.rs +++ b/crates/engine/tests/integration/loop_shortcut.rs @@ -7783,6 +7783,185 @@ fn dina_untargeted_drain_4p_offers_at_three_live_opponents() { ); } +/// The dina 4p drain DRIVEN through `apply()` to the beat the engine itself raises the +/// bounded offer on, with that beat's index. Shared by every row that has to observe the +/// mint at the ONE beat this corpus offers on. +fn dina_driven_to_bounded_offer() -> (GameState, usize) { + let mut state = restore_dump(&gunzip_dump(include_bytes!( + "../fixtures/dina_conqueror_4p.json.gz" + ))); + let beat = drive_to_bounded_offer(&mut state, 400).expect( + "CR 732.2a: the bounded offer must FIRE on this real 4p drain. BASE (no Path D) drove \ + 326 beats on this same dump and reached zero LoopShortcut beats, so a failure here is \ + the offer never being raised, not a fixture accident.", + ); + (state, beat) +} + +/// Restore the `Priority` window the bridge consumed when it raised the offer, so the mint can +/// be re-run on the offer beat's own board. Everything else the mint reads — the ring, the +/// stack, the resources, `last_loop_action_sequence` — is untouched, and each caller proves +/// the reconstruction faithful by requiring the SAME outcome the production path produced. +fn replay_at_priority(state: &GameState, proposer: PlayerId) -> GameState { + let mut replay = state.clone(); + replay.waiting_for = WaitingFor::Priority { player: proposer }; + replay +} + +/// R16 (v) — THE SEQUENCING PIN: NOTHING SPENDS BEFORE THE RING GATE, BECAUSE NOTHING ASKS. +/// +/// CR 732.2a. At a ring-WARM-UP beat (`loop_detect_ring.len() < 2`) there is no window, hence +/// no reachable certificate, so the mint must refuse at the ring-usability gate BEFORE the +/// verdict door is asked anything. This is the property that keeps the frozen exemption's +/// cost argument honest: at these beats the frozen set is empty and dellian's non-exempt +/// population is 152–153 entries, i.e. exactly the unexempted full sweep the ring gate exists +/// to keep off the critical path. +/// +/// The property is STRUCTURAL, not an ordering the executor had to remember: the verdict +/// container is constructed BELOW the gate, so at this beat there is nothing to ask. +/// +/// ⚠ WHAT THIS ROW DOES **NOT** CATCH, stated because the plan's proposed revert-probe was +/// analysed NOT to flip through this instrument. `MintMeter` is populated from the container +/// AFTER `certified_bounded_cycle_offer` returns, and the ring gate is an EARLY RETURN above +/// that snapshot — so an eager pass hoisted above the gate would spend a budget this meter +/// never reads, and the all-zero reading below would survive it. The row therefore pins the +/// OBSERVABLE part (the gate refuses with `NoCertification`, on a beat carrying a stack an +/// eager pass would really pay for) while the structural part rests on the construction order +/// in `bounded_cycle_offer`. Disclosed as a stop-and-return item rather than papered over with +/// a probe that cannot fire. +#[test] +fn r16v_a_ring_warmup_beat_spends_nothing() { + use engine::game::engine::{ + try_offer_bounded_cycle_shortcut_metered, BoundedOfferRefusal, ProbeCap, + }; + + let mut state = restore_dump(&gunzip_dump(include_bytes!( + "../fixtures/dellian_emblem_conqueror_4p.json.gz" + ))); + // Find a beat that is AT PRIORITY (so steps 1/1b/2 pass and the ring gate is the first + // thing that can refuse) and still ring-starved. The dump ships with an empty ring, so + // this is reachable by construction; the search makes the row robust to drive drift. + let mut found = None; + for beat in 0..40usize { + if state.loop_detect_ring.len() < 2 { + if let WaitingFor::Priority { player } = state.waiting_for { + if player == state.active_player && state.last_loop_action_sequence.is_empty() { + found = Some((beat, state.clone())); + break; + } + } + } + if dump_drive_one_beat(&mut state, None).is_err() { + break; + } + } + let (beat, board) = found.expect( + "REACH-GUARD: no ring-starved beat at priority was reached, so this row would be \ + asserting about a gate it never arrived at", + ); + assert!( + board.stack.len() > 2, + "REACH-GUARD: the beat must carry a stack an eager pass would actually PAY for, else \ + `spent == 0` is true for want of anything to classify; got {} entries at beat {beat}", + board.stack.len() + ); + + let (outcome, meter) = + try_offer_bounded_cycle_shortcut_metered(&board, false, ProbeCap::Shipped); + assert!( + matches!(outcome, Err(BoundedOfferRefusal::NoCertification)), + "a ring of {} frames reaches no window, so the refusal is the ring-usability gate's; \ + got {outcome:?}", + board.loop_detect_ring.len() + ); + assert_eq!( + ( + meter.spent, + meter.denied, + meter.conjunct6_asks, + meter.conjunct4_scans + ), + (0, false, 0, 0), + "R16(v): the gate refuses BEFORE the verdict container can be asked anything — a \ + non-zero counter here is an eager classification pass reintroduced above the ring \ + gate. beat {beat}, meter {meter:?}" + ); + assert!( + meter.certification.is_none(), + "no certificate is reachable at a ring-starved beat; meter {meter:?}" + ); +} + +/// R15 — A BUDGET-EXCEEDED MINT IS A REFUSAL, NEVER A STALL AND NEVER A CERTIFICATE. +/// +/// CR 732.2a. This is the row that makes *"cost is a coverage knob, never a soundness knob"* a +/// measurement instead of a sentence: with the per-mint cap forced to zero, the classifier can +/// afford nothing, `probe_resolution` returns `Prompted`, and the offer is REFUSED — the mint +/// does not fall through to a clone-and-resolve, and it does not hang. +/// +/// The two arms are the SAME BOARD one argument apart — the real dina offer beat, replayed +/// through the only cap channel the seam admits. The `Shipped` arm is the matched positive +/// reach-guard: without it a starved refusal proves nothing, because a board that never offers +/// refuses at zero budget too. +/// +/// REVERT-PROBE: delete `probe_resolution`'s `try_charge_one` arm (`resolution_prompt.rs`) ⇒ +/// the exhausted budget falls through to the clone-and-resolve ⇒ the starved arm OFFERS ⇒ +/// FLIPS. +#[test] +fn r15_a_zero_probe_budget_refuses_the_bounded_offer() { + use engine::game::engine::{try_offer_bounded_cycle_shortcut_metered, ProbeCap}; + + let (state, beat) = dina_driven_to_bounded_offer(); + let (proposer, _, _) = bounded_offer_parts(&state); + let replay = replay_at_priority(&state, proposer); + + // MATCHED POSITIVE, first so a starved refusal below can never pass vacuously. + let (healthy, healthy_meter) = + try_offer_bounded_cycle_shortcut_metered(&replay, false, ProbeCap::Shipped); + assert!( + healthy.is_ok(), + "REACH-GUARD: at the shipped cap this beat must OFFER, else the starved arm is not \ + keyed to the budget. beat {beat}, meter {healthy_meter:?}" + ); + assert!( + !healthy_meter.denied, + "REACH-GUARD: the positive arm must not itself be exhausted; meter {healthy_meter:?}" + ); + + // THE ROW: the same board, the same beat, the cap forced to zero. + let (starved, meter) = + try_offer_bounded_cycle_shortcut_metered(&replay, false, ProbeCap::Lowered(0)); + assert!( + starved.is_err(), + "CR 732.2a: an unaffordable probe degrades to honest-red — no certificate and no \ + offer. Got {starved:?}, meter {meter:?}" + ); + assert!( + meter.denied && meter.spent == 0, + "the refusal must be the BUDGET's: a zero cap denies the very first charge, so \ + nothing is spent and the denial flag is what carries the cause. meter {meter:?}" + ); + // WHERE the denial lands, MEASURED rather than assumed — and it is not the intuitive + // answer. Basis B consults NO board predicate, so it certifies for FREE even at a zero cap + // (`certification == Some(ResourceSignatureOnly)` at `spent == 0`); the first gate that + // must actually PAY is conjunct (6), which asks the door, is denied, and therefore reads + // `Prompted`. Exhaustion surfaces as an UNSPECIFIED WINDOW, not as a missing certificate. + assert!( + meter.conjunct6_asks > 0, + "REACH-GUARD: the starved mint must have REACHED the paying gate, else `denied` is \ + about a charge nobody ever attempted. meter {meter:?}" + ); + assert!( + matches!( + starved, + Err(engine::game::engine::BoundedOfferRefusal::UnspecifiedChoiceWindow) + ), + "an exhausted classifier reads `Prompted`, so the step-6 predicate goes false and the \ + mint REFUSES — never a stall, never a certified offer. Got {starved:?}, \ + meter {meter:?}" + ); +} + /// R33 arm (d) — THE CORPUS'S ONE OFFERING BEAT CERTIFIES THROUGH BASIS B, AND THE FROZEN /// EXEMPTION IS THEREFORE WITHDRAWN THERE. /// @@ -7808,21 +7987,14 @@ fn dina_offering_beat_certifies_through_basis_b_and_exempts_nothing() { use engine::analysis::resource::PeriodCertification; use engine::game::engine::{try_offer_bounded_cycle_shortcut_metered, ProbeCap}; - let mut state = restore_dump(&gunzip_dump(include_bytes!( - "../fixtures/dina_conqueror_4p.json.gz" - ))); - let beat = drive_to_bounded_offer(&mut state, 400) - .expect("CR 732.2a: the bounded offer must FIRE on this real 4p drain"); + let (state, beat) = dina_driven_to_bounded_offer(); let (proposer, certificate, _) = bounded_offer_parts(&state); let published = certificate .per_cycle .clone() .expect("the bounded offer publishes a per-cycle signature"); - // Restore the window the bridge consumed. Everything else the mint reads — the ring, the - // stack, the resources, `last_loop_action_sequence` — is the offer beat's own state. - let mut replay = state.clone(); - replay.waiting_for = WaitingFor::Priority { player: proposer }; + let replay = replay_at_priority(&state, proposer); let (outcome, meter) = try_offer_bounded_cycle_shortcut_metered(&replay, false, ProbeCap::Shipped); From a97d0d3d8017b1df28cf250444ec255e872a68a9 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sat, 1 Aug 2026 21:28:21 -0500 Subject: [PATCH 18/62] test(engine): offer-writer census and carrying-frame rows (5d U3, R8/R14/R19/R29/R31/R32) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Purely additive test rows on top of 93dc52c02; six revert-probes run, flipped, and restored byte-identical. Suite arithmetic pins the delta: lib 18144 -> 18149, integration 4311 -> 4313. Three plan contradictions disclosed, none silently absorbed: - R8's ROUND-7 pre-change check is comment-blind: U2's doc comment at engine.rs:4168 makes a bare anchor measure 23/12. The census excludes comment lines (a comment writes no offer and consumes none), restoring the plan's 22 production / 12 test and its per-file production multiset exactly. - R29's stated (c) probe had no flipping site as written ((c1)/(c2) sit on the predicate, the probe edits an argument they never traverse); ADDED arm (c3) driving the same crossing through stack_choices_are_all_specified — the probe flips (c3) alone. - R21 arm (a3) is FALSIFIED and not written: it demands frozen_skips > 0 at the offering beat, but the corpus's offering beat certifies through basis B with skips == 0 — the exact fact R33 arm (d) pins. A row contradicting a shipped green row does not ship. CR anchors: 115.2, 601.2c, 603.3c, 603.5, 608.1, 732.2a — all re-read against the code they describe. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/analysis/resource.rs | 752 ++++++++++++++++++ .../loop_shortcut_offer_writer_census.rs | 365 +++++++++ crates/engine/tests/integration/main.rs | 1 + 3 files changed, 1118 insertions(+) create mode 100644 crates/engine/tests/integration/loop_shortcut_offer_writer_census.rs diff --git a/crates/engine/src/analysis/resource.rs b/crates/engine/src/analysis/resource.rs index 79853193ff..e9c884cd80 100644 --- a/crates/engine/src/analysis/resource.rs +++ b/crates/engine/src/analysis/resource.rs @@ -13366,4 +13366,756 @@ mod tests { v_sig.denied() ); } + + // ─────────────────────────────────────────────────────────────────────────────────── + // §6 U3 ROWS — R14 / R19 / R29 / R31(completeness) / R32 + // ─────────────────────────────────────────────────────────────────────────────────── + + /// Shape (A): a proposer-controlled triggered ability declaring exactly ONE mandatory + /// PLAYER target (CR 115.2 "target opponent"), with the announcement ALREADY MADE. + /// + /// The announcement is load-bearing, not decoration: `optional_cleared_classification` + /// resolves the ability on the board `resolve_top` would hand it, and an UNANNOUNCED + /// target derives no events at all, which `probe_resolution` classifies `Prompted` + /// (§6 R11). A shape-(A) fixture without announced targets therefore has residual + /// `MayPrompt` for every slot vector and R19's transition could never fire. + fn u3_shape_a_entry(src: ObjectId, id: u64) -> StackEntry { + use crate::types::ability::{ + ControllerRef, Effect, QuantityExpr, ResolvedAbility, TargetFilter, TargetRef, + TypedFilter, + }; + let mut ability = ResolvedAbility::new( + Effect::LoseLife { + amount: QuantityExpr::Fixed { value: 1 }, + target: Some(TargetFilter::Typed(TypedFilter { + type_filters: vec![], + controller: Some(ControllerRef::Opponent), + properties: vec![], + })), + }, + vec![TargetRef::Player(PlayerId(1))], + src, + PlayerId(0), + ); + ability.optional = true; + StackEntry { + id: ObjectId(id), + source_id: src, + controller: PlayerId(0), + kind: StackEntryKind::TriggeredAbility { + source_id: src, + ability: Box::new(ability), + condition: None, + trigger_event: None, + description: None, + source_name: String::new(), + subject_match_count: None, + die_result: None, + }, + } + } + + /// R14 — THE DEGENERATE WINDOW ANNOUNCES `current.stack`, ELEMENT FOR ELEMENT. + /// + /// CR 732.2a + CR 608.1. With NO window frame there is no transition to observe, so the + /// honest degenerate reading is *"every current entry may announce"* — which is exactly + /// what makes `bounded_cycle_pin_slots` a thin alias of the window enumerator rather + /// than a second authority. + /// + /// ⚠ THE COMPARISON IS AGAINST THE TEST'S OWN INPUT DATA, NEVER AGAINST A SECOND CALL OF + /// THE FUNCTION UNDER TEST. Rounds 5/6 wrote this row as + /// `bounded_cycle_pin_slots_for_window(&certified_period_touch(&[], state, ..), p)` vs + /// `bounded_cycle_pin_slots(state, p)` — post-U3 the same function body on both sides, so + /// the equality held by construction AND the stated revert-probe edited a dependency BOTH + /// sides call. Round 7's replacement (a HEAD-captured frozen point sequence) was struck in + /// turn: U2's shape-(B) mint publishes on beats HEAD refuses, and a per-beat sequence + /// embeds `ObjectId` literals that a fixture re-dump renumbers. The PROPERTY against a + /// CONSTRUCTED frame has neither failure mode. + /// + /// REVERT-PROBE that actually flips: restore round 4's `window.len() < 2 ⇒ announced` + /// EMPTY branch ⇒ `announced.len() == 0` while the constructed stack is non-empty ⇒ the + /// element-for-element equality fails on the LENGTH assertion alone, and the ≥1-point + /// reach-guard fails with it. + #[test] + fn r14_the_degenerate_window_announces_the_current_stack_element_for_element() { + use crate::game::engine::{bounded_cycle_pin_slots_for_window, entry_publishes_pin_slots}; + + let (mut state, src) = u2_relief_board(); + // ≥2 entries, deliberately HETEROGENEOUS: the first publishes for P0, the second is + // controlled by P1 and the mint refuses it. `announced` must carry BOTH — the touch + // enumerates the period, the mint filters it — so an `announced` accidentally built + // from the mint's accepted set would fail the element-for-element equality. + let publishing = u2_shape_b_entry(src, 9140, u2_draw_effect(), |_| {}); + let mut foreign = u2_shape_b_entry(src, 9141, u2_draw_effect(), |_| {}); + foreign.controller = PlayerId(1); + state.stack.push_back(publishing); + state.stack.push_back(foreign); + assert!( + state.stack.len() >= 2, + "NON-DEGENERACY: a one-entry stack would make the ordering half of the claim \ + untestable and an empty one would make the whole property vacuous" + ); + + let expected: Vec<(usize, ObjectId)> = state + .stack + .iter() + .enumerate() + .map(|(i, e)| (i, e.id)) + .collect(); + + for cert in [ + PeriodCertification::BoardCovered, + PeriodCertification::BoardEqualOnly, + PeriodCertification::ResourceSignatureOnly, + ] { + let touch = certified_period_touch(&[], &state, cert); + let observed: Vec<(usize, ObjectId)> = touch + .announced + .iter() + .enumerate() + .map(|(i, (_, e))| (i, e.id)) + .collect(); + assert_eq!( + observed, expected, + "{cert:?}: the degenerate window's announced pairs are `current.stack` \ + element for element, IN ORDER" + ); + assert!( + touch + .announced + .iter() + .all(|(frame, _)| std::ptr::eq(*frame, &state)), + "{cert:?}: every degenerate pair's carrying frame IS `current` — there is no \ + other frame for it to be" + ); + assert!( + touch.frozen_ids.is_empty(), + "{cert:?}: with no window frame nothing is PROVEN frozen, on ANY certificate \ + value — the empty-window branch returns before the frozen walk" + ); + } + + // PAIRED POSITIVE REACH-GUARD, and it is what stops the property collapsing into a + // vacuous truth about a stack nothing publishes on. + let touch = certified_period_touch(&[], &state, PeriodCertification::ResourceSignatureOnly); + let points = bounded_cycle_pin_slots_for_window(&touch, PlayerId(0)); + assert!( + !points.is_empty(), + "reach-guard: at least one constructed entry must be ACCEPTED by the mint, or the \ + equality above would hold over a period the enumerator never publishes from" + ); + assert!( + entry_publishes_pin_slots(&state, &state.stack[1], PlayerId(0)).is_none(), + "reach-guard, other direction: the P1-controlled entry is REFUSED by the mint yet \ + still appears in `announced` — proof the touch is the period's enumeration and \ + not the mint's accepted set" + ); + } + + /// R19 — THE CACHED VERDICT HOLDS NOTHING SLOTS-DERIVED. + /// + /// The named regression row for the branch NOT taken (key the memo on + /// `(StackEntry.id, slots)`). If that option's risk returns one layer over, this is what + /// loses. + /// + /// **(a) BEHAVIOURAL.** `state` and `entry` are held FIXED and only `slots` varies, over + /// FOUR cases — `{}`, `{target}`, `{may}`, `{target, may}`. The vector is SHAPE-DEPENDENT + /// and both shapes are asserted, because D3 re-expressed the gate as *"`may` pinned AND + /// (`target.is_none()` OR target pinned)"*: + /// * **(a-A) shape (A)** — targeted AND optional ⇒ `[None, None, None, Some(residual)]`. + /// * **(a-B) shape (B)** — may-only ⇒ `[None, None, Some(residual), Some(residual)]`. + /// + /// The `{may}` case is the one that DIFFERS between the shapes, and asserting BOTH is what + /// makes D3's `target.is_none()` disjunct load-bearing: with (a-A) alone, deleting that + /// disjunct changes nothing and the row cannot see it. The two SINGLETON cases are what + /// make both disjuncts load-bearing, which a 0/1/2-slot sweep could not do. + /// + /// **(b) STRUCTURAL.** `EntryVerdict` destructures EXHAUSTIVELY into + /// `{ published, primary, residual }`, all three produced by functions whose signatures + /// take NO slots, so a future slots-derived field is a COMPILE ERROR rather than a review + /// miss. ⚠ `..` IS FORBIDDEN ON THAT DESTRUCTURE. Adding e.g. `pub slots_digest: u64` to + /// `EntryVerdict` makes the line below **E0027**; rustc's own `help:` then suggests adding + /// `..`, which silently disarms the guard. THE E0027 IS THIS GUARD FIRING, NOT A COMPILE + /// ERROR TO FIX. + /// + /// REVERT-PROBE (a): collapse the design to an id-keyed cache of the RELIEF verdict — + /// i.e. adopt option 1's shape with an incomplete key — ⇒ every case returns the `{}` + /// verdict `None` ⇒ the fourth arm's `Some(residual)` assertion FLIPS TO FAIL. The paired + /// positive reach-guard is mandatory and is asserted: the last case must return `Some` on + /// the unmutated design, otherwise the leading `None`s pass over a relief that never + /// relieves anything. + #[test] + fn r19_the_relief_vector_varies_only_with_slots_and_the_cached_value_is_slots_free() { + use crate::game::engine::entry_publishes_pin_slots; + use crate::game::resolution_prompt::ResolutionChoiceFreedom; + + let (mut state, src) = u2_relief_board(); + // Two live opponents, so the shape-(A) announcement is a REAL choice rather than a + // forced one — the mint's own acceptance is what this row rides, not target scarcity. + let shape_a = u3_shape_a_entry(src, 9190); + let shape_b = u2_shape_b_entry(src, 9191, u2_draw_effect(), |_| {}); + state.stack.push_back(shape_a.clone()); + state.stack.push_back(shape_b.clone()); + + let pub_a = entry_publishes_pin_slots(&state, &shape_a, PlayerId(0)) + .expect("(a-A) reach-guard: the shape-(A) fixture must reach the mint"); + let target = pub_a + .target + .clone() + .expect("(a-A) reach-guard: shape (A) publishes its CR 601.2c announcement slot"); + let may_a = pub_a + .may + .clone() + .expect("(a-A) reach-guard: shape (A) is optional, so it publishes its CR 603.5 gate"); + let pub_b = entry_publishes_pin_slots(&state, &shape_b, PlayerId(0)) + .expect("(a-B) reach-guard: the shape-(B) fixture must reach the mint"); + assert!( + pub_b.target.is_none(), + "(a-B) reach-guard: shape (B) announces NOTHING, so it publishes no target slot — \ + that `None` is exactly what the `{{may}}` case discriminates" + ); + let may_b = pub_b + .may + .clone() + .expect("(a-B) reach-guard: shape (B) publishes its CR 603.5 gate"); + + let mut verdicts = PeriodVerdicts::for_period(&[], &state, PlayerId(0)); + let f = verdicts + .frame_ix(&state) + .expect("reach-guard: the container holds the board the relief is asked about"); + + let relieved = |verdicts: &mut PeriodVerdicts<'_>, + entry: &StackEntry, + slots: &[DecisionSlot]| + -> bool { + matches!( + pinned_may_choice_relief(f, entry, verdicts, u2_scope(slots)), + Some(ResolutionChoiceFreedom::FreeUnlessReplacements(_)) + ) + }; + + // ── (a-A) shape (A): the gate needs BOTH slots ────────────────────────────────── + let vector_a = [ + relieved(&mut verdicts, &shape_a, &[]), + relieved(&mut verdicts, &shape_a, std::slice::from_ref(&target)), + relieved(&mut verdicts, &shape_a, std::slice::from_ref(&may_a)), + relieved(&mut verdicts, &shape_a, &[target.clone(), may_a.clone()]), + ]; + assert_eq!( + vector_a, + [false, false, false, true], + "(a-A) CR 603.5 + CR 601.2c: a targeted optional entry is relieved ONLY when both \ + published slots are pinned. The two SINGLETON cases are what make both disjuncts \ + of `may pinned AND (target.is_none() OR target pinned)` load-bearing" + ); + + // ── (a-B) shape (B): `target.is_none()` discharges the second conjunct outright ── + let vector_b = [ + relieved(&mut verdicts, &shape_b, &[]), + relieved(&mut verdicts, &shape_b, std::slice::from_ref(&target)), + relieved(&mut verdicts, &shape_b, std::slice::from_ref(&may_b)), + relieved(&mut verdicts, &shape_b, &[target.clone(), may_b.clone()]), + ]; + assert_eq!( + vector_b, + [false, false, true, true], + "(a-B) CR 601.2c: a may-only entry surfaces no announcement choice, so demanding a \ + pinned target would refuse relief the mint's own schema fully describes. The \ + `{{may}}` case is where the two shapes DIFFER — that difference is the whole \ + reason D3's `target.is_none()` disjunct exists" + ); + + // ── (b) STRUCTURAL: the cached value is slots-free BY DESTRUCTURE ─────────────── + // ⚠ NO `..`. A fourth field here is E0027 and the E0027 IS THIS GUARD FIRING. + let super::verdict_memo::EntryVerdict { + published, + primary, + residual, + } = verdicts.verdict(f, &shape_a); + assert!( + published.is_some() && matches!(primary, ResolutionChoiceFreedom::MayPrompt), + "(b) reach-guard: the destructured value must be the LIVE one this row's (a) arm \ + consumed — a mint answer plus the CR 603.5 `MayPrompt` that makes relief the \ + deciding layer" + ); + assert!( + residual.is_some(), + "(b) reach-guard: the optional-cleared residual is computed BECAUSE a `may` slot \ + is published — the field is not decorative" + ); + } + + /// R29 — THE CR 603.3c MID-CONSTRUCTION GUARD SURVIVES THE `FrameIx` REWRITE, AND IT + /// ANSWERS FROM THE CARRYING FRAME. + /// + /// Asserted AT THE RELIEF SEAM deliberately: an offer-level negative on this axis is + /// DOMINATED by conjunct (6)'s own refusals, and the relief has no upstream that can + /// satisfy it. + /// + /// * **(a) THE GUARD** — an entry the mint publishes a `target` slot for, that slot + /// PINNED (so the mint half alone answers `true`), with the frame's + /// `pending_trigger_entry = Some(entry.id)` ⇒ `false`. + /// * **(a′) MATCHED POSITIVE, byte-identical except the cursor** — `None` ⇒ `true`. This + /// is the reach-guard: without it, (a) passes over a mint that published nothing. + /// * **(b) THE EQUALITY, NOT THE PRESENCE** — a cursor naming NO live entry + /// (`ObjectId(u64::MAX)`) ⇒ still `true`, so the row pins `== Some(entry.id)` rather + /// than "any cursor refuses". In-tree precedent for exactly this control on the sibling + /// gate: `a_pinned_slot_skips_gate_three_and_six`'s gate-(1) control. + /// * **(c) WHICH BOARD** — the conjunct the 4-arg signature could not even express. The + /// pair is driven from a RETAINED frame, then the two boards are CROSSED: (c1) carrying + /// frame's cursor set, `current`'s clear ⇒ `false` (the carrying frame decides); (c2) + /// carrying frame's cursor clear, `current`'s set ⇒ `true` (the live board does NOT + /// decide for a retained pair). Byte-identical except which board holds the cursor. + /// + /// REVERT-PROBE (a)/(a′)/(b): delete + /// `if board.pending_trigger_entry == Some(entry.id) { return false; }` from + /// `entry_target_choice_is_pinned` — i.e. ship the round-35 4-arg signature, which makes + /// the statement unwritable — ⇒ (a) answers `true` ⇒ FLIPS, while (a′)/(b) stay green. + /// ⚠ That revert COMPILES, which is the whole reason this row exists: the fail-open + /// direction leaves no type error behind and `PeriodVerdicts.frames` is private, so an + /// executor who drops the board has no way to notice. + /// + /// REVERT-PROBE (c): pass the live `current` instead of the pair's carrying frame ⇒ (c1) + /// and (c2) BOTH FLIP, while (a)/(a′)/(b) stay green on the degenerate current-stack pair + /// where the two boards coincide. + #[test] + fn r29_the_cr_603_3c_cursor_is_read_from_the_pairs_carrying_frame() { + use crate::game::engine::entry_publishes_pin_slots; + + let (mut frame, src) = u2_relief_board(); + let entry = u3_shape_a_entry(src, 9290); + frame.stack.push_back(entry.clone()); + let published = entry_publishes_pin_slots(&frame, &entry, PlayerId(0)) + .expect("reach-guard: the fixture must reach the mint"); + let target = published.target.clone().expect( + "reach-guard: the mint must publish a TARGET slot, or the guard below \ + would be refused by the `target.is_some()` conjunct instead", + ); + let slots = vec![target]; + + // ── (a′) matched positive: no cursor ──────────────────────────────────────────── + let mut clear = frame.clone(); + clear.pending_trigger_entry = None; + { + let mut verdicts = PeriodVerdicts::for_period(&[], &clear, PlayerId(0)); + let f = verdicts + .frame_ix(&clear) + .expect("container holds the board"); + assert!( + entry_target_choice_is_pinned(&clear, f, &entry, &mut verdicts, u2_scope(&slots)), + "(a′) with the published slot pinned and no mid-construction cursor, the \ + announcement choice IS specified" + ); + } + + // ── (a) the guard: the cursor names THIS entry ────────────────────────────────── + let mut cursored = frame.clone(); + cursored.pending_trigger_entry = Some(entry.id); + { + let mut verdicts = PeriodVerdicts::for_period(&[], &cursored, PlayerId(0)); + let f = verdicts + .frame_ix(&cursored) + .expect("container holds the board"); + assert!( + !entry_target_choice_is_pinned( + &cursored, + f, + &entry, + &mut verdicts, + u2_scope(&slots) + ), + "(a) CR 603.3c: a mid-construction entry's announcement is not yet complete, \ + so no published slot can specify it — and this fact is a property of the \ + BOARD, which is why the mint (pure over `(stack, objects, proposer)`) cannot \ + carry it and the relief must" + ); + } + + // ── (b) EQUALITY, not presence ───────────────────────────────────────────────── + let mut foreign_cursor = frame.clone(); + foreign_cursor.pending_trigger_entry = Some(ObjectId(u64::MAX)); + { + let mut verdicts = PeriodVerdicts::for_period(&[], &foreign_cursor, PlayerId(0)); + let f = verdicts + .frame_ix(&foreign_cursor) + .expect("container holds the board"); + assert!( + entry_target_choice_is_pinned( + &foreign_cursor, + f, + &entry, + &mut verdicts, + u2_scope(&slots) + ), + "(b) the guard is `== Some(entry.id)`, not `is_some()` — a cursor naming no \ + live entry refuses nothing" + ); + } + + // ── (c) WHICH BOARD, on a RETAINED pair ──────────────────────────────────────── + // The container's frames are `[carrying, current]`, and `carrying` is NOT `current`, + // so the two boards can disagree — which is exactly the shape the degenerate + // current-stack pair cannot express. + let mut carrying = frame.clone(); + let mut current = frame.clone(); + current.stack.clear(); + + carrying.pending_trigger_entry = Some(entry.id); + current.pending_trigger_entry = None; + { + let ring = [&carrying]; + let mut verdicts = PeriodVerdicts::for_period(&ring, ¤t, PlayerId(0)); + let f = verdicts + .frame_ix(&carrying) + .expect("(c) reach-guard: the CARRYING frame is in the period"); + assert_ne!( + verdicts.frame_ix(&carrying), + verdicts.frame_ix(¤t), + "(c) reach-guard: the two boards must be DISTINCT frames, or (c1)/(c2) are \ + the same assertion twice" + ); + assert!( + !entry_target_choice_is_pinned( + &carrying, + f, + &entry, + &mut verdicts, + u2_scope(&slots) + ), + "(c1) the CARRYING frame decides: its cursor names this entry, so the \ + announcement is mid-construction on the board the announcement was made \ + against — regardless of what the live board says" + ); + } + + carrying.pending_trigger_entry = None; + current.pending_trigger_entry = Some(entry.id); + { + let ring = [&carrying]; + let mut verdicts = PeriodVerdicts::for_period(&ring, ¤t, PlayerId(0)); + let f = verdicts + .frame_ix(&carrying) + .expect("(c) reach-guard: the CARRYING frame is in the period"); + assert!( + entry_target_choice_is_pinned( + &carrying, + f, + &entry, + &mut verdicts, + u2_scope(&slots) + ), + "(c2) the LIVE board does not decide for a retained pair — byte-identical to \ + (c1) except which board holds the cursor" + ); + } + + // ── (c3) THE SAME CROSSING, AT THE PRODUCTION SEAM THAT WRITES THE ARGUMENT ───── + // (c1)/(c2) pin the PREDICATE's board-sensitivity, which is where the plan sites this + // row (an offer-level negative on this axis is dominated by conjunct (6)'s own + // refusals). But the argument the row is about is written in + // `stack_choices_are_all_specified`'s announcement loop, so the plan's stated + // revert-probe — "pass the live `current` instead of the pair's carrying frame" — + // needs a site that FLIPS. This arm is that site: the (c2) crossing driven end to + // end, where the correct argument CERTIFIES and the reverted one REFUSES. + // + // Both published slots are pinned here (the `may` too), so the entry also clears + // conjunct (6) and the `true` below is the whole predicate's answer, not one gate's. + { + let may = published + .may + .clone() + .expect("(c3) reach-guard: the fixture is optional, so it publishes a may gate"); + let both = vec![slots[0].clone(), may]; + let mut oldest = carrying.clone(); + oldest.stack.clear(); + let ring = [&oldest, &carrying]; + let touch = + certified_period_touch(&ring, ¤t, PeriodCertification::ResourceSignatureOnly); + assert!( + touch + .announced + .iter() + .any(|(frame, e)| std::ptr::eq(*frame, &carrying) && e.id == entry.id), + "(c3) reach-guard: the pair must arrive from the RETAINED frame — on a \ + current-stack pair the two boards coincide and the argument is untestable" + ); + assert!( + current.pending_trigger_entry == Some(entry.id) + && carrying.pending_trigger_entry.is_none(), + "(c3) reach-guard: the crossing must still be in place — `current` holds the \ + CR 603.3c cursor and the carrying frame does not" + ); + let mut verdicts = PeriodVerdicts::for_period(&ring, ¤t, PlayerId(0)); + assert!( + stack_choices_are_all_specified( + ¤t, + PlayerId(0), + &both, + Some(&touch), + &mut verdicts + ), + "(c3) with both published slots pinned and the mid-construction cursor sitting \ + only on the LIVE board, the announcement loop must certify — because it asks \ + the CARRYING frame. Passing `current` there makes the cursor bite, the `||`'s \ + other disjunct is also false (two legal assignments on the frame), and this \ + assertion FLIPS" + ); + } + } + + /// R32 — THE ANNOUNCEMENT LOOP'S OR-DISJUNCT READS THE PAIR'S CARRYING FRAME, NEVER + /// `current`. Paired with R29, which pins the same discipline for the other disjunct: + /// the two halves of one `||` must not read two boards. + /// + /// `stack_entry_has_no_ordering_input`'s arity does NOT change under 5d, which is why + /// only a row can pin the decision — §7 held it under *"Reused verbatim"*. It is + /// board-sensitive: `state.pending_trigger_entry`, then `forced_unique_targeting` → + /// `build_target_slots` + `auto_select_targets_for_ability`, i.e. the verdict is a + /// function of the board's legal-target POPULATION. + /// + /// THE PAIR. A two-frame window whose announced entry declares a target with **two** + /// legal assignments on its CARRYING FRAME and **one** on `current` (a creature that left + /// the battlefield after the announcement). + /// * **(a) CORRECT BOARD** ⇒ `false` (two assignments ⇒ not forced), and with no pin + /// published for that entry, `stack_choices_are_all_specified` ⇒ `false` — the + /// fail-closed answer. + /// * **(b) THE FAIL-OPEN TWIN** ⇒ passing `current` sees ONE legal assignment ⇒ `true` ⇒ + /// the entry is RELIEVED and the offer can certify over an announcement choice that is + /// not forced on the board where it is actually made. + /// * **(c) POSITIVE CONTROL that the instrument is keyed** — same window, an entry with + /// one legal assignment on BOTH boards ⇒ both arms agree on `true`, so (a)/(b) differ + /// BECAUSE OF THE BOARD and not because the fixture always disagrees. + /// + /// REVERT-PROBE: change `stack_entry_has_no_ordering_input(announced[i].0, entry)` to + /// `(state, entry)` in `stack_choices_are_all_specified`'s announcement loop ⇒ (b) is + /// what you get and (a)'s offer-level assertion FLIPS. + #[test] + fn r32_the_announcement_disjunct_reads_the_carrying_frame_not_the_live_board() { + use crate::game::scenario::GameScenario; + use crate::types::ability::{ + Effect, QuantityExpr, ResolvedAbility, TargetFilter, TargetRef, TypeFilter, TypedFilter, + }; + + // One creature the announcement can still reach on `current`, one that leaves. + let mut carrying = GameScenario::new_n_player(2, 7).build().state().clone(); + let stays = battlefield_creature(&mut carrying, 9320, 1); + let leaves = battlefield_creature(&mut carrying, 9321, 1); + + let creature_entry = |id: u64, announced: Vec| { + let ability = ResolvedAbility::new( + Effect::DealDamage { + amount: QuantityExpr::Fixed { value: 1 }, + target: TargetFilter::Typed(TypedFilter { + type_filters: vec![TypeFilter::Creature], + controller: None, + properties: vec![], + }), + damage_source: None, + excess: None, + }, + announced, + ObjectId(9320), + PlayerId(0), + ); + StackEntry { + id: ObjectId(id), + source_id: ObjectId(9320), + controller: PlayerId(0), + kind: StackEntryKind::TriggeredAbility { + source_id: ObjectId(9320), + ability: Box::new(ability), + condition: None, + trigger_event: None, + description: None, + source_name: String::new(), + subject_match_count: None, + die_result: None, + }, + } + }; + + let two_ways = creature_entry(9330, vec![TargetRef::Object(leaves)]); + carrying.stack.push_back(two_ways.clone()); + + // The window's oldest frame carries NO stack, so the entry ANNOUNCED inside it. + let mut oldest = carrying.clone(); + oldest.stack.clear(); + // `current`: the entry has resolved off the stack AND one legal target is gone. + let mut current = carrying.clone(); + current.stack.clear(); + current.objects.remove(&leaves); + current.battlefield.retain(|o| *o != leaves); + + // ── reach-guards: the two boards really carry DIFFERENT legal populations ─────── + assert_eq!( + carrying + .battlefield + .iter() + .filter(|o| carrying.objects.contains_key(o)) + .count(), + 2, + "reach-guard: the carrying frame must offer TWO legal assignments" + ); + assert!( + current.objects.contains_key(&stays) && !current.objects.contains_key(&leaves), + "reach-guard: `current` must offer exactly ONE — the fail-open direction needs a \ + target that is legal on the frame and gone from the live board" + ); + + // ── (a) / (b) THE MATCHED PAIR, one variable: which board ────────────────────── + assert!( + !stack_entry_has_no_ordering_input(&carrying, &two_ways), + "(a) CORRECT BOARD: two legal assignments on the carrying frame ⇒ the \ + announcement choice is NOT forced ⇒ fail-closed" + ); + assert!( + stack_entry_has_no_ordering_input(¤t, &two_ways), + "(b) THE FAIL-OPEN TWIN: on the live board one target has gone, so the assignment \ + LOOKS forced and the entry would be relieved — an offer certified over a choice \ + that is not forced where it is actually made" + ); + + // ── (a) at the OFFER-LEVEL seam, which is where the argument is actually written ─ + let ring = [&oldest, &carrying]; + let touch = + certified_period_touch(&ring, ¤t, PeriodCertification::ResourceSignatureOnly); + assert!( + touch + .announced + .iter() + .any(|(frame, e)| std::ptr::eq(*frame, &carrying) && e.id == two_ways.id), + "reach-guard: the pair must arrive from the RETAINED frame, not from \ + `current.stack` — on the degenerate pair the two boards coincide and the row \ + would be untestable" + ); + let mut verdicts = PeriodVerdicts::for_period(&ring, ¤t, PlayerId(0)); + assert!( + !stack_choices_are_all_specified( + ¤t, + PlayerId(0), + &[], + Some(&touch), + &mut verdicts + ), + "(a) offer level: with no pin published for the entry, the announcement loop's \ + `||` must refuse — and it can only refuse if its second disjunct read the \ + CARRYING frame. Passing `current` there yields (b) and this assertion flips" + ); + + // ── (c) POSITIVE CONTROL: one legal assignment on BOTH boards ────────────────── + let mut solo_carrying = carrying.clone(); + solo_carrying.objects.remove(&leaves); + solo_carrying.battlefield.retain(|o| *o != leaves); + let solo = creature_entry(9331, vec![TargetRef::Object(stays)]); + assert!( + stack_entry_has_no_ordering_input(&solo_carrying, &solo) + && stack_entry_has_no_ordering_input(¤t, &solo), + "(c) the instrument is KEYED, not always-disagreeing: an entry with one legal \ + assignment on both boards is answered identically on both" + ); + } + + /// R31 COMPLETENESS ARM (the U3 half of a row whose arms (a)/(a′)/(b) shipped in U2). + /// + /// U2's arms proved the closure on entries sitting on `current.stack`. This arm proves + /// the premise those arms silently rest on — *every minted pair is SCANNED* — for the + /// population U2 could not reach: a pair that ANNOUNCED inside the certified period and + /// has since left the stack. It ships here and not in U2 because its revert-probe names + /// `touch.announced`, which U3 creates: at U2 `stack_choices_are_all_specified` still + /// carried HEAD's 3-argument shape, so there was no `touch` to drop. + /// + /// Off-stack announced pairs are the MAJORITY population on both measured dumps + /// (`beats_offstack_nonzero` 157/161 F4, 19/23 dellian), so this is the common case, not + /// an edge one. + /// + /// THE BOARD: the entry carries `Effect::PayCost { payer: Controller }` — a member of + /// `effect_resolution_choice_freedom`'s fail-closed grouped arm, i.e. exactly U2 arm + /// (b)'s subject — announced on the retained carrying frame and ABSENT from + /// `current.stack`. Conjunct (6) must still refuse it. + /// + /// REVERT-PROBE: narrow the RESOLUTION loop back to `current.stack` only (drop the + /// `touch.announced` half of `pairs`) ⇒ the pair is never classified ⇒ the predicate + /// returns `true` ⇒ FLIPS. That is what makes "every minted pair is scanned" a MEASURED + /// premise rather than a stated one. + #[test] + fn r31_completeness_an_announced_off_stack_pair_is_still_scanned_by_conjunct_six() { + use crate::game::engine::entry_publishes_pin_slots; + use crate::types::ability::{AbilityCost, Effect, TargetFilter}; + + let (frame, src) = u2_relief_board(); + let entry = u2_shape_b_entry( + src, + 9310, + Effect::PayCost { + cost: AbilityCost::Mana { + cost: crate::types::mana::ManaCost::Cost { + shards: vec![], + generic: 1, + }, + }, + scale: None, + payer: TargetFilter::Controller, + }, + |_| {}, + ); + let may = entry_publishes_pin_slots(&frame, &entry, PlayerId(0)) + .expect("reach-guard: the fixture must reach the mint") + .may + .expect( + "reach-guard: it publishes its CR 603.5 gate, so the refusal below is the \ + RESIDUAL's and not the mint's", + ); + + // oldest ⇒ carrying ⇒ current: the entry announces on `carrying` and has RESOLVED + // OFF the stack by `current`. + let oldest = frame.clone(); + let mut carrying = frame.clone(); + carrying.stack.push_back(entry.clone()); + let current = frame.clone(); + + let ring = [&oldest, &carrying]; + let touch = + certified_period_touch(&ring, ¤t, PeriodCertification::ResourceSignatureOnly); + + // ── reach-guards: the pair is reachable ONLY through `announced` ──────────────── + assert!( + current.stack.is_empty(), + "reach-guard: with the entry still on `current.stack` this arm would be U2's \ + arm (b) again and the completeness premise would go untested" + ); + assert!( + touch + .announced + .iter() + .any(|(f, e)| std::ptr::eq(*f, &carrying) && e.id == entry.id), + "reach-guard: the window must actually MINT the pair, or the refusal below would \ + be a refusal over an empty population" + ); + assert!( + stack_entry_has_no_ordering_input(&carrying, &entry), + "reach-guard: shape (B) announces no choice, so the ANNOUNCEMENT loop passes and \ + the refusal below is attributable to conjunct (6)" + ); + + let mut verdicts = PeriodVerdicts::for_period(&ring, ¤t, PlayerId(0)); + assert!( + !stack_choices_are_all_specified( + ¤t, + PlayerId(0), + std::slice::from_ref(&may), + Some(&touch), + &mut verdicts + ), + "CR 732.2a: the described sequence is EVERY choice the shortcut makes, not the \ + subset that happens to sit on the stack at the offer beat. A `PayCost` residual \ + sits in the fail-closed grouped arm, so an announced-then-resolved pair must \ + still refuse the offer" + ); + assert!( + verdicts.conjunct6_asks() >= 1, + "attribution: conjunct (6) must have ASKED about the off-stack pair — a `false` \ + with zero asks would be some other gate's refusal. asks={}", + verdicts.conjunct6_asks() + ); + } } diff --git a/crates/engine/tests/integration/loop_shortcut_offer_writer_census.rs b/crates/engine/tests/integration/loop_shortcut_offer_writer_census.rs new file mode 100644 index 0000000000..b5019e742c --- /dev/null +++ b/crates/engine/tests/integration/loop_shortcut_offer_writer_census.rs @@ -0,0 +1,365 @@ +//! §6 R8 — THE OFFER-WRITER SURFACE TRIPWIRE, AS A TRACKED TEST RATHER THAN A +//! WRITTEN NUMBER. +//! +//! CR 732.2a: only the player with priority may suggest a shortcut, and the +//! engine's record of a live suggestion is a `WaitingFor::LoopShortcut` write. +//! The 5d period machinery adds certification paths, so the standing question +//! "did a new path learn to certify without declaring or driving?" needs an +//! instrument that re-measures on every `cargo test -p phase-engine` run. A +//! number written into a plan cannot fire; this can. +//! +//! WHAT IT PINS, and why it is an INVARIANCE claim rather than a re-measurement: +//! 22 production + 12 test sites across `crates/engine/src` and +//! `crates/phase-ai/src`. A failure reads *"5d (or a successor) changed the +//! offer-writer surface"*, not *"someone re-measured"*. +//! +//! THE ANCHOR IS BARE — `WaitingFor::LoopShortcut {`, with no `= ` / `Ok(` +//! qualifier. A prefix-anchored regex cannot be completed by adding prefixes: +//! `Some(WaitingFor::LoopShortcut {`, `vec![WaitingFor::LoopShortcut {`, a bare +//! literal in argument position and `return WaitingFor::LoopShortcut {` are all +//! constructions, and a match-arm PATTERN is a *consumer* whose appearance is as +//! worth surfacing as a writer's. Dropping the qualifier pins the whole surface +//! and has no form gap by construction. +//! +//! Pattern copied from `no_top_level_test_binaries.rs` — the in-tree precedent +//! for a `#[test]` that reads the source tree through +//! `Path::new(env!("CARGO_MANIFEST_DIR"))` and asserts a structural invariant. + +use std::collections::BTreeMap; +use std::path::{Path, PathBuf}; + +/// The bare anchor, ASSEMBLED AT RUNTIME. +/// +/// This file lives under `crates/engine/tests/`, which the census does not walk, +/// so a literal could not be self-counted today. Assembling it anyway keeps that +/// true across a future move: an instrument that can count its own needle +/// reports its own text as a finding. +fn anchor() -> String { + format!("{}::{} {{", "WaitingFor", "LoopShortcut") +} + +/// The ROUND-2 anchor this row replaces — a CONSTRUCTION-shaped detector. Kept +/// only so the foreign-form plant below can measure that it scores `(0, 0)` on +/// input the bare anchor scores `(4, 4)` on; that measurement is the statement +/// that the old tripwire was evadable. +fn construction_anchors() -> [String; 2] { + let bare = anchor(); + [format!("= {bare}"), format!("Ok({bare}")] +} + +/// One classified hit. +#[derive(Debug, Clone, PartialEq, Eq)] +struct Hit { + file: String, + line: usize, + in_test: bool, +} + +/// CR-neutral source classification: which lines of `src` sit inside a +/// `#[cfg(test)]` scope? +/// +/// THE CORRECTED RULE (the shipped `.combofb-cfgscope.sh` gets this wrong with a +/// bare `/^mod /`, which reports every hit inside a `#[cfg(test)] pub mod tests +/// {` as PRODUCTION): +/// +/// * `#[cfg(test)]` immediately followed by an OPTIONAL VISIBILITY PREFIX and +/// then `mod ` (`mod` / `pub mod` / `pub(crate) mod` / `pub(super) mod`) opens +/// a module spanning to that `mod` line's own closing brace, at the `mod`'s +/// indentation. +/// * `#[cfg(test)]` followed by anything else scopes ONLY its own item. +/// +/// The naive "nearest preceding attribute" rule is measured wrong and yields +/// false TEST verdicts, so it is deliberately not used. +fn cfg_test_scoped_lines(src: &str) -> Vec { + let lines: Vec<&str> = src.lines().collect(); + let mut scoped = vec![false; lines.len()]; + let mut i = 0usize; + while i < lines.len() { + if lines[i].trim() != "#[cfg(test)]" || i + 1 >= lines.len() { + i += 1; + continue; + } + let next = lines[i + 1]; + let indent = next.len() - next.trim_start().len(); + let closing = format!("{}}}", " ".repeat(indent)); + let body = next.trim_start(); + let after_vis = body + .strip_prefix("pub(crate) ") + .or_else(|| body.strip_prefix("pub(super) ")) + .or_else(|| body.strip_prefix("pub ")) + .unwrap_or(body); + let opens_module = after_vis.starts_with("mod "); + // A `#[cfg(test)]` item that opens a brace spans to its own closing + // brace; one that does not (a `use`, a `const`) is a single line. + if opens_module || next.trim_end().ends_with('{') { + let mut j = i + 2; + while j < lines.len() && lines[j].trim_end() != closing { + j += 1; + } + for s in scoped.iter_mut().take((j + 1).min(lines.len())).skip(i) { + *s = true; + } + i = j + 1; + continue; + } + scoped[i + 1] = true; + i += 1; + } + scoped +} + +/// Classify every `needle` hit in `src`, skipping COMMENT lines. +/// +/// ⚠ THE COMMENT EXCLUSION IS A MEASURED DEVIATION FROM THE PLAN, DISCLOSED +/// HERE RATHER THAN ABSORBED. §6 R8's ROUND-7 pre-change-tree check asserts that +/// U1–U6 introduce no `WaitingFor::LoopShortcut {` token. Measured on this tree: +/// 5d U2's declare-time owner firewall added the DOC LINE +/// `// copied from `WaitingFor::LoopShortcut { proposer }`.` to `game/engine.rs`, +/// which a comment-blind bare anchor counts as a 23rd production site. A comment +/// is not a code surface — it writes no offer and consumes none — so counting it +/// would make the tripwire fire on prose and would force the pinned number to be +/// re-measured by the very commit that ships the row. Excluding comment lines +/// restores the plan's 22/12 exactly, INCLUDING its per-file production multiset. +fn classify(src: &str, needle: &str, file: &str) -> Vec { + let scoped = cfg_test_scoped_lines(src); + src.lines() + .enumerate() + .filter(|(_, line)| line.contains(needle) && !line.trim_start().starts_with("//")) + .map(|(n, _)| Hit { + file: file.to_string(), + line: n + 1, + in_test: scoped[n], + }) + .collect() +} + +fn rs_files(root: &Path) -> Vec { + let mut out = Vec::new(); + let mut stack = vec![root.to_path_buf()]; + while let Some(dir) = stack.pop() { + for entry in std::fs::read_dir(&dir).unwrap_or_else(|e| panic!("read {dir:?}: {e}")) { + let path = entry.expect("read dir entry").path(); + if path.is_dir() { + stack.push(path); + } else if path.extension().is_some_and(|ext| ext == "rs") { + out.push(path); + } + } + } + out.sort(); + out +} + +/// The two crate roots R8 walks. `crates/engine/tests/**` is deliberately NOT +/// walked: the acceptance rows that name the variant live there, and they are +/// consumers of the surface rather than members of it. +fn census(needle: &str) -> Vec { + let engine_src = Path::new(env!("CARGO_MANIFEST_DIR")).join("src"); + let ai_src = Path::new(env!("CARGO_MANIFEST_DIR")) + .join("..") + .join("phase-ai") + .join("src"); + let mut hits = Vec::new(); + for (root, prefix) in [(engine_src, "engine/src"), (ai_src, "phase-ai/src")] { + for path in rs_files(&root) { + let src = + std::fs::read_to_string(&path).unwrap_or_else(|e| panic!("read {path:?}: {e}")); + // Stable, checkout-independent label: `/src/...`. Built from the + // walk root rather than from the absolute path, because the phase-ai + // root is reached through `../` and would otherwise label as + // `engine/../phase-ai/src/...`. + let rel = path + .strip_prefix(&root) + .expect("walked path is under its root") + .to_string_lossy() + .replace('\\', "/"); + hits.extend(classify(&src, needle, &format!("{prefix}/{rel}"))); + } + } + hits +} + +/// R8 CONJUNCT 1 — the offer-writer surface, pinned BIDIRECTIONALLY (`== 22` / +/// `== 12`, so a REMOVED site fails too) and by per-file multiset. +/// +/// R8 CONJUNCT 2, same test — every production `validate_pins(` site is a +/// declare-time gate paired with `predictability_gate`. +/// +/// ON FAILURE, the named consequence (§10 ruling condition (2)): a new +/// production site in a certification-path file, or a declare site without its +/// `validate_pins` pairing, means the period machinery may have created a path +/// that CERTIFIES WITHOUT DECLARING OR DRIVING. That converts +/// answer-legality-at-certification from a doc note into owed work, and the +/// U-series stops until it is carried. Adjudication is a human step; this is not +/// a test to relax. A new *read* site is the benign case and the message says so. +#[test] +fn the_loop_shortcut_offer_writer_surface_is_pinned_and_every_declare_site_validates_pins() { + let hits = census(&anchor()); + let production: Vec<&Hit> = hits.iter().filter(|h| !h.in_test).collect(); + let in_test: Vec<&Hit> = hits.iter().filter(|h| h.in_test).collect(); + + let mut per_file: BTreeMap<&str, usize> = BTreeMap::new(); + for h in &production { + *per_file.entry(h.file.as_str()).or_default() += 1; + } + let multiset: Vec<(String, usize)> = per_file + .iter() + .map(|(f, n)| ((*f).to_string(), *n)) + .collect(); + + assert_eq!( + (production.len(), in_test.len()), + (22, 12), + "CR 732.2a OFFER-WRITER SURFACE CHANGED (not re-measured — this number is an \ + INVARIANCE pin over the whole 5d U-series).\n\ + The three CERTIFICATION-PATH writers are `reconcile_terminal_result` (object-growth \ + arm), `interactive_loop_bridge` (drain bridge arm) and \ + `try_offer_bounded_cycle_shortcut` (bounded arm), all in `engine/src/game/engine.rs`. \ + `game/visibility.rs`'s `filter_state_for_viewer` writer is EXCLUDED by name and not \ + silently: it re-emits an ALREADY-minted offer into a per-viewer projection and cannot \ + run unless `state.waiting_for` is already a `LoopShortcut`.\n\ + A new PRODUCTION site in a certification-path file means the period machinery may \ + certify without declaring or driving — §10 ruling condition (2), i.e. \ + answer-legality-at-certification becomes OWED WORK and the U-series stops. A new READ \ + site is the benign case; adjudicate, do not relax the assert.\n\ + measured per-file production multiset: {multiset:?}\n\ + production: {production:?}\n\ + test: {in_test:?}" + ); + assert_eq!( + multiset, + vec![ + ("engine/src/ai_support/candidates.rs".to_string(), 1), + ("engine/src/game/engine.rs".to_string(), 5), + ("engine/src/game/interaction.rs".to_string(), 5), + ("engine/src/game/scenario.rs".to_string(), 1), + ("engine/src/game/visibility.rs".to_string(), 2), + ("engine/src/types/game_state.rs".to_string(), 4), + ("phase-ai/src/decision_kind.rs".to_string(), 1), + ("phase-ai/src/policies/loop_shortcut.rs".to_string(), 1), + ("phase-ai/src/projection.rs".to_string(), 1), + ("phase-ai/src/search.rs".to_string(), 1), + ], + "the COUNT can be preserved by a move that relocates a writer into a \ + certification-path file, so the per-file multiset is pinned too" + ); + + // ── CONJUNCT 2: every production `validate_pins(` site is a declare-time gate ── + // UNQUALIFIED anchor, deliberately: the fully-qualified + // `crate::analysis::decision_template::validate_pins(` form matches only the + // `engine.rs` site and under-counts by one — this plan's own finding 5, + // applied symmetrically. + let pins = census("validate_pins("); + let pins_production: Vec<&Hit> = pins.iter().filter(|h| !h.in_test).collect(); + assert_eq!( + pins_production.len(), + 3, + "expected 1 definition (`analysis/decision_template.rs`) + 2 declare-time call sites \ + (`game/engine.rs::handle_declare_shortcut`, \ + `game/interaction.rs::materialize_loop_shortcut_response`); got {pins_production:?}" + ); + let definition = pins_production + .iter() + .filter(|h| h.file == "engine/src/analysis/decision_template.rs") + .count(); + assert_eq!(definition, 1, "exactly one definition: {pins_production:?}"); + + // Each CALL SITE is paired with `predictability_gate` — the coverage half of + // the same declare-time gate. Pairing is asserted WITHIN the enclosing + // statement, i.e. a `predictability_gate` hit within two lines of the call. + let gates = census("predictability_gate("); + for site in pins_production + .iter() + .filter(|h| h.file != "engine/src/analysis/decision_template.rs") + { + let paired = gates + .iter() + .any(|g| g.file == site.file && g.line.abs_diff(site.line) <= 2); + assert!( + paired, + "CR 732.2a: a declare site that validates pin VALUES without also running \ + `predictability_gate`'s COVERAGE check can accept a proposal that leaves a \ + published choice unpinned — the certifies-without-declaring shape §10 condition \ + (2) names. Unpaired site: {site:?}; gates: {gates:?}" + ); + } +} + +/// R8 ANTI-VACUITY ARM 2 — THE FOREIGN-FORM PLANT. +/// +/// Feeds the classifier a synthetic source carrying the anchor in FOUR forms the +/// round-2 construction anchor could not match — the bare literal in expression +/// position (the `types/game_state.rs` shape, the one genuinely-missed site), +/// `Some(..)`, a match-arm PATTERN, and `return ..` — plus one `cfg(test)` +/// mod-scoped copy of each. `(production, test) == (4, 4)`. +/// +/// THE PLANT IS DELIBERATELY NOT IN THE PLAN'S OWN ANCHOR FORM. A tripwire that +/// only detects its own shape is the defect this row files against the +/// superseded instrument, and planting in that shape would repeat it. +/// +/// KEYED, not trusted: the round-2 construction anchors are run over the SAME +/// input and must score `(0, 0)` — the measured statement that the old tripwire +/// was evadable — while the bare anchor scores `(4, 4)`. One instrument +/// resolving two different values on one input is what makes this a measurement +/// rather than a constant. +/// +/// REVERT-PROBE (arm 3, the ONLY remaining non-trivial conjunct under a bare +/// anchor): remove the cfg-scope filter — i.e. make `cfg_test_scoped_lines` +/// return all-`false` — and the four mod-scoped plants count as production, so +/// `(4, 4)` becomes `(8, 0)` and this test FLIPS TO FAIL. The classifier is also +/// measured keyed on the real tree: it returns BOTH 22 production AND 12 test +/// above, so it is not constant in either direction. +#[test] +fn the_cfg_scope_classifier_sees_four_foreign_forms_the_construction_anchor_misses() { + let bare = anchor(); + let forms = [ + // 1. bare literal in ARGUMENT position — `types/game_state.rs`'s shape, + // the one site the construction anchor genuinely missed. + format!( + " cases.push((\"answered by DeclareShortcut\", {bare} proposer: PlayerId(0) }}));" + ), + // 2. `Some(..)`. + format!(" let offer = Some({bare} proposer, schema }});"), + // 3. a match-arm PATTERN — a CONSUMER of the surface. + format!(" {bare} proposer, .. }} => *proposer,"), + // 4. `return ..`. + format!(" return {bare} proposer, schema, certificate, predicted_winner }};"), + ]; + let mut src = String::from("fn production_side() {\n"); + for f in &forms { + src.push_str(f); + src.push('\n'); + } + src.push_str("}\n\n#[cfg(test)]\npub(crate) mod tests {\n fn test_side() {\n"); + for f in &forms { + // Same four forms, one indent deeper, inside a `pub(crate) mod` — the + // visibility prefix the superseded shell classifier's `/^mod /` misses. + src.push_str(" "); + src.push_str(f); + src.push('\n'); + } + src.push_str(" }\n}\n"); + + let hits = classify(&src, &bare, "synthetic"); + let production = hits.iter().filter(|h| !h.in_test).count(); + let in_test = hits.iter().filter(|h| h.in_test).count(); + assert_eq!( + (production, in_test), + (4, 4), + "the bare anchor must see all four foreign forms on BOTH sides of the cfg scope, and \ + the cfg-scope classifier must put the `pub(crate) mod tests` copies in the TEST \ + column. Removing the cfg-scope filter makes this (8, 0). hits: {hits:?}\nsrc:\n{src}" + ); + + for old in construction_anchors() { + let old_hits = classify(&src, &old, "synthetic"); + assert_eq!( + old_hits.len(), + 0, + "keying control: the ROUND-2 construction anchor `{old}` scores 0 on input the \ + bare anchor scores 8 on — that is the measured statement that the superseded \ + tripwire was evadable, and it is what makes the (4, 4) above a measurement \ + rather than a constant. hits: {old_hits:?}" + ); + } +} diff --git a/crates/engine/tests/integration/main.rs b/crates/engine/tests/integration/main.rs index d620410750..3c16b51162 100644 --- a/crates/engine/tests/integration/main.rs +++ b/crates/engine/tests/integration/main.rs @@ -1088,6 +1088,7 @@ mod loop_counter_growth; mod loop_shortcut; mod loop_shortcut_activation; mod loop_shortcut_mana_engine; +mod loop_shortcut_offer_writer_census; mod lose_control_this_turn_delayed_trigger; mod lost_mine_fungi_cavern_duration_runtime; mod lost_mine_storeroom_targeting_runtime; From e950373d70aea9493d9090517fb1bea8c8f7c68e Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sat, 1 Aug 2026 22:19:31 -0500 Subject: [PATCH 19/62] test(engine): verdict-door totality, keying and proposer rows (5d U3, R22) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All five R22 conjuncts across four tests so each conjunct's revert-probe lands on its own assertion: totality/frame/proposer (1)+(2)+(2'), the window-offset- zero vacuity boundary (green under all four probes, never counted as coverage), conjunct (3) foreign-frame refusal, conjunct (4) effective-key proposer. Four probes run, flipped, restored byte-identical (0 deleted lines in the diff): id-only memo key; unchecked frame_ix; hard-coded proposer; deleted relief agreement guard. The fourth flipped only on run 2 — run 1 exposed a VACUOUS relief negative: entry_publishes_pin_slots early-returns on entry.controller != proposer (engine.rs:1670), so the B-bound container answered None upstream of the guard under test. Fixed with a B-controlled entry plus a positive reach-guard (under B's own pins the entry IS relieved); the probe then flipped. CR 603.5 anchor re-verified. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/analysis/resource.rs | 376 +++++++++++++++++++++++++ 1 file changed, 376 insertions(+) diff --git a/crates/engine/src/analysis/resource.rs b/crates/engine/src/analysis/resource.rs index e9c884cd80..ddeb18c4e9 100644 --- a/crates/engine/src/analysis/resource.rs +++ b/crates/engine/src/analysis/resource.rs @@ -12970,6 +12970,18 @@ mod tests { } } + /// [`u2_scope`] with the proposer as a PARAMETER — the seat whose offer published the pins, + /// which is not always the seat the consuming container is bound to (R22 conjunct (4)). + fn u3_scope_for(proposer: PlayerId, slots: &[DecisionSlot]) -> LoopWindowScope<'_> { + LoopWindowScope { + phase_invariant: None, + sole_driver: None, + pinned: Some(PinnedChoices { proposer, slots }), + cast_card_ids: None, + period: None, + } + } + /// The `LoopWindowScope` an offer that published exactly `slots` hands the relief. fn u2_scope(slots: &[DecisionSlot]) -> LoopWindowScope<'_> { LoopWindowScope { @@ -14118,4 +14130,368 @@ mod tests { verdicts.conjunct6_asks() ); } + + /// R22's own NEGATIVE CONTROL — the VACUITY BOUNDARY, never coverage. + /// + /// At window offset zero the window-relative position EQUALS the absolute one + /// (`w_pos == abs ⟺ idx == 0`) and an id-only memo key serves the same frame it would + /// have computed anyway, so the shipped mint and BOTH reverts AGREE. Round 15's re-key + /// from two ring frames to three reproduced the diagnosed defect one parameter over + /// precisely because a "three-frame period" taken as the WHOLE ring plus `current` is + /// still `idx == 0`. + /// + /// This test is GREEN under every probe R22 runs. That measured agreement is the whole + /// point: it is what a fixture at this offset can prove, which is nothing. + #[test] + fn r22_control_at_window_offset_zero_the_two_key_arithmetics_agree() { + let (base, src) = u2_relief_board(); + let entry = u2_shape_b_entry(src, 9221, u2_draw_effect(), |_| {}); + let f1 = base.clone(); + let mut f2 = base.clone(); + f2.stack.push_back(entry.clone()); + let mut current = base.clone(); + current.stack.push_back(entry.clone()); + + let ring = [&f1, &f2]; + let mut flat = PeriodVerdicts::for_period(&ring, ¤t, PlayerId(0)); + let f = flat + .frame_ix(&f1) + .expect("the control's carrying frame is the FIRST — that is the whole defect"); + // `FrameIx`'s field is private outside its module — deliberately, it is a token and not + // a number — so offset zero is asserted by ORDER: nothing in the table precedes it. + let ix2 = flat.frame_ix(&f2).expect("f2 is in the period"); + let ixc = flat.frame_ix(¤t).expect("current is in the period"); + assert!( + f < ix2 && ix2 < ixc, + "the control is only a control AT offset zero: if the carrying frame stopped being \ + the FIRST, the fixture drifted into the discriminating shape and this test would \ + start claiming coverage it cannot support" + ); + assert!( + flat.verdict(f, &entry).published.is_some(), + "at idx == 0 every key arithmetic agrees — measured, and reported as a boundary \ + rather than as evidence" + ); + } + + /// R22 — THE VERDICT DOOR IS TOTAL, FRAME-CORRECT AND PROPOSER-CORRECT. + /// + /// The class row for the derived cache, and the ONLY row that can lose if a key-component + /// error returns. FIVE conjuncts. + /// + /// **(1) TOTALITY, STRUCTURAL.** `PeriodVerdicts::verdict(&mut self, f: FrameIx, + /// entry: &StackEntry) -> &EntryVerdict`. ⚠ AN `Option` RETURN, AN INDEXING OPERATOR, OR + /// ANY SIBLING `get(..)` ACCESSOR IS FORBIDDEN — a partial container has a MISS CONTRACT, + /// and a row asserting how a miss behaves asserts an unreachable state. Totality is scoped + /// honestly: it is total over every `FrameIx` THIS container minted, and MINTING + /// (`frame_ix`) is the membership question — conjunct (2′) is that half. + /// + /// **(2) FRAME-CORRECTNESS — THE PIN IS THE WINDOW OFFSET, NOT THE FRAME COUNT.** Round 15 + /// re-keyed this two frames → three and reproduced the diagnosed defect one parameter over: + /// `w_pos == abs ⟺ idx == 0`, so a "three-frame period" built as the WHOLE ring plus + /// `current` is exactly as vacuous as the two-frame form it replaced. The construction + /// requirement is therefore `ring.len() >= 3` **AND** the candidate window starting at + /// `idx >= 1` — a STRICT SUFFIX of the ring plus `current` — and BOTH are carried as + /// EXECUTABLE reach-guards, not prose. The period is built so the SAME entry id classifies + /// DIFFERENTLY per frame (the source object is absent from the older frame, so the mint + /// answers `None` there and `Some` on the carrying frame), and the consumed verdict must be + /// the CARRYING frame's, never the window-relative position's. + /// + /// The `idx == 0` shape is RETAINED as this conjunct's own NEGATIVE CONTROL: there the + /// shipped mint and the window-relative revert AGREE, and that measured agreement is the + /// VACUITY BOUNDARY — it must never be reported as coverage. + /// + /// **(2′) MINT-IDENTITY.** Every announced pair of a real window resolves through + /// `frame_ix`, and a FOREIGN frame — a fresh clone, byte-equal in CONTENT — resolves to + /// `None` and the consumer REFUSES. Correctness by IDENTITY, which index arithmetic cannot + /// satisfy on any `idx > 0` candidate. + /// + /// **(3) CONTAINER/CURRENT AGREEMENT — a PRODUCTION guard, not a `debug_assert`.** + /// Consumers resolve their own `current` through `frame_ix`; a memo built over a DIFFERENT + /// frame set yields `None` ⇒ certification refuses. + /// + /// **(4) PROPOSER COMPLETENESS.** The effective key is `(proposer, FrameIx, ObjectId)` with + /// the first component constant per container: a `for_period(A)` container publishes for A + /// while an `unproven` container publishes NOTHING for the SAME (frame, entry) — and each + /// resolves that frame through its OWN `frame_ix`, because a `FrameIx` never crosses the + /// container that minted it. The relief's agreement guard is the second half: pins minted + /// for A consumed under a container bound to B get `None`. + /// + /// REVERT-PROBES (all three RUN, see the journal): + /// * **(1)/(2)** key the memo by `ObjectId` ALONE (drop the `FrameIx` component) ⇒ the + /// id-keyed blindness returns, one entry gets ONE verdict across frames ⇒ (2) FLIPS while + /// the `idx == 0` control stays green — which is exactly the vacuity boundary. + /// * **(2′)/(3)** make the `current` resolution UNCHECKED (return the last index without + /// the `ptr::eq` test) ⇒ the foreign clone resolves and the mismatched memo certifies + /// against the wrong frame set ⇒ (2′) and (3) FLIP. + /// * **(4)** hard-code the container's proposer ⇒ the `for_period(A)`-vs-`unproven` pair + /// collapses to one answer ⇒ FLIPS. + #[test] + fn r22_the_verdict_door_is_total_frame_correct_and_proposer_correct() { + use crate::game::engine::entry_publishes_pin_slots; + + let (base, src) = u2_relief_board(); + let entry = u2_shape_b_entry(src, 9220, u2_draw_effect(), |_| {}); + + // The per-frame difference: the source object is GONE from the oldest frame, so the + // mint's `object_decision_source` conjunct answers `None` there and `Some` elsewhere. + // One entry id, two different verdicts — which is what an id-only key cannot express. + let mut f0 = base.clone(); + f0.objects.remove(&src); + let f1 = base.clone(); + // The entry ANNOUNCES at f2 — absent from the window's first frame, present after — + // which is what gives conjunct (2′) a real announced pair to quantify over. + let mut f2 = base.clone(); + f2.stack.push_back(entry.clone()); + let mut current = base.clone(); + current.stack.push_back(entry.clone()); + + assert!( + entry_publishes_pin_slots(&f1, &entry, PlayerId(0)).is_some() + && entry_publishes_pin_slots(&f0, &entry, PlayerId(0)).is_none(), + "(2) reach-guard: the two frames must give the SAME entry id DIFFERENT mint \ + answers, or the frame component of the key is unobservable and every assertion \ + below is vacuous" + ); + + // ── (2) THE OPERATING POINT: ring >= 3 AND the window a STRICT suffix (idx >= 1) ──── + let ring = [&f0, &f1, &f2]; + let idx = 1usize; + assert!( + ring.len() >= 3, + "(2) construction requirement: fewer than three ring frames cannot carry a strict \ + suffix, and the round-14 two-frame form was measured vacuous" + ); + assert!( + idx >= 1, + "(2) construction requirement: at idx == 0 the window-relative position EQUALS the \ + absolute one (`w_pos == abs ⟺ idx == 0`) and the revert cannot flip" + ); + let window = &ring[idx..]; + + let mut verdicts = PeriodVerdicts::for_period(&ring, ¤t, PlayerId(0)); + let ix0 = verdicts.frame_ix(&f0).expect("f0 is in the period"); + let ix1 = verdicts.frame_ix(&f1).expect("f1 is in the period"); + let ix2 = verdicts.frame_ix(&f2).expect("f2 is in the period"); + let ixc = verdicts + .frame_ix(¤t) + .expect("current is in the period"); + assert!( + ix0 < ix1 && ix1 < ix2 && ix2 < ixc, + "(2) the frames table is ordered by IDENTITY, ring-then-current: {ix0:?} {ix1:?} \ + {ix2:?} {ixc:?}" + ); + assert_ne!( + ix1, ix0, + "(2) reach-guard `abs != w_pos`: the CARRYING frame f1 sits at absolute index 1 \ + while window-relative arithmetic would place it at 0 (= f0). Equal indices here \ + would mean the fixture drifted back to the vacuous idx == 0 shape" + ); + + // (1) TOTALITY + (2) FRAME-CORRECTNESS on one run: a pair that was never pre-computed + // returns a REAL verdict (the signature returns `&EntryVerdict`, never an `Option`), + // and the two frames answer DIFFERENTLY for one entry id. + assert!( + verdicts.verdict(ix1, &entry).published.is_some(), + "(2) the consumed verdict is the CARRYING frame's — f1 holds the source object, so \ + the mint publishes" + ); + assert!( + verdicts.verdict(ix0, &entry).published.is_none(), + "(2) …and the OLDER frame's answer is its own. Under window-relative arithmetic \ + (or an id-only key) the carrying frame's cached `Some` would be served here" + ); + + // The idx == 0 negative control lives in its own test — see + // `r22_control_at_window_offset_zero_the_two_key_arithmetics_agree`, which must stay + // GREEN under this row's probes and must never be reported as coverage. + + // ── (2′) MINT-IDENTITY: every announced pair resolves; a foreign CLONE does not ───── + let touch = + certified_period_touch(window, ¤t, PeriodCertification::ResourceSignatureOnly); + assert!( + !touch.announced.is_empty(), + "(2′) reach-guard: the window must actually announce something, or the loop below \ + quantifies over nothing" + ); + for (frame, pair_entry) in &touch.announced { + assert!( + verdicts.frame_ix(frame).is_some(), + "(2′) every announced pair's carrying frame is minted by `frame_ix` — entry {:?}", + pair_entry.id + ); + } + let foreign = current.clone(); + assert!( + verdicts.frame_ix(&foreign).is_none(), + "(2′) POINTER IDENTITY, NOT EQUALITY: a fresh clone is byte-equal in content and \ + still outside the period, so it must not resolve. Index arithmetic cannot make \ + this distinction at all" + ); + // …and the CONSUMER refuses on it, fail-closed. + let foreign_touch = PeriodTouch { + announced: vec![(&foreign, &entry)], + frozen_ids: BTreeSet::new(), + }; + let mut v_foreign = PeriodVerdicts::for_period(&ring, ¤t, PlayerId(0)); + assert!( + !stack_choices_are_all_specified( + ¤t, + PlayerId(0), + &[], + Some(&foreign_touch), + &mut v_foreign + ), + "(2′) a frame outside this container's period costs a CERTIFICATE, never a wrong \ + one — the consumer's let-else on `frame_ix(..)` returns `false` and that is the \ + fail-closed arm" + ); + + // Conjuncts (3) and (4) are separate tests below, so each one's revert-probe is + // measured on its own assertion rather than shadowed by an earlier panic. + } + + /// R22 conjunct (3) — CONTAINER/CURRENT AGREEMENT IS A **PRODUCTION** GUARD. + /// + /// A `debug_assert` here would be compiled out of release and the mismatch would then be + /// silent in exactly the build that ships. Asserted as a MATCHED PAIR: the positive proves + /// the board certifies at all (without it the negative passes over a board that refuses for + /// unrelated reasons), the negative differs ONLY in which frame set the memo was built over. + /// + /// REVERT-PROBE (RUN): make `frame_ix` resolve unchecked — fall back to the last index + /// instead of returning `None` — and the mismatched container certifies against the wrong + /// frame set ⇒ the negative FLIPS. + #[test] + fn r22_conjunct3_a_memo_over_a_different_frame_set_refuses_certification() { + use crate::game::engine::entry_publishes_pin_slots; + + let (base, src) = u2_relief_board(); + let entry = u2_shape_b_entry(src, 9222, u2_draw_effect(), |_| {}); + let mut relieved_board = base.clone(); + relieved_board.stack.push_back(entry.clone()); + let may = entry_publishes_pin_slots(&relieved_board, &entry, PlayerId(0)) + .expect("(3) reach-guard: the fixture reaches the mint") + .may + .expect("(3) reach-guard: it publishes its CR 603.5 gate"); + let mut matched = PeriodVerdicts::for_period(&[], &relieved_board, PlayerId(0)); + assert!( + stack_choices_are_all_specified( + &relieved_board, + PlayerId(0), + std::slice::from_ref(&may), + None, + &mut matched + ), + "(3) POSITIVE: a container that holds the caller's `current` certifies this board — \ + without it the negative below would pass over a board that refuses anyway" + ); + let other_current = base.clone(); + let mut mismatched = PeriodVerdicts::for_period(&[], &other_current, PlayerId(0)); + assert!( + !stack_choices_are_all_specified( + &relieved_board, + PlayerId(0), + std::slice::from_ref(&may), + None, + &mut mismatched + ), + "(3) NEGATIVE: a memo built over a DIFFERENT frame set yields `None` for the \ + caller's `current`, so certification refuses. This is a PRODUCTION guard, not a \ + `debug_assert` compiled out of release" + ); + } + + /// R22 conjunct (4) — THE EFFECTIVE KEY CARRIES THE CONTAINER'S PROPOSER. + /// + /// `(proposer, FrameIx, ObjectId)`, with the first component constant per container and + /// therefore held by the container rather than by the memo key. Both halves are asserted: + /// a `for_period(A)` container publishes where an `unproven` one publishes NOTHING for the + /// SAME (frame, entry) — each resolving that frame through its OWN `frame_ix`, because a + /// `FrameIx` never crosses the container that minted it — and the relief refuses pins + /// minted for A when the container is bound to B (CR 603.5: the cached `published` IS the + /// mint's answer for the CONTAINER's proposer). + /// + /// REVERT-PROBES (both RUN): hard-code the proposer inside `verdict` ⇒ the + /// `for_period(A)`-vs-`unproven` pair collapses to one answer ⇒ FLIPS. Delete + /// `pinned_may_choice_relief`'s agreement guard ⇒ B's container relieves A's pins ⇒ FLIPS. + #[test] + fn r22_conjunct4_the_effective_key_carries_the_containers_proposer() { + use crate::game::engine::entry_publishes_pin_slots; + + let (base, src) = u2_relief_board(); + let entry = u2_shape_b_entry(src, 9223, u2_draw_effect(), |_| {}); + let mut relieved_board = base.clone(); + relieved_board.stack.push_back(entry.clone()); + let mut bound_to_a = PeriodVerdicts::for_period(&[], &relieved_board, PlayerId(0)); + let fa = bound_to_a + .frame_ix(&relieved_board) + .expect("(4) the container holds the board"); + assert!( + bound_to_a.verdict(fa, &entry).published.is_some(), + "(4) reach-guard, MANDATORY: the `Some` arm must fire, or the `None` below is \ + satisfied by a board that publishes nothing to anyone" + ); + let mut unproven_c = PeriodVerdicts::unproven(&relieved_board); + let fu = unproven_c.frame_ix(&relieved_board).expect( + "(4) each container resolves the frame through its OWN `frame_ix` — a \ + `FrameIx` never crosses the container that minted it", + ); + assert!( + unproven_c.verdict(fu, &entry).published.is_none(), + "(4) an `unproven` container binds NO proposer, so nothing is published: that is \ + the mint's own answer for 'no offer binds a proposer', not an invented one" + ); + // ── The relief half: pins minted for A, container bound to B ──────────────────────── + // + // ⚠ THE VACUITY THIS ARM HAD TO ESCAPE. Run against the P0-controlled `entry` above, + // this arm passes with the agreement guard DELETED — measured: probe P4 left it green. + // The mint's own `entry.controller != proposer` conjunct already answers `None` for B, + // so the negative was satisfied upstream of the guard it claimed to cover. The entry + // below is controlled by B, so B's container genuinely publishes and the guard is the + // ONLY thing left standing between A's pins and a relief minted for another seat. + let mut b_entry = u2_shape_b_entry(src, 9224, u2_draw_effect(), |a| { + a.controller = PlayerId(1); + }); + b_entry.controller = PlayerId(1); + let mut b_board = base.clone(); + b_board.stack.push_back(b_entry.clone()); + let b_may = entry_publishes_pin_slots(&b_board, &b_entry, PlayerId(1)) + .expect("(4) reach-guard: B's OWN entry reaches the mint under B") + .may + .expect("(4) reach-guard: and publishes its CR 603.5 gate under B"); + let b_slots = std::slice::from_ref(&b_may); + + let mut bound_to_b = PeriodVerdicts::for_period(&[], &b_board, PlayerId(1)); + let fb = bound_to_b + .frame_ix(&b_board) + .expect("(4) B's container holds the board"); + assert!( + pinned_may_choice_relief( + fb, + &b_entry, + &mut bound_to_b, + u3_scope_for(PlayerId(1), b_slots) + ) + .is_some(), + "(4) POSITIVE REACH-GUARD: under B's OWN pins this entry IS relieved. Without this \ + the negative below would be satisfied by an entry nobody can relieve" + ); + let mut bound_to_b2 = PeriodVerdicts::for_period(&[], &b_board, PlayerId(1)); + let fb2 = bound_to_b2 + .frame_ix(&b_board) + .expect("(4) same board, fresh container so the memo cannot carry B's answer over"); + assert!( + pinned_may_choice_relief( + fb2, + &b_entry, + &mut bound_to_b2, + u3_scope_for(PlayerId(0), b_slots) + ) + .is_none(), + "(4) CR 603.5: pins minted by A's offer may never be spent against a verdict this \ + container minted for B — the cached `published` IS the mint's answer for the \ + CONTAINER's proposer, so consuming it under another seat's pins would relieve a \ + choice that seat never described" + ); + } } From 0b793e860d3d737d5a9f61acd2f5c68082137939 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 00:04:24 -0500 Subject: [PATCH 20/62] =?UTF-8?q?test(engine):=20close=20the=20U3=20remain?= =?UTF-8?q?der=20=E2=80=94=20R16,=20R17,=20R21(b)-family,=20R27(a2),=20Arc?= =?UTF-8?q?::as=5Fptr?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nine test-only rows, +919/-0, no production line touched. MEASURED, through `try_offer_bounded_cycle_shortcut_metered` and through the predicates the mint calls, on both TRACKED 4p dumps driven via `apply()`: dina beat 19 demand=13 offer fires, cap does not bind (D searched, not copied) dina beat 10 stack=8 announced=3 frozen=5 asks=6 skips=5 sum=11 dellian beat 14 stack=154 announced=2 frozen=152 asks=4 skips=152 sum=156 dellian beat 14 mint: NoCertification, spent=26=cap, denied, scans=36, 1.79 s (debug) id freshness: dellian 227 announcements / 50 resolutions / 0 revivals; dina 88/17/0 R21(b)'s SUM IDENTITY is CORRECTED, not copied: the plan's "sum = current.stack.len() = 154-156" is HEAD-era. Post-U3 the domain is `announced ∪ (stack \ frozen)`, so the measured sum is `announced + stack` (156 and 11). The plan's asks/skips figures themselves reproduce. R21(b-placement-B)'s stated matched pair is FALSIFIED and re-keyed: the unmutated dellian beat-14 board does NOT offer (item (4) already trips at stack index 35, and that entry is ITSELF frozen), so no mutation is needed — item (4) scans 36 entries where only 2 are non-exempt, while conjunct (6) on the same touch skips all 152. R27(d) is NOT WRITTEN, measured vacuous four ways, including running the plan's own stated revert (comparand ring <- .live): 4/4 green, nothing flips. Basis A certifies 0 times corpus-wide; `frames_per_period`/`delta` come from `ring_delta_signature`, which reads `f.normalized` directly from the sample and never consults the mint's `ring` vec; `residual_board_delta` is byte-identical across the halves. R16(ii-a)'s `spent <= PROBE_BUDGET` is VACUOUS by construction (a budget cannot overspend), so the row ships the denial flag plus an exact-demand sweep across the seam's closed cap domain: `Lowered(13)` offers, every `Lowered(n < 13)` refuses. R16(iv)'s ceiling is DEBUG-scaled and says so. Eight revert-probes applied, seven flipped, all restored byte-identically. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/analysis/resource.rs | 620 ++++++++++++++++++ crates/engine/src/game/engine.rs | 203 ++++++ .../engine/tests/integration/loop_shortcut.rs | 96 +++ 3 files changed, 919 insertions(+) diff --git a/crates/engine/src/analysis/resource.rs b/crates/engine/src/analysis/resource.rs index ddeb18c4e9..56be66fcc8 100644 --- a/crates/engine/src/analysis/resource.rs +++ b/crates/engine/src/analysis/resource.rs @@ -5177,6 +5177,56 @@ mod tests { .count() } + /// The two TRACKED 4p dumps, as `(name, gzip)` pairs. F4 + /// (`fantastic_four_bounded_loop_4p.json.gz`) is deliberately absent: it is untracked + /// until §5 U5, so a row keyed to it would not be reproducible from the repository. + const TRACKED_DUMPS: [(&str, &[u8]); 2] = [ + ( + "dina", + include_bytes!("../../tests/fixtures/dina_conqueror_4p.json.gz"), + ), + ( + "dellian", + include_bytes!("../../tests/fixtures/dellian_emblem_conqueror_4p.json.gz"), + ), + ]; + + /// Drive one dump through `apply()` until `pred` accepts the board, returning the beat + /// index and that board. + /// + /// The beat is SEARCHED by its construction requirements, never hardcoded — a hardcoded + /// index is a fixture that drifts silently when the drive policy moves. `None` ⇒ no beat + /// within `max_beats` satisfied them, which every caller turns into a loud failure rather + /// than a vacuous pass. + fn drive_dump_until( + gz: &[u8], + max_beats: usize, + pred: impl Fn(&GameState) -> bool, + ) -> Option<(usize, GameState)> { + let mut state = dump_state(gz); + for beat in 0..max_beats { + if pred(&state) { + return Some((beat, state)); + } + if dump_drive_one_beat(&mut state).is_err() { + return None; + } + } + None + } + + /// The construction requirement shared by every row that needs a REAL certified window + /// carrying a non-empty observed-frozen prefix: a usable ring AND a newest candidate pair + /// (`span == 1`, the shape §3 D2's walk reaches first) whose common prefix is + /// index-stable. + fn has_frozen_window(state: &GameState) -> bool { + if state.loop_detect_ring.len() < 2 { + return false; + } + let live: Vec<&GameState> = state.loop_detect_ring.iter().map(|f| &f.live).collect(); + frozen_lower_bound(&live[live.len() - 2..], state) > 0 + } + fn test_trigger_ref(state: &GameState, object_id: ObjectId) -> TriggerDefinitionRef { let object = &state.objects[&object_id]; TriggerDefinitionRef { @@ -13379,6 +13429,576 @@ mod tests { ); } + /// R21 (b) + (b-unproven) — THE EXEMPTION NARROWS CONJUNCT (6)'s POPULATION BY EXACTLY + /// THE FROZEN SET, AND "NO PROOF" NARROWS IT BY NOTHING. + /// + /// CR 732.2a + CR 608.1. Both TRACKED dumps, driven through `apply()` to the first beat + /// carrying a real certified window with a non-empty observed-frozen prefix. + /// + /// ⚠ THE PLAN'S FIGURES FOR THIS ROW ARE HEAD-ERA AND ARE RE-MEASURED HERE, NOT COPIED. + /// It expects *"`conjunct6_asks()` = 2–4, `conjunct6_frozen_skips()` = 152, their sum = + /// `current.stack.len()` = 154–156"*. Measured on the driven tree (`dellian` beat 14, + /// `ring=2 stack=154 announced=2 frozen=152`): `asks=4`, `skips=152`, **sum = 156**, and + /// `156 = announced + stack`, NOT `stack` — post-U3 the predicate's domain is + /// `touch.announced ∪ (stack \ frozen)`, so the announced pairs are asks the HEAD-era + /// figure could not include. The SUM IDENTITY is asserted in the corrected form; it is + /// what fails if a future edit exempts an entry without counting it, which a bare + /// `asks == 2..4` would not see. (`dina` beat 10: `stack=8 announced=3 frozen=5`, + /// `asks=6 skips=5`, sum `11 = 3 + 8`.) + /// + /// (b-unproven): the shipped meaning of NO PROOF is `touch == None`, and it must exempt + /// NOTHING — `skips == 0` on both dumps, and where the sweep completes, the ask count is + /// the UNCONDITIONED `current.stack`. Without this arm the exemption could be made + /// unconditional and nothing would fail. + /// + /// REVERT-PROBE: delete the `frozen_ids` skip from `stack_choices_are_all_specified`'s + /// current-stack loop ⇒ `skips` drops to 0 while `frozen_ids` stays non-empty ⇒ the + /// `skips == frozen_ids.len()` arm FLIPS on both dumps. + #[test] + fn r21_b_the_exemption_narrows_conjunct_six_by_exactly_the_frozen_set() { + // Set by whichever dump's UNPROVEN sweep runs to completion, so the population claim + // below is asserted against a COMPLETE count and never against a truncated one. + let mut unproven_population_witness: Option<(&str, usize, usize)> = None; + + for (name, gz) in TRACKED_DUMPS { + let (beat, board) = drive_dump_until(gz, 80, has_frozen_window).unwrap_or_else(|| { + panic!( + "REACH-GUARD [{name}]: no driven beat carried a ring >= 2 frames AND a \ + window with a non-empty observed-frozen prefix; every arm below would be \ + vacuous on such a beat" + ) + }); + let live: Vec<&GameState> = board.loop_detect_ring.iter().map(|f| &f.live).collect(); + let window = &live[live.len() - 2..]; + let proposer = board.active_player; + let cover = certified_period_touch(window, &board, PeriodCertification::BoardCovered); + + // ── reach-guards: neither half of the domain may be empty ──────────────────── + assert!( + !cover.frozen_ids.is_empty(), + "[{name}] beat {beat}: the exemption must have something to remove" + ); + assert!( + !cover.announced.is_empty(), + "[{name}] beat {beat}: the announced half must be non-empty, else the sum \ + identity below degenerates into a statement about `current.stack` alone" + ); + assert!( + cover.frozen_ids.len() < board.stack.len(), + "[{name}] beat {beat}: a fully-frozen stack would make `asks` zero and the \ + narrowing unobservable; frozen {} of {}", + cover.frozen_ids.len(), + board.stack.len() + ); + + let measure = |touch: Option<&PeriodTouch<'_>>| { + let mut v = PeriodVerdicts::for_period(&live, &board, proposer); + let r = stack_choices_are_all_specified(&board, proposer, &[], touch, &mut v); + ( + r, + v.conjunct6_asks() as usize, + v.conjunct6_frozen_skips() as usize, + v.spent(), + v.denied(), + ) + }; + + // ── (b) the exempting certificate ──────────────────────────────────────────── + let (r_cov, asks_cov, skips_cov, spent_cov, denied_cov) = measure(Some(&cover)); + assert!( + r_cov, + "[{name}] beat {beat}: the exempted sweep must RUN TO COMPLETION, else every \ + count below is a truncation rather than a population. asks={asks_cov} \ + skips={skips_cov} spent={spent_cov} denied={denied_cov}" + ); + assert_eq!( + skips_cov, + cover.frozen_ids.len(), + "[{name}] beat {beat}: conjunct (6) must skip EXACTLY the proven-frozen ids — \ + no more (an over-skip is the fail-open direction) and no fewer" + ); + assert_eq!( + asks_cov + skips_cov, + cover.announced.len() + board.stack.len(), + "[{name}] beat {beat}: THE SUM IDENTITY. Every member of the derived domain \ + `announced ∪ current.stack` is either ASKED or COUNTED as exempt; an entry \ + exempted without being counted would land here. asks={asks_cov} \ + skips={skips_cov} announced={} stack={}", + cover.announced.len(), + board.stack.len() + ); + + // ── (b-unproven) NO PROOF exempts NOTHING ──────────────────────────────────── + let (r_none, asks_none, skips_none, spent_none, denied_none) = measure(None); + assert_eq!( + skips_none, 0, + "[{name}] beat {beat}: (b-unproven) a caller that proved no period gets \ + byte-identical pre-change behaviour — the subtraction is not merely smaller, \ + it is WITHDRAWN. asks={asks_none} spent={spent_none} denied={denied_none}" + ); + if r_none { + unproven_population_witness = Some((name, asks_none, board.stack.len())); + } + assert!( + skips_cov > 0, + "[{name}] beat {beat}: the two arms must actually DIFFER on this board" + ); + } + + let (name, asks_none, stack_len) = unproven_population_witness.expect( + "REACH-GUARD: neither dump's UNPROVEN sweep ran to completion, so the population \ + claim below would be asserted against a budget-truncated count. The row FAILS \ + rather than silently weakening to `skips == 0`", + ); + assert_eq!( + asks_none, stack_len, + "[{name}] (b-unproven) POPULATION: with no period proof the resolution gate scans \ + the UNCONDITIONED `current.stack`, element for element" + ); + } + + /// R21 (b-placement-S) — THE FROZEN SKIP IS READ AT EXACTLY ONE SITE, AND THAT SITE IS + /// BELOW ITEM (6)'s LOOP HEAD. + /// + /// CR 732.2a. §3 D2 step 3's replacement argument for the exemption is an ITEM-ORDERING + /// argument: items (2)/(4)/(5) are what establish the premises the skip consumes, and each + /// of them `return false`s strictly before it. Its sole precondition is that the skip lives + /// in item (6) and nowhere earlier — a source-level fact, asserted here rather than argued. + /// + /// This arm covers item (5) as well, and better than a scan count would: item (5) is inside + /// the extent, so a skip placed there raises the count to 2. + /// + /// COMMENT LINES ARE EXCLUDED, per R8's own ruling: a comment reads nothing, and counting + /// one would make the tripwire fire on prose. (The extent carries exactly one such line — + /// item (4)'s "`frozen_ids` is deliberately not read here".) + /// + /// REVERT-PROBE: add a `frozen_ids.contains(&e.id)` skip to item (4)'s closure ⇒ the read + /// count goes 1 → 2 ⇒ FLIPS. + #[test] + fn r21_b_placement_s_the_frozen_skip_is_read_once_and_only_below_item_six() { + let src = include_str!("resource.rs"); + let lines: Vec<&str> = src.lines().collect(); + + // Symbol-anchored extent, the §6 R8 self-census discipline: column-0 signature line + // to the first column-0 `}`. + let extent = |signature: &str| -> (usize, usize) { + let head = lines + .iter() + .position(|l| l.starts_with(signature)) + .unwrap_or_else(|| panic!("extractor found no column-0 `{signature}`")); + let end = lines[head..] + .iter() + .position(|l| *l == "}") + .map(|i| head + i) + .unwrap_or_else(|| panic!("`{signature}` has no column-0 closing brace")); + (head, end) + }; + // Needles ASSEMBLED at runtime so this test's own source cannot be counted by its own + // instrument (R13's hardening, applied here by construction). + let frozen_token = format!("frozen{}ids", '_'); + let scan_token = format!("note{}conjunct4{}scan", '_', '_'); + + let (head, end) = extent("pub(crate) fn loop_states_cover_modulo_growth_scoped"); + assert!( + end - head > 100, + "the extractor must return the whole predicate, not a truncated span; got \ + {head}-{end}" + ); + let code: Vec<(usize, &str)> = (head..=end) + .map(|i| (i, lines[i])) + .filter(|(_, l)| !l.trim_start().starts_with("//")) + .collect(); + + let item6_head = code + .iter() + .find(|(_, l)| l.contains("for entry in ¤t.stack")) + .map(|(i, _)| *i) + .expect("item (6)'s loop head must be inside the extent"); + let reads: Vec = code + .iter() + .filter(|(_, l)| l.contains(&frozen_token)) + .map(|(i, _)| *i) + .collect(); + + assert_eq!( + reads.len(), + 1, + "R21(b-placement-S): the frozen subtraction must be read at EXACTLY ONE site in \ + {head}-{end}; a second read is a premise consumed before it is proved. Found at \ + lines {:?} (1-based)", + reads.iter().map(|i| i + 1).collect::>() + ); + assert!( + reads[0] > item6_head, + "R21(b-placement-S): the one read (line {}) must sit BELOW item (6)'s loop head \ + (line {}) — items (2)/(4)/(5) establish the premises it consumes and each \ + returns strictly above it", + reads[0] + 1, + item6_head + 1 + ); + + // POSITIVE CONTROL AGAINST A DEAD GREP, same extractor and same filter: a token known + // to be present in the SAME extent must be found, and one known to be absent must not. + // One instrument, two values, one input. + assert_eq!( + code.iter().filter(|(_, l)| l.contains(&scan_token)).count(), + 1, + "the instrument must be able to find a token that IS there — item (4)'s scan \ + notifier lives inside {head}-{end}" + ); + assert_eq!( + code.iter() + .filter(|(_, l)| l.contains("ring_delta_signature")) + .count(), + 0, + "…and must not find one that is not" + ); + } + + /// R21 (b-placement-B) — THE BEHAVIOURAL HALF, ON THE REAL DELLIAN WINDOW: ITEM (4) SCANS + /// THE UNEXEMPTED STACK WHILE CONJUNCT (6) SKIPS IT. + /// + /// CR 732.2a. The matched pair is on ONE board and ONE touch, one predicate apart, so the + /// difference is attributable to the placement and to nothing else. + /// + /// ⚠ THE PLAN'S STATED PAIR IS FALSIFIED BY MEASUREMENT AND IS RE-KEYED. It asks for + /// *"the mutated board is REFUSED … the unmutated board still OFFERS (B-pos, row D1's + /// beat)"*. Measured on the driven tree, the unmutated dellian beat-14 board does NOT + /// offer — the mint returns `NoCertification` (`spent=26 scans=36 cert=None`), because + /// item (4) already trips on a projected-resource reader at stack index 35 and basis B's + /// `ring_delta_signature` finds no signature at `ring=2`. A pair whose two arms both + /// refuse discriminates nothing. And no mutation is needed to make the point: the entry + /// item (4) trips on IS ITSELF a frozen one, so the unmutated board already witnesses + /// that item (4) does not consult the exemption. + /// + /// REVERT-PROBE: add a `frozen_ids` skip to item (4)'s closure ⇒ the scan can no longer + /// reach index 35 and `conjunct4_scans` collapses to at most the non-exempt population + /// (2 on this board) ⇒ FLIPS. + #[test] + fn r21_b_placement_b_item_four_scans_frozen_entries_that_conjunct_six_skips() { + let (beat, board) = drive_dump_until(TRACKED_DUMPS[1].1, 80, has_frozen_window) + .expect("REACH-GUARD: the dellian drive must reach a window with a frozen prefix"); + let live: Vec<&GameState> = board.loop_detect_ring.iter().map(|f| &f.live).collect(); + let window = &live[live.len() - 2..]; + let prior = window[0]; + let proposer = board.active_player; + let cover = certified_period_touch(window, &board, PeriodCertification::BoardCovered); + let non_exempt = board.stack.len() - cover.frozen_ids.len(); + assert!( + cover.frozen_ids.len() > non_exempt, + "REACH-GUARD beat {beat}: the frozen prefix must DOMINATE the stack, else \ + `scans > non_exempt` is satisfiable without ever touching a frozen entry; \ + frozen {} non-exempt {non_exempt}", + cover.frozen_ids.len() + ); + + // ── ITEM (4): the scan population is the UNEXEMPTED current stack ──────────────── + let mut v4 = PeriodVerdicts::for_period(&live, &board, proposer); + let covered = + loop_states_cover_modulo_growth_pinned(prior, &board, proposer, &[], &cover, &mut v4); + let scans = v4.conjunct4_scans() as usize; + assert!( + scans > non_exempt, + "R21(b-placement-B) beat {beat}: item (4) scanned {scans} entries, which must \ + EXCEED the {non_exempt} non-exempt ones — a scan that consulted `frozen_ids` \ + could never get past them" + ); + assert!( + scans > 0 && scans < board.stack.len(), + "attribution: item (4)'s `.any()` must have SHORT-CIRCUITED inside the stack \ + ({scans} of {}), which is what makes it the refuser rather than a later item", + board.stack.len() + ); + assert!( + cover.frozen_ids.contains(&board.stack[scans - 1].id), + "R21(b-placement-B): the entry item (4) refused on (stack index {}) must itself \ + be PROVEN FROZEN — that is the whole content of `the skip lives in item (6) and \ + nowhere earlier`", + scans - 1 + ); + assert!( + !covered, + "attribution: with a projected-resource reader inside the scanned population the \ + cover disjunct must fail; a `true` here would mean the scan found nothing and \ + the index assertion above was about the wrong entry" + ); + assert_eq!( + v4.conjunct6_frozen_skips(), + 0, + "the cover predicate returned at item (4), so item (6) never ran and can have \ + taken no exemption — the two counters below come from the OTHER arm" + ); + + // ── MATCHED PAIR: the SAME touch, at the gate the skip actually lives in ───────── + let mut v6 = PeriodVerdicts::for_period(&live, &board, proposer); + let specified = + stack_choices_are_all_specified(&board, proposer, &[], Some(&cover), &mut v6); + assert!( + specified, + "REACH-GUARD: the resolution gate must run to completion under the exempting \ + certificate, else its skip count is a truncation" + ); + assert_eq!( + v6.conjunct6_frozen_skips() as usize, + cover.frozen_ids.len(), + "R21(b-placement-B) matched pair: the SAME {} proven-frozen ids item (4) scanned \ + are the ones the resolution gate exempts", + cover.frozen_ids.len() + ); + } + + /// R17 — ID FRESHNESS ON THE DRIVEN DUMPS, AND `normalize_for_loop` PRESERVES EVERY + /// `StackEntry.id`. + /// + /// CR 608.1 + CR 104.4b. The frozen-prefix exemption is the ONE place 5d makes the + /// resolution gate strictly NARROWER than HEAD, and its soundness rests on a fixture that + /// is structurally unconstructible: *a window whose prefix is identity-stable across every + /// sampled frame while an exempted entry DOES announce or resolve in the driven period*. + /// Both disjuncts die on one fact — an entry that RESOLVED inside the window has RETIRED + /// its `StackEntry.id` (ids come from the monotone `next_object_id`), and an entry that + /// ANNOUNCED inside the window was absent from the oldest window frame, which the + /// exemption requires presence in. The second is definitional; the first is the invariant + /// this row asserts, since a fixture cannot. + /// + /// ARM 3 is the cross-frame comparison's unstated dependency, stated: `certified_period_touch` + /// compares `StackEntry.id` across frames, and `normalize_for_loop`'s products still feed + /// `loop_states_equal` / `loop_states_cover_modulo_growth*` (CR 104.4b equality), so an id + /// rewrite inside a function whose stated job is zeroing volatile monotone fields is + /// exactly the plausible future regression. + /// + /// REVERT-PROBE (arm 3, EXECUTED IN-TEST as an instrument-liveness control): zero one id in + /// a constructed normalized clone ⇒ the comparison must report a mismatch. REVERT-PROBE + /// (arms 1/2): inject a synthetic re-push of a retired id into the observed sequence ⇒ the + /// revival assertion FLIPS. + /// + /// ⚠ SCOPE: "both dumps" is the two TRACKED dumps. F4 is untracked until §5 U5. + #[test] + fn r17_a_retired_stack_entry_id_never_returns_and_normalization_preserves_it() { + use std::collections::HashSet; + + for (name, gz) in TRACKED_DUMPS { + let mut state = dump_state(gz); + let mut retired: HashSet = HashSet::new(); + let mut prev: HashSet = HashSet::new(); + let mut announcements = 0usize; + let mut resolutions = 0usize; + let mut revivals: Vec<(usize, ObjectId)> = Vec::new(); + let mut normalization_checks = 0usize; + let mut beats = 0usize; + + for beat in 0..40usize { + beats = beat; + let cur: HashSet = state.stack.iter().map(|e| e.id).collect(); + for id in cur.difference(&prev) { + announcements += 1; + if retired.contains(id) { + revivals.push((beat, *id)); + } + } + for id in prev.difference(&cur) { + resolutions += 1; + retired.insert(*id); + } + prev = cur; + + // ── ARM 3, on every beat carrying a stack ──────────────────────────────── + if !state.stack.is_empty() { + let ids = + |s: &GameState| -> Vec { s.stack.iter().map(|e| e.id).collect() }; + let before = ids(&state); + let normalized = state.normalize_for_loop(); + assert_eq!( + ids(&normalized), + before, + "[{name}] beat {beat}: ARM 3 — `normalize_for_loop` zeroes \ + `next_object_id` and clears trigger identity; rewriting a \ + `StackEntry.id` would break both `certified_period_touch`'s \ + cross-frame comparison and CR 104.4b equality" + ); + // INSTRUMENT-LIVENESS CONTROL: the comparison must be able to SEE a + // rewrite. Without it, `ids(..) == before` proves nothing about the + // detector, only about this board. + let mut rewritten = normalized; + rewritten.stack[0].id = ObjectId(u64::MAX); + assert_ne!( + ids(&rewritten), + before, + "[{name}] beat {beat}: the arm-3 comparison must FLIP on a rewritten id" + ); + normalization_checks += 1; + } + + if announcements >= 3 && resolutions >= 3 && normalization_checks >= 3 { + break; + } + if dump_drive_one_beat(&mut state).is_err() { + break; + } + } + + // ── PAIRED POSITIVE REACH-GUARD: the population is non-empty in BOTH directions + assert!( + announcements >= 3 && resolutions >= 3, + "[{name}] REACH-GUARD: the invariant must be checked over a population that \ + really announces AND really resolves, else it passes over nothing. \ + {announcements} announcements / {resolutions} resolutions in {beats} beats" + ); + assert!( + normalization_checks >= 3, + "[{name}] REACH-GUARD: arm 3 must have run against a NON-EMPTY stack; \ + {normalization_checks} checks" + ); + assert!( + revivals.is_empty(), + "[{name}] ARMS 1/2 — CR 608.1: an id that left the stack must never reappear \ + on it. `StackEntry.id` is drawn from the monotone `next_object_id`, whose \ + only two plain (non-`+= 1`) production assignments write THROWAWAY CLONES \ + (`effects/prepare.rs`'s simulated clone and `normalize_for_loop`'s comparand). \ + Revived: {revivals:?}" + ); + } + } + + /// R27 (a2) — THE SEAM: EVERY BOARD `certified_period_touch` HANDS THE CLASSIFIER IS AN + /// UN-NORMALIZED EVALUATION BOARD. + /// + /// CR 732.2a + CR 104.4b. Announcement and resolution are evaluated against the frame that + /// CARRIES the pair; a `normalize_for_loop` product zeroes `next_object_id`, so a + /// resolution evaluated against one allocates `ObjectId(0)` over a live object. The window + /// carrier is therefore the sample's `live` half, never its `normalized` half. + /// + /// The matched pair is the two halves of the SAME ring, one argument apart — the + /// `.normalized` arm is rounds 13–33's carrier, executed here as an instrument-liveness + /// control, so the `!= 0` assertion cannot be true for want of a board that could fail it. + /// + /// ⚠ WHAT THIS ARM DOES NOT COVER: the mint's own carrier CHOICE (`ring_live` in + /// `game::engine::bounded_cycle_offer`) is pinned structurally by + /// `game::engine`'s `the_period_touch_window_is_carried_by_the_live_half`, because a test + /// that builds its own window cannot flip on an edit to the mint's. + #[test] + fn r27_a2_every_announced_pair_carries_an_unnormalized_evaluation_board() { + for (name, gz) in TRACKED_DUMPS { + let (beat, board) = drive_dump_until(gz, 80, has_frozen_window).unwrap_or_else(|| { + panic!("REACH-GUARD [{name}]: no driven beat carried a usable window") + }); + assert_ne!( + board.next_object_id, 0, + "[{name}] beat {beat}: the LIVE board's allocator cursor must be non-zero, \ + else the axis this row is keyed to cannot discriminate" + ); + + let live: Vec<&GameState> = board.loop_detect_ring.iter().map(|f| &f.live).collect(); + let norm: Vec<&GameState> = board + .loop_detect_ring + .iter() + .map(|f| &f.normalized) + .collect(); + let touch = certified_period_touch( + &live[live.len() - 2..], + &board, + PeriodCertification::BoardCovered, + ); + assert!( + !touch.announced.is_empty(), + "[{name}] beat {beat}: REACH-GUARD — the announced half must be non-empty, \ + else the universal below quantifies over nothing" + ); + assert!( + touch + .announced + .iter() + .all(|(frame, _)| frame.next_object_id != 0), + "[{name}] beat {beat}: (a2) every carrying frame must be an EVALUATION board. \ + {} of {} announced pairs carry a zeroed allocator cursor", + touch + .announced + .iter() + .filter(|(f, _)| f.next_object_id == 0) + .count(), + touch.announced.len() + ); + + // ── INSTRUMENT-LIVENESS CONTROL: rounds 13–33's carrier, one argument apart ── + let control = certified_period_touch( + &norm[norm.len() - 2..], + &board, + PeriodCertification::BoardCovered, + ); + assert_eq!( + control.announced.len(), + touch.announced.len(), + "[{name}] the control must observe the SAME announcements — normalization \ + preserves every `StackEntry.id` (R17 arm 3), so only the CARRIER differs" + ); + assert!( + control + .announced + .iter() + .filter(|(_, e)| board.stack.iter().all(|s| s.id != e.id)) + .all(|(frame, _)| frame.next_object_id == 0), + "[{name}] the control arm must really carry ZEROED boards for the pairs whose \ + carrying frame is a RING frame; if it did not, the (a2) assertion above \ + would be true of any board and would prove nothing" + ); + } + } + + /// R16 (ii-b) — THE MAX SPEND ACROSS MINTABLE BEATS SATURATES THE CAP, AND IT DOES SO + /// AWAY FROM THE BEAT THE CORPUS OFFERS ON. + /// + /// CR 732.2a. (ii-a)'s companion, and the reason the two are SPLIT: exhaustion at a + /// non-offering beat is a fail-closed refusal on a beat that was refusing anyway — the + /// budget's stall-bounding job — while exhaustion at an OFFERING beat is a starved + /// acceptance and a defect. This arm records the first half on a real driven board. + /// + /// MEASURED, not predicted: at dellian beat 14 (`ring=2 stack=154 frozen=152`) the mint + /// spends the FULL cap and refuses `NoCertification`; the corpus's one offering beat + /// (dina, integration row `r16_the_offering_beats_probe_demand_is_exactly_measured`) + /// spends 13 and is NOT denied. Same seam, same cap, opposite sides of the budget. + /// + /// REVERT-PROBE: raise `PROBE_BUDGET` above dellian's unexempted demand (measured 96–107 + /// at these beats) ⇒ `denied` goes false ⇒ FLIPS. Lowering it cannot flip this arm, which + /// is exactly why the offering-beat row is a separate one. + #[test] + fn r16_ii_b_a_non_offering_mintable_beat_saturates_the_probe_budget() { + use crate::game::engine::{try_offer_bounded_cycle_shortcut_metered, ProbeCap}; + use crate::types::game_state::WaitingFor; + + let (beat, board) = drive_dump_until(TRACKED_DUMPS[1].1, 80, has_frozen_window) + .expect("REACH-GUARD: the dellian drive must reach a mintable beat"); + let proposer = board.active_player; + let mut at_priority = board.clone(); + at_priority.waiting_for = WaitingFor::Priority { player: proposer }; + assert!( + at_priority.last_loop_action_sequence.is_empty() + && at_priority.loop_detect_ring.len() >= 2, + "REACH-GUARD beat {beat}: steps (1)/(1b)/(2)/(2b) must all pass, else the mint \ + refuses above the classifier and spends nothing for a reason unrelated to cost" + ); + assert!( + at_priority.stack.len() > PROBE_BUDGET as usize, + "REACH-GUARD beat {beat}: the beat must carry more entries than the cap can pay \ + for, else saturation is not reachable at all; stack {} cap {PROBE_BUDGET}", + at_priority.stack.len() + ); + + let (outcome, meter) = + try_offer_bounded_cycle_shortcut_metered(&at_priority, false, ProbeCap::Shipped); + assert!( + outcome.is_err(), + "R16(ii-b): this beat must NOT offer — the whole point of the split is that \ + saturation here is a refusal on a beat that was refusing anyway. Got {outcome:?}" + ); + assert_eq!( + (meter.spent, meter.denied), + (PROBE_BUDGET, true), + "R16(ii-b) beat {beat}: the max observable spend at the shipped cap IS the cap, \ + and the exhaustion is LATCHED so it can be attributed rather than inferred. \ + meter {meter:?}, stack {}", + at_priority.stack.len() + ); + } + // ─────────────────────────────────────────────────────────────────────────────────── // §6 U3 ROWS — R14 / R19 / R29 / R31(completeness) / R32 // ─────────────────────────────────────────────────────────────────────────────────── diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index 3b45e079d3..a4851ddd69 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -15354,4 +15354,207 @@ mod bounded_offer_conjunct_tests { per_cycle.frames_per_period ); } + + // ─────────────────────────────────────────────────────────────────────────────────── + // The two CARRIER rows. Both are about WHICH object identifies a retained beat, an axis + // that has exactly one behavioural surface (`PeriodVerdicts::frame_ix`) and one source + // surface (this file), so each ships with one arm on each. + // ─────────────────────────────────────────────────────────────────────────────────── + + /// Symbol-anchored extent of a column-0 `fn` in THIS file, as `(head, end)` line indices — + /// the §6 R8 self-census extractor: signature line to the first column-0 `}`. + #[cfg(test)] + fn engine_fn_extent(lines: &[&str], signature: &str) -> (usize, usize) { + let head = lines + .iter() + .position(|l| l.starts_with(signature)) + .unwrap_or_else(|| panic!("extractor found no column-0 `{signature}`")); + let end = lines[head..] + .iter() + .position(|l| *l == "}") + .map(|i| head + i) + .unwrap_or_else(|| panic!("`{signature}` has no column-0 closing brace")); + assert!( + end - head > 5, + "`{signature}` extent {head}-{end} is degenerate — the extractor is not keyed" + ); + (head, end) + } + + /// Code lines (comments excluded, per R8's ruling: a comment reads nothing) of an extent + /// that contain `needle`, as absolute line indices. + #[cfg(test)] + fn engine_code_hits(lines: &[&str], extent: (usize, usize), needle: &str) -> Vec { + (extent.0..=extent.1) + .filter(|i| !lines[*i].trim_start().starts_with("//")) + .filter(|i| lines[*i].contains(needle)) + .collect() + } + + /// `Arc::as_ptr` BEAT IDENTITY IS THE SAMPLE, NOT ONE OF ITS HALVES — the U0 ruling that + /// had no falsifier until `FrameIx` existed. + /// + /// CR 732.2a. U0 split each retained ring element into a CR 104.4b comparand + /// (`normalized`) and a CR 732.2a evaluable (`live`), and left `drive_one_shortcut_cycle`'s + /// ring-advance detector on `Arc::as_ptr` — the SAMPLE's allocation — with the ruling that + /// it must never be re-based onto a field address. U0 could not assert that: nothing at + /// that step distinguished the two halves as identities. U3's verdict door does. + /// + /// ARM 1, BEHAVIOURAL — the door's identity domain is the LIVE half and ONLY it. + /// [`crate::analysis::resource::PeriodVerdicts::frame_ix`] resolves by `std::ptr::eq` + /// against the very table `verdict` indexes, so a beat identified by the `normalized` + /// half is a DIFFERENT identity from the one every period-touch consumer keys on. The two + /// field addresses are asserted distinct first, which is what makes the choice load-bearing + /// rather than a distinction without a difference. + /// + /// ARM 2, STRUCTURAL — the detector still reads the sample. Two sites, both + /// `loop_detect_ring.back().map(std::sync::Arc::as_ptr)`, and NO raw-pointer field + /// address anywhere in the extent. + /// + /// REVERT-PROBE: re-base either site to `.map(|s| &s.normalized as *const _)` ⇒ arm 2's + /// site count goes 2 → 1 AND its `as *const` count goes 0 → 1 ⇒ FLIPS. (Arm 1 is + /// deliberately NOT reachable by that edit — it pins the property the edit would violate, + /// so the two arms partition "is the rule still true" from "is the code still obeying it".) + #[test] + fn arc_as_ptr_beat_identity_is_the_sample_not_one_of_its_halves() { + use crate::analysis::resource::PeriodVerdicts; + + // ── ARM 1: behavioural ─────────────────────────────────────────────────────────── + let state = ring_state(3, |frame, i| { + frame.turn_number += i as u32; + }); + assert_eq!( + state.loop_detect_ring.len(), + 3, + "REACH-GUARD: the ring must carry samples, else the universals below are vacuous" + ); + // Built exactly as `bounded_cycle_offer` builds its `ring_live` — the CR 732.2a + // evaluable half. The binding is named differently ON PURPOSE: a verbatim copy of the + // production line makes the carrier revert-probe (a whole-line replace of that line) + // match twice and silently no-op, which is how the probe for the sibling row below + // failed to apply on its first run. + let evaluable: Vec<&GameState> = state.loop_detect_ring.iter().map(|f| &f.live).collect(); + let verdicts = + PeriodVerdicts::for_period_with_cap(&evaluable, &state, P0, 0, super::CapAuthority(())); + for (i, sample) in state.loop_detect_ring.iter().enumerate() { + assert!( + !std::ptr::eq(&sample.live, &sample.normalized), + "sample {i}: the two halves must be DISTINCT addresses, else `beat identity \ + is the sample, not a half` is a distinction without a difference" + ); + assert!( + verdicts.frame_ix(&sample.live).is_some(), + "sample {i}: the verdict door's frame table IS the live half — this is the \ + identity every period-touch consumer keys on" + ); + assert!( + verdicts.frame_ix(&sample.normalized).is_none(), + "sample {i}: the comparand half is NOT in the door's domain. A beat identity \ + based on `&s.normalized` would therefore name an object no `FrameIx` can \ + ever resolve — that is the concrete harm the U0 ruling forbids" + ); + } + + // ── ARM 2: structural ──────────────────────────────────────────────────────────── + let src = include_str!("engine.rs"); + let lines: Vec<&str> = src.lines().collect(); + let extent = engine_fn_extent(&lines, "fn drive_one_shortcut_cycle("); + // Needles ASSEMBLED at runtime so this test's own source cannot be counted by its own + // instrument. + let sample_identity = format!("loop_detect_ring.back().map(std::sync::Arc::{}ptr)", "as_"); + let field_address = format!("as {}const", '*'); + assert_eq!( + engine_code_hits(&lines, extent, &sample_identity).len(), + 2, + "the ring-advance detector must read the SAMPLE's allocation at both its before \ + and after sites, in {}-{}", + extent.0 + 1, + extent.1 + 1 + ); + assert_eq!( + engine_code_hits(&lines, extent, &field_address).len(), + 0, + "no raw-pointer FIELD address may appear in the detector's extent — that is the \ + re-basing the U0 ruling forbids" + ); + // POSITIVE CONTROL against a dead grep, same extractor and same filter. + assert!( + !engine_code_hits(&lines, extent, "frames_this_cycle").is_empty(), + "the instrument must be able to find a token that IS there" + ); + assert!( + engine_code_hits(&lines, extent, "certified_period_touch").is_empty(), + "…and must not find one that is not" + ); + } + + /// R27 (a2), STRUCTURAL HALF — THE PERIOD-TOUCH WINDOW IS CARRIED BY THE `live` HALF. + /// + /// CR 732.2a + CR 104.4b. The behavioural half + /// (`analysis::resource::tests::r27_a2_every_announced_pair_carries_an_unnormalized_evaluation_board`) + /// builds its own window, so it cannot flip on an edit to the MINT's carrier. This arm is + /// that edit's detector: `bounded_cycle_offer` builds exactly two ring vecs — the CR 104.4b + /// comparand from `&f.normalized` and the CR 732.2a evaluable from `&f.live` — and every + /// `certified_period_touch` window inside `certified_bounded_cycle_offer` is sliced from + /// the evaluable one. + /// + /// REVERT-PROBE: point `ring_live` at `&f.normalized` (rounds 13–33's carrier) ⇒ the + /// `&f.live` count goes 1 → 0 ⇒ FLIPS. + #[test] + fn the_period_touch_window_is_carried_by_the_live_half() { + let src = include_str!("engine.rs"); + let lines: Vec<&str> = src.lines().collect(); + let mint = engine_fn_extent(&lines, "fn bounded_cycle_offer("); + let live_needle = format!("&f.{}", "live"); + let norm_needle = format!("&f.{}", "normalized"); + + let live_hits = engine_code_hits(&lines, mint, &live_needle); + let norm_hits = engine_code_hits(&lines, mint, &norm_needle); + assert_eq!( + live_hits.len(), + 1, + "exactly ONE evaluable ring vec is built, in {}-{}", + mint.0 + 1, + mint.1 + 1 + ); + assert_eq!(norm_hits.len(), 1, "…and exactly one comparand ring vec"); + assert!( + lines[live_hits[0]].contains("ring_live"), + "the evaluable half must be the one bound to `ring_live`; line {} reads `{}`", + live_hits[0] + 1, + lines[live_hits[0]].trim() + ); + + let certified = engine_fn_extent(&lines, "fn certified_bounded_cycle_offer<'a>("); + let touch_needle = format!("certified_period{}touch(", '_'); + let touch_sites = engine_code_hits(&lines, certified, &touch_needle); + assert!( + touch_sites.len() >= 2, + "REACH-GUARD: the certification step must actually call the period touch; found \ + {} sites", + touch_sites.len() + ); + for site in &touch_sites { + assert!( + lines[*site].contains("window"), + "every period-touch call must be handed a WINDOW, never a raw ring; line {} \ + reads `{}`", + site + 1, + lines[*site].trim() + ); + } + let window_bindings = engine_code_hits(&lines, certified, "let window"); + assert!( + !window_bindings.is_empty(), + "REACH-GUARD: the windows must be bound inside this extent" + ); + for binding in &window_bindings { + assert!( + lines[*binding].contains("ring_live"), + "every window is sliced from the EVALUABLE ring; line {} reads `{}`", + binding + 1, + lines[*binding].trim() + ); + } + } } diff --git a/crates/engine/tests/integration/loop_shortcut.rs b/crates/engine/tests/integration/loop_shortcut.rs index 429ebd5580..9a88f2da96 100644 --- a/crates/engine/tests/integration/loop_shortcut.rs +++ b/crates/engine/tests/integration/loop_shortcut.rs @@ -8055,6 +8055,102 @@ fn dina_offering_beat_certifies_through_basis_b_and_exempts_nothing() { ); } +/// R16 (i) + (ii-a) + (iv) — THE BUDGET DOES NOT STARVE THE CORPUS'S ACCEPTANCE BEAT, ITS +/// DEMAND THERE IS EXACTLY MEASURED, AND THE MINT DOES NOT STALL. +/// +/// CR 732.2a. Without this row the per-mint probe cap is a number nobody checked against the +/// fixture it has to serve — which is exactly how the shipped `12` came to starve this beat by +/// one charge. +/// +/// (i) the offer still fires at the shipped cap. (ii-a) the cap does NOT bind there +/// (`denied == false`) — note that `spent <= cap` is true by construction of the budget, so +/// the non-vacuous form of (ii-a) is the denial flag, not the inequality. +/// +/// THE EXACT-DEMAND PIN is what makes (ii-a) discriminating rather than a restatement. The +/// demand `D` is SEARCHED through the seam's own closed cap domain, from zero upward, so it +/// is measured on this run instead of copied from a log: every cap below `D` must REFUSE and +/// `D` itself must OFFER. A budget re-derivation that drifts the true demand fails here with +/// the new number in the message. +/// +/// (iv) THE WALL-CLOCK. The whole mint — memo construction, the D2 window work +/// (`certified_period_touch` + `bounded_cycle_pin_slots_for_window` over up to +/// `LOOP_DETECT_RING_CAP` windows) and the budgeted classification — is timed end to end. +/// ⚠ THE CEILING IS DEBUG-SCALED AND SAYS SO: the plan's ~1 s figure is a player-facing +/// RELEASE budget, and this binary is `-C opt-level=0`. The measured figure is carried in the +/// message so the release claim is derived from a number rather than asserted. +/// +/// REVERT-PROBE: lower `PROBE_BUDGET` below the measured `D` ⇒ (i) fails +/// (`dina_driven_to_bounded_offer` cannot reach an offer) ⇒ FLIPS. Round 2 measured exactly +/// that: at `12` this row and six shipped siblings go red together. +#[test] +fn r16_the_offering_beats_probe_demand_is_exactly_measured() { + use engine::game::engine::{ + try_offer_bounded_cycle_shortcut_metered, BoundedOfferRefusal, ProbeCap, + }; + + let (state, beat) = dina_driven_to_bounded_offer(); + let (proposer, _, _) = bounded_offer_parts(&state); + let replay = replay_at_priority(&state, proposer); + + // ── (i) + (iv): the shipped cap, timed ─────────────────────────────────────────────── + let started = std::time::Instant::now(); + let (shipped, meter) = + try_offer_bounded_cycle_shortcut_metered(&replay, false, ProbeCap::Shipped); + let elapsed = started.elapsed(); + assert!( + shipped.is_ok(), + "R16(i) beat {beat}: the corpus's acceptance offer must FIRE at the shipped cap. \ + Got {shipped:?}, meter {meter:?}" + ); + assert!( + !meter.denied, + "R16(ii-a) beat {beat}: the cap must not BIND at the beat that offers — `spent <= cap` \ + is true of every mint by construction, so the denial flag is the only non-vacuous \ + form of this claim. meter {meter:?}" + ); + assert!( + meter.spent > 0, + "REACH-GUARD: the mint must have CLASSIFIED something, else `!denied` is true for \ + want of anything to charge. meter {meter:?}" + ); + assert!( + elapsed < std::time::Duration::from_secs(10), + "R16(iv) beat {beat}: the whole mint took {elapsed:?}, which is past even the \ + debug-scaled stall ceiling. Measured at the time of writing: ~12 ms for this beat's \ + `ring=3 stack=10` mint in an unoptimized build. meter {meter:?}" + ); + + // ── THE EXACT-DEMAND PIN ───────────────────────────────────────────────────────────── + let demand = meter.spent; + let (at_demand, demand_meter) = + try_offer_bounded_cycle_shortcut_metered(&replay, false, ProbeCap::Lowered(demand)); + assert!( + at_demand.is_ok() && !demand_meter.denied, + "R16: a cap of exactly the measured demand ({demand}) must still OFFER — that is what \ + makes {demand} the DEMAND rather than an upper bound. Got {at_demand:?}, \ + meter {demand_meter:?}" + ); + for lowered in 0..demand { + let (starved, starved_meter) = + try_offer_bounded_cycle_shortcut_metered(&replay, false, ProbeCap::Lowered(lowered)); + assert!( + matches!(starved, Err(BoundedOfferRefusal::UnspecifiedChoiceWindow)), + "R16: every cap below the measured demand must refuse fail-CLOSED at the choice \ + gate. cap {lowered} of {demand} gave {starved:?}, meter {starved_meter:?}" + ); + assert!( + starved_meter.denied, + "R16: …and the refusal must be attributable to the BUDGET, not to an unrelated \ + conjunct. cap {lowered}, meter {starved_meter:?}" + ); + } + assert!( + demand > 1, + "REACH-GUARD: a demand of 0 or 1 would make the starvation sweep above empty or \ + trivial; measured {demand} at beat {beat}" + ); +} + /// Drive a `GameScenario`-built board until the ENGINE writes a bounded offer, declining /// nothing and injecting nothing. Returns the beat, or `None` if the cap ran out. Reads /// `state.waiting_for` — the production Path D write — never an out-of-band predicate call. From 355652fd5f51d9da4aa9ee5e358b111b444992f4 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 01:42:40 -0500 Subject: [PATCH 21/62] test(engine): retained-sample .live-reader rows close U3 (5d, R27 a3/b/c/e) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Four arms on a CONSTRUCTED board driven through the real mint, where ring frame 2 carries an entry neither frame 1 nor `current` holds — so the announced pair genuinely arrives from a retained sample and the shared carrier revert (ring_live <= .normalized) has a BEHAVIOURAL flipping site, defeating the round-7 blind-spot tripwire for (b)/(c): - (a3) retained sample's Effect::Token derivation equals the live board's; control shows the .normalized half derives a different set. Flips on P-A (clear_trigger_identity_recursive source_id scrub deleted): (940,940) vs (940,0). No mint-level flip — measured and disclosed in-code (both derivations are event_is_accounted). - (b) stored MayChoice auto-record survives the ring: no record => OFFER publishing exactly 1 MayChoice point; record seeded => UnspecifiedChoiceWindow. Flips on P-B (carrier revert): the negative OFFERS. - (c) intervening-if binds with the retained sample's trigger source; the "classifies identically to current" conjunct and a MayPrompt control on the normalized half ride the same row. Flips on P-B: the positive REFUSES. - (e) discharge reads the pair's carrying frame, not the live board — four boards (frame-only / both / neither / causeless) plus the frame_ix pointer-identity structural conjunct. Flips on P-C (resolution_events_are_discharged frame => state), both-boards arm green in the same run. R8 census tripwire fired benignly: (22,12) => (22,13) — production half unchanged, per-file multiset unchanged; the +1 is (b)'s cfg(test) read of the offer schema, adjudicated per the row's protocol in its doc and failure message. All probes restored byte-identically (sha-verified). CR gate: 12 numbers, 0 unverified. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/analysis/resource.rs | 786 ++++++++++++++++++ .../loop_shortcut_offer_writer_census.rs | 16 +- 2 files changed, 800 insertions(+), 2 deletions(-) diff --git a/crates/engine/src/analysis/resource.rs b/crates/engine/src/analysis/resource.rs index 56be66fcc8..321f3ff863 100644 --- a/crates/engine/src/analysis/resource.rs +++ b/crates/engine/src/analysis/resource.rs @@ -15114,4 +15114,790 @@ mod tests { choice that seat never described" ); } + + // ─────────────────────────────────────────────────────────────────────────────────── + // §6 R27 — THE `.live`-READER CONJUNCTS (a3) / (b) / (c) / (e) + // + // All four need what (a1)/(a2) did not: an announced pair whose CARRYING FRAME is a + // RETAINED SAMPLE rather than `current`. The shared fixture below is the only thing that + // makes them differ from the shipped `.normalized`-blind rows — and, measured, it is what + // lets (b) and (c) flip BEHAVIOURALLY on the mint's own carrier line, which round 7's + // self-built-window rows structurally could not (probe P6). + // ─────────────────────────────────────────────────────────────────────────────────── + + /// A retained ring whose NEWEST sample carries stack entries neither the older samples nor + /// the live board hold. + /// + /// CR 732.2a + CR 608.1: [`certified_period_touch`] announces an entry at the FIRST window + /// frame it appears on, so an entry seeded only into the newest retained sample is + /// announced with THAT SAMPLE as its carrying frame — the `frame != current` population + /// every `.live` reader is about, and the one a fixture assembled from `current.stack` + /// can never reach. `state.stack` is deliberately left EMPTY: with no live entry at all, + /// an arm that passed by reading the live board would have nothing to read. + /// + /// Certification is basis A's EQUALITY disjunct, and that is a construction property + /// rather than a hope: `setup` runs BEFORE any frame is snapshotted, so `ring[1]` + /// (the certifying prior at `span == 1`) and `current` agree on everything, and only + /// `ring[2]` — which the equality disjunct never compares — is widened. Both halves of + /// every sample are built exactly as `record_loop_detect_sample` builds them, so the + /// fixture cannot diverge from production's construction; in particular the `.normalized` + /// half really is `normalize_for_loop`d, which is what the instrument-liveness controls + /// below depend on. + /// + /// The per-frame life step is `game::engine`'s `drain_ring` orientation — frame `i` sits + /// `FRAMES - i` life above the live board — so the certified period moves a real CR 704.5a + /// resource and step (7) publishes a bound instead of refusing at `NoNarrowedLegalCount`. + fn ring_announcing_on_its_newest_sample( + setup: impl Fn(&mut GameState), + newest_sample: impl Fn(&mut GameState), + ) -> GameState { + use crate::game::scenario::GameScenario; + use crate::types::game_state::{LoopDetectionMode, WaitingFor}; + use crate::types::LoopDetectSample; + + const FRAMES: usize = 3; + let mut scenario = GameScenario::new_n_player(2, 7); + // Stocked libraries are load-bearing for the arms whose announced entry DRAWS: an + // empty library derives no `ZoneChange`, which moves the classification for a reason + // that has nothing to do with the carrier axis. + let names: Vec = (0..40).map(|i| format!("Filler {i}")).collect(); + let refs: Vec<&str> = names.iter().map(String::as_str).collect(); + scenario.with_library_top(PlayerId(0), &refs); + scenario.with_library_top(PlayerId(1), &refs); + let mut state = scenario.build().state().clone(); + state.loop_detection = LoopDetectionMode::Interactive; + state.waiting_for = WaitingFor::Priority { + player: PlayerId(0), + }; + state.active_player = PlayerId(0); + state.last_loop_action_sequence.clear(); + setup(&mut state); + for i in 0..FRAMES { + let mut frame = state.clone(); + frame + .players + .iter_mut() + .find(|p| p.id == PlayerId(1)) + .expect("the two-seat scenario always has P1") + .life += (FRAMES - i) as i32; + if i + 1 == FRAMES { + newest_sample(&mut frame); + } + state + .loop_detect_ring + .push_back(std::sync::Arc::new(LoopDetectSample { + normalized: frame.normalize_for_loop(), + live: frame.loop_detect_live_sample(), + })); + } + state + } + + /// The battlefield source every announced entry names. `entered_battlefield_turn` is set + /// to the live turn because R27 (c)'s intervening-if reads exactly that through its + /// `TriggerSourceContext` (CR 603.4); the other three arms are indifferent to it. + fn announcing_ring_source(state: &mut GameState, id: u64) -> ObjectId { + let oid = ObjectId(id); + let mut object = GameObject::new( + oid, + CardId(77), + PlayerId(0), + "Retained Sample Source".to_string(), + Zone::Battlefield, + ); + object.card_types.core_types = vec![CoreType::Creature]; + object.incarnation = 3; + object.entered_battlefield_turn = Some(state.turn_number); + state.objects.insert(oid, object); + state.battlefield.push_back(oid); + oid + } + + /// One proposer-controlled triggered-ability entry for the newest sample's stack. + fn announced_trigger_entry( + id: u64, + src: ObjectId, + ability: crate::types::ability::ResolvedAbility, + condition: Option, + ) -> StackEntry { + StackEntry { + id: ObjectId(id), + source_id: src, + controller: PlayerId(0), + kind: StackEntryKind::TriggeredAbility { + source_id: src, + ability: Box::new(ability), + condition, + trigger_event: None, + description: None, + source_name: String::new(), + subject_match_count: None, + die_result: None, + }, + } + } + + /// The ONE reach-guard every R27 `.live` arm runs before it asserts anything: the fixture + /// really announces from a retained sample, the live board carries no entry at all, and + /// the pair the production enumerator hands its consumers is that sample's — not + /// `current`'s. Returns the announced pair's carrying frame. + fn announced_from_retained_sample(state: &GameState, entry_id: u64) -> &GameState { + assert!( + state.stack.is_empty(), + "REACH-GUARD: `current.stack` must be EMPTY, else an arm could be satisfied by the \ + live board and the `.live`-reader claim would not be under test" + ); + let retained: Vec<&GameState> = state.loop_detect_ring.iter().map(|f| &f.live).collect(); + assert!( + retained.len() >= 3, + "REACH-GUARD: the walk needs `span >= 1` at `idx = len - 2`; got {} frames", + retained.len() + ); + let touch = certified_period_touch( + &retained[retained.len() - 2..], + state, + PeriodCertification::BoardEqualOnly, + ); + let (frame, entry) = *touch + .announced + .first() + .expect("REACH-GUARD: the newest sample's extra entry must ANNOUNCE in the window"); + assert_eq!( + (touch.announced.len(), entry.id), + (1, ObjectId(entry_id)), + "REACH-GUARD: exactly the constructed entry announces, so every assertion below is \ + about it and not about an incidental second pair" + ); + assert!( + !std::ptr::eq(frame, state), + "REACH-GUARD (the R27 precondition, executable rather than prose): the pair's \ + carrying frame must NOT be `current`. A fixture drift that collapsed the pair onto \ + the live board would leave every arm below passing for the degenerate reason" + ); + frame + } + + /// R27 (a3) — THE BEHAVIOUR: A RETAINED SAMPLE DERIVES THE SAME EVENT SET THE LIVE BOARD + /// DOES, AND THE NORMALIZED HALF DOES NOT. + /// + /// CR 732.2a + CR 104.4b + CR 111.1. (a2) pinned that every carrying frame is an + /// un-normalized board by reading `next_object_id`; this arm pins the CONSEQUENCE — that + /// the classification a `.live` carrier produces for an `Effect::Token` announcement is + /// the classification the live board produces, event for event. + /// + /// THE INSTRUMENT-LIVENESS CONTROL IS THE ARM THAT MAKES THE EQUALITY MEAN ANYTHING, and + /// it is MEASURED rather than predicted. The plan forecast the divergence at the + /// ALLOCATOR (`create_object` handing out `ObjectId(0)` over a live object); measured, the + /// derivation diverges one field earlier and more directly — `normalize_for_loop` runs + /// `clear_trigger_identity_recursive`, which sets `ability.source_id = ObjectId(0)`, and + /// the resolver carries that straight into `TokenSpec.source_id`. So a normalized carrier + /// proposes a token whose CR 111.1 source is the null object, and the two sets differ. + /// + /// ⚠ SCOPE, stated because a reader will ask why this arm is not an offer-level one: + /// BOTH derivations are `event_is_accounted`, so the mint OFFERS on either carrier and + /// (a3) alone has NO behavioural flip at the seam. The carrier axis IS flipped + /// behaviourally, on exactly the shared revert the plan names, by + /// `r27_b_a_stored_may_auto_choice_survives_the_ring` and + /// `r27_c_an_intervening_if_binds_with_the_retained_samples_trigger_source` below, and + /// structurally by `game::engine`'s `the_period_touch_window_is_carried_by_the_live_half`. + /// This arm's own flipping site is the control's: delete + /// `ResolvedAbility::clear_trigger_identity_recursive`'s `self.source_id = ObjectId(0)` + /// ⇒ the two halves stop differing ⇒ the control FAILS. + #[test] + fn r27_a3_a_retained_sample_derives_the_live_boards_event_set() { + use crate::game::engine::{try_offer_bounded_cycle_shortcut_metered, ProbeCap}; + use crate::game::resolution_prompt::ResolutionChoiceFreedom; + use crate::types::ability::{Effect, PtValue, QuantityExpr, ResolvedAbility, TargetFilter}; + use crate::types::proposed_event::ProposedEvent; + + const SRC: ObjectId = ObjectId(940); + const ENTRY: u64 = 954; + let state = ring_announcing_on_its_newest_sample( + |s| { + announcing_ring_source(s, SRC.0); + }, + |frame| { + let ability = ResolvedAbility::new( + Effect::Token { + name: "Servo".to_string(), + power: PtValue::Fixed(1), + toughness: PtValue::Fixed(1), + types: vec!["Artifact".to_string(), "Creature".to_string()], + colors: vec![], + keywords: vec![], + tapped: false, + count: QuantityExpr::Fixed { value: 1 }, + owner: TargetFilter::Controller, + attach_to: None, + enters_attacking: false, + supertypes: vec![], + static_abilities: vec![], + enter_with_counters: vec![], + }, + vec![], + SRC, + PlayerId(0), + ); + frame + .stack + .push_back(announced_trigger_entry(ENTRY, SRC, ability, None)); + }, + ); + let frame = announced_from_retained_sample(&state, ENTRY); + let entry = frame.stack.back().expect("the announced entry").clone(); + + // ── the two derivations, each on its own budget so neither starves the other ── + let mut on_frame_budget = ProbeBudget::for_test(1_000); + let mut on_live_budget = ProbeBudget::for_test(1_000); + let from_sample = + stack_entry_resolution_choice_freedom(frame, &entry, &mut on_frame_budget); + let from_live = stack_entry_resolution_choice_freedom(&state, &entry, &mut on_live_budget); + + // ── REACH-GUARD: both sides must be non-empty `FreeUnlessReplacements`, so the + // equality below cannot be two refusals or two empties matching ── + let derived = |freedom: &ResolutionChoiceFreedom| -> Vec { + match freedom { + ResolutionChoiceFreedom::FreeUnlessReplacements(events) => events.clone(), + ResolutionChoiceFreedom::MayPrompt => panic!( + "REACH-GUARD: an `Effect::Token` announcement must classify as a derived \ + event set on BOTH boards; a refusal here means the fixture never reached \ + the derivation and the equality would be vacuous" + ), + } + }; + let sample_events = derived(&from_sample); + let live_events = derived(&from_live); + assert!( + !sample_events.is_empty() && !live_events.is_empty(), + "REACH-GUARD: `probe_resolution` classifies an EMPTY derivation `Prompted`, so a \ + non-empty set is what proves the resolution really ran" + ); + + // ── (a3): the retained sample's derivation IS the live board's ── + assert_eq!( + from_sample, from_live, + "(a3) CR 732.2a: an announcement carried by a retained sample must classify exactly \ + as the same entry classified against the live board. Sequence equality is STRICTER \ + than the set equality the row claims, which is the safe direction — both sides come \ + from one deterministic `resolve_ability_chain`" + ); + + // ── INSTRUMENT-LIVENESS CONTROL: the OTHER half of the same sample, one field apart ── + let normalized_half = &state.loop_detect_ring[state.loop_detect_ring.len() - 1].normalized; + let normalized_entry = normalized_half + .stack + .back() + .expect("normalization preserves every `StackEntry.id` (R17 arm 3)") + .clone(); + let mut control_budget = ProbeBudget::for_test(1_000); + let from_normalized = stack_entry_resolution_choice_freedom( + normalized_half, + &normalized_entry, + &mut control_budget, + ); + let token_source = |freedom: &ResolutionChoiceFreedom| -> Option { + match freedom { + ResolutionChoiceFreedom::FreeUnlessReplacements(events) => { + events.iter().find_map(|event| match event { + ProposedEvent::CreateToken { spec, .. } => Some(spec.source_id), + _ => None, + }) + } + ResolutionChoiceFreedom::MayPrompt => None, + } + }; + assert_eq!( + (token_source(&from_sample), token_source(&from_normalized)), + (Some(SRC), Some(ObjectId(0))), + "(a3) CONTROL — CR 400.7 + CR 111.1: `normalize_for_loop` runs \ + `clear_trigger_identity_recursive`, which zeroes `ability.source_id`, and the \ + resolver carries that into `TokenSpec.source_id`. The normalized half therefore \ + proposes a token whose source is the NULL object. Without this arm the equality \ + above would be true of any two boards and would prove nothing" + ); + assert_ne!( + from_sample, from_normalized, + "(a3) CONTROL: and the two halves' derivations must genuinely DIFFER, so the \ + carrier is a choice with a consequence rather than a label" + ); + + // ── the seam companion: conjunct (6) really consumed THIS pair on the real mint ── + let (outcome, meter) = + try_offer_bounded_cycle_shortcut_metered(&state, false, ProbeCap::Shipped); + assert!( + outcome.is_ok() && meter.conjunct6_asks == 1, + "(a3) the board the equality is asserted on must be one the SEAM evaluates: the \ + mint offers and asks conjunct (6) exactly once — about the announced pair, since \ + `current.stack` is empty. Got {outcome:?}, meter {meter:?}" + ); + } + + /// R27 (b) — THE ENTRY-IDENTITY AXIS: A STORED CR 603.5 AUTO-CHOICE STILL REFUSES THE MINT + /// WHEN THE PAIR ARRIVES FROM THE RING. + /// + /// CR 603.5 + CR 732.2a. R25 pinned the mint's second-authority conjunct on a board whose + /// entry sits on `current.stack`; this is its missing production twin — the same board + /// driven THROUGH the ring, so the mint is asked about a retained sample. The refusal has + /// to survive that, because the announced population is where the mint's domain actually + /// lives (`bounded_cycle_pin_slots_for_window` maps over `touch.announced`). + /// + /// MATCHED PAIR, differing ONLY in the seeded record, so no upstream conjunct can dominate: + /// without it the board OFFERS and publishes exactly one CR 603.5 `MayChoice` point; with + /// it the mint publishes nothing, the relief has no `may` to spend, and step (6) refuses + /// `UnspecifiedChoiceWindow`. + /// + /// REVERT-PROBE (the plan's shared carrier revert, and it FLIPS — measured): point + /// `game::engine::bounded_cycle_offer`'s `ring_live` at `&f.normalized` ⇒ the carrying + /// frame becomes a comparand whose `ability.source_id` is `ObjectId(0)` + /// (`clear_trigger_identity_recursive`) ⇒ the `MayTriggerAutoChoiceKey` misses ⇒ the `may` + /// slot IS minted ⇒ the negative arm OFFERS. This is the flip round 7 could not obtain: + /// a row that builds its own window is blind to the mint's carrier, a row driven through + /// the mint is not. + #[test] + fn r27_b_a_stored_may_auto_choice_survives_the_ring() { + use crate::game::engine::{ + try_offer_bounded_cycle_shortcut_metered, BoundedOfferRefusal, ProbeCap, + }; + use crate::types::ability::{ + Effect, QuantityExpr, ResolvedAbility, TargetFilter, TriggerBaseSetInstanceRef, + TriggerDefinitionOccurrenceRef, TriggerDefinitionRef, + }; + use crate::types::game_state::{AutoMayChoice, MayTriggerAutoChoiceKey, MayTriggerOrigin}; + use crate::types::identifiers::ObjectIncarnationRef; + + const SRC: ObjectId = ObjectId(940); + const ENTRY: u64 = 952; + // The production shape: `triggers.rs` mints `Definition { definition_ref }` from the + // source's own incarnation plus the printed occurrence — built here identically. + let origin = MayTriggerOrigin::Definition { + definition_ref: TriggerDefinitionRef { + source: ObjectIncarnationRef::of(SRC, 3), + occurrence: TriggerDefinitionOccurrenceRef::Printed { + base_set: TriggerBaseSetInstanceRef::INITIAL, + printed_index: 0, + }, + }, + }; + let key = |origin: MayTriggerOrigin| MayTriggerAutoChoiceKey { + player: PlayerId(0), + source_id: SRC, + origin, + }; + let announce = |origin: MayTriggerOrigin| { + move |frame: &mut GameState| { + // Shape (B): OPTIONAL, declaring no target, so the mint publishes its CR 603.5 + // gate alone and the relief's residual is the same draw with `optional` cleared. + let mut ability = ResolvedAbility::new( + Effect::Draw { + count: QuantityExpr::Fixed { value: 1 }, + target: TargetFilter::Controller, + }, + vec![], + SRC, + PlayerId(0), + ); + ability.optional = true; + ability.may_trigger_origin = Some(origin.clone()); + frame + .stack + .push_back(announced_trigger_entry(ENTRY, SRC, ability, None)); + } + }; + + // ── MATCHED POSITIVE: no stored record ⇒ the CR 603.5 gate really asks ⇒ pin spendable + let open = ring_announcing_on_its_newest_sample( + |s| { + announcing_ring_source(s, SRC.0); + }, + announce(origin.clone()), + ); + announced_from_retained_sample(&open, ENTRY); + let (open_outcome, open_meter) = + try_offer_bounded_cycle_shortcut_metered(&open, false, ProbeCap::Shipped); + let published_may_points = match &open_outcome { + Ok(crate::types::game_state::WaitingFor::LoopShortcut { schema, .. }) => schema + .points + .iter() + .filter(|p| { + matches!( + p.kind, + crate::analysis::decision_template::DecisionPointKind::MayChoice + ) + }) + .count(), + other => panic!( + "MATCHED POSITIVE: the un-seeded board must OFFER, else the negative below is \ + a dominated refusal. Got {other:?}, meter {open_meter:?}" + ), + }; + assert_eq!( + published_may_points, 1, + "CR 603.5: the announced pair publishes exactly ONE `MayChoice` point, so the \ + negative's refusal is the loss of THAT point and not of an unrelated slot" + ); + + // ── NEGATIVE: the same board with one record seeded before the frames are snapshotted + let seeded_origin = origin.clone(); + let sealed = ring_announcing_on_its_newest_sample( + move |s| { + announcing_ring_source(s, SRC.0); + s.set_may_trigger_auto_choice(key(seeded_origin.clone()), AutoMayChoice::Decline); + }, + announce(origin.clone()), + ); + let sealed_frame = announced_from_retained_sample(&sealed, ENTRY); + assert_eq!( + sealed_frame.may_trigger_auto_choice(&key(origin.clone())), + Some(AutoMayChoice::Decline), + "REACH-GUARD: the record must be readable ON THE CARRYING FRAME under the key the \ + mint builds. Seeding it only on `current` would make the negative pass for the \ + wrong reason — and would be exactly the defect this row exists to catch" + ); + let (sealed_outcome, sealed_meter) = + try_offer_bounded_cycle_shortcut_metered(&sealed, false, ProbeCap::Shipped); + assert_eq!( + sealed_outcome, + Err(BoundedOfferRefusal::UnspecifiedChoiceWindow), + "(b) CR 603.5: a stored 'don't ask again' answer is a SECOND authority on the same \ + gate, and the gate returns before setting any prompt — so a pin minted for it \ + would be silently unused. The refusal must survive the pair arriving from a \ + retained sample. meter {sealed_meter:?}" + ); + assert_eq!( + (sealed_meter.conjunct6_asks, sealed_meter.certification), + (1, Some(PeriodCertification::BoardEqualOnly)), + "(b) ATTRIBUTION: the refusal is step (6)'s on the announced pair — certification \ + matched and conjunct (6) ran exactly once — not an earlier conjunct's" + ); + } + + /// R27 (c) — THE SCOPE-BINDING AXIS: A CR 603.4 INTERVENING-IF ON A RETAINED SAMPLE BINDS + /// WITH ITS TRIGGER SOURCE. + /// + /// CR 603.4 + CR 732.2a. `bind_resolution_scope` rechecks the intervening-if as the + /// ability resolves, reading `ability.trigger_source`; `normalize_for_loop` sets that to + /// `None`. A `TriggerCondition::SourceEnteredThisTurn` is TRUE only when the context is + /// present, so classifying such an entry against a normalized carrier takes the + /// absent-context path, the recheck fails, and `stack_entry_resolution_choice_freedom` + /// returns `MayPrompt` — a mandatory entry the mint publishes no `may` for, hence a + /// refusal the live board would never make. + /// + /// THE MATCHED PAIR IS THE CONTEXT ITSELF, byte-identical otherwise, so the offer's + /// existence is attributable to `trigger_source` and to nothing else on the board. The + /// plan's "must classify identically to the same entry classified against `current`" ships + /// as its own conjunct alongside. + /// + /// REVERT-PROBE (the shared carrier revert, and it FLIPS — measured): point + /// `bounded_cycle_offer`'s `ring_live` at `&f.normalized` ⇒ the POSITIVE arm stops + /// offering and returns `UnspecifiedChoiceWindow`. + #[test] + fn r27_c_an_intervening_if_binds_with_the_retained_samples_trigger_source() { + use crate::game::engine::{ + try_offer_bounded_cycle_shortcut_metered, BoundedOfferRefusal, ProbeCap, + }; + use crate::game::resolution_prompt::ResolutionChoiceFreedom; + use crate::types::ability::{Effect, QuantityExpr, ResolvedAbility, TriggerCondition}; + + const SRC: ObjectId = ObjectId(940); + const ENTRY: u64 = 953; + let announce = |with_context: bool| { + move |frame: &mut GameState| { + // MANDATORY: an optional entry would be relieved through the CR 603.5 pin and + // the refusal below would be about the wrong gate. + let mut ability = ResolvedAbility::new( + Effect::LoseLife { + amount: QuantityExpr::Fixed { value: 1 }, + target: None, + }, + vec![], + SRC, + PlayerId(0), + ); + if with_context { + let source = frame.objects[&SRC].clone(); + ability.trigger_source = Some( + crate::game::triggers::trigger_source_context_for_latch(frame, &source), + ); + } + frame.stack.push_back(announced_trigger_entry( + ENTRY, + SRC, + ability, + Some(TriggerCondition::SourceEnteredThisTurn), + )); + } + }; + + // ── POSITIVE: the context is present, the CR 603.4 recheck passes, the mint offers ── + let bound = ring_announcing_on_its_newest_sample( + |s| { + announcing_ring_source(s, SRC.0); + }, + announce(true), + ); + let bound_frame = announced_from_retained_sample(&bound, ENTRY); + let entry = bound_frame + .stack + .back() + .expect("the announced entry") + .clone(); + + // (c)'s own claim, at the predicate: the retained sample classifies the intervening-if + // exactly as the live board would. + let mut sample_budget = ProbeBudget::for_test(1_000); + let mut live_budget = ProbeBudget::for_test(1_000); + let from_sample = + stack_entry_resolution_choice_freedom(bound_frame, &entry, &mut sample_budget); + let from_live = stack_entry_resolution_choice_freedom(&bound, &entry, &mut live_budget); + assert!( + matches!( + from_sample, + ResolutionChoiceFreedom::FreeUnlessReplacements(_) + ), + "REACH-GUARD: the recheck must PASS on the carrying frame, else the equality below \ + is two refusals agreeing. Got {from_sample:?}" + ); + assert_eq!( + from_sample, from_live, + "(c) CR 603.4: the intervening-if recheck reads `ability.trigger_source`, and a \ + retained sample carries it, so the pair classifies exactly as the live board does" + ); + + // INSTRUMENT-LIVENESS CONTROL: the same sample's NORMALIZED half, one field apart. + let normalized_half = &bound.loop_detect_ring[bound.loop_detect_ring.len() - 1].normalized; + let normalized_entry = normalized_half + .stack + .back() + .expect("normalization preserves every `StackEntry.id`") + .clone(); + let mut control_budget = ProbeBudget::for_test(1_000); + assert_eq!( + stack_entry_resolution_choice_freedom( + normalized_half, + &normalized_entry, + &mut control_budget + ), + ResolutionChoiceFreedom::MayPrompt, + "(c) CONTROL — CR 603.4 + CR 400.7: `clear_trigger_identity_recursive` sets \ + `trigger_source = None`, so `check_trigger_condition_with_source` takes the \ + absent-context path, `bind_resolution_scope` returns false and the classifier is \ + fail-closed `MayPrompt`. Without this the equality above would hold on any board" + ); + + let (bound_outcome, bound_meter) = + try_offer_bounded_cycle_shortcut_metered(&bound, false, ProbeCap::Shipped); + assert!( + bound_outcome.is_ok(), + "(c) MATCHED POSITIVE: with the context present the mint OFFERS, so the negative \ + below is attributable to the context. Got {bound_outcome:?}, {bound_meter:?}" + ); + + // ── NEGATIVE: byte-identical except that the entry carries no `TriggerSourceContext` ── + let unbound = ring_announcing_on_its_newest_sample( + |s| { + announcing_ring_source(s, SRC.0); + }, + announce(false), + ); + announced_from_retained_sample(&unbound, ENTRY); + let (unbound_outcome, unbound_meter) = + try_offer_bounded_cycle_shortcut_metered(&unbound, false, ProbeCap::Shipped); + assert_eq!( + unbound_outcome, + Err(BoundedOfferRefusal::UnspecifiedChoiceWindow), + "(c) CR 603.4: with no trigger source the recheck cannot pass, the resolution scope \ + does not bind, and the fail-closed classifier refuses — which is exactly the \ + verdict a normalized carrier would force on the POSITIVE board. meter \ + {unbound_meter:?}" + ); + } + + /// R27 (e) — THE CANDIDATE-AUTHORITY HALF IS FRAME-SENSITIVE TOO. + /// + /// CR 614.1 + CR 616.1 + CR 732.2a. (a3) pins the EVENT half of the discharge against the + /// pair's carrying frame and says nothing about the half that CONSUMES it: + /// `resolution_events_are_discharged` hands `proposed_event_prompt_cause` a board, and + /// that board runs `find_applicable_replacements` over its OWN replacement population. A + /// wrong board there checks one frame's events against another frame's candidates, and + /// (a3) stays green while it does — both its sides are event sets. + /// + /// FOUR BOARDS, byte-identical except which one carries the definition and whether that + /// definition draws a PROMPT CAUSE (CR 614.1a: a mandatory replacement's own body is + /// stashed as a continuation and drained through an arbitrary `ResolvedAbility`, which can + /// set a non-priority `waiting_for` — the cause this fixture uses. CR 616.1's ORDERING + /// cause needs two competing candidates and is a different shape): + /// * **frame only** — the constructible direction (the sample holds the permanent, the + /// live board no longer does) ⇒ conjunct (6) REFUSES. + /// * **both** ⇒ also refuses, so the arm is not passing because the def is unreachable. + /// * **neither** ⇒ certifies, the reach-guard proving the fixture reaches the discharge. + /// * **frame, but causeless** — the same permanent, a MANDATORY definition with no body, + /// which is drawn as a candidate and yields NO cause ⇒ certifies. This is the control + /// that keeps the first arm from being "an extra object on the frame refuses". + /// + /// THE DEFINITION SHAPE IS MEASURED, NOT CHOSEN. An OPTIONAL draw replacement makes + /// `probe_resolution` itself prompt (the resolution raises a choice), so the entry is + /// already `MayPrompt` at the PRIMARY classification and the discharge is never reached — + /// the refusal would be real but would key on the wrong seam. A MANDATORY definition with + /// a `runtime_execute` body classifies as a derived event set and still yields + /// `ReplacementPromptCause::MandatoryBodyContinuation`, which is the shape that reaches + /// the CR 614.1 + CR 616.1 discharge tail. + /// + /// REVERT-PROBE (the plan's own, and it FLIPS — measured): pass the live `state` instead + /// of `frame` to `resolution_events_are_discharged` in `stack_choices_are_all_specified` + /// ⇒ the frame-only definition is invisible to `find_applicable_replacements` ⇒ the pair + /// CERTIFIES and the first arm FLIPS TO FAIL, while the both-boards and neither-board arms + /// stay green — so the pair discriminates the BOARD ARGUMENT and not the fixture. + #[test] + fn r27_e_the_discharge_reads_the_pairs_carrying_frame_not_the_live_board() { + use crate::game::engine::{ + try_offer_bounded_cycle_shortcut_metered, BoundedOfferRefusal, ProbeCap, + }; + use crate::types::ability::{ + DrawReplacementScope, Effect, QuantityExpr, ReplacementDefinition, ResolvedAbility, + TargetFilter, + }; + use crate::types::replacements::ReplacementEvent; + + const SRC: ObjectId = ObjectId(940); + const DEF_SRC: ObjectId = ObjectId(941); + const ENTRY: u64 = 955; + + // CR 614.1 scopes a definition to its controller's events, so the definition sits on a + // P0-controlled permanent and replaces P0's own draw. + let install = |with_body: bool| { + move |board: &mut GameState| { + let mut definition = ReplacementDefinition::new(ReplacementEvent::Draw); + // CR 121.2: a Draw definition must declare which stage it watches; the + // pipeline debug-asserts on one that declares neither. + definition.draw_scope = Some(DrawReplacementScope::IndividualDraw); + if with_body { + definition.runtime_execute = Some(Box::new(ResolvedAbility::new( + Effect::LoseLife { + amount: QuantityExpr::Fixed { value: 1 }, + target: None, + }, + vec![], + DEF_SRC, + PlayerId(0), + ))); + } + let mut object = GameObject::new( + DEF_SRC, + CardId(78), + PlayerId(0), + "Frame-Only Watcher".to_string(), + Zone::Battlefield, + ); + object.replacement_definitions.push(definition); + board.objects.insert(DEF_SRC, object); + board.battlefield.push_back(DEF_SRC); + } + }; + let announce = |board: &mut GameState| { + let ability = ResolvedAbility::new( + Effect::Draw { + count: QuantityExpr::Fixed { value: 1 }, + target: TargetFilter::Controller, + }, + vec![], + SRC, + PlayerId(0), + ); + board + .stack + .push_back(announced_trigger_entry(ENTRY, SRC, ability, None)); + }; + let seed_source = |s: &mut GameState| { + announcing_ring_source(s, SRC.0); + }; + + let neither = ring_announcing_on_its_newest_sample(seed_source, announce); + let frame_only = ring_announcing_on_its_newest_sample(seed_source, |board| { + install(true)(board); + announce(board); + }); + let both = ring_announcing_on_its_newest_sample( + |s| { + seed_source(s); + install(true)(s); + }, + announce, + ); + let causeless = ring_announcing_on_its_newest_sample(seed_source, |board| { + install(false)(board); + announce(board); + }); + + // ── the structural conjunct: ONE board carries both halves of the discharge ── + let frame = announced_from_retained_sample(&frame_only, ENTRY); + let verdicts = PeriodVerdicts::for_period( + &frame_only + .loop_detect_ring + .iter() + .map(|f| &f.live) + .collect::>(), + &frame_only, + PlayerId(0), + ); + let carried = verdicts + .frame_ix(frame) + .expect("the carrying frame is one this container holds"); + let live_ix = verdicts + .frame_ix(&frame_only) + .expect("`current` is the container's last frame"); + assert_ne!( + carried, live_ix, + "(e) STRUCTURAL: `PeriodVerdicts::frame_ix` mints by POINTER IDENTITY, so the pair's \ + board and the live board must resolve to DIFFERENT indices. A future refactor that \ + re-derived the discharge board from `current` would collapse them here rather than \ + silently cross-check one frame's events against another frame's candidates" + ); + + // ── REACH-GUARD: without a definition anywhere the pair certifies ── + let (neither_outcome, neither_meter) = + try_offer_bounded_cycle_shortcut_metered(&neither, false, ProbeCap::Shipped); + assert!( + neither_outcome.is_ok() && neither_meter.conjunct6_asks == 1, + "(e) REACH-GUARD: the fixture must reach and PASS the CR 616.1 tail when nothing \ + competes, else the three refusals below prove nothing about the board argument. \ + Got {neither_outcome:?}, meter {neither_meter:?}" + ); + + // ── the CONTROL: the same permanent on the frame, drawing a candidate with NO cause ── + let (causeless_outcome, causeless_meter) = + try_offer_bounded_cycle_shortcut_metered(&causeless, false, ProbeCap::Shipped); + assert!( + causeless_outcome.is_ok(), + "(e) CONTROL: a MANDATORY, bodyless definition on the carrying frame is a candidate \ + with NO prompt cause at all and must still certify. This is what makes the \ + frame-only refusal attributable to the CAUSE rather than to the extra permanent. \ + Got \ + {causeless_outcome:?}, meter {causeless_meter:?}" + ); + + // ── the both-boards arm, ASSERTED FIRST so the stated revert-probe demonstrates in ONE + // run that this arm is unaffected while the frame-only arm below flips ── + let (both_outcome, both_meter) = + try_offer_bounded_cycle_shortcut_metered(&both, false, ProbeCap::Shipped); + assert_eq!( + both_outcome, + Err(BoundedOfferRefusal::UnspecifiedChoiceWindow), + "(e) MATCHED POSITIVE: with the definition on BOTH boards the refusal also holds, \ + so the frame-only arm below is keyed to WHICH board carries it and not to the \ + definition being invisible to the pipeline. meter {both_meter:?}" + ); + + // ── (e): the definition the CARRYING FRAME holds refuses, even though `current` has none + let (frame_only_outcome, frame_only_meter) = + try_offer_bounded_cycle_shortcut_metered(&frame_only, false, ProbeCap::Shipped); + assert_eq!( + frame_only_outcome, + Err(BoundedOfferRefusal::UnspecifiedChoiceWindow), + "(e) CR 614.1 + CR 616.1: the candidate authority runs over the board the events \ + were DERIVED on. A definition applicable on the pair's carrying frame and absent \ + from the live board must still refuse — handing the discharge `current` would \ + check one frame's events against another frame's candidates. meter \ + {frame_only_meter:?}" + ); + } } diff --git a/crates/engine/tests/integration/loop_shortcut_offer_writer_census.rs b/crates/engine/tests/integration/loop_shortcut_offer_writer_census.rs index b5019e742c..489d0dd1c5 100644 --- a/crates/engine/tests/integration/loop_shortcut_offer_writer_census.rs +++ b/crates/engine/tests/integration/loop_shortcut_offer_writer_census.rs @@ -180,7 +180,16 @@ fn census(needle: &str) -> Vec { } /// R8 CONJUNCT 1 — the offer-writer surface, pinned BIDIRECTIONALLY (`== 22` / -/// `== 12`, so a REMOVED site fails too) and by per-file multiset. +/// `== 13`, so a REMOVED site fails too) and by per-file multiset. +/// +/// ⚠ THE `#[cfg(test)]` HALF MOVED ONCE, 12 ⇒ 13, AND THE ADJUDICATION IS +/// RECORDED RATHER THAN THE ASSERT RELAXED. §6 R27 (b) +/// (`analysis::resource::tests::r27_b_a_stored_may_auto_choice_survives_the_ring`) +/// destructures the offer the mint RETURNED to count its published CR 603.5 +/// `MayChoice` points. That is a READ in a `#[cfg(test)]` scope — the benign +/// case this row's own failure message names — and it writes no offer. The +/// PRODUCTION half is unchanged at 22 and so is the per-file multiset below, +/// which is the half §10 ruling condition (2) is about. /// /// R8 CONJUNCT 2, same test — every production `validate_pins(` site is a /// declare-time gate paired with `predictability_gate`. @@ -209,7 +218,7 @@ fn the_loop_shortcut_offer_writer_surface_is_pinned_and_every_declare_site_valid assert_eq!( (production.len(), in_test.len()), - (22, 12), + (22, 13), "CR 732.2a OFFER-WRITER SURFACE CHANGED (not re-measured — this number is an \ INVARIANCE pin over the whole 5d U-series).\n\ The three CERTIFICATION-PATH writers are `reconcile_terminal_result` (object-growth \ @@ -222,6 +231,9 @@ fn the_loop_shortcut_offer_writer_surface_is_pinned_and_every_declare_site_valid certify without declaring or driving — §10 ruling condition (2), i.e. \ answer-legality-at-certification becomes OWED WORK and the U-series stops. A new READ \ site is the benign case; adjudicate, do not relax the assert.\n\ + THE TEST HALF HAS BEEN ADJUDICATED ONCE (12 ⇒ 13, §6 R27 (b)'s schema read in \ + `engine/src/analysis/resource.rs`); if it moves again, name the new site here too \ + rather than only moving the number.\n\ measured per-file production multiset: {multiset:?}\n\ production: {production:?}\n\ test: {in_test:?}" From 799b87a153316e0ea2c058c6f35cbd91e4d8a590 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 03:00:20 -0500 Subject: [PATCH 22/62] feat(engine): OptionalEffectChoice pin-injection arm with seat and beat guards (5d U4) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit inject_pinned_answer gains the CR 603.5 MayChoice consumption arm (plan section 3 D5 verbatim) with both total head guards in source order — seat (*player != template.owner => RecastAbort, CR 603.5) and beat (work.pending_trigger.is_some() => RecastAbort, CR 603.3c announcement-time question is never answerable by a resolution-time pin) — plus the two injector doc corrections the arm falsifies (Targets-pin/MayChoice-pin split; the _ arm's remainder is "(mode / unless / X)"). Rows: R23(4) seat matched pair; R23(5) beat matched pair on the SAME source_id (differing-source would be refused by the slot lookup and report the wrong guard); R28(b) re-keyed on measurement — the plan's "drive seam must still RecastAbort for a matching hostile owner" is FALSE and its own cell says why (the comparand is client input): (b1) asserts the breach loudly with the re-key instruction in-code, (b2) asserts the declare-seam refusal that makes the ingress unreachable, matched positive included. Fourth row added for the accept mapping (both MayChoiceOption directions — live inverted-mapping failure mode with no plan row). R23's (5-reach) ships with R2 in U5. Four revert-probes run, flipped, restored sha-identical. P3 (declare firewall deleted) flips (b2) printing the tampered proposal reaching APNAP; (b1) is a measured must-not-flip control; U2's r28_a/r28_a'' flip on it too, r28_c stays green. Duplicate-needle tripwire fired once on P4's first application (doc quoted the production expression verbatim); doc rewritten, needle re-measured 1, probe re-run and flipped. Census adjudications, never relaxed: CR 603.5 prompt census 34=>37 (producer half unchanged at 5); R8 offer-writer test half 13=>14 (production unchanged at 22, multiset byte-identical) — new sites named in doc + failure message. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/game/engine.rs | 527 +++++++++++++++++- .../loop_shortcut_offer_writer_census.rs | 36 +- 2 files changed, 538 insertions(+), 25 deletions(-) diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index a4851ddd69..30486c67fc 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -2650,15 +2650,17 @@ fn drive_one_shortcut_cycle( /// There is deliberately NO top-level `template.ok_or(...)` guard: the `OrderTriggers` arm is /// TEMPLATE-INDEPENDENT (the real 2p Vito drive raises OrderTriggers with a `template = None` /// declaration, and the forced-unique target auto-selects at dispatch), so a top guard would -/// wrongly abort it. The template guard lives INSIDE the `TriggerTargetSelection` arm, the only -/// arm that consumes pins. +/// wrongly abort it. Each pin-consuming arm therefore carries its own guard: the +/// `TriggerTargetSelection` arm is the only arm that consumes a CR 608.2b `Targets` pin, and the +/// `OptionalEffectChoice` arm consumes the CR 603.5 `MayChoice` pin and carries its own seat + +/// beat guards on top of the same `template.ok_or(..)`. fn inject_pinned_answer( work: &mut GameState, template: Option<&crate::analysis::decision_template::DecisionTemplate>, iteration: crate::analysis::decision_template::IterationIndex, prompt: &WaitingFor, ) -> Result<(), RecastAbort> { - use crate::analysis::decision_template::{ConcreteDecision, ConcreteTarget}; + use crate::analysis::decision_template::{ConcreteDecision, ConcreteTarget, MayChoiceOption}; match prompt { // CR 603.3b / CR 732.2a: auto-order the confirmed shortcut's simultaneous // same-controller triggers by identity order (0..len). Template-INDEPENDENT and @@ -2711,8 +2713,66 @@ fn inject_pinned_answer( .map_err(|_| RecastAbort)?; Ok(()) } - // CR 732.2a "no conditional actions": any other prompt (mode / may / unless / X) has - // no Stage-2 pin producer ⇒ fail-closed. + // CR 603.5 + CR 732.2a: answer an in-cycle "may" from the pin its owner declared. + // + // The recipient is read OFF THE PROMPT, which is the only TOTAL instrument: + // `WaitingFor::OptionalEffectChoice` has five production producers and exactly one + // consults `effects::optional_prompt_player`, so the mint's recipient conjunct is a + // PREDICTION over one of five producers while this comparison is an OBSERVATION of + // the prompt in hand. Precondition (c) of the pin extension point — "only the acting + // player's own choices are pinnable" (`analysis::resource`) — is what it enforces. + // + // `template.owner` is only a legitimate comparand because `handle_declare_shortcut` + // firewalls it to the engine-issued `LoopShortcutOffer.proposer` at declare (and + // `apply_confirmed_shortcut` re-validates the same invariant for the restore ingress, + // which never runs the declare handler). Without those two, this test compares an + // attacker-chosen value against itself. + WaitingFor::OptionalEffectChoice { + player, source_id, .. + } => { + let template = template.ok_or(RecastAbort)?; + if *player != template.owner { + return Err(RecastAbort); + } + // CR 603.5 vs CR 603.3c + CR 700.2b: pin the BEAT as well as the seat. A + // `MayChoice` pin binds the RESOLUTION-time question (CR 603.5). While a trigger + // is still mid-construction the engine asks a same-`source_id` + // ANNOUNCEMENT-time one instead — the optional-modal gate raised out of + // `begin_pending_trigger_target_selection`, which runs with the construction + // cursor (`pending_trigger`) still live. `slot_source_prompted` cannot separate + // them: it matches the SOURCE OBJECT and both prompts carry it. So a live cursor + // means the prompt in hand may be the announcement-time question the pin does not + // answer ⇒ fail-closed. + if work.pending_trigger.is_some() { + return Err(RecastAbort); + } + let decisions = crate::analysis::decision_template::resolve(template, iteration, work) + .map_err(|_| RecastAbort)?; + let take = decisions + .into_iter() + .find_map(|d| match d { + ConcreteDecision::MayChoice { slot, take } + if slot_source_prompted(work, &slot.source, *source_id) => + { + Some(take) + } + _ => None, + }) + .ok_or(RecastAbort)?; + apply_action( + work, + *player, + GameAction::DecideOptionalEffect { + accept: take == MayChoiceOption::Take, + }, + None, + ) + .map_err(|_| RecastAbort)?; + Ok(()) + } + // CR 732.2a "no conditional actions": any other prompt (mode / unless / X) has no + // Stage-2 pin producer ⇒ fail-closed. `may` left this list when the mint gained its + // `EntryPinSlots.may` producer and the arm above; the remainder is still unpinnable. _ => Err(RecastAbort), } } @@ -13821,6 +13881,15 @@ mod stage2_injector_tests { /// The five production producers are named individually, and exactly one of them is inside /// the CR 603.5 gate that consults the recipient authority. If a sixth appears, this row /// fails and whoever added it must decide where its recipient is bound. + /// + /// ⚠ **ADJUDICATED IN U4, NOT RELAXED.** The census moved `34 ⇒ 37`. The PRODUCER half is + /// unchanged at **5** and its per-file list is byte-identical (only one line NUMBER moved, + /// `game/engine.rs:10433 ⇒ :10493`, because U4's arm sits above it) — that half is what this + /// row's claim is about, and it did not move. The `+1` READER is `game/engine.rs`'s new + /// `OptionalEffectChoice` arm in `inject_pinned_answer`, i.e. the CONSUMPTION point this + /// doc already names as where soundness over the other four producers is discharged; the + /// `+2` are U4's own `#[cfg(test)]` fixtures. A new READER is the benign case — adjudicate + /// it, do not relax the assert. #[test] fn the_cr_603_5_prompt_census_is_pinned_so_a_sixth_producer_is_a_counted_event() { /// Every `.rs` under the crate's `src`, and the `#[cfg(test)]`-attributed @@ -13902,17 +13971,20 @@ mod stage2_injector_tests { assert_eq!( producers.len() + readers.len() + in_test, - 34, + 37, "CR 603.5 prompt census drifted. A new PRODUCER must have its recipient bound \ - somewhere — the mint's conjunct (a) covers exactly ONE of them.\n\ + somewhere — the mint's conjunct (a) covers exactly ONE of them. A new READER is \ + the benign case (U4's own consumption arm was one): adjudicate it in this doc and \ + name the site, do not merely move the number.\n\ producers={producers:#?}\nreaders={readers:#?}" ); assert_eq!( (producers.len(), readers.len(), in_test), - (5, 6, 23), - "the partition, not just the total: five PRODUCTION producers, six PRODUCTION \ - readers (they read `state.waiting_for` and never write it), 23 `#[cfg(test)]` \ - lines.\nproducers={producers:#?}\nreaders={readers:#?}" + (5, 7, 25), + "the partition, not just the total: five PRODUCTION producers, seven PRODUCTION \ + readers (they read `state.waiting_for` and never write it — the seventh is U4's \ + `inject_pinned_answer` arm), 25 `#[cfg(test)]` lines.\nproducers={producers:#?}\n\ + readers={readers:#?}" ); assert_eq!( producers, @@ -13921,7 +13993,7 @@ mod stage2_injector_tests { "game/effects/mod.rs:5973".to_string(), "game/effects/mod.rs:8927".to_string(), "game/effects/scoped_library_search.rs:452".to_string(), - "game/engine.rs:10433".to_string(), + "game/engine.rs:10493".to_string(), ], "the five production producers, NAMED: the CR 603.5 gate in `resolve_chain_body` \ plus the two repeated-optional-payment drivers, the per-player acceptance cursor \ @@ -14203,6 +14275,437 @@ mod stage2_injector_tests { claimed here" ); } + + // ────────── 5d U4 — the `OptionalEffectChoice` arm and its two TOTAL head guards ────────── + + /// Life the shared U4 fixture's suspended optional ability gains when its CR 603.5 choice + /// is TAKEN. Named rather than inlined so every "the pin was APPLIED" assertion below is + /// keyed to the fixture instead of to a literal. + const U4_MAY_LIFE: i32 = 5; + + /// A board parked on a REAL CR 603.5 resolution-time prompt. `asked` is the seat the + /// resolver is asking, and the suspended optional ability is THAT seat's, so taking the + /// choice gains `asked` exactly `U4_MAY_LIFE` life. + /// + /// The life delta is the observable that separates "the pinned `DecideOptionalEffect` was + /// dispatched" from "the injector returned `Ok(())` having done nothing": an empty board + /// would answer `Ok(())` just as happily. + /// + /// The pinned source is a BATTLEFIELD object because `resolve_source` is battlefield-only + /// (CR 400.7 incarnation binding) — on any other zone `slot_source_prompted` would refuse + /// every arm below for a reason none of them is about. + fn u4_may_board(asked: PlayerId) -> (GameState, ObjectId) { + use crate::types::ability::{Effect, QuantityExpr, TargetFilter}; + let mut state = GameScenario::new_n_player(3, 7).build().state().clone(); + let src = place(&mut state, 970, Zone::Battlefield); + let mut optional = ResolvedAbility::new( + Effect::GainLife { + amount: QuantityExpr::Fixed { value: U4_MAY_LIFE }, + player: TargetFilter::Controller, + }, + vec![], + src, + asked, + ); + optional.optional = true; + state.push_optional_effect_frame(crate::types::resolution::OptionalEffectFrame { + ability: Box::new(optional), + trigger_event: None, + trigger_match_count: None, + }); + state.waiting_for = WaitingFor::OptionalEffectChoice { + player: asked, + source_id: src, + description: None, + may_trigger_key: None, + }; + (state, src) + } + + /// A template carrying exactly one CR 603.5 `MayChoice` pin for `src` (slot index 1 — the + /// may slot in both mint shapes), declared by `owner`. + fn u4_may_template( + src: ObjectId, + owner: PlayerId, + take: crate::analysis::decision_template::MayChoiceOption, + ) -> DecisionTemplate { + let source = this_object(src); + DecisionTemplate { + owner, + decisions: vec![PinnedDecision::MayChoice { + slot: DecisionSlot { + source: source.clone(), + index: 1, + }, + take, + }], + replay: ReplayMode::Scheduled { + count: IterationCount::Fixed(1), + }, + key: DecisionGroupKey::from_sources(&[source], DecisionKind::LoopChoice), + } + } + + /// R23, conjunct 4 — **CR 603.5 + CR 732.2a: a `may` pin answers only the seat the PROMPT + /// names.** + /// + /// The mint's recipient conjunct (U2) is a PREDICTION over one of five + /// `WaitingFor::OptionalEffectChoice` producers — only one of them consults + /// `optional_prompt_player` — so it is partial by construction. This guard reads the + /// recipient OFF THE PROMPT, which is total over all five and over any sixth. + /// + /// MATCHED POSITIVE, same instrument, same template, differing in exactly one fixture + /// parameter (the seat the prompt names — and, coherently, the controller of the suspended + /// optional ability, since the resolver asks that ability's controller): the pinned + /// `DecideOptionalEffect` is dispatched and `U4_MAY_LIFE` life is gained. + /// + /// Two reach-guards keep the negative off the arm's other refusals: the pin's slot really + /// does match the prompted source on the NEGATIVE's own board (so the `find_map` is not the + /// refuser), and the beat guard's cursor is absent on both boards. + /// + /// The POSITIVE is asserted FIRST, deliberately: under the revert-probe below one run then + /// shows the positive PASSING and the negative FAILING, which is what proves the pair + /// discriminates the SEAT rather than the fixture. + /// + /// REVERT-PROBE: delete `if *player != template.owner { return Err(RecastAbort); }` ⇒ the + /// negative arm FLIPS TO FAIL (it returns `Ok(())` and P1 gains the life P0's pin bought). + #[test] + fn a_may_pin_answers_only_the_seat_the_prompt_names() { + use crate::analysis::decision_template::MayChoiceOption; + + // ── MATCHED POSITIVE: the template against ITS OWNER's own prompt ── + let (mut asks_owner, src) = u4_may_board(P0); + let template = u4_may_template(src, P0, MayChoiceOption::Take); + let own_prompt = asks_owner.waiting_for.clone(); + let p0_before = life(&asks_owner, P0); + inject_pinned_answer(&mut asks_owner, Some(&template), 0, &own_prompt) + .expect("CR 603.5: the owner's own pin answers the owner's own choice"); + assert_eq!( + life(&asks_owner, P0), + p0_before + U4_MAY_LIFE, + "the pinned `DecideOptionalEffect {{ accept: true }}` was really APPLIED — an \ + `Ok(())` that dispatched nothing would leave this unchanged" + ); + assert_ne!( + asks_owner.waiting_for, own_prompt, + "the prompt was consumed, not silently skipped" + ); + + // ── NEGATIVE: same template (owner P0), but the prompt asks P1 ── + let (mut asks_other, other_src) = u4_may_board(P1); + assert_eq!( + other_src, src, + "both boards mint the same pinned source object" + ); + let prompt = asks_other.waiting_for.clone(); + assert!( + slot_source_prompted(&asks_other, &this_object(src), src), + "reach-guard: the pin's slot MATCHES the prompted source on this very board, so a \ + refusal below cannot be the `find_map`'s" + ); + assert!( + asks_other.pending_trigger.is_none(), + "reach-guard: no construction cursor, so the BEAT guard cannot be the refuser" + ); + let p1_before = life(&asks_other, P1); + assert!( + inject_pinned_answer(&mut asks_other, Some(&template), 0, &prompt).is_err(), + "CR 603.5: a pin owned by the proposer must not answer ANOTHER seat's choice" + ); + assert_eq!( + life(&asks_other, P1), + p1_before, + "the refusal is fail-closed: nothing was dispatched as P1" + ); + assert_eq!( + asks_other.waiting_for, prompt, + "the other seat's prompt is still standing, for a human to answer" + ); + } + + /// R23, conjunct 5 — **CR 603.5 vs CR 603.3c + CR 700.2b: the pin binds the BEAT as well as + /// the seat.** + /// + /// A `MayChoice` pin answers the RESOLUTION-time question (CR 603.5). The engine also asks a + /// same-`source_id` ANNOUNCEMENT-time question while a trigger is still mid-construction + /// (the optional-modal gate, CR 603.3c / CR 700.2b), and `slot_source_prompted` cannot + /// separate the two: it matches the SOURCE OBJECT and both prompts carry it. That is why the + /// pair below uses the SAME `source_id` in the cursor as in the prompt — a differing-source + /// fixture would be refused by the slot lookup instead and the row would report the wrong + /// guard. + /// + /// Both arms hold the seat guard SATISFIED (`player == template.owner == P0`), asserted + /// below, so conjunct 4's guard cannot be what decides either arm. + /// + /// (5-pos) is asserted FIRST so that under the revert-probe ONE run shows the positive + /// passing and the negative failing — the evidence that the pair discriminates the CURSOR + /// and not the fixture. + /// + /// REVERT-PROBE: delete `if work.pending_trigger.is_some() { return Err(RecastAbort); }` ⇒ + /// (5-neg) FLIPS TO FAIL while (5-pos) and conjuncts 1–4 stay green. + #[test] + fn a_may_pin_never_answers_the_announcement_time_question() { + use crate::analysis::decision_template::MayChoiceOption; + + let template = |src: ObjectId| u4_may_template(src, P0, MayChoiceOption::Take); + + // ── (5-pos): the same board with NO construction cursor ── + let (mut cursor_clear, src) = u4_may_board(P0); + assert!(cursor_clear.pending_trigger.is_none()); + let pos_prompt = cursor_clear.waiting_for.clone(); + let pos_before = life(&cursor_clear, P0); + inject_pinned_answer(&mut cursor_clear, Some(&template(src)), 0, &pos_prompt).expect( + "(5-pos) CR 603.5: with no cursor the pin answers its own resolution-time question", + ); + assert_eq!( + life(&cursor_clear, P0), + pos_before + U4_MAY_LIFE, + "(5-pos) the pinned choice was applied" + ); + + // ── (5-neg): a LIVE construction cursor on the SAME source ── + let (mut cursor_live, neg_src) = u4_may_board(P0); + assert_eq!(neg_src, src, "the pair is built from one fixture"); + let mut mid_construction = ResolvedAbility::new( + crate::types::ability::Effect::GainLife { + amount: crate::types::ability::QuantityExpr::Fixed { value: 1 }, + player: crate::types::ability::TargetFilter::Controller, + }, + vec![], + src, + P0, + ); + // The production shape that raises a same-source ANNOUNCEMENT-time prompt: an optional + // modal trigger, asked before its modes are chosen (CR 603.3c / CR 700.2b). + mid_construction.optional = true; + cursor_live.pending_trigger = Some(Box::new(super::triggers::PendingTrigger { + source_id: src, + controller: P0, + condition: None, + ability: Box::new(mid_construction), + timestamp: 0, + target_constraints: vec![], + distribute: None, + trigger_event: None, + modal: None, + mode_abilities: vec![], + description: None, + may_trigger_origin: None, + subject_match_count: None, + die_result: None, + })); + let prompt = cursor_live.waiting_for.clone(); + assert_eq!( + prompt, pos_prompt, + "(5-neg) differs from (5-pos) in `work.pending_trigger` and in NOTHING else the \ + injector reads — the prompts are equal" + ); + let WaitingFor::OptionalEffectChoice { + player: asked, + source_id: prompt_source, + .. + } = &prompt + else { + panic!("the fixture parks on a CR 603.5 prompt; got {prompt:?}"); + }; + assert_eq!( + *asked, + template(src).owner, + "reach-guard: the SEAT guard is satisfied on both arms, so conjunct 4 cannot be \ + what decides this pair" + ); + assert_eq!( + cursor_live + .pending_trigger + .as_ref() + .map(|t| t.source_id) + .expect("(5-neg) carries a cursor"), + *prompt_source, + "the cursor names the SAME source as the prompt — that identity is what makes this \ + arm non-vacuous, because `slot_source_prompted` matches on exactly that object" + ); + let before = life(&cursor_live, P0); + assert!( + inject_pinned_answer(&mut cursor_live, Some(&template(src)), 0, &prompt).is_err(), + "CR 603.5 vs CR 603.3c: with a live construction cursor the prompt in hand may be \ + the ANNOUNCEMENT-time question the pin does not answer ⇒ fail-closed" + ); + assert_eq!( + life(&cursor_live, P0), + before, + "(5-neg) fail-closed: no `DecideOptionalEffect` was dispatched" + ); + assert_eq!( + cursor_live.waiting_for, prompt, + "(5-neg) the prompt still stands" + ); + } + + /// The arm's own leaf, covered in BOTH directions — **CR 603.5: a "may" is binary, and the + /// pin says WHICH.** + /// + /// The injector's `accept` flag is one equality test against `MayChoiceOption`'s take + /// variant — the single place the typed pin becomes the engine's boolean. A + /// single-direction row would pass just as happily against the INVERTED mapping, which is + /// why both options are driven on one fixture. (That comparison is deliberately NOT quoted + /// verbatim here: a textual revert-probe whose needle also matched this doc line would + /// silently no-op — the tripwire this row's own probe hit on its first run.) + /// + /// `Decline` is separated from "nothing was dispatched" by the prompt: a declined optional + /// effect CONSUMES the prompt (the frame resolves its decline branch) while a refusal leaves + /// it standing. Both facts are asserted, so neither arm can pass by inaction. + #[test] + fn a_may_pin_dispatches_the_option_it_names_in_both_directions() { + use crate::analysis::decision_template::MayChoiceOption; + + for take in [MayChoiceOption::Take, MayChoiceOption::Decline] { + let (mut board, src) = u4_may_board(P0); + let prompt = board.waiting_for.clone(); + let before = life(&board, P0); + inject_pinned_answer( + &mut board, + Some(&u4_may_template(src, P0, take)), + 0, + &prompt, + ) + .expect("both options are legal answers to a CR 603.5 prompt"); + assert_ne!( + board.waiting_for, prompt, + "{take:?}: the prompt is ANSWERED either way — that is what separates a \ + `Decline` from a fail-closed refusal" + ); + assert_eq!( + life(&board, P0) - before, + match take { + MayChoiceOption::Take => U4_MAY_LIFE, + MayChoiceOption::Decline => 0, + }, + "{take:?}: the pin's own option decides `accept`, so an inverted mapping fails \ + on one of these two arms" + ); + } + } + + /// A live `LoopShortcut` offer with an EMPTY schema, proposed by P0 on `state`. + fn u4_park_on_offer(state: &mut GameState) { + use crate::analysis::decision_template::ShortcutDecisionSchema; + use crate::analysis::loop_check::{LoopCertificate, WinKind}; + use crate::analysis::resource::BoardDelta; + state.waiting_for = WaitingFor::LoopShortcut { + proposer: P0, + predicted_winner: None, + certificate: LoopCertificate { + unbounded: vec![], + win_kind: WinKind::LethalDamage, + mandatory: false, + residual_board_delta: BoardDelta::default(), + per_cycle: None, + }, + schema: ShortcutDecisionSchema::default(), + }; + } + + /// R28 arm (b) — **the DRIVE seam cannot see a `template.owner` the engine never bound; the + /// DECLARE firewall is what makes the drive's seat guard meaningful.** + /// + /// ⚠ **(b1) ASSERTS A MEASURED BREACH, NOT A DESIRED BEHAVIOUR.** `template.owner` arrives + /// verbatim from the client, and `inject_pinned_answer` holds the template but not the + /// offer — so when an attacker sets `owner` to the seat the prompt names, the seat guard + /// compares that value against itself and passes. Measured on this tree: the injector + /// returns `Ok(())` and dispatches the PROPOSER's pinned choice as the OTHER seat's + /// `GameAction::DecideOptionalEffect` (P1 gains `U4_MAY_LIFE`). That is the whole reason the + /// binding lives at declare (`handle_declare_shortcut`) and at consumption + /// (`apply_confirmed_shortcut`), one layer above this one. + /// + /// ⚠ **PLAN DEVIATION, DISCLOSED:** §6 R28(b) predicts the drive seam refuses this pair + /// (*"must still `RecastAbort`"*). It does not, and cannot — the same cell's own analysis + /// says so two sentences later (*"under the round-33 design alone it returns `Ok(())`"*). + /// The arm ships keyed to the measurement, with (b2) supplying the refusal the row is + /// really about. If a future change closes the drive seam (e.g. by threading the + /// engine-issued proposer into the injector), (b1) FLIPS and must be re-keyed onto the new + /// refusal rather than deleted. + /// + /// **(b2) THE REFUSAL, AT THE SEAM THAT HAS THE ENGINE-ISSUED COMPARAND.** The identical + /// hostile template declared against a live `LoopShortcut { proposer: P0 }` is refused into + /// the manual handback — no `ShortcutProposal` is built — so the (b1) configuration is + /// unreachable in production. **MATCHED POSITIVE:** byte-identical except `owner`, which + /// opens APNAP; without it, "refused" would be indistinguishable from "this constructed + /// offer refuses everything". + /// + /// REVERT-PROBE: delete `if template.as_ref().is_some_and(|t| t.owner != offer.proposer)` + /// from `handle_declare_shortcut` ⇒ **(b2) FLIPS TO FAIL** (the hostile declaration builds a + /// proposal and APNAP opens), while **(b1) MUST NOT FLIP** — the injector reads no firewall. + /// The pair therefore proves the two halves measure two different seams rather than one + /// seam asserted twice. Arm (b) and arm (c) (`apply_confirmed_shortcut`, U2, integration) + /// take OPPOSITE reverts by design: (b) is about the drive-side comparand, (c) about the + /// restore ingress that never reaches declare. + #[test] + fn r28_b_the_drive_seat_guard_compares_a_client_supplied_owner_against_itself() { + use crate::analysis::decision_template::{IterationCount, MayChoiceOption}; + + // ── (b1) DRIVE seam: prompt player P1, template owner P1 (the attacker's choice) ── + let (mut board, src) = u4_may_board(P1); + let hostile = u4_may_template(src, P1, MayChoiceOption::Take); + let prompt = board.waiting_for.clone(); + let p1_before = life(&board, P1); + let outcome = inject_pinned_answer(&mut board, Some(&hostile), 0, &prompt); + assert!( + outcome.is_ok(), + "(b1) MEASURED: with `owner` set to the prompt's own seat the drive guard has \ + nothing to compare — it passes. Got {outcome:?}" + ); + assert_eq!( + life(&board, P1), + p1_before + U4_MAY_LIFE, + "(b1) and the proposer's pinned value was really dispatched AS P1 — this is the \ + breach the declare-time binding closes, measured rather than argued" + ); + + // ── (b2) DECLARE seam: the same template, refused by the engine-issued comparand ── + for owner in [P1, P0] { + let (mut state, offer_src) = u4_may_board(P0); + assert_eq!(offer_src, src, "one fixture feeds both halves"); + u4_park_on_offer(&mut state); + apply_action( + &mut state, + P0, + GameAction::DeclareShortcut { + count: IterationCount::Fixed(1), + template: Some(u4_may_template(src, owner, MayChoiceOption::Take)), + }, + None, + ) + .expect("the declaration is dispatched either way — refusal is a HANDBACK"); + + if owner == P1 { + assert!( + matches!(state.waiting_for, WaitingFor::Priority { .. }), + "(b2) CR 732.2a + CR 603.5 + CR 800.4a: a declaration whose `owner` is not \ + the engine-issued proposer hands priority back; got {:?}", + state.waiting_for + ); + assert!( + !matches!(state.waiting_for, WaitingFor::RespondToShortcut { .. }), + "(b2) no `ShortcutProposal` carrying the hostile owner may exist — that is \ + what makes (b1)'s configuration production-unreachable" + ); + } else { + let WaitingFor::RespondToShortcut { proposal, .. } = &state.waiting_for else { + panic!( + "(b2) matched positive: the honest declaration must open APNAP, so the \ + refusal above is keyed to `owner` and not to this constructed offer \ + refusing everything; got {:?}", + state.waiting_for + ); + }; + assert_eq!( + proposal.template.as_ref().map(|t| t.owner), + Some(P0), + "(b2) the proposal that IS built carries the engine-bound owner" + ); + } + } + } } /// FIX-1 interruptibility (memory: combo-interruptibility-acceptance-criterion) — the Kilo loop's diff --git a/crates/engine/tests/integration/loop_shortcut_offer_writer_census.rs b/crates/engine/tests/integration/loop_shortcut_offer_writer_census.rs index 489d0dd1c5..d14e52cc07 100644 --- a/crates/engine/tests/integration/loop_shortcut_offer_writer_census.rs +++ b/crates/engine/tests/integration/loop_shortcut_offer_writer_census.rs @@ -180,16 +180,24 @@ fn census(needle: &str) -> Vec { } /// R8 CONJUNCT 1 — the offer-writer surface, pinned BIDIRECTIONALLY (`== 22` / -/// `== 13`, so a REMOVED site fails too) and by per-file multiset. +/// `== 14`, so a REMOVED site fails too) and by per-file multiset. /// -/// ⚠ THE `#[cfg(test)]` HALF MOVED ONCE, 12 ⇒ 13, AND THE ADJUDICATION IS -/// RECORDED RATHER THAN THE ASSERT RELAXED. §6 R27 (b) -/// (`analysis::resource::tests::r27_b_a_stored_may_auto_choice_survives_the_ring`) -/// destructures the offer the mint RETURNED to count its published CR 603.5 -/// `MayChoice` points. That is a READ in a `#[cfg(test)]` scope — the benign -/// case this row's own failure message names — and it writes no offer. The -/// PRODUCTION half is unchanged at 22 and so is the per-file multiset below, -/// which is the half §10 ruling condition (2) is about. +/// ⚠ THE `#[cfg(test)]` HALF HAS MOVED TWICE, 12 ⇒ 13 ⇒ 14, AND EACH +/// ADJUDICATION IS RECORDED RATHER THAN THE ASSERT RELAXED. +/// * 12 ⇒ 13: §6 R27 (b) +/// (`analysis::resource::tests::r27_b_a_stored_may_auto_choice_survives_the_ring`) +/// destructures the offer the mint RETURNED to count its published CR 603.5 +/// `MayChoice` points. +/// * 13 ⇒ 14 (5d U4): `game::engine::stage2_injector_tests::u4_park_on_offer` +/// parks a constructed board on a `LoopShortcut { proposer: P0 }` so §6 R28's +/// arm (b) can assert that the DECLARE firewall refuses a hostile +/// `template.owner` — i.e. that arm (b)'s drive-seam configuration is +/// production-unreachable. +/// +/// Both are WRITES in a `#[cfg(test)]` scope, which is the benign case this +/// row's own failure message names: a test fixture cannot make the period +/// machinery certify. The PRODUCTION half is unchanged at 22 and so is the +/// per-file multiset below, which is the half §10 ruling condition (2) is about. /// /// R8 CONJUNCT 2, same test — every production `validate_pins(` site is a /// declare-time gate paired with `predictability_gate`. @@ -218,7 +226,7 @@ fn the_loop_shortcut_offer_writer_surface_is_pinned_and_every_declare_site_valid assert_eq!( (production.len(), in_test.len()), - (22, 13), + (22, 14), "CR 732.2a OFFER-WRITER SURFACE CHANGED (not re-measured — this number is an \ INVARIANCE pin over the whole 5d U-series).\n\ The three CERTIFICATION-PATH writers are `reconcile_terminal_result` (object-growth \ @@ -231,9 +239,11 @@ fn the_loop_shortcut_offer_writer_surface_is_pinned_and_every_declare_site_valid certify without declaring or driving — §10 ruling condition (2), i.e. \ answer-legality-at-certification becomes OWED WORK and the U-series stops. A new READ \ site is the benign case; adjudicate, do not relax the assert.\n\ - THE TEST HALF HAS BEEN ADJUDICATED ONCE (12 ⇒ 13, §6 R27 (b)'s schema read in \ - `engine/src/analysis/resource.rs`); if it moves again, name the new site here too \ - rather than only moving the number.\n\ + THE TEST HALF HAS BEEN ADJUDICATED TWICE (12 ⇒ 13, §6 R27 (b)'s schema read in \ + `engine/src/analysis/resource.rs`; 13 ⇒ 14, 5d U4's `u4_park_on_offer` fixture in \ + `engine/src/game/engine.rs`, which parks a constructed board on an offer so §6 R28 \ + arm (b) can assert the DECLARE firewall refuses a hostile `template.owner`); if it \ + moves again, name the new site here too rather than only moving the number.\n\ measured per-file production multiset: {multiset:?}\n\ production: {production:?}\n\ test: {in_test:?}" From 8ce23d7d4a5b8de44a6be5c8ba6ff70d29dfe9fd Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 05:09:23 -0500 Subject: [PATCH 23/62] test(engine): track the F4 4p dump and pin the bounded-offer behaviour it actually has MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stages `crates/engine/tests/fixtures/fantastic_four_bounded_loop_4p.json.gz` for the first time, together with the integration module that loads it through the production chokepoint (`PersistedGameState::into_game_state`) and drives it beat-by-beat through the public `apply()` — no synthetic `GameScenario` stands in for the real board. Rows: R18 (name-resolver fails loud both ways), R1 + R1b (offer fires, bound re-derived independently of `elimination_bounds`, published point set), R2 (what an accepted declaration commits), R23 5-reach (no answered may-beat carries a construction cursor), R9 (refusal keyed to a derived replacement obligation, not a definition name), R16 (exact probe demand at the offering beat), R27 a1 (the recorded sample keeps a live half normalisation would erase), and R7 in `analysis/resource.rs` (the frozen prefix is an index-id identity, never a presence count). MEASURED CORRECTIONS, pinned rather than asserted-as-planned: * The bounded offer FIRES on the real dump (beat 43, P0, max_iterations = 35, basis B) but publishes ONE decision point, not the three §6 R1 predicted, and an accepted declaration therefore commits ZERO cycles at both n = 1 and n = 3 — it answers Sue's `may` from the pin and then aborts on Reed's unpinned `may`. Fail-CLOSED (rollback, CR 800.4a handback): nothing rules-wrong ships, but it is not a grant. R1/R1b are labelled PARTIAL and §6 R2a/R2b/R3/R4/R5 plus the interruptibility matched pair are deliberately NOT written — no row asserts a falsified prediction. * CONSEQUENCE-DISCLOSURE of the ratified `PROBE_BUDGET = 26`: §6 D1/D2 (dellian) are unreachable and are NOT written. dellian drives 309 beats through `apply()` to `GameOver` with no offer ever raised; every mintable beat refuses `UnspecifiedChoiceWindow` with `spent = 26 = PROBE_BUDGET, denied = true`. dellian's measured demand at that seam was 96–107, so this is budget exhaustion by design of the cap, not a detector fault. Remedy sizing for the follow-up is journaled with measurements (widening `announced` is insufficient alone; the sampler gate is not the seam — two relaxations left the frame census unchanged; the resolution-order sequence is empty at the offering beat). Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/analysis/resource.rs | 107 +- .../fantastic_four_bounded_loop_4p.json.gz | Bin 0 -> 749083 bytes .../fantastic_four_bounded_loop.rs | 1093 +++++++++++++++++ crates/engine/tests/integration/main.rs | 1 + 4 files changed, 1198 insertions(+), 3 deletions(-) create mode 100644 crates/engine/tests/fixtures/fantastic_four_bounded_loop_4p.json.gz create mode 100644 crates/engine/tests/integration/fantastic_four_bounded_loop.rs diff --git a/crates/engine/src/analysis/resource.rs b/crates/engine/src/analysis/resource.rs index 321f3ff863..220f227877 100644 --- a/crates/engine/src/analysis/resource.rs +++ b/crates/engine/src/analysis/resource.rs @@ -5177,9 +5177,18 @@ mod tests { .count() } - /// The two TRACKED 4p dumps, as `(name, gzip)` pairs. F4 - /// (`fantastic_four_bounded_loop_4p.json.gz`) is deliberately absent: it is untracked - /// until §5 U5, so a row keyed to it would not be reproducible from the repository. + /// The two 4p dumps every row in this module drives with the GENERIC policy + /// ([`dump_drive_one_beat`]: pass at `Priority`, else the first legal non-terminal action), + /// as `(name, gzip)` pairs. + /// + /// `fantastic_four_bounded_loop_4p.json.gz` is now tracked too (5d U5), and is deliberately + /// NOT listed here: MEASURED, the generic policy never reaches its loop at all — that + /// helper's victim preference matches `GameAction::SelectTargets` while the F4 dump raises + /// `GameAction::ChooseTarget`, and its fallback answers Invisible Woman's CR 603.5 "may" + /// with whichever `DecideOptionalEffect` is enumerated first, which breaks the chain to + /// Mister Fantastic. Adding it here would add a dump on which these rows measure nothing. + /// Its rows live in `tests/integration/fantastic_four_bounded_loop.rs`, with the drive + /// policy that dump requires. const TRACKED_DUMPS: [(&str, &[u8]); 2] = [ ( "dina", @@ -14047,6 +14056,98 @@ mod tests { } } + /// §6 R7 — THE FROZEN PREFIX IS AN `(index, id)` IDENTITY, NOT A PRESENCE COUNT. + /// + /// CR 732.2a: `certified_period_touch` may exempt a `current.stack` entry from conjunct (6) + /// only when that entry sits at the SAME INDEX carrying the SAME `ObjectId` in every window + /// frame — i.e. it demonstrably did not participate in the observed period. A weaker test + /// ("something is at that index") would exempt an entry the period shifted underneath, and + /// a shifted entry is exactly one that DID move. + /// + /// This is the constructed unit R33/R21 do not cover: those rows measure the exemption on + /// the real dellian window, where every frame's prefix happens to be identity-stable, so + /// neither of them can separate the identity conjunct from a presence check. + /// + /// Arms, on ONE constructed 3-frame window (`[f0, f1, f2]` + `current`): + /// * **(a)** a stable `(index, id)` prefix of length 2 ⇒ `frozen_ids` contains exactly it; + /// * **(a′)** the reach-guard that makes (a) non-trivial: the stack's TAIL entry differs + /// across the frames, so `frozen_ids` is a PROPER subset and "freeze everything" fails; + /// * **(b)** one frame's stack shifted by a single index (an extra entry pushed at the + /// front) ⇒ the prefix ids are no longer at their own indices ⇒ NOTHING is frozen, even + /// though every id is still PRESENT in that frame. + /// + /// REVERT-PROBE (RUN, see the journal): weaken the identity conjunct to a presence check + /// (`frame.stack.get(*index).is_some()`) ⇒ (b)'s frozen set becomes the whole prefix again + /// ⇒ (b) FAILS. (a)/(a′) stay green under that probe, which is what makes (b) the arm the + /// identity conjunct is answerable to. + #[test] + fn r7_the_frozen_prefix_is_an_index_id_identity_never_a_presence_count() { + let entry = |id: u64| churn_entry(id, 0, lose_ability(1), None); + // ids 7001/7002 are the STABLE prefix; the tail differs per frame so the frozen set is + // a proper subset and this row cannot be satisfied by "freeze the whole stack". + let frame_with_tail = |tail: u64| { + let mut s = GameState::new_two_player(20); + s.stack.push_back(entry(7001)); + s.stack.push_back(entry(7002)); + s.stack.push_back(entry(tail)); + s + }; + let (f0, f1, f2) = ( + frame_with_tail(7010), + frame_with_tail(7011), + frame_with_tail(7012), + ); + let current = frame_with_tail(7013); + + // ── (a) + (a′) ── + let touch = certified_period_touch( + &[&f0, &f1, &f2], + ¤t, + PeriodCertification::BoardCovered, + ); + let frozen: Vec = touch.frozen_ids.iter().copied().collect(); + assert_eq!( + frozen, + vec![ObjectId(7001), ObjectId(7002)], + "(a) CR 732.2a: exactly the entries holding the SAME id at the SAME index in every \ + window frame are provably outside the observed period" + ); + assert!( + frozen.len() < current.stack.len(), + "(a′) reach-guard: the frozen set must be a PROPER subset — a fixture whose whole \ + stack froze could not tell the identity conjunct from `freeze everything`; \ + stack {} vs frozen {}", + current.stack.len(), + frozen.len() + ); + + // ── (b) one frame shifted by a single index; every id is still PRESENT in it ── + let shifted = { + let mut s = f1.clone(); + s.stack.push_front(entry(7099)); + s + }; + let shifted_ids: std::collections::BTreeSet = + shifted.stack.iter().map(|e| e.id).collect(); + assert!( + shifted_ids.contains(&ObjectId(7001)) && shifted_ids.contains(&ObjectId(7002)), + "(b) reach-guard: the shift must PRESERVE both prefix ids in that frame, otherwise \ + a presence check would reject them too and the arms would not separate" + ); + let shifted_touch = certified_period_touch( + &[&f0, &shifted, &f2], + ¤t, + PeriodCertification::BoardCovered, + ); + assert!( + shifted_touch.frozen_ids.is_empty(), + "(b) CR 732.2a: a single index shift means the entry moved WITHIN the observed \ + period, so no exemption is provable — presence at some index is not the property. \ + got {:?}", + shifted_touch.frozen_ids + ); + } + /// R14 — THE DEGENERATE WINDOW ANNOUNCES `current.stack`, ELEMENT FOR ELEMENT. /// /// CR 732.2a + CR 608.1. With NO window frame there is no transition to observe, so the diff --git a/crates/engine/tests/fixtures/fantastic_four_bounded_loop_4p.json.gz b/crates/engine/tests/fixtures/fantastic_four_bounded_loop_4p.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..4f2b6d11a03b9c8da0b25608ee77b38eb8b60929 GIT binary patch literal 749083 zcmV)WK(4I8 zBwNm>qR?M^hR(w(`64EZlwVPbW$23;FOgOMso-CA{FGNp{q>*U^(2xx(j-O(7vJVQ z^9kH^!b}+XgdS!yX&VGhEwn0)trw zzK#u#8Kbe`*oKXSu@M*^ZnBM$WdxQn#tpuK;sRrgBADUe`^a#{#>lWe!?z9BHGEtQ zjKDFRk>N6f*+$?RBhO%t;k(AzF-FX=4S#I-cwk`oj^W`B%NXIiVdFB&LJmCEFs9rtH|rnv^X zE$|H={eW^T!$*NG@>~}Di@4$iWyDWjRRs-Ao=qYVey$V4JVWZ@hSad&+2={QDDv>L zsPxwkJ-nPm7|Lu?&609L_(@wgSISB(*n*MsNw<s2B#A^;B^BwL{>LnVrW^V{(if5Cyc=Q~U z@6!Fa#^^WU13q0U8+l1B2^JXLi)VPGbodPD8At~_*Z>jRBJD#tKnxoiZUZxHo9au? zMj0bga-_RdPihOPJC%V?XtB+xp7bny_vl`fW79Qi5A_Azi%%em?NDAy!~K8{8~SVm z66}ELfc!us+oC$-w@v+pIs>w7pZ;)-Q5lpM=@wffg$ z1{Gisdj?fyP;Ew*(x+>bj{BiT464hZn#`j6$#Bzkvb4w>kcmaQPxlgSz;gf%464Rp zkQtza0eTozlc5RBr~F7~#02miD$0m=074jGg85Vy)g6D(I7aFmP#sW)MR_PceWz#O zx<$`GIex2-$7YE^%wpCe~c&%Ac)zN zhTjgAgL?p%46w!kJ&aMgqcuD*MwO)wrVF^yr4FUf;Mqfjr6A%oRAPk?&fO5gf%H2> zn<3Q>wAz7|InY=Kn&d!h90;%j?RB8t4zYI9C}^MqLg0`q0CaIk17K7gXsrW8a3K5+ z(82+#IK-oYGLB7U;~tOFaX(PUfz~?EZU@NV0GS+*Tm~wSK9S}Tm&b2%B7C|Z&l^+O zR9}3D20CL(Lw+ER1BG*dMh=j`VU!>D13?^{@={l12GacwQaBcM z4pp8ym^$232%!+-NF>70|5XT7^V2mRx+s#oK(=mZA)o%A2rF3=oBlOE33c$K`JR8x zn#@yPiis4sJWZRljh}zz88zqErpD+jzF2g6CFY@+L@08dk|w#M27u!K+!7FT>fS&a%1#n#IEz4SBA=&X#G~Ce6`> zWvf!H)PKi#B>0|{vUgE_#^=<&i)9)w3+)%4rX@vW@~_nXx;#Aha+Zm*Y!lM_3YEHQ zf6Bgnt<$8u5`Ys0HYyNnP(%XGhC| zQz@(8z?&jj)JgjHkJqoYH&LX0|NUCa3+?-d>sL}{i%U^W&=TnXYS?nuVcBc}! z%2hzKGbpREs{8D&Bh+Zr!;HtZ1RBv7>4;Z3fb3ezXA(_9X{2}cOkcGA)`SERtp-4C znWcaP?J8et4PYuxHlzsnNN>YK}p8WHp!Ht2PENNfuu zl1MeH$T|@qGywfi;71Di5ox4fHwGyQx8+T0V*M57BO_y3pt-134){rhG!puVk3vt_ zV{_z=Jk#ZNYzEQDF@5fYf{7^f7}Fc@--V#pWLs9?UJs`0&Q+LC%ytIM7 zG7ZfHruQE;04&RLZU$MIrH`~SNx|(Y;kK5neVE%`khx0KG|8YY8HpJ7D!&{$(OPK$^sn20@R|r#|$*ge`O15a6Ym@phwO) zv0PCksDD^aWUVj?e-Yr-ugog)YDo=Z5l}k9$VbycL zfJ{Zc?6$X{_V+7M@+e9>NzL!c^r~?w$}+h`GaIi>de|Lv-u75O7pHEaOp|3cO)0Pu zZDq}J>M0EIrne{i9IeU7m4@P$Yg-`SsZZ8^c>7I1rwh@$Od=O+ePY(}iJ9_=clpGB z@Irf!yOK;8+8bD+OQ?$WrYHsB?#fAadLFWO7x!5IRa^?-F*2L-6+Gq>bCt{ zr>}g7K9y}AKt?OcmV_Z_vAm&=*8c2`Wmm2A|H+p%`z85kAJ!6J z*&6CzijcRKJdYCKKN-8)%;Q(c*Ztex8%6(B50kzcFq(RkFM+TZ7@W^Sn#(Qn(Kf2F zuXSSGXT79`*illeTRkJ!419;X^l1f!UA0J7M=RI$S(7NxgepmY&Z6Jqk7P^MY>p~$ z7dp0G(n+b=ZS*UL<|JJf*;1ZWRU6f6`@YA4KCR|i^=rHdtgUaB5t5gJTH1}x)|Kq` zc$?PR-dA2aCE7g1<`YrIxPqxnJ@I&VZ*3ma|dv&e0U0N2F8fq#Nn#u_n-hEn1( zGVdQI*if)9^@zO#BzGP3Utl`(ur4g6~FQFN1cOt#TV7tY7`=Y?4o3mC zC(rRACTVz4WQC#Yn(oL2>m=&QBWG$d<_4}61d-+Q4c56~qlTKMv1R%ma-zl_)AvZ` zZYYzcOq!aTqO7d4vL~~$gHD7Q$mpurj*9J^IJV=qu^qP)+i_KFXIE@zH3@I1m`;OX z2l3nH;m;zT)2wq;af*Z9w%_uiorNRLoxo%f+3yNaep2@%+TEM2NhCrLd6MB%n7}g6M7v^=qXOPixZyZ=wF^{ z=YoHJ=(l~l7lj;~9e&r(uEJCrl1*#a&Q{(tKdn18ja|!Wh|2J)80$&9so8w-faR21 z0m`#A;O*$UGc-Fd>s=e@QZJ;{49+d{IXCoWJv;HIqzr3Qc0j$`z+Bzmz|<&T+ssm= zaZO@sQa9{qug!cLm3vzQR#QF(y^A6(u3R5SPH0Bkl6DAb`G9)8{7eJi8`12oDW1o9 z6Ke_P#hf!!#8b<3L++VV=3A!ihmMa6{>Tb9h<}eg4CRk+P?86I3%i?=+`}^;lw~L% zUr`N3H5Ao2J=IXJ{T2Iptn6pdDCi($NX0@`EcC>&&`}!;9d%-%BNYqX`F^~}GYvRq zXm1LdU=-C$nnbYOD{y-x%&)9h|m{CruR)e@nvWMk4^v(N2& z65YG5?5(AyH*f6IQzHUhW8ake_|~TGbVcs8Se0fW(%!xr*Ql+Awpdp9{tx><|6yy5 z1Ze<}`iZO6tM}aEz!*ej?B}z!$_`CAbP2rC*@G~zW;F8mSry-4-s#uF$Loryh49a9 zA-ojOo0r3Pgy8XPsnSx08+@wJx9z}-T+E%+|KbFq8U1_on zuQb#E%!Ld`b2Uq^v?|vK>)-^XZKbr5s`|`E`wa}!<+&*E7>QJOn#XgiAGIoYhz0#U z>9~F<`OrA^P)7T~Q#f=+jmV6B;}pFe*~Qn5xFyQOz^qqe|h z*7iex4dbXcl*5$6_hy9dh#Ij{D`@> z=|(|px>I*#PJJQF*!BEz9PluXMjJlrCaWE4BKtO5exXOdDHg0)uwucA1uGV;Sg>Nj ziUq$c7Ob|JIVMk6Z;;d*q!YhE^4m8^e&-F6uihZ-dV}=KvbYL)I@c~TUZm;;((zrs z+P52gzwVB6{h>ZK{f|d-Z2CiQhw%aT^7I!pxLLBh#f^R|R;fM0wueu`-EI!ie!bp@ z;QEl+i^g4wZnl{}s9@5ZS|!pXQ_ExzrhhMXP4AmhYnSyJ(gUCKE3J^4(m7I|aHAGO zIj>VAYfrfgZH7m`(%!}O)XzNokIK*<#V#o$&xVlianh;_7t?Sr=Syi z3RLWASM2G6q=t}DyTGIBBY;%+NpWj+*r(c$?7(BlX8eojok5l_7P*{eaPtXd?@`rc zk&55i?D|8Ttr^Cn$hJge`d;Xmt{*egpK{A&!N?MpGj%P0xuzmt)KH)OTU73Ig!h`)pJ>ites!05pQ|054vO-lSD^%jkTsTOxV30c z$od|oAMZ1N_G7KR*Dt4I*V|^jkr__6bJnhP0Z(k}tfQ??TO-pA1kLs0z>Y@T6r4{@ z*B%EZ5AE3WqA(C6cg&q=^Zf1IxIUC~zRzkL%|YL9H4fk6Znq7%lLN1;fwBh58YpY< zB3Egw0ra+j!m##A1r?4SRFH0|-0qt^ty!Lgq?R^0SKrpZojRB{X;7m5*-=EP_zi}) zyKC~s&QTz2<5Ckx>+ZjKzI&%m0mpW|h^x0mlRURH&A*bEp*uJ}-Oov^EZx zQt^~q;wknjo?>_7DYlBI?3^?pc_ghgKZi^b`8@8vXOAVEV*Ow^{#?oc){|p`N6Tn63;#O_p{@U~{D}%=LSM$!f>Z14!ioI|cJ3`!$KF@qE5P)IP`w zX#cJYYB`;hx$W0G?aFS_Zn6eFbnGtv-gyk)6X0ic_0lB!EZ^q*dx;i-EnFni_7J?A z-)h#&h&MNf*4|a6wicjfC2@)Y(eMbKlFlc{B31oa?3{B@Y+`DAt{XGk9E-p=-H|;t zxrjVdj9q_f*&{#nHaB_QiIIcN8`urNPb@NF4HlVDz^Z^%0jqNJkKpDH3jNBo`Vo~Z*oO_NZ2pUjhR-=UZG54pDo9C~yy_QS}C%gUdcC!8)TP4*7eCVy8_qkn~qQxCMB+& zUivkuW*W~lSk$EMrR{)tQVqJF!NHpYb~NgyeF5t(YL_7!t+&A6-?K2~(8oyoD2gJHhD&WLp$-Ij)(3*k?c*@CgKnuZq}^3P9u?#{b&$th1$o?VkjGU)o}DwJ+WowT zi|hcdpl$jg6nFjjCm8B!>6*ma)!uaj?pgQ16Q+lB=YQB6i&?_P6wEzDRf`4=G*qMW;s=ojWnb^_jq17IEL~yr0B8xyb=Gq*nBY7ktt_u}eLvM)b~P$YMb zpWg#scdhFFnIiZEaPSn~)XTuHcfoFVA@`G;Jo_?KCMh*ZJ6nxA!@yo5lj_rW+(Rjn5+($@ni~2a*As?q7@7Ygv2MhlUO?dCRafk5(TZ`Tt6;ZrX z@lM4%74Lkhywgww@&DPovgNjsEc+`NeDOmuUD%gLTV6^r-6M~vYIk*%!jS+H62}xF z6QFI4g8uf&1pq-1BtZ%wxZH?}suC9vOJ<&v=iYlRjO}wGh+rzzG~J;-jD%u@eBo{rZR_c>2u{wEh0o-WeKo^DUBDNpLD8pfOKOhkJAmu&osUHoiY zjiW)$qW1?+n(FrkiL8ORkmNzsL6GnCNg{sc6`MiP)=I|>9}u!KfzP8DJ!>;0x@l$= z48xFZI;D$hx)o*Ph}$Kw!OD)y>H2VjM*O34e>vM$Cbdjr8Mf(SowzzSOhdzt5&G=U z(DZ%JHq_84G0ha3n#zUCk*>80sMScGX5?D#z9^M=6%8!=#RQ>T3Wa(t0Z^H|ieUk04vh?c6G zodFo^Wmx>&yOD@~H5TRJ{CjN>%QR%inDjpVfPyGSXmzPB1lq-akAQ9KzvsAb0`;NOZ&pbpX?)c z!cRy&Piq~v>toM$Aei>L1e@g+GXr+rBSDUGo?aX*XX^`)nF6FOCA%@(@eEt18soX9 zOBvavih+sGJpeS#QVc>p%?wLqcL^?=l9noP_)Kkf0AB%L0bil+w_B4Rfcyi6{6yAC72p<|i4YU#RRl_~EWDw|Tfir~AC zveNqC`;sQ`>bZ40Yo-|yfIWacfIWacfPEdX-!ZZ4<**MD7f4)POI&U)ak)i_%LR$6 zO5*z0FlGa}j|NZU5 zhB?daG9BF2i)4>vQcNmwfA|;>4L4-x><995@o#qjzNCy=OaCmKp?K7vs+}=@ao+L^ zi8Y8}?=*QWM#E?n{otD)HhjPE!_5~(*~ntDnwE=S->#wtx&{|F3pMT+e_B`5q<1nG zeOqtql>Xca_xS42~>HBE&Q)$~Y- zJ+A@Zmz%V$MfQCNYP;ZjZE0;&$zlPrclBojm<5;xm<5;xnB59y&$#PH3lsnpHBi(# zR@5{lQ`9u2ps4XbKvApg1Hz~fx~7S=U~R2b@=~mRNhgk1Mfz>FkRA4-yzH0rH|>P@ zTZ8G@a!ez6F7wD0|2pC;nJiei%d8K0;;S;1si$2*=eVe|3R8tRN!Ky@4FGe6Eam&z-DS)dmOHZ4P`HkNDZvIyu$Rf##_i4o%y^hVJr)HGz(O-SZti)K$wbTb$0Zt}(l(0(zdW&l8{`81n#715g7{ zpC(W@nt=0i+y;>eM5eAqCM_44w4%tQfyh*uZ!;Zz^`h$egTYRa?QODXN| zzfFga(nO-OdbORjDG}hf->FqkzerW$Tb&?}9W4``!2l6;;$280D`V)ivyJC}J{$rIj?M=Q^ zIH-x+!w&cMX@g%1+lPD-%X7YOcMIDjzDvp1>&j2CE%$%Pm9Cesd0Y#Sl}`d`@1V%;U5ac=`Us(t(T~X=j)+qQf!94g$={gG0{R3droM$ zfvanVTQ+N0LdwQ6jFusIuLWjnA-J)UvfTwPfL4H3fYz>{6@1hH@(&#Hx7E2C1Amaa zK=pBa@TchUv z6aRg2%F@*_Vmu(dG9;_K&`YkIHsEqB>!KL)9^`q5CR!tRTduMXBoe)KM(I#8WHqttpwR5<1T` zvkD*)AQ2!DGVK7RPXVPHO`>WLv_W11d8uo8$;jm;qbM&KATL$POR4!-%u^!i1f(V4 z(WlL$pCz~9MCEGoMqbmKd_fnZSeO?SBk+ap+`X$X|9)?e4XHOWa1nn`+4qFMzLIUr zPYP5yo`Ljk$bA^3XXVNUI2%ThJ}bF(W>ySeDSgcRYZ<4WK8iI}a+SIs6C2Yus_R9> z@cgoPR&&Ua`TE(ZQ0eVbgrQkQR=~q!6w8?*j30`D+3gbvj9Ia!g%9o9od<>mxD3 z{}DxB5lO@bFNq%6f7whG9}~x> z*f1Rn6IJ(dpes}%Iw7G~4l9@VLQ_)R5)A>F4(J8Y3!oQ3FMwVEy?~_1b`0DbB0wN} zg6!F~>}lq*r&*LeO^`h+WzUIE7!i6$$83_Go@u*uKPj~#uOW)Aj{D^vv&&8r+%-~u zajo4#jUVBmG5U^j8Wzl3Y**QUzDfR@p^BIRy}Y4H@6SihwfLGmKlYA&xBq;+;mrJj z{9NapTV6uOOX^W{?zM003dTWzEIzHTYl za|5<3Z~_;*uA^fk2&qBrKqI;u>bun%A#z&?O| zbj?1_P%q69d~-E&6Z{B7QxHwN7EP^OG_{JNsRg2Gm1z2b;R0JN(IDa1+oEW?!sus@ z276koNu*bgkL(VP6P}AAauhmC_o&PUUTy9n6fdzeqH1XcAat1`!FIgcTG%P-0F6XXNzmT{ugC#xd8LtoFpOq zjSNJ@jm_3)#u?~O_LOEKH#0kKp~vaPJz>u%{*RgZ^YRAPT#+#=9fKF}g3F%A67P{$zJx^nM&%g*UP(bzSq!-4b875t^6J ztyAfIQ;m7Vrpd6XR=iXuKA%u|=h@=hw|Q7&@zl!;X-2!peC3WQzhu4$WuKB~n>|c< zDEV3jw^d~L^F19GYU5MgS!CbdiN++^FhW!QY!FXP=fW_1JZZ%|!({fs)lY%}B45+z zZD1N%N7R+;i0l>|Z?}eQXwkE^o$Nc&rkIVoPco6cA|L#ed;PpPOZ+X211v((GYP z0?2dk;>j1;luOa(OgLJ9?0&^>ShLw|>q@+L+;Ad#sv=BVHo0C1<}VN_xo29*qBb7* z{g|!r<3zUP+UnTC@q(k_go@iFV6uta;ogU6f+!pMd2GFp0(mRbj8-0)PuT=XZw&Xk zpz~{yQThsA(LBR@V7zYlW&VU8h7vs%D*`yJ>-WCN^!ItYa&~$mrMI#XdV2M29po$F zi#lO7o!j1|%f$L=*DpAK#J&X08kdpXP5C_8(j7!|bdDL%mJCWJNX#1DFBDpDrKpp- zi&VGR%2umcJ2@eoNKY9-%bCaeEUdPJchJLSC*HopOr^!ZPh&f z4eZAWBP_z8xO-{lDVidmk5%cj#4mFWLS!_`aVHjjGX>=7Ouf%n&ox^_%~Vv)S3~Tx zogy~$z{Z}dE12lSBsTR_-Em7>#3e@AR3c;rRc$R7ay3=0FU(gH&$2S#Ci~o>91|!g zP*9+tKtT_ag4T*p0%HWm2#oQJ;vM-KyeZ((7@LJS2gEtLj&rzqoWm`~Ib4WyRK+(ijFk`W`AkEf`M*~u@M|ZPz`smV)dp%{yUOP(^`F-kyUSPfpI0{bpFfa%Ft$1T zP5b>fMIioSUQc7`VXJd&{)(pMEpx$iJxcERcItN4x^uL)y>s-2jI`dfmbpl$7qXOG zBIuaB8;HFTuY3^I30B8%o>oT=RD;kaiW}n4^BrvX8o|U>bnFq&rIw@6fRx=qRxP|c z7F-?;}l;L>9b#>j=OPG`nrKWNn@@di7R%W+paUiYp&S$uT z@lp#D^2MA`1x^T@@MWA(%{if37&Y=js3wo1Lw z!kS`Q*ib_odsH{Er%}__4H7aaDr*&TEH%Xo^Lfz)FD%T9gXM)MJKlj9wlE_>ECgcM zH8Iq3VyG2~p$5dTiWt8C8L?@Kt|olm25nX=S0LaKGD0xNJ`L)r*`8w9RL4qSsMs*6 zhFyoc*wtM%uw6|jDlGwBX{t0uL6>G=YeiTqX5fKvPncOia`!`W8=Ct-c7g16O?LI1 z?CM3bs{`4E;5bAJAvg}faTxAE505K24zv(x;R|V@k<&t>NDB=}m|Wt7gL{hqn2x^o z(PuImc@s*$7RwmT1%7C@UB>v4u&J}JGRA8fEL6vsr8Y!26Sh8$=%Mrv zI&Ec0@oAc*ox6MasQ8k-r+!i^q^2sjmMian*>P98wQO5(QeiidA4^;&TeSyr?c-%9 zRn9Dnbwj6MNU^I6e^vF)?THw96X{G}EYb1gY(Ocx^wHy#%agyUzyGG9bcCa5EM-ga z?J%=c%1eH{bc~^4vQN{r+C_02=Tm>DQBhUXwSCKrY<29kV2)oi8wACHaZkQel*p5N zot|Aygu3wB=1-46FWeSM9YdaZ0NkBveQDrTdC`id3Hdk{Y|-zqPA~=Q}YF-fi6({6?%V z`IEn449lR1>Z`F+6?q zAiltFS~|@u+f=0R5`U2`aOaHTh}GZpsQZ*^FT~n?H6GPbY)f5Ddb6^8Th(=7W$$9X zF7m1hega6I6>t1P(v~iLsnAlX-9GR_jcoiO0kClwG0kU&-s9vgP2(?b#VBqy1R~r( zKi(`xKq^Gp!YwaLrd=wbzmQMHuM*_ZOr%HNQ!c*8=*KX*M|a{$Pmox?DuSB*yhrmI z#vAIop*S|d0SyQ?s7o>NOb1&|Xj4tI0^2W_eXPVxz8w-boc+*<@4h6bV?QLGqp1)= zbsFH1I2txJ_A4&YRIIC^={inmc}^(B+%-E}b)#eN8c06`%ibkmuOBU41JiYO$2DW6 zfUkhBfUkST*Hepz0^;up@t4D)bJ*Xcb~TLspnrk>)xG{@=lYjj)W2-dzaTIQfg%Wu zLSPieI|N1{Fbc%*%!r|r6GNv+3>_eb;0gjZ3E&C>t{^bnffj-*2++c_qJ?>fbG_K% zT!#+lm9+4h2jj+M7{`1WLjPp{!zW^k4$1GwY>5~r{50D&N?sLi&!Q=XMx+Z2^0{~M zUhFd6aW_^*ZXbX`feEea($|C-dWgCjvY2jf@r=F z#&i@)WRghTEXA0w-Cq`Mf70VKrcr$C*+7`JLr!>DdCIUbU*y+w@dM4nYRNJfR^ zD%~ek$n)4sK1CC)q;F?yD%UI9FmKGz;2(YY;19fyrJeQ|J{S+|(X-CC0br!M+~jw@#3&MC|f*xKY^NabpeG z4cOggN+v)pK<#lr?Wt;LwR73Ghn&O!u4Q$hL%n~Z)W2vd_Xkl)2 z5p-Rc8wVS9J<%}_QP);xB^cNNJM5YrsyRDUi|kN^xNBuY2DTf&=1Xgfk=DGXcCTU9 z`i3JfMNQE^bHwk}MoCO-rG@76#f<%PzU^f#5;%&g23R+26&t$cVmGiH>}i(a`-)~8 zj$L+P&BlFGY_c$sS_@~anMk!`8M_qt!vq29*)sKf@e~GO5~yd_)Kkl;r&gq%8c@&b zUSMQ=hcE7jh&TC8?kT#VV=}LLB81iL?JZw6XBbz~o-$AJ04s_(re*{u9I8W|NQ+F7P z8O>*Ke?HkmZsx;pMl4|dj*UWOq7fU2HK%!o4|9{JYQ#wH*@L(j^i)-5ZRK3{GlPP) zf`qA9x~=FQ4gycdhUF;O@l*>NexMs#;M;-XFSUhP&4xB<6xv4b!u4G15bO&p7+3xL z%(eV!sqb5fMD6Tn2*d}7&jAphJ}?wuD8NvTo}rv}s%n8aZPJ3bH9dg=?B)0(oBgo}#$E>OS@0WPW5dx#K$Z<* zZgNdf6e8|*EwBPH;AN;hLHSbkD$d?X&-Z+D92C#DL&epxM?(c0p-Ql0YCbkR+oWD- z8jkLiJ(U+`P*aHx<#~BD*$&#CvK?T)LCVBFQYM;N5r7y2G47fe8#ysHip1CeVq8Ux zKTH@nc+qf#24gZAwMmUD>Q;`hl8XWI)tCw#t|zdIMfi(^t)&J@t>h>EIYSI}pRbQM ziTAljd0Qh<67qdp`T3fCmyFoJen_h^mpZy!P4ZV4JSSGvuRr$&a>y2p0XO%2xh=R+ z)Hv|G_NC6D`NWYkVl*7rx+?>ku#q(oRAgP$hmAZxdR%Bo#74u2igz+1Qyi*CrJWy{ z(4Vy_ny*R$Ng@VEHFWpI)!|Kyej(ZRYi@`z5i^BxcqE54UpBIFC`4?;5ns~!d-nco zbQwyiI~u=A`uP!&#Ku(NUc3zj!9R02DeC*P7w=_lRksPD7S=2!z=j%7?05#nhDIDe zv`x)&%gMfF&}(Wpy9}nS?Pphj>4B7f0!W_ct`u+^a2s&@TyVQl0jen&2MG!!sIDa_ zGnb&uq6B4v1XU$L-LR<{vzyMt2_ms`_+17!AV}MOiLBaIiR=N;>i$t~V`}7AvUw@Z zHftm|9-VLI`X|j#k5T8Zf-`-a^1vb)4TfIkin{&wFK?%<7R)0VSvueB0M!UIZs&+i zTXPrz3v5gj&BhA#RK~;%%QS-$6QI$> z;=#7{d0c<)_r6IYlD_sYG8yufrI+9Se~U5OV&UEed$K$T^dH$sV(FJ^#AHO#@2p0% zf&8GCKHef)^JB=D21W$P|Fd^x%WWgc_E!*k@x!n@*q2AzlHHyjwbd>4HW7}F z0#J}Jrbspc+O2S~<9@{b!uut+7HkAT0w4i`qVmZWL1L?_lP9w>Pd+hJE)1S94QaI` z<^$+2sC{G?yIfKecK;KJW|L){2;TS4wX)~=afx}#?b`=7^XUA4h-yZf&A{JoFhw3Q zevfl%6=Ppj_-K<#%lBoM)n@*iq5xB7)DE2 zVzWew*fcC{mq^K&OJdBWFpfmNGaJAoa>M@o|0XS;RHC?nZOTYhT@&f7&4c4Q0kUmb zvprw&eJv;vtx9O_Dh99x_j`)~Y{&iPQUY}--YOyhcn)|Dc>c`s`~^Dojk^nVYH`4^ z2giPB$KJ{ud#mW!Tj1DNIri@<*wE!Ey_+rKh1kJ>T9lqQDb}^Fdf5;9RfOArexcPU zkiXe=N@OW}QCd#fe&Y6UWob9dtG@v@7qs0-T|?0YDe38^8{L z9XM{Ld}n3>Tx4*Ohjx+e%tf|~F0u_Sa+QnxuNiyCcqEON@$8Y}=2RL}lXTA|fctH7 zktIZqwyH1xG;?S1k-A(IcT%)+UyBI~^PWsg3qBJr#dZY9J3mu-=eHdHK29gCRGuka zc&bu(uG{>oFD1=uV!5fR*cvO8v3`g$1u?M+wq0Agpx>3`MhfIFBuHXu&L8X9_1vIu zWz0bLbGwE3mdU}AWIr*TbQkXz_zQUwR(@^ntr z{(LNolGuDjtokjQv22T&*m9An2M*G07bDm6d}P|bk2T$PT)Dh?xr5Ce-lStERXj$I zj(rH@UZpi!Wm}Gn1Mc0C19%(oHsEb-T803@0)hnu>!lK`7hIIq1NnpCJOt;54$eDS zaNa2f=N$;nR|V(aOc-r(y&YzCeeflSEL$mfwTboZ`lPMcD z=sUfSpVw6nzOzyYSb^u;Kl}YSpVNDr#s^YhR*avViTBNm7BknY6r_k!RWZIh7=It_68{x#sB}dl#J1I?6SM^McH3zA_iji(O9>RuUpulC(e#g-?ODkEX zwBY;`zY~OQ}AP_TJsN**-)7C z>(enEpmoi=O*oS1%1Kh&=o%4OZ(@ozDbQKxI zkdf}mKC&IzMw%&Wnx)!CV3)Jjt3i5?%6@%4YPJphPob!P&vO0~Rs{tl1|$X~KED87 z`*QdOK6$rR0{n9D%ZK*M^~^8Vi+;HdetDH&{^OD^j3}IZVNgve1@WV}s3NEx*D=3d zQiwcOW1nJL{VoUna<-&v^_If?XZH1X6C6FTTVxrxjotRW82`6yTY~Mg{u;&)-;4X= zJTU!laz||Tw+Z-H>?Cee94<%mKkd}fK@skaZyILz8tQBkM+ytQ$bqtH}EMFo;=z4xHuSHWU*EjmS#_wpZHks zxwA$>`@h~3%*k6uBx29Ztddwf&+aM2?M=ezXFke*F6qcnhIJdd6Lzvwk@>CI#waWm zVZ82U7lqW}(u`i8?Zt*#$4?~|r)ritED>Qrh@WR@`V{m>X}=@Bb-^WkE7~3{c@wlS zjwHTnUqxwZ-D~Nm^yg`JrHY@Yv_KqV*GX@I{-1xD(09!!ahj^f+(f=j!gfH0+Iwyy zF0Xou;#q2d3|H2XZuvHH{lG@H@A!&i5!X}PlCM(5Zn~=5sAf*RRcG&O^ZZ{>d6mi_b59ArB!1qKhMn1sT-^6Qgg8FMnkx$+yI349e$> zPiFXYGSS>CQ9ig3jmx8U4$*t@Hm=0ynU`LAt}+)ZGKv#roqT=qx5VZQFE5Vxdws-z zt^ZBm;vY%UvYPx^xI;cQeor=JMVU8CF~}(iCov2UMT_ePmOe_S=mx8K%~K2n`Qf*} z`#f2zY(|2zGr#7EL6gbsE29VWmw&MP%>h`{1uwRDD&vn=sY2Sax&3#dl|wtPxh`%% z*WRrF1$G6N$+2oxH(YA<&F@ht6TBejF`-uCglS=Y_{hIZXJ9m&EcrRN`j`7oiK2J2 zJ};8VGWdij^nU*YA%%R%Kedz*DTZa52X{`|;Z5oe67|;ELO7w^oDL8SuhA}&4Whfg zf&wE@k#0H)auqE=9#Kuz_Ei&WcF9rOV0U#PaJ@DUu!1liTeE15Htr=}Wb7!iYQ+Ti z4P^s+1NH{&4cHs7H(+nT-cEwOz2Kg7oiR&@|3mzL==i^t#s95h{NIB3e^vbd?qRkV zN#p3AzNlAG)`Gl?U4VTGy57%tQzE=rgj`nQXqrl!g<$Go%1RBD&#QGg#Jg>(B3We~ zKQL8<8FgnCl0c9(t-i0b<;3S|3q_TMsWh9<>77htZc8OPmh}CxKZ}Qwb3`L4j1$3z zT#+F;+kCQ&Bt>F&j^HiraFQ8cDBW69lUP0 z%`%=89UNsCvDmRs?~h{IQB-MmxHZqaS=!|Sf8DdeM`@4cTzh=f#^Nihbk4u22j9oz zA{!&gr?ZGPRiH0)s4BPyVnC)w6w7mcWcrvOUG-I_b+04KQFY%{bjxys5~ry}!8&(N zsdeWX0PQIVvlijDr9@DjJ9qr1M}T^OdMAK-XInbcR6?mYL*6gpN-;N&?At6j%~F!C>La)MiUm_^@4Y1M z@Z4^{h4#ad@13m(k8y_u;d7RgiY~Ie(wUoPgyLlOjnd+2HkKo{zmTPgehuRXi6erf zvjg{BnPKtz;;7kT9ZCte6>zat)eJO+GNr&!knVUIvaP^EvS-?X73hKEkrGoXA!=9J zEgL}HTk`sLpzd0%rOE>Z00saC06r}MegTTm`^!*tWFo+I2G@CD*V&X)*V&W{t~2`s zT<1;K`FqM!=xUQLLuz@xki|eM#7AlmvazM0o#cM(LG_8SKXL2^>1S2YQ)q8r(_eg} z@Td2^+&rz3Q4YVY3?(b{yx|XV(1Q1+`vG(We3Rhv;b+uaunCM2=U5WKbv;0 ztC&WW1sy<*cCYq3mG-d1Ep{+uV8~vkA$yj^0$^32t5xkGzoI)M3sE763Jo0RM#hnn=H!=^;XltBm==3=&SB!z(##;+pI$AfSY#S-HHCG~mwc*&X46LA@PafT(E zQ1m2aj-KzOPbW{8{K9Of>W-P@Rdo}NckBl4==DFk|D{VpbSb@~mr8%sPu0PwQ3i); zVeIIpkBI5$NOyFCTr7J?*KJ$&4cC*k^7dQ}gdg6LxYkCTLghh)rD&V~u?6=x>dM!^ zf8T%!05$+N0Cq2ceclBVqvp9DJsA`5^1;g=+RIlnFJCQs`6_t%m1Ps`D|A_RnDRl5 z9bIjkJni31&a}kQvdeeuzyC1fOs-jl#8@n75%w-~t8038!2$fGNBoLSC=SAz0@0_O zDdoI_5vY@I3>TIGkq7E~OIzRV?O-i%EmgG8+B|Vb1TK^Di({xB+cEcvS*H1cEp;LDVvWs1*sK1_ZH+ zApR82rSTju;y#mtZ)bE0i`d=~6M}_cY$!B_!Ca3)L%)*1GTASB>xm=G`U`KDZ&{O$r2?lo1AJ6sOK(PZPE4GYu z>=T47haiQRy6*eB>YL?sm>fR4@=A(;+*^+6c0g{c$6F1rT@}y*&;rl`&_bE);X5cL zw5s!j4>twi3is{`ciPSF??i}PE6ABA_3zof=WHR(3y{usIJcC_v#%D4D8 zH>lH?PtX2|?GLj!yH4wd2)h(gwiPHnGX^YfZxT*F^E9nLmvkXg3x6BB6LzvyozTkL z>IxAlX^BcLMs_4=k%6fJeHB-gIEm(};X>ko7ro-GQKR#az-mx18W;xFEL%YV(KMuM zvVt7fHIRu7-E}-g^YjhIwh4rtdGS>kd(!TFC1Q5t#{+f(b^>;STYf;LVu$E{uw$-( zV-9=Nhk2_;=B*kMDozW`Zdy4V1!|T>LB&7?bcPq%d}o!svRILfpVas%)4@ zR{{&UL^F`962sGU9AL*OnWSVcb>(Da>tcxX#lpHc+2qBuo$rvo*u#p19UCBqLlZ+Y zBZg*?7@9x~tB7H``F8asoVwOq9S^eM}r;mH5XRf_3E=lwk3hHQ-Q=(SQTs4&V-Q`OdxN zMJIp^ZsGGvMo*H`IEuQ5x$AJqzS9YwIQR;cma1V<0_C+{Xt%(9+{TH{*^D)%J%51Xm2 zG{8hkOP^&FI|aqZ(^>q$;Ovl=X-%*2X;rDZ6_E+?lH?D}s9Q9fEcxGuWeeRbDS_v! z?jl=%X^zs3a--}iP@ic;AB9qu(wnj)Yw!3w9HmNH{AP<|$v?T~dRoytk+jr2d#Pn@ z&c%{>q@TldLt{03I#FN5{gK{bSm-tX7z$cNna!^Gv}!4RR}dsW7lr?VkorQTbS>vB zQH$QJ#G#_9=Au&cj{Yc&Baz$nD&o0aucZ%6=uY~IBMDCn9S-M9dP3SpXoDP_G@ zGm~Segzm#n4oHrzln33U9Q$g70!;v#05kz;0?>pPK@(nldUvN31_HK_$1`+9)6OEA zb}^!9LqxMO!Fw?a=vY!<{%$$>oX0ZFwOFRvckh|^m@XUEQNRlsE8srB@q(G7+M?x) zy9LFo$;q^y5!yVLt(}xDT^|`S8D0D-*m&~U6>D3^wo|AD8w&-X)fsn#OwM}D{sV70 z0y0hh2E;6%Lewg-cU@*_^&RrE4h5;;hJfIL>IP;a8}#f+i$-3$N0-qPZ`Bx`a3IFD zv8h^ELB8o*NH=^1VL~tp0?V~E-E&=aBma0E`RYP2=4J@SEY$>*p>)U=Ejt1A@J_Z> z70N}7+&B6HxCXfPOmOYRdyXApF8GY#GY;)DI+@St6n#bqe8ye({kYvrzh4kCRP)kZj$^VTHQJ+n>0ZS7Th>zhEnNt|hVjGq;%+#NO8=W| zn6b%^IhP`hy16kpY1qk)-bEOM9$q8#o0}m&E~y!#^J^`Sd-4#~kT^~RBld(@PqIAM z`{R607vhv}fHvMAsd~1`y%9kM%Q@tWwOg**ElA&U(qvqmTM*f`j}rU7jfkz=%4F~h zB(bE_GK(HVPa1z^0xT@|^8fzlf2DCGO=i=3NkrCX$=l+sP|0ye8&^PcG~%QtjSwp1Tk7WR;C%06;@$3vFks)lXpfnmE_ znx<8PP@OZUH}1c=1>=Tv?Y1M`A+;ZR^|pEyc(ruy&V?ugvI4T60 z+rZA7C8y4tB^R7G_6Im`o6Z{}3lz6*F~u@!MFD1OW)b&;&ur2!c{12nrB{DuVD~ zL6M6|z)A1$;&CF{G4w_ecIexUEq)z>l$McXk^zPD3oh??VXnxccPj>)m zz4p?2qwZgn*vNdD?`cayM3b_J%EX7l(Z~5LVlz-2S}R{jMyH0il~zn%;&2&8p0H^R z?mLY?iT6#B)t}|YGa{2f@S3cCp~KP6?foC?U2Br_(?KudNQx}0e&z{FU0727lo5ji zq*=dR5SAXpyGwr&Gpl(L&Mk@Q%DUw&cUQSh7EjC%(dV9U#+Y&B;!=HP={ISZIA0V# z3ur!FG^h<(4>G0&7LuSEuP-X@xRA_~&cJ?-bC4&i zs%6NIZ(HTo^pdF_`JI*7p22AK2nNX*q z=N%Fw2$MpXbm%atnuST#VwhBgFlkK^>=!Z_N#i;BOBz#?anEzIhDm}=bykuTv7@BG zmfCw~6w4?j!d}jnbm87o^Zl9RN-fljnljv8Ea|Zq%5R0qc?$(XU9;<)cd$62(A?U4r$>OQ#{%H@G;iN{Q&9SaswuA(C$w zw_?K5ukdNQYAHyPR24QPD8g{IQtIeZpt`8a(_0aic*effK6r%{%T{BvmP>prq(_QM zYqJ!K=gm|;MpDRBJYGc-Js@F;jd-5()@uF_Ref5*w;g=Y^lj6(YzxHo)pumwwyo_McAHkD(=6sHBQ<0e^EOk}Jo{sp;n~P!ZfHm2I`-o;Ua@dG6BNXuqe%Yq92B#G}26O8uR_7uUHG zpJ$HS`lfeYp*M}+kT(KcuKx1KJbqKS$~RUWmtMFB5?3q^%ytix`Lbe#Zq?O+H>{Q{ zmww%-^vg-2@89yrzh=)ndOnZ6`cy%{_N?D)U9#ul>8n_BiIfO1+36dZ{QvHyW z#SOqL-KWoV_Yq@-f`<%;PNiziZF2K!sKf%c*%b)5)(Hz#d=pS83L_4hNG`*wJ{DH3JrfuS%H5{(ICH z7f7@j=C4NMezmNW*q~_Vt=%Q7xSmZk;y{ay$iOtxV{GZ3j(t5gu;W?8)kD+reXkII zRbsUrv;~Z17I6gx?2~cnt6u;4#2sfX4uj9T<8MDHB~dH?2X1q zi(U7|4wZuK)c2j~nty_Aerf>5y?5o-Aki*>L}MLD)DMUd<(;XoWrwS)aHA4t@exjs zYQ>gW0H|ySR0;)$NM32V{BeJ{X=iZLR^g@%DIt}bVQB$;7eF()_*uZr^DL?F2x#(_ zbTo(^=EH0UTYBu`fSNWA3~Gm_MPlNY7`e!*PAsj8M;@pQ?FS-qo%fNfHzVnMD#y_LH2c{f&!1^%&L;>_ zSyU#4I=-`SQS=8IOwo^@rbw*&l41kz zmDYPxe599yBXc=2TH_dwp$56^9(KX7R5n@K;yX=@!8Oa-MMe;8OVxe~=?t9#k{IysF*L-bm z1rt9B+mg+CGQ>s5Sk=RKGvX5;D@|@PkDn_J2UZPmVTTnv^;V(Qm%M>1&x~fC_VP}A zL3DwUJAFm&v}`l_B?BHg0NbNh=KXw@vC8}Cc{p8j6nv1M|G{!Xkd>`~o}imQ`f zZ4*gf2~YQKG~6oR|NT(Zb(M1cH#gE%ur~K1NP1c%Zwk%Eh#-+^G3iUl&0f1@?=yq> zfb{1&1K4bvBEEg|#D4)!k}UpM?ASi<(lZk6dI)-^KYymDt$8}_=HwMb}A7ZyM$OUo*ub|ZwJ`0se^6b z)o>6+I;M_k_>S!uK6NBW-;Q@FRBl!}@MBbv~7vgYdU4$IK?bxQ35gK zBU1xqHJ9nxd;GNc8C^yZdc0a(^iD+&>*|&tfc(X_lstz`!BFqjgss2_Y1x)AQSaqH zgCX6jhXqN&f4wu(H>1B~P?PNR{8kp9TUOqZiy?UC%dXO0AF z^&VN+iP)m-=ZfbHoXI=*8Hq_mWH>}O>F7>dT(w>0;M+8$E<;Y(r_{xkZ=0BC4#j@t zQA_t+%h$|eAA*u8ZYmwW%E-4W6sZ{bBT2~z;|<0ejQ0r`Zzw1^tb5rzUe_UBhj@Lz zc-_z9bzhCweaJv@>?athUydH$jcD4kpvH-au*6@alPW7L z9Rv=3Sa4C8$KQ_u748-@fllx->jb0uh=)6}&7riL4Ctk;O!(R(NYWT(GeYFg`h8*#J(RSpKJwT~#q2DAG_%jdxpfG6156EqqpH|7}NSR2CRj>BY6OT%POQ^I8a2OMh`Vq~69 z`O}maUkMe0gT=>}li7eh@vL~@@$&Ea;GW;|p-VH?)MV@wM2oV~+a`nqdVh}Ry%Jx& zXh6=xTI_=P#FU^%Yq1LG<<^h;Vg{AMvbx3e}HDS;yF+PgCMxJZFNf^1zr!Q|1G+PZ*sl;G~b1&pTT}Q}oPy{>->Yjza4&LDUJt$gm@9`hmj$ zzwTp?7%ui>GxFTnBDxzC0RIwJXo>|Y0FZ+*K=lAf?V^%R)g-&qL;x&~99Yz;1OglY zIN)4yz`10T05WMCnQTi+HiA(gZwCm;t_ev!BP4Z|kklb>r;3yO_xKy-Rf@A)ik3a{ z!RX1CBW5E;GZ_aQGK;5Foc@Aa?tZ1h@M?;(D|(BeFWD|{J5alY?(artyp6zaF1eZv zrEEAhoqc4Z_caso?8aT*@H51i-wm4Pw^K)=mS2Cra`@{B`MzVxdvj{g0zT1eDnwe6 z=%%+?rj`R<(NG{q=K0EeWTW+UBrIQ#4n!Y7-rw(bJf%t-KyJULs|&70_kna(t603V z+Vp0_hTR8dC%RCba_G;nRZ7ErN*Q2b#)NrZX{9&zz&JkXi{sLQuH6yihRW&dpN4WT#3#v#Ot~XnYYd56A2mA2%sMEiSvW1(agc^6mbr zt{UwgtQ4Dj_a&5E&-y!-9R-o+;Fy{kwmjd(#0&{`Of%M88rp$v6(Z_YXuPQdfYoUK zU}pjA(SH5LQfsh#o%4X2Trz-e0Nnt(0dxcC2G9+l8$dUJ?j}I@S!*@qvB0Jywx$CD zNdJe^wysaxjO?_{P*2+oIBlysZTmongOFQinI|*tpbDVH)PM8H>*r+&XFsJDUJPa2 zFOB-E31#--AoZPWt@9SMgf9f%X;$3W>GWMX&M8R~g!rDCFf=}x2=~rEwDf0kTS|)} zHcBGTsLNEjUDgwOXtsPfK$I1f>(kSYd+Bx55YLKy+qNQ#Lrt@>rIP>?-_o(^n}$b& zIQB)Nw2H_|CcG(bw!$~GouIvQRqB&=CJg;JjV>X4N?9XB$&$f$?;Ty8|Bh zpVaIH74cmg!^LF*Iz^(80uZ2#%>AnvoqD#BvH?Y=seT ziYQp=BTj}cFrc44*nY76VEch8*pn(~*gFAX0E9u;gn^Y229`<~SU?z55e7*c)8+_* z-V4I^TCbLZlF~!<#G3D?*r24y+#CvQ84ny)&=iEOPJ`INhGsk1(qk6~)URfR zLpnph4`$(QA6?y&G26E2Qp&C6fYDq+i{@5PF;8bGxkWW=VyOfFoS8*V4F1k;Z!8i$ zcpIr+N3CB9XHUIfh7a5s9Z3rq$!%S4-PlklBz_v-^I4YlZPkp|MlO#JkFp;mo48j= zB-{7DFk_Q6Yb^0`;?AQN4{6)QevenrjOPqd5I!?1l#)Itt*RvwOr1)T#uKX^>$phk zO1PAFqhXy|t$Z71MX$?+Tbsp6vU;i?o9d?eXgD5!MeIFZqQezBM1>bOJDgy9V3$Ng z>1vX~Eh^+o*+1_P-&%-otqb&tzm;~5twg{~3V7RA0x7*f?diV1aHtb36e`c7a5kylm` zUFYjI#gt|_pfpQb)$5&UV^Lv2^BXjT+GQe&QbEw8Xn3*uQ?day+(5v$%U)CP@u58 zd*<|K9EkM({W6cbRz+jxVga+!%51!ip9TjBU)QeE<~oxa5(rz;QX7C>HZBrn~JymVFa(gpIevKnGS29p6rA7^ZR-W`&=T$A?Q z@4cB0#oJI9ajbdb{pJTsp0q*zh**X6n{2%GcKl6_Z2c6Ek95XH?4y8X>pI@E5e>)p zONZXXQmV#c?>Z;jG&O2i1bepQVaswT_AHHH+qc3<^MXhZ!eUj$vWsf0-l^#M z4#w}*^?XqI1Rf14#12O?fRhC$dm>J@(MraKd@hh+keSvsx#MNzj;E44-fra1Yk9DH zp3Kf`Iw8a8rzv_po{XNdY(`hLh+^e#2Qsb)H+$D<=!?n}{I8VWr?fd+B=dW*ywU|; zbcbByYrzSNDPO6jADb{BrC73SzmlI>p{s0#B@F@(vB(=SpLEk|o7h8P>TnZm-L5kpzrWqy(%OSM+ZC&|p^ z4U#7)t?@V0E3Wu9N(r}x`EH#@zSB?T{K0Zu^KLvVbU72nLo?Uc)O z__G%)bS}`F7!793f0A4&ApIc!Vkj05;)|)DRqIH@$i9b|oe-jc?4QhEjOA}LD-#uq zZnE{rOPa3d%)8vM_+lc2CKvnGneG+xUWv2Fo;Z{og!GFl(wpuVHrLEV4bmFCCmYOO zPEi`q_K`fqRTmEbdLe2pZLX~d*IecJEmymKxJuAcf;~P^PF7X*_*{phxDypcWncEz z`dF8?Q*C%Zi+-{d^4=>i&8MbDX#TlE61+>5@2jQyy@c@KReoi|BC7PzqrMOs2fWsh zfAAtvDX+t~hnf-Ew&mi$4}EL}Muh!HH!$_wAP$HZ8!BaVvgAnB?LX_3VRS>5<^*CkQ)5>Ndmc0)vbvUeq!^-^* zEB)-S(pL{FeaJ+wI9wtsYZQO zzh(=wGY8DW=D}#r_vdy_Z5NGS=1?=Ew5W1-InxkD@5S7!?dQ~YKV|D-)hGTXhq9Lq zD!+jd2Q!m7o6vx#WOeFZ)1go*ht%9B1{l#ZK?RSxAdm1&HU|`P0 z!0cFh+nlL^yhDKU9Yc9vOQF24DNvsO0Z@LuCO6y6Hxp?_L6I9&Sx;P*HEpxBRiO{a zvbG`1`n!~6{S73!EBc^l)U-{*z&h~>wsdM@KcqS~Z9nuVA!ZP|YeY{o8-55uZpA@> z95)z#F#KTn&(rXO%;Lda6Ho;}6?9D%=owX@t5kswR6!M0a6Om^st^6jHVFD>O zlg1KDU>#a$F*^{rf9ODCv8r{ic9eCEe~#yuBKNfYEM{x5BJ)e`+=*G?RAX$09PHx|{|Y^AycW z5vL3E=W>E)BGV-DK^0jhq3@Jte$H;$Z;MY958{w89{D6>k|GNn`rB)SxtTmdI`(wAHX4jQaW0Q29awTAG!}!dGnJ^PS4P?^`}I zaohds-|~B8zL;G%Y2e#N$NILxXVGCSVU0W( zZg#eFXa8l{BP74iCS5fnsbN_hW}WchWzN7;h6+F;;Y_7;FnG|@Bb z=h4VnhDHw$j|R7E|T^16@$2Lw;o1do*wJeErESU~Vp z5j?;1S0^axTiHh+XfU3P&?R$&H*{s!T)VaM*`%LlOC_}B!Wio)t7c_!&2(FNg9-tf z-m3}uMjxbYS*}n~Jx&FlX|&ho)mq86hy*ofc)n7!R+=+zD@u8-$PX(z1QFCz5ePG z-_M^<1Z5_w8=HXSIg}jzND7XoeZ+h|0~tvER6#6;uOYNN|zo?IO>$*IWGp&I7q`V6uS8>YB;2GbYPc znJgQatSTleQK&$l60Fl^qS6UwB{7HmW|XOVOhr4}HxcifI(z7jW(o2t-UmZOl z;SG2v3*m}0gT&l)@=kKUPq-Ji=i8wlxR_8kV%{$>F^P2-n}KUbG_W;d6mxTz_eoR9 z62;xuW~#&yqB)Np)#ev!@Ubo+Pr_iVgJvnpYfEc<^sI9U!{)XIPp2wO;=7R^(ilc!H>>8B`S zkKadwIN6UgWj79HGPjw7j6RB%DTFRcdlb2s_0%BswaD=`6Wf+2iuiZ1UJ?M*#=$*yv`HyI%iug zv+N8v(JYO7MBrP1Z|RzE@iM-}Q~4GTl+Q|Jiz4mORQ6!fy=psUk+bOK3q5KZD`p{P z9Jq$zVd^>o*Wz?Au{4SeEwE!6xwhjKliIVj)KvC{vNsxw$9CNtN89TYdRRW8Qj@)R zC8$0CI_w%9`WZU(RdndXX-f>bK5#t7^XVS!Ur3;z3B3;A~;w(u*cpGV(>aOqO0s z+<8jY@t<1qjLCy4=w~2`9{%bjPB&4v%g0XnzDz#NE#j0f!e^- zgd6+$Z1(f;(^h6E=|mJn^eXg7vNQsL`4SUQnPsuE-Re1{ zU%Z=SgR@kml-ELR(=Rrk)x|cwd4C;`@+31uokv3BFS#clSagkvmf}*F2=vl^FeMIOq|~Zym}?h zQc9#U5XX>hCMD)ZjXm&SH0SVS8>p@r6?G*_o3hvu$mgptivIQg>|NP%g;Y?RF8COBA-S9 z!a=Abidl%T88G4op~XDE0srSwgJ8~5B={8)LEaUj*9$ITxBRHfl{gUD^w*(ah_b zK7EX%_38$%s-)B@dfPX7zjm4?_L2{q2AeE|l*+Npe2oYA(GS+5A z%^79&wltZHRwku=5R=j-_vv!MZbgRYmSs-}C5Go?WE+8xFm|aJn8g1I?a*hsPFy`| z&ibA+DP3j%v>B@l9UTEi2#gRIAuvLFH$qVM(yy6>^fB91HM;?{%Kw&6w|H)vRZKB`_JPsdvC$%g3@~PZ)ETo-nI#;^R1FYa%Q2 z)Y{K12Ye!bT6Rd8ejm#oDXAv1rxU&)nkg~hQS{Nh0j5dsSQ{cN|xbupnH-5WVk!;e$t4%Fz#D76SfP&byL)qDOYAWPw z760f;g+UA#*vG-yhgGrA(VA16C(}p(A76wK)FG(DQ&)!&*XmJWLsK`P zl?SJlxTKZ1Mk_G{wc42Fn`Ar=lX%3mYreIZ+`I+7G;7?_?1oql7ZwxV+*AJ7eH=~u z?~72il~!YxlByR>go!!z<_OEiCte%Z224NQVp_w}1fcZo{WxW#{Ks!TN0+ zi4oeNVPj-75+Up}3%QZ*A#7Pp_uUW&cC*y44Fjxl!I<;@7qjksX-5|Qdtf%e7hAbz zthV7*b;z*yMg?Hz!OUNjnZK0r=YTnm0&{fG{osUw$HsZ`9YPSuln1Bc!JUevbSjdX zQ;~pEv9;0aOtcK4YMy1AD-oZoEAh;FtEwMnzgq@l-~Syat>MH?QMWqzs=ilW@*ZSg zlT4HfrLCw>iIY_ zuAX4jz^GlCQMqCt~rcsa2T~VsQfNO@i4RJ z)wR!J@O)ND3Zv&cX^Lk%h8Nis8DdBr4s?p#&@_fC}4C;jiO(LS@k6mWeoX2@r7&9g>Zp;YW7IR7`KH*_Wcvb1Wj?Z(_df z_cPOb*wUG?S<3p)r3z%F-YikByuPNU_(_6LhTTJKsnQxH;59Pa~ z@kqo>v-@a5#JNpXf8^a>g;Y4~9TO8-!&@b&gZ7~H>**&B&ZI>d6qyWz_ahmQE>GNl zN=);WUs58=iVBxm%2M&n0$C`X*@3un$x(~_TZy#?HRdZ0-l_7aP3hKE>zaF`nzaMl zqVvM1)_ZI#=M>pXCsoR+ZZC;Pf6B-IYsTL^CucXYFDq?d;9k%AUbAY(&8m6DVH>1h z{>;(9SU~4hmActO@4Y~G!Ho3{Dt2XouE^w~+I{x4S}N53P~+TuHW^iN4HLnu9&;e9 zQoaO@7AKi#cR85Vrem2PR&jcWR4`4Trc}YESDLg3TFkFIRR=S^wgPhH>1D#Nq;b}z z@xvea?;~;W_wg(VwS5O{AG%ZLXId~F@S0<5owImV`l1SQ;NdBPQ1m}ucOfit{JNq20)sjzng4x9z z%!@Jlniq3A!(zI0I(5;$^vf2`s&|Db*7}>aA1tP*O5A;T=T@mg)JW6not1lS@H=1i zHYBi=#ppG23!TNUR9EP6Hh-FezQ-{V%jwy)_0} zV6l!Q^&cz|SR$}QV2NOS+@Wi5I<}SIPXT|*q5Ua_UiecCz3NX9|A9ZHttdxyk$mdY zf%1z~dwU*CzQjZt>p5B$Mxfs@Aze>x5#=k94^bkkF8fY?soM1gr+YsV3VAA{?CYFS zyaUmIjq516I?`ly5wp(MD39P2t?0%Rjsl9CJPSU$QQlxgscx{)KtT{ugc)&>M~nys zp=(5*Zo9ha%mpu$gm%S8ONsA|fG(E!E|LI^O^GT<^0`U!1>*V51Ess_8Yr>{Jb!RJ zZDwx7oYct=eCYb-xs;g2@k zvKQ<5PxaK(N|ya@nb-TNG}xvMejkMeDOWaO#RGl*)dtx-z(Tmhr}=n?gF3=RPx6sQ zvwP8E{&%SEMC97V(^OMaC8x#AyNYAEQn|8AWx|}px_Vy7R&CsCcE)_}Wc(nH9{k4A zaWa!9ZO>@k@o@(4xvkO!%Hg}=fveM0n|>e5OwII_b}J?(h;V_LCR%SzFB3UwC5uyx zPG}}sYEmVre9ufbWlikY-=BL8`>Cb)ng-*?YCipIu6SN5(Z7YN=#TNVoF6LHGe0Aj z;_o#1Q+`gzsq{ARi)1f5KgSvd@47tKY1JpJWh}?(`%yX*3h9)dO*xw;;-_E5oQA^w zeH%~Pcha@oWAZVlG)bPmHi|cH$B$wgrIiLi+=^8Wc*6zpPYDs#_bTGfm+8OiYx;=_ zBQ5f~<1{YKY3?j}WTTxcI0m1^EQ$=emfMp*p7wwL^S|0nwlZph1y=(@ja4*`SfW(p z>#CJfB7785Ok@ss<#YaeQtg4;TJ^JGCL^lnDngg-fX8Z z-MBS@%mA4IG6Q4=$PADfATvN_fXo1yId(F0xe?tpBDr1CEr{wuRQKRfU9*hpnzg8| z2~pj)sP0>C&w}JBeTW0?1EZ7snS@Qdw@=?@sQ6pCacBIPedTZ#DK87#rT-D%ag87} z_mOl=-(kr4c$~7=qwt1uIKe44<77uH3+LMGZaj$>zo%g>ZEQHG;tuHrk*6-Omn1m~ zbcq%|gZzNZiPB+by7nYEuFA3}+|w0LtHscA%60fL>pS$0*>cW$6(XyxTI0*Z3Kti{ zv8(xsYFIX{U}Js`Mb#g~NN(BorP*di&fR{>3Hng{H`0nttEO`Emo`0A!_svUj!lML zn*;<=;^_#xrjA^L1;{gP-N0e!y8&)M$5vyrd$ZC7Hmo-<{l=DT^W5ZiyENCJv}T;P z?NJH_1q=!p6fh_k*dlE0jQ38B9XLwBQF3rciB&pEteT_50!K+}d$2eVLBfBrOGtV* zcT9R$;p(eV^3+9M#rEyzcgu1pU~NyyA+oe?WuKbvGh)`jS#wXTnt9(av2%o;(06Wa zt*qQ3J6jh|r}9{?W>cRc^J5o*u%6L@^!%M@3d7eBvknpkHp2`$91M>x=R9OT-%hp>-zVh30^qq)v4g=Orlv025|o>;D>*;%e7 z*if*cU_-%%f(_luhCSm47txDN}LJ}g}GVPWuLwYG3b#I%wQ9atRlaB&-~ z(xq%1)Mi4ZOh$SJpy1e+g~bGVZpie4CbrA)7)_{*SY*b%Z=}| zJI1kQ{ohJ^(jw+cunG}h>de|}%AGS$#1!I0`GPs7CUE$=nUJA9opykAQ z%urr8mvZUc>Z**)rBs$*9z#N97>mMF>AM!wQ74RP){mAJplqMDn7}Ic{j$1`2e>53^i?JUt|cnTBiOAn=JN zGOw}io0!=AY*hCUAtpb}2o0oj(tve`_<`#wAM_Gt?#-+QH%` z#%MD6?SRIXwig05||}uq`;aU=Lw;zy;ie;4VA@ccERn3+mZgzl$-HRijLO_KFM}=OA3cVUC^Z*sMp~4S* zH$B7?roEZO;a#sS_A2RTE#`0^;BfHENMu}z?$9w8z(L1g@%8BGYQ)}3eY-|)oXpUE zRmQB=gt~LPJ9xf*`AK^nhT8Mz7cnU4`OV8-hmCa!JD&&ao9OP$-^KWwdP(aiUf!@N zU&9+|jaym;RdV*4O_gu>b0;!$x3J~amvUkmi;Y2Cd{>8bIu_}+tFsyFTPyFqTQm+A5c;=Lv$RytUrmZnYZqJegjGng+5!((p07IRZ>>{uvtI2P zP%g@Cp}Q}5VZOA8M!tVDR;)f$TE6yC<|fHCha9t5<)xXhRPE-loe+6C^ANED3rA*198+{hu_EUAUT7g~7!D$a zZy`#Uk4O-OR^$?c8H68Zvw*r*q$4Br4MalIM}FWrDAFzLQRZ8rFLN3(C8q5f$n+RL zTV(Mk@)$#|>$yHAIJ7Wc*+gYsS8$EX^zQ{;%4N1{m(n`>v`J64^bP|@IdYD2pav*F zDS%P{rMM(YaV{x$KyrZO0LeKblCx>xac8;%F-M3w9zo2}C}WOBE#_!I%n|D5p^g~p z=AmvL_B#|vLESuH!%M@4W{C~W8a6Zm8!jKu^MR{bu6t&*1d6zZ67fzcY3p>q|9L!_ zaAnnVZd&F5AGSe@lL?6 z4}Sfuf4d4j4b?PqE(3D7xf(z&eEH(zM9e%lwS;fX15I!#)z1=0MlH`IVH6_U^mT+W zi;zn&L5|OuX9hGR)LhsPz0~Nd7!#hSOL)=Pl&YQRE$F|YwOBj)ze4w~L$mr09fQ&a zr435EAEkY+R*mpmK=|7T|F3My#*^kCF001$t-c5G z?tS>Kb7sU|q*aceHpwo%W)r?>B41+oJou!tphQ^WrI|i)_4qhe$IYc>@NK{)b;9Jb zN|Sfa)6C8YQ-x~3XzDcDXgo>;rh3fx1V>ofID7ATj>&OOHVwVVFeo*UXBr;DCUrS} zp&p`cWa`+kbw{@w_@$=tRxx2~o(WrZCfrbWA6y zimA=j$;?XuLLZfk#mRmdW%o5V0$mn~fPtv!IG+fMy1gVG{V8$kUo-wrI2^c%{Y0D$0x$=M*Bnl8 z{F0;VqFhC+fhG*T2*pgayIefA=~$cIGpz#8UTOc4M{7i^MpT_sbYM-itz+A^JGO1x zwrv|7+qTuQZQHi(?W(!v{MLb8I@vipXEOP_SOw%%)fmRU0{AZM zpWPA-F?M_FU>-5CZX0@GqDf~Zvq|E8|-j-XAw8(;+5D{MU(=Nl*4u~!-vHfs> z2Z&?DN#e8-C;Hg9^V#&XP;PL0L)^^>5lM2ia*lck_IgclpzRTOcYf3Rh!zR|>-#JWBCXu8)it>e~H(4Qi6Ax=+Q8$bTR55zl} zg9aT4E&@&df8b*OTqDe{unL+0=bDMucOx!h3F40gQW-b{wGU4rtWuk+(4t~ix%0kd zp)Nb3fx#xcH*Q{aVb|^2-A3u+ zV^9Ti!=cAW@jq$xWHbG}(oYr&oQ)cONGK&yXM?Fz1N( zJjiF3O_fjKwZQbjam7mki?;Lsm{7chd{5BNn*`a8M6-^Fc3s*1Mj#K&KXz>QFN)wG z2WFw;ByghYrnrTHQwjFZYtCAAQ8cE`(oy#przYVt)k96zSR1nZ36V6>3PghuhhV}y zM<>J6E~YO}EiuHRadYt83Aiol z4I*(?U~yK+STreJK;NsxgauO&yH!0Iz-|Uy|5Eg^7`G9J5!n~eagB=AsAb5MO5b>* z4yNqv$LwZ2WkWROvR3(a2)^2}(7*qf&CcdU+ij!eNcUQr9S1az;4Xt`3B*EcFYXta z=)LDXwg`j(Er3V@Xg`4-Mj9`S_*;VVV7wq9K;kEE!`EJRCYTh=?+S@WlGmMspj%_e7IAM5l3nWP8O5GwX5z4!*EpXv8-3XXjkR!+zGWoEsn_O6 z_fg{LlT2j1rJTi(^7=SW3Uys$r%?!K%_N7T*Ew+qz=Y*a1Hg-``3JUM`T) z5`HV!_EN6W=awLb87kCtwe#f8F!aM>0p1VOs|@B*?n=AqyX81&&X+y>Y#aV*RSc}? zyCkKv4~>owcHTN8+VA+Ar}+&clAKZUL^r>@F)&92jY!60jx@Pog-=*9-TyvsG5y@{ zH8X$>2X(m~BlWpzkVa2F$jprKOq8gO#wg*QwrZ*6)ta+j(7wRdz*(l?YS?^3>CF zv|X<7QVe%&5qG>{(af_%oi$3fv`*uE9k7zQ11(o)Kbd5vD8+4*`7&R&&PEljMb?63 z(<4SB(s;$674NMp5m=?{YsI)m*_-#P8)DSw>SU^@f0^zm8DO+Ly2=7J{odZ4>+pb9 z&FPoN_@Yat{c~$saX?5nge6)bU=WX5e=4 z1@+Zn`mHv$D&ftTUXU4)WtqO6T-5zsd^EerL8yX{tou9%Qyf!QWlR3$q3C>ij(e}H z(70;$_czIC22P@aw)zfxOda7H9qxHW+!U<8&Nt*W0a+bE{~Sb z$JRX*E;+!G>QWiP$?sZTc06`q)~S~D)2WVAc$EDS00MyIuZ8RdC2-+C_g@4o2Ug@` zEb<*r?ssi~V9x?X9q3Ynnd&q&PoWAuc10cdHvpS4nim1{zo&OAB4PkYK%{F3$Z8xU zO;T}l0b~taDil24{nL9_W|$@ZIA-4jBxVw>rdXD_I3J##In9QK-NKZ42R98(eM+>j zN$~i?ITohsoJyAXZnIzfNafn^U{|k{x=M{4T7N7>o*;`29+kc&8|gTNkqVqi%R;UT|u=-pgpl)+oCQ4(l8GH*4_ zsU=h#7O-A)`nl<-XI{5$XFYZldsp7B_NhsI|_)GF@Fp|uOQrX#>@#9xtNqPqNuWx;BE z>8Lzk=xxGL^0z$4P74hP0OnX7F|M&nuQ&QIP+6-%h}y7Rq!@Z(QfcI#Y2BjC1~)+K zw?;R34u_x%e=Eg!*uXun;{pK)VIWv~maSOhC^tko9w*(3tUM&v3Ui4e*kYB$;*(7oqvUl&xFU3CfXgw z!}VBqwyN8!Ll?e(9tBJ7t>+!mE+(TLZ$l;EPh zzLs5+Nn1H@Q&wAibD{_WZIYMc*kq2{w<0)#>;HB!=FFMCOz_}0t-%_{3mY2AC-LaU z@T#Tf5fCRf9^Zo=t9*GX#oK`*!0%b799r?!!7Qh^lgxv5S8o|(q66kIsaNVzlE^C~ z?y|0OGm!&fSg23~O)j!6d>v;3WAwNZ>$g+_^Il#xj!8R<&hdl$6%wjQ5>t5hNfxK+ z>>vR+5Fue%l4{A!{yXYh1rtL*+~j z-p1mLTCZc>Q;9()Z9BP8g4X0zqLwVW)QrOMH2H#-zr61hP#CdOM!t&a-{?Ccyu-J%}8oMANCqsQI1lD)Y=q)a$YwV8* z0B+xR|G&%#e*i_5u0r8mRP2}?7^AnVH5t(NCBQwyr;2sAZ|6zdTJrnyot>8jlkV1k z-u~|zqBkNSZ;4wjp;I?<_Q%1Yh~QeeD-##>+;mp?Y?rh_Ye18Km?mQyjM+aK-Z@06 zM{Wi<^=tTKVhs3+4a~*4ZCH`y@nOw?cFc|!%@(xdF}2t)!FQ>hwtC@OBa9{p(~u^H z0hw$rTfv+xj5+b3|Jb`yg4A$TnbSGR|C8ol5?;CvD`bhTp0X$pBQ{A+p$eYZ?)dGR zCJ-Kk08VJzLwIexRwM$TK0?-n<{Kal#AtD2oRFF*p&KE6?=M|JocK-XI$Q|CgZ!eo zPC#K_t#I$2gQ^V%YpIc4=Ecni;u0Ha`f`^|Pk~sEx~$ucJ~OmV9zk0;!Iy0B^$x*` zfhcnWojrTb>$iF?8z~G~zM-T3CGl8Z#UYIfu8ZLT1cZS$u=v7#IYcrTFfu^@td8)e zf+O#MXF~}_^H#*90t=)E+zlpq<(1L29>W%#1>soGbt3GWgZx&UH5!&x=DK}u9PFDo z{cph9Tmk6xNnU~>I9_Nhak8dv!k{;mr_UoyBu79znCAR1g((N`Gx5kkz}YN4vvjJb ztqYNH^Nm*KTn4t{OVdBxjJ8Ts2mRgeM_3Sgb8<46Q{>r`?m2Q6w9`Z^kw;2Dpht}$ z-i5wn8-bZCu*?DdC?Q<`Zg~2(4fi|NIAco`o4(PjsD1CnLwJ)$V0!Bv96(ecs!c8` z5)LX7Qe|-f)MZ%-?CHTjgT$FJbhEVsBnGiakIvkk3g^bv219HOY^pB6tfZP?bU!)p zc1Nk0kK($j%-KT+Kh!v*xmjCK;7zE_-W7O~*juAd8MYJo9uF0TErdzcI zo{oBy2Mys7dkvS`2^M6Vbl2C}5U*+>$(0wU^HzR5h`9K>iXHn(4QJ-Ctgy9Cv5T#d zoI<%WUK@Iihm1@+S+vsi)wb?>ew)7Id=EokJJqPXxnoK=qlr7=;Mkd!rsNxmOf3Gf zg^x^V{DSWju`W4WUs6~g%qeSvOnH4u-8mx;U)=cxhJBQf$XU;Z&E|W48DK9ji7Yyw zXNK@?9(t_-<<`||yA(I0E22uLr*cVdiF~pOmMIh|p2!q&zTnZp$U^tLI(Zv!FtBFg z>I1?OGAIop&f>CEmht9V>-S0PB7X$@A2})l({a4Bg?e%7Oi`q0?nU+b>+xme}gkvvp-)aeoPM84f&Q^I3!zG6Rg{Juz9Nh zs@>8-y^UP3L~`O$??;N>$XsOQ*!=aO2xiUL;FJAeduSy&HimRXtgb@27|jM?@dhd< z6+Cf$wF^&9K70iMG_->h&9H3!-F-gRTKOVIObt4Te=9k-jdM`3(}V&0T#dolA$-tB zLPdOrf&V~#E`xmFk&$Q~oVk&aG+P3dXA0L3GFXpY0MFU)3JWDF-Sk2O&;fJ;+yeDN z+{X0^0qw{F!9P^{E3U>UuC{iSx;O%6_~xCR0A%=1cAkw;vwWq^J}Pk? zS&{%LHm@bssC039L{=%5}EfA!L)o9S{j_E!Xjwbjje;<${JFww}dM9Ez)MIpK zGdGj{9ZL~Z6^7Q($s0OHPv}`As2D(A1}X6GUb-DB>P}u(kSHLw{LKG?;Dfi6cSaK7`%F(|FYd zn`X}FnLOXi=6!B(y#}+eddKk47NOCLGvRXOuTTgSTM6i@b1a#%psF~nkt+1eJ0evD zx0xx+ud~A1L``z|>C4^iv1`$1LqFXaEOon8Ht^~6fMePxjUQ^e zNyD6Rl&v#?U_f|!;a*yy`YYbu!@tLMi~dr%!*KF7l6MnE{0Q`L9jbmJvHh{F@Q$d# zixKO;L;>=2aZ!v}#kCnajp?m%;h7;T;XgCTPk@ZOP>D&ogudR~tBCrro|>ky1aQof zv7L+8@xAt~=mvNiq5N#!0l+Jd^?hk}prVIuqS^v%q`9lAeO>$Jv7(cywvyuhz@Xqz za44Q^?-yI-Awe%+8wDFJ_LTpkg#~nDxE*^zHYY4V8d9={9lbbg&MN+4-Q~Bw@M0(jZVd|WT zrAb28e5PoPNz%IrYlB0-ZzOa`4b~(x;8dyZ%#qTROtvgCR(R%1UR@H4@I~-0@ECOJ z#ybb!T3~y?bSv76eU;62@3cKicPGkwE7~-lIInxse;Ajs5I4zu%5HEzdiig*wGUBX zehIM;m>qxhw(O|Fs1+F$^-rno)7pIh*a9bRefG896e(WeB{YOKQ@ao~A^^o46D)oU zE5@Dkybsz!+AG;W_tk2eW=$mU#B;sb8bfKyjr~jw)aznfUNhr2>i3m-f^TDK2E!}O ztyb863xUGLW+UDPq?3iZecq?_0_TQ$kxR3J^u?iE+%iq6%S{L&`F^*Q&G?ECZ?f_> z?xBl+?0cVB<;}su-PQ(!npoIlV&28ymqP5E8;OoiAjCW#+!R?uihcLK zUBH1>KB|MYBiaN*9vEDifzkDQyaD}PIb!8*iznT-s%0mYD8DUCH@-LD>o@Y#S1+wI zezt1~x-x-RlInCm@@3PgRctHgKET`&0%S9<^fg{npGeVuTG7&P=fr%8Xc7P;FWa@iyVd z{;DGf$=~mMw^99iHRqYiEJqbJ!ZF%M1uxVusV^SM9!UlPRueH_Wy*pQ!XE#q6#k-4 z-W=tNet`An3fRNOpzYE`ZePUf}i#~Ll)@Ts=M#}li9$eFZ&d#wb<71yru6$ z=)oh?xZ3f5mm;c8T)AUfq<#~_Zh9#6`}?MkRGK}O1y4)u2?+VVzYgLKC8 z5wGlm`&L`mR!7CVN*=6C&ZJ>0g;to%@TbeX`g+)Gk|^78rpO`$;6e$xFuKxfsWheR ztVi3+bo)~zdv>9BYxVvw^wo|#3sgsC$>OX2IGmJnbE69^_in`Xq=*8JH5c8XjC6{P z;IBfmF#Uz}{b9`J`o)BlWl#P_$B}{7V2bfXtyr#RC3kkw^L8PC@koUN03uB|ufbKm%0iI#n{c z`vqr-rYU!x36y5Z^ERW&F^!UGxyg8NN_l%qIp1-i7RTiWOQtWHYdJ+oQprEbEk)In zEk!<=Zr5$9;*HwK!_=qU{7N6x{BM?YJ{1XT?DDr|5^g0)c-c-8XLFK*eD zrr?R>-p#p_pGdm*nKp>O`;EDJPEVhrD-wIPNaZ>(-^;CBUt1fyJNq1x-_P)%1w%*! zV>EPKe{iz}!E@=7x1Jxz~LqFm_3mXstL zSmY%_H6kyj(-fM@kzG+C- zw@7}UyE=f^A~*@Oa37ATIFN^W+kx|EMdiKfNHSNY=5c9grwi?^fnu|>UkzU=6UWMG zG@GA3SRbMfA#jfaY#`C398JLpS87Q&56nZ2pzK*zUV}rxBpHGV8lr+T&~k5K?$6z- zC4%|Z%4fLa}ZdPksg)4cja%(Akx3v$nKw|)KrM}Bud==*6 zZ9aRIK5PN*C++U(=@Gjpc28;*9wN_S#(_Ehz)mOU4WrcN9ttP_+E4PvWS z{o1$CnXW^wjsRl*>alsw6`be0ru9a$tWzF1ph=1zAqpqsa}%7*Iug>1^DQjVSu zB$;C1T9yIUJXJDWu}CxNw8q4Fv&PJs%i$MJj2n>#NT%84R;lS*j9(%lKB9@6(Bwcd zXRl=z12tmJT`5eD?HNnWK7hcXO}KZ4DPAoLIw{*8^(B@22a?(AK5X}12^G1}tu4I_ z@KUvS=jD%@jWrkWx*p;uSI&F2Qr&h7f#zL7x*ra7BZ{(qC2+JXZ-ekB9%-kdms@)y zpL<&{EDb#ddidj)H~DLwv(_~;WK(u3U)K{wnpD!pFK@98qp3Gz#(HM!naphn=WTe6 zMwjn7A(Zvhli||w#2fcEk@f>@f7TpeOSbp9JG4qJEdxAXsHS9g-%EUGD|_9NJ1#H+ zUU--=_1Syv{r3O{;K4)PJkOEjnet5er@+H9^08|~gyBi)C_JvZ4oyx-={l6}8}biT z)b86m(QXpR!knQxS{5=sXx%lQKx=_HdfHfSy-E8Ggo;Bo^U%U8PRqjOWn4&S6aJ`%zgRpG;ODuHHJW}n+o z=+1ngL8SdLWehLe+-~3FwF=vzZew89YG7-7xPttQ-gT*NWQGiKz17piR(Y+|t@gY) z2sdO@*=jpQlU9sLyJXa4%TX;<3O(_*xiOuY*ndGI#rPr=3KL0x{wUa&gkW7?i!jdm z*?MK&380RTjtj2U2xaa}nOXEnobwfdmR^3QBpI~QU`Pn;1)v_{2Cq>=b5raTh7c%r zct$Cz&3*>P#-l}kZ_h~7hhZyuabj2w@rcvzT^m6z+0h|C#17)i;3eVbvl_xTw(1%miswHg+0TW(T|MI=h6G+o<>m?j>pg2!}rCJe^1XS zb9}gMgE{soUms&FA0`XI=^A3P72jwl78eI;rm=7qUVK+s+sH$%DS1(0t9&aG;wrvp zF1wrUve)Rkmxegu%pZ z_3fnI!6v)lFmi6;>C~})sx)v>_{js<6Imv=pnmD;khPs$mfwUwS(YM`G*x>?c7 z3O22E76v6l*PZsO*DL_#^L?n1gz;UZ!w9UawL)3^naQX&V-7Drz_#BvI+nr)r%p&y zB&@sleL6{wS?4K8W4L$5XPrpmlcl%m{i8g)3&;4X|R?~IedP-JN~}r%*VvV7yNNkY+0pf98z(l zcr_McWHN;iO<{L$)=?Ypqx))Iiqt~tqm;&3yM>8MXtdJpn3rX>h~-Uq)dBaKUH+9b zTn4}!=JoaTb#?l#UZ;PAb@yN$&R_3Q)w;fPfGgist9Gp3)ALF#E%Ki>YD+tot(f3> z?|C`7$nNju<#QD^4MNS3j3%Hf4oSK*Eo{@Zs<(QcWlYf$I)j!~#HxRr%jPe#1P4dq z5ZtB3#|GkmuhYUp!IVNlRlyKzHsv(P)GiV6S6Tdkt?f!!bhHUN2}tyWX)VE@qRHU( zpD;5y3m>}EZ>Jkc%p{ZCHU#^vV<=JOdzFh3ysUbv-rRH!%4-vMM%?|>Y4PeHpd_WZ z{XZLdLgsfNe=G*Nzlmp=w22Vh5FD>s8q!C{ryd2kF_G(+MB7m<<@WB^E1~vbVDze z7G>CSzPE|*3}3!Oq^y(twJt`MK!b^_t4+ku^8#M4WGC7+bRdWcM*Tto8q_}2m-74c z&%r`GqK0Hth*Fr3)0y+hrqWU3SxYVivyWmC3w3i=4h6_wDxc z_-H`Gg1%Yd-hsy?PzGsBQVtA{{Mg}$Hu?agaV(e+p?7N8e}UyqF7vrpkw!RA=+8rA zIZr)nPjF^mxR;|{^@O0m_ECE|>(k@aSsDW&^g4qpj~>nLpz?Rz$Dp*y_OqLexq`3c z;HRbAnQg#ikV`cG0~->udtN2{5|BH1L(dM3oh&!0dQm|nHHvmU{2OM> z*5>b**w@Vu z4;*-_u*UxAF0$t5r%mY_4Gq*J8mq^d777ML$hV9d3?*(RzeODoGreJo|HwK`d9}@D z3%s6L*zeDP*GNx}bNsN_|zd3dz3ZoDy!3>kuT*E}q+*Jsb zo=foVIIAl64VSCWb_5-VlpSi1tCw_cim!EAuoQjpf%qVN5WcsYp9J>exSp02IDoWg zr`kv}Z6vz;3GDU~O-F-{M0j&s!rqu@R$`X}iV~@&L(@$J+vNz7wKd&^c=Q=?M{*HQ z6hgyQBozkd#tMyft!kb>Y&kEgdp{Qno6(Lsz}GePC~Ii^T^hDE;Rt}c}3AK>7{PolI>4yi+ihVy)$^!HaOiReVw=O19(%vs^8Y{ z8ug9XKGvH}mNp&y1jqt&UY$B;q%K(KM#w(+%T^XH)O@D|Sr|v%KLt5zf$?>70A5&T zHa!PdS^a985ob#~LGKU!Dij9;1%|YAUo2s3u*Gh%peAhaYqf=a0|&FOEDyV9k~otk zT~xQfY+{A)Dky-_Hb!iyfX`(yJ(SPzSvxH2Q>^~YuNPh9d0AUKc8o8J-YY$)tqUO- zJMcdFpVeU}`Nk?J(B5Nbra#S}SXaz}c0#q>8<$pba^^~@46%k(I05O%9$0UKt9Mtu zN~vfGvrzZtO=+Au{jZiT@%gfb5;*Pc;cFArFw`p%I+x?&24bRcXoKjh1qReQxuE@! zk0$CkoPxsauDB7|aT}`-#znT%j%A0m4n}m81J?QUCLu?B76Fe>uAR8~&UL5ybA1Iu z>*LKL_vte0C^jvpP6Vf+c^@EwwtVpIUy8F=LbE#9&VG3Cd{%Qwu|WpxSHA%8Ije7y z$U`~y5if}t^B(K#qB_imMnbNSYE!cvmZ@p9rK(F3N-z4L`63`=lud(4NE>PEiD7C8 zoXa<&!Nus{>5vq{O1xQRZ)q(@G^v_Orf&U^3(m3_&{h(AiQR-=((G2LK&pJWY%+T4 z-a4F2gFV&ZI{V7ey3-zigYt5ucKoulPV{q$*(-7BQ2qvMMN=h+b5oQfsy*zz5{98% zBsvw&Y^yG>OxNw5f=GJd8GJqG=e>uHRN(eiR~Fb@FQ}4>`l~PI?<{G>2k&b=n86=e z9{Y^)E|mC9=?1k4fF52&kLxY6%I3Vr zwYb!391v^OQ0M}AlUqp;WqXw+rY32Wxl6T)`sKmrfIFjt>V>LXDz@sNPxcq0=GAZ+3^1mmlON zC1CeK4B}J5EzI>kl>lOP^}4FX>?y%#jZ#}CXthrhU%E`^k@*r9y@x}_a;dtKa|Zd8 zPMDU(4|!}VK#k)U$GNp7qv|fk%F$>u;e#ZSsmGT*?>=}F@=YZlhE#iPXu~12b!`SZE@N0hy_Ow|%vAb2vC!S5b$U=^ zY{>)oN_7JGZrOJ2Vh-%KC0AkbZn?R4n>QuBx)IFL@-$*(8&^4|3{%a~u+3A}mkS5_ z@L!mm+0rmqQw`Nx2J2eA7^r1tk6(Zby%+1pbrKX)ic?T$ss1EVcfG9Dy~qaJw=p7n zFtyRExGh}e-O2$!yoWk-zc=K++BWgu`ZoEklncvE(Ja5Y=pdF~?G?XSM@zbT_^7Jt z2d4i40H}b{n(M0>h`T`Pr(&tB71-gJ%AYrh83=B{mlfu?6p*{vZy$j6b)S=(Y!OW=`k5YCs8b$LFhqhh7F)U~P^X)8T>6fWc4ZNOK z@4gn5Z87qe_`Nsc4)c3qD^c~ng3<++UbO1)h~0LV^7n$+gr&46lH;f=ScY#70)vTe zu#Vbr8Ux;LuOsDiNFEVE{G+z2fUt?ux+<&h62Dt+LA@BXzfJ~q;2!7zbm$8SEZt&| z^9dG#W~lkw>0Cpi*n}*lrYpg3ogu}~Gb1n9IGfiph7mqZgHrQYM=hibd+sJh(*U0$ z>X=*uslf^Un#)M?FH@G>IVXxn+Eo+27F)TGQ`-)7Q*n>lNOMCht3ShY!qo;UxT0O{ z*OL~n5M_8>T45~2(0gZ)w@{o0V|yFpyeOsJP$xSf1Fd8G0j6(H@|L9P^>Q|x37a?) zi@fxF$CXKD^KMVf{8y^~=W|jFE8kUE8<5XL$|;{A<7{{(fzXduZ8}GT?lLIz$JUkC zk>3tEZA-~+{WWZ|_FOl$tTsg9j0qpD3~}(*lj! z=QJ(4&AwYpl6;eMp%c9yC^ZtjX?-0+=BjN)?+R$ucAGelj5N zK*vd<{(3s^zczxwFySbG)#swrL+IG|i`3*rSxC@ci+}5p*BPF9<)U0aU~XZF!db;UJ$i80qS z6LJ|woFYz)p5Vc`h#c$ixe&<+?+oR5R8Y9ijW+Lv3Z%Ha$^X>}iAM$XHrwxNW^v6M zDoieoa9dRNcw>Jw|EWW6MS>PBe@~U8Nfp6!Yhrofcrwu!QAeoomElAJXDC#6ccr!- zHos@s3$1DQkM*E<@`re0KwD=wj2|0I%%MM%9V{V)2R%Ngtw(lnv13(Idk&(2`eKg} zlERkRXb>!?#S-J}nei5M3=KgTtPi9oQ7#1(4ZsIil=(Lifu)NlY{?HYAiTQxU_GH? z)WQH8M}rS`doRH+bL%nbIn|EfTp9$lZCg(!9EboZNV2L(vKkf#E6575MqnKDyJ$v+ zSet%bZ7a4%lFivWd;^iq+4?+Oqsiv(u)o*dV3e5-i(Q||-_SsTo#9aWfQate7QqtJ ziNViphA@%@ZbNLphSYYEHpcnvdc~m$6d@_mOc&p3eqJ|xOcDz_P-s#)Cv=)f(Nv+< zFAwOlNJR3fuf|sU#|RU4LvbWIlb`J*L=-k^J%8ispUDA%Z@}x(=^gaU0lMyAJ@!F5m%E8+;?&Rkn|s&>fl$`W%z_Qpk7r<3axtJv=v zv9o+Xnhc4S2w#{j6b0yA?eZDf>(YxC)oShwtqaZ}YrZHHl7Yc{R8}V*_zwph{TU=Q zm;P0<1l2l?wSpE@AJwnHbXP{O5BO*N%O8(*zq0nLX(2#2fX%+SHek9FxK1Ru-K$~T zBAJUFbMoepSBiI$FHb_!)D(B%^)|^@gN)jx@S^z^75fco)nMin)HTXChstMeuT9AC ze8G2DQlE}_rqRQ>vlZvYJmSZa4OI^=!xTGZL7Fq@NoxxuL@*ey1P4SZBu=<;SL^b$ zTN!OY9Wp5MVz;#fCH4x6XWFZARg8BfieNx!STrnZXK*yE;F67dJg<>EkbU>?gO{j- zFYcHZDThvY4gi<@&swJJ7H5|8$IqX2jBa3ZIyE^+EU}wR2l>E#MTC~=HQg^B3|l3W zwGRZD#m2M8zF#%K>;d~&{<2uYRIk0C4|ahiQ$wr^f_I5#@d=cG-3f(AQL8drd5U^LLy27Cu|ixz_C{rP7xH`tqK&xlX#wT>dd4koInPf!F(qPMn62arRuBXB>1aO8%EU$q5GoMMK_{Fcbawu8jJE<7SK zeK+7e^~C&+gAYb{QdoV8oJzf^*{~oX-JyiEeG3W zasPP?TFI%3IH-z#Jy(FJzp_L-i>hZ0wRvhOv>LI=FL&N2QR-X%lMqfBV$qKWRA3B6 zH+ZjE&=~)?@o}Qdn$%mfQ;atbSE5=45@{&vy9;HKm2d53EQ!=`qYEY|C10M^mpBCH zcpakxl4Xa&Am^`p`*((E&7fjLO9tTAX;**XaxE?U?z-pk(32uz-Qm!ogCt#XjbD6! zwO_@d_yVaK0RL~Tkv_vo+-6_8+B)wWm&~mYv7(ZCnIxc^|#s}~KipXdGsI0ad2ry7|ajoy5fu)e{K zV|4IeQ027My1f@mm>bvvBD%1f)z%IdzuIJqVL9~Ut*dC~ltEP%{Y<2_q8Kf*_`3|U zJdVa^)>@O?+39DB_!3WRBTODr8W<5oKoIeojui6 zvT8fzjz$~99%~KB&eZc;&br*~4O;yk1*IZn?Kaf0-P~YJrp9_r7OhB-i#!yatu7%? zlz8eWhY!Q!XsRJd!cDaN=wcIx$yW3Oeo-{IwgXW?P3>`glWIM}VY^5HJplse6qkiy z{?%sfPCx$!hwuZ!m@sy{|Gq_d{E-*J-B9s;8qiIj@F)YGp8U~Q?F?Xnv~Q^XM_Lq5 z&FFQ)FDxXRm>hGXlL%H<%DLfCVQlf9&?x2K>CsC4GS2tQbH4WfoAl688*oq?kf@CR zvuhm!V)GYsN52i_qX(B-m+6>r_#4KxG8c!M%@YJ|~rTi7ITWzybUy42f#ycm}7KXUa8a}Yn!6+KN zeme;Ar4bp4y5Qxq7HXpW$#(i0womhRwNw?llldY!jnqU+mU@nF-y;{6<(IZ;kvFMr zeB3ZEIeuOyXnkrhRpRia&SBcAIKjiBtc3YNMW6VkZqa!@E6uxaFp6ig|<0M4X3M);E7^B7UU~~=PLu$+sfL$?&SDdlE==7 zHDtuh(vN*N<$v-dISEK(5vOU9Q!n}ytqtUcIVF*9#Yi6?|1T7jvBBE#q$hAj3P0dF z`)AfS5|`XTM$uJ7((y##$PxfH(&(>p>)>5gv)Hb6bXCJBF1*@K}5NpSJpN!CqO zt`oScZXW074;*^yrOA5xIITR97I12$?0l+jJuMJM3&@W8ksm{ zemq=6Nx&_tlrgZ>zYBtozgbsIYM5(uOu!a3`^~^oM0&T%1c+9l?o}L$>Qsk`B+((p z@%uI1xy6ubl7-5*7hV;>8VbLvjVGtY+yU znrpO{CWY+1oQ$oxui6Bm3jiV+jwpyzM&rsA#tZaEUgeEACWPoCWhvF8LxnV{JZoQY zM-4pUBys8htlXTeFjCeS%XJ12|2I+ZZMlkYE&+hOjgCEzgguVMn&c0w#dR50==b<| zGi1+vuZvx-J(-tj8EbjtW_0zp^QF?kmGf1|w23OzW!9(GQG?C1VW_E>HG!=lJcZFrkjlYvkloO)Bw#o&H)m|9fJ8 z{ma>8VnCfQFeO)OVx0wlMf1RE{U6f^xd(gJx5MjPO>_L~x<+NIO)S+b8H@CG%Cp2p zCj1*dHf%?$16Rpv;}n_Sgm%Nf>(@!!?(?$>9A>4UKU5`3W<{7PfE);B&l*a8GYKyO zJ0c&+8J?bEb=q{LErYb2Cq;k8Pt9`HV0Yxku|C$MZdS$)6HAX}pHC7qKX0m-XRJ?Z zE;{i|-fu!)d=20}x$E`P4r+M{WysbD)s82hFR!`RR3_;7&^nIanAt4|TmKUOo^7Ot zL}(QIlElfo@<`Ie)tPaYk!ahfMZH{FvCS2))AO@k6z??~@vi6BT*E^A0YO0Epm2z3 zVV2$JeS`d@pzb$fFWU}hT?ZL2F@0Wk58HH)&J{J}3z?M$mtAj;h17;Ynt!=rDogHE z+JK*P%+$CKyTy0WS-9v_tAm|9bWBlktfkf$0W@M)E0MCcH%ELRlx&hqnzb)E@2f=X zw5}<`s$_fl4&93(WweUw;WU{(l0aAa*frjjfnsea!+018)gqZ~%+`Dwf`D`9rAtj0*T;W^{uT7vHwcH*ntdtEWG#NWn<;$&`Fb+>RY+m7|pJ?Fm^mZ7Ux;ofWF1J1XuIvNlQC%!1LS3`E| zlnn!2$2(Q^Z@!JIr4wu@!5!bGrCh+F{CSdeadiB17H41hi@5?z)v&u-0o`d>F~}8& zMraTuCT<>5j8os>&LeLqZGH-i{$?3d;S5D8$vpQ(hVn z^NQDNTcu`C-*CfRF1ad|r>l?E!Vb3V&6*rBO9!Kvo^*1yxzF-#ARCZNp{g2K9uy|y zlGOu}Wz8je2&#iu)$AnL)+rqtW4qwoe&_RTl?Y9keY?<;NliQ08V&ljxNF5_V}D(ff%FLT z>y%W~C@f=CInPnV4a1l?q?oCYXC+S)RbjO}%(_gj1I%=zPBNQuMi2d{^Me&5*;vIQ zD(FG>=FNtR-kDvZahk7Bc4eVmefN~YnyivRcb(vO{wUeWpO+=^=C+WMsLsf5 zE0jK~m$N**{uz8#!=_Gc&KU^~nj*H#1*;CK0rjPR)M#{tEJC}aDc;E>t*b&DiCR~C zT{S=3n^8)Iq>NeS(uL=%#Dj}Q^s5|!faEYn7zjcBND8)q4z__z{fHPW`Z*Z)*(?qzz z!Njr_!L858MHG?p8LyM64oL`CnUUgug$jiJ2G>r(f(}bT_=F-x8%A4X72$-jN(ve8 zf-~|f;1q>7`sat20^U;=9xn&+?=ONnF~hfdB(Y0OuF;o>L&-!z69vv@{hcS-9-9i% z8ud`kwHaXR3Q2(LXZI3IT}F^%s#yfnS_YEY@G5K#DTTUlB9s@h4;_R-aVPk z$ePwi7^EN+eSr z&FYk*t3vW6>g}#>&r^`v5q?~%#Ro2#;jR~0Q_fwomb+hRA6N5YO^hCW33rG7sF}nk zt4ZAMtlUPPrea$k%a< zSVFb&EVM#F5XM*=2&CiYw1qkt*;Vr<)+3a>9-wT3o1@Z(uOQB$<9T)gmVGMW`VLS6 z(g37!T1aC6kN_aTvw;LK9I6|*0@Iu!272@uC@*86ycPrH5Cd(Cf&QpxH|CB`INHGhjbiuIUQl-dKF8604pI6XqULi5@HyIN(At7V z8=^cnN_-r{09qhP?3^U=$rY@0P1kr@CE+KO&zY_0DZ5Tz1A8M7AFmTXXpzP`M1Cp^ z!j3|QLcujkm}ZLMkfbtQ8$8&w&)tpfUAO!|dkhwRUyI&r9S0a-FuYv=X_*tgnlEgnphs7Qg3p6mIAn=t zX8RzL(hxBsDUvjyD57CVVy;w-o27kCt@`1 z)mu7LI( z<>HZ~+@8^X2NJ#>BoeS8V8f$hLs?=&S;K~Mg$+pyHY9ayNS+Ng{9O&rew}^i{aa1{ zsZ^S>8bD;-P!Kds;GgK#I%>rY*)I5`^-VDc)aHy`bwudWhO9g)YnGq_cu?6NOFC%>qfwKo?Tzj;;C3n;tX6P{%c z*9Rrm6RHEsZ}ss{m-v>Cj-3s>(PZ+;{N@O>=aU;3;7@ zqrlhd>mEGZM;cMJ-7UphMl_Zh`GL}iC7Pp9_yLkM2xv%nDmZU|;D!y|<({&2-;~uI z(>0^q|K$8Fruj|-^V^a^hgjRYj;R6*2^JD8Bv{DjY$2a<2&*IO4WTRuWgR(`MSQ;q zWtsn0LRs!N2xYB@vfj={8S%z3(wzClPa@6v$^u%*a(0vDB(YG6N<_8^de3;`J)9U0;h8R8l;#DEN2 z8+raWnGP2-@7%l@-D@AuhIr}&W;n@FYT^c)t>|lG04KBTAV*zSoxqo0=@2GXNAyy) z(3f}W;m6B?S8e3K{o_%O<>?otY9EI|KvN`nL=lt9@&X48iPUF_IVbTYX_klAWva6- zn5L*cbn4^I84q&gGCdGMK+e4)=Z=&FAZS3)M@P`4M9`#$pa~#oh^<1f31X`dTZQco z2oYkdfDE4(GNdIkq%~wn0U1JbF*I93b1^g*!+r;B2+hTS4WAn}WFmJR9vYVs0l@*33S5Qc1nnZFIE=B%FiF?Aww!WEvh1K{~e zn?0>xPj0@p^>4qkD_D{%?<8NYuE`GW<;!a6*oM=+wuHossqW}>Z^p(ljOW+;kwfou z#sX69Jk@2bN&D=N@q9RXGfv*67gi6iBb&o(@yK!)5^7#`tqhMWUwYrX$n6N*sT`YK zVLO>~_Gp#A+<_P8?`7cWa!Ci40n0TvFYI;9SFR1(8k&ma0 zuP180o&aC3&DVSLWnv`NdpEVBoAl}IZQ#g#V!4EOH#cTujOX@gUT5*uJ;s^!L6~c9 z!?UYkEvXuR^_;%<=2vQ7Oh{5=Z<61xm+$VG`OjjMc=?k(-!458L_P~NMSj9CVq6m> zLoJb{5+{KqRAJpPc@0tN%G+3zz-P)*4Uz@vk%xi19mzi6UBJ6X$Gbs^cY_+<4FK=9 z;oWm*!o2y!dq0|dw&4;z>l5|9b-M3?GaN;}zY+uT?@30x_c+@(UxuSr9`|k{dH0-u zTmA5`0l2%D=w~$?Zz8$0b6W>ze`hBuCi}WQx6W!`%=)zgzBWg>Iu7`$vSQwI7;m=4 ziqK;baD3stozJ{-19=~9L4zaD^vosH$jbcC9O6X%G+238V!o{w1arnxVq<$UL`>ia zDV=bn0~SU;7GcbrlLlIKWLNIa1_j)k)3aFt@6XTMu1>q*=LN+IiWL+qq5FGucN=vS)jIhf%;nFH z?)aYlG*Yvxv%zg~tM@2r>9z*t_Ut@cEptdg8MNH5fMjnSX!r(aEc?*-Sih6T@^EtMay1yeRX6KqgBWw3k>_-oOt@ zQmplAkFKwJ9j+A5o0lhNA7)Us_EB#B3*r@fs+!r%7q^0T8W^m2Zttd8Hg9N4Zt}ZZ z)!KNUhx03o(ms3Kvq_2J+#5}1wmfGv@+R{u1JxXnid%~p`BNR>Ir4-BIwU@ln5Kv^ ztdJ6MjA)=DibESJS8MR0P2Y6qI<{-G-h9V>v{~0)nin zJqmsp_+dx)!({1)$(kPq%-}Hc6J{X7$WIvg3ELg&(qQB#Aj9W{3~@=ciEBig7>G7o zk>O9~kYxJRdpmZ!sM>E&YY35a(`i4b1%;~i@U`2ui_F=79R2tG#IbMBezU=ludnml z%;Ph^Yip0&Y7DmXx0o+%;lhVC0{TumVXagh5G-_rC?r}T9rIX4DU&K` z8r5}~+y!{)I@%?5sM{vz{r8pcEA72@n?J8OFKCz3&@P99_wMuz;CR6CN5}CcEh?_j zqGF&$h0&}qsuD)C!f005?-1jK(fxo8pB*+V2|sa-@Dl^!CtyRcm4FQa8^V4EYzWv8 zu;H`Ah9%`Eu2Ftsp!{sbhDOCtZBzB{laC8sLPXMG?tfDX@Rx;o-{z9VrCpX}7@N!Y z-KFQs+6H-bTWwJB{qf|_*~#8ypRYht{X|7ehSBw}^s8Jfb=`Y3EyguB#l z_S}Q^OB}T~B39$?=3b<|sB$;kWQ4*!?x8|3|5!CtU&n7X7lk^`z|imtl5q^mt?uJo)xWH4k@|Q;FZVbFD%{T z4io3$RUY(Qk5W74Wx0JmPJ;k4-@JvktbKi%;t-{=@)3&yg`y-$5e-C0QbrkuGzxia7RLOU zIgBzC3K<~5(;y8cPE=waL1FzCxctWIkgn+Bm zTr~EPB!NUJ7k*5XOjB3Yl=$YICV`K1BF#lb5}}Y0^UR9+DisM~#I9Q+0})6Tqga?L zb78hcm=cKsMa@H{)Q_ZnQZ0QVlPE?}s3XL+T{j*jNU(@Y?FWfsZg34DDb?6VVZzM4 zakHz!C=w_RgMh_Y(UfC%nA>O(qEZO+q|%(%zKSS{Lf;%`*2(#H+Uyjn%t9rJc?6b7 zq+~$NMvY=ZVxMzDvUblcp)azt5U>gOdn*FG8|>e|oqZdK?=D;ha30`1!1r2+Z| z^bP3yfzkKL&L=Do!LD>i7oGuRJs|7x2(lim%zCg|)`LOTqm^OUEV2>fN$S0^lXixS z>k=yXHALX|-S+sW@h(Rhc=>DiKiA;$5ZRCY(;i0}=2x-%+h#}o_|?49VO)${&Jokr z@yzd{|C)=v&XIp#aDQ2uSXJKV#cF3gu6unTM=~>pbwu>-yL@!B8-ukHJ%fC-r;TKn zL!OPOdgH})lu2%@|MTL^F8e(vo>fr&Aq!dh?qfHChU6{Wf z9P=B@%WZbym~FD{*5SY)*SXyi0fkF=-f6SJkwimsE)_gP5v ze?|MnU}G~zll}DVwXsnD3}^1B!-(pCoT|@f>$TEtdCEW4bZ8aM|Fd_k%WWga`c+W; zvwt{V%mugor)afa*ICDoC1-O^mC7{$1}2XwP)ky_6&1Jg5P8BpNoEFj5WE8~EZUyDKfO4Bq?)8_)U^IRRjjQkXT*c20@ofXy^Mc6F{__38OBv_J z)8ruaQAM+re$y5sQ*c=asQISb9T=zH6Q1{trRW4IT$e?bL87*h#VRU&ticuNKl`zT(_OpM$|7FWoNi|iBX<7^9sfWjBlrmZ)@%V zP%)t5qod+t(mJk8TE{SH9TcM=p##MzC`Mtq14abJC?Lc0LWZQ6v`#9M)(K2n2gN8T z=s+ zwYRo^E}pj+JA1`W+~p~3!}a%lju-LcyIAO_xyh4Efyt-jsu%ZF)j!g%RDXB zdep6VTa&j_YMcJ}+b~i`^1HR~`gX_H+Bf9a7}yxeZ%SUVbUuc9=DNX8{Ft=oePv`% zT7EuyG=@>7?+lOgUO-EiM-jf%OO`k#Sm?*|A!$=Sz06lqG1;cHy7J@y_8<|9yj%5D zxeWaJ4@QIO@jE)@Cwmj8eZ5nsUhc^}zfEmaT|J*EtkipbrMkBdrmGFRu?Nvh%hD{1 zTiEj%vT@)e#$1kE$CCdQ+MzE@({jzIzNfqpQd-lPGz6RP*NELN?;IZBR0HDmaK7;&OQRs z)w+G!H}Pd==2N|4`z926)9+YY;EnsE#xPbJq7x(cNk2@pPtxl>--aco>sf*4JBSM> zM9lXo;t_Tb^&Kk|zGZS^)dF4BPTE4Cb?ZA*6$w}s0Ng_W+;;392vESeN5{FvAUjeS zWJh3-UGu>E$I0|=I2#lYmsIdA-V59=n_m3ugM8K5+|pqnzqad^)G1|C>B60=6od_5Z_hH-nn|i*?HCB=`dK`koS`7s~6uz@Q?(Lb?tiJ z^T+g-YY$?#?qt1t{#cRPZQ8nb{gvK~ld09k`YV>+Dq&}7O|Cp_)eP;v{<_-|m3LcT z12rq(KyjLSmBvSv2DIrXZJJ*SD6?n#}4nv(f>>)5suBJA& zT3&;6B*XGu$}6ngc;;!ck;fJB>1`VP>NlH@sZK&imTAN)R!xO^Mk;P)&mp88qxVq>a|zOO&KhT5uhoAu|X1-|ES$3>py%EN4i zk!MFC3aN0Zh&=2tU+LFFkI3&8$S1!1QYw#i17V}kq1X-r3)@6VAVO-IVPFar2`i9? zu>kSFVTf~%Ez=J}O#Gx<_zEt7ED`~@$^w+INoNGWb_iwjzWvR3V-wO~b(RW10e}Jk z1po>F6j}lbFLq={9)Z^OCEgFj0PzRJ-w6vZCq+E_bwi7g|Xg`bTYMo zuQrF7RXbZ(`+PfJirUIxEk{}9LUQG$)E2M0Pb0Z`iNYjYyVp0-H$pX_jq3qz$6|0c z7*ptT%e1UOAlo%P#2n6$FNBREMVDBMuB?)~vQDHc7y2s?BUkA+Y$K6{Y;~(Fbth1rqb&t}hVg?kR{4Dz zQ;D$Uj!f#&%CA$qZhWEf)I}KnPjd6U{4pq)H;@iQ^=axu`>71OQuR04JNlHIHZg+) z3|D@YM)wTlsVlDp$8Oe^4Mz`qJ(s$Z4Cr^aX; ze^&pN519=nLKx$TaVL#2$6C`@>8sshYu=1JVtc|zHn#)Bd`gh(Q#EbRAuPZo;I?0{ z=5O>a>k>S+nBcKmpN%D6>)@N(h40#SBYT-AYRK$%%;;VUt_5ESzVZZo<&JxS?Rrhf zu^`7fdXD85IhI?=v0P}0vXEfCmP^T~NUd;-lc`Btv_ zq0J-5r^u&fgc!Fi#IYM8*S4(4aa`fpby6^2>gxbLUMo~BSY%H+8DwDU6l>mUmZjLs|`U3Np062vr&|RTrH^{>>#9uajqylo0fC z#8(9u8bKeQC{6KbJ~GEzjguS>MH%_}sW-|G^o130 zsP|DmxY1P{zKd?u>S@rgEaBpwde@1e$U`zSnQueOUBu(rKnXQ&x01yyUhzRBGItWU z4NGE^yI~Sj@A&tXEmgLx47nDg=tH78IH=TSv+|DQR9jSY{AnahajMpz^ZM9rKmqGp*aQa=G%)Gz>jFuc1{W?bHrthOj4FKkbeHr68^MBpjm zwp`S|4`+i+Iix^vE*(m)q^y-WfS##EkXlC{+acEfO}iB&-3%(N45mt(llT?+k9af& zJTxNpw5rO*)oG=`*c8Gw5p}qXbDrxVZbd%wtkA+?;6&IY^(mDl^O$enaEH_eI9H7A z*=}XhBVX`)tG50nq}YJvySr1){|jM2kUR2a{-FG$%}=g-Nuq+(8%j zj3&{7Dh^=bzOaxKu#i+>ApxSZap2gaFDBtcx*p@=8~>uXjBX0sH(*~b^}2mf3H_mU za@Kz3?H#M%E_HR=^#8VQH`Jz3V12urCy7_$hMoT1Ye}!g?0q_mE8RC{C7pr%^d?`P zjYqsJ&4R&xWP8XKv|{D-sjCBwKaHd*ci#}wog48u&bRjSm)|G`XkH)3 zmALKgUP{f;cdFVhX=%1ET2I5kQLTUBg*H@dNBTNz?J71<6k=j?D>Qv1oY0nt-xbK! zys#6x%(5NV#H>DntpPCX->ae-h8%M%s0v2*5E@#o_NxF)0GI$U0bqjDzy#1e2T;mx zC}lTEW}A2gcCmr3JUU%T3%Zh4=t>H7WfNWbek8-w^hg`o>6gEVjqKLDU!3($cHm&) zM>Zm+CBqVq9OMgXA)g2%8D%g+#Hf+R($%*ysS#1%cVZ6~ZQS3gyzt#Yxp&q}){7!@MeOZceE!To7!%v{T zs4vuKHBjl9O@GP?fC{e^st(zYy$uNbs&BZMmWc3ditj|*iNTFzO)H;~EJ8i)$WXCf z9Xl}w@^__Kzwr;VettS535h8SUVR3oZG%sZt-tq8ADQKb#K#0hmg6EuJ%T(pq$r?% z;L?aN5z`t&&Xp$8F%5fM+^7 z&tw%mlU3oFEZ~`%c%~b1cRvzJICB+`hMx!W5Oo4zod91Sigh~GdXwuw+x;1jw>}dU zqWtL5z+Ds)?3Ic^+R-+WKM8`&^&&|!IN5Exm+V*A|1p;9X!`SmbjzQw zb)`f8TmJL1{EvbYH^@B>vIFmUK_xf4=FjYmF z@=vGoan&mM^EbX~ggOm{VAMx8bsWSZNA+~IeZ;BDux(O8M13==VktYcajuP{tr=ct zdGH42w|TjKvoW<-um9pIWWn6KGWTjpY`!qpf!I2r$D++1?f6~bQ_11 z@L}J0E1$IVDmR1iePX)>=Eb|W@9X_0WI)th)yDDn*9W- ze`}LBEq!`-Kb|HWxB93e1x$(c9mW`zo8NF5nbf1-Vp!eMeih9U!|b^bEehP8ipTS( zkMq8fU#T(sHqQH#On)-e(>J(QgdLEhKiW>aCM?xtjP2;m8y#^9MM`4)h2^hYwS`Mq zdDyC6S^fMgZ%akCx6887n)}_rv{HB9Xjv)Jn10ee^GorzU&2;JOICV<6B3ua%PmGG zYFw>Hq{Ou;Dg6X}tA1GcM{MX7Ig(2}3yTdMkThsBz71!Cyf4kk4*s)gMBrq-cFq5=u1=)euHY{98~Uqjw=`RXhO5>O7IvCNc*ALI8vS2t8vUboS$-TLo#r$O0pK0*tI%FtToik#&KQ zZDeG}BjbaLfgRQYl>=aR^+2lz-QrHGgf6p~wLVoK^G;O4mvi~QXWMjUZ?(P6L)XMO zM3gxgF)E{(7uv4Owrv&!CUKbS)B{erdYA(ZxDAkhAB4Hn(o zgaLg5`aC-N^a}LpRnVsg=(ADzDp#6H%DY6LZ?va7F!*dx>6x2h&|M2cww0(|6WJ2ITAVpN@}jzSH4AcWrJALv*;%T&JZkQvR5!OxI3XHBG=yjf z(Ga5HPGW@@yT!S2t;yc;8h9n(m5$9TF*E0tm|5nP)K9=GE%Hhq#7M}8Va&$HTX8qm zclzQ9Cb}oVRA9RceLx29daoz^t9VRobwiZ5B>dKc?z{VY`E^Mr${L_p0o}G1*`;;1 zooMVz!n&-Scd4%K?Dcdq{L82HDH>1Kpu1o6k`dvJG#=?YWVUxL!|gUeZ_7+C;1AO@ zN+hc~)UJ2Q=AL?upJ+-758sS3^j$lXT}iG))*oPXAsUHoIyAPmZf`^rLBMqbPLce zCqTF0f^NYTx&;H>(nPmhP9CNMLq~G%CljTBZRva`t*v^q)7^kOa9Q6mU)ohH!(Keo zom}C)JtM9`1b#p$3z5JfMKbRXkc&fxq9_VT;0TUwUV}ah?y@amNP{1S^dI~y_*d|+ zkos>9sgeZOp>t!pR)cY>5nBFOnge2_{#KO zik7N;APUd(N;kMxT}(fv)S)_W@l@pnjHgT4(K)2<>r;19r0%4Wx)Vs<8%IOxmo*Fc zw9|2r*JEjhNn@x3X6*|dl2|oqf9hRCItJui{mwXVzBK``S#K%Q@w6j-8M^V3dY#jk zu}8c?gSsFPp6^Eya!DA-piLqq-Cu}8+rgIQx}hLueeg=jR9YL#Rx!WMlC|aLw@0fr z){v{UY*9PpePCAS3D-AmdenyD15k%es-q)aS|D9oLAn%>ZWGddFXUx>duH8kyqu$@eU?}}i?|_YuXdUogPQ*9$x9M#&xmJ|_zE{*$?tPY{*_91o zUMJsrmHa-(Y1I>DLqg>p4&#Theg_ScSL$VA^$99Pu~Zl;&aYQ`3F^1mD=5_%H6NJ^ zYv#us%Hj*@Cq$(?Vo<)Y0&J-HEyK}O9KMTg)C=331AXdUCyP-Yk}bvgHf2y3v7QH` zOP&^b^laF)c9HT|U29k4tHoPhY$W@;>hzObUq-y7_gJafOP=$z@j`%6F4EVg-;Qq)Iz@MlWhh8=U!l$5);+nP@^MVmk`;D*^pgLg_ii| zLpRf^c^gS@#h zZys^!lv>;z>ivaFb6cDd@|)TSuYs}j%UjNv|2o!@vD2o&8R4AQ&Sb&2z5b>Lm4TdC z%U?fmu<#=r5!12}!;yo0p@I_;RzMk#xaZa5QnHrX+PcZ@qP6)syV=Fk9Hm(0hv@Np zM(Z7rVh0up*buPc(XpXbU_+~d4Xxd<;jf7Z`(*;dHxs#1#t$RoDvq?ipumW1_c^}H zdAk1EDRS5RPR5U6@9@TIZ?qOf z^;`92E3Rq|3ht!?%hI!+-k7oER9j3H`?GJzh$cg5U4)yIm#dhg_{T|6imu9yX9HoB z5W+7pBgyG%8UFry0pVYib0VB6D^-WWt&=xLY%rOyn z!T?!<`<7sC7>K$cZV~ydBURYi@x)DNvirT??J(s&m5ppe9%i%YvjFWNS^%``2HN!j zgMn261_KQCqK8CpT;ALsKHQt)$L&%45AvPgkMv`dXS)-sMps^tdNMc3>-xzk0jpcs z6gb;W0lU}~uq&GaHV8(V_605`0gr`oEnke7z3jQtq*DorjMi`B94<`t6x}zW(1TKX z8#G((Vv??0!iIWEN~Fo-$D~Q8F^rSgoqMYvrr9Uy^`7r=YSRy#$n+@kMPwotVUApj zsM15n5`JVcm(~@ORSRlMuu`|nXEUan97w_f_6ACsLnvk1@dzN80c?D9Z0r=+*r{M+ z2e5GyHvW~zG4C7KgW8gJdGGuCAXCWl7+vU(9d#Ez? z!)Ryvi|s`I%igs$w{2wUztY8*JcMlnXk6z_kuS+6jx>?I$?S~F)c_hM%Ot@Nq#Uh_ z^Ssad6Ze;FUqIXlk{}6?lys_Q%CSWOV59q-@7%smZvjj1n|sarvnol~n_0%qU&`K{ zFd2Icqv7GVJy{mGutCPtI8l2-{HXM-dyTc#?y2HJ3M}^VAT%aN+`fHS_K^f;zttx) zg~&nvQnuzb<-hPxhEIrasozYS$JaDBaCFQJD!`9rW0!;k+m;nrVQ9Hbt4alIGMc*r zBYiz8GRh&*W^>$HQ-5nldEesm1{2#}AO*%2j4c>jm?&PS;p*?99MiHpfT$Rv;)NZrhS5XWrKPN`;8o%%6Uoedshm;}nMb@?2vbvR{rRy;p9i@Bgw5!;MgH33R` zHz__*AGl?+^z<)VN%bEk71(+cm-6O&^>E#>Q6wZ9J8ZpDPj#9$$*jkU<6-IQlD=%g z8q)_93JzK-q45j!QzZXAjQc25TYmMU!{%SQEt;C1PHaC6upd|)7JAgcp65}lv&ai{ zn^B!qn~v6<$gcbVSm9Ic#%=s!j;_M-a7IU)(i!?u>5N_Fqub#qp7+kKjJrab zO*0k;1s08&ZFd%x`iBy=e%!&6`?Fe-UbZ*_JgTKREBS5u9h1`J&Vb%C6v?N1kv`rY zBgJ75GM(B6CWKnpG%XWT;(FNgBZm^p(5V?z8{Dc#=78W$uk^dFpTf>!x8`TDZFSVb z@!B&ydn(`z&VI*d|G>eq)~vuK&5Z#7ex3l>(lP*SX+;1m{suL@8g{s3q#*t|XoJ(6 zKMC4k)n@~&!L6_c8-YzJ@vspZ6q}Y8U}{+wj(pSgspk>mkm@Y6+DdH=VP(hS9IU~G zV{x&p!B2I&!zfe-2NF`FfDF%$4D}ot>Lp~T12WtoIWCGD=x+Leer0p+UcPk65>RQ~ zKDGRKO{27NiDbcQSMOJve=jXa^~L5db8C@2f5lrrwvDo{pWX6f0YZG-lzy%prv{b$ z^!U~m@_|2YSH-*cVfux!Y460eR9ACF8^!pS5WZN9&dU*ig?yYo8b)Q7s$7k%ujI%W zqDX(KtC9K<-=k<{v({zHq!&eBhx0*}Gb>lh^EsEv=;76ZAIH!C;7=p9)Ry&K8|gMn zQo%fxsyr1ZT=88ht+`WEAHR~D;}w6L8-9Zy9tx-K(mIEL53+ieuO-Y9d%eMt&bJPS zp310}&-Wg=`%(?2Ny2_Zvy5Qeh-YZbLB#rTFK5aHU_uI4BDD%)+=!y7{5JhkYt5eh zGcs&kwlkQytJTtHwiSh#I6Uw&buGlc76#a0mTT*b8kS{LLa;gnCqi@i()c|_A`zhC z3w{szo^;dUcQFF&IuXH^rWx3G92Ya2d67;T(H)!L#UezvBSNv^S|+xPkYd-c8Fm?Q z!oasksEdcOgUENSfMTCe%0EU-?Ao4#`S)-l*V989M#2nfVHkyuhFRz_Y}uiYUDM## zr9`8V9U7)#iH~`X?RaK@c`V9*Xa_EKBg4ZECARHGMDsmywa9Rd$Rs`{o^4~x=dr3U z9?+IqmhP;~xgAS4 zFKuo^#_f?L1Ed8=3y>Bd?QTfh2kZ&h6R>9ydp_+6^+pZcZQ)|5Q$U^K0_qe-UZ*fh zbqWLO6m@lq|74*Mv7eyV6Yjzo+sM+^O&j;>_9ta$>x7kUE92_Tgh`^+-C)UBrV-I6 z1q0UEXv80U|L{M5lfU?O#`yY)HRIlsJEI_v5G8OEj{RnKr3~FwX1?S*6F>j7dd%F> zXI8Oy6J^)n2kc`9+^^h$l(=67I*<$Sf_oS?;UC~uHvI(0Ji`AA!;m8f`6cAgS8AI% zs#v`}dC~NP$x~)$ZjuA@iA{sRH*pX$8=Jn)eZ6IR*bO|#3WRd87gl`zx^*~!j;zwL zUT1Mm-m<>Y?(CV~>5g~|>PT(j4SwM8^??I0t#as zomy9~xstLJ$83+0I%&8L9GpAnK-^UY>d1_%z(8V0p>O&U$=XSZj4GqC4FV0%_Fcy` zEo>9pz$Vol?CHLN13xk}5{2Ub6}P*7RFCI9t~>tc6x%&#%<;U2WWne>4Wn}y>Tl2d z0O|+Se|FSw=BVE+p?(uke;w+7CESZh)QD!1cXT3~qdFVBxRcVa4<{bF_#SAakMPDL2=`e)E0)I?sY;pA&R<{obF74{^nTL1#l@AoGT}KYGg| z&3}us3jEW*s$6N#!Ev>i(cW_TIKJ*V71Vcc-M8utD89#D7Mhm#e^VlrnGnwo@1%^R zu(;X|{*$!pE3*&c9;;BGLV%L}+TRycDj8nOS2;{#5gm*M$&Pm@48k9`ls}bfo+|8v zw_+d623y)Q?IPmr8url{L*`4f(BCthAnumsLZss7!x@SN07J@rinYp<{k>Z@<2F$q zo?fw~aG$QR(nZcWIeipoXfIU>Sxm*k{jsJN!hzb$c!nnN1Phz8CLNL>#=WWPd6WeZ zxgq$4_%BKD-B6!i5NQ5^h6%D)eO!J1nK)r+x?1K0?f>Gtsi%zj@(&CBaO0r@w`2O( zfrj#ug{PvB?*yT`Nv%M`rsJE~(<}osjYgL4gf0o9O6*gEm)hcisD)ykrC>HgvE~Vu zoxp0Z0xv);fLH*r0Ac~e0*D0=s}+a^a&x;A;4Okc$bdrz{OlQUE6;#ir3|m#1!hsjv}!>s>|C*I$Ut4!wVTZ_vJfD|t{3ZY{3wiuh| zhiY}*-d-^D1IK%#*OTxjl9Re;l-)TNiprMe>p?6~UloT+(Hf5S%1H7B`bVmFBP;9k z0Zl(Cd!B_?y9g!rjyb+mawSQ(;vVD7?}qZbcAFtbYaGCB0gofv?dqsoTE-Fwjtc>x06_5!07Vl*B=G;>|Ih0GpZ(lj z>(~U+kdTHvdm7Tt(~x#44QYcq72DV*e6#~$S!)m~Jt~3*@KgHB{L3t+a+9Wr zx#@6D-2hEZG?rcGNA7T9@otwZPJ~b8hs({CA5MROP*y{=E_{pTv_GJRmD-AB3sqOT{TWpRh`c! z>D0YE(4kz!;5EQ&fY$)8@r=dZTJdNg1`PR*v*$aUJm2Az@*NJeUDc&L?grdCf1$%Z z5k~@U}mlBs)9h>W;u{%70_m6^hRSc`od4g(>PIIQT(Wc z^HQ3|JwUo%90ZZY(U1F=M_&z-K-sY_$@lkG61g3Y;(0eZA_egfb(hW3A*YiJ**gBB zw!6H}&|j?bYidQm^=`!yy<#Jkqzl!57;Lm1m;xfbB%+spi+O~v2}-R` zf@p%2ALH0GL2_##{(puH^jWHQ%wF^gRG^O_$T_kQf9im2M^^yf{YbV32n#CtQ)NUV z22R)nh04;bR2I;6z0it0leOw9|2k+#{Hu2forwHl|i&VJ)&eL${e`n&wXRE_Xe(=9W`y zTL96cOS5eUIqN-P&5_Q54PO9v0PX@CkeK%UeK;Td zte!+BBv=2LK2k^W8ygxyJIq{GdnWfwW0vN8vrfZQt0PZf%?IoO4QPlWv3PaTK+TF> zI?+rspgMMJO0Y?M15=lonD~BRdqzOCz^Zu5Er)FvrX}lumXy)#){}fr27{XO+)>S{ z=7>If86mJAC$JyKWobLGB!I;Mi=P{d+ggUjZLNsK#oqvnuVe8y+|qodGjunPC!H$( zY-lSv;f%4-Y3BB3I*kRtu*kbzt87+-j)G+eQr<$kyC~%?eS{*Rp=cxqUg!kH>Eohw z+l%>|#VADSH@ggx?sKGwJA13kaM0x6}tn+3NeJ)DN-7=MN176$@k8@T=>RiaarID&bXcFx;q{0D94wf7&`K4R(Cp+xWxPI2I zmx0s(qz2BO8Zh$IfKf^f7?2vMO$~f`NMde%8Gkc<#BDcs&gjjEeoh9%X`UjmpFDZ5 z^+d>fU&}XsGrN-WyUCsily5r4<0wRX$J>D@S+*cYT}1e$zL-^Eq_;n`63x|oqkg5M zFZ@!?FZ^){A`KTQ(vVUts>yT#1=VnR(ie<}ig=L}I2TiWlWanl|H8DeBWmkd7s-%o zX})d};$n~JE;fnbV5)~94m1`K*V9N4m{okX)t>Ll2G~0(b9ecRN6n#Yotr}!j5io> zFy1FJ-p{xfpc}^m2>?g{oIL?R@&o`WB>)H{0O}F|KP4kYm46P7gY@Q4g5y99+5p8t zD-;JtU{gvwY=j2IrsV~gT9$<)-*kQId4xEm;-Av3)K=qab}Y_8aZorG7fW&QRJS`c zk9Ke%0T}`^JUcQpb7W|ikf9045Rf6bNVZQ@51YT6YhR+Qf+Br6~OW4o`Y*>p8XLL9lGITeeF*@#&jA@G#>_4ge z;nVb*eaJj@h^D{w*uChJ+ztCeluNqWcTe8ui0!l-EzEi@@6K|C!^G2HR*JyIHk zD|}LX1&^#nb43N3Z^e+#V{W_~v~O0G!qWanW%SWvBBi9{$fI%-QjIE}p)t2{$QQ6* zk}j=!8^dhQBfZrJd4+V?lK;sK^E=VsD0`KAW4;x}i?MV(s<*ZQKk3S#Hs>d$$=%9C z=dHzQ(4snW3w^680coi_b$NV`JRur0Op0C0cCl&N47;XAvE`XTsJVWq`&Ff;ii>J3 z`m1`r&dAQ1dOnB)!J|RE++Dm3P8OW(BXP3rjt{isb0NP2`JJ=pcbq)Gb6wG~YfO}~zkh8D8Wh#*0uJe;FZoCs~`(Fn!!0l%M=ot6u6 zLI&k^>~*vHJ+Vl^Xt>e~*&B&n;G(XrUkjOu%u;N@N|8xSX4p0kz0k&{X1Un2qX<*o z4^7SRLN}~prLu`VK;THPbSzd(_NhtO4;##{H^bF@MTb-Q&m|BA9|1lBe8izXVh>)v zl|kDTUbo{iAi9R=`s~rQn@87fDY|wcx~_|^f2MPOPG~~=LM{(oO@?EU3_Y8q?7KLg zMDgg0;93@DRkD4aB>rxsD_f^0+pGxlR$cV9`u7a#moJpEGKu`}aIz35xK{7+mU5#q zf3J{JjZk9|sJvGwC0l**uPaPbhBP&w%-&M@lPiVFeo3HGuFbMVk;uJuA$ za>1d8=(DI;q9}jT9EJ5h@FgF;o`g5idtuS{0H)b;@-_NZUMpX=26^|oVq03V+dE(} zmems7ZZv+Djma_ht+X#imhn=hDziC-Pn>gaNz^F(29kzR?x)N!BK@Vl|As2B);=-A z`o#~Zs1=Iy^9|)F^=z^N#gaFw;?%tKbTH$1zqb$xgD=C3_OO-Wuvk(aKYWop?9T;X zdyY--hW<#JgFV)__sv*-`>^~Qk{{!dL@1&Mfdu<2I3DfNj%RZ56Ni8@z2(Mi5As|JY_g{E>>Cz3-?P)+%D$V3NZCD=(KW#xB9Jqpi)8$ zZlm^)TxivO%wPVnK+-=Rs_=3Cyqymvj ztC7l+6OOcF$hg_43lLS1Rp#P};3kT8sHcoS?fQcXTwEEyk?~uy5|c z>u=0hycJJ!N^LdsBK6j<2Xyk8CI2P1-=33ObQTQq{d&~wPYpzCJo?iJSI*cy%karI z?6>=is})NZY=xx?2Y0JTO%>h>XtYdC1rLVQH8MA&Fm%niPJfb`2<7S2*w-f|ER%!G zMh!mpK5@fSE{hrUHrd9HL0*G!-T! zWuv5uFXjU}SACQG6vQeZ$-iJadnr-t1SRSW9Vo8XZ^Z%V?K^-cD%9T20jZpZ@=19+ zqxbAVLF~12lK=1mPD#jpaehXQ78~zaDN@q{%`!=V4XQ`jGz|;8hD)%i*+%G?RJVy! z74%xeqq{0}#(IU$sHj8MVBGGfO`0IxgY+QHh6EW6Q;PsN0dNA~1i%S^^D+TvACMs+ z!;>S!XUq@W9%_Y(2vkJQT@i7#tRmuQ#fpgd8&pIioxl!|*G~}O@>nr4K`Z*I4-&p+5-{dd8oiT1t zT6EpLZ||3XLsy~bC}c=1x}+PQJRtdCCuF6#Fc=%?%(sXZ;4mbDd7Lur+PZ^n-?u&6 zvuum$6|Y%)?skD%YaP*AWjMRxI6n^Qis}(jfTG0O6gRlcOQI4v-um`H_&^ z%ptj1g5)M7YwJ+?fAFX1qpMjUTt+Y#mixVYfAi)ET=QU6gIgZZv*arseG!zLWyda_ z>{65r4ua!y=8?T({2;UNy>bv6$n(VD0=s9k*Y`@7DRn1>QRpi<$(9s{U5Zl?mD!F~ zHKE$#}F6LMB6gJ$(iF#3+r=1(bchl8X3X*{Fd>)S< zmqFNvRrQfSYww@`_dow@aND8|j2wxb$J3PAQEj>vHDo$q`vUE|PhTLu)nv>q{;GZ` zuQ(9nxsu$K-&V=!#S=A_E4NMc*8EpxxX!^2n>__Hbub-+3bR(Mt+J5%|Lk4clG{d- z{gn#7_+eNw3RSqxo7`&4ij_ybYT2_JF$zTiD5x=JlWkrkbtvfAkJvBVFWI^f#DyRU zk^nE=8R4)b62z^lGEbh$JlRl%cyHN-O=i)bcPz+o{VlE6GiXJMq4?nuwHS(8*-dM< z8@yN?2Q6^Z0j@`iDw3WEDks>PZ_ptW6 zx-_DQy6NPy|K<)*KS2Ee^#jxoP(MKZ0QCdZ4^Tfq{Q&g?)DKWUK>YyqbH3EiGt3ff z+#{<4atexgAY<_48G}xqG3b;s1|7&4tjidDscug@68SedyV|VuUSWUVXj52C`tLd` za3NAspodAbe88i0PClT8ZhcefqjUv7hi2c^=DCx`jhJ<{$3a1a2})Fd&K(+t7svFK z1T@L6ZNm4uRlVVG*DIQb-EQ^z&sqAQf7WyYw%G6*xUSPQx?b3vNlokOnw3{WlB27; zk%}`o(o?;7o)^f>NzGLaXZNAvwGy4oMa^vcb_KcT~Xag>%u@kz)Avg|v z2Q!<7*ypjpiDdVI871x1-&PoE;gM;S#!S$|wr=4JM`r!1z>4Vb; zr~k~H{&Qptm;Q1aUDzHh0hSP0!jrRvZq5?AC6>?ymJkHOK`$#y&M~QC2Z&cHmp^GS`dg$jGxuwfJwM7`r!AQ8I+2696Iht}wuOBnA{^MRMOYk%epJmttaUcqqB*u* z{f}}Wxv|v3y4qtluVR};ikaU8*Z2O4DGC zxI$LSYKFZCiIFO&&1aV>kuAgCdyR}AW>cl{Qr1~8A`BVIZJ@J&q|b@fcbVA2DQK3W zDc!=hurQ`Rr5;W~FOUG#3b4<7j;ZBGu5bIc6O)w`u9C;v#o`qHu$}2ALlnl$# z5$;H??CsW8$d}x=9i4dre+2#r{1N!0=fToc-Q+g1rX^nqG!4)+C#PwGoTdp%G)(|B zO)X6$*Qzw+x3lpV@u-{j)$%m#lAD^=><-%Xyi0$jd7|B{$?2&Wni_rG1|nqp>dfi= zxPGy4F3V@!jwP2T|AkL(v)PiP>qRQ?{2)=f{S?x6lAfzzyiNq@3RwDx`g2V+=gttc z!_9OM&YZbO_ELOYMl!jUae_3J5-WMPY&$tqJXU3SNNoeF?OhqU$e3a&LRX3}jP_ip z3=%R1PDeBSEOZ%ZJyR8*e?L>o;~0JaZGJ>?tus>% zab4jjUgBfQ-54`B+w0%&K^;!d%}*PLNe{f|SXL(!x1q{!_Mm8q*Wq zby$RD0pcQC;bsd97my|(&66Wdk|Rx0LYf4SX07-fAK!_AoX+UYn;dI8`wNR~YEXP0 zi5Yd}+io>MBOOnsx6+pXp^neC1PTS+tJ?$Y38rp*&{iqW-Wh%tgY8{>S+gd-`mkk1 zeqMTRuJW-)>8w79rd(!US*BYyBkcLoEUZb>UghyMka#v}#+S$=>)LIhdw{YZ8TzVb z57N^r?^3KCuIbT+5pd6+wvkKKfY zkrmL0#8v!OGW`nM>$faVK2VW_K_v3zdbmBxT+gB|PCU-BV|yG2F88tHyS|__qOKpx z)BBbk_;F0I%UlaP!l4pH1{O{TCy^@z5zJAREVL{hx&nvPb+F?)Ox`T9u>55lB%F9o zU>S~dLon!U6&|Vhw$@}M5A<+t$c?zQJJ+o`t)uQ~gQEdQ1CHh}M+19iEjU4-F@VN6 z0~*85X$-qWW7t4rfQCM3ii3teXz0Uyhixv<&(!mIJl! z7XzH@nQq7z>7%cA(mBg>q!W`ZqR;)qL?J$o^sIU|5ioUV95d!(TX4nTM*-%{z;W~CCF<3&eV_7y1JRXt<&L{2j`gcGItnd)dq~w5Oz(Oaze_%-cXJqGea+M1+cZ&E z;rE-jMJQ7yr7^F3L0U)LqQ`HGy*n!ZrISvv7uMOh8|$UI&AnK z@~Jqw;=`eQ-eT$s>!OM3dX4K3v+-2dwEUBg$LXkZz4+DCBc~$U`Q~0as4wY6OP&3* z%-$@VXtu4?fXHO?v)RrvWk!=lozV{b=FM!HXH_lc)~D<{azlEJ`gN_QV`Ws>fi$Oi z)z{|pB|0r5r0f+)C;OB5X1+6{Qvm6c+9#hiE;`#N|YDK02B~ z-+>EWJ=4YJXPt%4-MjI!K~ibT<>W?Sc^Lf5*{^iE~!eboK;HdP^3`rlmw zNv*nhnFq}C=@j$4cs__&1e`XR`H1L-dy_lS9=tWyorU15YLD+N9Vw zNs>@_3FfiqV-|)k<}M*PqMl%ZqXbo}^lud!Yzw>D)^?w(VB?f+HEJQp0foR$osMcJ zC}Q7TP4N8S`N8vp=LgS!9-bd+)>}d)Ks^HWcyj8|bhL_PXIJ=Rf=ZzcoXME)e( z(u<2fiEZh&8|^*oU1>XVIi~@(W1C~<1QF(rQjbGRdhY6B@n~t=3U&2J% z#m4lBn@Dcc-CZepvCq3=^1nwjQ$cf3=dPP{Fq(EFrcqGPFjrZxpRsd$F0!u%#zyAa zOaXnKG@NDc+q}{5y&Lt4UWtJjwAlQ`R^wylZT8S#4RG3x^*$wy{g=|a_&Pz06**D$ zAjX!XbUHzLYM`%5^uk7;wSva@MNbo$7vJh^4ZHijcWW$_JS4MI^9Drk$0t&1B=1bI zx%bkL=d+?n<(g%+Y^cU7f+~8wS5#Dth|0hAnr;8;?a2LVyx-EMZ@*DPPi8sXVIh^E zIY=aiwkYN-i7*Yh%N^nPw&he4J8N9<7PTukBE+^m4=1q|V#je^iPRGZTZt3c#1$4} zY^&N8-MWcf4-PJ)v~{z?-&*Kuw_oTAo*Fzgcxv#};HlSn>ZiR)+i%_xwLKI8v>ecK zr>ErtYe~xmR*{xd{{mWWm6m%q{>+DIgs#6yXQaVOms;buBRQSr+dQt;ctww;fYAN5 z^&vY8kG~RX%{{)<-|pVTrT@M65AA7}vB|tyUzbQZnX%B1q`glY(yQ6iAU+tNp+p%~ zq0-6I(35TwXvcxDS?opF3M@~$$cW(3i75_}khnas1K;&4F0y7(wY8I6yIwmBl-IA< z-NWPh)wdzJdOwY5Scf3}+b*VV45nMO6o91xOP?G|lN?Kv5|$=_rR%V?u33>&1-*Wf zjbv9HxP4%=o`rYY#ZljgvAkI^oc6kM%R3Y0*8?F})UW|pPMdM%bPZR&yik!Y@4X%i zc{d%f=IeVeLcfP4FkAF{c*v&ZO4CKdgH8}f^hc^_OEE;*KvsCr=Mz&UTu@KgJ{E*Z zq(nRqhk-|N!u^oNv7a!js!CHfu3NS(?U-1E%ky)}9qd@t#hkkW`z&?^ODvzbkvzXG zBt8?KgDnz;*r6i9VdMumc9>V4wQ(qH#=OpGCgQLwT4>9L}Ra-d4gA>=4VvVI0dVdkK>_8MvG( z%GIM03lkAw7Dx!`*q%I0I5xH-c^&3PuAnNr){A37oPc9)%X2tM?Bmdv7ZsuK8F3;@ z0#A8ZU{RWcv4`b@%Cp6BB;SQ=%UADPq2qeY3DpY;Y~S)7;bEFkc{ZEK_ZEj9j=jKQ zoDd#5>TFyv$5PjegNR{=3kS=AlecP9`OgzTP+yIN*VV$DYkX zK}jGFSN2r|KKI=i6E`68y@?R>&`mIvQ-q4hi{yD)>!?)q(P!OJsovwZ(@P0_FZf>Y zy{GcMz@v1G4uC=d3grwa6g#I->=K1y1BC+hqfk%>^`lTf3ez3xN1=Wckm2(}hBQZp zw1f;PAVWZg;3@$b0y2c@4#*IYAt1x&g$!Aa3|R>oGC+oP$nbV1jq9DfA2CM1%4L*e zM5hE0ou|@zomHw9eicJC5dD?fVs_q&B6~|$zmgN{m6=O5{cnGj{xf|TJQ_Pc9ht?D z4$C{Ns@k^S`_t??XEMFvzvYFrD)v&Zx66{y`Mgd+d!1PD*4*{#HQzlvjP!Q>>fZeJ zy?*Hw#pEj=$W^t&i9gPtLhWy}M!pv%nT-Bg$|0vyq%89UnQJ2P=Zp`~bcCi~(@3@H z6=*oS4^^>mQeWe%jx~Gl%T4sr7(EoG4B|sHTFjE{XOpvR=^iElvq@}YhY1@q7W>!_ z6@V0skih1yL%a%NTyZ$tf;ne3l5@&oT#XOAyvFXVuAXNf=XCU52;fk_p@2hqCJyB} z(<5y;J0MDcC^5HIj>hCF(&$NY&Ny%{bZcCn=MN1ZnSsrv%&<2}O1tXAODU}3D5Zqf8_tFc3iZ^|a^36v2W z2DUFoaqX{#q?!cU5)eqkR0ow8vlXdVVdT`5l|*`eAzK}x)z_3?SHOFWK4-H^VQ>A3 zG!^lwnq4-j86-ZBtvDvwjxB+i8#3(kkYEuB%Ok#JyIxY=+N*bX^MmzD*Lu>6k}Ta; zSauApQgCbF*1)ZSTRTIy28DPnyIdfRfHXQeY2@alky|2-Tp*3=NTUxz!Nxv%Db3SF z`u-m#=;ed-rGrBI9=k*w**j%nzg7AG+Oe!)-gQmhe@gXSzZz)hdVD5{R`PFt9y}^H zetR&UQJF<#~Qdl@XDvXnv-O_-mR* z?0{_b#-?0d?A`oZMUO%h`a30S^Nn20RSV zC=GR?+xLDzr2v(3aw^5ksT8k7rFcN4)KMw#Q#I(5dufK(aVO-Uq?>i9@|T$$ZFxz( ziI_$z0k>n)WLxv&%jQa6jrrGJBVEUhKL0Q!%vb3oGM1{#`)Cb4F0Xv8ALQL^D(#X& z%gRnEMAdt@09WRK8!=w2=lSU+CtC-|#y_`$kBgZB4MbVH0>tKtPK}3$XxSoV0f^Oi z_xusXa?MJ-tX}F1^d`}t$D=-q%`(cqIuVJI*~<+mQqVAn0zt9EsYH=+Y-1i0562{Q zIbl{v{A#PdqQlvPG$Ccur0l*r%XHbzi8ZH38nx#=J}Uyg1bhkj67VHYo-WDk?>4ri z4L=9;2+$)Zr$_vp9`Q@`h`*#qXbn9=%chq;8+zpTbezViG`m-$@p$&2N~PP#Flh`h zZ|)w);#;ag=Jh}^vbT3!Va~3}64OPZpLdg3$C~us3^j1OeEpW4dynjhOgibt38mzn zmy*Zj)*cxEJ5^Y|T#*~_iXU=E1YU@#;1OnaK(Oz646~3~wi2IXy0uafuhdw&!*d#H z&F9gh^o>Ted9c3OB(63MUfRVINQZze16$U)Eqk(I;c|sEV}Hlyr$gth$5e~Q(1WF_}&f0l{UhSNPlgwKN)vg z$Tsa8T2K8UXNvsuz5e0CsJExO-TVGw{&(~;j**<~CWmd5AU=FV`o@mfy>Fc)cmJqE zLeF4GGN&4&|NEc+Mau!2-pMPKhDZ&W877py8~NGb5v55<)=S#Q#ji(WbT8K0-(ccX9N<@BvETYHOvq4W8o zg!qUf^3k4tdD2YA=pMBLA0ALL*@_60B60uVTQq`l!^Q%VUeV>@B=Y zkJMcSP$Qs5K#doM8arjb0pvX^kas~WG$78Wh&WqS!)_0N!iEBDD4cjhfm&9!p&e!hv-Qw60#@My~I} zYZl&)CgQC`Gj$zX8r_8){-Jd9`r`xd<+Vg7=BcjCyz4DzU|NP%+eotgl?uM}gIR8%u-`XX zmOYM{9%)SV?b|n|!%+YV7RMCHCP>K&2m9Nns<1C4K@lXlvZXO1yx7dpRhY|ACJGBPxla&9(V7-EBU*%!l4Yh>DaU(c8Vuu~=6!S&)lG&O zs8ls6b^=}H2sUuBYuF0*h@!Y2C6?!#B?Mb_dTmi6b?$U;jK~Uix{?mboa1TKFkPUV zJdaovJU4i5@Z1;Rxm&FgY0r`G%tR4jqJW9ok%=N16GaM46aglxj)}VCwkueS(EV&N ze+bXDLS)UL^tLKPgbV5S{)`fIIhZ~W%lUp1D`&<)K{}mV_dnvu{6^SZURhqRlKTK} zE@3=}H_QFXW3EeG?)SFNDRn4b$P?qomX-g%3$HJ96#p;E)yd?XNZ0WnMA^D$QD4db zHw@(|ivO{_6DGedb8?jHE!d-<}ip)~nUd~P-SNpUD- zbZ9}dmJTOV6g$Gb!NVd5MzzHL!3RDZ3Y$giF5;)-Nu7uv2`#2_9OCl?xngCYk$`D& ziD^uDb7LH)WvA1{T=uW?=Tw=Z7<1ba>4}df{I3}rif^X8cwc-nMq%^{&Lfa*rlo5c zhHa~uTExdXBm7^Q>0qBYL}#vU*aj_^eWrG`wf=#er9SHLwchTw6TX541`7-pxFZXE zi9z%hI>5X72d7rGSYPJr(nJZ@AFnEa)R+B86YQ=iRn&R-bF?a}i+Qz$HF=Hd zFX}5tI<7+Z`LQ1x3kpFH?C1r-I7+4nt3P8kX@lj6Ihk1D#V@;~={xJG0$mG;Z>tPb zs;F2GsDm9vH?c{HMHRz$ed3p4V9ABFMi^9F)5$1@l2)tk!R53b?}3K^4{@#@;#|3m z1|&vX-V3M>NXM&X~1IbMXBR@d2wTeHcWPs%@BKe*1tunDDRdvBY}j9Kx{G)MT2MV(GEHI=U)qs z6ZkC&lAF$A>DbXjxS>ZX>VlH|>=s3Kd4&&orxk&Z-tUt|Z&k_Nr*X_8*UBfv+eF-k z(1j3cxi|c~v%>pljAepaj~j6D%MTg#!e8p*jA`Q3_s9RuiU{?wCHWc zN@YKBp=wTG|H1x){l85652V5VJQU=WfIH}%JFqhDz$$PD7H|i3+`-NF3E!#cb|$ti zkOvz1Uknxp!bLo}+glFKV?mA0a?$_~8Huncw^Z-In$~@5Vya=LvRy;Y*3lo`&4Me`el@pCe{z_6B-y#@s}V=i)Lun&Mh*_+LN8 z_2jylKGNa1;fz3a$L9KG^AOeL1vTFvMLGSpeFb$)=O4LR{8Hh4u_*uJj6SiK$Uhx- zNj`gGGmco3g8Ks9?en{i1lYgw{ex7g94OTdq_iNFng|^=aaC>C8Zc+trsh!1$3%4q z)*Yf^n>aT1EYo!r&o^DA%w4W<18oI#E4|F#0=xBIX8W14^**CX5V-HgBrx`1?7`R{ zk+DB>f!2O=jhU7m(a!9G3hV-~3p=t4PR1@c1$M!KY+4<`z}-b4vf?-2C*e0X;;U=i zf#^){=Fi1&8ll0%>CfmbGI zKzym|0B^s5jc>jWM{GYJc%uopV>526;@EfdD8y~>^k2y3SH~e1T8tAH5sjmxXque1 zkHTcBMM=W+lSA?+S!~Upz;L_}fQ1_gxht68t_Vlb+VI1@dx?}(_$7$vK&z(9_wS?^ z%&D#R^Pk?QZgJH&{vP?3Ug~9JRifPVwPl3Kt;YlZq8~<9qVS_Ql1LW0I8*_5$Im&p z18Xe1kOoadFTQL;^oIQWhR7I;?+7%M7y357(k2B8fvy>fr!#CZL&LhRsMxh_2dlcv zd}6tbIbJE8s6!uZky`c0=Fpl&C1mp|`69j5dImr&M~+yU(2)Qz0AO4Yz&IDq4j|8| zK%Q+YwAute(3Sv1YS%=ns-#4!s^p1O@joC^t3>L6uh($S_=ThE;hg$x1g!~&?#E1X zUwi7y?2E324i3#fQ^Kn5-{6mYqnc$6Kc_l zLktQrXy-Agn#G`MAqG_;2Ca)hKk=P2^G5U;{qi!)!cVmjd#dde@bn8@WI<#0;bq3Y z52;AEiRJgjI^>ZBwwRRwGTd7-p8u<^F2}wlkWo%{t22!PoY`fb9a?bvm}| zf~6wbv8xdNLHO5s_(!tvj}*c`0^wh+sycg|j+n5VgW*WVFpz;fGey`V&N&{d+Qz_> zTmHhjqAzfWBmd|Hsrv|aA@u?o^D@q6CNl$%*;oloignl4v27X*`#RI9uG%DU$~e2~ zpIg((ukrklF9(m_LWUe1FgV}?IAAEm05otug&6ID10dpni0hn)(=sAXD-dxS5OFa2 z8b$%b=xZ2#4eK3b{ZDQ5HDE))hPz@zJ;R220UPRo4Oa;6%~`M*p{uDFp;(mjZ?jT& zRi)WrI^?I_cU5lU%5s%yYNol{JHCX60TXYvcfu59eAGkM zm|aVgbUPkxC3$i?OGk(n#4EUCd=WHpf3rBsi1LenrlW8C`%UywstPHaS*cvfn=mY5 z){?ke6g>hop9r}WdC4LXFwI?3UkqeQmQ+`I_UZ0jCwZZ|8dCxftG=gUow*ddzM*5o zumVLh1A|egDtS>ce!JK4)|=G5<-Zyj*5(5C^=7hCz?<31*B0=CeFOV;F81wgCEQbM zuu*QPMcWHuB!rQjhml4WMjC}M(tt2>WveIpOy{{Y135tSnD0~KXYUmdOacavc#A?_uW)bM97pURhVUBnfCj?2p|xMAFEBq&QZ zQE|*A*9MALOt<6EHiVD1s@tZiW8Lu-tP?fBjz$ga`G&)E<}j+6b&X1q(c2U?l4jkX zi3L4)uvlkDw;y{}Zx#2@{t4y`%-N}$vojy~)g)Tn-PFS9a0n7R4-(BRNHhyUq6tA_ zU6A-s=FKMjMTOzy5e>$42AZ@7=pQ+R&f>e}MXS($=D$lvANURbO)R>EFmFJkuOQ8T z^ajzY6=!`G4s6+Ia>6#p{V)+jN17d2j(e3mVl*5>V?pDj&&75@T!lFxE#~Gv(ib$7 z+l0etxuk`~h}NK-o*NDA;9s2~9^CnF(WgNEqCXk`H1DIMXtK0Sl`%7Lu&V?V>ze0a z+ZX87a8yQBn;FC}0oNLz*H-yztviJ_OK_7QL=2uAJU4jmv+~@nR=T(7$e~;Tn5fQ~ zC@W*4tO65d0TWfnM8zJon~uo%FhMe{wZUm4JUl zs1bPOyhs8CTM8-DebGfnWNu#^ZAawUu6O8&+{2CpYzWw}b8Kj5*w8LuLmRMR9X9;? zY!cEj`d`LvEaWFQxkyR5j-naNo5!>7gH*jf1~#?d>^Tk?op}%04%(G%j22P^R3K(67664lRla*=4k%F9ua?g6Y(#U zgXJ;7-4{O}qcD2+2lP!ae;M>6TPk$$9jYphrQ$#%F4i5(#*RUJ957#@hU+=3QlVRb z&28~fB`kiS#SMV50b>Kk28<0D8!$Ft?9MSZl+6L`zX;j*R-ypNfk6(e^BkCy<-nXm z4$OfZSX~b6`hmYzVMGuI+x)xZeI~-vanyTFhOGna+Q|%cTx64=`n}Kc7x&n(z!y6b z&r*y5q2m`MFYIJn{8q7InW_X|Ps8y-m`J_?m2?K0sPQd?|*moR?b=C4QwRI2sL0~zW;u?;kl(1jb zX|zQH*SVv;alvccQDa4%vU54LNrSM5?o zn+}C2t%@xrK0zI^#l;J`7eE}HBMvn~9BKh^sDL;V?wEi@D29`nP@NUIr7s zn)$;#XzHcLp^#=7n4{NqZZN=T@i@I2<&-a1T?dvIlD+Ho-z#76DzYXI5(0n8p6F)m-v;*!$JG#r1Eg%^J=_}y{WHyFAjaj=brO``r0 zP2$J0LIE1xi#jB!6z#=NHY#~aelJW}3V8sm{)|<$5Dy8lu`d`3;jUz5RHQduI6fL? z2jH&>am#v8`e%hGc)C`W%Wi?bZmGKM8a~!+L&3VK>ewcPVUq>KG7QHt1G|isD(1Dd zand!0dv9QWwc*|c*OP5?6=0CTAcH|ZGJ_1^^+8+)MAr~qcOG4nEV?Fz=$b%u4a#qz zgayiPp!^2w9hBcd`3#*U?_o?Vd6)mTO=>y+;=a+ejz1a4> zFDvP@_rtHfgqK*s&uwJ*%;ox~^lyw!zr@GjE@d&5FFLZJ6?unk%2ewW2ztVfe<@y2 zw)RU(3e`sU9qCAZZNq@ggo`{#H*9+5e=WGX<;T8$V6wb*^bi&%Wd!_Ze?~WvJZip3 z`5qmx`GC8%n23Fxa=$khezy0Id-1#;!gbOV%k9t&M*!Rmd)Z>e`H#uu8=|u19nB|G6b`@3M)*)rk@@cVx9Dy$M~f*EUGdKoG!nKd z`lcMfK)I{?y0LQ}B^FNh;7`WU*Cz8hKSJq*XgEd`al`G4&t|@0SL4wRqDMbq+%ocC zr{nZ;!WC!c*Z@7#mp+a*I425_ijI(q=oMYSTj_{XbyZ`DZ6E*3uhxcu?k^6V5(8s{YyN^Cy}6ii&7J3>`4uxn`) zyQZgGnqg~NP@a=m**tBM&z_KD&fu_DnsVHCo=G;wrIwbHuV-u((zJkd+9NbaV~Ja*lQfK7qL z|0A|OWr$MVya@mt3u_TF@p$sO>d_4*FF1eGiIrbTgy;4ASKuaBsQageM!fLsHFn+C zb4R%koZrhIpRj)WB4nY^#TPzJpuYxE_s3T<*qrj;&}EeF!J=*xzby2I{QQPg`)}T& z#5y3FHS$Q15JpV9_*TE%j#J+gbTRp3$M6(WRRtaoRIGchjcr%AFo)>W@d&ki;+5ce z*{8P^tyi(a3FMCZd(9yO1^^5I7yvK;V1Tp70FYfj07?N45je!oIYcw#5X}OIXaa{= z$07dm!kypCc>aJs44IhYmw;hXz`SJdVw!)O%x2th9lqgWz0_4lqb+iCsa8sKU-|y~ z7ycTD-kp49DTrHJg;)lPWq=qvcVQ-nwEoLXZPglntPu!)j^qjPl0aL==!JOF)Vg zLDdv=Dvg>m2)oprHm8gwpc$YJA>Uz56lu4xPt%ctBQyDoN#Nw7u(%OO;t+c23-ga%`35E0ULIW z4K*djhMJPchT?yK4eOK|W@8@5zh~Zz?Nz?)X3UMlcrLE)z*-Hl7u&tCnp?}%pcfQs zr9~BOOmt4g2Z>jZhCMO3+&8oD{LwF^xNmaYT>s*G`GVi`b$828@a`qo(3b0I?7rzv zv>~2ahh4r0G(PGfJ2$VTxw{>Ynlx~((2Op2bnatXXqgX8o9YA~IGLeGzM<3hx)9NE zHexeALx_agLXmYx(K8SNwl9-KUr6K5Hx1?NZP$`2@ti0VXklZjD>vqqu&c$+;s!e4 zGy43>4Hh>-^MyW;Z~KHhTRYx&ukV;H)n@lrZw|hOh!P{%5Nok-E)|3KFd#6JR!h+3cLzR5NB%EijuZFq?JE<~@~G0sS_a_%N4YQ}R#N zosFWFz1KnSEUL^XO8J;0cD<5Zqz9l^tKqIl9#y9IU!*E!TN*szf9{7wNQKWPrw@h zZ_qh!Kr-Hd6nFyyyurHJHJ{lNU)Q63QU{-;(K~cKR4P_cm84U49$quQn#T*|PG~zs z9>2Nvyx7#6mDg9g;Eyx<#9qWfqzFU<05(moGIw#4>CTxJ@gz`m+mgSJM^dA&$py+$ z)03&_uoJ4(awGl}rn9XtXAp(uQJ47?I|0+M?kGNX9G81s&-QK0Q!Ul7R!BT28?@~~ z6xqh#TQsm zeCTd8c^2N3h35zHt7V0|BKzwHI{wOH=e(whr+4#xIAXmP=1r}dxFitj@OCQ zHL5;m($tx{bAjMBBWDQ2G!^K~Iv#D)E2s&InI*OYW7+a~?)+To?xQOcjh3GSw-6(} z=QT1jTm3u&tTwsX5;IB@f>EG&h^UVx5-Mg$1vHc{_QQygY9sC@8`)KqwZ;ISbg0#A zPP>V)tYNi=)f!eC=c?9iv^EN4vBX?NS@q1+{st{W>0A-;4|} zFc-}>Z(@?j%H#KX*=uQ4^7id&;((Ea!I`Q;)lsPeZsv%rmo6CHv?18Hnvu`fN^7sc0~sL}V{(4fO-S|NSZ3&nGD9q9 zhFFOiVwM?dVuoHT@HpDA|2)ElRMpkafb=!%+YbU}}Ro~b&NZfF_nTC8iauEn~R zU0jRhMGoWqY~_b#JdVzI_&MX@mlzM_OrWu zD)!D=O-OkTDtoI%L2I^`Hzq3Y>typ$WiV%pc6riuvs{q1BxZ94ruC*B?+4HMq9@Bq zEyU_{%s8s2Q;8o09#cvR|(!yk4h$0Yf>2}{@H+JW3OQV z;o@dLxFiSy$r9x9Btpz*E)ooL#3ClR#FC3xUmkPck66SJ@l=8sRxS#|Bt(9c#57hi zQn427B{-BM*4=Db=pz=xg#`5jL?oepB0U;Jx>XsWaU^3;A?k6sRUG(8dR!sb^JPe) z0Ea@C4-nxAL5T!t7*eXs%-}29;F_Ph4f>FSO9+uBj%wnp?>T~ zAtnLSUz5U(6SyDcA=5Wa5XU$~iHxc1g)|P#v@k_E+%<%2z%VcYUlU$J5cXnMurR<0 zj^Jy)?^K84{8U4r00A5jACQ47jfJcpx=}x5{X2`Ncny&d?vXx?dL)n2+m+m{m_MH!|=Ky@DdbyaU3Nwk}wnc zYY~<(b{tU#@5eYyr<8CtjtOS5WC7-S7I=gcS3h$SL=t8}L`V?sBOXcD4TNxmK;M)n zk|sEW$#N-7J(UWHhSJ?frRi135=VM16ZXJ#w~D#kR}f&3JJ$CMN|kF5I0f!_91fNw*)LQC7CcgQgWpf zJhP&(WnwCj43$7w!d+n0B&^XiKK`lbvX-Vm^1NkNHxD z3~sA$e)yywTqe4{1IYO+{rQPBc1<(xXIX0d7G0#?!&)9DDf)ZFt)Eu!Gf<;M7wq2^ z3J=QV1?AF%Vo^e^F;xEH!P-JKVJh7T%K6)gVTtvfn|#8K)vvKl9*A_YO9qM;+wdeV}p67Sv z<}Hh5S*)Y8SUhL3c!|a0mc?prLO2~in>m+Pli~Cl2Hd#444ktPkwy1@s(%5HcGNpe z%aVSB)_z5_1MtywHXnd-|EjSln?^AyQ3AVu~CeC0irhDyE z{|ju6{puO~*TjII4)PeXLk4g$@gh=14-S6s-B?{3Q`?ICH&*#`>P<^{EXzc@s~>TE z6gR!Q2WTgK|9JPKa}meR_uuZctNi}r?w|rl!>V014EV#&IluP+59qP&y`B7-PEvc= z_yK-bj9$YF|D+dP1K0m9KLIGAt2F@advB1g+EkBesP&Cood#@k;lVfU7+YP};6Ae> zM#FKdAsMJSEUSURCik64)f?UoU@43Y{9YlO;yQg)u>6t55NQZiv`Vqo^SbS|NNg^f zhKrf=cLt*S23TKB*YEJ4I zGX!29fOxLmkxohk$Pr*9LPMzd=oMT$QZT+_O+h^~$+p|$^nvHbk#w`nFS*WA4 zP&j9yaEXP&mW66eQ_xj&&t?u_J{b7vQ)nTA57I(}oQ%#pIaeX~Z5bjPjM`CuR zXQj^XFLRlQUI zjVqvW0ZU;Q*NzG`k>q3~F9@U!qjYgBBH@fZy%xy58rGhiD9b9*1BLife( z^~)ktyQ}E#teo3vYw)Dr6ni+oy1$oHZ!b@m>f+WOF#R#$#L4{1RM){{CGdP2GaBbO z>pi_1&J)o*E_WrnT+Wp9`wzco!p3DgRZ%$3mRh>eOe8SZJI%p;=Nrtma(;J)Gt(m~ zjg$1mYYXofD4-j!S9-EPcRp&luZOJZ^cZ3DVtYDL2(D6+3!fk?J%IltVJHlVi#*T6 ziC~fNL{;-R2MrqxGal9i9{@26ofvdNgM}}iaL|kFG87xVudF52%>D)2+N+H0DJ1??5S5`Pd&??HnFF_j>p=G zh>`OFw&f&qP-n`dcA3Gkt;k!J5W9Pyu=|UPPeAGIK{)oY7K-nR`aUS_Kx)0Xs+piG zkuMF@3b~>0%Qe(bgzsT7Rsj!?j0HiIVvGc%KH`{D?gf76Gq(a&n$28Sc`NIT=p*28 z_LIG0jiWV=PuV!yNb_Lk+eV!>>O6YXN%N?amZDB-qs~U%3R7{{U6k2-Az-)l+Em$Q z_kM)R70ct0{H&$(;@ShFgD&+ZcCJNdet>!63xtIqAsV>?g)zYhhe;3z9&@E1R*Tru z!qKkk&$CU@Rn+jXO>rU>=uc>|KS8kA0wwOY9c?DJMTJL4g)B#ftb_`gMTJeM@cl@9 zStw_q&1MfpyhFn!Lpm5#W`5kFTL4%z7tVoO7>3eUo17 zRr>Q4DymQvRkv7dd{=j`m*5#Ev$V5;{-~5*o_X*MZ(DxNf>8ZHfIm)#(I%PrtV$l6 zob^+2^k)B<4!C+XTutCLQnKt?{8j$hgv+#r&$)wHX?K1CMOy@(`lyjZK zUHJ%H_!anNy|whGrG#(2Xhx&SH|?llsejhD%FQD@(`2?*N+6Sfe*lcj9&npthKua| zdaW88z$OPXJXK~98SJvLz~J=C_V+fHukr<9hx1%|v3@$uGPIb<&<#05KEVP}H%^dD zXo&nMAe{LuOlpV6MX$aoTK4LpGAYN&WsGptGlv3FIA{f$MF187SOj1ZfJFdL76I5= z%ROThd$w%(!=v+uJm(L2i9h6)KWyR;-`-A#B6jo%*DMk@$~Feybj)VDosRT~v{0hl zOFz@gQ)pz`5=sn|m_}FmE~+*9T!+t=i)8~a%WniWPR;(g5TjK2^pEUsKbkA)yYvbn z)K6kISgzH4zOwUQ6E9V#_Sc(_lb(rEHZ-?Mn>JR_;l2VxQVa~!rPX1a_)rCxe7?*2 zEyeDV4bOBjHk~tf6Ie-M#$NPQ23LzD88r@P+h$5u8g-X;OW(;|-vL9|cUEiL`TIvF zH8QEBOSWu`9_ivnE4}E}Oj2)bXQbs$(=JW(D=~NUj#7?Df37F8@7yf3wyC;yU_K{C z2DJc1vtFuw{qr&Wwpk6Qucx(Bt7hAmxa(HG9d+j2EqjYF%4Ng?#FIoqz{foJ8+K7b z1WN)=WJp;h;HyE!uJX7VFzDV$>NObjL{hjcwzSyNVoQrHEw;4S@(9@SJScJtch3>- zcA6>O8Tz$n9`?-R*k>NhU7dL_w|M5E|7FiS8gi!Lt;IFioAKOvGZo3aSkTW(XC7?t zxzjJF3z)3Kr%qQo!>((+)vA~ujO)s!m(mD^S+}WW^R^`}Fs^-RpTQ%mzjPhBaUIL+ zniL`9gnBQ{DtMX30bBU;N1Mh_cCp!2v-qdxFjo(kO^x2fSutDgK|f{Ir2352&6o}8 zr7>0S#v^S6W=g+eFS&wdq^8$NUsB`t;_qp%W13Ojly$%(<5I+Mynd?TqS_v1w1p0jJJ<+#?M5(m zf4e>Kaw@*{TD8o3aM=0KKt2=m-ztjVhSAwd4jRp>$|M~n>M-HpEY0JxZG^ryfbpKTs-drCWj%X$89Q42y=iF(>Xd3r>z%>+bRyEE)z1L(&6iZb1u z6WwWY)!`AIbyI`K82pbT3^A5bTiQ8ai(A8niJUeo^y$!DIT|^#s#ng}A|REQ3vi=f zz~)as>hSdLK6jl?;N3yWKcwJ^IoG=@D#EeFYipIxd!ntDmEi)Xf!pRzHCjX@q&4AQs3f(;fdh_u0ioo5>?*kGZ% zV8Paibs5Omb5nb6dh~NsoS&QG(zz*q*tuyHj-KP$>1$Y3CLlkC7HM|#v(O^V%&yfU z?L>>zqf(MMLJ=0=n&Kcp(v=<(ZUP_aq@JkinzFUjRSx@VUmQb=w6HHuR*Up(*Spms z-NTOD8Xtz+Xpz!7ILtD;cgBY4b&5Y*<+rRujOFT&RgyrqW9}@VJPe>T6l|Q{smSwn z0yRkvHAx9-5}Tsen4$;2sab^&!}&st_9;p*n7|^3k=&~;!J0NI{f5IV(hi5N=kQZ0 zqzm(DYfAjRn!9}MLvZC$vgOmIU*&r$+Tf%$R9ld+)>ZhWM z9DP~GtVD-sVp11hK2J*_U)<>*e1CIi>V3>b@?VaZv*Bn*?0gfqr(Xx&zO7cjRb~Tb zieb-JNX3{T%0&nmj|51$oO-?=c!{J{La=PtyNbSQ?qY9Q4eQ;-wmr1g8UL-qGwTMd z8?bKR3A=%(+d8k`{^Y77M`aJKEXQ#4Ln|+561)lTFByRljxRJSM;X-`mf zC}OyxY)(MS@K~Z5X&KGzf3~hz8$@Qu@3RQ##EadUG_CH*)vxA#c31<~ZO*=~SaX(g zTzv;Vx^?ijRc38UXRQL86&$X0n28vp1Scp~D%8~j9^!H0BI5ZhPFRAelofnkbI)DH zz72l=i3$!|f8K2XZQZYRzXx!?R*ltSf%8#g?F<@N63&uvM-bJZ&rK{KA z{^6dwio?uVY>8@?P9-+Z<4nuEJF26kwQ|USzMedge6HRA3b2mE51v0nEOb zag6D5N`YPJN12ygViWxuB_ERwb^&^oA;jfMlQk0KXLBdj*)&LEVcuOU#|@`WKCsS> zxScuQNulItDeS7hd%Hp)y3^aUnX^*v)E9l8Rm){Ac(wBG@xCe~p~N9auF}eCo(z%X zE=M#Xo(d>YE(t5%x3X!wIvK6mg1rSN_uGQ@AxZPj-aRBa7ffhv&y%w~u;=L2DtzcY+t?Dg|yr+S-1cEUMi1{tbMRvrI<9kWLat}O3e zM`YWq04DWbpQZ8_bG?K9pS^2sZrnz;e+A_)^I?sIAOSx1o9)a_T$|kSjb}H>t(}?z zNzm3ES#tCkN7tqN_6vY-inb_;6lJNaQb}ydA_bzmPakxjMg%E_{XdnB@Sn3i9_ZyJ zB&~2Tnk)3OsSV}Dtzr1XLb|d+aHIX!ss_!PaR;x?BS_Pq>Df|Geq6cer_2*}c;S8> zhTOYT^f&VT-$+3mrKIW~i}a^M0H)}ke-jmkq#SY28!;x1PnhQg2KId_a}_soF}IkD z!@xF(ZTm!KER|g41&E_kNo{an^wv%Yhr(8wcX<(iwbq^89tzu(n>pW5@ahF%wf7@s07C$V01N>bY5@!#ADImB z?8xESYm#f{%}M1}ff|s@KrSBux$NfTvRfjTT_Bh1$mL(9r}W1Y8GPr{0&q6B=ad_# zFt?9`$zWgPaWS#6DrE6Lh70AXq09u1dV4D~ahNbX9@sc^Ty?BVLo9#f*rhDA-N_?9|zV=bbF~^Jy$T7Df$INVpc#+L9;dUUyks%{dXcA1^$O#>b z8NOXDeT=tKTXol|QS>3koEyc#YB3+}W(O_i_RSGcA)vy(QK4;QsL(cws8Ia`sIX?P zyciCp=R~)&xK5+99>lD~Vy_K|TTJ-eGI*v;iHh`BaR6xm!r;F=iXgaIwP!4^v-w*yUD)t-uMH&rH{F zs-kFR8)|K`eZ?|6qikQX%*IshPQw(z;ts~*02g=X6969rKJFbKlN=wD52;@59;E$7RTyLo)anp0j`gy%;Kdz#Eu=W$T z8;slpI;694;}yzJ|I~3{ev`*F+Pq1rM8vs4L`ZNDL>yDWT7)uS<@YJxOm19GzgbgjghEO33MT1Zw3l*}k*#QEtH3D{xC{M; z*YvO6|0&nG?y&KtQ@~>7;@Ts?wdAsB3i}LA9AO+Wxf-ENmS&0;6+mV7ls?(gK?U|R`NrU=64vLeDAH_*= zGM55Qid(56w5ac!VSod|BTPfb!M@>Jm>ZFN$>b~w>}r#0yq8+*SWoSukF(-}T^#IT z@zL&gI4thKB6mi?1W+)X7ViiQ?Hm}|C17a7X>o0TNjCB3Vm9Q{<5pC%I>n0@qs7OO z(8?}Ngk6$A`(>Qxr8(6;FOEa|MgL*z!FY`x%pprEbvzeWF6eZ#8E`+zg#M>Nq@Ego zSS#uChUi4OYFeQDOER{oGUn()TJ6A}>s_noB9^t(GdcF9_D+*6#w6XU|Ax6rx{Mr; z5@gI2s5$%azGf)X%DB4aZgb9(^*-qFX5yQepudnWKT^Ug6vwLbSgJh}a(cQSBYBs} zOE-XB`YCdx-_s3AnH)lAr=ziYVzKu=4=!ZjA+;J>3vY8i%3al;!t$HE8pH5r+0mkhnq!EN!2(t$jX5SDE12O*?V}7g5S_=>WNHrkUdMDM~oK$m5 zq?!w)T5Xlpd?vlY5l-bu4`Y*K*u$L4u~7r?dAnV&wL<BjI zX=adShRqJ$wr@n58JcYY67C2I9V3H;j!}e!>L;LqS5e_rx@F%@(e2~CG(PCJ-Kn$a zdXz2cRJRyihw_1_Rd3L0w6~riG#H_UbS@|;JpbgCcBUcfugp zWt?CyWD)b-&?lB(fg3gMs;yL@))PYSBzQRRa7W?cAm!`W2g8v7AeN&06kwVCGe!WKT&07zi9atiho>n=qhHK%c#%PcuiK zW(j?ofIe$w;O7s6ySTsTNXJ2Dvp+UHfmm0m8uv7IGZ(3*hBR%4da;Of{f&R%gV9S` zUW#TqKl>y8pbQxdwLAVKpOD;_w_$Uu9~K&?CjwMrSN1sP~v2Kry)$>`k_U5uoII=(ZITm&_RU6o%n zPfXiI*txoo^!pd;xvB0ouJKTbI^GnwchE_)58dMb2Y{cXu`I^~xh!qBf^qgU)ck^*lnhCqiS0|ALiT7X(AxpnXLTaki zqrPM*EG3VkfFR2FCcUj`(#)yN>Z>ZIQQe-Uv6A|i$?~JQUN(ts#9)H*XM!I2Vv3%B z{r+Z|W1?{+-#4C$;#kY&rfHYQN#qO1#FP^UQ_~mN6{dwlC$tRC1oHw?iP$A`Z!7hx z_>hA>{@K_gG|9+L16qR50-sgqv$o7PTJc_R>IFGR?>Ps}a}HX{IVj{DwLLd{G=5y5 ze@lbqdsZ~h2h2)OEu-ae^kgSK_sH5*&tZCQmsMw=jd{r0m?<(Vg0!Kon16OElE9U3BCV5o>zf;_CY`L>22zx z^CGuIC1CkEo-NR^$afg{jxeZ=BZK&udQN~{S1`;R$D_ixj6kqziGMLdwbo!&4tx6) z`mPOo2dlaO;S7es9|M~L5f&os8;P*3)-tyeaDmwYW~X;%hvm!;D=|9^n4LOi=ihvW z-aiQG>_@>77BwewV1@Gnx??eOKBJ}CfR@Tok`7Ayvd_96CAXFA-TbDs%C6r2Uxvws z&RnP3Az$kDY8-o|9fyUGmb|@e3&}g{eNLBfs(>iYpaQsaWr3K1(%=vpPIw zXh=C=#PeA&NN$UXWN_8akzWELnmhzZX%hzbNSb}-P_HgJ%E~ZAvvCkq0 z+mwaGwrnPxs!l-J8MehDR9);r7dzKG%yx>L!F7V`1lI|r&+A0tn~1=);@qMB88X)1 zGgdp#SnX2AYD30am$7~l5068kYMX9`@(&j|3oLRLp(pU!R-)!A^gG=cEAEB zG=;r2XaHp+K*IG-!Z|q!=afh|2S~WuvJtsEALLd+my`KSTk0g|;b@73qdPHh#lyT} zd34qhDlhxb(ctcWcGh(*NeY@*hdP^O`tJGc)A-N08@Z_@!J+a>H++$-LuGZ6?4;S6 zl@)yDO+KpL+buxw0Umv3SAMT=<>P!Nos?Q-<+Kz^IQy6YhWHIPVv-p5vi}p))*(?G ztPeI}h;MI?`GP7{e&7q$osFK!QYOXUq3cNhIvk&)$MWfN+mv3DQku*{U%`5gZ3h-J zU2Fy{z*Kl9=Gzi|q?~z`EUbIIz|HJzt5H&QnO4Dc`Wz{B zZiQI2uI+sr4T5#59d)&F&3Mo9_uM9O>qml~&E-o`J9mXD_R6>y;n%hlJ3nbHIA0nW*6`Pc@dx$>~B2pYfE8>*K_e%$3EZU(LD8|P~shX0H=^I5j7 z)jg?dQYGc93q?nMtn;$`T(jQ$5+6>#Qr;#heK;B=H>V|Z)D4#v&eu$|wP?r;!^43e zS(wtm$8JCvb`0i3%plw(MztQO#`CpSEnMqW_bqf@@v5!mDck2K;4Kf_Tb`6GJ$UiG zdGU?M8@K4s;YLb8NTgSf>OMd+Da=@qi8FU*v=>pRtNfM zH#;0zv~P}ZS^=oAcT`AnR7gswkN_&It+Yvx-_b9^A53QV$EO+l^1Sz5wPWAxl=n~C z+th4=AIFo)xKMPJ{l$OJdYtBpcG|AKaT!3_+t2@5p z)*472ByO~}(0?ld%meK8ew~_5o(ST@VLpoST{m~IKAFbI0$i{sD%ZZdP%7LgS=EW|dC zOiTqguMviqO`# z!ANwUy8Y*~PjT@0IFj&pq%YG2O3Rzlr6&;6^e@#X|2ml6XWu3+BU;7guP)Uo3PmpU zLbct^BwY?t+gceUA1z`)h6bZ_en;|@-c8e2l5O`L((U=Pdp?W*UcxNxMkPu^%8eqP z1GlNlv*Pzo^=>G>sJ;n$l3Sv3$)ZXm%ozvu$D>e!_NikD)3Y%1ge9S`K`{>`2)0er zHYgXq$)YOst%l3CiZE*8@aZZ+Lwtq!3h@;xgFx^ZLVl-$&#fT<;J$$S>Ye+ta_-A2 zabFg2Uv=EqKgOzOuBUc@@)^J2s>_Hl!tNNVmg=KPuOK z{0#xO(tSP*agAGl)sCauE_I+{1PhKE7D4n&U1Y`=UMR| zBHt5qr?wiZT0o`TFJ`U>dIKW4kVr_^iXQdmL5W|DuQ5*d54z{yRy5$Vjr4IeT>LPX z7Jm1;{Hsq2GAs{eKnRTj(_t*YTsS_aggTfr$HKm4*^bAlO~lKEae3TWQ)O>)DtyP} zI0#)IGfHgiS-!lKf%}((?;lq8n_KdjX-#T@B-oG z6v7M49%(Q1wZMK5U_XHU*pdBUIs3s%><5FBu{r|e!*DR2@^@48i;$j7d@D{uwM&@9 z?wtR)6nwg`L8wI>$trBekMcGosyd=UsPP{rfA`vqviE-uhP7odNp+p{rnj+AO3~bx zVPYYfFIHRbOWo#AUMbtr7NBp-?<=3Ygb<6^la{}B#&I_7l~o_oKv6dPpzBd`Gl^Tt zZ$+2C^|g}i&k$7Qb8;bm7;icp@Iiv;!I%6AJPhKn`oRBeo{H49zQ!+KNOv;u=eovA zr|0F{PSX^1*UIy3k?Gv3|Az6qWAOR#DACYNA+oa%?`v9mE6JU;Th?@U7%i(|yk9ea^}W zuVjvMDK29uc)94jF8gM7r428&PI-6QTA#G>rp9`ugLFIkExlT|OU9N$j>uOuiQ>!gtn!)xA$y z27n0w696UvOaPbwFi&&_ zguQYjBHYMiSP0X?)Zn&^-I0kc+w*8b_kbjejnw3P5Zhk&Zsl)>t$!O3(sY> zri2Sl2AmA2gl?3_wBQDz5e_n#1IS>UJcDsc8H@uNOl>LHczDMr19U5&jF@$q!@MwW zy5l6KI+l9>a}>{C=_gkd-gp`h2T(7S7{1M?P%Cw`a$D07*{fpb=Z@v z0#8y#ofV7gwFM}*yIo2n$cBrr9$HUiasR@O^^@0icu~`i|f%*zID7PKEhuJ~^a(f54Rt|El63DfH_^-pcab4m-ZWeSs`eQ!OU$rx^ zdpnlfSzcnl!gz60`4-X=FKSl(FyT*Ujl`Z-Dm9C0PrK=x|1_S8p9YblviL)?0Em_p=*q&7|s=KPmUV#9OLljqm z4L^jR&`;vbtm+dDpaFsaNL9>C4AEzGRaWMgUu9)pwKHXJ1TBwf>FI?Y+)=MwsrspDbUq%Ri zsd?6buOP5|+l~X%cLg&&FR;zT@odwve4fQFrX@&P;HyJv@5}S*veFG$b-h+9KS1-Xd^*rO%V3tpNFI64>LRa}7A-~v3&1?UYTI$&OJ z5YZb%w7l!(qUW|jL}NpZ4IhgQ{R$iU4Q%LZY}kbj|1x3IFIWfdrx#f}Y5z+^mki8V zmZzQRI^IvpBBhN8G_(+aq7V(xh{Z`WpN>ehXEEp3f`(gmiTauG*sVy%g_CO(oT)(b9AZY#7ut^Mhv z`_ok^;mVKON`k0mj-)8<%VjAh#WB`ds!4IO%PcQe*!42Y{->ixg&Gwe9TisPUE@Z1 z*SIS0YIUGOtBDG&5*4alXD@fxIiM|;kBswMB*ECg_$1h^@khaUeG|IdK#J~GF!7I= zmYXvfbKNgP`p@%QnH?QOJ*Rg3EGFY8FHi81tluv;GFi)OWRvRrptTlhu0&9vVoNK~ z$Qnax_zcH>#_&X8O2`@%S{e+x_=fLBnx}j&UJjx}Uva}m*JAo#D6XIgzln4%?aW5X zO@7yfJYFKXCZH%@0{xng=BQHOtLcsga`+^_9CYoa)L07=b>x{?)eprUW6u8|yYZ~- zP~;i%Yf!x-x_Q&JKZ9z3>ppj&hN5*>astbP^5Ywal)1%2#cXL9FExra(9vYou5s3U zE!s>3*-hE13Im<}8G3GbG2-vDPiQGBZW5dEIMVdPe74M%7U%2__KsZX2L`e_`y>x9 zPO^#1#Rr}Nm%BJEY}|i$z_JVj(ly(J`2HKECj}?zvHiYr) z2A2%b@{B>p<@J$+))yW0x`L}`l^rN_OXKusg=N}3(uM+sD>p($YAUcN(S{aR$xf*2 zlHyo_8M~GOez^gq|5Z#tUD1~r*eA4$LiLG30DL+y@|l4eZrY{dj5*2!T*_&k07T-I z0TbO|#&7K3{>Cnr28{8@nBB0MdsAX6phZMGg%m6vy|OBeJsJ7J z=5I(-Xa{NLdd$qY1I|&H2{RE%VrF6DJBiC#LQia@ELaDwHc=SvGJoN=a+a*eZhPZ2 z_KV>9FVXhEV|{3m_3pj~QW{8UAfLQnR2^>DYu(y-~M5k^4F96mi>KTsM>^}u-}70{W6}e zqRG9drpfDtMBlL4lk?-1C$`fj3e__(vwBr*mzJj0?{@miZLG4bIxN{KmpbjJ}0dAv7+5D|zo6q55&=xr0 ztHP!`pS%H- z5_k%%B-y9Uhc@^4fdh|?3EgTOx||0zq6Xd^P8#ase6*?vkNlp2X(Q|XBdKR zBm%ww!75r@fuZc^E`jrO2Qr#9_!+=bpBo&Fd`2?*{UOxiFWoLJcT;ha%6%Pu+l3v@+HD9e!*ZSx0 zMvC@SSgzhOP>#}M;m5NXdRJ$^zkq8ejUMRQ5VCjDULucvd_4<9m?l|j2Ha<+$AZv| zIpZexZHK#Q944H#%TBL^co^zNvI=h+Vq~3kL*Pv`YdoGJAh3PQMchWGhgDjF>>UQe_UaP?U8l-y6MS(87 z+J7}*J^I|^LV$*i8a8U!c*3x8pz)o?cN*WF9KL(u+bg$NM%Xv@)N2TO4dE2m5aMbL zA#SW8#N`@-)3Ju&G*y@L!>l3vVGQ~;9~d9<;dq9nH+gaJ(Drd)n8BUmQZ|Qy)k4OO9tt*8&89$yuZ@QFi3Zz; zv)7#lWgBndgd=_S>^Zzf{Qiav%qe&f($rx<47mu>E07QFa9ZmDJ2FbATlzWzbz0s< zMRAOV4{zrf!3jb%p}}7~RXlV5u+oilq3&e-Mcm{7WqY|8pSM>`-*MjEql?8+b&=|XX+uVCzOafrDnu3*GvN8 zxUS{fjJK1ScH@Rk5#-KBrg#+|IVMZoiAr{%i90aH9$8`y4m3E>;6Q_e1Av2^K7>PM{;p`Aa0 zzM?NWYhZW0nNhY`7-D>=nnG4h{qU>$QxVuAqIo}gLzcH|ALb_zPMEou0w0SC$9iUI zil0xd$(3n@rEs2uqR5ju&1s7DYf47Fz9#CFrTeR0y6wEx>U|wkp}q31Cc&!7;nITr z%Z~;jC#{MG5sf_7_cvqQL09)p)RBS#O#1@6Eyqq6d7h5=CE4UVCi)B^EfOvEkn6ZAelD2tQg zvq&SzpeMQ-%^_|Jy~pS%It(phqX&b4IkZ!TUdcC7%+&NG*ygT4TxsokCeX-|Fpiwe z%!KQk9zYY5`L=H|%W`ARlZ1)1UF@?PUF<-7`mLhVt67 z2joaKhR_&7V+f5QG=?~F4DsTFJ(r-(#@rG6#W$KC)%@t`@uPOdkJ=4>)ZQ(>aw|su zMRKHng6S(J#!sNJ5Im*>x*se4vrN*L=7_b(n>a|K<)zpRw?&bDL_2-< z+%qh{ov`~CSg%a#;(a6)+hz;PCsN>tNgyV_@F4lapkXEOBpWqd<D_VIT*I!m@49 zyW4J^BlmY7#Ls*a&l6_Mcid2zoQJXL1zun#F(9HeiPAub$Z}cI!a)oyvO_B!v?)|G&? zr@FyYbt+HQX?UuR_Ec9!^Nhac(;Oty_+<=3FfcCX!nmA4tB)4ZQ$VAGIHo1nS0X5{ z<(Zao^QYpR%0WHnTvq$*55^>ZD2M(RS+iXY@+xeGIrnR$zv?pVwdIi=$d`PsRT%u- z?A^BrwYjWI-kM=OK%<(~E7G6Hgv?hoExuGh?&X5X!=&tfRFazm;z~q}ck@{TUpA6x zPjO#B{cM%kyBStpp-AOL?_zxCwG%Mhl8fl^*=BOrTj+~>0!gDdgw2~~?U|5c)p zuEhUOk!P(>IERS2V?d6Wu=4C^IwJ>%QD`KI^ z{Ma%5l)Gl^c(y5`#IanS`Dqkv%$(LEEM%SiI|YJZ2U4KhrY*4ob;GtZF`$i+Hb&YQ zX=C&w#0m6{3)s7%+<{$jG`phNm3^`+ZpE&+4R*!V?8+*3g+QF~X*@}92FAaRZ$_hs z_2i24qR17j$g`$sL=lJFB34T5crG=9M3(z6kLLC(k5-<-%)MtzM>l?SfREZ1*PVSp z=`iPa#{d1#{~F(e#rKbk-%+I~8M(L&9jF>qClIU@E8;n@tm)D|XbcE^U!+w~?F6iI zUGHyf(4X%*0|mEw^ zCtlr+Z;!?3;Uej1%XL-IUvH(#8mJE3a(T7qdSn^7{HXjFFFKX($>njbEs;`2-TG>3 zy?Wii_=kapaBA3wY%PWntLzv>$aMdtx~k1nl&l?--9Exk9Q00o`$VOM*K=on5@b#o zTBZm?&-7RrnvrE^CUY~+tk_Lm-Yzq@8a(U}9OE=;uXVuWnX+D8U}M$Jr!K}z!wwBQ zjs-jVP^}szXq2E)!tqeTi>{m7gVfwVg4vqWbTy}`In8}?nqI|edJRs~)10P+vjn3% zxy?^E!T@wLx*iy>#mM;mB)_fEnsI~Hj9(P3xtwLeZxNfHCZMl|;#5M$BnEs7GKy&X z^+OFeY*$I?(aw+4&-u|{asObkN*&Myicf;PJ}-KO`!BC<6V$BXOlHWu3jXELBRdYHhq?G)3f}zkP0DA5 zzJ8``Pqz+U;(Ka}c-Igotvt2z)XMWm*+o_Al}+yOUKRV+p0KAqVeJX;(-V#=PdKW1 z!j|@fSNXrqh-GU-A`cncKA8^%3^XV=V&_$~@mg=VH<*&a%}?w4*726LSRFjw%jtbA z{%!;BdPnCZ6iRJ_C4GR897@FnM8hQrkUqjL6|0X>QUY`byHpG z2T8_*m~%6Zg=Kn)Wt&MXGLwbejlv*v0w*SGF38%^cH2Jt7&f7MYh$(pC5`(+^V>^Z zZ|L5Zp(V^-7o;sg`%8r-op_`^l3Rg?cpLEGFM|j9z~0zFUVgIBL2UwPBZp#tiiQsB zpu<8a?N{@L|@#{=6V-Ip*^ex)%ps*;pF+;0B?KEnIUlo3|t#V^u6)oOGiL%wTG`6I11wU7+q2jyS531$vJ<(_f z`OpHww3=W1ZfW1boGw6{eZ za5a6&6<+qTy1c3t#QymhmgPnA+)5{HsZU)}0r56>ptgvExn=`xsk?GQb zwlc*luGo-T*}AcHSZ-#;;|1)ZntZ)r>l)a*=wd5MBB8X;8_n>3wBusgdeRJqdEW`C zO6}M~^>pm_9Z6;ihL6ir^qwgwBbL_&3dIz^^=r-HZ(dSrCsp?lq_kmp7TYPXLr&}! z+5d~^0+UE@Sa#U2ZX6EWID-FT@XIVD zSCNGgIOhW2bt2!7qR@@K$hGA;gvtQqVPxDeE_8UI4DMNubMh)1PnJD3S%msh3`JUq zc%$Pb9j?Z!rKk=#jEz?{1aR*!`&{C->2R#xH5AvSdXq;!6a)bZe(}Sp|8Vh1OZrb~ zQKjQ+Ko_r`mcxJ<8c0{jR!AR99oVrki)A17aFYYa5NX3ZW#}91)DUEUDs4Y+(So<^ z+m$+97VMQ;5%e_Z@H;j|;*cB!3v2nv$Je;pViricxR$cgQf?F`?Ip>UMU9o6Q{I9i zt6C=ul8b}g80FVDm774tI_T?KA5uRvq|?Qj6shMSQipg_y|?%fCHGzY$@1#mGqwnt z4ANwfCWAB?q{$#n25B-#lR=sc(qzz4$e=|#ul)<DAEj z4{Cj!XdJ41sxSo?%8`{9m$6J#-?fOYn35~;eNl!n$+JbMnO!fJM?Pb*pI}k6A0tH= z#YPURNRVG)6o^`a2htZ6Z^u7TBTm2McN9iI|ImuRxT~Lm7Zm?~F7>}sy>P{qY%cW` z^ttL7>Q)&zRVsp~If*Ssdp1XZ8Jkh)OZB1h%c;G~M`-TfimFSlcs?lzm$QEZMMhy4 z1<#^BUfM4hhg#~3QnhZrw1s7+;0$3v2da0B<`_5w95K|QjF^Tjr<@t`06~o+DvH80 zCPd{8DHg>;f&@fWig)3oeXD*4D2?ftt7-ms#Kso#5ODiY%*LZuSw`hnwo5fCWQQq3 zrZ*HiORL# zLCVXn{zfY?l}79uZoC@JZ<8V?O2H-;B2=SyWhf-x03I~B&=VDV4U%&=mQ$-i2T#N` zRgt0aqg-l&B9XB2Y0p79U(1$nQTx0*+jU7NYz}R`1SeWZ&Y(s$paZXnjUuqPq&4J$ zR+w!o!dChBD%Km*z{sk+27cGn`0gwW%GO&H?gjf?Y}YZAN|42XITh+HiVstbU(iCY z{yKV#`eOWG)YJV=WijGwtSW39IOD1AFcm>AQv!2&BRn7JM&q76pm868+9`AJP^;yK zWJC6KJW;%ZJXE7rR^@J7jkfhv|pk|?eF+)|Iwf|Wh`mY%kbF6k5m%=Y|nGzQ1nX`x8B_Q z(41PgDjfAsW1eRZZjLm`ODUx z+8t-DECNbyCRDw1u6{%gZM;eIsciPe zHxP!iK@muOg(>jSMWdG>+JWxArSND9j=mK$)`~hNpAun@DoGM0ZsdnyY$j=tm|hly zW)wP}$s;CgH{iDC2Jpf-bh*Rr)O3VrnV#bbxPeDz5ZJCI;@FCujJC{x;1-h`{}yym z`E0Z*+rmdbu^~({aNPh?K&-#H0ki!cWqao;SI%0D^q9^3uXCE9<(~cxB|YqZB|Wgc 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ÐW2(qpz`Wa`8gF@6zY(+< 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
    3b{7_w*hN^jV4(lKYgkL&q|TIH55pw{cS@)& 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≷};lYS-zJbbmfxi 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%0D(CbN-kknGUnlJ;Of{2m^Q2RhsZ=9 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 String { + use std::io::Read; + let mut json = String::new(); + flate2::read::GzDecoder::new(gz) + .read_to_string(&mut json) + .expect("fixture .json.gz must inflate to UTF-8 JSON"); + json +} + +/// Load the tracked F4 dump's `["gameState"]` through the REAL production restore chokepoint +/// `PersistedGameState::into_game_state` (both the server's `from_persisted` and WASM's +/// `decode_restored_game_state` funnel through it) — never a bare `GameState` decode, which +/// would skip `reject_legacy_raw_prompt_authority` and `decode_persisted_resolution_state`. +/// +/// The dump was captured with the detector OFF; every row here is about the CR 732.2a +/// interactive offer, so the mode is set to `Interactive` at load — the same thing the user's +/// own toggle does. +fn load_f4() -> GameState { + let json = gunzip(include_bytes!( + "../fixtures/fantastic_four_bounded_loop_4p.json.gz" + )); + let envelope: serde_json::Value = + serde_json::from_str(&json).expect("dump envelope parses as JSON"); + let mut state = serde_json::from_value::(envelope["gameState"].clone()) + .expect("gameState deserializes through the production decoder") + .into_game_state(); + state.loop_detection = engine::types::game_state::LoopDetectionMode::Interactive; + state +} + +/// R18 / §3 D6 TARGET A — resolve a fixture object by CARD NAME, never by literal `ObjectId`. +/// +/// The user has announced a re-dump of this same board (*"I will then provide a new F4 .zip +/// game state"*), and a fresh dump RENUMBERS every `ObjectId`. A silent first-match would then +/// bind the acceptance rows to the wrong object and still go green; this fails LOUD on both +/// ambiguity and absence instead. [`r18_the_name_resolver_fails_loud_in_both_directions`] is +/// the row that proves it. +fn resolve_by_name(state: &GameState, name: &str) -> ObjectId { + let hits: Vec = state + .battlefield + .iter() + .filter(|id| state.objects.get(id).is_some_and(|o| o.name == name)) + .copied() + .collect(); + match hits.as_slice() { + [one] => *one, + [] => panic!("fixture name resolution: NO battlefield object named {name:?}"), + many => panic!( + "fixture name resolution: AMBIGUOUS — {} battlefield objects named {name:?}: {many:?}", + many.len() + ), + } +} + +/// One beat of the F4 drive policy, every beat crossing the public `apply()` boundary. +/// +/// At `Priority` ALWAYS pass: the mandatory chain resolves and re-triggers, and that IS the +/// loop — casting here wanders off it. At Torch's CR 608.2b target choice aim **P1** (a +/// CONSTANT seat, so the cycle is board-stable and the detector can certify it); at either +/// CR 603.5 "may" prompt TAKE (declining Sue's token breaks the chain to Reed). +/// +/// ⚠ This is deliberately NOT `loop_shortcut.rs`'s shared `dump_drive_one_beat`: that helper's +/// victim preference matches `GameAction::SelectTargets`, and this dump raises +/// `GameAction::ChooseTarget`, so its pin is inert here and its "first legal non-terminal +/// action" fallback answers Sue's "may" with whichever `DecideOptionalEffect` is enumerated +/// first. MEASURED: under that policy this dump reaches no offering beat at all. +fn f4_drive_one_beat(state: &mut GameState) -> Result<(), String> { + let who = state + .waiting_for + .acting_player() + .ok_or_else(|| format!("no acting player at {:?}", state.waiting_for))?; + let (actions, _costs, _grouped) = engine::ai_support::legal_actions_for_viewer(state, who); + let chosen = if matches!(state.waiting_for, WaitingFor::Priority { .. }) { + actions + .iter() + .find(|a| matches!(a, GameAction::PassPriority)) + .cloned() + } else { + actions + .iter() + .find(|a| { + matches!( + a, + GameAction::ChooseTarget { target: Some(TargetRef::Player(p)) } if *p == P1 + ) + }) + .or_else(|| { + actions + .iter() + .find(|a| matches!(a, GameAction::DecideOptionalEffect { accept: true })) + }) + .cloned() + }; + let action = chosen.ok_or_else(|| { + format!( + "the F4 policy answers every beat this drive reaches; unhandled {:?}", + state.waiting_for + ) + })?; + apply(state, who, action.clone()) + .map(|_| ()) + .map_err(|e| format!("apply err ({action:?}): {e:?}")) +} + +/// Drive the loaded dump until the ENGINE raises the CR 732.2a bounded offer, returning that +/// beat index. The beat is SEARCHED, never hardcoded — a hardcoded index is a fixture that +/// drifts silently when the drive policy moves. +fn drive_f4_to_offer(state: &mut GameState, cap: u32) -> Option { + for beat in 0..cap { + if matches!(state.waiting_for, WaitingFor::LoopShortcut { .. }) { + return Some(beat); + } + f4_drive_one_beat(state).ok()?; + } + None +} + +fn offer_parts( + state: &GameState, +) -> ( + PlayerId, + &engine::analysis::loop_check::LoopCertificate, + &engine::analysis::decision_template::ShortcutDecisionSchema, +) { + match &state.waiting_for { + WaitingFor::LoopShortcut { + proposer, + certificate, + schema, + .. + } => (*proposer, certificate, schema), + other => panic!("expected the CR 732.2a bounded offer, got {other:?}"), + } +} + +/// Restore the `Priority` window the reconcile bridge consumed when it raised the offer, so +/// the mint can be re-run on the offer beat's OWN board. Every caller proves the +/// reconstruction faithful by requiring the same outcome the production path produced. +fn replay_at_priority(state: &GameState, proposer: PlayerId) -> GameState { + let mut replay = state.clone(); + replay.waiting_for = WaitingFor::Priority { player: proposer }; + replay +} + +// ───────────────────────────────────────────────────────────────────────────────────────── +// R18 — fail-loud fixture name resolution +// ───────────────────────────────────────────────────────────────────────────────────────── + +/// §6 R18 (a)/(b)/(c) — the resolver every acceptance row's identity flows through. +/// +/// * **(c) the paired positive reach-guard, asserted FIRST**: on the UNMODIFIED dump all four +/// comma printings resolve, to four DISTINCT `ObjectId`s. Without this, (a)/(b) could pass +/// over a resolver that never resolves anything. +/// * **(a)** two battlefield objects sharing the resolved name ⇒ PANIC, not first-match. +/// * **(b)** zero matches ⇒ PANIC, not a `None`-swallow. +/// +/// REVERT-PROBES (both RUN, see the journal): replace the unique-match with a `.find(..)` +/// first-match ⇒ (a) stops panicking ⇒ FLIPS; delete the empty-slice panic arm ⇒ (b) FLIPS. +#[test] +fn r18_the_name_resolver_fails_loud_in_both_directions() { + use std::panic::{catch_unwind, AssertUnwindSafe}; + + let state = load_f4(); + + // ── (c) the anti-vacuity leg: four printings, four DISTINCT ids ── + let ids: Vec = [REED, SUE, TORCH, THING] + .iter() + .map(|n| resolve_by_name(&state, n)) + .collect(); + let mut sorted = ids.clone(); + sorted.sort(); + sorted.dedup(); + assert_eq!( + sorted.len(), + 4, + "(c) the unmodified F4 dump must resolve all four comma printings to four DISTINCT \ + ObjectIds — otherwise (a)/(b) are asserted over a resolver that never resolves \ + anything; got {ids:?}" + ); + + // ── (a) AMBIGUITY ⇒ panic. A second battlefield object is given Torch's exact name; the + // id-literal precedent would have silently taken the first. ── + let ambiguous = { + let mut s = state.clone(); + let clone_target = *s + .battlefield + .iter() + .find(|id| **id != ids[2]) + .expect("the dump's battlefield holds more than one permanent"); + s.objects + .get_mut(&clone_target) + .expect("battlefield ids index live objects") + .name = TORCH.to_string(); + s + }; + let ambiguous_err = catch_unwind(AssertUnwindSafe(|| resolve_by_name(&ambiguous, TORCH))) + .expect_err( + "(a) CR-neutral fixture hygiene: two battlefield objects sharing the resolved name \ + must PANIC, not silently first-match — a re-dump that duplicates a name would \ + otherwise bind the acceptance rows to the wrong object and still go green", + ); + assert!( + panic_message(&ambiguous_err).contains("AMBIGUOUS"), + "(a) the panic must NAME the failure mode so a re-dump reads as a fixture problem, \ + got {:?}", + panic_message(&ambiguous_err) + ); + + // ── (b) ABSENCE ⇒ panic. ── + let absent_err = catch_unwind(AssertUnwindSafe(|| { + resolve_by_name(&state, "Doctor Doom, Victor Von Doom") + })) + .expect_err("(b) a name with zero battlefield matches must PANIC, not be swallowed"); + assert!( + panic_message(&absent_err).contains("NO battlefield object"), + "(b) the panic must name the failure mode, got {:?}", + panic_message(&absent_err) + ); +} + +fn panic_message(payload: &Box) -> String { + payload + .downcast_ref::() + .cloned() + .or_else(|| payload.downcast_ref::<&str>().map(|s| (*s).to_string())) + .unwrap_or_default() +} + +// ───────────────────────────────────────────────────────────────────────────────────────── +// R1 — the offer fires on the real dump, with an independently re-derived bound +// ───────────────────────────────────────────────────────────────────────────────────────── + +/// §6 R1 — the CR 732.2a bounded offer FIRES on the REAL 4-player F4 dump, driven through +/// `apply()`, and its `max_iterations` equals the bound re-derived by this row from the +/// offer-beat board. +/// +/// **STATUS: PARTIAL — pending the (A)/(B) ruling.** §6 R1 as planned also expected the offer to +/// publish three decision points and to be TAKEABLE (commit ≥ 1 cycle). Measured on this tree it +/// publishes ONE point and commits ZERO cycles (see `r1b` and `r2` for the pinned measurements, +/// and the module header for the mechanism). This row therefore ships the half of R1 that the +/// measurement supports — the offer fires, and its bound arithmetic is correct — and pins the +/// other half AS MEASURED rather than asserting the falsified prediction. R2a/R2b/R3/R4/R5 and +/// the interruptibility pair stay unwritten until the ruling lands. +/// +/// # What the assertion is bound to, and why it is not `f(x) == f(x)` +/// +/// The expectation is computed HERE from (i) each living seat's life and library on the +/// offer-beat board and (ii) the per-period delta the ENGINE published on the certificate — it +/// never calls `elimination_bounds`, which is the function under test. Per §6 R1's ROUND-38 +/// (F3) ruling the row is anchored to the **in-tree MAX form** (`resource.rs` +/// `observed_life_loss.max(declared_life_magnitude)` under the `declarable_victims` guard); +/// the additive per-victim form is a tracked follow-up (R1-fu), not a prerequisite. Measured on +/// this board `victim_slot` is EMPTY (see `r5`'s handback in the module header), so the two +/// forms coincide here and the row states which one it assumes. +/// +/// # Reach-guards (each excludes a way this could pass degenerately) +/// +/// * the pre-offer beats really ran the cycle — P1's life FELL and P0's library SHRANK; +/// * the published per-period delta is non-zero on both axes, so the division is not by zero +/// and the `min` is not taken over an empty set; +/// * the bound is NARROWED (`< MAX_SHORTCUT_CYCLES`), so the row is not satisfied by the +/// unnarrowed default every pre-bounded offer carries. +#[test] +fn r1_the_bounded_offer_fires_on_the_real_f4_dump() { + let mut state = load_f4(); + let life_before: Vec = state.players.iter().map(|p| p.life as i64).collect(); + let libs_before: Vec = state.players.iter().map(|p| p.library.len()).collect(); + + let beat = drive_f4_to_offer(&mut state, 400).expect( + "CR 732.2a: the bounded offer must FIRE on this real 4p board. A failure here is the \ + offer never being raised, not a fixture accident — the pre-5d baseline drove 400 \ + beats on this same dump and reached zero LoopShortcut beats", + ); + let (proposer, certificate, schema) = offer_parts(&state); + + assert_eq!( + proposer, P0, + "the proposer is the seat holding priority in the cycle it controls" + ); + + // ── reach-guard: the cycle really ran before the offer ── + let life_now: Vec = state.players.iter().map(|p| p.life as i64).collect(); + let libs_now: Vec = state.players.iter().map(|p| p.library.len()).collect(); + assert!( + life_now[1] < life_before[1] && libs_now[0] < libs_before[0], + "reach-guard: the pre-offer beats must show the cycle RUNNING (P1 life falls, P0 \ + library shrinks). life {life_before:?} -> {life_now:?}, libs {libs_before:?} -> \ + {libs_now:?} over {beat} beats" + ); + + let per_cycle = certificate + .per_cycle + .clone() + .expect("a bounded offer publishes the per-period signature its bound was divided by"); + let life_loss_p1 = -per_cycle.delta.life.get(&P1).copied().unwrap_or(0); + let library_drain_p0 = -per_cycle.delta.library_delta.get(&P0).copied().unwrap_or(0); + assert!( + life_loss_p1 > 0 && library_drain_p0 > 0, + "reach-guard: both live axes must carry a strictly positive per-cycle consumption, \ + else the divisions below are vacuous; delta {:?}", + per_cycle.delta + ); + + // ── the expectation, re-derived independently of `elimination_bounds` ── + // CR 704.5a headroom is `life - 1`: a seat at exactly 0 has LOST, so a legal shortcut must + // stop one point above it. CR 104.3c: an empty library is only lethal on the next draw, so + // the library axis divides the whole remaining library. + let mut bounds: Vec = vec![]; + for player in state.players.iter().filter(|p| !p.is_eliminated) { + let loss = -per_cycle.delta.life.get(&player.id).copied().unwrap_or(0); + if loss > 0 { + bounds.push((player.life as i64 - 1) / loss); + } + let drain = -per_cycle + .delta + .library_delta + .get(&player.id) + .copied() + .unwrap_or(0); + if drain > 0 { + bounds.push(player.library.len() as i64 / drain); + } + } + let expected = bounds + .iter() + .copied() + .min() + .expect("at least one consumed axis, guaranteed by the reach-guard above") + .clamp(0, i64::from(MAX_SHORTCUT_CYCLES_MIRROR)); + + assert_eq!( + i64::from(schema.max_iterations), + expected, + "CR 732.2a + CR 704.5a: `max_iterations` is the MIN over every living seat's \ + elimination headroom, divided by the per-period consumption the certificate itself \ + published. Re-derived here as {bounds:?} -> {expected}; the offer published {}. \ + (This row assumes the IN-TREE max form; see R1-fu.)", + schema.max_iterations + ); + assert!( + schema.max_iterations < MAX_SHORTCUT_CYCLES_MIRROR, + "the bound must be NARROWED, else this row is satisfied by the unnarrowed default \ + every pre-bounded offer carries" + ); +} + +/// §6 R1, SECOND HALF — **a MEASURED CORRECTION to the plan, pinned so it cannot drift +/// silently. STATUS: PARTIAL — this row pins the CURRENT truth of the published point set, not +/// the planned one, pending the (A)/(B) ruling.** +/// +/// R1 as written expects `points ≡ {Targets(403 Torch), MayChoice(401 Reed), +/// MayChoice(402 Sue)}`. That expectation is a HEAD-era SNAPSHOT-mint reading (§2: *"returns 1 +/// point when 403 is up"*), and it does not survive U3's WINDOW mint. Measured on this tree: +/// +/// * the retained ring frames on this board alternate strictly between the `404` and `402` +/// stack entries — the CR 732.2a sampler fires only at `Priority { player == active_player }` +/// after a non-shrinking resolution, and the `403` / `401` entries only ever sit on the stack +/// across a `TriggerTargetSelection` / `OptionalEffectChoice` window; +/// * `certified_period_touch`'s `announced` set is exactly "entries in a frame's stack absent +/// from the previous frame's", so `403` and `401` are never announced; +/// * therefore `bounded_cycle_pin_slots_for_window` publishes exactly ONE point — Sue's +/// `MayChoice`. +/// +/// The row asserts the MEASUREMENT, with the sources named, and the frame census as its own +/// reach-guard. **If a future change widens the announced set this row FAILS LOUDLY and must be +/// re-keyed — which is the point: R2a/R2b/R3/R5 become writable at exactly that moment.** +#[test] +fn r1b_the_published_point_set_is_exactly_what_the_retained_window_announces() { + let mut state = load_f4(); + let (torch, sue, reed, thing) = ( + resolve_by_name(&state, TORCH), + resolve_by_name(&state, SUE), + resolve_by_name(&state, REED), + resolve_by_name(&state, THING), + ); + drive_f4_to_offer(&mut state, 400).expect("the bounded offer fires (see R1)"); + let (_proposer, _certificate, schema) = offer_parts(&state); + + // ── reach-guard: the ring really is populated, and its frames really do alternate over + // exactly {THING, SUE} — this is the fact that EXPLAINS the point set ── + assert!( + state.loop_detect_ring.len() >= 2, + "reach-guard: a window needs at least two retained samples; ring = {}", + state.loop_detect_ring.len() + ); + let framed_sources: std::collections::BTreeSet = state + .loop_detect_ring + .iter() + .flat_map(|f| f.live.stack.iter().map(|e| e.source_id)) + .collect(); + assert_eq!( + framed_sources, + [thing, sue].into_iter().collect(), + "MEASURED: every retained sample's stack holds a {THING:?} ({thing:?}) or {SUE:?} \ + ({sue:?}) entry and NEVER a {TORCH:?} ({torch:?}) or {REED:?} ({reed:?}) one, because \ + those two resolve across a prompt window and the sampler only fires at an \ + active-player `Priority` settle. This is the reach-guard for the point-set assertion \ + below" + ); + assert!( + !framed_sources.contains(&torch) && !framed_sources.contains(&reed), + "stated as its own conjunct because it is the load-bearing half: the two sources whose \ + choices go unpublished are exactly the two the sampler never retains" + ); + + let published: Vec<(ObjectId, &'static str)> = schema + .points + .iter() + .map(|p| { + let source = match &p.slot.source { + engine::types::game_state::YieldTarget::ThisObject { source_id, .. } => *source_id, + other => panic!("unexpected decision source {other:?}"), + }; + let kind = match &p.kind { + DecisionPointKind::MayChoice => "MayChoice", + DecisionPointKind::Targets { .. } => "Targets", + other => panic!("unexpected point kind {other:?}"), + }; + (source, kind) + }) + .collect(); + assert_eq!( + published, + vec![(sue, "MayChoice")], + "MEASURED PLAN CORRECTION (§6 R1): the window mint publishes ONE point — Sue's \ + CR 603.5 `may`. Torch's CR 608.2b `Targets` point and Reed's CR 603.5 `may` are NOT \ + published because their stack entries are never ANNOUNCED (see the frame census \ + above). If this assertion fails because the set GREW, the announced-set derivation \ + changed and R2a/R2b/R3/R5 must be written in the same change" + ); +} + +/// §6 R2, **as measured** — the consequence of the unannounced choices, driven end to end. +/// +/// A `Fixed(n)` declaration carrying the FULL published pin set is ACCEPTED at declare +/// (`predictability_gate` + `validate_pins` both pass — the published set is covered), every +/// living opponent Accepts (CR 732.2c), and then the drive **commits nothing**: cycle 0 answers +/// Sue's `OptionalEffectChoice` from the pin (U4's `inject_pinned_answer` arm, on the real +/// dump), reaches Reed's `OptionalEffectChoice`, finds no pin for it, and returns +/// `CycleOutcome::Abort` ⇒ whole-cycle rollback ⇒ CR 800.4a priority handback. +/// +/// This is FAIL-CLOSED and rules-safe; it is also NOT a grant, so §6 R2a's *"exactly N cycles +/// commit"* has no non-vacuous form here and is handed back rather than weakened. The row pins +/// the zero-commit **together with its cause**, so it cannot be read as "the drive works": +/// +/// * the same `n` is run at 1 and at 3 and BOTH commit zero (a partial commit would separate +/// them, which is the discriminator `bounded_fixed_count_commits_exactly_n_periods` uses); +/// * the declaration is asserted to have been ACCEPTED (`RespondToShortcut` raised), so the +/// zero is the DRIVE's and not a declare-time refusal — that distinction is the whole row; +/// * Reed's "may" is asserted UNPUBLISHED on the same offer, naming the cause. +#[test] +fn r2_an_accepted_declaration_commits_zero_cycles_because_reeds_may_is_unannounced() { + use engine::analysis::decision_template::{ + DecisionGroupKey, DecisionTemplate, MayChoiceOption, PinnedDecision, ReplayMode, + }; + use engine::analysis::loop_check::ShortcutResponse; + + let mut committed_per_n = vec![]; + for n in [1u32, 3] { + let mut state = load_f4(); + let reed = resolve_by_name(&state, REED); + drive_f4_to_offer(&mut state, 400).expect("the bounded offer fires (see R1)"); + let (proposer, _certificate, schema) = offer_parts(&state); + let schema = schema.clone(); + + assert!( + !schema.points.iter().any(|p| matches!(&p.slot.source, + engine::types::game_state::YieldTarget::ThisObject { source_id, .. } + if *source_id == reed)), + "the CAUSE this row is about: Reed's CR 603.5 `may` is NOT among the published \ + points, so no legal declaration can pin it" + ); + + let decisions: Vec = schema + .points + .iter() + .map(|p| match &p.kind { + DecisionPointKind::MayChoice => PinnedDecision::MayChoice { + slot: p.slot.clone(), + take: MayChoiceOption::Take, + }, + DecisionPointKind::Targets { .. } => PinnedDecision::Targets { + slot: p.slot.clone(), + targets: vec![engine::analysis::decision_template::TargetPin::Player(P1)], + }, + other => panic!("unexpected point kind {other:?}"), + }) + .collect(); + let sources: Vec = schema + .points + .iter() + .map(|p| p.slot.source.clone()) + .collect(); + let template = DecisionTemplate { + owner: proposer, + decisions, + replay: ReplayMode::Scheduled { + count: IterationCount::Fixed(n), + }, + key: DecisionGroupKey::from_sources(&sources, DecisionKind::LoopChoice), + }; + + let life_before: Vec = state.players.iter().map(|p| p.life as i64).collect(); + let libs_before: Vec = state.players.iter().map(|p| p.library.len()).collect(); + + apply( + &mut state, + proposer, + GameAction::DeclareShortcut { + count: IterationCount::Fixed(n), + template: Some(template), + }, + ) + .expect("the declaration is dispatched"); + // THE DISCRIMINATOR between "declare refused it" and "the drive aborted": a refused + // declaration hands priority straight back and never opens the APNAP window. + assert!( + matches!(state.waiting_for, WaitingFor::RespondToShortcut { .. }), + "n={n}: the declaration carrying the FULL published pin set must be ACCEPTED and \ + open the CR 732.2b APNAP window — a `Priority` here would mean the zero-commit \ + below is a declare-time refusal, not the drive's abort. got {:?}", + state.waiting_for + ); + while let WaitingFor::RespondToShortcut { player, .. } = state.waiting_for.clone() { + apply( + &mut state, + player, + GameAction::RespondToShortcut { + response: ShortcutResponse::Accept, + }, + ) + .expect("each living opponent accepts (CR 732.2c)"); + } + + let life_after: Vec = state.players.iter().map(|p| p.life as i64).collect(); + let libs_after: Vec = state.players.iter().map(|p| p.library.len()).collect(); + assert_eq!( + (&life_after, &libs_after), + (&life_before, &libs_before), + "n={n}: MEASURED — the accepted shortcut commits NOTHING. Cycle 0 answers Sue's \ + `may` from the pin and then aborts on Reed's UNPINNED `may`, and the whole cycle \ + is rolled back (CR 732.2a: an unpinned per-iteration choice is not a describable \ + predictable sequence). If this ever fails because a delta APPEARED, the announced \ + set widened and §6 R2a/R2b/R3/R5 must be written in the same change" + ); + assert!( + matches!(state.waiting_for, WaitingFor::Priority { .. }), + "n={n}: CR 800.4a — the aborted drive hands back to ordinary priority, got {:?}", + state.waiting_for + ); + committed_per_n.push((life_after, libs_after)); + } + assert_eq!( + committed_per_n[0], committed_per_n[1], + "n=1 and n=3 must be INDISTINGUISHABLE: a partial commit would separate them, and a \ + partial commit is the one outcome CR 732.2a forbids outright" + ); +} + +// ───────────────────────────────────────────────────────────────────────────────────────── +// R23 conjunct (5-reach) — the beat guard's reachability on the real dump +// ───────────────────────────────────────────────────────────────────────────────────────── + +/// §6 R23, the (5-reach) arm — **U4's CR 603.3c beat guard never fires on the acceptance +/// fixture, and the fire population it guards against is measurably NON-EMPTY on the same +/// drive.** +/// +/// The guard is `if work.pending_trigger.is_some() { return Err(RecastAbort) }` at the head of +/// `inject_pinned_answer`'s `OptionalEffectChoice` arm: a live CR 603.3c construction cursor +/// means the prompt in hand may be the ANNOUNCEMENT-time optional-modal question rather than +/// the resolution-time "may" the pin answers, and `slot_source_prompted` matches only the +/// SOURCE OBJECT, which both questions share. +/// +/// ⚠ DISCLOSED INSTRUMENT LIMIT: the guard reads the drive's private `work` board, which no +/// test can observe. This row asserts the same property on the OUTER drive — every +/// `OptionalEffectChoice` beat this dump reaches carries `pending_trigger == None` — which is +/// the beat structure the drive replays. **Its non-vacuity is the paired positive**: the same +/// drive DOES visit beats carrying a live cursor (`pending_trigger == Some(TORCH)`), so the +/// instrument demonstrably can report one. +/// +/// **If the `is_none()` assertion ever fires, the remedy is NOT to weaken it**: it is to scope +/// the guard to the prompt's own `source_id` (§5 U2's alternative placement), which changes +/// what the guard MEANS and is an escalation, not a local edit. +#[test] +fn r23_5_reach_no_may_beat_of_the_f4_drive_carries_a_construction_cursor() { + let mut state = load_f4(); + let mut may_beats = 0usize; + let mut cursor_beats = 0usize; + for beat in 0..400u32 { + if matches!(state.waiting_for, WaitingFor::LoopShortcut { .. }) { + break; + } + if let WaitingFor::OptionalEffectChoice { source_id, .. } = &state.waiting_for { + may_beats += 1; + assert!( + state.pending_trigger.is_none(), + "R23 (5-reach): a CR 603.5 `may` beat carrying a LIVE CR 603.3c construction \ + cursor is exactly the configuration U4's beat guard fail-closes on, and it \ + must not occur on the acceptance fixture. beat {beat}, prompt source \ + {source_id:?}, cursor source {:?}. REMEDY IS AN ESCALATION (scope the guard \ + to the prompt's own source_id), NEVER a weakening of this assertion", + state.pending_trigger.as_ref().map(|t| t.source_id) + ); + } + if state.pending_trigger.is_some() { + cursor_beats += 1; + } + if f4_drive_one_beat(&mut state).is_err() { + break; + } + } + // ── the paired positive: both populations are non-empty, so neither half is vacuous ── + assert!( + may_beats > 0, + "reach-guard: the drive must actually REACH CR 603.5 `may` beats, else the assertion \ + above quantifies over nothing" + ); + assert!( + cursor_beats > 0, + "reach-guard: the same drive must visit beats that DO carry a live construction \ + cursor (this dump ships `pending_trigger` on Torch), else `is_none()` is satisfied by \ + an instrument that can never report `Some`" + ); +} + +// ───────────────────────────────────────────────────────────────────────────────────────── +// R9 — the environmental discharge, on the production path +// ───────────────────────────────────────────────────────────────────────────────────────── + +/// §6 R9 — **the environmental-discharge row round 2's def-scan design could not fail** — with +/// its keying RE-DERIVED from measurement. +/// +/// # What the row asserts +/// +/// On the offer-beat board, ONE CR 614.1a replacement definition that the resolver's OWN +/// derivation draws turns the OFFER into `UnspecifiedChoiceWindow`; six definitions the +/// resolver's derivation does NOT draw leave the offer standing. That contrast IS the claim: +/// the obligation is **event-derived**, read off what the resolution proposes through +/// `find_applicable_replacements`, and is NOT a scan over `def.event` NAMES. A name scan +/// cannot distinguish the seven definitions below — they differ only in their `event` name. +/// +/// # MEASURED PLAN CORRECTION — the plan's ChangeZone/token keying does not fire +/// +/// §6 R9 keys this row on *"a def carrying `event: ReplacementEvent::ChangeZone` … because +/// Sue's `ProposedEvent::CreateToken` draws it via the `ChangeZone` registry key"*. Measured on +/// this board, that def leaves the offer standing — and the reason is already on record in this +/// lane: U1-fin measured that `Effect::Token` never sets `CreateToken.copy`, and +/// `apply_create_token_after_replacement_with_created_ids` gates the whole `TokenEntry` route +/// on `if let Some(copy) = copy`, so **an `Effect::Token` resolution derives no token-entry +/// event at all** (the same fact that re-keyed R19a). Sue's trigger IS an `Effect::Token` +/// (`Wall` 0/4), so the plan's board cannot reach its own stated mechanism. +/// +/// The row is therefore re-keyed onto the announced entry whose derivation the resolver DOES +/// produce: **The Thing's mandatory `PutCounter P1P1 ×2`, deriving `ProposedEvent::AddCounter`** +/// — same class, same seam, same conjunct, on the same real board. The falsified keys are not +/// dropped: they ship as arm (b), where their NON-firing is the discriminator. +/// +/// # Arms +/// +/// * **(pos)** the UNMODIFIED offer-beat board OFFERS through the metered seam — asserted +/// FIRST, so every refusal below is attributable to the definition and not to the replay. +/// * **(a)** one OPTIONAL `AddCounter` definition ⇒ `UnspecifiedChoiceWindow` (CR 614.1a: an +/// optional replacement is a genuine resolution-time choice ⇒ the period is not choice-free). +/// * **(a′)** the SAME definition, MANDATORY ⇒ still OFFERS. CR 616.1: a lone quantity +/// modification commutes with nothing, so there is no ordering choice to make. This is what +/// keeps (a) keyed to OPTIONALITY rather than to "a definition exists". +/// * **(b)** six definitions whose events this board's resolutions never propose +/// (`ChangeZone`, `Moved`, `CreateToken`, `Draw`, `DamageDone`, `RemoveCounter`), each +/// OPTIONAL ⇒ all still OFFER. A `def.event`-name scan would have to refuse these too. +/// +/// # Reach-guard +/// +/// The live candidate authority is asked directly for the `ProposedEvent::AddCounter` The +/// Thing's resolution proposes, and must return a non-empty set — otherwise (a)'s refusal +/// could belong to some other conjunct. +/// +/// # REVERT-PROBES — RUN, and the FIRST FOUR MEASURED **NOT** TO FLIP, which is the finding +/// +/// The refusal is carried by **two independent authorities**, and each one alone is sufficient: +/// +/// | probe (one production edit) | (a) | +/// |---|---| +/// | delete `resolution_events_are_discharged`'s `!causes.is_empty()` conjunct | still REFUSES | +/// | disable `probe_resolution`'s `waiting_for`-discriminant arm | still REFUSES | +/// | … + its `events.is_empty()` arm | still REFUSES | +/// | … + its `event_is_accounted` arm (all three prompt arms) | still REFUSES | +/// | **all three prompt arms AND the discharge conjunct** | **OFFERS ⇒ (a) FAILS** | +/// +/// Measured at the seam with a throwaway instrument (run, read, deleted): on the unprobed tree +/// The Thing's entry classifies `MayPrompt` — the resolver's OWN probe detects the pending +/// optional replacement — and a MANDATORY entry publishes no `may`, so +/// `pinned_may_choice_relief` returns `None` and conjunct (6) refuses there. Disable that +/// detection and the entry classifies `FreeUnlessReplacements([AddCounter])`, whereupon the +/// CR 614.1a discharge conjunct refuses instead. Defence in depth is the property; a row that +/// flipped on either single edit would have been asserting over only one of the two. +/// +/// ⚠ §6 R9's stated probe (*"swap `proposed_event_prompt_cause` back to a def-scan over +/// `def.event` names"*) is not runnable — that scan and its class map were DELETED at U1 — and +/// its predicted single-edit flip is refuted by the table above. Arm (b) covers what that probe +/// was for: it exhibits six definitions a name scan could not distinguish from (a)'s. +#[test] +fn r9_the_offer_refuses_on_a_derived_replacement_obligation_not_on_a_definition_name() { + use engine::game::engine::{try_offer_bounded_cycle_shortcut_metered, ProbeCap}; + use engine::types::ability::{QuantityModification, ReplacementDefinition}; + use engine::types::counter::CounterType; + use engine::types::proposed_event::{CounterPlacement, ProposedEvent}; + + let mut state = load_f4(); + let thing = resolve_by_name(&state, THING); + drive_f4_to_offer(&mut state, 400).expect("the bounded offer fires (see R1)"); + let (proposer, _certificate, _schema) = offer_parts(&state); + + // ── (pos) the matched positive, asserted first ── + let healthy = replay_at_priority(&state, proposer); + let (healthy_out, healthy_meter) = + try_offer_bounded_cycle_shortcut_metered(&healthy, false, ProbeCap::Shipped); + assert!( + healthy_out.is_ok(), + "matched positive: the UNMODIFIED offer-beat board must still OFFER through the \ + metered seam, else every negative below is asserted over a board that refuses \ + anyway. got {healthy_out:?}, meter {healthy_meter:?}" + ); + + // One definition, installed on an EXISTING P0-controlled permanent (never a new object), + // so board membership — and therefore every certification premise — is untouched. + // CR 614.1a scopes a definition to its controller's events, and The Thing is P0's. + let with_def = |event: ReplacementEvent, optional: bool| -> GameState { + let mut hostile = healthy.clone(); + let mut def = ReplacementDefinition::new(event.clone()); + if optional { + def.mode = ReplacementMode::Optional { decline: None }; + } + if matches!(event, ReplacementEvent::Draw) { + // CR 121.2: a Draw definition must declare its stage or the pipeline debug-asserts. + def.draw_scope = Some(engine::types::ability::DrawReplacementScope::IndividualDraw); + } + def.quantity_modification = Some(QuantityModification::Plus { value: 1 }); + hostile + .objects + .get_mut(&thing) + .expect("The Thing is on the battlefield") + .replacement_definitions + .push(def); + hostile + }; + let outcome = |board: &GameState| { + try_offer_bounded_cycle_shortcut_metered(board, false, ProbeCap::Shipped) + }; + + // ── reach-guard: the LIVE candidate authority draws the optional AddCounter definition + // for the very event The Thing's announced resolution proposes ── + let optional_counter_board = with_def(ReplacementEvent::AddCounter, true); + let proposed = ProposedEvent::AddCounter { + placement: CounterPlacement::Object { + actor: proposer, + object_id: thing, + counter_type: CounterType::Plus1Plus1, + }, + count: 2, + applied: Default::default(), + }; + let candidates = engine::game::replacement::find_applicable_replacements( + &optional_counter_board, + &proposed, + engine::game::replacement::replacement_registry(), + ); + assert!( + !candidates.is_empty(), + "reach-guard: the live candidate authority must draw the definition for the \ + `ProposedEvent::AddCounter` The Thing's `PutCounter P1P1 x2` proposes — a refusal \ + over an EMPTY candidate set would belong to some other conjunct entirely" + ); + + // ── (a) the optional definition refuses ── + let (a_out, a_meter) = outcome(&optional_counter_board); + assert!( + matches!( + a_out, + Err(engine::game::engine::BoundedOfferRefusal::UnspecifiedChoiceWindow) + ), + "(a) CR 614.1a + CR 732.2a: an OPTIONAL replacement candidate applicable to an \ + ANNOUNCED entry's DERIVED event is a real resolution-time choice, so the period is \ + not choice-free and the offer must be refused. got {a_out:?}, meter {a_meter:?}" + ); + + // ── (a′) the same definition, mandatory, still offers ── + let (a2_out, a2_meter) = outcome(&with_def(ReplacementEvent::AddCounter, false)); + assert!( + a2_out.is_ok(), + "(a′) CR 616.1: a LONE mandatory quantity modification commutes with nothing, so it \ + opens no ordering choice and the offer stands. Without this arm (a) would be keyed \ + to `a definition exists` rather than to OPTIONALITY. got {a2_out:?}, meter {a2_meter:?}" + ); + + // ── (b) the def-NAME discriminator: six optional definitions the resolver never draws ── + for event in [ + ReplacementEvent::ChangeZone, + ReplacementEvent::Moved, + ReplacementEvent::CreateToken, + ReplacementEvent::Draw, + ReplacementEvent::DamageDone, + ReplacementEvent::RemoveCounter, + ] { + let (b_out, b_meter) = outcome(&with_def(event.clone(), true)); + assert!( + b_out.is_ok(), + "(b) {event:?}: this board's announced resolutions never PROPOSE this event, so \ + an event-derived obligation must ignore the definition entirely and the offer \ + must stand. A scan over `def.event` NAMES — round 2's design — would refuse here \ + exactly as it refuses in (a), which is what makes this arm the discriminator. \ + (`ChangeZone`/`CreateToken` are §6 R9's own stated keying; see this row's doc for \ + why `Effect::Token` derives no token-entry event.) got {b_out:?}, meter {b_meter:?}" + ); + } +} + +// ───────────────────────────────────────────────────────────────────────────────────────── +// R16 — the probe budget does not starve the F4 acceptance fixture +// ───────────────────────────────────────────────────────────────────────────────────────── + +/// §6 R16 (i) + the exact-demand pin, on the newly tracked F4 fixture. +/// +/// The shipped `PROBE_BUDGET` was re-derived at U3 from dina's offering beat (demand 13). F4 +/// was UNTRACKED then, so the acceptance fixture this whole lane exists for had never been +/// measured against the budget at all. Measured here, at F4's own offering beat, through the +/// metered seam: +/// +/// * the demand is EXACT — `Lowered(d)` offers and every `Lowered(n < d)` refuses, over the +/// seam's closed cap domain. That is a sweep, not a single reading, so the number cannot be +/// an artifact of one call; +/// * `denied == false` at the shipped cap — the budget is not binding on this fixture; +/// * the certification basis at that beat is recorded (`ResourceSignatureOnly`, basis B), +/// because the meter is the only surface on which the basis is observable. +/// +/// # (iii-b) THE ORDERING PIN, re-keyed onto an instrument that exists +/// +/// §6 R16 (iii-b) asks for *"the honest count is 1"* at a beat carrying a non-exempt `optional` +/// entry, with the revert *"move `try_charge_one` above the `optional` gate ⇒ the entry burns a +/// charge in its primary pass as well as its residual pass ⇒ the count rises 1 → 2"*. The +/// count-per-entry is not a `MintMeter` field, but the property is: the meter carries BOTH +/// `spent` and `conjunct6_asks`, so **`spent == conjunct6_asks`** says exactly "every ask +/// charged once", which is the invariant the ordering protects. Under the stated revert an +/// `optional` ask charges twice and `spent > asks`. +/// +/// Its reach-guard is the population the plan asks for: at least one entry the door is asked +/// about must be CR 603.5 `optional` — asserted on the retained window, since Sue's announced +/// entries are the optional ones (the current stack's single entry is The Thing's mandatory +/// `PutCounter`). +/// +/// # (iii-a) — DISCLOSED, the plan's instrument does not exist on this tree +/// +/// §6 R16 (iii-a) pins the *"CURRENT-FRAME charge subcount"* at 1. `MintMeter` has no +/// current-frame subcount, and adding one is a production change with no other consumer. What +/// this row establishes instead, and states as a derivation rather than a reading: the offering +/// beat's `current.stack` holds exactly ONE entry (asserted) and every ask charges exactly once +/// (asserted above) ⇒ the current frame contributes exactly one charge. The unqualified TOTAL +/// is (ii-a)'s figure and is measured directly by the sweep below. +#[test] +fn r16_the_f4_offering_beats_probe_demand_is_exactly_measured() { + use engine::game::engine::{try_offer_bounded_cycle_shortcut_metered, ProbeCap}; + + let mut state = load_f4(); + drive_f4_to_offer(&mut state, 400).expect("the bounded offer fires (see R1)"); + let (proposer, _certificate, _schema) = offer_parts(&state); + let replay = replay_at_priority(&state, proposer); + + let (shipped_out, shipped) = + try_offer_bounded_cycle_shortcut_metered(&replay, false, ProbeCap::Shipped); + assert!( + shipped_out.is_ok(), + "reach-guard: the replay must reproduce the production OFFER, else every figure below \ + is measured on a different board. got {shipped_out:?}" + ); + assert!( + !shipped.denied, + "R16 (i): the shipped budget must not STARVE the acceptance fixture — a denied budget \ + at the one beat this corpus offers on is the defect U3's re-derivation fixed for \ + dina, measured here for F4. meter {shipped:?}" + ); + assert_eq!( + shipped.certification, + Some(engine::analysis::resource::PeriodCertification::ResourceSignatureOnly), + "the F4 offering beat certifies through BASIS B; the meter is the only surface on \ + which that is observable (both bases publish `frames_per_period`)" + ); + + // ── (iii-b) the ordering pin: every ask charges EXACTLY ONE ── + let optional_in_window = state + .loop_detect_ring + .iter() + .map(|f| optional_entries(&f.live)) + .sum::(); + assert!( + optional_in_window > 0, + "(iii-b) reach-guard: the door must be asked about at least one CR 603.5 `optional` \ + entry, else the ordering property below is asserted over a population that never \ + reaches the `optional` gate at all — the exact defect §6 R16's ROUND-10 (MED-2) \ + re-keying was about" + ); + assert!( + shipped.conjunct6_asks > 0, + "(iii-b) reach-guard: conjunct (6) must actually ASK, else `spent == asks` is `0 == 0`" + ); + assert_eq!( + shipped.spent, shipped.conjunct6_asks, + "(iii-b) CR 603.5: `try_charge_one` sits BELOW the `optional` gate, so an entry pays \ + for its residual pass and never additionally for a primary pass it exits early. \ + Hoisting the charge above that gate makes every optional ask charge TWICE and \ + `spent` exceed `asks`. meter {shipped:?}" + ); + assert_eq!( + state.stack.len(), + 1, + "(iii-a) the derivation's premise: the offering beat's current frame holds exactly ONE \ + entry, so with `spent == asks` the current frame contributes exactly one charge. \ + (`MintMeter` has no current-frame subcount — see this row's doc.)" + ); + + // ── the exact-demand sweep over the seam's closed cap domain ── + let demand = shipped.spent; + assert!( + demand > 0, + "reach-guard: a zero-demand beat would make every `Lowered(n)` below identical to \ + `Lowered(0)` and the sweep vacuous" + ); + let (at_demand, _) = + try_offer_bounded_cycle_shortcut_metered(&replay, false, ProbeCap::Lowered(demand)); + assert!( + at_demand.is_ok(), + "the measured demand {demand} must be SUFFICIENT — `Lowered(demand)` still offers" + ); + for n in 0..demand { + let (out, meter) = + try_offer_bounded_cycle_shortcut_metered(&replay, false, ProbeCap::Lowered(n)); + assert!( + matches!( + out, + Err(engine::game::engine::BoundedOfferRefusal::UnspecifiedChoiceWindow) + ) && meter.denied, + "every cap BELOW the measured demand must exhaust and refuse FAIL-CLOSED, so the \ + demand figure is a boundary and not one lucky reading. cap {n} gave {out:?}, \ + meter {meter:?}" + ); + } +} + +// ───────────────────────────────────────────────────────────────────────────────────────── +// R27 (a1) — the F4 arm of the split-sample row +// ───────────────────────────────────────────────────────────────────────────────────────── + +/// §6 R27 (a1), the F4 arm the plan sites at U5 (*"on BOTH real dumps"*; U0 landed the dellian +/// arm only, because this fixture was untracked until now). +/// +/// CR 104.4b: the loop-detection COMPARAND is `normalize_for_loop`d, which zeroes the object +/// allocator so two structurally identical boards compare equal. CR 732.2a: the EVALUATION +/// board must keep the live allocator cursor, or every downstream consumer is reading a board +/// the game was never in. `LoopDetectSample` splits the two, and this row asserts the split on +/// the real F4 dump, on the allocator axis, at a sample the PRODUCTION sampler wrote. +#[test] +fn r27_a1_the_f4_dumps_recorded_sample_keeps_a_live_half_normalization_would_have_erased() { + let mut state = load_f4(); + assert!( + state.loop_detect_ring.is_empty(), + "reach-guard: the restored dump starts with an EMPTY ring, so the sample asserted on \ + below is one THIS drive's production sampler wrote" + ); + let mut witness = None; + for _ in 0..400u32 { + let before = state.next_object_id; + let ring_before = state.loop_detect_ring.len(); + if f4_drive_one_beat(&mut state).is_err() { + break; + } + if state.loop_detect_ring.len() > ring_before { + witness = Some((before, state.next_object_id)); + break; + } + } + let (before_beat, after_beat) = + witness.expect("the production sampler must grow the ring within the drive's cap"); + let sample = state + .loop_detect_ring + .back() + .expect("the ring just grew, so it has a newest sample"); + + assert!( + before_beat > 0, + "reach-guard: the allocator cursor must be non-zero before the sampled beat, else the \ + inequality below is `0 != 0`" + ); + assert_eq!( + sample.normalized.next_object_id, 0, + "CR 104.4b: the COMPARAND half is normalized — `normalize_for_loop` zeroes the object \ + allocator so two structurally identical boards compare equal" + ); + assert!( + sample.live.next_object_id >= before_beat && sample.live.next_object_id <= after_beat, + "CR 732.2a: the EVALUATION half carries the LIVE allocator cursor, inside the beat's \ + own bracket [{before_beat}, {after_beat}]; got {}", + sample.live.next_object_id + ); + assert_ne!( + sample.live, sample.normalized, + "the two halves must be genuinely different boards — an equal pair would make the \ + split a distinction without a difference" + ); +} + +// ───────────────────────────────────────────────────────────────────────────────────────── +// helpers used by more than one row +// ───────────────────────────────────────────────────────────────────────────────────────── + +/// Count the stack entries whose triggered ability is CR 603.5 `optional`. Used as a reach +/// guard where a row's claim is about the optional gate. +fn optional_entries(state: &GameState) -> usize { + state + .stack + .iter() + .filter(|e| match &e.kind { + StackEntryKind::TriggeredAbility { ability, .. } => ability.optional, + _ => false, + }) + .count() +} diff --git a/crates/engine/tests/integration/main.rs b/crates/engine/tests/integration/main.rs index 3c16b51162..c331ce2fc2 100644 --- a/crates/engine/tests/integration/main.rs +++ b/crates/engine/tests/integration/main.rs @@ -185,6 +185,7 @@ mod export_runtime_canaries; mod exquisite_blood_routing; mod eyetwitch_learn_decline_lesson; mod fact_or_fiction_pile_separation; +mod fantastic_four_bounded_loop; mod fateful_handoff_target_mana_value_draw; mod favor_of_the_mighty_greatest_mana_value_protection; mod felisa_fang_of_silverquill; From 1f0765560e3e72332c853f554a280b369d4d058a Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 05:46:31 -0500 Subject: [PATCH 24/62] test(engine): pin what the AI can actually do at the real F4 bounded offer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit §5 U6's AI-verification step, keyed to the measured reality rather than to the plan's three-slot prediction. Drives the tracked 4p F4 dump to its real CR 732.2a offer through `apply()` and measures `engine::ai_support::legal_actions` there — the seam `phase-ai/src/search.rs` reaches via `WaitingFor::LoopShortcut { .. } => engine::ai_support::legal_actions(state)`. MEASURED: the generator emits exactly two candidates, `DeclareShortcut { count: UntilLethal, template: None }` and `DeclineShortcut`. Its `Fixed(max_iterations)` candidate — which exists precisely for bounded offers — is gated on `schema.points.is_empty()`, and this offer publishes one point, so it is excluded; the surviving declare candidate is refused outright by `handle_declare_shortcut` (`UntilLethal` against a narrowed bound). The AI's only effective action is therefore DECLINE, which the phase-ai policy independently reaches: the offer latches `predicted_winner: None`, routing `LoopShortcutPolicy` to its `(None, UntilLethal) => reject` arm. These rows supply the reachability that policy's own row cannot — a real captured board carrying exactly that pair. The whole declare option space is measured on one board: `UntilLethal` + None, `UntilLethal` + a conformant template, and `Fixed(max)` + None are all refused into the CR 800.4a handback; `Fixed(n)` + a template pinning every published point with `owner == proposer` is ACCEPTED and opens the CR 732.2b window — the anti-vacuity control, and the shape the generator never emits. A third row exercises the declare-time `template.owner` firewall on the real dump (the staged-offer arm lives in `loop_shortcut.rs`'s `r28_a`). THE GAP IS REPORTED, NOT CLOSED, for two measured reasons: an accepted declaration on this board commits ZERO cycles (the unannounced-`may` defect pinned by `r2`), so a candidate-generator fix rides the grant mechanism and inherits its hold; and building the template needs a new engine authority for the pin CONTENT, which is a design decision rather than executor-local plumbing. §6 R8's U6 invariance arm — the one arm §5 leaves open — PASSES: U6 touches no tree R8 walks (`git diff --stat HEAD -- crates/engine/src crates/phase-ai/src` is empty), the raw `WaitingFor::LoopShortcut {` census is unchanged at 37, and R8's own tests stay green at `(production, test) == (22, 14)` with the `ai_support/candidates.rs 1` multiset entry intact. No census update is owed. Assisted-by: ClaudeCode:claude-opus-5 --- .../fantastic_four_bounded_loop.rs | 372 ++++++++++++++++-- 1 file changed, 341 insertions(+), 31 deletions(-) diff --git a/crates/engine/tests/integration/fantastic_four_bounded_loop.rs b/crates/engine/tests/integration/fantastic_four_bounded_loop.rs index ea178000fa..17261b01bb 100644 --- a/crates/engine/tests/integration/fantastic_four_bounded_loop.rs +++ b/crates/engine/tests/integration/fantastic_four_bounded_loop.rs @@ -202,6 +202,62 @@ fn offer_parts( } } +/// Build the CONFORMANT declaration template for a published schema: one pin per published +/// point, `owner` and `count` supplied by the caller. +/// +/// This is the shape `handle_declare_shortcut` ACCEPTS (measured in +/// [`u6_the_ais_only_declare_candidate_is_refused_while_the_accepted_shape_is_one_it_never_emits`]), +/// so every row that needs either an accepted declaration or a one-axis hostile variant of one +/// builds it here rather than re-deriving the mapping. Keyed off `schema.points` — never off a +/// hard-coded slot — so a re-dump that renumbers objects, or a remedy that widens the announced +/// set, flows through without edit. +/// +/// The per-kind mapping is deliberately total and LOUD on the kinds F4 cannot produce: a +/// silently-skipped point would build a template that `predictability_gate` refuses, and the +/// refusal would be read as the row's subject rather than as the fixture's own gap. +fn f4_pin_template( + schema: &engine::analysis::decision_template::ShortcutDecisionSchema, + owner: PlayerId, + count: u32, +) -> engine::analysis::decision_template::DecisionTemplate { + use engine::analysis::decision_template::{ + DecisionGroupKey, DecisionTemplate, MayChoiceOption, PinnedDecision, ReplayMode, TargetPin, + }; + DecisionTemplate { + owner, + decisions: schema + .points + .iter() + .map(|p| match &p.kind { + DecisionPointKind::MayChoice => PinnedDecision::MayChoice { + slot: p.slot.clone(), + take: MayChoiceOption::Take, + }, + // CR 603.3d + CR 608.2b: F4's only target point is Torch's "target opponent", + // chosen when the trigger goes on the stack and re-checked for legality at + // each resolution. P1 is the constant seat `f4_drive_one_beat` aims at and is + // living on this board, so the pin stays legal for every driven cycle. + DecisionPointKind::Targets { .. } => PinnedDecision::Targets { + slot: p.slot.clone(), + targets: vec![TargetPin::Player(P1)], + }, + other => panic!("unexpected point kind {other:?}"), + }) + .collect(), + replay: ReplayMode::Scheduled { + count: IterationCount::Fixed(count), + }, + key: DecisionGroupKey::from_sources( + &schema + .points + .iter() + .map(|p| p.slot.source.clone()) + .collect::>(), + DecisionKind::LoopChoice, + ), + } +} + /// Restore the `Priority` window the reconcile bridge consumed when it raised the offer, so /// the mint can be re-run on the offer beat's OWN board. Every caller proves the /// reconstruction faithful by requiring the same outcome the production path produced. @@ -519,9 +575,6 @@ fn r1b_the_published_point_set_is_exactly_what_the_retained_window_announces() { /// * Reed's "may" is asserted UNPUBLISHED on the same offer, naming the cause. #[test] fn r2_an_accepted_declaration_commits_zero_cycles_because_reeds_may_is_unannounced() { - use engine::analysis::decision_template::{ - DecisionGroupKey, DecisionTemplate, MayChoiceOption, PinnedDecision, ReplayMode, - }; use engine::analysis::loop_check::ShortcutResponse; let mut committed_per_n = vec![]; @@ -540,34 +593,7 @@ fn r2_an_accepted_declaration_commits_zero_cycles_because_reeds_may_is_unannounc points, so no legal declaration can pin it" ); - let decisions: Vec = schema - .points - .iter() - .map(|p| match &p.kind { - DecisionPointKind::MayChoice => PinnedDecision::MayChoice { - slot: p.slot.clone(), - take: MayChoiceOption::Take, - }, - DecisionPointKind::Targets { .. } => PinnedDecision::Targets { - slot: p.slot.clone(), - targets: vec![engine::analysis::decision_template::TargetPin::Player(P1)], - }, - other => panic!("unexpected point kind {other:?}"), - }) - .collect(); - let sources: Vec = schema - .points - .iter() - .map(|p| p.slot.source.clone()) - .collect(); - let template = DecisionTemplate { - owner: proposer, - decisions, - replay: ReplayMode::Scheduled { - count: IterationCount::Fixed(n), - }, - key: DecisionGroupKey::from_sources(&sources, DecisionKind::LoopChoice), - }; + let template = f4_pin_template(&schema, proposer, n); let life_before: Vec = state.players.iter().map(|p| p.life as i64).collect(); let libs_before: Vec = state.players.iter().map(|p| p.library.len()).collect(); @@ -1091,3 +1117,287 @@ fn optional_entries(state: &GameState) -> usize { }) .count() } + +// ───────────────────────────────────────────────────────────────────────────────────────── +// U6 — the AI's candidate set at the real F4 offer, and what the engine does with it +// +// Reachability of the seam under test: `phase_ai::search::choose_action` dispatches +// `WaitingFor::LoopShortcut { .. } => engine::ai_support::legal_actions(state)` +// (`crates/phase-ai/src/search.rs`), and `legal_actions` funnels into the +// `WaitingFor::LoopShortcut` arm of `engine::ai_support::candidates`. These rows drive the +// REAL dump to the REAL offer and measure that arm's output there, plus what +// `handle_declare_shortcut` does with each member of it. +// +// ⚠ MEASURED SCOPE. §5 U6 as planned expects a declare candidate "whose template pins all +// three F4 slots (or declines)". F4 publishes ONE point, not three (see `r1b`), and the +// measured answer to the underlying question is the second branch: the AI DECLINES, because +// the only declaration it can emit is one the engine refuses outright. These rows pin that, +// name the two independent reasons, and pin the accepted shape the generator never emits — +// they do not assert the planned prediction. +// ───────────────────────────────────────────────────────────────────────────────────────── + +/// §5 U6 (i) — MEASURED: at the real F4 bounded offer the engine's AI candidate generator +/// emits exactly two actions, and NEITHER is a declaration the engine will accept. +/// +/// The generator's `Fixed(max_iterations)` candidate exists precisely for bounded offers, but +/// it is gated on `schema.points.is_empty()` — it carries `template: None`, and a published pin +/// set fail-closes on that. F4 publishes one point, so the gate excludes it and the sole +/// declare candidate is the `UntilLethal` one, which +/// [`u6_the_ais_only_declare_candidate_is_refused_while_the_accepted_shape_is_one_it_never_emits`] +/// measures the engine refusing. +/// +/// # Reach-guards (each excludes a way this could pass degenerately) +/// +/// * the offer is BOUNDED (`is_bounded()`, bound narrowed below the ceiling) — on an unbounded +/// offer the `Fixed` candidate would be absent for a second, unrelated reason and the row +/// would not be measuring the `points` gate; +/// * `schema.points` is NON-empty — that is the conjunct under test; +/// * `predicted_winner` is `None`, which is the fact that routes +/// `phase_ai::policies::loop_shortcut::LoopShortcutPolicy` to its +/// `(None, UntilLethal) => reject` arm (covered there by +/// `declare_until_lethal_with_no_predicted_winner_is_rejected`). This row supplies the +/// REACHABILITY that policy row cannot: a real board that carries exactly that pair. +/// +/// REVERT-PROBE: drop the `schema.points.is_empty() &&` conjunct from the `LoopShortcut` arm of +/// `ai_support/candidates.rs` ⇒ a third candidate (`Fixed(35)`, `template: None`) appears ⇒ +/// this row FLIPS on the exact-equality assertion. +#[test] +fn u6_the_ai_candidate_set_at_the_f4_offer_is_untillethal_and_decline_only() { + let mut state = load_f4(); + drive_f4_to_offer(&mut state, 400).expect("the bounded offer fires (see R1)"); + let (proposer, _certificate, schema) = offer_parts(&state); + let WaitingFor::LoopShortcut { + predicted_winner, .. + } = &state.waiting_for + else { + unreachable!("offer_parts would have panicked") + }; + + assert!( + schema.is_bounded() && schema.max_iterations < MAX_SHORTCUT_CYCLES_MIRROR, + "reach-guard: the generator's `Fixed` candidate is gated on `is_bounded()` too, so an \ + unbounded offer would exclude it for the wrong reason. bounded={} max_it={}", + schema.is_bounded(), + schema.max_iterations + ); + assert!( + !schema.points.is_empty(), + "reach-guard: a NON-empty published pin set is the conjunct this row is about" + ); + assert_eq!( + *predicted_winner, None, + "reach-guard + REACHABILITY for `phase_ai::policies::loop_shortcut`: the F4 offer \ + latches NO predicted winner, which is what routes its `(None, UntilLethal)` reject arm" + ); + + // ── the seam: `phase-ai/src/search.rs` `WaitingFor::LoopShortcut { .. } =>` calls this ── + let actions = engine::ai_support::legal_actions(&state); + assert_eq!( + actions, + vec![ + GameAction::DeclareShortcut { + count: IterationCount::UntilLethal, + template: None, + }, + GameAction::DeclineShortcut, + ], + "MEASURED: exactly two candidates. No `Fixed` declaration (gated on \ + `schema.points.is_empty()`, and this schema publishes {} point(s)) and no declaration \ + carrying a template at all — so the AI cannot pin the point the offer DID publish", + schema.points.len() + ); + + // Stated separately from the equality above so a future generator change that adds an + // unrelated candidate reports the interesting fact rather than a diff of two long vectors. + assert!( + !actions.iter().any(|a| matches!( + a, + GameAction::DeclareShortcut { + count: IterationCount::Fixed(_), + .. + } + )), + "no `Fixed` candidate is generated against a points-carrying offer" + ); + assert!( + !actions.iter().any(|a| matches!( + a, + GameAction::DeclareShortcut { + template: Some(_), + .. + } + )), + "the generator never builds a pin template — that is the capability §5 U6 asks about" + ); + assert_eq!( + proposer, P0, + "every candidate is the proposer's own action (`ActionMetadata.actor`)" + ); +} + +/// §5 U6 (ii) — the branch that fires, and the MEASURED reason it fires. +/// +/// Every action the AI can take at this offer hands priority straight back; the accepted shape +/// is one the generator never emits. Four declarations are driven through `apply()` on the SAME +/// real offer board, differing one axis at a time: +/// +/// | declaration | measured | +/// |---|---| +/// | `UntilLethal` + `None` — **the AI's own candidate** | REFUSED ⇒ `Priority` | +/// | `UntilLethal` + a conformant template | REFUSED ⇒ `Priority` (so the refusal is keyed on the COUNT, not on the pins) | +/// | `Fixed(max)` + `None` | REFUSED ⇒ `Priority` (`template: None` against a non-empty schema fail-closes when `last_loop_action_sequence` is empty — measured empty here) | +/// | `Fixed(max)` + a conformant template | **ACCEPTED** ⇒ the CR 732.2b APNAP window opens | +/// +/// The last row is the ANTI-VACUITY control: without it, "everything reaches `Priority`" would +/// be satisfied by a board that refuses every declaration for some unrelated reason. With it, +/// the three refusals are proved to be refusals of *those* declarations. +/// +/// ⚠ This row deliberately does NOT assert that the accepted declaration accomplishes +/// anything — measured, it commits zero cycles ([`r2_an_accepted_declaration_commits_zero_cycles_because_reeds_may_is_unannounced`]). +/// Closing the generator gap would therefore ride the grant mechanism, which is why U6 reports +/// the gap rather than building the candidate. +/// +/// REVERT-PROBES, both RUN, and the measured result CORRECTS the obvious prediction — the AI's +/// own candidate is refused by TWO INDEPENDENT guards, so disabling either alone leaves it +/// refused: +/// +/// * disable `IterationCount::UntilLethal if offer.schema.is_bounded()` in +/// `handle_declare_shortcut` ⇒ the *`UntilLethal` + conformant template* arm flips +/// (`Priority` → `RespondToShortcut`), while the AI's own `template: None` candidate stays +/// refused by the `None if last_loop_action_sequence.is_empty()` arm; +/// * disable BOTH ⇒ the AI-candidate loop itself flips — `UntilLethal` + `None` builds a +/// proposal and opens APNAP for `PlayerId(1)`. +/// +/// The row asserts both arms for exactly that reason: a single-guard probe would report the +/// AI's candidate as still-refused and hide the change. +#[test] +fn u6_the_ais_only_declare_candidate_is_refused_while_the_accepted_shape_is_one_it_never_emits() { + let mut state = load_f4(); + drive_f4_to_offer(&mut state, 400).expect("the bounded offer fires (see R1)"); + let (proposer, _certificate, schema) = offer_parts(&state); + let schema = schema.clone(); + let max = schema.max_iterations; + + assert!( + state.last_loop_action_sequence.is_empty(), + "the measured precondition for the `Fixed` + `None` arm below: with a NON-empty \ + sequence a template-free declaration is legitimately re-derivable and that arm would \ + be measuring something else. len={}", + state.last_loop_action_sequence.len() + ); + + // Every AI candidate, driven through the public boundary. + for action in engine::ai_support::legal_actions(&state) { + let mut probe = state.clone(); + apply(&mut probe, proposer, action.clone()).expect("dispatched — refusal is a HANDBACK"); + assert!( + matches!(probe.waiting_for, WaitingFor::Priority { .. }), + "CR 800.4a: the AI candidate {action:?} hands priority back. A \ + `RespondToShortcut` here would mean the AI CAN open the CR 732.2b window, which \ + is the capability this row measures absent. got {:?}", + probe.waiting_for + ); + } + + let outcome = |count: IterationCount, template: Option<_>| { + let mut probe = state.clone(); + apply( + &mut probe, + proposer, + GameAction::DeclareShortcut { count, template }, + ) + .expect("dispatched — refusal is a HANDBACK"); + probe.waiting_for.variant_name() + }; + + assert_eq!( + outcome( + IterationCount::UntilLethal, + Some(f4_pin_template(&schema, proposer, 1)) + ), + "Priority", + "CR 732.2a: the refusal of the AI's candidate is keyed on the COUNT — `UntilLethal` \ + against a narrowed bound — not on its missing pins. Carrying the very template the \ + positive control below has accepted changes nothing" + ); + assert_eq!( + outcome(IterationCount::Fixed(max), None), + "Priority", + "and 'just emit `Fixed`' is not a template-free remedy: a `template: None` declaration \ + against a non-empty schema fail-closes when `last_loop_action_sequence` is empty" + ); + // ── ANTI-VACUITY CONTROL: this board DOES accept a declaration ── + assert_eq!( + outcome( + IterationCount::Fixed(max), + Some(f4_pin_template(&schema, proposer, max)) + ), + "RespondToShortcut", + "the accepted shape is `Fixed(n)` + a template pinning every published point, owner == \ + proposer. Without this arm the three refusals above would be vacuous" + ); +} + +/// §5 U6 (iii) — the declare-time `template.owner` firewall, exercised on the REAL F4 offer. +/// +/// `loop_shortcut.rs`'s `r28_a_declared_template_owning_another_seat_is_refused_at_declare` +/// already covers this seam on a STAGED offer; this is the real-dump arm — a 4-player board +/// whose schema, pin slots and proposer all come from a captured game rather than from a +/// scenario built to reach the guard. The matched pair differs in exactly one field. +/// +/// Reach-guards: the published pin set is non-empty, so `predictability_gate` and +/// `validate_pins` really run and the accepting arm proves they PASS (a refusal on both arms +/// would otherwise be reported as a firewall hit); and the hostile owner names a LIVING seat +/// that is not the proposer, which is the only shape the guard can distinguish. +/// +/// REVERT-PROBE (shared with `r28_a`, and recorded as shared): delete +/// `if template.as_ref().is_some_and(|t| t.owner != offer.proposer)` from +/// `handle_declare_shortcut` ⇒ the hostile arm opens APNAP ⇒ this row FLIPS. +#[test] +fn u6_the_declare_owner_firewall_holds_on_the_real_f4_offer() { + let mut state = load_f4(); + drive_f4_to_offer(&mut state, 400).expect("the bounded offer fires (see R1)"); + let (proposer, _certificate, schema) = offer_parts(&state); + let schema = schema.clone(); + + assert!( + !schema.points.is_empty(), + "reach-guard: a non-empty schema means `predictability_gate` / `validate_pins` really \ + run, so the accepting arm below proves the pair is keyed to `owner`" + ); + let hostile = state + .players + .iter() + .find(|p| p.id != proposer && !p.is_eliminated) + .map(|p| p.id) + .expect("reach-guard: a living seat other than the proposer must exist on a 4p board"); + + let mut outcomes = vec![]; + for owner in [proposer, hostile] { + let template = f4_pin_template(&schema, owner, 1); + assert_eq!( + template.owner, owner, + "the two arms differ in exactly one field" + ); + let mut probe = state.clone(); + let result = apply( + &mut probe, + proposer, + GameAction::DeclareShortcut { + count: IterationCount::Fixed(1), + template: Some(template), + }, + ) + .expect("dispatched either way — refusal is a HANDBACK"); + outcomes.push((probe.waiting_for.variant_name(), result.events.len())); + } + + assert_eq!( + outcomes, + vec![("RespondToShortcut", 0), ("Priority", 0)], + "CR 732.2a + CR 603.5: the declaration owned by the engine-issued proposer opens the \ + APNAP window; the byte-identical declaration owned by {hostile:?} is refused into the \ + CR 800.4a manual handback. `handle_declare_shortcut` pushes no events on either path, \ + so the event counts are exact rather than wildcards" + ); +} From 652d8c4cbddae8f4ef272c4efb69f1c6eacf605d Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 06:30:29 -0500 Subject: [PATCH 25/62] =?UTF-8?q?docs(engine):=20review-impl=20LOW=20fixes?= =?UTF-8?q?=20=E2=80=94=20board-not-prompt=20contract,=20real=20Braids=20t?= =?UTF-8?q?ext,=20census=20pin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three LOW findings from the independent full-diff review, applied without any logic change: - The three-field "pure over (stack, objects, proposer)" wording at the mint's three sites is replaced with the board-not-prompt contract the U2 doc already states (the mint reaches eleven GameState fields through optional_prompt_player; what callers rely on is PROMPT-independence). The CR 603.3c relief justification is restated on the stronger premise: the pending_trigger_entry cursor is prompt-coupled by every production writer. - The Braids, Conjurer Adept quotes at three sites now carry the card's real Oracle text (verified against Scryfall twice, executor and reviewer independently) with the fixture's Effect::PutCounter named as a synthetic stand-in for the class, sound because the branch is effect-agnostic. - .combofb-5d-cr-gate.md gains a committed-range reconciliation: 49 distinct CR numbers on added lines, 0 unresolved, +7 previously untabled, 2 stale rows superseded; two independent instruments agree and a fake-number positive control proves discrimination. One knock-on adjudicated per the census test's own protocol: the +7 net doc lines above engine.rs:10493 moved the CR 603.5 producer to :10500; the pinned string is re-adjudicated with the cause named (producer byte-identical; the total-37 and 5/7/25 partition asserts fired green in the same red run, proving the set never moved). Near-miss recorded in the module doc: an adjudication doc must never quote the census needle verbatim — it would self-count. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/analysis/resource.rs | 12 ++++--- crates/engine/src/game/engine.rs | 46 ++++++++++++++++++++++---- 2 files changed, 46 insertions(+), 12 deletions(-) diff --git a/crates/engine/src/analysis/resource.rs b/crates/engine/src/analysis/resource.rs index 220f227877..e08a9d2e24 100644 --- a/crates/engine/src/analysis/resource.rs +++ b/crates/engine/src/analysis/resource.rs @@ -1812,8 +1812,10 @@ fn window_scope_from_cover_frames<'a>( /// itself now refuses to publish on (`multi_target` / `distribution` / /// `target_constraints`). The fourth, `pending_trigger_entry` (CR 603.3c mid-construction), /// is a property of THIS state rather than of the offer's schema, so it is enforced HERE — -/// the mint is documented pure over `(stack, objects, proposer)` and must not read a -/// prompt-coupled field. That makes this predicate strictly NARROWER than the mint's, which +/// the mint is documented a function of the BOARD, never of the PROMPT (it reads many +/// `GameState` fields; what it must never read is a prompt-coupled one), and +/// `pending_trigger_entry` is set exactly while a `TriggerTargetSelection` prompt is up. +/// That makes this predicate strictly NARROWER than the mint's, which /// is the safe direction; the forbidden direction is coarser. /// /// Fail-closed in every branch: no published pins, a non-qualifying entry, a missing source @@ -14458,9 +14460,9 @@ mod tests { u2_scope(&slots) ), "(a) CR 603.3c: a mid-construction entry's announcement is not yet complete, \ - so no published slot can specify it — and this fact is a property of the \ - BOARD, which is why the mint (pure over `(stack, objects, proposer)`) cannot \ - carry it and the relief must" + so no published slot can specify it — and `pending_trigger_entry` is set \ + exactly while a prompt is up, which is why the mint (a function of the \ + BOARD, never of the PROMPT) cannot carry it and the relief must" ); } diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index 30486c67fc..0eea008035 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -1867,7 +1867,9 @@ pub(crate) fn entry_publishes_pin_slots( // // (a) RECIPIENT. `optional_prompt_player` is THIS gate's own recipient authority — // five of its branches route to a NON-controller and the last is EFFECT-AGNOSTIC - // (CR 503.1a + CR 608.2d, the Braids / Conjurer Adept `scoped_player` class), so + // (CR 503.1a + CR 608.2d, the `scoped_player` class whose printed member is Braids, + // Conjurer Adept — "At the beginning of each player's upkeep, that player may put an + // artifact, creature, or land card from their hand onto the battlefield."), so // asking the same function the gate asks keeps THIS pair from drifting. Without // it a proposer's pin can be spent as another seat's CR 603.5 choice. // (b) SECOND AUTHORITY. A stored "don't ask again" auto-choice ALREADY ANSWERS this @@ -1960,7 +1962,12 @@ pub(crate) fn entry_publishes_pin_slots( /// authority for that slot set — the offer's cover call, its schema, the drive's cover call /// and the per-cycle `predictability_gate` all read the same list. /// -/// PURE function of `(state.stack, state.objects, proposer)`. It deliberately does **not** +/// A function of the BOARD, never of the PROMPT. NOT a purity claim over a three-field +/// `(state.stack, state.objects, proposer)` surface — that would be false: the CR 603.5 +/// recipient conjunct in the body resolves a player through `optional_prompt_player` → +/// `resolve_effect_player_ref`, which reaches ELEVEN distinct `GameState` fields (enumerated +/// at that conjunct). What actually holds, and what the callers rely on, is the narrower +/// PROMPT-independence: it deliberately does **not** /// read `state.waiting_for`, and it cannot: both production call sites run at /// `WaitingFor::Priority` (`interactive_loop_bridge`'s destructure, and the drive's /// `Priority{active}` settle arm), where no prompt and no materialized `legal_targets` @@ -13740,9 +13747,17 @@ mod stage2_injector_tests { /// /// `target_choice_timing: Resolution` is what makes it shape (B), and it is the class's /// real rules shape rather than a test convenience: CR 601.2c announces only DECLARED - /// targets, so a per-player-upkeep "that player may put a +1/+1 counter on a creature - /// they control" (Braids / Conjurer Adept — CR 503.1a + CR 608.2d) chooses its subject - /// AT RESOLUTION and surfaces zero announcement slots. Measured on `u2_board`: + /// targets, so Braids, Conjurer Adept — "At the beginning of each player's upkeep, that + /// player may put an artifact, creature, or land card from their hand onto the + /// battlefield." (CR 503.1a + CR 608.2d; text verified against Scryfall) — chooses its + /// subject AT RESOLUTION and surfaces zero announcement slots. + /// + /// The `Effect::PutCounter` fixtures below are a SYNTHETIC STAND-IN, never Braids' + /// printed effect: they exercise the same CLASS (per-player-upkeep optional, + /// resolution-time subject, zero announcement slots) on an effect this mint's + /// allow-list admits. The recipient branch they ride is EFFECT-AGNOSTIC (see + /// `a_may_slot_is_minted_only_for_the_seat_the_cr_603_5_gate_will_ask`), which is what + /// makes the substitution sound rather than a convenience. Measured on `u2_board`: /// `build_target_slots` returns `Ok(0)` for every fixture below (each row asserts the /// consequence through its own matched positive), so each really reaches the shape-(B) /// arm rather than falling out at an upstream conjunct. @@ -13799,7 +13814,10 @@ mod stage2_injector_tests { /// `entry.controller == proposer` bounds who OWNS the entry; it does not bound who the /// resolver ASKS. `optional_prompt_player`'s last branch is EFFECT-AGNOSTIC — it fires on /// `ability.scoped_player` plus a `ScopedPlayer`-scoped `target_filter()` (CR 503.1a + - /// CR 608.2d, the Braids / Conjurer Adept class) — so an allow-listed `PutCounter` reaches + /// CR 608.2d, the Braids, Conjurer Adept class — whose printed effect puts an artifact, + /// creature, or land card from hand onto the battlefield, NOT a counter; `PutCounter` + /// here is a synthetic stand-in for the class, which that branch admits precisely + /// BECAUSE it is effect-agnostic) — so an allow-listed `PutCounter` reaches /// it. Without the conjunct, P0's pin would be spendable as P1's CR 603.5 choice. /// /// MATCHED POSITIVE, on the same instrument and differing in exactly `scoped_player`: it @@ -13890,6 +13908,18 @@ mod stage2_injector_tests { /// doc already names as where soundness over the other four producers is discharged; the /// `+2` are U4's own `#[cfg(test)]` fixtures. A new READER is the benign case — adjudicate /// it, do not relax the assert. + /// + /// ⚠ **RE-ADJUDICATED IN THE 5d LOW-FIX, NOT RELAXED.** One line NUMBER moved again, + /// `game/engine.rs:10493 ⇒ :10500`, on the same terms as U4's shift above. Cause: the + /// LOW-fix added a net **+7 DOC lines** above that producer (the mint's corrected + /// board-not-prompt contract, and the Braids, Conjurer Adept Oracle-text correction) — + /// comments only, not one executable line. The producer itself is BYTE-IDENTICAL (the + /// `return Ok(Some(WaitingFor::OptionalEffectChoice` head, diffed against `HEAD`), the + /// total stays **37** and the partition stays **5/7/25**, and the other four entries are + /// unchanged. The two companion asserts above run FIRST and both fired GREEN on the run + /// that caught this — which is the evidence that the SET did not move and only this + /// entry's coordinate did. A line-number-only shift is the benign case; a changed + /// producer set is not, and stays a counted event. #[test] fn the_cr_603_5_prompt_census_is_pinned_so_a_sixth_producer_is_a_counted_event() { /// Every `.rs` under the crate's `src`, and the `#[cfg(test)]`-attributed @@ -13993,7 +14023,9 @@ mod stage2_injector_tests { "game/effects/mod.rs:5973".to_string(), "game/effects/mod.rs:8927".to_string(), "game/effects/scoped_library_search.rs:452".to_string(), - "game/engine.rs:10493".to_string(), + // 5d LOW-fix: `:10493 ⇒ :10500`, a doc-only line shift (+7 comment lines + // above); producer byte-identical, total 37 and partition 5/7/25 untouched. + "game/engine.rs:10500".to_string(), ], "the five production producers, NAMED: the CR 603.5 gate in `resolve_chain_body` \ plus the two repeated-optional-payment drivers, the per-player acceptance cursor \ From c3debe415d78d8d3e3e188243478660ce6743758 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 08:21:40 -0500 Subject: [PATCH 26/62] test(engine): derive CR 603.7 firing carriers for the 4p dump corpus MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Upstream #6842 (8121fd1c6) made a `TriggerFiring` carrier MANDATORY on every persisted triggered record and fails CLOSED without one. The six 4p dump fixtures this branch drives were captured before that commit, so on the rebased base they no longer decode at all: 41 of the 44 red rows were production-decoder rejections naming the three carriers (`active legacy pending trigger has no firing discriminator`, `triggered stack entry has no firing carrier`, `resolving triggered entry has no firing carrier`). The carrier cannot be RECOVERED, only DERIVED. The read-only pristine root (`combofb-dumps-pristine/`, captured 2026-07-22/25) predates #6842 too and records zero firing carriers, so re-deriving from pristine cannot mint a value that was never captured. `TriggerFiring::UnknownLegacy` is not an escape hatch, and this was measured rather than assumed: `validate_firing` (7 call sites, types/game_state.rs :7688/:7691/:7700/:7721/:7732/:7749/:7779) returns `Err("... has no canonical trigger firing discriminator")` for it. It is the field-absent marker (`skip_serializing_if`) and the redaction default, never a legal persisted value. THE DISCRIMINANT (CR 603.1 ordinary vs CR 603.7a delayed), applied per record: Ordinary <= the fired trigger's definition is present on its SOURCE OBJECT's own `trigger_definitions`/`base_trigger_definitions`, matched by exact `description`. A printed or granted triggered ability of a permanent is an ordinary triggered ability. Delayed <= the trigger has an install receipt in `delayed_triggers`. Anything else ABORTS by name. There is deliberately no fallback stamp: a wrong carrier silently re-classifies a CR 603.7 firing identity, which is precisely the inference upstream refuses to make. Measured, per fixture — carriers stamped, and `delayed_triggers` length: | fixture | carriers | delayed_triggers | sha256 (stamped) | |---|---|---|---| | dellian_emblem_conqueror_4p | 154 | 0 | 3f8b06eb7986de10 | | dina_conqueror_4p | 7 | 0 | 773e902daccf7199 | | fantastic_four_bounded_loop_4p | 3 | 0 | 89ff377b53b7bd55 | | tenacity_exquisite_blood_4p | 6 | 0 | a296ab6e37129ca3 | | witherbloom_sprout_lumaret_4p | 1 | 0 | 71efd26867e9fc57 | | witherbloom_sprout_lumaret_simple_4p | 1 | 0 | 607fbe632e759692 | 172 carriers total, ALL `Ordinary`, ZERO undetermined. Every fixture records `delayed_triggers: []` and no install journal, so `Delayed(Some(prov))` could not have validated regardless — `validate_firing` demands a registered install root. Every one of the 172 was classified from its own record's source object, never defaulted; the per-record witness table (carrier, source id, card name) is in the PR body. Five resolving entries elsewhere in the corpus are NOT migration targets and are deliberately left unstamped: `combo_infinite_pile_4p_untapped_precast`, `kilo_freed_relic_pentad_4p`, `sprout_witherbloom_realistic_lands_4p`, `basalt_power_artifact_infinite_colorless`, `combo_infinite_pile_4p_offer`. Each `kind.type` is `Spell` or `ActivatedAbility`, not `TriggeredAbility`, and the validator's `(Some(_), None) => {}` arm accepts a non-triggered resolving entry with no carrier. An earlier classifier of mine flagged these as UNDETERMINED; reading each entry's `kind.type` showed the flag was wrong. SECOND FIELD CLASS — the CR 603.7 delayed-trigger ALLOCATORS. Restoring the dumps exposed a further #6842 change that the decode failures had been masking: `next_delayed_trigger_token` carries `#[serde(default)]`, so a pre-#6842 dump that omits it restores as 0 through a bare `GameState` decode, while the production `PersistedGameState` path runs a load-time repair (`next = max(existing // 1, max_used_token + 1)`) and restores 1. The two decoders therefore disagree on a legacy dump, and 0 is invalid on its face: `validate_trigger_firing_coherence` rejects `next_delayed_trigger_token <= max_token`, which is 0 when there are no install roots. This surfaced as the R8 state-neutrality arm of `migrated_dump_decodes_through_both_decoders_and_unmigrated_through_neither` reporting `differing paths: ["state.next_delayed_trigger_token"]`. That arm is NOT relaxed. The fixtures are stamped with the repaired value instead, which makes them look like a modern capture, keeps both decoders in agreement, and survives the eventual deletion of the load-time shim. Measured, all six fixtures: field absent, `delayed_triggers: 0`, and ZERO `DelayedTriggerInstall` commands across 158/30/2/516/50/5094 journal entries. So both used-token sets are empty and the formula collapses to `max(1, 1) = 1`. The scan is not vacuous: injecting one synthetic install command into a fixture makes the same selector report 1 instead of 0. The GENERAL derivation of the used-token set is deliberately NOT reimplemented in jq — it walks `resolved_rules_journal` install commands and `delayed_triggers` provenance with reuse and nonzero checks, and re-deriving it here would repeat exactly the mistake this script's sibling refuses to make for `EffectKind`. Only the collapsed no-install-roots case is stamped; anything else ABORTS BY NAME, verified by probe (one injected install command => "UNDETERMINED delayed-trigger allocators: 1 install command(s) ...", nothing written, exit 1). MECHANISM. `scripts/lib/trigger-firing.jq` holds the SINGLE definition of the derivation; both the pristine-regeneration path (`migrate-dump-fixture.sh`) and the in-place path (`stamp-fixture-firing.sh`) load that one file, so neither can certify its own copy of the recipe. WHY IN PLACE RATHER THAN A PRISTINE REGENERATION for these six. Regeneration is the stronger provenance and is preferred where it applies, but it does not apply here: measured, `dina_conqueror_4p` and `witherbloom_sprout_lumaret_simple_4p` differ from their pristine regeneration in exactly one object each (Priest of Forgotten Gods' `abilities`/`base_abilities` AST), because the committed fixture carries a LATER parser state than the capture. Regenerating them would silently REVERT that. Stamping in place is additive and cannot revert anything. ALL THREE control arms are enforced, and the stamper refuses to write if any fails: arm 1 NO_COLLATERAL the stamped artifact minus the five stamped keys is BYTE-IDENTICAL to what was committed, so nothing but the carriers moved. arm 2 CARRIERS_ADDED got == need && got > 0, keyed on CARRIER COUNT rather than on byte difference. An earlier revision of this arm keyed on bytes and reported a false pass for zero-carrier fixtures, where gzip/jq re-serialization alone changes bytes without stamping anything. Fixtures needing zero carriers are now SKIPped outright. arm 3 ALLOCATORS_CANONICAL both allocators exist and are >= 1 — i.e. above the value the engine's own coherence validator rejects. Also fixes a pre-existing defect in `migrate-dump-fixture.sh` that the corpus sweep exposed: the `target_slots` stage used an unguarded `|=`, which aborts with "Cannot iterate over null" on a dump paused at a beat with no target prompt. The script was therefore only ever usable on 2 of the 6 dumps. The stage is now guarded, so ONE recipe covers the whole corpus. The `gameState`-envelope guard in the jq library is the same class of fix, caught by the control before any write: without it, `.gameState |= ...` would have CREATED a `gameState` key on the four `turn_number`-enveloped dumps, i.e. corrupted them. Assisted-by: ClaudeCode:claude-opus-5 --- .../dellian_emblem_conqueror_4p.json.gz | Bin 795015 -> 795535 bytes .../tests/fixtures/dina_conqueror_4p.json.gz | Bin 786012 -> 807669 bytes .../fantastic_four_bounded_loop_4p.json.gz | Bin 749083 -> 749134 bytes .../tenacity_exquisite_blood_4p.json.gz | Bin 715325 -> 715386 bytes .../witherbloom_sprout_lumaret_4p.json.gz | Bin 762099 -> 762133 bytes ...therbloom_sprout_lumaret_simple_4p.json.gz | Bin 857134 -> 877220 bytes scripts/lib/trigger-firing.jq | 114 +++++++++++++++ scripts/migrate-dump-fixture.sh | 21 ++- scripts/stamp-fixture-firing.sh | 130 ++++++++++++++++++ 9 files changed, 263 insertions(+), 2 deletions(-) create mode 100644 scripts/lib/trigger-firing.jq create mode 100755 scripts/stamp-fixture-firing.sh diff --git a/crates/engine/tests/fixtures/dellian_emblem_conqueror_4p.json.gz b/crates/engine/tests/fixtures/dellian_emblem_conqueror_4p.json.gz index 8e65bac052a3b6d0d46ebb059aeccd8c90636333..01c525e0c0afe2870faa80c11247fd14616ec4de 100644 GIT binary patch delta 6238 zcmbW&cTm$^mj`g^J)!q5E%YYE&?O)|5Tpx)B1J%IKp@ngNa#&^3jwJD3Mf^2N9jlt zqy>~FO79^1?C$J4@4h>;f4nny&i%}tduGmj|2fgUlF5UTFVJ{sd^7=?5KV+8Mw6gP z(PU_HG(|lnAvsXc?&jvnracS5GO_}ZV{!7Y7NdQK-upJu)%?nz&Upu6;-93Qqkqi< zgAUDNR>E4?rm5(uW$@_Yi%IgRiDD8r=HwBqFDHtfvkta$#Dk;Ze6#nzQ+`i|0o3&@oynq0RPoAFHQT(@VQled`7ZkV0v z%y5-mzW~|-jK((8Fxp20HAkt*f3XiL!>9W1PQKw6N8~L`VOFMo$7XGZBI@^fOBB{62W24{lZy=(q47Atc;*Z;bcEid@;jTGu4{j~9-Kq~3|k9H zs5hKc_6Hp+P-Ueu*~loEzg0f=EKx6J~V=q{o^K?Sod9I_s%8g``1 z!SKeTgRb_3s0VOtwTpAtmOC}E0j$8;s4O74jP%B`#5NdJ#WLj(DWaR~tJcHH$U-;< zo4le2*GqM!fCP#aZpE{eKqRM8_ynVO#!!19h9haX@k7Pk29e{W%}Irwa6O8@Tpuz4 zAq0k4^Rw~XpN0{L!&xt?&>3|sHOvh>+jX(4-|+piKXkQ#&W3SyR!PYw0|A4$%(^q} zb|#$|pO1dVWF_BebN1lV_#Svltqs9O&bYkKMCF?n@A00cTrPkMnDGgMWxTN(Z?I*@u_(<=X@x(jTe{UkZ<=8lt~6MZEUfzi+AZsnHcRdFZNy* z)WJ%o{pAnZ6jM^a7MsTnABUbP>NFv04l?@Onh_HtMm4Ig7vK}u_@O7cjt4T9CU`an zqduX718*)!7g0%e_mhyOpYDhPyonILUQ@_eW-+Dr=K)z&Z%V=vOwvmQ#@j3v8pas0 z!3$Yde%B#bPCSFvpzL#lh!Zt;n+zR(4knlhy^cWK!Sh$*SYYiV^ORE5D@Z{ag|AXU ziIheEx}rx0RNPmk#Bjg?)kFYS^#@~$qilWHg@b7lyAmCRc0Sb&T_vMS_=8(0%O+DZx|SRNDVwOCdR)m52-xi`_7{oI=O zkvybtNlpk;#PAhU&R-rf(o0amCWgZ-c*v^*kNM|Wi@ploCZ9{@iAGCpX>VtU-rQu_ zIiJ5I&bJv`2bAbkB@O-vtt%q`{J_8Mj9aBL;vx1xtDcf0MA}LwQFo-(zPGJ?tuhak zrAN07#fsDnxg*wkZM1tNyZu-v?{OUwwU5rl79RMeYBx2lfmjyiT&3SxI@!-iA<9kE z6XH5H6by7DX>OvIr|vO%t@?q&S8MTwzt*^#LJcIH0J2P7Tt>S9>x!nsWx?{7OHENY zh15MF(4xEgT!ViQoiaCcrSEucxv%iP!1T7f!k!LcTdeOi(kpe|-H&5^>VTl&WfV)S zQBJsz7bB`-=AmTS_vFV|Xi z|5WY@DAtS9Ts`wJ>*EXG>#``$Is@IWZD#PguvRR3ylWjRARX^wvKN}3Sd8%%UUq2d zIx8HD3ZwBt6We9dUvOVr!O z}|Q*r2HsR*cK+9Z^)3i!r?1qzOZTQ?#9^5g%Ms;l9X7xwx|@O0#-N4fX|i zsh#7xa$nbnbeZEnO2~4OEU&0F;Y!_I`E&+GFxP`al&Z;%@o%F0pGRS?NGrXy49-!l z^vTH%m!FfbDXb59ZUi|_k>ZbU-(&Q*{+j0CVw$1&c*h&bQ^C~yl*L=%>Dw$%;mm;- z5ifNM?KG`JWHPRTdHOExY0HZZ(X`q?0Sc3H*q$wVcwSfgn@LBvw*6rxDoF8=!hAon z?}5U*;r7*wS`2?llLX2z{ZmK0Qd}fE?wrVzs*soK%L17p61Z_V4`Yn6|J2?(*W2+d}wd3-{U zKNZO0`5=Yxz;VHNUvZ5fLvVE(%C)juo#13lVY|@{ZnJYw0RbyjtyTn5&Ge;kPJyZ< z=U{Z4rRT4Y;zx?OtsuOG#LL5R_wD0bx;~n#7RpI(gOp9=AV)UPs~aQbBfRZP>wT zGn)w_P6*#A-8)#ZMiQWWPH3c#`Gfw++27Vxp4xG_f=Y_Hpt5|mdBir3{&4<|oz#{| zbK6TZBO9ZKe9aO0sQxKs5D3YkWr*#~v|Z`FYG+Z?zIevZvCIgyFbf=#^fi^XU8MBh zh|cW4sWM3Mz_ac)^&qN_D*oX}@m}L>ekC;CgQ!eFPVgN){S`nld+`F+#g?2@l_>Gk z+vqYsQB0vhS-u9>j^+RUUhMOnr+Z)^*s&mHrhl*q4_0n(+v{_)aC(%*Rq7z#m?f%u zKdU%ozr4<&;&6j8DJbe_yayQg0p1NM{;-sE zYxv+F8v6mgW=o@vk--hO*lyy}qPK%pwmYTVTQCWt=P^eNgD)~T3H6Vb>)GL36nAs1 zG`!k}f_$awnWy{~1sl~6mSUYFWd>*biPxc4L>;*!)4&%&nG;rinSN7}FM<9}DniDZ zJtBvb*oEc1s^}PEY5HLA5swa<9H&nH@(R;o*GpQBaVdSYSx)^QY1f60i1^T)c)YMoMEKWq}~?`b&z^s zjP+|w1=vW(evH+kerT%pbiNBzV{3KddGt_NkgO(bl^;B57ruRiXaK>R2~KtIP8lgmPGtQHW`0lae8q+gRxBNep6vVubv&FU60CI_ zK>~yq5TnXzu=zH+^{ju?dMw?8!|iIr;B29!=*Asv6c8TdT{0 zlaw!sC~B! zmB2fJkH#Z{IHw&RC95kFpD_Oo@FLznJRTjSGJW(K3qA>Xv-v=|;3jEIGZD37OXKyq z{;H!$ztELVXaSuohx;w3Zo4F~C9?21S1z+C@tv!K$bv$yTvAbDl`F6=ynxD;!xm9Z z)f=vIPpoo3`rmbWmD^;M``@UGi3GFe>vuYg>)*?Ih{D*crUuOFk+L4_FgEk40n_>e zSq~)`8(o=eFTF>IKAY{Nz(hS6y@!TATUIzTrD#?%GbL@)J7!8FJOKMic0E>4>i@sw z26uN7+wL+FYKzvdjz_BAe%d?3jfble1Gp4$czF%!T8O^dhJ)JamCsi0?DBHLT3~vK z>A=vulQ0t^pkwj&hLHNc2YD4)8A8)LTZj0+{>8a9ZSI+@aY%IiFhcOEaz=(iy!bJQ%Qd0h|$A zMQ47#U^ZuSaxGcug<#WOuK6pM|E_-(#nJaw{D#AszRY1dS z%&*rI5rb6x&q$10)>uTQgynnnAFosYjEiW?sQbv{y(56}>*vWd)|UUSrwnrTpVNYL zbbmb9sf_aL=UPtDYUT0uk1;k^S{p?#Q$^SB=xxVA5yPCz)DkBLqyr$`ft4q3Z+?$x zc?jqNUQtjq;A8Aj6$FiZ+?xkO!y7Zo3E2^;^#$wO$Hn)26Rs=IpC} z0yj}g6>cn@BGr3IeSfGn+kQrvhnZimjMfq6vg~p!l!}DyZB!6bG2!n{h%F&Qe)KZ1 z#u;^q*E^H9z}`K+|IC@^JLmKRqUB}33#5#$uRjt^|53q@gI%lJk5ERO&MTc zS`mo8ZNEBZHs0g!wOI+*u;jd|J-QK{R~jmgE~tAkv4RVmOJbAmPiK&jyE3Sde`^X1 zC31Z|D+FFWcA#|&!*jOt({i!0OKR8l`KED}AF;(sXMIGGK+q&p^bOy)O__Fyv1J@o z38Ewo!3dOcr$Ud#bv*P!;5b`R^c`DSZV_Q=fqY^UZaBa?6!B0}A?PQG4$q7FpA*)>+K5odUGH|4yk+ zJN56BmLj%t*}A23@nS4&0-|ateWQL&ea*miaQXXZr+xMJF_x-=LX{TQCRBbMyTp?C z2b2j~4m}yz4b3faNd(BEE65{yc?Z%yOSM9e=sdig3k3KVwr-yY^k9xz^#VTa{vOd_ zb{bY0Rb&2j{^Yb9Q`ngCGHre-C(jv z*IIQ%lNs^KSs_Krw?&5O30D3}mhDN$S@cB=V`CwUPTeS`Fc`=ir$h=Y4th90z5LDD z2(T^w@le52@`cu)wNjn#&J66yG1uPJ{d&Oea3L8(BGrbx@{)VS(VKPNoS49j&bN9c zrJFBhP=@3mYj1T#G2OCfv*VNdJ{wy#1daTHi#|ygyQ0_ndvczak_w$3mnfPIf58}+ zaK$Tn?d-jd0DzPqtGREh`X?%ImgjV3l=-TL=5lZ6lE*rIl6^`b*~uRJt(0==sm1y) z^Dx)CeAVyK(p#K)D$)soOP|3r_`atQRTGM(6&j9dti5|Sh|h;`EOgRAc^c%vo<&FC zBQo|1y;K&@$99YItbI^x2Ty76>Ed!&B4f3*pHLwJ17h!2ssE12-1(SWcc6vtLH5ST z6Sk;s9WRGLwDfGgHM79S4+eRXdZ$;lB)zLTx*OnXC-;I4=z`q~fYhFn^R4UeW4nz2 z!RJy#nW5y56a25K%d+WA(gZDKI-%-u79G1&qS5o%JyLu*E<5*_=NEAYLRg$8DJ+-r zP{?)yIP53g5>I_10aI7M!=CbqpIj$jyUv2rZ{s}O-e`HbOf?%BU1}_l1K3dWmdCEc0m2~_g}f$er=lEa#**I0fb!2hu<}p@gU>P^U7(chF&uTO z&9bQ^--G2W7*%);DeYA-w2>#w1}$JR?SP3$Zo0^B<8tpgvSfn|K<#azBjDE@bsJ~x=Sp71{{` zbH)1y8#W~3vwX;f7WWEiDO)qd{wj)p z!QSNc_>jt~1NTWDaS zs_bmdYCGPlgjy(Gerus_8&VQS1>N53l#W*&@0Qn2_N%Xa*o*uQ+GD=H|GA58H0t0M UJbl0V2mT%XUXG(@nRa*n18le#H2?qr delta 5714 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 z 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 z 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

    j;UhPwS8fMZ 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 z
    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

    #}1l@W@psxCI8sEj4Em0AUp9kch=7d`3a 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

    8|GY4s+^@fY{?Dzix?(>wc(_V!Zg*CL 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

    8`H@thZz`JNfZIJSwal=Y_ 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

    ;TY4otvpef63uOq|)MkCSNkI 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 f7!#&9x1;FjSIL0Y20~;C2z&XYh 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 literal 786012 zcmZ^pQ*b6s+pS~Unb@{%+qR8KGO_K6ZQFM8#I`ee!ijC{dB6X7cU4#2ecA`zYh7y* z#lV34Z^2#kZX^{;qjA2`W;h-fk#$9d)qYiPc6ELIy{h^g&2Tv@`5+;mT(e!h% z>4Ja6Yv`VQj8qr~B`Gm9O??y~uVpJjk9w6KaP{>%e43{4qA}|#=zYsPX=US!K1a!@ zB*lclY-&j8zt6Q4xf7%1#+((eGb+U-S)Uv=b;o5tkhERrH=X9oKMiqwP#&UKu#slFC zL@~}BU=0ikECrVhLTo@x1WiO@E*Kyga0!I1KtjO7;ble;cKbtYoDHHgKsg{e&=h0? zDj#G4Y6@-(z6FW}1qC$%h6OnS5f5q)Zw#*uf)|J;j3|sU0F!}(f*=o#5(pzqIlxr_?t6%i)5xy`xR(Lq<@@BvVE2;Gs&N|J zSEV<-+$(S@pkK4iNijvfY+Q^gZ5a3_Ck$Um(g!cZ@aMWPM{8eL0q&pAuSuD+C`~Bi z)2D&@g5CtNp3_TP?`OAr+fB@l{tNVbQAzam{dH?b2^pS0zq;nw62|=Rxj|!Ckt7M_ zKI4<62(Ha}@+S{0)EMJa!`s{WdowL|pcRK<=Nx;?Sz+&cUQt~XY5Kci7tLLVsg^#z z%5*1>)&S7W**Sj4fQ`@%#DpOkoaUVOm2!Q;cN1Tq)wS!A00ebgRa>B|N66qzB3eubha^b^Bs1)O*2%fm4G? zFaEa&m}r5RW1lqb-lv*EaC4HtiuGC;;znIW1Qd4=QV8M@Fmb>!8%PsM4CgG`JET_gxhe5rXMaPfsmGyw}8`9=tAfK7}8 zZ5r7#719Mkz4da*g&-b-f{FQwdL8u>Js@Tc;GPA-1N=484{(avLp!knF^~C13rqx0 zWE7;jB7u_5fFqBms@sErAq%93CN>$cZ(>Fs7Y5mYAy(7JfgI-qah)#Ki*zlmWkr3f zqZBnVAssKE6xE_Mjf;Bm!#^IXpHl!ZZ5!dh>EpsJjwu^=(%=U&fHl~FU*Le~K@E(9 zX>)BHnu8881Ps4}y?^HHd+5x&=A} z!O90JxX^lOsE3W?zYQbsudhHZ>zYziU|NsqQh+DA1z0iumPhWgE6 zs~x-vV&+l=W1I~}&oE(u2PcOcU5p23LY#&IS&0y~Gp39p3pxmc5&>q)7q||A0@_}Q z1hWdtf=V0?14S>44*|moN&**{N4$TJHX}Ap>G(b}WK;r= z`lbs(clqTs89?>RMMk=V{(#H1l|n_mZ}sgyK!(2VXzb2yklJd=<}wXp`hd&dwcQg< z1cOuXcRBrRFnR8>VK%v7jHCXsUmq%Th2b*=l`EUcU#qM1m?(+YxH%oc+2l;FJ{mz) zzmOxI`%$15RWbH0ee^Mtf+xMBSY!UN+}A#8>=5^f3#C&nk|axZPr2mU>Mc0UTmGd&tK^;Zg)RvoO%So20o`H>NzzTEfgs$WV7Zi+;6 zYPwdCOzF&WLO4YWXOwHo($t?Q%;@Id^TyDfpS%VPlVX0GzP?UcW||A>G{HC~VTvr9 zD{L?Z{7ALKkM%@xuJ%cD(Gp9_~Nf?_+MXH!2vD zY6Q;QE zD3fgr1>(t{hTmAwUfr>FFo=*3w$7kt_jGG^$$QZg*p4>nC$W)9x_>`+@#=}(!f5rL z_~BC(ju|N?y=W!|4{e9a&|lfQm;!YexFdl5`2%S1pkD@G)!s*HV+sMe@?|ob!brE8 zjVM_s9S^DWL_sQ?mH<{-f6uS#V!eGKQKtvd0F39NFK4042Tvov=POj}nDURa+x=9} z{gs0dPcoU-h+n{btD6fU*eT5p@_c9${Mr09DrVVNc2h!ZO6ymJeJW9>S9hD|m;gmJ zlai4r2%rf$%{?jO%=7p!1$p`q(K+dqu6eb$E3i`sPP%+)1 zA^jTGhGw3vBHc)ObET12WQ+m3*v3Q!=h%WVdzxA{s+*vuRm_|~@NE2_*>u;m* zZe>1G`G2GC@b|#5q0;V{PtZRe)?uM`>0j|H6^%AF>2Mwy?!xE->6MaoKE2gkK4+50 zGp?mt((y;t__b;OyBt z;pCII%Lp2VCQFi~mH0p=)vL|k=}hX)TR(&=p~;XT;i`G~^k&p0}y8@^9uttU8c(G#F&B>;-iz7N+c4lAGONL!?-irCJ=hG8=cx`{| zhCe1x4R^To-CI#Txiu1E#Y^y?H7%BU#b5U7?A{msI2OZ)%}#W2iE=ls;qC_Boxv9s z^i(b7XFotbb>&Z%lYaHU4ppqT&G@OcD;Eb)HiKnF8(?d?NTR2I3Ldk352?l37mUOGZcZf|GJ8-Jh_=TO14F09KIJ0)Z+>LeRZwR--%)f%}?dz+G zXXnqtm6&2Y=-5(Mab!_#z5l~ghhcn*CKSN39`A9QLg_k2G8b|VTv1N7TI2%JM5=G zEUrL2^7N#$eaPJvz$Q2R@{~V8pIUw1IM%nB-mUX8>}~=IOTWW{~1Knr#aj^Gnyq+RUDt&!jp3`TWvU&6PB zGkhsqmC)gsl7%rjW5^NMP2BF68HD6t&l!)j@DuWfG!y59jV@@vxptCAXAs;aaGVa_ zgS?|nZ{t>C%N?#LTi8yZqbebb&IH}+pn`S=?y-p?L6O+p9fI{~j_|Q3gl^s6j=BkV zF)(c`2trl@1oz?FfNREu&rF+Pg|gbeJ_(AA?w)@fI@{WWF4c5blJ(T$m3c&uU{cBWi^$aZ=f4zn zQH7&HczHm@PasfgQH9k}g$*F)uT2;$UWIw9^3gy|Xvf79lruP`3j3SYYm(V$RqROH zsAQ20SeOt)<_|PPUO=0&via~=|IE*<-FQy}^$bY^c}VeltG#XX2Am(jlX)6K^si*4 zo45&dHklM=RQbvu?6?d(3Vq9MO!Kg+@~4aVYmQc_O!iT!F6t5O%ry9&=clNhBPY+U zey=bTr?U#sEwyUIx8>f?9EVd^Yw=op$ zKQejY`aGygJgEdGjkl@laz=8IWE=(u2F<2K^w+?M)Q8%*U|ii*C@4trb#jW;>%8wN zi+REEtOX63V9xx+Z@V|-62~Ur;$z!{boXKpbO~>qTP84+ew@z~UmC|ttOeS+`i&Ol z{cD&%b)Fb7EfiPQ@R3Ggw+`eIoU|3H0T5O{SZm>Yqdoiku>6AHuBB?Ji_d4-RX((8 zVMtqt4$~t$yhd9)4$Igy`s-&?tGmNz+`uZM1f&U)MaS;wr5n$6(f|VTp72Q=_OHsU zS`5%G@~PE~&@Pl!T9Y?)!vUE;lqazbikN<=uiBxkm3V>y&~q}Vm{0hFbPizU0qAbG z5cNgmQ%O;OT8t>#8Le2`wM=Ce|G+<)PCn}I zgn^&(xqY0vx4Oqa4hJx;-dE^u02#~eS>vi~A1Q}2gi_HAF_^HBdv8^vxK1*8Tq?p7 zn7CvRRXG;o)nCSA*nWF4{O*4{PPp!S70X)#JBag-yJz;sdnXFMgIZQ|-zoqck>#>> zpp^dzyS0La{mzL(g`w|)Gbj{d=5_P4?v2yi^E=0w+ujQV0_I z-|zs9q7*r{Tc=ue*Ph)mM=}^!B#a5^Z3?%XrBqs0+|ng9;C>!7aQK-_|hb#P;RnLjn(BjeC>Lrgqd)sb_+2o+-%*tSXM?0ogQ2u zXKqvi8qawt{2liWo3LJL7DeqpI=o>x=b$C=1i}$) zl;&-TG4y-G%XWpMNKVaBsA5yGIJT^&xr`U5q1q8-TM@WoA*;SL(53h(uF5A~tk_ot zjKzUB!Xs0GjOw?H(Z6_Du1)8>u)9aQ*Q0;^Jv2D9qhGDl_T_^=XfX8lKmdK-TQ}Er z6Y7a4KjiNVefK^)QrEElmba83^qOM73+&uUpg(f)HyCI{v{TZ+ zU6+za#A~zg!Vm#6!&RQ3j`N?1@)7sdXZM-#T<+@`{HdP^5uA1bZuK_-*(9Df21^j? zl9mtt`oU97f;9^Mxk``)t(AjSxK202vzOg>qDPd#>BOPD8MFSxANrhx=$_p-o9qvr zpr-@bp90b;Ip6>d!?cRq>B^z}t3Q7la+1e*z2viD*-!*g82v+0Of^FU-9n@mD^h>X zoo&*=H?qS~z37Yg;SS#c4CV_8W){bl17DBn5ER5P1PkqX;f9}JlfR;U_^BM${aB|? zzN#RMF?Cjare%MX_&$6nTJ`kI4W#zr=H<1{(b{X6RKw|Mta~44h=$evcRatZk-Dzk z<}sJ9y(^++@&@))u+7Erw)RvM-xcM0EvOPWP#0Cx3v7vID$sc3f%g1RjdXQd5gl$x zM9)AVwe(K(<_&2}Ko$2ee#K&OTWi_6l4dL|JcK*RHlJH%yrBOn&(JEIKj#iov2&vbF3D(PI$ok5bg+HNdnkb08cuiP~ z_vSM6!4zhBxu)FwsiN~p%ltz6-l1%cycd(S-@RucwMRrat)_#a$S_p*%;%4gf~HwI zBqHn8mMvq_NdR9C6$Z>lry6im#uoW#VY9Gl@E?tKmBB*@aBTYgmLQXzbSM53v!ANC z<6kys`+*Up6qqz#wyJ0vCFE7fNz%WQ3`!2KO$3iC@hB$5eP$@tbkKdKMUs`66+T(} zzESSi7H6M^7#GRcq9?1dk_X2e;t1=AjI5dbjC?#FD<~?TZmw=C44{1!XuIzY6}KP} zJ!E^9cXQ>F=~HT@fVGmCzg`QtLQ@qwud{$nzN+~i-kJ}n)^|Zs@N4t0a*ma+X6f7k z_Wf08OZSM`8=UNw!U=gM!dxh)3#9RO&U-EbE&O>smu}&-EPo%Y#&Tl3Brz!`m1uK|SUZvR;ubqDpO0^TZ!9XTAW2l^8;p|>C?3G+NN{7C%Z{J%yDI;?f z+FNv0%dW3lAvjoXKxE}N@!eXa5o&0jR)p+e71~o^es!|LOahLG&I$rG6MhLLQ|TA^buk+_?3%4Asl;?y3S zt5bB)Lwwg@v=uHzKhjHa>Qvvm3ysWdRq46&7<=;Iqn$@SdVZo*Oe9sraA_iP5v2u& zE=Qpk(Q0>fB!5r&rh#4VaA!&oqH8flFZv%ZvBZdSN+;}`O8HO0N9^Hwe=(yUBoCZE z-vpR$&}qC4B}}IF5$yJ+X_k8Le#=riYA+=kKnC8L9R$^Xt}hNl+~;SG8O>ztUz2$b z3lu6)89F*N5W@6s&*y^pmGj7ikUXEIe6g6h5FS6*kLe!=7rT5qddQ6WJAY6079IO! z;~MaZQ2YkbF)nz`se5IsEEU=tv&fgUqAbT~$(7fkMUxe^dmtiXmL0RxjMqOrA=r%F zm0kR(aNlOSH}ysDM>GS~59LTRD+pEANxP?+A1Vj}KPZ7hx&G%CUIF*ufOCDbA74mz zb?g4RjV#zfaS#M?^{rxQfT7spcdlmkSf}sIY1K;8XHUi*qaZn7LQmcY{2}7f3}Gr5 z{8Q91SbNKR5J(1)?!o)0oO)kHE}8^!8nK``$Dtud9;_oyWP0n4kr2rOv(xo9NOyY| zd+jzGJs`Be4!nE~*(sWMVUP}p!$nr&-)(1bdmkuw_`p7`wGBxoL7WiwSSBGdfc}wc zs+P*~0^7?J1pZd3{CIyAH6fPiX`p8hs)(P3Q{( zuOY1z9hym5$kzLQ+D+6z)ByXP@Bsy$_>lp=t4oe}2|QhSI(C3fudh;HPR!j!{T+xQ zTiEL7LK%lYXWeTg+4w!5y6T)|kIPZ-LMvAxA=D!hG#?Qm)Q_`<}XAmtvXvT!-fSTyLpDMSlI$tg<9|Lbx4rhqYN;3z? z5cB$gQ_es!HPw{sB_r=pT&pqan4e7Tnu)EyBYwm}o3A|1|LbD-F4t8K+tDVXsfMtM z=RgNVJh#1>$$DEat6U(kyI*jw-o>9iEbl<8%-vzNRl{ZrE4$aHyK+4iN!7lMDptq? z?@}j69(CC<-YHOXL;OEAb%P*rq-W#!PfZ!r)irGBj+h!f)nK9Ro77Rb&^R8+{tZOQeuC(Rz51ltV!TV%rm8H$0TDl833@_)lAsf0d1%xwHi%bMz70&+be(JtoZyE{aOvb#@VuMKUh0XL?_4YBcb;XIr@ zys9nUyaxibYRpTxf`Ay6gYQyPteA?59Mp4BCAEcgDv3t8dRUVbf(10|BW;RC;YFpG zPB)yzr8l)*wX(;7_#%rORYa`io?LZ05of{9(9+pw(e8>&hC$EmB*{Vbav2wRZ!fFN zr!tygjOoo;`rc&q3-eU3Iq6kj1MSdzf?$ep!OMVDUK-vF+E2zXE`#5$8y|o68kxUX z5Z+qAaFnW6`{w}t`$Iyz*KIC?!>3lT9u_Sx9TIonk0W@ktl>g^2HPhq-SyN6DDx~w zi~ch5oh*8O9tp?B>Z47WM&Q4Ar26bs(4oR3h#v)z9HtE-D`OadUh#$P-5_ZMMeW2A^UD{Wa%VqXh%#@@{ey z(!4+7Hy{V(51u4e0ww_*--^DC)FrhPNBONY)HBmU$(fuc&$^liCFMVt?rWd=sE6;8 zUCGt_)1||C(J@+It{C9WX6B2S{{TxD=WPJ-D?swJQsWg=cm*vNJq{atcKWI=@wa2W zMnxSAieIL9&S`s*_Xhk7PC4WovIa*|05C^$(A;Q9w=?>JVr}8l*vb^J{BX%w)lv1y z3|WDLoW+rH%~5qvozjSB@Nn&XaIu=Tz`_?X&|wQ>Pj{-PeH&+!+bwKR_$d+0^b<-Y z)ihh(aaegMR5k%=fn1TTF&I+52HzN*F1t+zDs}qOLgjs5wHz=EMoz$n=}?Tp1spn3 zKLIAWdg9G;B8o;L$_fdIYGMOC+SkC<^-zkP5a#3c`<##Aoe$FzKSBnTXSxO(>E2kT zvobUz!G+MD&V204l)(yoLj}--OCyu^z>$a+RX%H5?;7bEM#m%mdflA`!p;??N6Apk z{u|DxQTkb`xWh{ip*tHVj)b=uyF-2`hd-xP{Zecsj-bq>qKR5_8u zg0uR2062e4UK@CVIMb7{rsEJpS%;&_Qc%9Of|OaH)f#Cnxlh(2ze4dNqlM9nUl32) zs1M_=KEktoUcgo}fqC1>wW#Ak^>GA0IO_(TT33hc-_>%*x{f`uxoShA3*F`0#sg(( zns(w9KQM>n(|OmKgbI09GM|Mn_N{^2?g@YK;7#mqj9d)OO_R*E}>&Q<0PcCl{*3 z1!9y*PfW%&Du*=EN=B<6FS@$T%$r2H%t)zlEw-WD{vaa=3)gl80xW8pi| zo%(D1I^HY8R$^|nJ?pgG7{JfLqN?D#Ak;!VZ;o}eKVxbpKLiG?xNZd4CsbN#>&b%{ znQjjm7@1!qAW+T5nIFUo8)-!tw(vH-_t-d+&1nE9iOdfD^8?0}+0_}IxXFR&eji2@ zk{M$_8AJ>e;lJS&lsV7DYkvsRsfZ6cLOA+OefgxaQb|=MzeLe5X{Tb2NWAl<^e(Ro zRbu71S`uR=vIy(_UOf6_FESW|P~Fp6h+mqHU;5lLu}ZxoICN5uR=R??Q1=23O^`sk zf?5<3_Bk|E5)w9!mz*7g{31BiNg!d&>xcKIRNj#Yb-H61N*okFJCZ7{7lUKhJd}b} zVL-{y_!WsMA_h;F;)eN;iKSYfbv1XBNr^rK_;ET$h>8E4=wcC=u?5jAx}4w|p73OG z-4!LBQr!+v9zIWh%PPBNo#pbnvi!(x9?hg?g)`^M#x9((MgbrzRNRf-?d!#mr@q?8LB1`=; z>_3*CH}l9nT^9xoQA`Tm+csHL#_^?S9akP_bXG-!+vVd{-H7c!kP+_(XCurn-MKHe zwhuMJX|hZlKZvjxES8I<@yEOq>>p%>)i(5e&u(bo2*1w2Y6Ckx8wrMjmmjwe5l!c2 zbQd`Lk%P&zH|fGZ&Ct>Dys5#M{s>B?Vn9(jw)7s)fYh0d76DdLe%HOPXwNa}rKl^EL4UsoRz;k3E$qmkWrILR&)CmmGt;Nt zYJE5IX&FoVZQA#C7bBz3vr$_mE`9RG$3K0f@W-J2Up3nVH=E3q)ST{mj>0cp?(dTA zKY-ld8hS;(@O}~OS~z$*`R;Vnac=A}U5tNq;3z)7Yx)7-xVa&|6PRsH0mIwImQ4twkmXKN~b$?|qgk{5!RNB0g|rZ3UvI-yn${!7+L z*>pqQ#ag*c&|YE)b3+6*)&h=tMN&STJJs590A1SEF8#*9ODbYS9BA4!{l>#`tBILt z3a)ed&Pq6&bZCDn{qD)7hQZimGixYvo2(M5c{pp8edOZy%&{_e&G!>>#^mvzn%zqI z21*u{nm$^WBhm&Ywv1?+Ni;3GagX!AqPTQ65Va(Sv%?D*xvm*zPyO`KaOJ4(UStpy zQuhBo{e7cTqAY;2W9Cbclxm6DT`OXX2F&zTU}tqG{7{X~`RrW$1$#c2diL&8dMEWm z|L?V#2~pdTG@rjC)#^QLgwgryFtVo2EBiB#9fd2bu{SzXvIUC*?GU=`+`3r!#)y0)JR zOgt%(eaDvF#eAnt)~Wiy9rBH>GY~|M&oQz*jLFVkVW2NtPF!=THmLg-Aa2IAwzUUd z{8Bi(#udY+BgBvSG?!>S{rhe{3edXY6zJGLdlnwhWl^ZD>kB?lZ-sT~-pTw{6swy= z%je*9G&IMntitG5_!d%e-qz?%m&j*Y*P8i>$`N0<4&B-nRO9=}+u4E;jU*R7H)!O9 zc;bEG5hwjPkeNCoAAJ=q4e5R+d&z{*R;DV~4=_}ZA~M`e&)#|pK^5a8wfq{q)`6t@ zfLCg*H$_s)rl6KJi0M{et>LsaDQz&(Osk&+TOX_nN3NH#&#bFMuM;zG09gbvJADHU zk9^%O5dS4VsY~2AJbWRPSF_}hD<9!G;YA=8_cA}7ctW>qOCWAu-S&Z*6Gg|I{nvz;jL*4AJ*HMxC=@lUT^`VMUD6WV%14 zB8(|-R$H+;Y1j^rFwD-=Wpj1!*J%#BycDqYn3@c}s%+vz2={w@`3FbBp5U=HTdn_~ z+9{y7NqK&#cjxZOGAKot6#xj9qpJ-vYYo@0vf~%SdvB~>eZr`}6$lj%%cc5n=%Xy} z3QjcR-&7fcm zMr&KFRt(7PLdeaBtO>J&ZalLjZ?2DZecNG7+l{lbJmNU|Rt$VTqqr)sau7-q+?`sqX~{qIm%XY7 z?8J;TpSpy!IS5u7Y%yPw8vR2_fWwKk1SxwI9SWoXS=7#je+*?apv!3{K(e?O@)#+|l}*3ae+{L^Dlr6l}Lsn}O&3Oa(`cZ8x--PrjX5TCLZ|%(%IV z8H&`ilcf#L-WOYDsVd3YEl!FaQ5AzT!tf(L`de8%i3En&!ZWOc+#11Lvzxt7t#bh+ zIVZ=^k2W)vSduZqFv&poQxq)WF}RK^R#`;yECrgvGP`peC{W3H;ZU(H3ncNnF@m)v zKl|wWh6V|F%b(VN!@&`=&*v%qK~S3=@^Qi~vYJp=hchxLgJYGU5Q7m<*Sp}sb6J8r z4|wBILR}q1D{aW68_vasne9(`Q$#L!85{8rJLK6DAS{J_qnTT%e--XW85%miDqGdn zZRL<4XXD|S*wxn%cs4;SA&v6YMc901j`~jqjA4GLS<4hsgr#BVs#^ceEGUhk@bp3N z4k6}|xS%zCJ{)0OIQh5jM(SR~P`jr_uFg$+ZP(D22@}^YGk(87P=)u!Uhj?7pZM@6 zuiy2~l|J0ZzqpR+#1u!Ij}4JgvaF4Kq7Y^Pp2HGWhB}pT4!OmDH z3y_+xF~>ECpO=ZTHHfiSL>N_x+u;wtrhD04ivLToJTRNtRi)b_l)g}Y{*8X8A(rLS z&vsj`W8@1>_V;|GeiJ9!%>~!%!pqo^>$$-G3Tr-nXU|MA`;le^TW76exRCI{+(oN- zY5MYP**Kw;{ho6^_9-Z1L1CN^KJ{eTNmj&soXvcS}5u} zE#%C)mG-q%k2&z{fzl6kq!X8Wegzzg<~FpB6|TUHJCe=(C-^(VpUwUI@MvAWoxk^p z2C3P;c?*?y+mk=(=KOB+e3YSVg{A7OsU^g6v%-fk5yQ^eF*MoLu@N7CADR7D^u+Zs zRek6sEkw%00V{@E5QwdV*MA}D%evG4lK&Q=;EUbu_|cqVb?+2S_Dy(vaAq3~*Ji;p zP>e+G1xI|)sCo7a>Qz7i$z*(to~e(>GOMMqsM&B`IgX)fgEh!KX3o-;V|folOV#>- zD*(-Uqw%CN2eq`aC=eXMlv^O=NHxa!0>zp;M|jd5E)(0>+SL9m#RVHr1pbAwbE@#A z8cFEGcZ2T8C^bOiOT(p*>QFRwN=PkTi29KO2TXY+owQF;!S{Fc3#mIWh8kEM^YX@k zF+9(zV-PhRX8UYi6>3YKI2Y7XFS#Zu$3mJk1A_lQ$ z;LCDghGt;KzXGC0U`O*g=h4NzLDI`+0!e@EUm76PkI{%shO82sBtokc$$inmNuk+* z_0z96k$$Sb=FRpfn@XJ0U*qK*)W_nBA}5lAG{4gxNf}Q0N;*xC#&2!fO)srY9a=GU zXGQAj+QC)|hM)ia;YHheroFD!E6lzQ!h1g!s?+OOZn_L3Zx4d67PFa7SEkV`WQ7NN(e8)mR;1@r)lATdpY6ZNyhK%XpY?s;6>=^;RSS zzc>rT_C>;=l|HT8214GEAb&vM(*Dp}ST8ScjEf%SJY#Qb#EUa%dorYq_+-ga(1&&I zQ&Q!6@FOH@YB=Z>M;gn6RmU0rqJKQTIaHXuLee+sc_sIkXZ5c{M_M}>|E75hQS+dJ z3zL9v9N17vy4?&MFv~p~v{lBc_AuZnyW$SAQa*jHgRcDBIbWJ1IyFq#Os~~Ibm=-B zPaveNBw5bEgCoLaoAUgp7m)<-c&~f|6y@JXW9|fQXWzUFPOX;E@|33(Y#7GzmEHFIr*K}8%1pA z6Z|tNCyhNoB3{`*U?VTb!e#E9CC1516G@H_5c$#^7_5YtPw;Nen|&Q_TvaNqn|WYc zQl~q?$U<}p-_N9PJ(r_(f4AjvLk!Eb&^gtA)3O_;car;=n7(P)P9H1B%rNMVXy2Z! zN0)d02b`&$CY;$JnLG9cg$!Ek%oxJqVtu|@er-iy&&_=sESGM3K>7Awmg(mcI`P_j zET|o9N~6}OA?~{z^Aq;0xBYJ)f_2nNj2hX&yexwTT93i1X81Hy?5_2&YVt*YRR60$ z-=QgXWbk8xO!;+^zuqsf3opdYqlAV+d1C`7YOMgay;amZl0qyrOmQSP-=%Oy&dQU& z>qTuVccv>{M6`ib4kaOB@^+l6*Pb@@zQvowRq3C?y%+C}CXfP{5BwYtEp(?gYlY>t z1yMdXMJQ9o*D>roD0fVzsB6`LO(s zZR*8VlTIRv#NjvF%pK^yYG!|PY&2J$wiyKtoRTR~(KG5??AAhRYz+X*`Vyv+>7T!W z7%?W?L!sN^r79J^3F{VI2JgN9`Y*hS8z(F4^h7$R0srL~A5;@F7JJyL{RAPgZGE@7 zbeAsGSj~63JuYb8AC$;ccf-X-o@wIEtZYqSFHzap|GEm5^{*%L6^l)$v~I;{RW%Vc zPMKV*q0dK^X*0jP#nL!s0PicD=n5vU84;D5IrbcYvbVN+76;ybt*k)AO@i+Fxp7o# zQ8Pevjb94~*@;IVVOY|YsqHL_h`WoK<0fm}zwq(F^TvDKzfxe0a-1p%(S7P5krZAm z-2~cHoc~xwTp*$~(0&IM2{WEE_k56aab?y$5+YAfTcE}@Ytn|cyfUZEHET-o9v4k@ zi%K@a`8>Kv6=S86hPJ$@B8OMvr~+!m;x|Btd^_PuE@RGIZ?L(r;-*ia%5+oI^;@;C z8=MjXxj4VnEPZlLU=)&x(G@s>zhpkC%JMFXe{czgRX@Qiqs)M>GI`{eNN7toyXDKY zilpS7E5FSXX*l{|$_|b5sq>-e4*cx~vPOemb`X7{wg3IHk5bS<(_F*ueGfhL*(Ba@ zO?^kDEZG4XQYU-r5L|Xdu+$M);esYr^sg3=b>vCHQzl&}jtE~u%UZhE232n-l7t1V zJpnUEMPWzN&q+>9snCi@@H_*%!P9-b7#K%&Ei4N6Hju{{#rf751?}vhb>pZ^^rN3 za>jJkP?yPgWaN27(~keFj?sQaq1w3gauDwPPm?sVbK9=z?*lX0*}`TztXMm!MSN zwCIE2RuJy^8uV9q33KTr(n-|v4C%ow*Z_TFm#$!*63X%3Gc*LxFSin!nmW-qPKBuIoux%FF)J69~y@oRmp48 zzt?ibet4$YT^|I>A-idBEG(%HezJhw1q^f9rt$2N@G71SA%nZ+w3Ix*apd3^P#1C7 zD$%!vBy1)NvHq#(&9_t`R4jfULY&k^r%$u^xoLEc)-2h(rjJ2v-t;v@>W$P1h-?%|7C3ct z5%90jIrcwu1HF$xIb^y=?|Vm1|K~OIv$Yx^=n-aLKdHU8Sb4Or{45WxioB8Ng%yFp z7wWma;BMazt=F=!8y+?F|D$KFz@{mNxw}q8_hdC|XURf>1`yJ%w%^y@Icm5PZ_^0W zWb-XBVNiuwEexR~<;(kh7OuG)cv3XawX2sPZB_>L-GpUGy7ko{)nGMn4YUJQ|2GJ- z4ZI=TS<2b`{^Ix;7Pd`=QHe@iq7rpZg&BMlhtZS;k<&@k`Ymt!l`?%OVR-SU_3H9 ztWUBTGXba0+ynJ1yJ0P}}R&u$9?t+?nIXnNwXFo$K zH3n;%CIJ#(z=pxt9sY1};>Wo{15uH*ayq>Ibf2>WsZwY2l$qbtcrj=@;$)%2hByM$ z!Mr<5gkm6#rC{^MqV@xnEFtMncJ;b)$i4h=@hJm#9VCGX)k5pAqI~iu6>8o8Cd_C; z2ni!uQt|z_n1M$F0YQNz9dKe_3aL^wopL4f-?YCa&Z6jxc)hz^b@r%i$ZWUxVmQ13 zP4jpR62m|J0=sxcUk|{on*9~cVf^NC`|m5PQNtK3_1Yd_X7PIRHXw}BmDd1$&;lc1 z(tcCHbysNP4+9h!Y-BgnX>7D>i^_MsD}6Z8gqto#H6>A4)gL%yKKTpY0pS!%eo%QA z?PMBZ$zb8-P~k0L;VnoAm0;mJ5{fcFyCRojB;-dZPH|`zs?RuuvO>?-Qwhb>rs$l1 za%wkw_4@Sgm6|H7cFoXxcOtBrH&gM+OQU?16x`LCp@m9RovHS%R{OkOG_ju{S7UM7 zf=rYrky(~CFEzHA{02&H1%buF!cSW=k&rl=-x_ixczFoPe4DHAnlJC_g|W1)e*|@P zd%WzAyixqLGT*Pg8(FEfpEd7geylI2@~khD64cm*`XkNGsOhqX4@xeGz&?!R!i-oo zHe5-7IgUH!u(G@)cCyR=VkcI8fRmAUa5Z~#y3|WP>7YdhmMd7Y$cQ|$s*=_G6HD+o z68#=&_*K^B>b@xrV(MO&Q?y!1J61N(zF7~udtJlB?&b0ysSge<4-d73gq``v=Q01| z^FlF0fPRb3>jUQONw7uuWR_jd_7yQiMvGqrOOff4l-Dd{X3AY?Mi?s8XQdoM7Qb}= zg>g{53f?`pivji6urjYFA&g55n-F=3U zA&b)yCv>JHuks?5p+s>bFA+xAV%gu+7Q`}{F}*A150(ofG{Oiq1s)pIPZuz~d-COz zQY1F%(xOv#OT!5b7MFb@h^rwhwJ6Gj?%ak<3kN_5#qVphje~#NKa+WoSN%edy9&ai zEnSo?W>+-jk#*t~+PYxw>r&%!g9gk~QN;JppykpB7p6MvNteeWIfDt;)~lC zL2m;X+P8P-#3Zn$JbHG~Wm< z{pI#pHclhgHbhGe3wH5%`$)T0P$yFRDHgSs*PEBmE|fPAI0kY5QYxu4rn6x25?q+L zzJ#l=J;7xE;z_92t(ByJoTK`f)LT{m0)0xZ`}PH?mQ13n8df4v(Z5S-#Xjw5$+~~G zcW4{1AJ&O257(GCK5oT*eC(q1Xz@h?rE9{Xwr?(nLOuCr%cC68wPvGF>EYuyi7(`bI z*?ev0lYx&<3XkTocIH9vOk)uW(qCGP+=9Er^7#2&TG3x;s9nXR4~qL-jNF6iOEh!C zIY!4g#TKz`{;?|kg26=_T^Fr&o0{jfl`~~4?Ezs69=?W^6g$}5J^!RCP5Kp39gdnr z^IJi^?qt#)%ecX;GVPjO>l1F}{^%>RY0C6nij1#2e;>q-E)x$E^?KHlNoec@iEP9vzHMH*Pul)0nyy$Ku4qBV3;74t842>m%FgQ>w zShBucc)kh69y#cT{mOZ)sMpkti;=UmTvqCNbaBGzE=4r_$X3lQ4j`dLQgMll7E{MB z0-|6>R3Hg*+@EERNzF`KU&o#j|4xz(t|C93NG=E$R0{s#%>YaLr7SalM1IPF9m9b~ zB~#ZcbDb$9?c#bZ+XAFY$cHSgeLG0c9D~nn`&l8B2Jc-jvaDsFMTz!Kzzbvap-P4( zOkj%UCkj*sN%E6`;D>bV?;}MJfjwvNk;ntJMqfAdtsoJ%NU$?8a2=Sgw0g08lW+uZ zz0jCU(|9qMCZ33tEl_rQOVKrEFl)YLcbG-oTS#83bvQ8i>_iq@Q8H)5Q|%Pd1lFsw z=>{4$PD?V*wboxE;l&As+8_~ri>NKt#(qJN9t_%AUwW@jNBz%td(nn!k-(HlQ!PRV zV*A1hc8Sv5JXtZ!)bKO)AFArQ*r}Asy8SoP*(;AJ31dY;3)ya1dBF;LdulgsI_w&N zqAKlK-gRXS`l@IN$Tl&kHWT9Xto)IHscM{Hcg!06rV)$F#X8PUAxrw%fA{Fln%TrY zjke!anC22oqLr&yy zeFVdpH3RpLi25REOo5zS0nLSwXhQXeg8z>8m;(HTZY6LQd2-avVdA>i5XT_D<0cKN zwvYb)Oz)U90D51cRc~8pUEQ@a-+NBB&>7Ad6iHe~BPDfz{P%eySOg${Qx%67BZsd* zCyM{8T%N5<$hZA`IsgugWk&>hWSsSJ_v>n%!YgbeAqwON)da=i9u=7&Web)pGZ)(Z zA0Qawc(!x$ z|LA(h*h;@QY_zs*ySuh++qP|+Q)6n|*3`D$PHjwWoc{jro1F9IBzq>l~7J8T&u#Qr8PZY&xdHUf;L`QVT4bc*UP(6NbxNJ z%7rdOph_9=Dyz&Fmbyfu%=fF3@KgjuzvWNCAWru zLWm7O$~%quRb61re2&n=Q&7B3bdXBbB?aLD>hH$&T-04xF{x1Q4HFTd71rGX3Mp%# z1lJv;=!~j;H%om9>U{|-LBwi(^{`ky@u0aQfQ7#$fGh%M?qMIR^Ekc?a7V7=$@h_Q8a%skfGZ z_=i(YPtH1pWYg+u$Qe?{-`l*}8+^39s=Fy@YHf9z8%Q=;m|B@d8h@C`39Z{1#aal> z@e!M+Z~EBZxTE@aUnWx{tuZ+Uu&wKuG^C}B*!@LF@~i5eWwA37Zien!WwuHZ^^p2) zeY7$cEGmoS5!NzCGLK8bE6+s7JJmuqlU#^z)^HK%Nxaf%jBkMQ2>d4H<1P8j)M&KJ zh^o9@UvTgW$872e*U@RyAr3pmFc?^%nLrPyGW5C)I;8e8cBlO|Ztq5IsRd_B$ zORa30=7F;DjEKymEyOMD(0Zm_2~Ngd7?0Fu-moQY+3#ODeKMANr`>&QQ}ulBYjvpY zpb(dp4`sS-&f61iw5v6`&l#Q9u#~_)2?3z}FvB0z$N!e5^3<3D)N@{&(C$~ca(P~9 zADTIMGq>+VRw(uV7r01%4y?%|TLMj*rC3bAt7*M_`e_-2t(TW9?hzKD?{8KK_$JWD z*&$t@u5$jw1scAI+cCoJq>9+1Y4Y;M&pdA8|LqcP$ok41G%$$Tgh~A=KF^0&69PU6 zGTTg0Bowkfr+2l>5*}^C;_%Ds8nZ_{s`}Se028d8^=fGJdOrO}K}FTT&#y%)@0!A| zC*y@5`-ONaGI$p z_I2#V>)rcv{0L_MCwWHMBnv3#jk;6<^G-4Mp_NhoyZ?8v&()1W z2&`s*iTOIbykKBM=u`mPn(k=l=N_SZcD0UQB?@y4(%Mz?>p~)b+0AxXp?6OIttV|r z7d1_M*9>FF=1!czsm8Wu)1%f*azdRyNBg6PoH3T?4i{F|vP_gyH@aaqte%nTK^>nD6Tek&vI$O&PwVRzhAf(Btwz%P- z87~5ZFuJFmzeOhdC=Pxr?O;&aDB*ds-x70h1wpXUSwiMQH^?!SWM_3w32}AG0AjG` zpa8HqLA>;<#J3qyt}~#E$x4mmOpo}mo$7`ngBI+jwI)KNjU6Y>vn}vFPD3RlQVDW;EaEjY*n>WAnJr z&j=6t6V5UmiQ`|dfac^?g;YHh9y5i%=%av%Z3%Ry1>QNl3UVic5tarQOw#$T&sVZr za78oNW)4JH-|v6J8S#}i3C39iCuJ-Qh++eeDI#kU&dLt$zQPwU0_U20FN+7ARY&hL z$(yPp$}!y9%f}4ObiH)b3)H@=C^Kq!~Rac(S4FfB3 z)1?F%+EJi<8{C#l8 zIBJxYfG(NZsrN9Z3Dtm7ERPrptOZ$Zu$m4-gvml!WnFx-ybd-@^Zw9RnWU)Q}Sg@{x z2l&-QO=Y7xQZ z<>+s39CiQ4{@T>9ga!113I09pT3Hxvvt-%3?P7cH8a*`W7OLIdH+W0c4iL!6#Mm+2 z9)|zdsz9pX9N8RJ*J}y8Jvgu@eVakddRF1t-0}mH>U|7~DC73k7tE;w-<-6GJdH5@&{JgBELIZZD?ikbvxbVg^H~XNi_0bZbvuX(KhHb?N zm8+Zkyd|=BJi4;y(9u6~!4FDq(dzjUYjXXlIjhIq7&x@~-ub@&w)SxOpuQ1jl4n7c zA+XeE?p__xg-udDn8IB(G-Vq}w)?%Oh3ANXHLEt<gngH)NLsdL=L)4T39u>q# z$b;bwXhY9$X&6-Oh%=MD1G~e+Rm09?G>OoS7{GzCft!%0w#?5D3WiX?#?j^M-HOm4 zfNG_Z*GhfO%j_UScab`uB3GI+J5lT*%VEsmnfp6k7`fUmvqVHcU!Z0ofFU&TY~}1j z*05e%NV8PP2Cf`G@ZyrSq3TV*Yw()WimGus z8X%k)v)(bthV-31gyOP1lD?W=4^}9an>D;)jB>bys6MsuM+x-Q!d9(px*Zv5`<`gOlJ1&Jz^)2&S7NM@VmF)P)BvE<4sl zRFNU0&6M6eqpLiu>&}$kE5G$4^j(leYgT^7G*ML~rkg$|YIPTd5SpWMAs)DqC4S!8 zFwO%dHET3Iz#{rI2e=!5sB1m4FJki-qbFDf9*D@Fs(wGD0b7 z%}yly6r>``idZPwd!<$^cemB)&tu9s|UQ{9A_EV|Jjw#5{|l} zg?|kR8781|>b+`b1Gs9}Bh`h3jWAOH5ZVRE0C6e-H8eRo;Al3$rR`n!!hf6xd1>&x z@bIX!d_MNmrKvQmTd(37r(ujT-9oKsK)PY|(uz#vK^YjVlsAXt?6|;tT%q0cE`8=i z0D((wfYWpOAX!9RVI~%kSzE4VXF7Or#wtH2n9x_WV=lc*Zw;h-ARc9Mx1c{{MPQD{)A6Y(evFlwEg9JK+m7JZY%i6qwqI(@@JGhz2up=!_=4q3PsPVC zU;nd3T(eTvjxP`x=JwI~qc7Go?Px>anK0yqH5)n(K}yj(4~6M(szvX>nQo#%5yb#= zw{DC*6QDx0aba9R@BJYG3MF92GyuiNrn#XZ;o@NzHk?JNp+47>wgA1%m=cC|ZEq|s zlb6A;i_(R`fI(Y%tBf5!{V$1A6;vQ?r1eQME1kvMp#3TDQR6W$F?6zJ-l9dzd$K^& zq=>J?OgB3hEdbf(c@{e!{H_OPTN3Z`4}=?Ao37VV&9HSBxQw`i8TOje^YY{$q~xPE zBfv@(mNc1&5>r0a$l-cr%`vrUv zb|ajye~vz7WA;rQ{Mcd0yTLWOH%-J6>$(bqKhb!4+def+^T79n0S4!8;i3A9hj7}) z61zD=Gl}M0f@tf z+`G8XXN)eo7PCB^_#&he-EsuKuBYrpkn^)@@ zws_x9G_e+#nggoY&Q`=6ock!-ag<$~cS{+Hq1^ba^1t9do{FLjhY>OaZjXuf8cco_ zDl86wk+=ySMsL4;>9O3#QT-v+esxbi^R)rNeD8GoYVt$)`}oPeH9tq#MhT)z`nrPA zAncW9O2eoJ=3ec0-GDFpah}WXZ(C`0w3B>J$YCz3nY~!92)c(tZ<{>?QK52cA~kr| zH*2D@N(krkWx=>gi1SK_x3Ozuqiz3RYh)dIb5bu*B<;No8T`?Rg;cxyaMz1#e4HG+6O%a<5VfX?asM~FXVj3cN7iS&m zB@9*qv!8De#pki*ir1tuoi#UBR~zB;u%BTEk zl>3@$%9qqSJ7Ub(ewH}cI7P#fYP<)feOxt^9-w(#Q4KovNZ)QNCve!$KAmEvvLIU1 zL`#3m4^fx!&Ev!s49oqev9vHvu2k>pX&ntt`t#I|f`}rE0>g;9hyZ1b`b9?mJ40~7 zkK0`2)0VUpkw%9MAMYR#6u8l|1e*#(AV%v9Ixt=pNjr&37|)*)?~Ez1c%fj8v=@rd z#yY1MNgLHIH0k%#TqB`q;%ass3<{rivqTjLj9hP3fE#3%n~&N1of{9B4XmBvWVOu^ z4A&!6o_w-9#4R<0_9tfq-B$@M5bJ=2pM}YvrXxI`T6W7~IW%%H>BM9x^U(=DmYKUf z9ses2)bW|$vMn}^$fqy2#~F5j7N^1~|KBhJH_BI#y&F^tfD2|qx2Wa3Pj)#@<3E|A z>mJF75kRx}OYDqs4ERyNr1D%$6PqZhte^fzlsjDAXOG<$Av5Oe&~2$>z&p={xLj(mD^%Z_n)4*_si|ihPA;i ziTrWM*U;llYO9PU8hk6MNxVv8(?MUfQ7G4I97aaQU^Fc>Zi1Eq8=ft8P8ZiIc&e;g zOU8nxv=E-sxpi#lEb7q`yj3$Edh*3m-?NUl1tSZ5_iMLztp}}Y8TM}m4;Mn}c?`;3+UlUhe3o=Nd z#xgqdr4RH$aTYJZ7Og`718r(lxpm#| zy)YiFrJ4j(#&s(&mEH|bAm&XW3J|NirB_nV^`3YN#@4gZN$51=X-P~H50C4yQ&MWS z*B0#GJ!06khWFB1A8b1C#}>oI>WV8vluBCD5uTV|t2!QRH$sxfth3@$lE+dTpuI<) z7jitiP;mq_$Q>sauB4McPQy;RWQ5d{<2dzmtt8%cLaW~m&p?mLJ!m_y-Hb?$z?K4B zEnZ2|bt%6y56wguX^Ff*f;KRm)9{(Jcvd|gc5Sohv9D}O zCR4o5{FJa*Sg$J1#pxUDO?z=?9kc@(&=nhlW@``k;{9(o6SSw(kwi zeoy)vs2S4)@b|%~ANi-g^98^A3EP$pfTTx)L(~xC!{L-OD~oC6b;hQs!r@i0IEpek z>cMSQQAvGlGF7Sc%Z16hT82$o{SJSHMrU4KjpgThD}OP5?Uptwt|e*2=&o_Pb^hKG zJ&G%bb0`S;+psq2k@;>OQNdQ$2U=1_gK+vQdG3J2i!+gs;B%mfEOXq%KB`<}d2T9X ziJ$r1NAQ*(RWFVTW3X8gF0njjpqXt_h5nBXwe5_u0V;nvmWmTk@9)=yC>&!>bGkj_ z$wtlqa=gDQIC^DEfp3*wKlehdl*VU`DlLwp>t)Hm@9z4VqKSzKQP;G4C7E~Y3KE5s z&IZ=0L;jeNN0QFk30|c^*PKJy-@}DBWmSiev1?a$6AosI%x~0a^+MW&w>lt8F{Iu2 zK}y{ElysDI&$qdW30x@pnXnn(R8bDY0a|~`caaGNJM*oI?Uj|r?%QiR$vmq2ZtG$7 zqB)C!nF>NGfaxX|Ga~AZl&jF8mym`iyz520klCX8A@I0L&i6r5;0ij|+TtGPw$cV5 zU~s8y9nWHSw7n$@(8JVcuxc*LH93Lom9|Ru=@q8+7NWa~-L8{pt{aoP4w0W1$rk+) z#j@gm7IB#N8!te_NFi8xd?Y*UQlzBFyISg@W=%|Fj~GcNNi6WdFE!v|?@ zdJU#4Ev2%4u+89F4TA4XT)#ijOHsDFp$|#8Gw7x|DlxEn;o!uOM9DXC^M0yl{nSsQ zihSsz`1D=Zp>Vqz9gU3=#ZnT=3fe-Yhb$Kn8%B4S9dzN?uY?U1+5$c@5Ml$2lR=jP zpFmTW%7L#e*z)!84nH6WZ5vi5iV)Z`K32~xX39<&vvs)_Gk9}0Ebnqb$76z8H{&n` zO#fPHz{5yLAi#rw`K^j3WReBe_Ctw=pKL-1jjej|tXv6C;2sMSpBrtu_(cLLMFvHF z{IwY(v+Og3WjR_T(hRsACOTX2x#cKuc#Pi(>kwh|PP*sbOKhCUX*=$^hi7xo(?B@# zyCRhJZl|c1V4RNd;jbg(a;{tff;z7u*9p5R6Il2`{YVQ~;u6vY;g22wRrSE{4B#*R zGm5ZTbbgH&-94B8hJd7(4`t`Jcbi2xES~b%jEUbl{3hnA*epf4Of0G+)wCunDi3Bc zvRWk*jSXk5DDGa~g}5%oU6B9?hgLosqIGQ=69a!6zJeo^^Uk&B{0L2;3J0yZWj&A# zg7#2jbFkcXXXzttoJzv(4a^W^u^%&w#Y#Fr{Nj`OcnEGAsq-XGwNDXvPz6+^2_)Pc zA1f0E%RNn*{5!|be52}6U8>&hAO0lsGN@EtcEs_7ie0cDwZL4_>d{XLdMV@KO%u(+ zfTp`!q-yMTsrKaAAJPkxKDSIAPl*=h@;i+VMc)SU z!=`tHZ@GMNSz`O4EN?y)iKU*FuF1lrUqL!3B?4CKQmm2z%S(toOvMkQ!C+|ATklUP z`nFuL`ZKpOq!)<`U*~K#Fg?$CJ?T4$cWZM%;ejNuJ{#fSh^mCo2QI!sjyY>GkR{5pp~(y zIrp`ELT(ye3$Us$n|@{^q48+^$}f_8q+#*A4ARbd1i=`r>OUU7qgL=FPUa-D3;iU( zMXPkT5ogp@9QHXeFwf~QEu;DxcIYqU3>YMIcbEUgkUHaubx5~!k_j-xz~OS(8G7uh z_NV|LcvKATFUnSF7+#AFv4oBG*lW5Hw8fKKs`*_h#oc^5)FKyW(SchstSx>0Ym|{o zN%ZvnjKKp(%F}xqqLayv!@%sk;)5FQI)2tzxHtgZx-*DaITEI!ikPYj?Y**5LS5UU z%HJjCFTxXGJ248vEQ?C<9)PYLZ6-A7jwjYAH>qkl8)kIdqpF{;udbam85$@-EkX#9gTM_`|O+$r_p6oru&<^nVmP^Y0rx>KmuIm0m|=@#%?<+ z+SP|gScjWHhJu7=3cE6N=(32Cx;(^&LJaVdyUHEhr3)}G%6JVL7uh3#51f}JSCz6c zdm=X<-T_T7X0KgjfH`~ADbAwB;6W@_f&hkR=ClbdKT0StqG+SUsF*wD+EESOc z5HN|tNm+zv^Q6~WV{iB+;RU-dez%31bjYM|Bc<4^ZnkPDaeTMTOMahhRtMg(dT9C% z9f^SF2cNE}uJ`NG;SRY%D_ewNxnv~-vM@q3uU=T`9(SwR?`V^J?do+Pm9~U=2xZ<; zRXs`9LSgtb2v$Cci0CM^P^fuwfKtewC)i{oJh`p3Vlq7HMkR$%@mkUqPMoc!CoOi3 z9o>d)=(>n?Cr8i~z34VBESJoS*KDpOa3Odk29b8)=_JTJ-!FQk-x`McL0$%SGZq$7 zk25#zl0Z>lbGy()DibJzrK-|E^8t}ybJifIZH%sGhE$Gn=48Z|=`gQTznFD3`tRig zYcsm-)Jg|s??FAz)H0a zI0;I8SDF4w)RF}OIqImxTBbiX>e{fSl3oGBPS-|(iI=Fl9Qs5hjYudPs&TPVd1Z95 zWm4hTT4hjy8tO*ssZp|%f5}F~z-iCMI?w-w0+vm`)(gdo6?K<5D zrJa3g@%7rhX{lo$VE(h*C1xwMekeKkpW-;B*Xxx*fO4E#gv2N}OKX_ma9My12b)xC zEY1eiW<~8lY~__t2~&8z)j+9UrW`7hzJa<1m?udeE_a{GJ&*z&q-Q16O(w`6ME}6D z-H9`{KV68V5jXzLq|*83=mb@F@8x<}?XA(f_;!TQd9Sf!f3q3fP>_u{rvFH!bqN%4 zhxDY~xkrPd2<)A4phO+_#LH$+-jZ;+{>?|^&sz`!NJSLHZBo!>i)l>rL z5!>pdlLmvxyABVe082aIO?d}4`e6F9Y^_CAA@?1q@|6G)fOtaf5(kdb0uj_DklP9H zoI6^Ql`s6QP!?~Ur{pNoT_AhFw_Y)oCj2Q^=p1Y#AzC$(zFVC6GG}FQa|V_z3ik$5 z&`&r_$=nzo$$h1)O->m%VcsX&f4E)BMss&qVI}_#FtQH+%Q!!O#_C(Ble>Eu^w;LL zI9m#9B+K;y+~-dipE#FK?8GG#%B2&kkFSEjc8HqIw}{>j!anSh)CXo;z->hD)u7-`X-WW1h7CeU`xTx%$$pVe(YJ!-?# zUF>eW`Aeqo;^C$|0B;=^1UI+zY_C^>7NrEC`NH=!Tvz@H4{vFOhers#);0v5Pbpll zau+f)(FHd>#pqCpFzJSqGBz{_t4hOY@D$MwP-+tFQ z^T5iq8p&j*BKFccNTTE8la#V2T zVDdGfX6oA}_}k&|TZOu|mS$81>u;$9{pU4{E$WPLgfW_Hru%iR-}Trd7-fk{(OI~y z7k4;wDYTcwz?>^O_C%>gdw8W(tNqF+@}{(&8o)fFuqlY&2R|D1jL=Uk>k}PgsyQ$s z0$&0c8k`Id2j!fLY-ut<5i_A48bzO>bW2HBUu3VAoTx75@wk*TSHaIc!|QO?@!_LB zs$_yc`3w%Nj@4;a^{UOiBiD`y?n0?!$i^=+fE5sCKq8cl=3^zYL z-yv)~RJ5-w&vb{UUkDV`<7t7trm>;a&N9<#0tq)77Fo$OQf)i9)|fhSO_GI87gQ`v z?}|pATIW3Zx_U$4f(B4u-!}k~R}JnThV1hGXJU_E7;KirlYrZk{cd-i3UW3aDi?Rz z^F=b*2!*D^i^d{P>CCrsu_9qg#8lN5eZ6&`doHm7GSLQWF3lF*c)Uri*l^nA!Mllc zM}9r zIUutoSNFR-LKIzgvJ5M&rzQnU;#XtweLT#_{u4~@n^yL5_Y$_EypF?G8=cmDq;its zpfP1OOKr)p+QafR;!S3y3pKSWq{61tKfu{|F1q5Voa>~@|Ii#Fg{6VH<&6u#PLc8t zm?c?*LgV;|d#pS|D zm3+`BoycEpJ6%|N-ZihdA=jx{XDa;rG<#xkhx3T#9L1m~T671&+cWJXWQpSsE2;P} z{TGIBANE3WBmeeD-h^`uP+99>-GA|L;oWTvCjNWCXR=={`1^Ww+kMr~yJY#axPYo;+ohat&o67$cI7N!4; zAad4-+L|>=G3@;A|IFSkpOs!!nCheig{SzZuRw;+(XuEigEGyS^~Uax{Tb5XsBYYZ z=SXG3&mQv)gA@vU5t3{1?A;@c%-{v_#Nu{1yLzTC71W1ca0EaDo3eKN`Afj;-YFN) zL^?2nGjq4=MbQC=0k?#(cx3)}vb6k;hoiA*zvcHABu>Fciv&D-1Ku_mdL;Zu`~|ld zPzB6yCE2|l^`QEm;6G6^lS@M=cH&2h%J1algf4RfDQH*P6<)ml9LFW)Oc}43v+J?2 zbY=ZijJavEGQPa~2oMe3n0Ljrf~liSHqI2bp>H}?Zb@|jjE{UE<(QC5F}>KS>&0rD z4N~6l#Fy=&!KD-(NL*tfrPkUBRM92UwN~YlRm2sYS67vyj?1Ob;xsjFXI&~%el+n= zI&`e$2(Y+eh{*h=kc7(1#9BXZHiYr=+)pF|L)^D}_2~AFFx}(#PhuamyP7FmVecDUreS@T zI(c4;M{bmIz?o>1!rhMPjpQ@V7>99gBFIz~^DCb)Wc@eQ_mu=!RtLfW(8sbHxK{jU zuHFiIa}M}gx$3&BxWnZ)iTr^4IlXpP*Y=LHS3bef6^YcZ@$z;3>e@bw%0C=={4PLK zAc$eyWtDPP+DXq3S}GjZ(n-*>)M zJHm;e*qv*37qRl`Bf-iXT zCr^J}E~O!j`bORDbQ_&-bh16QRomFJ;$ox+yrcSGS4niD!=B^h(q140MN7G{(v60- z8k16WM4MOOFx3|<9jw6JD9eX-Z%chl7HcCN>4n5?X8{=AWqaT>-Uq$|iUybL#g`tCswURk68k-NfRm?Z5;{b5k_Z*!Ldj4Mdv zOo@27{9L7n<3E8oJQY!AS;;3@Xcyx3o!Wf`$*10x&o3C7n^4nUpzu0GtV%9M)yY0Z z^uBs0B<46wPw8#QU)}*1ZHZRDgT~Z`!*0Wi$ANyyX(;WhbXM1B3KI_BN|X+IYmMrO zQ4Vpl*B!j~W$Y3ah>HS_jAYiGpK3J+<+?>x@Dg626?zj-AFIs*OnN=6r(9e|A0mO( z; zf&^sG;q+*K+`^pA^JU8Mh)4!=UgdC_E#cb86vh6BQN2yg)SJ|PASyWxqLrJ<)9iv# zYzM$XOdhC=Dq7uZ=`Rf|$;w}nusR#h^mA0!KfDZD#T>F!e%$bRr`SZCUiln4yfhXl z;kR!Du0j+JG)Kf5uW@fmID*@q-udo!(iMd9u+#>e{ULWa1>QE1f2Wl&ZgiK} z;NZnt@S?5Fs4AhUI>mFBpY$AA@*OhcIIFgD~1f`g=OKe7?eN!F`z4d^%zJV%NJa zT1CB02mGth6UqyPtTTp~L^PP48Hp^s3K^DE&mBkg_8h`BzPyzEPuV;TAz!mr%XC+% z+q2Y8>t!t_h4ODnBa%sqJL8bGtu$MB<1UsRk|gxR%elnrT!}_+uB2r#vQ17VZmss& zT~c%U-nNC0@ULc;%T?2&lJZ?wT(l)vYF|H?;+vN_w?8ns4j{^K=Nr+K845m7F<`F_ zr~<^*A5KEjY6%`gbT9xM0w8pKM3b*FS>ZpigA4E5AoG)Jy5=SclZekYpSSiB%e@d^ zw)|$-x!Zo;^m!E3xi09+w;9eZD8=W955Pwtr?Qk(9zrHaJo79st602plA?XRK+D2; z2}wxcF2j8a{*gg)VWDeke zvv6TzID~^zY1N=?ElFb^Fl3e7l`?Jmkww|1k{8Da>N`PD+>gR1NeY} zEcylzdyKjR{O>#aAW%*W8C!cqX>Tk8jVJ%{cSu?$_^TWL{tLfO%YauIN%dr@5Ip>p z?GJO?qPv!Ccb1&9e-f3N;P0mOB5X|6fLZ|QSE|6P(Y&;#)^3rtJIb{b(_)V}HpomUqx&=2}Ym(q#bF-=tNNA6swTM4x zPGo4fXfleks#URzHH8U{pN9k?H70S4mW6yX&GJ9m7XSLYi3$RS$ZS&$dO1TzO8{aUJ>axXX3hui6y>?Q3letEtg*cCJD zmGMz?j9RH4K&Xo~ZBSs|g>#CC^lO`Pvh$K8HtC5#@2_q;u`#zChw0=ZQ%b|N;GrZ| zW-W=x`UBjmBHQ@N1vOAlDmSgI9O5vNN^G=<6A5~4on;ej=-Q_fT7shBKoD^OKnj~8 zg}ed`X1!Ngm5L)@xFZ_oNFxNsfsz>dL!h7MO@_W!lFknORNLv!!oT79;}H*RS(NrX zuD+UiPR2ucuujiTndM*O*ZbNzu;Wu%({yuJ>_09Z%Ll)H0sz{fHO# zwhN^2FJ*761szQ2tPS|Wz9t&>MHi23mfQUd#N|)c@qNqr6f~>&v zV4^>(3ns}MZ#-f~CH8|iq23c2 zGL2fzE5k5UIJ9L~0dJj|Vf_beVZ2+2b82*lXV@Cm7o6`J$7?Wbr4OmODe0%H z>`o9mY`?YnR=RpW)iK_@I&^xr<}t6+7#@Bxf-v;Xe|v$<`sPdHCu4CZMZrZ;lSb;o zi%d4CS&pr#@g5=xpO*l$6|JC8w;0nhbRGz=2^xWh!J~oeUct0;H!kpuCTi2gsj?3z zPFN#lFgrtzCVX%ot=`Q`Uyw{f_-J!0Z~%AQ)_U=ovJY0cf25PJ^U2#v2e3H3a+Eae zNt_q(L}{mzSgX+}Rgs*JWRj?-84Rl2z(V)4v7zkwD#PfeN-tGjE@|ArdXf1`PtJry zT@O}VB$q!oI92Im<-D!6Z$psi8Tw1{Y5Q9R@CUqybm)<-ez?Znxx6KGQ|?T__XABs z#Y+U-Tv+%|e=+Re&|WQ!bWh&DO$5h1PA{CKta2(!w6{&Y8E3vA4x`NaBCwmk%>L@% zJ+C_~P`wweSN3@?-7=a6%YL|_zroxsbAcn#SFHcN7z|WezE#>RxZThki11AUe33P> zEAi?eFhRukhp5;?5!*s0f%nCV?`ejX9%=Mr zY|rJo--DQQq5?g^VL)JtF)f?eRByCTp1*?#<}WJY6q z^2hV?;H>3Z<}aJfUlQMBs5==+e_1{&KsLN@c;6WPN^31Xgq?;^yVVmLpeoGrR3O+n z6afq@o`V({O+3O3N3~&bRaNp`BF}=@malj2uc%|4;b--#Bdb?iNLx@+Ff!luNtB#O z^~F1*n?-~u0VDi;oup2jdi62afbcn&nsFX;-@jMc(i=+Jex!DOg8PRlEZUTrzs>=$ z$=`|--QNWCf5WC2^|aN)Hz(Yjua35)z2_g-Qy%_4$rRqamme$EVsCUpm)a>)hh629 zXUtn_%~rAI>?{LdU*$<|F!LG1XReAkfL`>JbYg*NUt&i9%S?l_L^I3hpT(^1oACDl zITQO*GYIp1l9;V!yT~p8qEuS6n`LD#Tq0@LTr)X(CP5+_K6WnMq}$PxT)rKyNQgQ% zP7C{oDGLR!__!FZ=~~ZHA@<2~MOJs;-(1spL0^#D7I9y@Xg@GPR3JGZR^T~(bippw z)*i>-o09MPeMLlf;E4j9iFN3rJ?g}FY(j?|@<5q}9KJXqv$ITmt$QR88cwo#suf>i zR}rH->O^@vV>h8+T_0Sr^2NXEFb{hWfOe8B!$E~%dkw_D4K)Lyjh2RQ*g^KIh-4|y zJezTry)+GP=m!)wCkawYjqh8FDB5<07>s27Z}~bGJXbpVav?^)O`kakhUGaaTXKA2 z{L%xQn{{)w#CRbi5Fhj0eh{p!2VGatbC^244;e?y5VVCY-=~CodQsLx_$#EnRLX`G za(^V0xgS_a2RNt@R(*fj{S=@FIPVW{wG-(FSW;O6I5Sf|p{d!MQRieoYpfJpX^#ZZ zt4UCqmZ8cyIuzfN^w;vyKW-ysZFT%uK(!z$E`=z&&>XWXoZYr)QbiVbv zs~(+%t;RJ*6{KG!*VbzP7WdlbU+loy?IR@edJ*%r%!%@!@hFXsp$`6t7}T|XP;jG8 zJImHEC|0%2KuH#;A%vuYJwusBwrVY`Rif3()N2|Do5t@tRxng|y)`$ZRffUZ7{gwJ zS<*X0k`+SU6^+6M`glS!>;LFT)whcZk&6UeX$0 z0ed}J(r4(E|3t9iPWim*-n(qyVu7cUv&R)OrB4Q(M{oECY{vtQmgIT}K=>>Et1fmE zA-{DD6lz5}_`|?b>uVg`i^^CK{~*_?ZuLvn8;xBMIJn_zA`=c>E1js34>2>ERA_my zw8AD$uKG<-*q$GO5HcyF;P1dx>qxm@fkU#D7WMt~)npucPdbQX*e&XagW!Qi4T`M7 zWozUqBMVg_5i&SD0l1bJnyFeLk&LL2oYI`cw-X5eVx635t%~Emp7XwdiGb$ncT>-f z6+_K)cW37cFrdeq_N5Y(`1QRomBiyfAZTY0+;hku$aDqGX$X>6bFbw8b-JX~3|PU1 zL@3fqvNDUM#o;Ydu2ePFdn&I`z4(n5L*=@lvYud0!~CLkcNBSjW%I{gud2&-p)z4> zOg8)Sk^+m{*XZue?n=>G#JR)%in1uEcj_r{CrVFEF8QYrpj>&4u5ObVb@R_HC$FB1 zbx8VG`U+J&yIAx3>xxqH3?viLEO7v=@i5uklCG9}Lk%_9^2hmk)Fn-+757EA82iQS zoBeq4p!~JGQWEE2nQOQKv7&*6VQazjb#-jt4agv3+};t$;3PU611#K5=-#({E=x|f z&6|2Wl>hWl5)1Cf2TL!OMmx??U!8YBwJ0d$xXv9rAH**;oHkApp}VkyV7g_D=gTVo zi0Y8uTUu*1%(K?DIufH3W-v%d0kWUh<>|NOg2=^tA)*BQ2-`XSVp_Aj8xta$NbI~e zB+Id^Z*(T8<=(tUI_`#tDaDU39UyRok#CmIErVOcfy8_glJ5zJnIO9atu`b)S*Sk^Hv zuRo?y7ai`<-I<7ZkM1Kb7;UtX@6=c)Vyw~Ca+4;UU72mWDUy~;o$ju(sHJu-M-6Qa zx2*{nyp_VE)e87u-Ymwcd_GUmbzI2x#+VZ>m~B= za7)r#RtYwIscaM{VELkpuJf5^C zZdWPUB)w`Pu}JYbMzijAXlo(qXd)VD1}#5e^En4xZdiyrOBmwyp|E^XfCwb~$vIT4 zR4RYAf1Z+NjAWOb=)^=b_*gv7X^icnPB zbl6X4q@ZgtNog`3Ze7qg@r2Ic*y;GNET?4F{wr$(atVE@4+cqn0+qP}n zwr$&H=lh*L7d`r7kFnPJ1AEShCn6>gyQtW%!E&r!@yLoz1(f5>;(i(H%5t)S`uhKyEzC~JBJ{_j>!8(6+}Tai99WagW6E3zWi1NbND#{t;In=jzc3knF|qS@dV! zZ9(|6&<$*fBw&9_fL#~Bo;zsZ1yCS6dj`mEM9yw5->y5T_eIwv{pXsgS*|IJjLr4}HdEG*4+OFA?2w}LiQh{onaq<$LU(H%B z0%+9)n5qkeHWhI3Y)Q1dNV}PIk|lOkidtGOci*t-sgFQT{JDjON3{;k~2C|7#+S8ya&E^8k*#s7txJwEaXk$TW&0soYSqH5qxY6<9&W7cx@(_;V z#UU(sd!lpn{(I;NpRg&*eoXCr=5rOa0_YtQ6h;tT1`b_4G*3VEJ!q*ube8B;SbX%u z5RA=zj^lPYfe!_*Wn zZP6xYa&f4bM1`ZXLhVq-Qwz93sm;bK{90S@E^L#oLlqFh(tEUlEeP8JuF!KGbIFOP zqd8%mV11G>(~@eS^!m!Kkdn7Z(w#!-c<0g47+phkH<21eWkOH=WehjuWL@T5!BSST zA>oB*2xHlR*7+8*Dxt@v5FV@L=u1T&Wfh}Tyy)7XN*>t}$YC`)bKd9#bs@-^<8^sNNp*x@DZRlJtGCeE?{_fZ1dqKXz1mXv>Z+&0mhIF;W&fC1iZDJM{}yr8 z*xt?{*vDOJr0PZHRePWW{b6ggy5v(=)!K5D)>h5Lg3>e`>+mx9Zu2aNdL9e3tQNM#${j&Ggf<19J#sjs-QHiT@L#l|SBO%HTNi zH*Tz>5b3C^cZ5r0=WfGcQtNR;u{S>7T1fi$8e9G)eWaAld2fwb^o zx^&%f2Lx|0|ED!$mjB0))p3OHgV5T;7JzaeP!32U65(;s9$GC#Dg)Wlk`yg@@9sC` z%(0XUveEq?R^J4lxthzH1t)3G8QA_(je#*bb}V!SZrv2oP{V)9O;Vx?xz}qtMUF|L#^jv-dr=LDTvdr=jbz3k0D-fN>!z2bc}g>k>&_4fEu|$7bu8 zuN8CLch*jbZ%JX&6sc*)xdDDpRJkskX~R^7#5d%}`|^GFu~>(2CL_q4 z5#+=^2*HqxKqoi)3pNHq?(43J1o-P*FoyLROq=M>>gS*3g`Sb-Ff)k#go6-FJ2QHq z3z5j212f-$Nyr{_2p@vSu%BrUN--F&-HLJLWF>BN!iphyKrw~x^J_91g>p{?uQp4C zvJ5z&in8GdR}=QJP8(v&=T_B&lu960K1qn?lqoy4`MRvc1UZDTc5HK6&Svdj>7Ppz{r^7`cLwqG66#}6@*Q`a@}?BF}j8TlV{-V z4CS88(I3Xy)huAKduvUuV$AM*`YddD(>Mee`$_mJZm6-@i6jnJ2k`FvoXKXy9dMdW z;4P@2{*KWwGphykrS0HleGAQ?Nk$(W3ZhKUZ|JIvHxFKKoOsx*q#Ph-v0>81hx{o< zl>Vc(f6b)&dh(B9~Lsj{wQx+eYX%`_Dn`opSL~K3|7rSr9cgM-?vnaOyAHdP<%xyaM8La}Fp-NVkGW{e|>fIr;r>IFdwuWVJUzu6M>tUGGnH#LXp&y2U= zLc|%2Pf#)rFz=(`okABKNFm3-ChYHREx3tf`4O5Z4BRVmp+{!XIuSzH zz88B7r`U6Lru{)%diz`AOJso?#R?U?RLXpcfYP8WsIyA{=bxN|We*3;EvEENoF&x+Aau!P}A}qr4 zbw>O%a;Tv&MtlqLh$QX7PF9kGg8$xL{*kvAp><=w;7^uqJ%q(N!zwj9TEbH9s@y_^tIdiVHH5&Hvy{nFl!^-K;A1g3E`?+O2*eIwhJ6i$_EamU7I4Z@5j6-yTivM!P+W34fWYg7CM91z^i)NZ`2TH zbLy&8l)sLj{|Y_$m?T15;w0@D<(hN0;h>xrn6pvPPP#0)S+J_NrqmcKXgX7Qvlall z&r%%q#iv*%0qXaigvIFYqLYvFqIZdiYZR+*~htn5QW!&yf0&BeBA{9z!1i zd2vIi&kAgpq|YH|LIbn*J@bzt-hGUNNwY=Ed&>A*=z)>ipftTePY*{$f#xr;w6H|o z4EeFD4}!|me~6ohC3}sIS6r3G;+FIo@R?>*A7rdwW&GCvA#bo`IIA#xyBbm;D^SVI z%&IX+Qrwf)ubsWR{Z8G?+eE!`6ySLse(Iq#Rxt~Y&tR@%72$}f-*JpLmgC4vH6i_t zMe_YE(qWC$vpZ_#-F^iWji+78Bi$YgSmpV^h6%Zq3KO+lpln!A6tbQC3 zNJr^~3O*x?jD*Nn%=pIyc&a()`EQ5qW-gVOZZ3;PH4VpNmTIQb)f&le+%koNc*|j8 zvh%>7O-$$HZ#`0qKNHat0s)4GCq)HZ(U$JB_AszSmEyCD%Fyni9OaRyiv6uRwd*M7 zwvyvi72@he>519{1UO!)y2vrJe{nm~P)kb;x$?lCD-F;;eRsh@cnMws``{tG`EG$v z5Fwzv`K+M--`5&{eAghJ=8D516|ZDEOc;3&5{sDNY9586&S$Zt@g~tn-TY^>rsq@1 zKzuK7En)fBQJAHnGLB{Cq~FbsJgR7YjD(8bskU6M{tgy90la}wT~jAi((VxTU7f}G z=>Nq=#IYDQW$gL($+^Eoh=!l*Bu^Z>B&sm+`$MTm?qUj^^r4yRdI>frb})sLze>Hj z4L+IP!3Wr-JPLJ)H(#Sd@;Bl2mGCwPsVCovl1>EV zKx~c%;bI;jfC^=J^2`X+E!Ro zug!vY)QImGptTk5ou0fiJ0JZ+kxbe{R2705^DQ)D?V$kWObB>8Ban!-&Wd@sZ&$m}Pr|X;EghAn}$*e&# zg)z+V70$lv^_GJ=URT;?axR$o<7q^iX%CdTBoQ{J@r(ZL7-@xRWZhS4`Fx@sn zzMCJf{^d~9Z4pT8X*J#P(xhbjDBd>p%C`3jHSO@ptLMyraVdV{%jV)KzGB&!ywAwH z4EHg5;(fSjZK!joeEp86cuNT&0RO1xiz2{@*q;Hw2bN)D&-gLT`P)JIZ9j7hG5ygp zoaQ39(2D=`E%fYeqF~Z#D;t>mAuHtlE`KET-Nl(ELkX%}rP+jAl?qf;(jCm@!tuJ+ z&+QShp$+_{tn`Oes+-ICsVG75i!O|{IN z@h6{#QwHDasca?MGeTHOdNQ4LQ&6Bxc!VrE0bZU%Qn)|`k64iUzZ=B0Wby%`v{P`z zp?-8unF|eWQon?;DxPwnb!zI|M{n0%w_Hn$B!KGAhQ8yxD2BUg&?pUz3+3$xEboni zL~Iju;~6VYOwd_Jt?xa~1e$|RhwL3!m)Lua)1@|db>qqO=UL(s+bn|L^xA;$zvFs> zeaMkZ;K8GZ=j_{u)DcXOT_8vXp?9!a!wHh6(!pgSsBm>}8ihV{0!4Gt;;%89>>XCV zljmEx?hma0wCm)7nU=|LJgxSIuvYyieqNt3n#&dafYq#lxgOtu0DL4pnQJv5v3;Mckm8 zH~&$T0m$%qc%E=qIR4!E)O3#|1HM>9a4gFEd@;>UtJ!&{tA~vDHWHhx{_eD%e?k4* z0p>bp#BBTrtu3%M=jVYYplGOTD|_qzd+=COd%mxi2GYg{)vl@WwuxImLotn5j264f z^;(A}2#(|(Qmc*5_03w`(o|=gE@stnu}Wo@ADQV|{2p}X26?-w#r#|tS90g0 z?;sI0>W?cGZz6Mr$c0tx&?$Ydp=Uc!mi_CvVNJ36D`3HRk zhFzi2PZCa*5vQ&4!0ZqOhxfxdix16BdF1p3@QOIHr;cjEX6kMR8@)NU%F+*1O4?i+%u1=?#zZgTh=HX1p zmhqYsm(4N1r}-D33;$9d$H;#F&to#kccM{OJI!URoY^B4WW~U!o&iZ*W_4zWAx0UCkcsT1)qU}R_?1$m2 zLt2(`VVOfqhckv7>)4mc^p-(-$^(w1wO2miNM@&u(~pOfU@(p=h*Q$n8L3i%Y%& z-(Ul*&(nzFK50KRvZmqC9I)DP8X#VIF>c1Zux%R0&` zCJ@4A%5FE;tDOmkOtp+E>CbUjysk22)H2i5p}^Y&1O z0|L_bc|muJ3CWc{z4u^%;5=(*A8Or})CR+5)}nUF>onPt4Z?!9_`qVtjxZ0|Q|}TH z87d_U^iAkHeGAjT=IJtcW9tXuBGA*s>zCXnV-t9igis}H6K5v;0}XmuUfZPGTDNO- zcrtR1^_Q8e#*NAJPhhLPo&%@yn3 zkLrAcN-8!bqoKgje>i6A^}x7?X5r*(;USG!+q!^|+Kk??rw4_a0vUCKGLgA_s6fgP zO7<$*vbj)xRMSApT41JKntr<1@hx|mS$lYWj!@Z-X4%N%e`dl8nP$X)NL{DFo|u_* zrLx2WOLp1rP4y4oTMH4Yl~ZLFCBbi(TrzjRv3(l)AT`})=1K_eOuHl8{2tZW0oj|K zl;nPF2wDdmLS^~gHL3GP9d52;s8DvQNJ(P2)QUaSP-e7^wa-b29Q_l(>1jd?qyQlJ5U1dtG2zvs7&}~lWM6R(mTN`~wp+uty{J}V4!K0vam2`+fXTBF5FPaq8yAHpCP@@lhKjY-SpjT# zGl1pTXU0N!!Ufn0S4L9#)wfF~a=!<0BTbKA)11G>%$no}UYbPnXu~c^Kx_v=dq`X- zjQ%t$2-Uhs-x0lvSocea-))rTe17=+eE8@j9!=nW^)QNo@61Z@;0>2|<4^ym(tX4JpZH|8Y`LirT#)}^K|l4Fyd zK}q9qUkdk-P3d`DtQJ?3LifHN&yrVCB&f}5F>o0lQ5n-3bp`AU(hrC9e5N>CS;q9-U z?Qq>^?NVL=79Ut+TfXI+a5R8*bVf31yq84!=rmirY#sH#$Sy`Tx6@TT8j%~EgA>8e z>xkTC+B8oTPAO|)_X!|c3`UD*=j4$E{N~T}ih!+md}Z-I1leJ{#fEoDKrC@59F3Ni z@~-CZg$JB-t5!K#xVL)iOUi>g{hd{{bW9y5u`|oWmY~Tg6@7t zONO=y7J4d`tkJqTy^^4e#D-n{`f4n=L~G2s(n_%FP;)q_`tX`6+Tc7vDcV!KW7EQ> zWw&3`Lt#RRHDi05DaTvwpD-djTnxMy+E%i zFA))ITTRU7V7^XBgB!+!>|6^~p~kziX8G25kd4#2+7i6aRzyKkilH2tg=}ykE>L9o z;1i8-d|tjKo=~*quXkZ(CJ}7m!6Xu0vZ$r|bm$Z$esOY_WWql92bsVX17S0Y6oI6y zw?Dv8zpJ<39TfTk2%3HRSmPD&_0RoU^;BN%T%OXEa^fqVbLouw3YPs8+hxCa^tPo+ zO2wBH(7W0&Jq`Z_HJng=24)7 zJvFVUgcW`5F6BVFn6B=r5M@C^<5z(;u2{3#XNU-g-9Z2Qu+h1F&8WNp?%gHzg&KE5 zIhJm=OWDz8S@L$bLp2RrUeHw5{Na**ftF+(a$Q`l<^N8&-&RmG()n6vuyFNF@u7uj91_#O&5P zQe=ZCq{6=6BT=`=q2^V(oaLqjh&NYJ)5X+;g^2Lw!A63Igz)LfdHj(iBgrVD3aaH1 zRC*rR9wt`G*VXzj+hz?}h@aoMQ&IU_UIF(!Y21F3piJnap9Wg*7b3@9(L4xz8kwAc zg)@j^x)utRRoBAg1iB={LIzg1gQ@Z)!;umOlL%pT#e=KAcG0ylr@=8*b}XGHq%#Kg zjwxNGinanJu(`5qv*u#cJTTk4`Qx{2&mRkQbWX)5%E@5TsQ(DY6+K~|r`9%%@&OYgXr{8m)>L!c15Ch20RU6{DfGMeT*@7(HJVZam|_&L zqaM`VT$WBQP14|GPPMUzq)V+VtyIZ1TRf9piey7-tVI~vfYCmKi67AYejr(!)Z|#Dsk!1$`x{8%}gWu_;E_d{+#tU~)ktOtMDQsetTA zEn!9_apxl}PwhK5?Km9R>Bl5C2`KV6i4VM>9W-yv*DKY%7OpGX>&Yl+G>KZdfCf30 zJ^^)9v~eVw#8`indDoM?ZsJ0MAe6#TFj;X>Q!`32KUh#UZUk%#g=kpTvPjso9uPLI zpL{o z5CQnzT}%dDfKT59^tPt=|4yJcFDw)rgnVU2T*2h(RE=T({|t)be;E{1wyKwRu{R=C}D(EHNAtrx;iaA!#4jYV@6)ne}Rr1qzwR@9}Pn&Tyq90 zzJ^8qkxAV{gg(VC^DPWUYe5B3d~cUZlh4UzV`d$+<|pwsf}S}%mp~SUg}V--Yw0vA zZhXWeHtY1tQNG?JdaW7APz>bd!uAU64g45};AauV!8PkLHI_PwJ32M)eYQ6c`RGsQ zfvIWCcnXCl2(G`k%i6L$z{-PAy2<}yCbozM#?bn)ft5j}AOs6UL5yBJ0F1nX9um`0 zT=oDC@Jz{7MplQ833X@3zK<2Kj*W`_Mf&y3{f)W|8_&RJ4}hzC|Oq0V5M!prK2aG6{=g(&9ZzuwJlX0Ze6z_x=hU$oipQf-fT6X3y=uX5%{(Y6t+$4|tiP}0>Czo2!BWi*~ z-D0@(E!i@c^Lbvo_}G+sBU?U5(HX2ijnk5!$fpPLW&;!)4w^>(59cKanh;OjrKBg( z=Z#5DAW2{#(;9u{@K-M)dNf-6oc3tO_#Zy(6d|7=ows#LChYbJ+(IHDjlBg$j)b0l zIdd@Mcn-dULG@$EFBy3IxZT36{+SR)x_q8+((cj`n)rgoq55?!lP98|pxF1t(|@W2 zO_$85wArhzTs>kSz;%?SPfn8Y*(*BJF3wnuw3q6 zX-#Cw8xnWb;oIItp$_7$WpSNItyJZXpxi-6_STxZ=PQD~ci{gxJy$)AxVm}i29$V- z3Vu`bSG5aNm0h5z$<4;x1_eSw|6M-{mi~c zD13)-Pa@`oE+`ZVVr@hq2BS)hCenUs#>%~@$JY`kdQat6s4`X{Qn88sZ}E2^?<6vv z)|yv2rC$gNnNsTT2&|!vb`5LV*|b}jf!cqqFF;)hq@fgPk_d5}~Dq@FqW9ac1M#%MJp+-XUJblwzcHpJN-@y15&dN9GNlz7(YWMU+U6f9L@e5Km#72^- zAgDT4MKUt^P$l|2-J4I&Q-G~Qb*_Y=tJNO7ew9+`CEB0~Zg>3%JIDShNOtng&AQD@ zf&_QFK7S>o!uj38c$HWQjUc6Ykg`QFs=6@a0T|)E9WO*?d4&!SH)f*X*qmi2!Den; zLCgy{q3FQ8Gb*M;=@~m%-$*i?Y3qmH;onccO^db7j=Kf|5f1N2E^a&3A!D;|%use?*g~#hN z#TiQYThQ}Fa_ah+woUa697n>Tz1>Kvwq~5C=JOLoyWl;y_#X)8j@y`Y@H> z9ETY;c2VBl-n()c*2&wR>Prk=OJlo2WQ^`q)KtUNdy<9r?Vib>&X2TJ;Cflf#t89AS zr((ONCA6pM1$m8cZ%M{BjgHJ8En0gJwH zJ!3vsiODK4;BPclo2r;000oF7?goW{N;B*A7x@_+4}R5Epis4D5-;v zYx6&@L}TT*1%sCV9Vt_Pf|>k!!?gMjGqiR(!$5`QRlCnghFhYoWjNbt&I1JuW&8TO zJPvsvPg#;^+}9{d)Ghj(erac-!F8ozm`*tm_&h2t&seauXr9jY9djRJYGDuH?3o3! zdy4J+hLs={M=>oiY6n8uV4gV*xS~(xc$~VUPoxIiTO)8 zxmkq+Db1;{+Ux|x6??E$e|=7>@eZr+)%bA4tMXt?z(|b>Vvk1B>k`tPrQ+wiu>ior zFa%y-%IJs!t}8CkysE7*rlMc{fhkBKO$48NKkt*JXKVFqItfB zrI>X3(}ZvuJ=uSA2yHs~&>%*ijoX9OI`(tVi`s(TfO(=SGB> zC5!~H&npxEZyn3<7X9`t5xL!EVQHK6)0t;%nMN|8-f9(LZ8b1CT1%|<+$=etnyKsr zO$GM789+-js=LYJbnB2Ln((|apyIT$)u-U;rr=Vy)px=kkZ2RV`s`ABq56~GMMi=F z!k-@_oqx6{^Y_OT!1qIn5eNnbDCGctwH^*uUg=ni5=XD%@f_()We>(NGB5?$9@vwJKgaJ+~y zZ)R^F#QB!*>!-bdic^8M^eh|%(cUSP6<07uE&AM|+CNSQ+-ORqvtsj01K*yF6JYE3 zD(DKmS$FkYvgNDhcT7Ei?sSz4a+=Q$EWi=Wp$~Hub(#+?lm9@;oY$_;tG`4GBAZWd zh*)oEyD^)sc;LArMLR`$LtVw9$0?%|2RPZ03o)#W(BEu?NlCkzHIzp^1Ol6FFuROD z5@n*PE~K_%(KHB6rK+O0&45CZP;g; z)*TK|S4FJuLH#_K0g3U^^2PEC1~H|!_q&?1wRts3ldz$N8wNlM(SeaavWDMBW-`un z3A9R5#|h4nJ^8TM^)?1-gH=uV`f=5P)kdH?F1vNk$e9hdoOY!UB|6UhyV^FTC*?_k zXUPZyL7PANN0b|-t@2q!)*<6<*SW6i8CW^TMsfa8rk(D#s`q~MNqD@5o^AjDH^G!rfM{64rERr@oi~+Ib+C*es=m`p z#uHr>wEbKt_6B(n7}8~92sMxtpZFHX!YQ1?7|`tbWH{b1KxTtSe3sRN7Z>w1(C?75 zovUsxwnafk(>DfbXkdrjA>swFljLs2r-V<+zYIH%Rh}4cB{`o)_j0dgKc6!!tJ?U7 z-e2yyjF?-9;j6wmvr+t8I*=AX?t;>cp*c8p?iD<4iXNFuqT1Ua|Ckw0$9lSfg9|(B zls=KgC~;Ow5QA>!Mwt5OAo|alL*E230?ZZ`H04gGWd3e+T8%TrsIKs?RDlud{`drr zr8AP_*Lh@F@0+}vv}rX_f|pP#h&2$lHq;%JMIQ@DFYts)sRkEYV$I4a%`ng|-Ql#L zZB_*YdK{7^TG$xytX@`0xN#kB{ti8Y$5Kn^k)pVL9tQAv1HC~WuF&3J_->>BpN#f2 zV!pOjHNg0S7?cgq}-n<^zJg2&JvVtNWvC6c8COprZQX3@}0}CES%@hzz{J z;C#WtjbIC|LAJ{F?!oi5GpkSQfwD{5rRHO$Y#J)m66xN(?>#%0XTDtnzXl_{Dhmg0cdK~jhF5j=nBL%T+xYAdb z|EXP$V-ac^Ec3=5wbpJEqBuLI8SSn>lpk%M?N)cS6!AYYr~bFPu2K*!-3uLiYz@MP z7l?bku+T3k31uUBz#$49@DOHn43ydWO~(YbX6AHf=MBY&wb73sWBm`sQB2YK=ANq= zly)0}P1aP}Zy_MO$@r@0Ovzsud>YjCsc{_Ou7XTJ>1AeM^N30?34Dca80kXwc~`Ay zY%JpSxNT^FiSmM~T70NsnSju<_^k-({XqHE!q%%=VfAkgdRU`YE&{y#XG zKP*t+3#GR?!MnWJ7eLvk@;JqIi9Ro&%3xZ0uv-LxZ8oFHC59A+TYjT)3@qBh!S!dD z)p-{2RT)o-I2#gKMMn#Qj6y?Z_7pPQj6QxD+Ij=mF$H`8MI(P)e(T zP_|!#B~FyTzOu7iF@G$lyxWgH4VR_D&O4$>Li>j@o@P>o3ccmxIJ$}G{m93E5X3|_ z@8ZA7qQ*+@t0;U;Ol}Uk?o&%hUe79e>noTh0>uU9jnS{GA?|D}F-#c}mm8Z`WThH4 z#A*uY!+RUIXEZoQ@I*bx}vy=EfyVGJ)bt{(TNMq54X`4Han$!b;0zD$RDf zrCYTCo)U(vsy#uWViv01U#;YXOkSY9+ziS;`9wqRK?yxQIV#Vpf+?OvI)&$*G}(H! z*fL!%J{E}8h!Y{B8roQqiB_7?T3j>|NF>`(6YEiHEg(JLb+*464tAy%R#t_^h#`qE zOe{M{DHLTQINit$;i4WIRajYi#ExgAK%xbXA8!s7-928P4;B$ToytB})V}-*Gd!A- z;2&(-Y4kq-KpaeIno!Uxvz6Iea##5|^THPeKH(e{*L?ZaF-ioixoXEy#U@>P_M7*Wq1P-8s+c@Qu zZoxgTuB{FfV80N!{m|`e^h3$5qkFYQiFFUu@SNwuYI^|GqjPx}_qSaqoo#-DUYXpJ zanHU<9LHXyNYP^5LKSzrxC`q~FKw6tcc+p65Pw%%|8s0k-!og!a zm~pgQ!lV}>s_|Kqw>P}^hrR9am?F-pU?V+pWS(F#`TgN{dAS*ZP^5hZKFuqLkDQ1P7a{VG$wwuQF1 zti&qPyll<*`@u=lsz@5q8wiB_><_t7I|I}Y2|-Sf>1zkn-$i%tGg4O7)jOdm0Y)>f zcA+nl2?^&Jf(v1D;0=U%{Z6F-Uc>rNPt5JSH+H-X_?rcsY26Ja>2L(MM#+_Uw1v-X&wVsf=-XK}zt3DzRmn$dme{K+Zspc9Z!~e>M`h{}W z5yK~ecE%Cy{LTWkNYdTQ*pz}@EbLfJmNk39z4K= z*x<3M;32yIyQm@;PwPv$Rb(q8zN&9sa!es7O~pt27B7rzY?#EWR1GM@d`pB}p$XBg zZ~JucEe&?Yhq3O)@P<|!TwrHZ=irKQMMwm6>>yf%(Nv;BVF7asf(;@q^l0O z`B+#&AcST}+5v2Akn!AOajP_!QDQ+WXgZp%SE~C> zTu0fQ4*ULoNHB}LFo_BbauPv)3LwBsgM3{-%u=4T-)T>Mhm6!&S@OEkuhddjB1PbkFxHXVM_9;gPSb&#j>w0)cMh;@p&j zZYxu}s-n8KAl|gcaQqe`aL9;({53S)2mgC9E4I~K-$S)e_@yRgH0q+}v&t*rvEHMy z-%dt%M1qR!RwC1BSTUVX6PDfc`Cp}>lkOo${$PMY@d5nyN<8EFe_-SxPHqcCCJLSB zun(Gq&mWvhNSAXz-g2>ERxUrUpw1Q`o;U4{7|K^ z-iwNp0*mH%>-Se`>$lL6UfEt^af91~p6}-Z5VS{m0HjuwR0Upcuui}mU0>%lX$V)N zb6NZTJ?ae@a~FJ>7j>=WNKO;m8%deT<9y8(j^Z!HUl(^_;99uyWGrtajE!wOo?`1C z44zTF{i6K5cI28Lxi!epa#q7J3P_i#MYKI>btSFj^A)A&gzh2RZ*66`YXhz*y|Q1_ znLtvs;6KC5Dw9s3fE9B2Uskh?|O+o2EMN$c|>> zJ!NMik=x!f;;LBG5Q-9=t{r7v6;&VBcmo%!#1@sE6gFEq4Z)YOz zmZAU+M=RAinA6m9xVR!Dvkj);;A#Tl6xtNMqH2hE&3fwtPLzEE!RFlRG`2;Qe1U}q zgvNhcMYd+eG9P@#6HY9`0&*>=s21^M{2TMAVooc|xX@|MlHgXQYJ^D6G^KDe|JEK2Msm>KPUxqBFNi%J=M*dD2HtG7l2joM?y>1V|kW@_=; z6qLa*tZ8Di&Zyu-!cB33QsQ-4d1TRzSfusVB4QgrvGpkzRnLZ9DH~C$>!w(tw>teE zkT**@dAACynIdqxQE2^s-^z){IE3pXbi6388ZX!`hcQ9;$`0RYX*R`S8bH{EYv&yFDaj%i=TcP;^A!J19WrnC#;wEZqa8Dkw>|;7v%iA zfLDcK{liz{hV+rFOyD7%W{=0aaOa1ve0AZubl73I(EAe=P{z!-5NOvO8rOF%JU8XQ)}?r(B1GcczyM1zboW3!ojR z6;fF`zl342{-N{R zZDCKrmt~0)Mjwg^`vWMt71mE59tPL%G!Fok&{ie;!6YKh91lz5>X^2)TfAOeF=lAB4}y-m>?i%7BA@1d#CnvRUj0 z^6c0&0Lp39swUMm@f|MASZvSC|2LpQCR>#=F#PMTEcHT0PT{C@uuux@5com$qg zdbW$N!9P~Fp%T4Xu2t+V$vF;Hv^~`U9mQCR+1~CExuhg&xsUuW32!jMvbJ#P-Up5ANqa$0{H*D%G&Wy ziN-dzJ{JoAbQuF5GUTqo6dKEHZx|fWl!(3jDm!VH)t3z>25W%u>6dh&}q0=lS!^gei_!RyuWwE%or+lZ>`M8 z)~vzn@bcE_)}F=Uul?`@xOnFSvbK|$M;9ShmPd!N?%dWDv`QrmG2v*|OKC4*^A*`F zyr;`9G$ztJal@+d)%wz}0Cn><#l!U(@v>nRiW7QsyM3A^-xa7w;7f<%Yo0)Og$>Y4 zS-mMDxFhhwe}Oc5ZDe;oR|z5u|p8< zYPlT@O21A9(>nG)D34X->hCyg-0QDISXU@nOr)z7@9$zM?WH|a@Lw^wdojIyJzMNK z%CuPPuhE+_(p+N{95svh_{0qEp;6tvMe}=S68PgdUk(~cnXC<)vCXXJ26BuW`~}Ga zl5_}jEykB6P7Gi1{7nLA3K>dkFF45#)l-$JIpW}Ivfb4h$Qe}p{l_!)|4{V};hD67 zmT||nla6iM?ASKH*tTt_W81cE+qTh@|K6F!tg4>cRPE~MJ;xGyeZ^bG7St@W`l9@| zhn?hZLNBSmG?!y47}$j09~4YDH)f%IC@5Yx zG7tjtu$0Ko2tTKE<_o6WCGwy8AabLXC#Yo#oa?*^J{Ml;XTVr3$&hvH`hL(eT3QPE zcjbt_HD3=e+@N2gS33C{`2MR3a|7Hmfu$AD3}_BNXHJVWkL}8BC!AY1+|16f;Gjp1 z528`WFVLqYqHb~VC(plc(U(s(3Jlr7n<5VghcolpgZ5IHi9HVl1swTaxKBaoymnsS zbLMGOWlK0}YEp&czUbHjoEMdiqX(D0b2S5OfP(c7s0ZA1fqx7$Huax}zWTO8=DXG; zY22j9rb9#Ha$PYEG&%TOq*clHwieYJ!_Pb9LFt#=<1Q%7S@WEZ|7yx`c&6@_bIzwKKi*o4zc5;MhRFlA|$tWk=>Si&DI+j{hvz znt1+$U8RHBLnlM9q%6)%`^&1@$UxTKSjI`bKjF7k#N|(*oqdFQxzXrq9K`D5jT!FlR5B*uezo&GYKi2eA4B|ud6+TBP;W0Vy!lw+OgQQbquvsp@)R_6biLW9+`?58NEpgHKw)XQH}Q-k!D> zg;mX8&M5BUltKHk>z-W{LD~pi6&r5Nt!B?}T|HW@ohhX1D3CRn>F^w>ZXl5Hw|SIL zn*I@38?rB-omJ!;_bDYXeM92mIjOO6eG5AWZ<%QaS9r^O*`XS@@-`V3guDGopG^v} zrhjMEL^_gM6HQLvWi=sMYY<2FBHdy--LgQbSaKPE^$~BF9_gwyr}hy&Ce!E=`Pfhr zhZSJs-}xjG2W+}EBlg+jgTx|zO%yRNpA7IJ5+&G*;eSD3LA%Sy_A|u#zP;R4d7@)g z=A3)8H~dT3%UopTxlBhM$~e|oy<hak%ksUzlW zm*Z7puPnAXb)bJ*vF_l(@g5rY%#CJ_ck^NN{01i;rZZ#?%^42_&W8m;0^0WnQlJFR zR|E}%F09;O*w;a?)yzH2MBSP)Yhc(ND0eWUTB*(Vl5cJw$5iFr`)5M++GrcK>hGAs z1~M9X(eTCz$&LC@wh{4`ap)Et&`k(&Z<6vR8^|DH-D#lf)M17(-I_{EH-OHcO1r%} zb8+2mQj*%k6Y6~p-q@q#lVsg+<{2Vm41=TmP)F9rMJAF^dp?#Rqm$mQ+F;W-MPv)( zakLbsRvp@LW#dyzWB<#{SE61091{saM;HMD%FBj+*&NmrDeK^kW5mj&ul+>!!)Y^) z16=p=urp2b-q11{L&+b*3NKFP*ys^dR$|mcut8EXf|6BHW{uMGU5*T79N=R%`g!0b zrJi!mDyx{`RXnz59aiHdb!r_2lAG*NFEkbRt|1&Fs2t9;%4WI;Mrsf- z=z;X*_(w<;3DcNz-zM&>K()O636i#D!goqC34ATU;y#W=pF(r191amIK@ldKa~qazz&F#K#NAU=t^VD~)#9j~1f&RiIg& zdd;wE7~QHDy+uud?2z%eDxScCLq|=p3_p_Q8}&2vgfw;%m74eQ@Rn_rAi>RpV8$n! zsal=_ackP9Uc{?{_N;)j$E9c`;5+$i(pz)=IL#H0TXjzI)ZlzoC#$t_74nxJpyc=q zgy^xlq_f>U!*cvX=8(){m`zTXzYe+FhY%{7i72G^^J>L!ZSB%P41ID)#ii@EK~x1| zFY+Z}7iLG@_E-|}hd5Z^PPeV_$_(#jyFm!K+cq9LorjjFOW~RbvY7c;@DP8}Tk7yk zacfia-o^+PdjhwO--isGp5PS~vV+Kk%}!Ga9Uym30MXJ0d%nzMAKrWqKYSB;4V$0w zx|!LGbItrSZ&R(iAOLGep6MjX{cn?{C3p&7B>Ui+d1@1C=hwd|l!))0f1mUoiaEJ_&_@?H@ov6F zL9D6U5*6nw)+NSwG&?MUlz*o3AV1cGKG7045Cv`6#LDcxjM!Eh$gYV*%1ey>F$ZfX z3{LpqpmK-X5RX?7H&kn8<+QQ1KH(^9(wGvvQK7MzgAtm)76PC7sp9Y>3hewLm9WQd z%&H_Lu(0bf(n$R~_SHwqg&7>Q%EE@IR z>&lnrVg#N^krh)8ccwg!@MURI$_>8wVrNa6*!gH-s)U;U=0^?;I3m=DRRWD5bI>Bx zYN%D60-~AK;cMOdl&AatotI+|^&aV|OIGe0c!vmTM+g>T2Vh;1Yo^+!#!Fw!^%vq5 zF)I!j`y0Rh461@EJ` zP2yL*K8x5rGu*wNxEy&I^r1YgE#QDoC&)$f49Ht@m@Hg{D@j0HlL7N=rk@BJT~#&4 zv4XCvEkeOTnNTB~M<*el&{DfXrEpJoA+7_VIJ>Rj*-&i$UL`Bjfu9rUc&pcJ0$QS>b1YY|+4qWN`OrdDez?-A) z4S;de0w`b3P@D2)B2p+}cm6K2)OnP}Q+smKN~tT?LS8mj>1!7Es#K52TWc@KEZ?F^ zRBhkvhVZCtzwdjEc&heNQ&@10X}i%#+s*G24UB}qfTMe7p?fD?Hgj6myn+!C2!>#= zBRAWfOz>y6g3W@0)vlPf{KSl%n~6-qTX)OJ&kdyHOL9;~k# zvy%6)_P z;h(`gG!kcUJDkAkno%R;yY(k?hpqo@|Kq$b*0B$T_*5HY(&;t8muTV7#i(L9U2aPw zX)>E=OgBU2O^a@SvJ&Z0yyI~4{L#nz*?R8#4ufRr5jws*rbj|Pj5e$EjAV7Vo0#v> z=9+L@zy!UfkeJ(sC0ha2IayZi3HB9WSSos?NTqNVTCZ%Pws@q_ z4(qq~_gp7J#J|2}bN=@{R05aSK5TG?7`bP? zJ}ai4@~a+9J_EFflbn94ZhRiMLN&uk(BhAl#kB0B#DEaX#Q{&)d_A3b&C*eta7F2D z5v*>?g9R~*(2#G1SB@_IEY=qyQytTC{7f2)>z>2p!`A{E)?6_nz$ezaCPb#kdJt=O z%f$SKLUL2Gji_Tfc|7{34bjGgD0@(=BML_56hl-0uVACb%6NS@l%g8u2>b*MetPR% zkch6f=3Y`r_ie%_-E+JL;0m8&N4@0_YzWp&yX3yj50$M|k#ACU_bJ=E0;ew~R#8{` zH=g?`EQViEL(OgpP;U#}jTd}+ODdMe{SCidG^W&qf04qV2pQah7pYU!p1NI6;C$5* z&rPH-949F5f7M_EjQulYbYg(clSFTe4Qb3z>RaVXJ&EO?AzNnp`_S-&dE4oUm5u@; z;pQ}H=w)XJD*q^lCz(Yp9GHD@wB9rwea_o@J!KqQO%au&{69elQIXUd+^pd<52ouy5 zJaW|BoY47Rz(3=u%;uSWg8TCCuY*D_wWs_C@Jk8O0_xN%N>opnc*nq{WyV(G8eS+? zW{FzK50YG-+ytL98oj7bB`kV}o=%d|6^D#e7ICKckeN(6Icbg`a<0^3sFq0k%o3`q zX%(WtSj(gWe0tf@h&h#`h_=*Sqo7#DkQiw>OBqhY!5t;4qs(KBD6}-mnL{Q9+%{5}kXoFH_TO`=JbJTf@N2D0+dX zd9U7rm?e$R1u)wmZz`V1kY|l!!9I|QRj0Kp6L>^qUp(yW-_4rKmJ5OgUTUV1Eu;Uw z>W~|24@7!q!QzkRN+UuTY7@{iNcLkiB!3GUip^m%S`P+G1e_L@h-!Fh`XHXt?!5kL zT?|S{>dUCwRz5$LEn?kvdK10avKZow*tLqZRepYo)(3lkakAPLU|$)Tq2kWd3#8z8 z{e-3C%`0Uy^#n!3k$i3aI*(lY6>#eBJ#=po%QrMv8tT#o!LlP_)S6Qwof04`?p$~5 zN!84{)|X@LnNx<@EV@M&UB~uqFo@X|L|&TsRd!_qeekEOwSzBh z!#m4V%Y3;2k$zAaQAtq7d5v)iGa#3Fm>2Q$66-UHNXnlAJUo-!OA=_v2%YCPp2w(f%gdGq|Qx_c6}S;2}HTJM{~WF*i$on#$fx zCp1D_K>?Y*rw}eIvvv)0gX;R;o9yOyN@Giw%7!OmX89M~r^GzK_HRe8ih=NhEFJN{ zGbfHtQ{4MyPcMnU$q6b(;T=IgPs#)u;8lQL>t9xo*(}q z?(gO$5x=Q2;HaJk7pq_`YpPbzesHjPl_z^XKV}VqI0+i(3HmDsVSbE$CK%D98iFjO*kH;9*P5HFFT?7so^~R`>SuMm5!wEE>1r8yyj%VX2~vSbBp4A* zXweFul<sC3(aM#(r0nzGs^XY6KcALNi3=;oLva`^qLJk>y%2xzYPH%oT9vJ@FAOq@TKT zg#PT%Ex1+;dz0H-RlU9?*Z?+VQ96|`o@Q7e_fE`7hW&Y36FKbGrbfMJB))d)M*eUi zm@a+hCZpZIeC8lj(36dqH04|IY3NqTrpydBt7p^B?8@+!O6?Xxg+mV>kRDRsx6Lwc z_*@qFo}g`cG^KG1V^2)NpJpAf>QtzFU#ho6hHyUk!-*oxT_)UC=dOt~(M4`3ZY(JqKVg~d4hz6~h zq=M+~u6@34J3@(?RrV}1zv4LX(6i%eHX10_i6Vi>&Ss-UB`Ml_)5&n zs91Q4;StR` z>(6R#1m_b&Fmigr;R8$gE|NeJMjbeEcmR)&GJzQ_J|q;QaKb}3JXxK~$@XrxtF(RS z)CN9tf#N|6S4loI2iF-Eg8tyJ15hwb>7Zn!Rv|q;(j~yqQ(7{hd)aQkaw+5l3gw+a zc(_ze%fR{e-@N8Q?MdMu_3VCtpWlBox+i0iz_|0mo?Dci-{fvl>mnYm(W7brRd|XfP$Ck0WbllAx!s4=#FLxu`+M0da>GweK z!j9NBXW^XteU{2x5mt6I66rMwfn#rGd{^h+nA`p~wNt>+iypcCou{T3NF64Gw~23h zT+P}2jnDnszbS;|*F&`g)$h*Nj=Iu+D3*6%V>^_m)DITm#oD?BOjab5UpN=*#YoVr zuA=sfR~PCCtb#k^JKodO16-u`a6hC18w;*$?(R$AW+HyZb3 z51XhFO9bXW8pE5|)|aZoopes>lxEc+?Z20qL63h;BBT*8{A=se?EUn61AYKK?tz{3 z6>Qtyx`?1gbkRzw?QsKB434AX2~^HgD29&KET3JaR~c>pTg@i-8lOOs7Qq$Q2OW8{ zKUhQ@Mqq=vlySGbM5ueNYT8*~dC?K%l?P+bG)m^VW z8_-s-=lSN!(ZA$BNU9%gt4gh`Qn>4Sust`eY`)Ut0n(|`GKBWQsw$lR1N#v zR@!`-|8AJ?(_uWv@nOSK8J0}UZ)1kiEQa7 zAo5gCDb@$7pXlH%x3zEL5AsZG>OTNg3?BBDEvC#9p9Wd2r91%dvO}`Im)vHVGMM$6 z{de=11A!3o+#@wq+qhP!v`boY6G1aJE16K-XIpgYsY%p+5Gij8On0%q{ia~etUaZ( zj_^S9-h_HVaUiYMe62{St#r9XM#%E*elYkcwLT5)xc=V0M`XQKYwH@{BMMJI5zx$fp&-vZdaM^QOfCt_8<}X$*e2AkDHheOvpb-ln4FKC-LWQl_*N_<3Sz*6H|K(JC z6V*q3bsDxR=~`dL+4(9_eKcvRM?x`mf{7*^OZ)l6dqmwv=b`@GGX(t_=jQe@ZbMHB ziW~o}&+b?6M;GqR3rJZ3ytRVwHAc&4? za;Jx?z|z1CKnxnMCYjTz)Y@9IE%R*ki8P_fc(1%@Q(1`sR6m>4*Saa9RYCbMOX?zl zZ*-MrZDKODN7ynuYuF%H6>1Cg#VcGMH3#4nZK>qyzS2r+RPbr0|RJtE_NMdGc- z!(v|$j``8alEd;C?2G0o7&0A9t3nbY5uoA=sZo0|9sp362?yYxYm&Yt`i_noJvkql zR>|U)g-)x4JfA3K&#pKjhh`L5kUa|yy9Asc2a}(7`O#4PB<9%e9W=b zAze7xic=ZOq4a9N{=u%XCt$zR$~rig!ejpYclmwI4QKMZ^rWB;0^BL5aTaMEyKC7> zz}tA8_~s^GjiKUPw##;DP-alOEN;rs1~EeA|FfDHhQvToWb@VIakolx%5YM;nIiJ^ zRXxhrE3=}vhg+{a*_IVukN(`$T%kUHN{dA6I4L9WCjT-L0cRlA9|UF0S2PqU3PD2a z4Fh1_*`y3Qn(EH=fT%WjJ3EwXaZic4YGlcXb6=F|7W)WCt8Ya%fjS_Mjv18_UlRHf zvbmP|5x%nqz=F#_`Rf@7S*BO0~J(n4#w*!#3Na2iE zoM60zbth}$A0F>Qkhj!>%758ueI4coBiqNoh6J{woPI|5~X1fR9xXH_rR!{D72$WGf zj)|NPG*m)!v+r?FLIfYv3F7%rSPavS>Fgq6<{#P;3+To4+k>Vl#_&H|J#JT%D(+6@ z>IPCqI1XR0`G{b#Hs>zsUJ>wm7a>tN;|b@np=^~@&(otd!mjIMFS@}b4De$S+P-wG!ibsUPhJeZ?-|XTrDoZY&LE~ z28am2y)I&K*9DA2Pz!0tj=L;aSsGSmL&6AX`85LpfY(79!OdZ2(HAe^b!s*g(u>J? zAOR!2k-1qI>{7a$rFZ)fxBFFqktDgAu1s-Vfqo+QJ2>IpUnIlqGLIaId&wY=C7kCw zCb!rchproL5FbzsF{aU&B|WXjvO?Y0oDkQir@n7fwr@I}xn?#zCbl7KbPz0JH;$7; z|4FKESiaY!<{UM(0`D6182@1n95UAn$c;ZxKPJxj9uFBE{xBGvaB*bYnmL!ySfDK#;`L@j&tl=)i#D#G z4d7vseAEh&Wl|*-l>xO(T3u(o1ubgFgh#H(9N%?8!$PL955azw}fuq zv8Maqc%|_}>;hB?Qkxc1f=CYZWvAbS-Lbw;(nPTSZgh{OSHnFe}U!2mDDlwnLWETulR zx|ba?1i%!3IH4md2#a{%hpkinwyZ!`&_YybLC3ijC5L%LNU+OgQm+$~rhjK##L7tl zT~*DpR3Mq94ZY`SoffV>TGdtgH+4OB8FSE@;_WOhoV&!yPhaQrRzc_iOZiXM zAEct>IpO?3v{T~Zc)~~!_D0Km3Q{#kX6yMg+pIs%F3UZqqI+NJ{w7Z};^A#K0dmX1 zYle)8O(xY)_L<~TeyP8^5M}1Uc%~uKxe+dQRZCK2VGdp_sM5aCQ=;qfoI92f8x$TD zmx5!~N)a0**C(2R|%$$VGe-ZGevX+ztEjP89{8XXQ(VpRX3CD~H!LKF{Ql zTx9t;{tZ5NVfpwDqk;J7FJdoL94J;zPSthVrXPT?0=0&67DtRp^2^Cnkn?X9w(m{i zk(?F2yHVuHtA!Ien}Td$kDO#LFZ#W3mVEQapUx-*qKe=vXRHqi68N0v#0m>;`|@W5 zD%E<&)Y7rE8T>$^wG&ERw^2iN)=x~{E&f;qTE8te?hb|+Ba+I6G_)xg7zKjATg3;d zCo6xrWIs?3(q+=AQb;9NmryaRQYMUVN@GZe*l^3OL<&@Y6P5>-cE47Wv2^$uW)n$S z133U6f{cR4!4P5y(D`Y{xpRc?%JKh2#B|Ufm79*6AQh%t!F0gFyk`sfWZUCC=AUPP z-H%v|RX7-l7A*7`r{^s`m2>x zSw}&z*`Cc{^)^;oICSH@_ZJ4BGBcx38E0-s+JBf(crvO;LU>ywnuO6hs= z9q+}#@UV&e7*xYft5!>T(57x5qW;98#nor&35QEh+lU}l%k}Z%lDVkzv?BFt16$i= zZKj1Fo|3XgIovDOh6!o*znDd7LUP!xfW`C*m)IFo!oHE7DNA}nm>5=uc+~EJD4k4s z(o~6oA6nf?hw}yf%5?L7CZ}yW5{6eA62A3Kky*pG9zccZTFaqBxTtu)thl0#EQM!l zD1*d(wO%{IWGqp3NrC1(Ud(SEh;75%$|$*k?L6oST9K=LS`|lky-BqJ?yHim2p-5k zruqi17F>UVvp2*2wT{wWZqsG>@ zs2lIYcANANMknl`P3hM(olzD$8vG~fk@UE$bsOQfaidzO+&cq?Da{IUdCS)#f1C7< zTx$0K!UJr0DCsd*LsdxHogf%5`pfb*Uq1$|V*cAgM}*Io1HG-?c6H5o$n~rGvlEWh zqI{jnDY6T0>}b6#oC-jZduZ(jMlQA4xVFFKskzWIT?xU^N&k1Rm_VS$i%`f>{04de zuH_IRgg@rtA!C^CFrf!6#2gWXMWo=**Ya0pUFk^ha1lwGfaNH{h$abUOxol}g;+li z-U%m62_Mo|BV6J^<@-YLUCGN;W$8GV*}-w6ao&K;ESJ^8>*CQ~Tb=HkzXvlR0mTfL zYgUO4v3#s0(Y%%#7XD?peYra0l43cUXs%IL9%+{5sVw_h;2K(}m6gqXkI8S3S?(pO zP_@?5E~bs_Y={!Kr7Bw+5$><7M%f6x{s3YIH?=fp2G7&>B|{D1f;|6&zldcb zZ?+h~1sc%a{P$X~FSS>=1UatEiC47Ets~R=tb@Q3Y+un6t8PhtRsZK*I;YB%~N}>MLGjtsOJ7RUiI69O> zlki)9MxVPYN#kfE^~oTI^?Ab~6|KYK!rmg=x3M$NG4iKkU2EE!F%ZsQR4>pvpuWcb z;IWt@Mm{dv^t!`LA^2Unzg&u?vMeD2U|E*dnjsW^{g$$kRjC9F=S^B<#c>!cB>~zE z^m$pCvG%Sx+ZRZ7Nc5|@WUq)Q(9bgHI*G7MeRfc*ZoFTG~ z0_&LdYv20a8TBq8Yph{eYt^g&eNM-(0m2fztErWS{ajUfGn5rb1~%>WFm08Nu})`T zkWGJ|6-zh6lssW^s^^mmTW48KNVj$HRFcG5Wy&6PW~f@mtJ1wV9B)j4G2Tmj2{r$t z`p58}b@HruhY!cJr~5-xrp1Y2rsd|{^zj7_GDMfq9-1xD8{!8i7Y&DI5e|n|76G@` z1B6p;IM9LhHa^1KExqr4_{8aEFa+2Azp6|x+FFXcPz;F$s|}JTV+LB_ni<4NL!(tPh_(j)uv#_4g?2IbZT2mtutI)JKmMwC(0w@HU+We0W(D4PB~1A**927gsa>j8%n8^ zSXC)2b}z1`W+}n+3~Sfqnbybhr^7c>i?4P5Hfl1qAtbLa09$JUW7*y79qaLpgvP0Wx@4}H8#`x+|zI29>AoV6ciHo>dA}hQ<08`liquS{E zl0-!CVu*kEJtbTgN?g8&oj^fwh;X0NC9O4aIxJVfZSaxma@Mx-#?xQ~LA)`7xRx`; zEHc}2@47QC%~{HUT+(PCg1}!Rj)n7=Q^Zwyr?yurRYNPi$% zSt$i|WL9G)rg~kOs6N(PG``NJm5B^Lxwg!*SjuFJNV{aCkz`F#CO}6BP^q=p-)x9P z(@}40-dsqH-awsVP>yYnDq}q|++HBLS`QbYqQwfCxo_-_evpPbpy*s~6fK3n3@1Ji zl!p8)v(dsc6VDqfS`=eF+I*tEs=|tOQB7u)xel#LV|gAS$GUbrJXu`)yA3*pS9XBQ z-rE{wZ8)Y(BB8v3ic#g6(Xu>90(+TdX|P?`*%~XxA8#v})UYF>#7?V%v-mOtUUiLm z8L%-jm?Udmhorn%(tXVcd9cw;M9I|GeRg{3U%E;(I1*vBR&IR}k*A@BrR$x%y>zi@ z!yUl?ju^%ja}&6`G-Hen)@$Ln08}CeTQcJ3IkU$Dblt_a=}B8Q{)IyLW#BOCF93fC z>p&=#4ys_ui3sjM2;hu+VMfkJ2-3)=PBOe~6AqQm3H>>A(<>DS`O_{Dhqx#P{Fa-) z(XU?oS@(T7M}hK0^TD%@KbUted_&zX|JhV!&f%QqDmQ-_N|JMI*G28br|;zbEi+`P zkuAbAgKuiwm!*F+n>1Xietf#w`+V#@mVyB>XNGV8&1uFR8szG)bgB*D{B!?+Njsxl zQOyTU3_*|5=ybMIIAnVt{SN(g=mIUNE`}Y@M-ln3H03dS%I{HW9S}h>@g`+ zz-$FXGRT0IOtHGi8^F4;!WfSipff_AvVY!AH3nCy^%Udn47|*H4Q|c|Klkw~2bG7? zP4TvHS2C~3Eo^z8&x`j~qt`4uYerF;PrB+(gX&fT;I-Ug%!e@7;g0ALE9Cr=mbH9} z_c0A)+zd}})&g+RBOpGd_%plE;RtliKn~Ja=!p$hp_ySJk3+4@Tz4!*cM;rFXIfT$ z=$0U>Q|7On!B$OgYPjTrpO{SnI7zod)ko1YX8TPO?jFLa?M{t0`_xd>vXa%O4qtRYtsYxkrFLd3%1qOsXnfN+`(20V|MG@AAh>=ULmVz2#{DA^^^Uk3r_hzK++ zYE_?09s*HYA!AnLSY&!#YF3`fjwOTDDvJyCIO2RYo+f&(Xu={bs6wwX`5xWT-dd`) z$4CJHX{A~c?wm>vY(}*C+pvmX<@BxVF3P{CLsspSxvj=n5OjSB(PMTcV+ebX4Whva z%>`!3#b-^!|4v~Cu)PS+@-y8ZXzo3XyhTlPZ%ze(4MNArcdJj5`Tk!7R&aN#5?$qO ze4?=HreV11Iw-pe77s`c+t?7HuXw%%{{av~6{fN=4`EHJ4=LkV8h^>(+6wqmUWJ!W z#__cev~N~ExHIC1G-(Ha^2z3TOfT5fjtB>EGEzJ{u6Q&`8Y3CUf6CFI4Cz3m}nz3zpI@PJ%#*~9-k0nr~B2!$cy4{X{dHaSmSv4#-DnKqZ?KL;lE zARx9tg(X`tY_2JfGAm}eEqgFq0EI*0o{7j7x%(bARWf(ge-xldO_4`9%=H)S$lavS z`=5#%%`j%U(g!SYc#MbRmST6+0Z>fFy-GRd4!htvH1(Fj*3c%xT_*~%yZsrwBKCW~ zY~*dl&i=%FAn#%W+uIYt50s)9nsdiD&1Goh&z*NVI~Ujni?fNn%n~Ne)GUvMn_{Xx zwt{Zv2{x2v(;itiQF^*M4mv_hUBwVyIku+vE4odR&_TVf@Sn*qs?udy%2a)nkEyV~2mGZ#74*-{Xl<1fz!BS$JQno}9?PPzsS4 zz5kB+PC;R0VK^E@uAa?&mL$(ybCS4R9kd$F4u2s2h{WwkV4rV}N#h}-Ov1{Y;hVvc zEws-HKVYGlx_;(z!-|gO{i+Su z@%)gwW>PSFR`ia&;N%B*5RS*&#OMTh`$9p8_lRjAc1L%L;vIY7XgfL=1Z|R8cXxtIAP4zYMj=k`Jc2pl3O_eZ_ zg&Y{jsu;(%))z@?g7&C->*|52Y{kNh$pW4WvOT9Yy9|9vO?L_U_yc^w{y~1*pApmq z%54HtoV%r)8Rfm*>`tM;ug?}Y6RBw1$W_W6F_{l>OX{1t8JD3lnf+E zYy-u=@S_fWB!BhP1@u7Kt7CmT`t0NPe_~5pO|cybZ`_UgD)Czo>pk?kzMRZI5V*A5 ze(!$ueQ@u6WKMeXTgzIuEZb@eWO(po+#!DErAPEY4dgqR-5C7jVOn#I8KJTj5_n(j zp9o>Nj%Kg}iCbfuV8?%DghhJ~^npd1@!J=Z=Mh;T3QE(RX^0qoIze3sb?raecN>Rc z^{#wriVn7H7?gF#Ubr`cm@yNRJbP#S{rAHEFLIC!F*&!U*(=_=wj@-oWM_RkNtu1fBeDzKGaD=57#-U_l{j zZ<<6bL9@3~!UL)5rnONe&FI*VSe-&cz{I`MKXe0q%9z9ZOs&-ULD^1yv38 zRAeRHn08_9&Yxn~RgSi%L|2Sv(??GpTWaVYbXuwRU^+o&l$^;MZ%X+$c8@}hb{m{L zPS1@nG5iH{6NdZ(!=pb`3*JSXUP4|QY|hq}IkBvko~wBYktUhu8G9b>#_e#0tNS|5 zq@0aQu%W7QwvFwTeF-=lcq`SCG0rxn()C8>SK7A(yZpVroh<)=X(VF1;he1eK{+{p zr`h@K*s191g!^eOb64h$-8k#5nv=LJ+v zi4rg=wf~lkyXS`_KT8=r%h4IrF<878;um$#nk}zP?qO+mAiEth3~Hg_*3$AhkiD3h zxsvT2$u(iSjMH0r;n{Nhp%hd@8C59OZG1yib8zC$tSgV7DTk7oMQ07KHCqWfek`Ym z0Xh14y+YZc!5;qZr|@}dJ8Y;9vxvUgJl~2FuhLaRdQ^jYfV-902L_QE6jd1~@2Tr1 zNng0Vd|}P)9flhM`t@^%mA36n5*V+2Q=N+P^Z^M9J;oOjt%~rOs@WD|+wBuaYl)b? z0-gg}D4bnItArLb7x?uD_Upe5rEVe$Xfyroq;KkpCZOES7KTGhfE6WUadO$@;_{LU z>f;*EnTG3!jYF7^vuAE`6ek~Ytf+l=eyQ7t)CS;b3r6}xQ_J>CK$a4L4~|=LpF7zf zrQ3RQ^gy}&UK1B#Q-c@1C*KkL4cM$rwFh5Sc%l~BHcsJvbD{(sb+HC^A5m%Q<@=3& z1b5Cq8+x@Ie6R;K2=0+2TC#6+n?FgnOtC=Fw&rN<1t|yFig+vRI4i*6`W26)bTiK% z#rt%e2^3g1tgT6ul#&B!?9Qu$g`nu<4TjUhGWBz*o_li>uA4FsK^r%E-*zKB`u|a^ zCeq{2Tr9xmdNg!+B+Zky94}nTc)vTAbE^{_^#Zloll~sJxId0B)YEXW2KK^SN^mv0dmdNQ&?9VRis@y$tbK_D!u2pE-s&;AS^1^udb8iI?!~pp*z-4 zZ#JNTk5ML1VAyljaGvOCCz{=Q^cLWmdGq=Y4+U#=A^JRMA(x3DZP2*>qHvkOak~;d z;s46M&^WrTz&yXoeb6WCU5bB%SItY^6lV9ci|sfBU;Z<03AovCg;vtxb;`}q`3{*) zeD@N#x{}pAl$3_ZwHS2 zk=QLaBfnyy%TWvG6J062-)ey_DI+hu#4`B@|6tNHzOpr%?-c$c$+N3iW~|REhS=X%i4?C{bUEapU~8*(x&?IE1pan5W+8;^XIm?gZgj-I6E~RUy%=Hr=e$g zv8+dV1dq=SDzPxze8+IvX`K~asx~gNLzjKJa78MqCKCFn1bS>ir>@^Lh`3oZC>=l1(GIU36=7K^MmX4ioX#6MhU#6Q}6%7);UE-)-~KZ zwr$%^I<{>a9ox3;iaYAqwr$&1$4*Y(@4r1)wfAj}QMJaJcxI-8Wqadm)=*A(Zhy0b zNF8g3dmKF9g^y2LC9;m5V_0qLm%niz2D8nlFN()mIJ3OD4*LlnJx*k6WYVMLsg(x zBp@6J(O}dVh(I5OH-t`HU=}?ID`Ak!6J>xQ8Ox16(ntiQkUsL3)ib*^)No2pc!-w` z+2LGb)bxWZ4`urj^CSGdrVvie5@X+*Z&c?e8<9JC-8x5DY2?K#z2%{9R&^6}n#dUy zm-bciBF+(Lm+-fK%}?)pJoQJJ@^N0Cv13&H7Wv0DwtihwewP*x_2K@haFN$aw(4*A zYcg>K;6GR1eD}YwI{VW7GDt4vqi4*^?65Zr?YKvp-t3ZAEc)Kb(TxdVBGl09%FlJ4 zSYayW_Rq_J#;G4lsmrSb_1)UCu&fH+&{_z^iV|U4*N*H0orne;_C%Pyk=!kstm;I+ zD5sf9DtjomGH6M2Yl|&gMR%&X?PI3IiM9^!Nj0e2`iG(aIkAP^QXgrM1Xw&20kX7d zxXse#oQ22&#Xp(S<8(I5F-A+}R0HF05I@UQgSSvRsP^cSf&pugw9O>dgR~-}a#ICe z0_#P~;^Oj^%owOW!7KI7RQ#klLQnH!{@hq?vdfCsakF|&emKrA9PrD!I^U5S?j0@v zcy%=jQ7;T%_X(8%5k5hu03K%hl( zU8L{X&>lrOE@-u4fP4^|)ax<{0L)|XsJ2*Swq7GiF9UGkt9%yH^RhPeDLKJ)Kn?qe zhaI)6HLTs7&H-q2tYtN`%unCHG4s#*(d6m=lIaQ0p;G^3>VGYg8=yF z##r1W^)}+NY51y_j)RrmM{OUAMnz#YiRPOCbO-)jpJ~ggU7zaZS6zDWg|_Ze$`L3q zI3y-YO2fmXfJAGs7&tIlT;O}^(M{;LM5BV_NjpAqF@S)5as3toW1P{D7EYV3b=Awa$j1!+`C*EUtRzw8+NGQO$T1c+WVbntsh6rW}Y2R#X{=6~m1t zRYRSDnaf(*d_h}H1{AfWdGwx#7{{U)%pFB;t(k;|ZC!3^v~P*Sp*!K~x{=7cW^1@! zB6CT*sq5Mld=$6Ry3PkOrQdaeEUfNOuq)gbs*gGWtpADAnsUEn&CD$`76{b%aI3fd66W{m7{Ey1$vv0?Gph2SpREK$X6xQL@bOlr!VZ_Ih5ET-+m1bOhR_kq&Nb4Vm2`b*s( zG|7B={9Dz+H&)T|^lgU|m?ky%IJ+#EO~Z;mX1&gX;aTu`eZ9m^1NZ%FQ1j3+)R_%( zUNxQbOSb>dKZF*?!+OT`@?KA)zKNeOCs09zHd3SZnU8W=#76vRN{U8_e7D4qpD@mw z|Mz{5>^w0F3_L497MjrvgLxM#)bS$|oegsxS-bjD5l!Ue9NA=#Oc76MP?6NQ)_L+# zXl)VmY2^}(85vq%72iUO*Nk*gN{I%aGWQ>tuQe)gmqYABzmXK^f~!sWDu1);)(D{T zB7;hF1YiP4GsCL3ESHm85J#KWm^Wl^Z;L1rA~kFq)Mk&+CbA0rdz4+6CcnT%JQ_d* z8UzQ$0)fCnQ~-lK^GK%p4ioV62)&d{srtxLQ2t}ZbCaoV{2220ii7DQCCdM0>Bsg* zwSy`GOXjOWU4jKnQEMjX=YCDotftYIgOPtxoax<)PC${~a2?J$vSPiux)H{&2ESVS zhV+l$q!k3$4xiD%y_lIxF_Dk$8=-d6@vDTf3@MxgN3^=g01d#NAY}8nQHBM#>?Oit zz^qT&Y*uCdlpvTrb1tnnvs-i3#jEevwD&FGuvvTY8p0CCH3pRzjl2baYM{ z48HQm84983MiyNsl9-v%5v^4dnU&yiy`!prFV4BhP{N0(t}k_u?v)o4#9-*#|9G1M zvyB}*?Cind5U_9Kd*;r4AjN`szAU_ zGDIz4@1Mng24NF)f{f$>;1P$y%p>8aeq`tW{bBf%IZBf}L@Gf7GhU46{8bi-7$1tC z*d`sRpNsb^`f#!yM_5+$`Ei{b-(%QOO|IKd1#8}Rx-PI@@p85%Fpf@2-G3ysyAoJ> zM?cK;iFyJ03kpAT>5b@(kHF(0FG6ZiDO(X@4k<|{W+?vUy8_zBj+<_eZ81k(u0(mY zloN8^>AVOmG(g&dh$sDJ@<+^1VKQdVuUq7x`y>~MoxG;^|QPzS@+fOOaAj7=y5vT)fh#LgT?NT zDxAL%`ga-V4^bpRKqBi!e} za(rRn!x9_?A_5Y`gCe>_5nN>lG6Id=4kPv}FqpH(Nn|3@`1=gu3;|J5$E6`v!IPf1 zynP5@EbMh_=vf=28o0Xq0)vP%RqR3)8|mx~lFnr+X zdDMs%`g*vGW&$6%T8+!3r=_Gbs8KUMG3IxwQ`hjEhdIZ4oiY?QthvVhT6JI4l$jR` z^334_dZESQSnlRDJjRN-0$cR%9!xz_TKT6(I1yECG?j>di6k~ep;Ts0JE+Rm2JD=L zP|tX0wREcw6v!UJ2rdqXN5iFxwGTas@$v$kQPr)>U#rt=my^AfB;zJiU8loRtCODz zibIm0xj_E{HkF;;zEcDGY>;J+@ZXUbZY)wf7$yymOA`RUQM)H`7bf_r z3W*p#H1Ip<;f$JHE)xfW1AV6-K>oVgj1IjKWvw|_r>5bG6Ibs!-E5?3i{5MH`q1v> z#3*TQwq<#Vc+%g-JJ;qDxZ2*qB4LmQTFYU0m26_$G`MaBZ(R}4v{Cys1M8+dXPra_ zoQKP+nYgzR(X?k_<0(M^(hTTX<_Nlswx;O%0icbue*DxGhgdCoz9=1kQ@yb5(SqMg z_&)jYL&PV`B3ZHmiiDWI-}{}47;AqGAJyQ7F3zle+=g_G^5M#kblF&XUZou`V{_c| zXZ`9qf4jiKhCDsBVNBnge zRn(~}LeLz2nR19?pyGp%I`Uj+{^Mnh+}54oR*RSplzfdJ?s1!+(LOeVghCuJaEKJ> zk^cqsmcSY?yA(2DISP__6DKhXLIxmMfZ|t&;(;+WaAvHjl-5#ef@ae=lvAFlHYKSn zS!I_)WLx2udMPA_T41U^t+$gkEG{cF$Edmi_ZAuy(n0<7Mgbq-}^dDg5W_NyJ zNdLI4v!qkX4_Ed-&9)z*7X3%46`7n&jhkD6mZN%u2QLGXyDt+#eX{1L;1$!aD}X6V zwQq5OTI**3XKeem7Eq(RPzxtEUt3g0vrM-#689r`JgW{dNBrrqLp4~My5m@uT-Uyw zXS1Nx~o-JKJV`^S+7pFedqC)@YijLJ4C>e_shQY)4 zhE=hU0?T2XeowA>;;RZjGsx=#=;CzO7_d73_*Ti4R-p#zP7HJvkol16|LoMUcg3z5 zi%yEGTfdXIodQf`kX**ya%;x^b)#W-LiC^ zzr-(1OC%-s1xXlRP?(13lN7=+#5n&?Yl?=cAy3Qh7JfD^f2$`8e*CPXMOb;^{6Cyr zwou5E6P!dd!VodWaEc{}-5R+P8kr8tEXZLu)Ra?@3N?gmaqmaUMW9UgS&rUBwu*BtB#4%R+X2>vG%%v5EbP$t@f$(DKwxs9`> zXH%hsnHo!UZNJ3I|K5|L>AUa)Q3#Cl6Sr$%a2*y?Sr!qJcM?tOm z%)60_FXtFzzBCf0bwz7#S+^2wCiR9(&nemp;)Zp}w7RFVW)zVR`G|%jBSPnUr@78x zV%dQqvwAH zD!k_E|4E&rm(a&{@4sA_ENkd)ZJ}2Vs^F9N&t7|{B1rL|w4}dyVIQT4Ahay{8T*rX z(xPBodD>rY%C(!@c8M^xDhZMkQ?D%54H7t9h>vGwxXPXhca!MV+D|d%Xr15x%ie^V1AD4+tLhLAm!!o@+VKc$W{+o zunbz*-mZOTvQofr$t4ltsQ%2EOTXIx8G4Vn6P~vd<>LHl_W~PMkq`xwiSyT&3#oHs zQJ$VH{4$jyN`}L87RWRW#c8evFu2ig^y8$e$;u85FsRvXku?`dYlF5e((4&m9+rG| z2H@QxQ5)1oL#_{9L=^X_8WfgYv*WMEABAb68c!vU0Hm?4X__=u0yP`xmwoUl9iz7E zlnR5cf(@NVxZ43i8-ly1Hbiq$CG6LHK3}f9@tf+q^$Vjl%fmy|r~ zn34x*+J!tTwR*5B{FGgvJ#sf$BNR1`?CdgAhUyEIZ9kmI$E7nL^ZxLz+7H#u%Sq07V_T9ubuMpbYi*$+wC9n7St-N}}*TCm4^ zyA%w``L%RB7%i*+A4L-p~U6pR-jK*&nsd*l6Mj?~*3&;3etc!ma_j z7=d8b`l#dkC%x%h1+vHw7SuYgmPI4_R98dAvJ9^=JXnarp*E#jR>?DH1c?3r#RDS_ zJO=ORIFyBp%dNCvp5XL`+DkGrUI2mc5{_s&F92hin8RfFwI@8-j&cfbP*GS^Y?NSt>$R<5#`!yT8d_u znSrRi^7b;z#YHn@n@7dt6;X4=z2_jLm3%W_padYIE{^~gp%lXWCTmgau4R-b;O+bv zB&;F^;V@(iuxhj#30I6c!32(!4J$$aE z>GZ&QDPiiF^AZU-{;-ACGgTN<<((EbgW+yV8qEf|Abhp-+Jn~SbEznrSMvd*RNSr_ z`S$ZUY`RW;e-}6UH!XK0H<*DvNgG}iM#cOR@5J7{a1100qRC`Z*$UANb$BD~045!F ztNz~N2v^r`=uO&?OkqSmLif&xN^N{&{#ZLqyU`r!VI5B09jj5xz8le1nqHOU z!flv{Oc4Y(gYna`BG>xm-6k;Ra(i$8LnOHMJ$k0^RV;h1hhi2tbcJD=9@S}RdGi18 zOPz;MyjEm$$X@M+(=5<+%+O$i!T8cJ2_H%bJ z5{3jZ^0MigW$IU}6NfkwhHOo5DU*tR`o?oxyqMOo|Hr}6#>dSnz0U! z@T&Gy(BRuvpgM5aF%tgu?&=I}+oN3{uR7{2nm~mo9Gb(MU*!GezU8j(r+>c>qNII) zSg@+#NagKNV(<=ev-2SNa{?!(WmGhSDD@eL{m8UjCJ55E_?e>&6mjQ9Q;)i`a62QS zEoM85bXqL{{3m#wbxg=6<3ErG`5alNTONN)`mU58SzIW=HKl7)7$=mwUuK&LX%PzO zLz+twY~?Jm*8$4xjb`6Lv(07{KSn-v@{0YCDc^L zMi>X-`rWc@*2o}xj}41<(&`Oz>PCQ-rf~hyz-qu4#1i6x2M3&rpGuF z3#%0zXYBR~lC;k*sNCJa_oj?j)Rr2SXr3p_!OX9$0O|gYUTS6I6F|@y<9afXalBzu zjIfi67h!sAa_EU(9WZYGWsE;qWXUC(l99w;jgO#c;(DzX$Dk5N;q;$hexZ#pOQX#R z!&eY3S(LL*1lgZFpX!ke|NiJ9gN0b-s11i&kF5QR`;&Xc!%*vG``^NWQ~+V0slIjz z_{ut;XcJAGC-#vBvJDQomEZEQRo=DR!(yEH2hdQVY9p-zU9-!o4O1&u6MO;wAm3nL z&>stqp9?ajj$U^;f(Jmc&Q3TI43>Cp;s>LG2aR)Fgi=U#&OQQ>$-fnGPBv9h8%5Mm zsd!AI^&o<_$+UJ+IWIKz&sgFU6}yeErD4#Vgs7{8a!pA81xmDi7usYgd3VkHYh)oT zFW^pMu+(J6C$vsFG1gKXWfMFka&k8>9g5Q6mcjQBa^~_BJ=lu_Z^ea^>=3e8~UJc5f|8Udkc4i#Kls&E|i5^^D5RSe(+00i*Ka(D%s9hKPXJznneTa zH~Un-u}zodVXWbMxYrLI&$4n%i5*k1zH`^#x^@aP8|_wSxy43$>AIDkVbPIhYpaTQ zGmd5o>GU;gU|M`9UDWc6u_J~?H(m#Ge3yC_FzU&-zH7l<`{qnAn09FT#&Ao_tn1Nh zL7h~GVhRLif6Y<~mjA$^|A}d)IuMZz(!Vb#Tp@$sR7ww28A>-8lAKjQEzwv!2q-Uf zis6|7=0lUQ$Cfz(u(j6{rt{;TR66LvSO^Nto+En&wpufsYjC zRiq^FQYm(tQT((htgLH7?s!LC7B)^wH(0S9ykMv-k!F%i*9OYX$2C>paW`^}j3k)Z zR#MSa8UP0}Y46>f9L>Cv!OV5I2+9^T&7O2|fpmKTKu?=Ne2D!00sO$exp=jj3Ovk!9pfi(B zsrGRX%*Y+&>nm##S7EEVp}C4M^#ZTZ<#c@OzB;wEFIbBk{shPn{5ToixOXKBoy>I# znb-AGtS0BT|6O_bgxqj6&{s7L3`ki1GJLaT!SKELJzW1dE*Cf16`ho9X5sm7VB@Hn zvy9&Y-Z#yg97#5TU()#94+FKEt!Q?i6f$-j7VEb7GJJduChk-)fk>S%r!t zUlE_7?=teL=+|IU31Co3rY9mxW+sn(JoV?oGbX!Y!}7X4oS8 zSi~LgO6nsgc19c`#vDG9B(2aUb~2E>mPmeWsc`xJLC^1bS836>3Jo)kN~ULMC*^XY z80xTxFV*G{I39ToIOw=6OSKC0)0srJEJqQM!Je>7r&?XsZftK-xdu{3P;Y$mZ7?5vuQzJj?2~yc4fPmJ7^=SzTUn zdUI-dY&YIIa!jxBgy*g}w_^chaDsibf_wZxe4I53$}yE=nX~M8mYp-EDGL9sDf|fK zyV2oe!Qe#4H9ucg6g^3LSXjbwxuQBbI?2XzzNHZ+4R>GKIr50uW7swz{*1=CW53;N zVyD_sPonA@l|ibNY%eK9hTAdy0VXn?<2-GPOHPTF7%Qz08>7%rGX`eB7%Hqd(x@#G zqx*tqH|`8rfw99-<0`=CwZHbjm&-m!DA`-;u`)+-CwplPq4PQuoJP9!mKUZp73Vru z`D#db?WG|V@4VHegl;mLmPCGuQ+*?he%7!3YNfMCU(kltxQ66DNAaDJOMaD9hW+SS z=;n4H=)J_{Lr+AxzI5bPXLsgU1;T7~LMmMo2?C8f?i`Bkvy(0GGcn4J+VI@_guV73 z)%+*>g6Jk9SBb}7ZuqDfYR=Gx1#6mNsW)voxcu&y_>6QK&dExy#jqB@o1F4%4%F{X zM0X}U{#5|FSMW=zWX%C3VAB|*$LyufCq-LvI1KI|E9a2;B+EbAaWW3+5tx1=o;fU= z&77J5V>Y%J-IaxWn+nz2esZJ>Frgxn9HK4aX3CX6#oVKRrZb7(!y{zNp`hDDjwagMXpEDC`OZeov#3LVr;H+d0}5=sS51R}>p7B6?5=nB{~O z-l;@-D_0@)5Tnzx=h1PIzbT+f6GoD9&!ja<>tkMF{+)Z$Q>t+a@nda~&F+)%I8K?QKyfo3`GQ!M@esFtySfSrms6`sk zBlmC&{~Xi^p{?J?BhVMCJ++P#Lm`PvMmhB4Ud!<~M)rqMzP~Pu5+O9!W)6{pa-^<9 z8UDQG&r|pO!kS0hS~N`-6wxq?Ff|oQMuNi!#|GH0u{d?L7gpNUOdA)xRbSDgog3?3 zH}kcs@RGS5SY8fmAg$S;E&T@mX>4MGXu#_7u~l;v<7s3mV{0tQ*3v`(l#qd<57CjJH00hfjl7r7m}oXXLoaXyq(dSIXXfLAvU8-6tM^%UE-H@E*5TYP`ZJ+9_MmJ)V8zcavgVkqQQi=m&{<+D zyD`7jR}rNs*0Vnw8bM(}MK0!=2%8!Sa$e)T=-+;4f2K$QWB&Bb=$8BldJ1F^6iW9v z+moQ>2~O9dEfiXH?9Prk-^~Hn2m>BfpI*pdlWrj53{Y5Y!o8zG0hT0&Uwf3WFMdJa z2dvO!4p)>i9)!pwrgF5Yy5VwfN$-FMR}ho#;j7%j--k9K*?Js1c8aU^bI}`CXVhw* zpBMP;y$r;#-I)^1ax={lWr9PE^bu$x!I~5>E;i^o%_qiMWizfi_I@pjG)dJNxh2wy zPYJN>YY7Fmttc*aL1uC)aH*$-x00!JA+Co)`zX*>N#}wpO==P7V~KE?nrU*F*(IwK zB<&F73O_jJRWLwUI5BZlSOf!gwX9HsB~Q700<4*ud;T#Nly)D`) zERgfN{==>q`i=4>^HS4rZ%~tPU@3I%a%BWQLs~8_AJC`>GcR10fDuJR50H#*F+v;O z{p`>CSxNlGp~mc`Fyk2(GNe}ffrkX~zAo5}X3HA_KB0}ByaY@3aVI=d!T0S4GwRU8 zbmu9W`}^iVp-^ED)n9BUvSGK|wPKoA>iYJBVXwj~*~OomrS@eUk)V{7+AsMyn_zG+K=Ti$PmFurQn&fFpQQVQok7968)$mePHQT6_UE# zRuFQ7LR7RRpBfvbF~ZtAEzVWK(W{>YH5yB$YB1y6kNFs~I?*!|_!yHn>p(&pq&Nrk?`TQ?Ne06Mmu0-fPgI*s!XOpTHI%S4mA~DeM zAgjzJB*W`;l-k+*ble0?s4_Twi3x70a5GQq)#tdT63-VwB+IfslQ?PIs+og9gSkRM zKqm-;dT9KDS}t|6YWEjuQ{SU^wN4$KJTw&}ChA+|ILp`v2P@SW;*h|EkDf}xzxNQZ z!${H0MjCW}xf?!kRq`_R2hw$AoD(L<$WOyh+NMkli)LvpA!b!w>Hay#23Nk&!}s;OYfe60puH4+rH zXy%_Sri26GAgC~aarx{#9;o&zSu^=rbGcH4WqX{tN43OlDF{2@u7z$Z2xXpJ&WYU^ z*98M$#sx4r$6<4Y6oNN_1e90_{xFk^bpTf7Y_aiWF|j76v-4=+Rupr@>f|8gTMKF` z679D0bTAYsPVCYAz#?G)X|~_i7(rpiC`(Cbp|#e|Ov`l^R!G*lknCf_NHX=1==f{x z1ylf%hV1-O?eb`-#Yj3Kcq3>)+8^Ocd zgsB{Bq*c34G{}P*iD*qdksLxdCxK~4)=rawY0g45D}~uimvD{^!ck}o`nI~q2I_sY z#bC|j;`SUm%4tAqA~-FnW+tc>wrVZQ-~Mr;zVXVa+NsZw)eyIXN^;XfeW*-#A6dBE zC;9Orz%SfGlHC3p_G$cdtW>!X{2IKRW!GG&vU}J*1+r?AK>Xfg_&yZ|+od9FHBjfb zvT=^Q}{l=X+xyIbygkR${9oc}O0>WkI$I9N+a_uD)&^idEG zPX3ODU-c!$@T~DUJ*S-FyOGd9chbkVbqRhfResR#jpx&TyumV&9mNLzQwXSXgL&)C z7G=dtAQ~$~%ad1%0xp;an|+4p-ou)#yNMIZrib38)JgZ=b9BgND(fX`8{#*>xinDC z$b79#Cm0>LvPvN!u9xc2MxwwGt+o)pEaP~P4Q-98#9mdpICnD3uB*B(3A9eKrb$s- zb#eie!RW86$jK=d31t*P^42q|kuwc?YAFX2yY(WO>|KU72$)#-*KL}~WNyd@jP?~3 z(@4q)X%k3lTY+1asY%MnHPW)*ruFQTL#&|UO}$;JzKzD{FZjH5zmDIA4Q~a9OI!wx zsRfSdNPn}(2Qi9V(ZGz~!`Kos@Qoq_m-9oMH5E}5w4yAZcCDDcB7}|R9aL=1XVu;h zc6hsmY*6dp^>IE9`gIKi#-+7JJcS)hDpO-m$ywTuIg%-m&lc-JMf@gUlPfP2NXV(muzqJk{@Rsy`Ps`D$h<)(EalJ^&U1V4-TgLcC{<$+E z03{pY6&_c)Lp~(l;YcAYBqXoKL=q4que6Nv9K&-VP!#`xg_;M2;E#*VQe{2?-SY|$ zGAX#Pl8+ZoXu8vL5Hg3ezB1<>+N0d{rJ6Hm8A7BjJ>KQh%2!8B3duBb4d+A%_%%VK zwt9Ga<6jA*aR=G}(Fm&*L!0E{9dYOaHGU|yv3&FIIdoc=49v4QDrIdHF?!mR5N6C_ zU99_Lw&Nhivza-lebJOEIC&&2a3MogC=d}Ou-Gd%Q|W!f$k5sATQPF$fJRKMvFB29 zTIwRV@W2Vm(mjv-#cFffa&dNdI(QLLa9^7sw%?Y3BLI|Tb=A^@jRw4)20Cgihbq)H z%mx*iduUrXoby)Ip`H7(&R{mlF&^(RTXe=kBtlRBFg*(c|jiB#Yf*e3Q^)bMpNr1IM9_y`!&u$I1~bdhS!3 zc=CXkx7^+_Szz-<*(IC{@mBbX3>Ff~@tYd>qx`QridW$Zca9C93myqYe#@NFd_n7y z`$!~62;>9Xl2f016Zxy>1)trS3&ARWp)-)Ei`~uB z@!bNCtZ3mWK~vv}crHdCz6UW%NN2wU3g}F}j9*x!mt6$1_Q-cTyP0)|SjntpSpgxc zY%7*&!UC(%!0D~A`DI^Iv{-&${#{A(?VWN~zrE`mHl$3B7(^96k?gQ)!WX^TW=I0f zkuotb)0j4O*&(X{?S35t`fwzaDjA#qzX?W7#>*YCG{#reh(^=BOco`Ch@K*%6nzTK%L!Sscf& zDl7^hnMV_y-`+daWa2j_gc&|b!OpA8H<$O)g0(vSyEv)oKvmlI1|D9|8h)p3^$1pQ zZv~yhZ{F=Xa)YOfN)-tZR6_MIl*?CJ1k+9h2+AyiaV&vt%hwSO;y>laZtt(UtGj{& z)+y(c^NdinkCmc@T5~vM@zAH-Hn`m!@)EDGSnBxjX_87r$h;vMBg=)d;)c|bpK8sP zvX$G@+Ry37pT#TyxbIidsFrkIVi%t*>w)dp_`e(^U~H&r_hwgTlbmdROPSe7ev{Yk z(Qx?SiW~W?HLyeEmIVSbGGHF64fZei8fQrN%46Dg6OdAp8o2Do$5A>L92i1oD3j;-F4Vr9Qo1 z;^nzE?ifObMq%jSUpJZB41x8QzD^qb_JW}uHcJQH-}hRl%h(&{%wC+ou$LT17*KK< za3Ws`9yL;-c?dULm_4b97RWr^cL^Iq%oNs( z1!5BMi*qE4wsXQK3qdhqS8&F;7hW6RAsHbbx-jaAh5lmn(^Xam{0HhZySoM`PQS5k zs(nB_C=a!M6JZ7_wYb(~XfVB; zE36O;@z%i8hJQM2-&gdC%sGf_-WT&$f`ANX%x zF&7)O#7xonClGj~FuFfMGRGo7gdV;uW~$lS8irWBQ+GJyg+2NJ~(}&?E7R?S=+g`2XFmL8lShiu)*f92P{7De6 z>PxecO|~;#q}wl70Q+Ak_K1Kosyc}+E$k*%D2rB0lRK%297aH%78oC!hyjJ~dSknR)|xNak?{5Xm?t=QhCAKxz%JkFtCQQO0uxeEQjIVb z2`nk)Qe?-I;ixnJOHeHoSDt!KlU=#dZGxcktH2J@Xdy(dgDmR_hANg%Tf4okouq=+ zxUG?l0f7v=KV!*cT`zS(?&bx-1Ui~&OFRMQkk(H@&`FWfBjtT8vXZ<8=orl z1UtTn&2FwMRmzL4*+!Sv&CmrJ9Jk?_LW4F{U45L{5{6KQ0wT`{DDQ+xo)S5dlSRHq zoYWEDcy)T80p=I!mS`Rb1_J@DH4h{R&w_q!+tpNebJ4$#qs3Nr@%)5;`s@f< z$c1g`!Z&u%2z_%ynDY94a=TtT7kgW}L~S@r^uYSMAp5us_FV0gtFJ*M7j9@hmr_30 zw`7!dNW4bZMR&E41Fch`bWxE#RKUL8Lqx%J!Q*D$sBcJvwv5_G%7H&S$=!0^h;3xs%A<{;^oqGsA9UpR1#Boa0>6I!{QmRdfGXv4F#o5PYAHRpT* z&bJoIbKHkW4Zdk!@JhSuDEt$AMda>8y`iGi1D*UiF4T5yVQ_3O{E7rfl;Y&h>@7T? zDPAIhwy_Wzl?}KMSW?$Z3IJPG1qgig%#ZCv{Kn89w%{P ztQ&jv$Z=LOo`Ks}+*aJnaW6QuM!yPejm$z*(be6$QoB|a`Prp5Kwjnf0)E?}N?rAd zSam^_JxWVfMJKdV7k&MTfeL07N#QG@?1}g@k^~8GR)%E`~2ccOanI zv;s*cw~7SZI#)$QLuN%;qfWA$F^tNS?kYN&-lKE%kwKckdo>XR7siH*i-Qfu=C^8X z0dcJnDu+*c0#&by1M1#Ly>6a5aD+A^di?9Jn`6JjXM?-ZB}0JfdJ|0o-Y2h~vOlYz zd1X?AOUdLXul+5Yjavu-p7(UooFv521s5E{P6_t+v94xR`tReTl5paK_AS-ngI> zX{Yx;^J1Khl~?P_u?hz%lu2_r6&3MLZAO#n%em}GOF4SVH|@73;r4wP>6v^ieuc;g zo3(<#%$Z(zX^t7%2LCpafv3#>c$i$pfXP7NjR~?9;WqCaZ<+3Ss?57wu}2;xk6YSM ze|1DeQ)_jj2^LrUI4{ z*xF&_LTl{IfAGy&l&yr+;R|gG1sc_^MJiATY4dMR#TMjd?KP0+Tm`GAQy*fEpAL<{ zick~e1-XIG{(HDCVmy{5+M+Fba8Ka8hH#0pL+Ja5IQ=gRe865E%a7IKWeFn8plToG zaf#_e_(@t4D989SJfRDvUgHnM;i8pb$YpA8#7R7I6$q&|ddzR=nAH&E8%i)Atrwxz z2w-ccNXCYvrzgy0e-XR{6(;llz2=ikM@vsL%Pd zsIe5TwaA4$|2?{6@pjwyrq1_kg)v_)LNo27BMDVp@oqhb?|d0g1-^6k64f(O^sL(h zE_`|Ik3ttmmClb}Fcy~(;#uJytOhyP0%fKho8fl_)W9-j4>QPFEKFAC10C^9KZuBs zZgQ)tB2at4(e@~O!OV8o39QFrWsw+wKofV2R8F7;~Sd?0-rV0cW9G4pMb!S`#zM!m_lDX%WQ4L zg-Ny+jBc|e6q3yi*zXR4X^!=WAuiDOptwNIsQVI@Zn8_sZ0IP({gvbeBlxAeOU(!O znTDTNP~e5>VssgNR{vMXFsp|edZq0r$DwLZgo&n-$|kD&*RvTmk%W5IjSQRyBMA=H zWF~nLr)?G~(?#ry9fFUNQM8UaUF)cKlA1Cq~nfM3_Uc*{Q1qvyvarc(Au)irn; z4ZKor=~g!u94aKuo(#kH_3=)by_{0qG zo@Jc+RL3NcfJ1t!m)fwZ`?apb%rm1vAngkHOi!00`sGOrqqX;x0+3Gbxnkn;D&jIZ zvD^4Y4i1r5&cY5A{cFT0&}fX?rAf^2eMIdb$(4%7K1A`SQwQl7U+xaGPpg)9VeUrz zeeekNMD5XOy^YYcjpd!KPIE6qj%zJmlV2f%GX;$c6ARnOk}HW6J5$$wOb3iJZl{kuJC$|kN915@zqdOM9jpay zw(axuQw$Z>-YetWz595%D+Cx=9|cr%A2dfX(P|1zUkOxDRivRe&m$ovvl#$@Noa?se7hVPH+P_wFW z2CEKdV>&lhB3YZA?gq+7Kf=7E1Zy}S` z6R?Ne%XLT<1yhZ3xT0%AI1!N$gsqCRsH%<()RUjZg;~`Wn_sjWGpft}w%;7`LT$Ic zndCRo4YfooQOX!@F1bZdb3ki0tLRte9M+NDKtVp)MK0AA&9)-nR}~wiZsZEZIB7$B zhoP4*81npMIVl4kV^J_f&Ge@?BHUP1)lgKmFGA9AkRrwdeZ+%Vu6L_n;cZe%S1j_z zsI*#~)$94BKhHT6;CGMeO-8}-Hb?tZ+d;G|{tbg!`1r8^>>T!#t)H%1?vigQD3`mpU!Ql=`S;9~a}ITQJw){VjOFn)W&UzVc1H3x$F zoHl`l|97IHxU!fbcCowpsDcN0P z7bz69ePQ-$cg4wO4dKV*Vwk@b$)@!%6~;mR5d9hR>?C2>s=fp|i<^vmgy6vUF?}QI zg&%p);Vl)$-6&>eA#ZFouXswz;teHlB#@C#OqrKE7O#RFs1|lPU{r!llLSf%$P0p!ePORZ2-w_mg=TW#R zRtEClGfw-i1sh-@8c^q;WZ+ItRL0Nl1SnC%bZeawy2;&N>P}d2pO<=T-RHBMomF)x z8)FKLcqzn6$%O%q^pd*SNOazkbKTl51~3Sn`&-sGKOA7*-EMxIn|=yw`5;T=IOEMF z`&9&dfIh;lG8%sE)_*B06ObTz(idoelaxKlKT2}Bp(I79Qzg3K@tu~VOG(ruxh#s! zH#DHbsw8|92;C!}fai~|P5&NzO3Un?rfa>!LiD@4J10NIOln}4tQihyRISN{^tPY| zuX5QMJuvHsH+f>c(Gipys0E1e3Y2=t6(R6Pu^_ikQ@B-x!oYcI%Zj)aLA}aadB&*Zqu$ z;f!H26^D~dv^z!Ew#wTKQgTczVx7^$y&tdrs>yfd4*2RLu8Y$(}`!7ST@-bdPH#mR=SQD!CnmXv;P}q2%?Z< zK}m6dO#^fcmHA~ZVy_oXkMiUuD(jQ}lrd(XBCssK230E5DiCQ3f|Uz|%~srlLfNap zT}b+R`$9q?t45}KD6)nis)SM-NIlO6=wF9T4opW5hJ~C5*`h!a{_97fSPAt0tQKY^ zvlFeAeKPkp%b86?aOII!AyrjECK_+dD(m7-0QuU|8bbwV8@G4L%N6ZN^?%xFTW(((4u4H!t-cF@iMX|b>FA7jE3i^)osz& zbeq|V)7J2OPWlg4E5YCRsk{3uojC8zoE6Q5)uLmrGE=vlG>NM>V*jOkO2$L8W>??P zJF~~bN&*nUYC^v48#oIdP+Gyako1*grkL@%1Kg|Y_=U5Uh@XlnrSc@fKS38+ zM*~Q)`s!fGi2JObKC!s=e8yG3QN2UqJySNTaU8k947qGvt83w@^nVjHmwVsE#gEGL zzoc~N>s5~Z7H)@%l;Ch$9*gB+G&C)uurlg+#sPAJY3{ERGTc~YrRm0Y(vgIK{1e?0 zc`z`GLMm$?Sz#_!yFe+NB0PMk%JBGP&k^-tjhV?FlIeWl&sMN;ARqWG(wHbwyvlF5 zK)z{0PhGkjZ3wZAla*Ssg=V1)FNe`Ub%h?TH$d5dAV zKP#$*$5N{{EbOp66g>z%fmEW2e>(I~Zthn9?_}{8XO4XO?gvTX1}WsfP&l}})O2Q# z9)IlM_gj$ZP=Fuk6ZY$P%jB{#0gdg^wb`}T2)jsgso0Eh6rSet3>gu zwOIP1*VZbKip+_&YWA~G&Yd-#>!f`}Yn5AVWo@;qYuYS5^f~-qQy1|fHp%HRNr}mv zuN(Pt@L}A;!l*IiTM_ac8sb~jCez#%vCS~IL5}fO1s+|tvSGFyP}mKFRivgmhS&}Y z+hoG`@)A9RoJM1#S3IIT#%0!-+I_*Y#mfk)nuk!X3aeP5DpW#(0u#%=i3;im^Cx6V zr@(U!mk%xj>Qs*QLvL5sG2wdL(pS2)jXp4mb6}>>x~-0q%Y*F3|F5oy>x`@vGVA0` zo3h;}Po&a>XxjGeNPZ1d@t=D-|Cn=a(FaPM4RLxGg$2E?u#kiO7(}0HNf1VcYPwJy z(zA?UiQ8RS=9=L>IHnIZ7+Z=fVDD+A`^-eK^r}p2R{;TtU2;6nn1+XH!-9U6xI$;& zlHZ*;H)G0B4%W<)OdbzV=7e^vf9D`Z1|i0W6+3ol0L_4wb=-~P9+p1Uc#uFB8-lQP zN1LQ|e)LY;isNPGz1417&}5~KnWkmqp=@w=r(!&Op^CyGbZd^5!yuZ8-epr_xgQbK z|NXlNNpzqV+{~66sRJXh^v_trDmbZ%itKRz!$c!HQ_?)#1v$T%sq`8=!3p0pUV;?M zPx#@1*;YO6j#3>Y@1c;eYOA3+(?N1bg;Plsv0lmS`3fn1?C zm=P*O)7pcf0bv6?(3Tzpv)9T^_`DoqE^s>Hi7{gqIYI)W^tag7cNlmgG^C zvrh@c1Ap}pF&L|i-{iP$_p=>>BH(;IXo=bN{#?0wKIU$&Bp{QK4iVmmg6nJ=C7t{X zx-VE;5TiUEeZ~64o#+zW9e<6grF?h)GoXIvv+Vs3`T2>nW8$#X*X@KW?(3_Y=c%fE zh~Ho!mVZC3A-OmDX`c#EEM5SL#f%2?M3p>~i;?N|@~N)gLw?`7-`BDG^TBH89EA53 zb|5Y-uJT@g6&Wz@4hYpqtt^qMG5!IHfE`q@X3;EaXx87$nT=F;Odiv|{k~{#x34b< zhaz*Vcw~OachHp3zX9_q>5B&`)Fo3hze&cL{X5;$5kv52(Ze>&*2Zv+O%>moK#7Qj z9xN-#OjJre(QLKWMq3#nVX4|vqklds`Gj7odt0hm0f{s7-RpfZe9M3^0p<^5OfS>t zvE{n~v06fAo1Kra#HCa{WDq-64*M+ZvQSk$wgd;Iy$!%=zhtsipB~LN)iRKr$FAQ$%`Ts z73Blny8C&Nnl$v?5<{jcUFsX>Y?=%8+DP>!(+3&Eg?p?HgMzBBLMy`39aXn`0yX&! zhe!Ly>u#$*f9N!xbF`?JUUVnRO9}2*6apOVzdJ0T4}$A5*PpijA&*{cjP3UkE-?_s zA|tN)MZJg8hdGnsM-Y(FdlYTR)_UNBfIvK@R#+`fgMKmh|KbnTFM#}E)TE}9-tRGxMcn#kgf1ti#5OR2VI|#Hhk`-O66#j3?;7Me0t9 zsEQ-?Ua(XE{EBP#Ubo5QT5bz(MSoG!HTt>4z%6Lw;u@@lht-(GvJQo+t#IybfvZQ2 zs!QcEwWTr@Rb%u!7^12dX|2QK%jf!MKQT}0!x20k_vMfyIRoJl#ln6B!pFk0uz|DK ziiB|vMM4*rptfysxaCTAFkoilaZZNKo`-g=$XHBtPu3ploX-?qs`Pn_o?Pnb*I*Z~ z&P9Nq1&|EXrg%~u;UMnc*^|86HBU?^YrF8hCKHlM;Ha1%U%iYC@+NJ*d=YomkMr(a zlE};HJo;Es-U1+;;@@ve{jO7Q=Kjt4zE`;pO=`bW5o8JBfX?nV7h#h&jdm3Jd&0Nu z0OR3yhi|@nF7S{w6Ge2yg{iupGrzO>%>~}~arFt3LGjwa25pvYMJWomc&yU3EIF0T zn)IkqP&xfB96e_DIT{g0@|{D#IO!ZEWlIU5!tkivqp#skQqq`zQb$bkF%Y8Ya`a?! z`<+@eDUwGF#|&|gtmDBx)kt)@l=_6Wru%j1O&)DZ*(!MlO7nJLes<~O$ph1`N2d$f zqNr1EeY>LD(1vw`t4N(X&^w>oQ;#}wqu{>9lYuC{Ak!d}w1QRqZOJS%uZXJ6CJ3vQ z2g>deL93~FmMAbXD06ZeX*P4V2=MOWtTl!g$(L@cF&P?f1h2tU-uHsg7j*Saebb=4 za2I^gZuaCMGzGN*oplgr`qms3ABIzLhV3V3DB~sl$uj1Nx-7Kg!?R$h+=!L4+5rH$R zpKM?v{n&j00C2A{3(^=MS#}}g+`bqGhheIB1FbJjR|ddM;9a*CsBxMK%}k&sI`_}= zY|c9O7tM0AV?8tuPP7T6WE>%lM*=dK9T^gnGnk3Y;h~2-tRs{rv5>HCE|`l*4zZLHC$JJfWekVZ zfHUdLM})PquEMpge4EjCj3roQRYYluRDi&Q-!+ZAV+zyO*^U$1i_s#x_NMDu-w7(r zNp=OuL}BF`ceHEMUHKn;@-&Y6d?<7iKcgb0YPN8OYHEG^45@XUr9-#RE85J3saAay z8WN`us7x!adfn9DhLxK>fP8r{qcznoF964>2O95QclY&WJHW7--G3XAcIM&EhXB%L z`N^q#3dR1H;QP>-m$AN2muSP^yOTJb??0}m2Mq7$FFzQmdcMvuhqXkTs(A%C7=*t( z6S?+cE-lW)PtoH9$}j=`jxt4y8#z<-k17u71P>X>0d?4UFL<)3(J>U_)GF6q>Rdyi01Nx)Qj%RsxCs3^GG@U}3T{7N43s7!Lwz+Z$gYjnjL0 zuTRT!58pcLUk`fC)Z!%iuwoXsy4g_Dr`Cs1s`2n7eCHvDZqUPdcm zi=1QLou<1Ibt5f7;_?KNbxu9y9nB^tooRfD5$CHnvjGy|bPrL%hix#C(9p>+az^rw zI6nXS);m52{?qYd7_SUMV}ii?@_652`+Iond9)=~R}nNz0Gf?e9H`yQQb9-pxlU50 zc9img6gl_@*;VBlU7L=Qo|VsND0A$hh*ia+MZes0xQl77YAQZHMkj`sM>&ws5_XNSoYLc=`u05Dxd#iQvw# zVow8{UhME9G<7aOTxfWNdu==yT(T!r)xZ9L)Bfb#5mTp!1xWWT2ugJvo$jTyJ z(}Dhkpz?T`SHm-b;~FJ&}g1Nd4wlmaaSyGdW&qOAOHX%pZKOTcl{rl zIC3K>n${4ac{3>Os4@|m7Fp3&SDjI7d_#3SRSPGBslWJ5NbTc)a~;8{HrJ}$EYgvw z;Sg#0E;2n<<*{?^@oEj-z?)dPnu^gU}`8QeQS!3v2hw z3u!zFUT*ECAQ<_l9X4&)ua&LSGY&r8hdL*Re6vWi;`yD|BIyR_8Si8LA8czfp8Daf zhbh;uMcssi=0lmgeeSCq$I{+{fwm5x#Iqk&;!j?Imk+R=D-fLyIaKmR&@%&;0yp^A zmv49~P>dlZ%Ih!^)4w!9pqK^TfkF7s&B`geA_)+H)}R9OJElkM2g%+_-EYTfPfOHk zYvh+y4c`3y{iH99wS_q?NGYuw6k9u~Hbs9C7*8SnCDmx*G(?{IL>KI3d!;xzp3HL; zeRhe;zfp#t!t6N3PL;|C>TJaW7iubLSs-5;A^ktVpO0!QE4_@s9V5xj*DFkz49HXu znx#b9$@8j|D>0FW?XkV>yJ&>7V42lTBcSIB#c_pow_4C5k&?061vFd77hE{*yVqj% zni-NE6$bcWp2#*ABD=~oB$t{qC$~$$_%q6s#Prpe7@=4gfAn`_p&tz+O-5$`7=VZ5 zDnx*?{b7QWn~wF#B`p3e+TMs!TY;2b)zEx0VGQwkLm3*KOtJ zbjE+#9N%<5O#+Tb(s4@A|8zMGVyJumnNg3q@)+K(ZJs_HX|P7Lv3HOm_~ALeb&-V* zG}seHQy(l{ed&mQEeERcv$RzhNKhoQRl@l)SI8o$M3F9iu4-1+Q1`czoWyo0Od2~{-0BNa z#nsXD$$A1q#jDV4Bo7Z&8=715hK^+S~R;=Sbb_Eb<5CL;lixorGt+%-jSn4>}KTs94(Oqme^f7R+ zJ&gH@x72}OJxxu+`jfw>UTc6RAs$!rNIJslklD_WZ;%A$##_WOaFnQvrfvMR-rDs_ zR72HjDQvQ?OtDx}t;kU;{zB1eS*l(~fJxhh>$k#u&0*-HcOm;Vb&jFzq@B#{#~z^+U`p zE)jI@sXZ{1%mB)Tf040Cwwekf)gVaL$kO(-;v~+N$W!qbQx|3IbRI{3*6gJ5wqdY2 zG@=t!H7`772oksIgm3&sx1Ok84YHeUM-3)Qfrelqz{3VWu%ywBX>KE8`|ql_F`{Dl z55)JAm=82`^R+0M{n(HSyT+V&WDYVrPV3zm%U3$wKuyfS{->a)JCl@{cXJ*c&FWWl zaerdiUL`4SxJp&nbpCqQqM1^{cM%_da}&=+{iAE5v`|dYG^CJ02q1nXVGj~1DWyOzJ zb+VzNxW+zpA}xZ!W!e0uequ0R%^{-;{(91#;0*Wezb?uq8R1;s;E||Cg2ow4(t=WD zV}16a{n6Gc&1fU@)6y~>uRhY|UPs6=MYdGNQ6`oz`yrhHY?(yW>L4=OjnJB;zv&%x zmFO?oLH^Nr>=^+q;<_KJ*P0At{~|sh%@ouOmDZ)P`MVqmae0O01Kprngv8lEn%Y>S zIE!#nq6rm7SnFRN#RV5Q>RS6d1s#`2tu1eOu_1algMif}`fM$n= zxNq#Bi_nS-q~#rGQ8ImWAWh(tUflIH?WlcAAPcl`r5a4Xp;&%P_utc?mueuhBgvUw zje1OUTo6-C{{m7yo~)az`rFsB#E{dgQN)5 z>B<`H&@Zi6#;dYcIyo2RnKF8pb@dDd5F&hzqETm>f$&fgVb+20ORy}e5G=ZN+;>)q z*Ziv{zP6F%+-(jZZT<<{hJ^5&)qazwRp>?)!&M!t=e2 zynC$`W|i_b)SXio|3GDkC7|NSU_8fu`Zim>DwG6erFYzREHde_rfbO0JU*lS3Axnm zBaY1d(_a$vU_Wd4@2+?b4_Qy*=G;1DGnmfx^G#-iQGLc5nQ^RUcM-eEp>cvi6Hpg* z^qnDfK`%4)dxw1Q9ymaD+X^s-xJFpDMF3T0Y-<^t+lS*#@yaL@Qb zWsFxx7PU7eGV=vbXX^T?Ta}yNCh>d4YDo4)uIat|V}Z$!0)j54URNI75!fU;xzH$i zvIsOla9VBEtSev9THO9v+}vtGTGwT5&_24@td7;EmzX2llK-;t7m4G1yhloG+JbT1NhxNYYTX!t?FCxu|I* z`&I(I!l>d%Cs-n>k!5ETyx9V)uILh(4yVm@1dvYH-viPKiKGl1!!TtLj4lnmA~~y| zxCE{E;x`2WA;F>|H31>o5GdB5D78WZ`GXOwh38Q5yMO`2eF4@X1cGb$o85o=T?sbk z$~w$3ldl4f{%Sufs4KQ|P4M}5df)%kL3(`)MSth@cH=31jt$6&W`b8N6y(o(_= zEJ&*{>%p8MO5;^Y?y(j&efapQi(ShCt|1iQ7&cE(i#AtG68}zB5QV}i++?}UX*y$DB2&uB-nhO*HF>vORXw7du*H9pBxgfva&SAeu!taJe zSHR8l@*=$Ri`}X)+rnUrg(gLtMz9qL0mv|#Rb|`|WRx0oS8U7eQfoz4Qt_Xq!8970 z#7w<&WNjq84O|XkyLq{`*pxtToc3IR%)RG*QMVrrsk3;Vjsded=-@e_q$bB6 zFcsmA{X8*!-IYQRGrLX7*fE^L9*{tp#zX`Cl>5AKV3AD6{`>lDvwE|kGXl)HV__1W zP2)o)Nj*X8;s}ef^@t+jj@y@JZ&qPW+Stc4V;@thM3$dAdc@edF!gk|3bAF+DYun< zLcc_ZRK)7jF#X2J4oNRNvW%>xhh>2r5hdhuEwo4ns?>xMkwt=J2P-C+0Ii@W&Actg z{9TgoloAi01G1({f(kd8b?XS!3z<`6IXb(oTyqccw_3*pZQ|P}xeJDqCni(B!(+~} zqz|oHs3FW&o>t?(HdZhDS%GR>U6y*2oG&IM@8cVhBiq3>)tm0 z)-M9Jc@Z5pQB}Z#s!VvTnNfu4VCbsYcNhMdde!k|x(fZP#xu6g?9uwOxK~DbK0}H@ zVP~u%2EjzVPo5x=z0aW$5AjO}i>26UJYXOsI4TPlDhZ}+gszc@X@3YCGchOED{Rm6 zIH&@n6N}|r+?PJzML%K090zVf4*`9+AbWL^|NbPBXzE^SMcU5<&gebP&GYmZYFDX4P~Sv>_bFQlTpNPLOVaxC zf=v`k`tqb9ylFtaIgDmDuHQKMKBSB0$3R+wcn|e?;y!6})&#JH9*dS;*gD7auPdMp zm`43#*K#jrAGWxJ+vcrw{|eVWQaYeC^V^a!aK3rV4&m3=QsPE(!}x~t{XYQIYtJdW z^{EBcIzo$_ZK2-~-5xf-*#goZWjy5_RV26^{0d5+iMwKz6E$xyXCU%MUXqSQwbh55 z?|$5Nw-Vl2``0E!|4$0q)jJvohYGd6#1ad6)fBjHp{RPx;HRwTNo}F2@=mhG1E&rv zm4p>bV-P-Q2VciXDl}dlN^wQ+^3wCJHmz$5l{>SZB+~#Zjk*!^f>Rxbz(e6;cNJc$ ze(iz98$f}Rp`*L0PtzPa!uNnl#6T&0*)8nQ4mq+WXVVb3+(yg#ic2Smle`y&-`)@9 zCr{TSqIFj!@|JKskc|qRYqbLYrG6DE@Cr^t;q92sG*MkhzBy`gI!5Cl2?+d(>y<{d z;XpLeM;8H({zB5XSJytN>9<1o>Kw{^oEKuv=H?rg+4rTUZsF(=?Tj=G+e`8p8AVll z*N)Lv!oXxCIb1>u?9*JT6Md-inPcN0GZO$TzMb9}U=m)xfgp%I5tpf4I>Pk;w4vcb z4FF=RV(Z|{P4+04c#BCh+Gh0r?%U9NDk1Y4yDDZ0jdx=y7IbBjt*9v%PIH5;@Hla8 z2%9)d?5pFMn!&Q#eA~E8p4?XLrqx#Mwco%S%oSz#&iRdBU43aWgwbNIKSp=rZY<<+ ztYSZIA*@3PxWnQQ?$#fm7jdFWgSZ*ODrnexTGUZICEXa#@l@YRKqJDr2;X>ou2Noz zhqyzgW))|>@x2AVZX1d3_nvoyFk$1AZHRMd%lqx>FIb$j_YNYEhfDV!{t~E-?`(JE zuegMNJ|7Pep5YW_Fu|}L!6a0I0FF+eG9E+&;M^!_NGyeR9Xw(*X$2L;aA%V9u9&=? zXG?EgSwPp}*EkQR6UUI0&Z&;kYv?IvsX>NcKL*}7H_V6-6J#(eq;@}+CHjaEYK*XR zi4+>85gV9$^htw8r54VuTJdIS@2~b_!=&@M&9JkM=&hU z#ke!kMTtV@zIntX*~RdY!mzT*w{-_~1Qow#kdKUWW-Y(Vqm+e^I{IL{gFOjGM*)(? zuI$0!1piJZ9!L#I*36bkA}kmQ!b*QnsLCE{(6303vthAJG~8rH$BVR4DI?>6AK^L^ ztl4BbBUD9d=o~YY zITU0C$v+4w!QCSfH=g@g#X^d{o2T<+Y>5Ay!rY@Wh(kPePf_39G>N9kc-WHs%_%!h zi=aZQr%(aed*c3jE&7*7y{e5obtm-@dMH2gSfpRcn?|k?C zDG6Hr8Juyjg$ufjo7_x5YYi?Eb`qG}pvbHfyPPXsre&PUT@3A8MOA%=QE^^B-mfFO zHj*>Fb#Lz&pf{)(aqU94&1bI@xSAP>bfQ&o+&|Z(R$x&Tlt&+!hdakwvuu7ilpc|d z`D@`cj}!T`HMd9&@pNd%54kP+fJQ3)klyTrYj2eR`4<>z>jUor6p(|6r8`aAUBK0* zvQj3F@pKCTA9B$le8f4JB7_JuP)&7G3Q1sNe$n%u*ZV4K}^D@4~QMOIkk4 z9HEp1nQU0CxhQ@ELoldMuyUK{@KBh)A7E@Upl))H>lcptpAp81T*CK=~J1z zKZDV8@px#BDK|Cj=lx$ueXZ^%oJ4X@Pd>WlJkZn_dLK($(lJXvoo*g7;*LAB&QBDZ zR6!F|#q!Ww~8y$Wb3M2Si}t*b73vLIX9T6RK=*Y4#bB z{SgTK$Hm{tHTD^`h76`Y@|1!|1>r|_A(OSR0)XPjoROqBbg9}tqc5dWg25Q+UZ)c6 zNr^6=^0IJyVLCHT{4E@}eCP%w%;en60=cUsB}wRb+PnR{eVa$-w%cE$=BgROkES2b zD*M=sv<1bypr3hb13r=Z!!U6uD8c`XRapvty^L&+oB60MU@X!S*R%o`PJE+^d7zZ* z@09d0N|afIkI|??U}hL;i)QRhdl`&tFNDCu&0JfLZn?pXX*nSM&v(RKLiv3$*ulLf)Q!ZOG#@h(b^0WzKpOqEGJQN91`A z7Nvd{gASvML}@Bu{$>%DZWx!o`;yNHbWRBdJNGiuIp)<#4<#U07g+*3`{`0JuqR^r zfmUAtHmjyXpYU5dLzkvldB2NiQ-Mex5OtpO?Kyl?ubr~HqtL=#ARB7nKjFy(OSHoV zCNDr`wH{W~S|g8FLkZv-qLfgrp8H0Or8JV^0R*2n8BfwK$AN^qOdIl|?S)8oX?y*l zM=32pk}`vGjKfiJod%?2r7MVYw|#oCx>LltD^1uz1waqd?5pMsQI1j|9Y6z82@WjI z8ikfhls7{GtCc3J?7OI@ZA4uP0T=49jXD(xTTw(^*<+XIw&R~j!CfyQVweK&T7O$W zPiZv$;BO^xnq0ml((8R56_aF*gxbrcPfCht7MP0IdnaFbOP=!mlJ&1(PO6$!L98`M zcKiq|i2sD-jy?Hs{B`?1qT*-nng5iMA1u9FUt~WS)y7z~V#<0-w$`~vR3tRRW)~4b zCaN;X(yTkRV7t&_wp44B0O`D>)}UNWeo-S|agIGI$A9gs$^-*PNw?{#&82j+*o1&_ zlOOQ~8UM9N@~J|5lTWkXTl##3IbhZQ zt5@V7^x}dHRzjvAR?kX}JdT?4ZN;71Y0^hD6-D6fTScgG#wk{knKXwg{!)mf1`-?p zS`dyBod&b%g@-HsRH@vSTE?O+lUH=|GH%Qx%$@5-ugw&b5ww0Vu}7$rn9gA%gIsC^ zg%}&N2U}p2C8$~v3|Ud+h^=ySMuYVCYg(rwM*{f|&HI|RT~$G-5T%O0l09Lb;Bc@Q zt+C`>-M;snJQVwX0a!UnkY5C|@4$2#Xy3{I!f6ctM&kh&XycFFCuto@j!@l`K`zUYSda*zreli`%#!bC)3NAcsb}hmLY|$8v&{M9q~ugTD`@G9~T^W%LU$ zPa^SG75$&7J_=alKU3FHA4`2_>d-iR`fhe!)_%Nru5BN&V>CDUcNVtz^F^If6Rgv4 z1K~ik6tPcGeK(wX_0BMP3C^mm$z#7O?`r->ub@G!_nohIMi2F-$gL+-(DHl;VXT7( zl#4wlH3eP!Ul6Ex3-Kqs9_;9B`9mQrHjX@9)(%yA({yrvd3;D+)BAZd$>4gDmuOqD|e`egew0zLj*!flIedimJKb8bGir&z%4-m1g_4;tN zosV9`W4GL8+Ube-Og-v$=HTc}v>a|Ymtv40*2=CH7i zhh9X5vq2&o8BxJWo`M}EGrm+L*MEA~7dR3;OTlM=m`osDRJ-POuvZmQ#%?>ou>c0c zicBtq5RE{Qm5_(xOhwe(O%;;SwC>KVsvz0gW9O|ES89~BW09OC)wbA$oHg{e%vamz zX);VkeTQ8kwoyG4cKHLJ-IX`avc*t;$YXURv;V}z)o+ETLZ{&VWWU3^gh<)5bhljzx6WiktkM_-~c9Qf1v{_G2@(~St@>gMR$f2oS7cd`;{QK zBZ++JtdxWk*@pp6X0wEp3npPrQl1008E!#^zr7!^=gD#AJ^gD3v?)=bc?MR(Z_@VI z1;qj8jM}M>JH*C%R63D=IK3*+R#RrI)sA#SJmf7NcpL6FG7Ugn;l-YfKs>ce3%`0% zM{ONrNo-VDQ-j?SrxHAoEE_3156*7*))oOftt6wxum7R#=^VaHK~>FTLC0mtPCVmWlC`Xat_hzWM=OwV30!WqU0G z0e2?hSMy%*D+lU=yM4d!z6O(+vQ=GiYzR8xn%2d0&1W$C)gO5;WbI#yR|(iMJ8S&||YFXDJSuJjFrjeGviQW_*qd?M)Tf z8@;gOnVLdP7S)a|&N z+%?~g(HA1Wl{9d-%2eY7^Ifjk$4QO>o4JL{Na8BB$yLi$5?kb=Xu=!qm0~}4yJQ>f zG}Wv<7KX#d5bLZJwlzVZi91J`X{|TrZ7H{*S3H*<^Z`S;h&?xm2Y0`s-w8Q)n^!@D zRv_XFyw-=X<|(uBg@C?7hmM0ipiZ!`7`rR@emBirZV89<{R%e})?dlQs4?wr3#QCsS zBeq$3!JyBm-C*O|rO;hf`I#>ExuUz-i>mRvX~7prk?Xo~6EW151uPWr1P$f)z-`Xx z!-jm<5Pj2VFNZ5k%~BsU6&XC6nzwwIwSQn?Z256QU$fX@F29dv9opUnYSb4@t3Me0 zBBQHhXv~WDEd9;paCoT%3ge!>JE+x-te;|_vWS2&zbTag286gE3t z;ZYUUsT94n5qn=0$Ko<>pKp^qh;Dum6L0cCr*%|X?WlY5A-tYjmj}ujZNB8FovyA> z$z+lVWI<%y31mvJNn#ZVWD|a5QqsBl6r#76ym=Hu5P}LfG0}^gU*QQvP88?hXo`$% z;|Q6d{m5*n7{7=kYjt6T=c~8$fOtjbj*r#K^~N#POt5OfDvz#4rHduPIWP>%wREGp zU79D^@tpc!*O)o!j|n98UCle5)Tw8_*eFy6IBnA20cSrPcf(lCQ@zD{d#8F)SOg(< z0lSw$dh!fxv0!~p1|n~z#yyq`3{~J_7cfo;){iUkYf-;on)sHs*h5(^hklOR&|@|! zsNUF*QtWM=TOI_TTgun;ndS!QOHgz$bN+5?vEy4O%x3>|Ti;p=_nMuyr+c@qdXUJI zRE?>#+g_x*;-3a69JCx#g286Qaf7eR`k!Tyn@lwq$k>7>)_Ne3Dum_Lo-~$`sJWh< zUEmrX5WpgoPXyWzl}k{H!2Rl!K|j{sWgF9{aHn-tJ`g$tSGB8RD;d6tQ@r8Xx z8_ySBLB}wW0h`|kOTwzrvQ6`UDVX8>s4n}7lISsj_iMADd7Trr_e)=IL2IMA6)5UZ z$Tzy#=|NoDgG@8186P4YuhieX+sHTZ?^4?*6qbZV7nc5sAN0zZA(#GLtyg>B3P{~{ z>zE&8Fd!8JlwH-9&yGIT7*Pp6z_@ys}EObf&Z=6;2;h2B8pKI@nA(*_!dhG!$ zy|DUe4=E^l?2hlpfD6DfKcvl|1%=x<;z|*cTYBUAPsOddQ}?RDk~&Tj+V~Sxef_4f zBaPeGWEUrhP4m(;Y&@t@xW_syUS#yDQz}R!2WHe)O%1s>$ah-Z0BrprHZ-`gwtI(t z-QWe7V*sZGZ1 zpE^$AE$DqX6SA1O`jHcKs<5jnoyE`&G^NytO33)iW|GQz8l_ZqG<|TeS9F2Q1tBx7bHzh;x{7H z5C#FDd=`GMDcs`bh`&=q+!2G#BX0jc+W)OjD>UUx%zuvb!4I9h zCp?$b`RZ>fE#gDb%Hr<)jhx;5(pJav+}#I2VRyo{|Ly^ROr7qk@8)yj+zp$S4>piz z-Zdn6=YsfNsR8~=Ti}F4T*hM}RZIJvbB8vFR65U6qtOdPYly+j}>&I&2Qv~FF^p$atuR|;z#^jDeN?y^A}?=ygzR`seTa{+B0-V5~pc4A)0h2oylQwOas zy#$#O4C4_re&^HkjG3Tg+(3n3h4>@yfc+%r?BM>Tr9Y~oKIz;0dIPMBXn8HH1n7S> z+0l>9;2%{nb{6L~)*M{%-y20fCw|cPTxeW!vA@)m#93vWC3^rx{#XqqYJE8yvO9z` zrZ(mEGO)Os)k#(wf@Qfi^@3n}@I*@PSykqsv{R`hI}~hhbNZC3;9fiM;+_cxYc*>p zbos{_>Q>OyH-!^%1YHwsN&;8;&^|ZN4H#R>`mJeFT5xDoqKnkvdYO`!4UT9R2&7>? z7~xw)`P*!WaR+rtKb3@cTC%S#&Q8Q|D~!G4o&q?(oA$Oh7SYQknf;a@$`SS81?Y%G+)O$mDb!woG#QD~r_xKK?< zqzV*@k{;1?ekJaoZK z@O%=NCaC#!U_MK7hukaibdOZs6Pq+kctCEFl~tS>E)wcs=vb>-1pit_}Lh!wlOgJ6QlDWUcu5IIFD<95(I{flpK&j0W1M%z|aZ^^j6eX$)4wP#(&pjId z#Uf!l;y1%9C_Y-o^LGy;>H=)-Zz5q zZU7Ie|~$N=8-?ac~$PhMB-$;vx(Bm7r5KAz?+AOfTbAE-jYO zlQiF2Rhx$^Yi{)I@`OC_>n;BaV(ku~0iUspHMv>>isR4pvDEu<2keneuI)rfK!Imc zGL}jjT8=?Gcl;ti200w&H*B!h>czdVy`gcV5a{*hiGRvL84oWOTJVA!(PieDEt32~ zX*`R8^=OP6`?`>>s#3G{NMrGEmyg#e*o|EUO4j2(FDo*wk?(h5FcH!o|(iuq4^=MjTTRJ9Q zpRAVdlWiwZeL_Sz71#~10~NJduK(@bn@mgnwGM4dmFc~cO7+Vrkva-Xs+-AB0Swn#4=qa(I5poyxqoA1i1S%v*vn`0hw zq6X0vb|X+E0a?p76;!F`k(yVLY3WMuskVN!fr)IF>?u{bDl+BptPo$d<#R34I$P2& z((9oA&DCs`qaaTpokXvqC9?=;6AWBhL$h!;Y!kMK3S$9}VM!!hlBcW-AvBCCR^Pv5 zhS4F@97IN%wH)h_>o-p=HR4VT(C2wsQ4zRlMCy`R%~h(PJV4<57QDQNKHemLjU=5SI+`Wztes@x08hZuVkQFExOb)fv$R4bfRD43j9SXebT z${JLM+M?dJJljN^Wv10s3OD*{`D)SM{<9U^qgb@Hr-yqUbN9m_9eDMhQ=+=&;5D#Egf-!)<=CV^Eqz@&`7v+)Lm9NP#(l*SESTNPF6|Q1BhKB1&N6K@ zf?Jig|K9-PJbT+e1>lbA?ZuSYBQ4gnXj1%bJ9$~eb;%I0wzCfx_oF=Dt_+3Ok{c%<<3MIh*7<*FYcret~XPBj+Rt(1!%l!TERHTOl5|PwN-j zD9I)G$-f4dEAD5bjB$o@#>uc_a%c=nDzZd;)VSLNyVVRT-1^fL|Urkw`BJmyG;B!a3?$q+_h#{-w|x| zIfH08C+F0H0UX?;mrVK*B@)q=8ZjOeytC4|XiA=+<;v8higm(C;n9>fIj#(l2{E2~ z5eJ9%2>q?|tXqP?kD+lfdll&)f0>GYFL1K~vB zO5yA+7$#{bVPX9A#i`Jus-{8A-nYBM&y}9Q88xA<`>oJ&s{qbxn79r(|!x$pkHvU3_tlBVBPf5dbJNXD$SF2?ke=FWO^YMY4IQm29=< z2OZrQFD!v+#~%+ad3-PDb5uF*FZ)s*s>@6+AbeM3!4Nm`KO+AI6y@%4rA8*Sl7BJF z((<39d?Ird#>C?Cfwp;+_H!B1JFtQVDJ2tJ;ffBM;DMF1PgN?Uwt>Ux-eo;2IJMB^ zEZLul70fj|oVihS4A2y=^SqpTPrPz&uK|~)TU@&z5rIo$gC=-oy%#@xzWWc?r8UU8 z-3I}$@lp#Z7o|0f<){#{Y}-yA9}*Ug=4g?H$^>*u zfvq!&g&a>|hC~5wiiPDGciehXq2;5cmrO2}3mJL(gnB&&!aTC|=w`B@rbV9Ozk z-c04PotlTxf@h}J5^4Jl78b9Rvzv#vX+^i&fe9Oj65KKPsY>=P={6Gz1$NH6VhLiL z*ZWVeOKkHJPR=G08~z40@Gmd(>>N3pZN&I8clB~Eb&(Zk)x^Bl^=3_)4)oBV;sfjq z4XkK|KBHdL^TbQ@gVSHdjpO~T-T+)r4r5UIBFSOylH{`rp!ndo6C^;?)04;|t>F+1^O9WS{v2H;NV? z+gjUxvETMl@Z->9V2NJ~4DqsCs<7U#{*utq-;Gn0-o9c*=W2M;z278!d={%)(>unV z&bc9doMkv`X?GUdJP!JkuE;-TNFTTWtamc&nq_G5w$Z?#A5%Ry2Px~?y+u!6U*y-l z7sn~S<`$@(vmnobKt6jjLhY#u5Z}L}GSZ3a{OZ9m6NLGRQKykgAY^Wdo>yI+qxW@s z64VPv!@N@EMTsZ7wXB*?`}&S?!a@p^aAI}4sZ6QfM{@gjA2Vc^Qg!kRl7XF0Fb?^Q zi4=BmP;2bT2E#H=thNy!JnDH?85Vq+lO0=)+a$XkP6z907t_XWq;GL)7bOBsI22=E z{3UZDCptl&JBXYb!Y9TQf@C^DTh++$TDJyR!0~M#BppCfm$xU64E*c}nW98}tfjEC zC1Q&@(IL5jFxV+E@=Bqlhz4Tv+^%ubgv>1hE+9h2q5jfK&b7`rMBD*7%)RAuC9fY2 zm6x5e5L#J0MV{bN-T<2t@RMYXE+p_iqQEkP*LX(Px1s)Y`fmo?JZG}5+D5>N>zv-< zadhv(W|Cyk1hvOtf$r%&JC}pQUoirzoS3^Y5foOfM70yCudeQgnUM)t{A;TmAnzGS za!*&c(7_Y-Ca7pvj%Y&P&Ex0?!d~h?f(6E^y&)>F>ko8+;Ie({AlJGvWS)+3C7t)e zf#idG8lm(Kf0(zwI%6-Hze=#Ng_|^C5QIvdhZh==53Ym%1p|E z?|kob$#d#d7``w1i-wN$^Z6inc^?ZTmKON-AY13VnMFsjB1436@jSlG%Zpiy@!Fz0 zRPtQ?FGX#@y*|bhV@z$JZ*hWq9N7maa@zEICN;B8&+{}IRV?_kb(4G;)m~iJ`l%ph00X?>NtQios2vSI_TX9Y*f)XYcDfESe*jTp4@Vn_l1 zD`JTL8t9u0VDX~!`KkNGj`4`Bb`o>rg79h%gjvb)xfA;}ZJSwJ*jY<#89BKqh-Zm1 z9y2R1?B>AbLF8@eGK@NBafTr062eHxF{g?}k;xp%Hg9ri>xLYaQ0>Tm%IM!PorNDY zzS>uI-G5o>GAmt{Y6f9UwP;T;97l-v3KWiie`Ai>lj!`2OS_ zYi{z?^m`UN>R(sS*{!h`oJ~#a<-E465$z37F^0?z;J|?qLxo0zg7{Ma zz-5ueyeX3AGg~e}$~&vKxn@c+!ZKSS!HHncqPl?iSl>DOWY$s9?jr@fK)B4`_}1SCZMxo5^`J|MyrRB%e3u09X!9yQO+VvC&EQ;(mj=7 z*|*i}TNzbzS&{TVl>Hlqk$A^J{aeuI5m@0tUkI*-xERm)Ug34&w-41&bJewc)IZj^ zLHOZVNOo=SDU+#)pEFS%{7O7)r3Hj`4m(Bx(LIz@LRyl-@J-mo2yXAJ>e^?=$v@n= z$>zP>b|+2`>JpnOle^M+u8pI zX5#Gx8U23aw7UXc%(=&199gn@YZ_$^-LblmGtxk)S(-)7#K)8g@U%mioql2BpfGKK z9%c{&VCiwn9Sna5W;$;RW9PRXBZ}iTpVW$k(r{Wk5MI3($`%ix=^V>W$=F@2w{g9m zvd=`{1MH`nbnLTFk&e?`GtID%fjNP@H{0>o4?B0;@#yo04|Z}fuN(D)`esm#bBvoL zucb5FtG{e{d}K6EB6<70H_A#r?%QJAs>*yKlNQ95*H?Dp4(tjA;2fmv%>i-guU+^rZ1V zt*R^z)NQrLqi^>&oFjY#2``?%Lm?4fcKbUahGQahEUzw&1EgyLwB`_P!d#=#uI5F! zw4Xg+T9Jgf@BMP&ClgD~ys=r#2R&dX2wWGp4q+BgU~TZ0TZIw(It3C7CnpA_SwLud+^ILX3y>N947Vl|i?5PewG^ zj1h11vme+4m)iG7bLdOBBH{f!=PTnqE|KEUAs$`g!DPRlpv75t><{se&}P zHsbx1duc)DtB~|K4PcCu$*~4Y1OsrG zuGRHIA-Iee$zGu_T*fN|12a&VrtZ-&Oxj{0H){W#Ya9Pg8?Dv4`c8{A2!-JzGZsf1 zjin|Knj;usHGW~mC*=#U;mHrdsA=s#(fkKBrmiEfo+61I= zyU~9CX&uc^WOyYWaeN=FwJf10fMcNjy+=JIf20@;Bh%KDDp_qj;4roPkymSMLxk%a z+l%YjlCi$W>u1s;zmk(YxdW|O^@Hsm!#q$aRX*rJvr_<$!7k&rdp63`v z^JdRWh;Evbv8v=YubCpaf1 zrO+vg8)OW1#>Vj(t-e>0?~G915e-`}%(Y~Hj@CKBWxcFDrFgAM;7o(d;6-7*bo+Cs zyzC1>h))&PmD4$|W>=tQDPYO+uodKC2T^cu zFlg?SquO;pZ~n^#%`Ji`r(=%i++d^LhD{X5-`=Sf44QNFG zA#jj>x+X9AYmuf1D}nCEgG{);&Y#c`P(}RJ(Js#1>S)iLSC_*8paJs+_(}EXJ)45v zdbVbuzghiO($ccvx|Uk~)`u~a7d57IHpz@ZFxd~t34OC2EjkK@ZqwKFCO@)>5yHq)^4 z$y{lp2*6RIyebuqFtRZn#{p03eq$dF8_xTzBm!Fp@FPilh(`M+{&*_|^{Uh6*oMn) z-DADLbG@XW-}~s(m(F2n;E#W_;W>FTM9IoafZ@Ir3idU5Gi&(edS_;%uIXJi;Rx#l z$Kwh!MxpIUIz(Jkfj82P6E20+M#&5+iy~U z&Y9dT2}a?iom0@~6Zs!+^YR)Jv!$0o%1eO}FBsV)Y-}QMk@x; z)Tw)l-9RCBTT8){Og2~+#Gu(#x6Hng4J}q<@nl_gnXSKJLcTil=H36kaKF#YC zLT7Sg_*QeCJS8-hO))%bj7VEIJgT|d;1;mZj)*7a=SuG3x$G|PG|Y;|>xj|8f7Vr|-V5j1+rc7TJi zkFQNm1L&KJ>bCX{Qu0*u#Ax;0gX{1^=JZkwlR{P8_1Np7K&EzNUEUl1R@V*OE1~=IKm%4e5@TBx@Jv6%h3n7MKhpw4Vh2qY`wCH%d!#; zGYO}nz%@@=*5uvS1h;F(I`?SL;Icw$h+JRr@HZwU-owH!R7xPYu1iwa45hHq-v}|| zM)_I4XCE`{Tj|j171_ex3EvfJftf{giDPjro|F2|<#;_O-;S@;73i<+t@gBCrvX20 zI`%C*o3cX9Vb)*|oe`X}O3iK7fQIrkZ`_~@E83pZi5JuNlY|cHtB$r-AO(`f)%o^r zPjjHkM@1R}0>5=d5mC#OqMNo8{}GPI_SlLCBAIdI|1=B3_E!K8e%LA@Y$_YAwGL6JIwZW}be%kUDPvYbL@Hkz~*XnHtXs zPKNkHV17@uWR1e<;n1`md&bGOSfvlac@i{tt@f^mfc_S_M6 zz{dJbNWqv%U>vu0-7WCtb@=x#whC>^AtqWEvK#XHdwb_@&BXHY!H8ofx6<~gSVEsU zl&kHsPrL~G$%b!oOcR@LuRWLK-?)s>g{6pF3H8j;Uoe5yr}{6R2R@L9AT-&F=3Y*iYedyGQjcTIZTM_DlRiP2o@QckL1dGx0v zUGi9oWRG2Qr+DkQR$m;>*+=#5v@@Y3O2KLnnkR{!TZvY9e_G_Fb* zMmAw|Fn`)8^PXTljMD|KRr7pvsA>kInYGc8wa(~MY*~XANXuprCTp<4`oUZ?ac{>< zSwv3ze*$mMOW8IUr%vuX7-!5}t*ig^G13V)aMFe7b1kul*BW7oq_zX}>6E0lLF5;g zmZZMfJt(Vm z@$GKA?VgE8T=hePYrwr_+ggq2jT%^l1!D#X`1v-uvr6Y;%-UYv-TDe_ZOf%)10F`` z#XG65jRA~k{%JUKPT38-hP0*osdi>(_9anIc6E*3-`d2PcHV5VjryPUeHBOie7WD+ z=>3@E62EklQh2{C+Rgwu&k+SlMT3SX$(D5K?_sm3)%^f&NZMy>u3nb~`?NS&YFUoB z^H59V*m#LI>n8LTxmcYsX)9e5zU1&#ae|ifue=w0u`Cw+=1x^PvwUlEYXCik^SwZg zT&~fXr;fwmW2ouU1y_fy>=LOE4!&GAj(EylZ0~v+eOh}Pn9goZD4p~F2jlnBf&kYu zp?8MVrk2P`?}@5?^-TLg-2a@;;~%xO^}u@k3x8gaJDOMNfW(C{T^CD_|E42+5+Y&n z%cwk*$+F)0YR#MAY)jfKxiaJfO$9x5@C_Jlo2mv*ByxZHhoEy}gua5+C}{WKJWmETQRSWMXYzk&Zr+28tmU{y{;$Vr&LZWZHH zvneX<959c|Hs?UZ^?fafR2fLHo_#yQP@YN_w9l2!Q$_7z%t#in4>!$~zAW=9?PPme zEI1WpRfI@(-|bfb=qsVkB1kSMqjk_90o=1ggE7|%i~C@HYoCfur;giwNSaq&RLs5q zwwllI+;Bc%b-#}L4h)z0!TuR-2|OysRJnGyn5v#>&VgBv(ZWJbCHt`-77pulcQ$G@ z;WiTB{40BB#h2s1t+0%tw5mIYIbKxZrS!sn0DA1s5UredW$B8_j6Y+C_R*dMC6T6j zlMS+tZ@XD>y~(2Y_zQV^`-}vbN)HjBbf!< z9zAL`>Zmf!tZcmzx5F4;fxYEW`*M2675o_#_R6M;fvKW{;um-2>1BTp?K@Z3O$>EE zUp>la+{Z8}%NyX_rc#dh7l2{XiLDI-Wq-`&juHRE=q%!$o?vIG_So+A&JuwM{fh%D zQxB&H*VI%%?NCUaXvd4C=d0^ex?xYa5ZA04z-H;WeEOrtA1o9!=F9u8^Syt{Xg~V8 zX4k`m?Ya=Z?zb2#qA_fd4og$NTkOG70mqM@C%YqvX^B<;6!1+P^T@^y7jy^N@KmEM zggA1M)zzirP}9V;i{U70Pz?Jmk`#}rO<;o>hF>>%+O@4zV^|+O$oAXc7UEr%+K{BH z>r&pv>0DT=8ysQ=hj~yLjb&QfWTJ0tpWKcS5|{<09ks$F@Du=TVQcO7cf11K3#>4_iR)0y=lTeRw zQn$fL`6Qw9I`YB)B(1>rMKZ5Hdw2JQdm{K(Xt05CMqMuqF_@J&sy`4r+($3l1j%aC zT4PCr3ne@KJS4O;w${zA!4EWE_JSafsU>m~O}zL`IPN&%9CqjMXFS7_>$nc0QaD~% znGWv$-hXi*b=g0OhcomtO|E9|*!;1qLIB7HV#YBYimz`c6Y2wa^1ZWQpbW;?Bdaj; zPDZyy&@*f099|i)jNt-+DuUk2^|rmt7N%mp0I_eT%9rkB;`9#pUko`aZ9Wg5W+tgB zccSWnmzVFPNoXbzdZM(x_EMUw%nc<^zr|0+tnasLu zI<0R=ldowGv=)OvXgmE{C;gV|9016a|G^}M4$e|_m>JxZk`!(lwDzSET#jI?Ef9FW zo}PDJGhiI$dO0qpW+~Dvt(7ucM5i_0^S(d@xVi5ykZE!6mM&j$bQQCE?b@{qG>32{ zcy0-9oCQ}EnW%8M+T&RCKPR}_!66$K+yh)p+}P?DBX476vgV(w$}NQ1*;z91Zrl^i z8cy}xyxfUD`6Z;`wVrr`}YExj1-A7Tu%yL+n^ z@=`9QHQ&UwysTshRqeb=uDP;^+0U++*QyUEG^}YI-tMb(EH0A)HM-bxgLQu5{=A-k zzYfgf!;X1ad?Cz9w5zI2Q}V23<#YOkO4rx+XlByyGHyIeoI{#$j<~d4ZDOm!i)G`{ zUpv~IJDeGPnxXdSwd>+~9ogZWBjH(T)*Ubny6di>crSII@y+GJ%*~!WG8m3TwXl z)4m92*pWl3L!!05x-<-ze+f8OJ!uMadohs%$`71nY?*tCSWY+&Ap^VIu1vMeuvyH8QVR2laAH0)6` z(J|#fVaK>ic%GUReP~Ah=Of;JitVJ^Vw=ag43%!-FDAcyiOQ)QnZR`e+(qF$YI7) zY5q?JRsL(?ZR6i+#rRP1Qiq#Ir?)Y zsgIZhAIgb`n({2S+YPT04ET$6v7YMDd*e#FC?AR3k!~{;{eMNyz3=&1B=!oLl9F8n z8Z;Y+e@}ke9&o0V71~e~x(`O-%*A6_BuK7l;2S#SIP?5M*SeQje`b4D<1A`9k=H#H zU5Rs|OuN;gD0%U_swlb}C01?{Od03p{D^?4A-(V%!0%?`PNt+|q1@J_bH^T2TT9z_ z0z4pGTv`^LO^(vMuZX(2U=TSroSE<8{Tndt5g7=uu4_}n^QD$n?=_wHVu62`GbucY`^Vi)RKSiY~{Punb$aZl5FYEScR zHBqEVJUr%jwmB5{BVie0RMPzV>j*uhL;_8xQ>tp zIE8C{rSAlh!L_pSKc_s9t*1Hv*WmwnJ|8so;H=N2-0S@Rdhy z5XIo0qHe15|1SIAO1v^FlX!Tnfy(${u+!4!99wxoK3`Let7d6u4bGlXb&cpX{?nkDpK%Lh;5#NC#@ICLCC=}j@VG}Z09>M zTSNRa%8;vRW6%PdAK~Ys_+EUT{P!wxJ{9~sxX8NQ5&sil<4ZXb4fxuI5@Q95Omof)zQDtTLUJ|GI~gU11@=BY65+SYUlvs zHVrJ@ZLg&%tfW?6tWi~OKGEo^S0)rm+}S9B+doQ|aF*t{{z!4u22%0#$SnR8VD)Tn zqxzUWShI=m>s+UP~C#rI19 z-)6>;xj$`nq*$b>DDGk2$~>IR?B=B!sK7h|duESTTb2i@>0yero7t+P7qeuKB;46w zy`H8mtgma>Px)1ro6PA|*xhb*czjeoaoAtIw6ZdjEX(qv0>C!i?Z{-UGR;USSKFR< z6Lp7B+wFqm#;!ei`?p*qURa5f!nrel^>;6yK|_o$wzddn%ZsnV*r?v(Hqd!K=i}>* zW4Pkal3id$!(HTl*Xy-h!@44zTewoo5!@HMT|Xv>X;%OJ-|#9_+H%^)&O7(+iW*@Q z`&0CmgGpE@J1VwkZ(VIsnzA_|Ia8x}(R--0%u<{&#UUD+u(13ey*zlha zqy+}*&);DFKe@X$$Itp29nYzms;PtgoBas(dWb~Uh|-vh(1t#8m=cooGWxLP6o>fr zehQfp9}9LhAoBj{;-dY|h}lokLmIiVg#m-l+er^59zH5E?PzrNIe3T^1aQxm)@dx$ z)SP>O`CdOg@b)5mBnv8(uHfM=aa^tX8!=Cv1PcoF@NqeMH*S_bT6)9|iz*+&1d06H zRm#(IcYW4C=Qy|iB!6$D(r0y@F}v)SZAup-fW*7z2zYY%;RgQfrDl9<7kiGM5+8m1 zI+qhwoKoD+*l@_HC&pqk>zIlM=+iv_y0hN?OrBBEy{aLhnfpc*hE3ev%OHw4$OE4_ zsGeCWcYPS!ZpN19cmI9c+#!qWCBKip2&!GEN!UJ`2_e6AIq}^M^(NC>O}9R(hKTx{ z&v;{Y*T6(;k4$z^9IN`M92`3Y7>htvM>*r|+nD{fqtLz}J>8iq47f#)R}RvPkBN8R&iUYc<;54FwDAeM zontU`&H>;^)Baec6YO0Ck)?e%LAoQnUDKtOCGYoUyP-|%9}Wyezb^>vkm(&2#GoG+ zyLa$AL``8MfO!nLa?4arzW?vin6X>X+s;z~25NV)3XzRS5ae83l(bUD^ z#JS#KH;T>Zjs3R^vr$M`OHfnb({2_8&;(& zZW}D<>cEKH{+XXCXJR3ZG=n|UqwNi$n{jQWQA1W6N=G$xItEa#`))jE<}SDQ9HXyk z&zJ0rsM;!fi^^%G+b1({eM?B>W3czM9^RZ0a;*O17;bKb^Ms7AkC0AzBBZybnM?E> z3}hfj1|`aINavVQ9H)lqqkS0Jr98rI+}V-hn~h?&J9s0^Q}7f>3X$e4iIr><<~D+| zxMq-KvW_GsBsU>+rf_Chf9aYy9|M!FZA-J0_!XxDlIML4jp525aTohO6>~SSiJ*y_ zR;LxWx@3P*6oUV%fzHps^XJdobWGzT2@aLoE}(B1mG3HLqE&csOnu!D0emS2x$DIk zPk$CZd{Fn`yNk0pt8>mq@ba&>rrHHws>Bh(Tt#=g&VO-zb?8x3`n+1TV{bU!qA_ap zfR!bQ;Jy%yxLEAV z)Bw=BdPS~;UEvX5nTNpP5MIG#sS=W+CK|V*iTf8xbfp*-IfF5mb`#GK%E8c8^+$d< zXk;3Lczy=~p8JoHO?YO1`fehI5ECS(l64?4renY7pwdL_Z%mQIl5i|TFeY0t3REoZ zsY~|XNWBAnC)^%IA0|H8aozS zJ(EKO1jnRq2a$ewl4=Ldq1}Dmc2Pef@0-g;HA}mBa&&3hHn6JGLmMpC%KxkLn-l&C z-yz{yv(G*21tth@xP5*Oa7YjvI9HoDr04wd;-%R;v#hA~H0M85k7Y;3!Yn7=lO#{% zs6;qi0MGA?ca`E7sk&#p2R9jH9AqgGR~kXsVVsE+N0syXz?%VW3P3P!TMSdmA(V;Y zA1;#hB5^l;*Y!IKo#-RaiB9M_+Y?IjTTgJ!@5n1{@i6dC!>jZ!ea0Sny$T2;RN=`! z7&5s##uyi!uN+BmBp4n~@G-ovI5(!(K*)F6z&H5PM}d6;Mn1{%Qx}I>=-VUQnD96*9%*2_^Y~Biou%uWHO%^|oWyv6_c6(NWythoEU%tXGat-M zV1JzK-D=4dx9p#_)y(S#=I$f=l(}72xTopq%xr1TH2D40^LXa+{$NBC1zhuWS9liK zo{?}A1(S!`YVl+b_Z-E2>@j5S#Z$baE|AbH!}FS-*|PCMHt)$YFStgYVu3!oDthFF z?#JqWrix4F6s3JKmH{(-Kkj{hqHV@Zc;FBxN=M0nDU5ndAujh5Ry7Js%b%N*N|3e; zNh>4ew+g6x1hy7nQP};O6E-*nb%;LG?MYD>t1<=$lZM$NB^nh^&ZkCYmr{~~9r7|L zZb9b5f`1_Qs1Q4z?=!bY-*EOKSX{c8&#$>Xq{nlICJeU~6Q0HWTk0VXW7ShRctLj9 zttmW)fEY=@Tis5TaB9woG3*Bt4_RB80Q5IB_556f6>v#Pi?Dmf#uVDO@i`qCQ`xP_ zE&jy(G0^vqEO0CbttQz3Skz7HR!#eCg%{sfxYj=tuf{PbvCo|rU0xHF(08!fa~*Zu zOjP+z^vW6GYA4cDscv3AJg?&NjWfzbcL8CK*uJr)c?buC+fjE>!PBgualGQ2I6t4N zVODItk6x>%%{3@7<f~n%_ zFA;@eO>u-CTrcoy_{?PG=|!LY(^UpDQ>FhRjCju3h+Z*eg^OAe)v+w^Z|_-mg_=FU zSNy}};pVcJAFABVsiW&9Q{tWI&_eE~{Cgb~As)nMv7m$nhX6ImyA6%dnq#1{{`Bs` z?=+il0jvcI5qdG!DV)7XGjXR&#N|l}0%l|w_6Zm>O?jg@eF70~R2-9O@dK5eaE2pe z%BTKqJ)j_b!m*l~4`b?!P2RI5{6KW#;kg3!Y)7TxZozEwj9FCT??z#2bdUb{P)1Ok zwp{3szUAci20gKy(W#OeyKZS+A-)Yj%%st%raX`uNV+hudMgy@fW&oLesWjPeU*}P z^H+8hotU9^aL+Dh;4;!oz2Z;QVObsM;9(_8BfX^?3S;8Ah3IC)m}fm9rw{hL@DB3 z@==zANy*m%pgJF{{xtM>X1uB8;Sy1W((o<)zU-!;Q_Q!%sPZ+lTQ03;bmRjhqIuKBW1V*VN=_Tf zfRC<==Uc)!?NYJEqin?&Sq=8mu%d|sR7SpN=;7xJnc`a5*YwG(2XL?y*4bW)`rXn? z)VqfDG^uR2D!=A<+DRdBI_0o&J$_Dk%WqJ&+`8N4D^+*2y>?t5eY$`C{x%v`I{Nt> zy8i7y0Kd%Y%-;3~a~2eA0(XyjXcU7aR==N1C^MheD#$7rf7tcC_50*ky1fQv8O*3Y zI9M-%i01ETmt81$u2|?hAHtqiQh*36*oYSu2HaMN$=b$6t0C^a zhch<#Ma@9POdZ6A)Fr_tqW63 zUKZxrauD4s2h?Lx_7J{2Pg_0%&i3O4AAt_n7t zneDsXB!w0WJG7p1no#t~tZPP^!)}wEJb62x%vxF3V4Lr=0p`uokJn{7ud+x<5GpuY zCBy%Mi1>86CXB>y-{QuiXk4hT)wg{Aq|LCP^d(TRe0zK6o&8f%_D!2Cpgx&d#}NAv z!!)8!zd!Rwu^1K5Srjon4t0HA&G!t1nhjnSci5Xp1R_!U29EI$szm5?3+NX>h9X_DuoD_-eF2j2Ip0-R3p*6JdV)ESiS1{VYNN-6zSPK;Q zXqQoz!}q#wJbFIqYO_MK#&4?-B|JM{&OlN)fcsk-C}q`=%TgRogqI5Db`(3-$*;^X z1vU|cc7eB%);o@TOnf)ZJ{Tpf5E3Oq0BI6TFKEFIn*v-Ar-&Q*XH3i^07VspqVUTo znIkE#Yh#ryC559Av+EyN<*<>QvaG;pepXw(c;xK!}~ph7JO|Gt;}-&T`@{_4JDw(*Qv^9lC@~@Ss%A5 ze@W6r9+FmsTRc3G5RM`au^0nxOa9MR%5f|0X1K33#Lyh*KO=h5^Cc^b8}=!7^<(Kl zv!>vyntjC+X#s5kgqGoe2OQDlG=0njWeoO9eTLuc1>(E<2yz@kl3Y>LkAhwa<;ta9 zmA4%h2E{^QeLZ*Q*0;|djl&&jtF5cpef{e(^pJJiZscz;E_xU7OrQkmFMiR&oS z84sG`mt|U3NA6Omw)0-Jaz)6-!i#Yd+Uw8AG30o@x8KRf2^wy|+}<{b?~xWXBM`+bSBhiM>ggc=*WU>tyCH`qM)9xp-2 z7)Z{1Y9GnLs0kXx5tsa14hH0t&K!wR3f z>C=_?8?OJ=+xdech_t&`-Y$O0b{W$;T>-ZT*IbVPT5XXvd-tLyjrO%9*Q0BiJE~ZX zGo^1)(Sk+WVA)oPyRQsW%%m5f`SBxkGnq`iTCZl7&TUdw_n4ohJO6wqZ zF-Z$6c8NV#zxGKLD>!f?CgSPLOr($M!fEcf0VEcph-hgd zf?9w1uW&tn&bl0h?etQlN?TC}3PvMF1GKg^cmypIEa0R+l zwLz?;;1Bn}_h)|@UEuBmz$&j)EYGHg=i8sOra}Uie$0%$G728d67k~>?6pXQ`tnnK zoo#-i;`p|Tl(1AGD9Pg_PtViJzV8)&yTjgWKG+Tc;^Oi_Syp0VFN{?k;xbSfis1@! zkAhX7gI`eAGKcdRR>2FY%I@Kj7TInIVR0R?L>rr+>sK&$IKf6h8i6R$aMZ4{XEZMJ z1|&@t@g&iO0Ssh|!zi`Tw0Yj|0a_MzA88}YLZNB;0C!OiMn(4n*kXSMOBRr5iob&g8o!fh^B|5v`J%9c>LQEkc&5tN1Ope z8uZ(jhqCDVMhmTMwg36|$|w=QPMaWEBo&1r2gL1C{>jqJu8V{q*^y+aQ>H436NeSu zundGr21m4Rnkr3N5NwKMmBuDuB<7YtJf;n_M1yZpK*;d4WMohOO(^rdp_7y5=O&M7 zY{KB^7vLi*k{qTc7#2WAjYU=`x>D!IoZ=oA&&AvwM1V-yf!U|{OCg1az*fc|zU~)< zI*e>bT(nb_IhB~NO&CD(ZBF*rnNqQ^l0L{}5UgS!51mupD$X&J&{jJfMi$jriN%CM zB6!8lbb<@MiDf^6JBOG_B0TgmpK@mJ=fFiB7!~l?F4^F1Fy?4up3p@Vb>)>2yf$#` zF=zPi&%57*Kgrnxm;GOBj?zfK8)h|DQJPTL$pL}&(l1rrly~g)_8k1~Pv_>Jsu3qJ zAA58tXXhcn6P!xOoADWkbMy`(-EPcBINF*y~^b!771zr!1bhV!H5j5+h_ag!B^Z}mATSVOg zQe_;X{2Q?lzo=3u#;x)hKR2Q$_UBI{LX%?HInn`fgfoSs2ER&VQiLhS5d)Up#PUBF zqQv&0pmFr%Lk0)Ti^7nUX)&JDm`1`LF|DDX!E+Rhf}n+rwv3{+rf`M5%t-{|>4a4t z;llLtp_3f-+FpT8^4bwv=1|2-)|tEF^rdpLAR?lc0mh{41atP~{>6Thzrgu5J;)Hy zHNusTn24P%i}F}okwlT=C_-2ynNSf*Ci5pPA{&i2qyb1-w z5tov=;uQ`t*5%5venF&k&hFRgPVnQD+wa!G43xOBeHiN|C@Mn5_P#NCoVys%jVJ0A zN#htK$VTG9TWbvcNKu5F#*>Z*C^reyz|x1yqEn`QkYnme3t=RCZxxV!U>Q2rWeZ;j zSy$GKySlm`W>?^iYu(t8OaMj_jiGzwTaxU|&U1&YJN>XXJ1oxqEq_u4f9)L8x;7R6 zNIe2*OO_32Ns-B;;aIB`DobI_JP*EY2IsA_w4<|mwPmz0oK$+q`u(}8EPy?P7CYnd z)uMfGR?;h{>|T%A&;_5(46OI28I-GqzAnQuWD#=QH46DK*A%UK1PPrCwWftVF8TB1 zr3mZ&?80bbvrLM5U_u5QIprJ?lf-U`pwJ+RghDddr{62~5+QRO*-%Y3Bms!1HpYl!^?vpj0|3z>2u zIYU$ijkuNqWiU`$+h7@Wj`1u~$J7H+>yWo_Zk#!!xzUKjq-)_F3qDfEni6lVLO}W= zo=S`|;uL~V!1@eQreFr8l}bXo(WF))E;U9fD2HT9Qkn%JQUxDVgk+A<45i)+#2JI? zVnvXGnKTBcgrqcLe&ZCdt&|ApaMT`UPAO!mv^>R`@)AgLr7&RrfSmF%a{$j2G_JH$ z24l*2R8BSod*U;JIN=6yo@!()OOZ$eA*nV&OSrv8abkj2NLnHhcYz|s(-cXCwaGNs zB2w;-5$3QU2#Tr^hfIaCCZIrrVj?&$LKN1r!7845L>NsG$3h@ueTq`W($ruTh+I>B z)$d(iPcEv#j<-Y{FNU$??z?bH?*TN8?=jk+zWboDY7|&`MDjXw2!H`awzo zhQ~7UW(`lfw{p-^P^9W~jXMRXP64WweC~9O53$w`p$$``{zjG1?fZkQ-P4=dcn=9D7o35?VIn(JQ-^W2?Z=!h?O>Z@N3Rq$a-SpKFjuLfo5z}27_ zOb%GhLUt92S(0|K8Z_q3Ft@)wtJ*~8?_KCI{0A)OB5$cj^G2-r0fK=Zid|Y&6)5nU zu!5tAQ_WIGZmPbSntD!!hbqKMduBfCD{@`)abL+Qn|17-l)ZuSuG2s_Cy zNxj~8gHelo(YKrBi(=Ex{XL_-yxvjKpU-5-EH%h*;z2kmMH%G+NoldRgo>0m8-~^; zB$UU55vX9!D0Jy$NT&fK3^GV*Fw6$Pk<>a9EOE%Fz@P*UAhBK?TR{obEI~7m3I-Xdy-tl0f>Wl2h#!-JaVang8m^QY z4x{KPGM+Q(txkC?Y*rGh%u$7SswLu3cCDr2$TDuSpeQ90E+LbSQ^={<%qqm44@h%m zprs0XEhO~}3c;-hln!GQV?B@y7CO5Ol7=|1QY)nb(my!seefv?IHGx==>>ygqckY( z4aI8DdY}RH>O8jxz`Z+`Zr?{!(#wlHANwR9`FTR}U;q5yUq}D?=l@M+nnt?b>+)>% zy{n-f`SC|R{LL3_@0X5i_D(r{7G9rwxcOU9*f}=|!+h+=<&Re?%=fQLRW>;tP1@%e zQdIZMxEBNx7;gQWh;?TpXzo%~cWO6bhU3qg)p>I?fAi2in~XvEb*d4D@(V5;M+$=&O)52| zSqd%Ry%-?D#YTC-iZ2-Vz9dmJaPhY&Rg2ClG&TFP_5dpVjy7BYQqOBaMdQsGqUiN| zt#ATf--smu6AXv>$Fss;c|AFUa~&^|)Dal1RgB#(GRQLGjBto*sK-fVKpBR*dO|#= z+zH14;W8+{!7N3Z!ZT2*Mw(%QQVwP87UB^IMYKv&NuaYfK=q4CfigA>rIMsrWs>U{ z8Ca${{2Lh>FybtuC=0?N9HcTV7@B!;w|bTTM>}2gldmuG>CkGpA<&icy}!E9!-3wv zg5`F()!w(@kRm^`v#8L|ga3(!cr!n|LutfaMTHtOOjh+v7X9UwGKtmKP+&OEywNXc zm3jMr^Gh>WCukDC_AL4HHREqAus(Y_Q{m+BR#e%$>wPDPj$??b3o_Ig!iKxlnvlV=p zu}lYpYr!z*gT=^ZOe4;r_&J0OhQ4M&Y2`~{2UF;epssOwspCwKD(f*AufDc1y`4$! zl@AgL!z>a3Q|BSsbfhsGwxg`tEGbbDr zLQCphRoY8Ib;x0EnKI5{5VpuDB`OF4Clh5d0y12}lv~W4*4A1Kh$>JhE;k+utSthq zB%}=0C}co<+JI9FIrR`SNsN{#RYoDMs79GJ1W8Upsxl@7-cMNZdq27GMe?rD127q< zk}%&sO@1U86!Rv(j^18qmw!zDyplC9kqI!7#+U#0E-}|hJ{n#(4Z%1b1T-EN3Aa%m z@B93aFbWDfHlSUjkyML`wnkcQk(UDnrcWai>OWSp*s?y_@LTtJPTb6q4QcH2Fru|T57)Jz+X&|X( z+JfApf`L0JWOohHo=GdY<6PtIQr#*ruBf+VKUM7FGr?Kp38tCF!FUB(=Zp|XsU%2c zFn@w%3}udJL}aS0fN4cBPaL!tj#z`db{Qnj321kDL<3HpRW_tX?*+f!6oX0%>Z`ms z&nF-%^>yyX$D*co=A&K?<6#d6#CBERYAQv1%#-E)HU2VrzBK=_8f#M$+T&7#2UyjF zmNUPg(y2B(aP)RiQt&3=(cL9Zw~db}AABCy8C}a^p_i72MOnG+d28gTp=aJhOE$j%ueu zNGWnS!%!J0KrEIcW~2~CN)tOU{yQiQ3_oP|sxOIc7d zB`70M$0xl)nI{5%kU5bViz$xjOBXVxJP3y=#2N9(Xk`#hy}_Kzj5ry)@~t(LVn{?< z#Hkd>fC6mr%2UM&_E9q3GbUB=3Na?2D_?7rVaI`(lPseclN9d-3g2GFWev3RbCX}r z;;1`wa|fD#@_OhB{Xc_kFd^R#6S5sKAEC(lCojQ!)q}bB_tgkp@vEzv3fo}B z#cMlsG&5(Y@&bWY6U=g@NE4eOEw%MnGMR}ji9W3@W0Zjo7RcFJNs;!}qAbILGHRJN zpp9gmA`Ux`FwqS0KowG&8Wwu50n$AKKqt`6+U z=P&=NN3Ds=gXW=btw8TGqfd-E+CJ-fSfqZ0ROE7f)~s)VAq?Tl_^38d4X{ia86rGVnbRaNO--baj8Z{n5+iG!M?8xy zs;NTWNbX!}Y04m{XbJPgVFgD^5jP+ps<}d%cx8#=(xkBrO;{^IVbWxdAx?!y#s`W5 z@k}eBndfdVMDlY)Bh_@7@AACZF`L*%9kIh^6?cFpTT)1TX9{UHJo6TkXr47KG;3`$jy=Gio0J`Lr&EJ#rGR!$7Ak z6thjz%AAfoXot82_g-l5`9dt#oWi{Qu(+~l23PY8p z1`RrwA;MrBqIVn_uQNo9p~Ok9Jl;~Yop7#s&>Yb$7UVmEG9?%imWCjiSB^!E@{Dl9 zutAiAMvAfqDMkabBq%|!r#6Ew0GF{;YK;+fI-VD3eNc_8pq^umv5vDLJ`FAm6B?OJiR5Za#a^O+ddypsoiL6VObgNaYR&UI5iG)`Zf^U#fQ&@Yp> zwzy8nvtLKA$5vnYfBo}+Ke3y#uApCOj+A2;%J0DqZ?iGal0W~w3IG>lnb#U5m=ZCV zj1wP!GY)iyJn3>@L-}UawE*Q6pmj;+jmSw3O_=*b%}>4ZiffPR`+QV!UX3xjx7MWX zM3c3LGqsYonN&ixKX?n6+NA-oMMq(~a_aSMe#_bl(C4?`TqzqT933ogb{a*2q*)TU z1^Dc3u|FSdtjWQp_Q6DLZZ*btliH6zvean&GuX#&9O_|}=UXuRCauYn%G4%*?CMO9 zN=AO_`46%9wf9~AVdpf?bW&--%&aN|&((Y64cTmKTMM=4PyLZC;nHf=owS1>;<~rR z@@}dyZjD6RqNSI5Jo(!|S7762X}g@YcFrG6qeeU9vXmjOVB(WVGnA#V{aI3x@qp8i zZ8clfr9x`SkfNDIB9lN(dxNYuDb-dQ>!Q*&^@O>MAQvz}f^veC^C^r8f?`G^34@Ob z6WeDTQZhA21drjYBqAmw!Ud_AGI6w#3sh)@L`oGB+EAoZ>|j(q!^}}(G#pK*KFT|y z)H;WR3=A2sEE2+|KDaE!I1We6G<7iiN`Y{qNHvKa(kN9y5pEr!;Wn*tECj}eaO7C( z5YG(U3xkovRxswcw-_jSEDY5_3Pe54pc&gB!yHB!8{vf$*f1NVDupycC}fy0h-bke z!?O$-;;j@Ss5D|1$xMo^WXNdGp&8pE1>u$vfrg+B7x80o^)`)30-hmmEkzk67^R%z zz=%$zg1zsIPbElWrc4>cLCi9Sh#AJ7QeuR2JO*__#WaGjPD7(OMw)Txelnb7X)qeo zy@I;G>kB^`4f@GXBX=G3>~%32jP=oK6!y`*c^>=EO&+Ovih{<8QsC%{P9TYHi9!cqFG`C%oO!0 z${fxR(avPXavZGNUm0kvz@b$H!;f+dg5b&^C9p=4Iz@s~*eM|5sgcsURH0xTAYZGI zPL)M8%QzK6DV>t2kd7_MEJN69DDl7oWl$61GnFz!f+^DtEK99$QlcOjMw|wP6b4Om zYl0Igb;QT+B~O*&3Tjh*j1>sd%26b^(I9(nS)8jQh%!V7jjT}|apf4wK&=r=A!SH$ zz*)31OnM4U??PJ8TW0};)IDMxXPF4pTMY>en`z-QI?Hn~BatzTBcUx-oaz+ES*%X; zpaK&}s1zg4Ns5d#24zNzRB)`RS`{9ej^Gi+B-J)R_4!Brn~%x8%It21PUjOGPk*lH zhNg>I9oG^e5_eUcFi`bdC2z0v$5E3VNxms368u_oz>6WFUnb9?XYu9D@#lixT@!KX zI*-m*&bruOBoq8zow|JDV?m!+xFN3F!DvpOY!eBrZ$*DOTd><8on4a%wQD;J?f=JO zYuq2`jNU66xA|GeLGTY6$iyjjzqa3+UwggNo2&UymB4L1d&i&Abno8dkA~AYZ4t^j z3TTI#nGnWiDRL>GJ_2nSg&Wl}H!w@N9vpGJEc(u^a`Jwe*_)kd#rlQC#QkDs) zfuCpl_3OVF=HoH+>7OSr@^j;Nm^`@(Vt1UpvyNAN5zpe`TEFHY?Q$W_T)=zY%1|nC zJWJkP)Q0#rrmn*0CWXGd8kV(raSZD(U;O2lRSKz}e7x|5PksT}H87l|Rua4&D+6nl zg7YH5V^5GQC(4eGHfEjPv9kG)?Czn8xo@L}UtN#%<-j%u5Ffk}a(P^F^`k9wjgS1p zZAAFHaxX*Au`t*;}^)DyE%ia!_84k=c z;}H%%Lp)^;X_zzVIhUAdZ)Kp{)lf4=iD23wVw6W5!-yAbIKm`kT&1aFDGWlCDaV2b zg1mx!H%t~cDTQk4lvq!MWfF4yUTZ5-$xyH<4E_-o@L+~C$#6;n$PuIPhq z!wPO(b@!N-?%$P$eLlMWVdNK5G8><8zOebA}~x*2yT#aG$2M*5EyI9Byh7-dSSHIpvtO|P%=fv zXAUVPy}=Y?g@JZXJ)=s93~Bf;Az{M0p&m&=Q|+ndPQh78PJ>m@6w+h30}L}MO~A-y2KZ#ck#f$XAi04#moANE z8^UXm2|^I%@UaYt_lzr)ISw4Ybi@KXtsD#5niMg@E#l5mq=m#lXA3K`l%%otSb1wR z87RVza>Tus$PnxiO-)LekdhEr)?=8ITZRb39&sHk%7n^L>Y&cTX<19rkOZJhFK0QC=Wc}*>dx25Nt?czoe>dj|}gN|PXa0<%3 zhuPpOHKg~H@xN0a-h-$M{dDy%?=@v*9%zs(bcEkA2e?Q1`gfqTb2Yq<^O00>OY-u^BqjVAv5i}(?~K9z14fG9dSB<} zv*qTNzy48QH=0vd+|FGaQEv||oeYkoFriFQXrHtW844K~M@7bjms&P+Iqjik3Na+Z zhy?DCAd(;>9sd8>d)M7Ok0V|5RtWu>S%AyahwAR?{BxXS60Bqr#Gc9QjQ~MacePDK zBE3j?vb+or_Oz2_VS z4VTNJB3jAH_ETi*IR?!W{g?Ho9g@;A!8BhpkaixVtC?{e*{5yVPn=Q%lW!V(XUuv^ zCAAf1HnW^J$QXPsD-P%9K_$&as)4De+TyUD$HaG>qZ)^9)Vc>MF=XoAgp#c|y5{LR zUe{Vi9-+-dR*?|LrIYOp-nO!8)G-|7qF8bby4mqkh}Uwmr9ySIRW&y*1*?1#lP1<_ z)|rq%Qb}rc+JfKgF2S+X)-keaN|YDK`EfZ(2u5SBriG3(xJ-}%Jy@$;*-uFw9( zbbWY!G)^CxK0Z2>xUe_Vi&UjM3PQPF8~BU;_P@9>g#9To;%=LuYoWeh?pp?Z!%fVQ zFJlT{Y>Mu@pntOj?`@uf_nt9vw-LWjy8oZvM8>;{p7xBT><4A2-E=X0aJ|5b+m&S2 zyG~7&y4G#pSEwU~EEbKS_8L;UX5>XER=gvXY&O&yZNMjFl1p1+iESkGT%q=CVfyO9SO9 z7QyzBjBUS^Wj%YP8A>Cz7D#7IP)4R6*91`qoWy=Y!Ao|K6HZ^wsIv@PqBfJCiZ~0@D4{ zA1>Tb|MSud^^*4k643k?bVg5QmFJ&d(kTu&_J3}0%0MVM@a#5Bwa?!32-W!|i|8pG z>401v1kg{&eesezbmvjLuP!AHr{OB7>Gx+(0G{W`53g97pUk_jMPzv6%e|myed8UH;4b?%3(2)Ewg-U(XY zp~~O`?%J=qY4&FQp?v>uv|@jtY~|Ot5z$)U)`h~TFrSM;y7i2y=RCZJkmNeZZkfHd z)D~GlMXalmN@23xjcu?M*R8FDbD#@_>P*FzQT8v2A`+(!cLo<`O|6SHQ*A(YGdGfk zvY)y8Y}JFxYd}_RDHyLrUUdKeX2`+k1oNB^p4^ZL1gAC2qDwL+`X^PyEwX4w2Me6h?N z=sibU&idjQ`@oPn=yu*U^7w(G{+_?k?=<7@MVjw3C;rXl`wh5NSC#JMgDz?{CmHv=SM)8HjfRaWmIZY;^dih7N(dH_m|`H;Mb{rboDx- z7mDVI%IYXLdZ%ty+<`t0<(Z-2OHTHsrwm%lkVf2{Ag9J%a+F8ZIR44SKa7D2;3 zKY9wF9f%{YXXD$8ps0&TwM_-lBh&Naar6+)5x(}pq4D_f(do(K(*teq={oZnesFSh z{_Xc`-C^1CR>0+}5XC=So~0WZbG{2q@vD9Ee|r&RcLN&TZ;`@x18>}4>-krgH|x`? z;la;wg`YFbeO-ZZ=Ktl-Y_^wM;)|{if6y~OdHnVM?YquuetPO&EBbly&cHVJ0doYe zabp~wqpLpqZBFlfgMaRui^RPt0PhMHyNCP1hjGAuXEwl}y`iYn5yMPTXmxn$h9dCN zRZ#whMhn)gTyriyc=1|7zCf;kgEo% zE^cpD+E5s=PkK;}&^qNgah?%zzu3Gip zDJEHf?GV)g9Ib}lXD$|Y7(~y>*N7-Z7Xm~=B!wl$TD8@pxzxEic)C)NH7J`hBBnFO z=Zj*{&^%Zj0eG3Z)y$P?25|6ds!*sYMbAC^3akaMHbd}br2qiz#6bpGOO23mScFHY z2O?#y%(EuSGb!;jIMYd^mg^ciyGn_N!=?tLS!Zpq>u98KBJM4eXqtGa9jr%t;GC$= z2&cFtq?#J7R_08VOEnzkvyL`XrxrnRjG4&_u4(DAxb<23?aV)Z?hk#Qot_{4>3Anl zJUl&p^!Al+x$}UGUp_p9GXCOBzd1emfI7EJhmfn3D4Pv^r4r>DV}qN{`u}|L2mRqF zhW+oK9sT>sWBu+(A3od*?sEj6&yOxm6pl_$9{zB2dNTa*S>G~B<87QlzVgRk>vvy0 z*2g!}t6WvczKYuRq9*K%hYztMp6~a3M#6$KcU7L>AM}Uo4sOFww{caty9;>bW~qli z0?Ymk`~2~EY3vPJ;_pv}|5C@d2QkxCW65_GGx7F%#*dO#@sSy2f1*WvqD6e7MSKMJ z+TG&+_ekPKZzS+7=q0YceW)Nw+ux%~=-}WD)iyfo4v9rDa9a>#R;9Wv?1kIrs;2CQ42kzarvCCx{eD_dK{QPhF@UQ+B9*XZ{N^vt9^)1E|_iyuiC+G17QG%b& z;~nzwKb^|Ao!)&qhp!vrKC_Vj6mU#aHqw-s;t0A*tkNQC!bhhQ z-)OUz|1!QkJs$XgakH17{<|F9H2!i?ONHdEU|*rP2jP!U$@K`KRCV`a{wYo|5JEK}fPI9dk@xst8kC|Q(Z*+Qwl2R^k& zQ6pcBNzR1h#O#!&)|!&?u(oX!VV)kHbXJE*vx28xDVQu?YBMOtNBD$!}l@@oHE>uJYwMAXx(41z; zbz{;+leW+)qz1cn%_NPDV%D`-TC$+G8mgd#`0L-`!};4||K{4J>ib!`tlwYtkLQh_ z@5DRs*QaM^r)M89Zv6K{btYftx7y_ML>`dm~-n$&GNr7~kI)*KFM zuh9k?dx!3@m{btoBlU_5Ae<9Vym)`+Vi5L8MmS_am=Lle7gLkb%1F}srbP8n=X3+n zEJb36V;e+&b9sMT#efajgq_icnLp#Ee>E6oGqJ%y}R~1&|w$xHxzto*AyGb&^C+Na^m@ zQ^_G>eXKoZ%W08^5r`!=OwcQZlv8OK!pF9exw?9snZ^hhv~!}~HBeb5*-{@Pq2^Lk zoiYkF1SWE7mAb`FHRUm5U!~i&z8%9t&4a4VLLB2Ffj@88HbP+x*z@f|41YL%E}mZ>vsqZxjp&$8SVYe+0S>GHT|r>>$POgSJ+hk z=DBlq55km>U;aSXNm0Jr$^JVDZ+vBHdFWS>@V|bJ zf`7YG@xkGlexK2U*H_=YA+!6zJ6qm9Oey#_V~l@4ImXJ0YH{E97hC*c8+z%)eX!l> z!N(fe{%+?DzdV`ufiip#YnTs{DRk$}R#?%>aHSM-A?EEyTroSJ!+Mi68s9PX_?jt; zK9+BUHmD%uq6t|pAe>mR*+y(dUjwn0Inll;)j1<^9vOzxLTy?Ld1hfnwmKlpwN?;PR1*aa@q7ZG?l@q5nZb=sYo&KNWGym&nNB{Fo zzkhhNea4UeaCUsqLcL|z^M)LVTXa3YIXOR6xnF&&kMvsN&38mJcsAbs!sh;9NAWbe z23C-Jkn7H*&A$q?K zW3Sqv|8Gp7@NNF*2|nlt+@SyC_?zR0dNTaaCtp98U-ykaKEGH8Ue2AvDL6VlIn>?X zTuNhs8GikIQ+=_(T>jzDjt+)ehd+GYyykkgHAe?F+g-VtJ^lW-HC1@G{$RH;{<Ur_SoWJqE|m{`*#i zz3J(d4}Hjc zuV~++Nd58OPM?a?zkZ_hLJ#}s_~AnYE}!|~7CgULEzy{sIk4Ynm)oOtcKYarTNKdq z{>itmRHC1po?PDNpWTQ=^xP+YzM!W3FBGpBA3gUcPkbOBo}T;pQQC$Xo2CE6L?b`}fR_Cj|8(7&D>^U+Pd-+U2%dwTBIG^R^8IKkJqj(@xD=LWud=~G|+u@j%$ z7!sFdl>dXcjY%>}rCwuiQ<`@VuQXOjFBmJN=ZzKk6~+qhw)TD5PT|&t?}N`C+^Fh( zdi)Ja-uGbdFsn@WLZz-nT+B#wbLyVv8ljD%m|}z#xa2ZPE3D3DkJO_~T4Ri;a}8ZP zJg&{+osEKlz2Wd(i$y55+U8K#EHBd%uG0?w@_(N`J|0KEKSM|Vs!s6VPIoVOvnKDd z;(ccw-j84Z^s_CsfDzfgl}^`@p8RmMAIqc1-|FMboA@eUd`u=E&Z7%;&)s)HuZ8?y zEiJm-VQ~7sJgD=pf!<$1d_6$&H>YFX`DuM`w9cz#K6kw4U%8;CW`Ub$3X?IiglGE_Vz$#Omkp0)M>-0&hS(#?iiKiYeMZY1O!u;p<1ijHAQJ`8ih8Y)T7q?= zJI}JG!6AFgk!iM}#O8r4MWvaz*N`TcfH7~3I&w{es(U7mL8)7T=9MM)SmPYqiY8a* zfQSNZMm*qNnX;2a^~uFbZe<@fJ5_DTq9!|)&$O-2Iih1*D08bYpE5A-&fjmbj5!Z}-s zfLXcQOhXrGS`g#3LcNKSw<>E!HEFqGWlE}-dT6x+^c(t0OS#qYC zW`>@KNo{Nc$^=?ks&l*PWN33rK|WR?HcO-_4t#MQsd+S;`!ETvxN9VXdL{@`D2v9L zCQE0viqU;l^~w^6y+!O8Oj=oJNdVcc<9>Va*#mIjv?igVtq~7nl94(^o2Fhum<3m% zl@*!_Q)(i_s~FjAm0F0V7Q+e=Z`!7%o^fWg2I8udBum)Q4k0gDb9?hNH>)FNa_&%c zl}s9PCF`A2^%B|!yQO6OBT)_m?1Ruq)d$7e!&us6IPN!*lGo}C>mw!}*z{&r3Jom3 z8kcPyv-DNsXaRes;Dj{lY=$ph8i$gy?!(kL=jc?o_&laXy|9x?vzauHnsMG_Hd$7j zasdIb;W224s8}(ZdTMcPm3f&pyAI;ovAr|wMO&e^Vpp?Lc&p4cc#*_`f@UXH!z0si zLR#Q5o$KZ@XpSjZEwr|3Z&0|fRmsqDL1z}3sdr!0d(f_vM-V&< z+KjD+M6P%>4_$~uUNM9@+NO#ql<74U%2~JRCNAgBfdOBhJ1^oF}d9=3Hm* z`zq*662WmP4d*yXA=S|cyiscwrEUqH&eltW7nCA;x1>Q5j45$;DIu1&Nu3s&>57vy zcU)6}bj>3L?Ow-n?wiJ9T!xL{lo!_Cm2e}~OnIzjVb$z;qamTB}yC&h1)g~m?LPk5y>!mV8&7td!>?VUeg6?NK`j<%7n{6>XwLyCNi5lWhJ?+ zs=iN%OO1`kq>y?fUIXU8DN&lq>gp+SJ_Wk?8`AYEKFWlbZKn-}86nZ%@RUx-;dxV?DO)q~_Bnd;KL_9{um z8q&Q)MFP#fLss{kb2rKcrDoq3t0a;c%)GZ2c3#e!p_ZshCV_Eb8|lJOC@zn)c&xqO zs#^b*LnsNZ{MX+ekH7k>h{JbPus`_fZ@R&)U!9)qG=)1Y;Q#qasrgha{rUg6;1KNs z^8ip^46{G~^U0S#jO{G(WBTdnpMOk0eRlMVt{#5IMcr!>Hf#(|KrwW z{f`eW-t6V7{j!9+hFmNiCa-tdAY9h|FIsn9C4ReQ5Aa?=nODm5@BT!+WNz?}bfWNB z+>#!CB`N4#DJ;{o6pD+-`+A@Ik~eoa-)DL|Jf~+Liiv634-c*pJM$uy=J`GG!4;qQnMw8K-S{kF@uxe-vu#?pG@LT0 zLELj8>6~eXk$a04J8%%*mjwlV_G~E4GTi0=Yn|` z96GFK$zo+Q$)_TRx-*3dt61~hpATv?sB@GKG1q4gR*ORrU0oQ#7!~n`wI>R_&fX$V zDSSJ7i?icLM?crGU1iTdPH^?dFMk3hJN@+I&wu*yUw``S=tb`0GpxmDE3f;4r)~`O z;emShL10vzzz>gt{v8wvul0O+re=80T=ds7&#!f>+~(o>2OF6dUrT{PwB1OvV2eTE zYs(WcujSBrUk735q6ScUm5m5wIE?2?#bPPh0e;0p&~AxsHHr*F^)Z2@G$#PIzUtsw zfG^ZgM_HU`A(WTrm;{e>GWa{Hc|M@nz@k^3i8KS-EgO<6NPkLonWt72uvfRXVueUK zz_y8jj>V|tsm;~fny~`DvF^iL5Rw)a0Odi_p@fP(0gnxXH_9_~R`m&tl8Lnd_JY4w zAHyeSO?^9Idhc^3r5dLb4_4|~7Rgv#RC^pdl*y}m<2~MxNxZB=meuf$;uM?Wa=Tsf z*T>&{d-OX!d-rh0yWJvR{pkK*FK6t1+8aN*z43P0m-kXXbq9Oajqdi3bhEm0Cz84> zH|~^SKFp$(q$H*mz4t05LW`w%ApuB z!}nOjqGjHT*{nIQZAUmXvnpYrcVLo8K)gtrwnDCh6%ckFy?aQDO7aV5Kv;lad>k^H zw?6RkOZDolO_GM~kE3E1;xvVR58gL7=9uPB!t!Gkm`W`C79$X zLQ#ex0i=;(7&${rHMmykdzb92TCGx;L9i3So+LB%Va;;Pr4Q_DeU>WBi`=t8yc|hj zEggaEC+)`dU~Xu-LT}_1b3vRH?W4j}+1CoC_&y;fbJn?x`amY(@pLwP+=ttD{ay*fc%&W-+(JVUyD`Bp-4m zuGq`-6tccV=hBtu?Ltg``%q6#|E6b0e}bpt$K7*YF&#L1Ivbd-56_R{(ZTrOf{ylS zYyBv<*4H{M|Ng|E+W5b*FTK9A@oUfZbx8X9@E7~uyH-K)ccitwiGkkh@6l%-?EilC z1O4|!AiHe`oKuW7rbc6R7=U23FTIk&zCTE_(yv>0Xf9k>Xm%gyr7MYYBwMA*T0sVn zO&&|DRi0pJfTbfD=D>l{?rckoVKazgXyEO10&jrWl2Px?38XjaowW-dgj8#eb!N(F zS2;;0RTHYcrY@!Qu$xiN91(>~Gq{0Cx2Vsc6pVQe38e(=?KK8#V-_kUV{_F`3UUQ@ z<0v8XJh&xuuq=|nLW#s2BB(Q&LbfFXil}Q~o$aTOQEG@EHW{;I~Yp6R~ zOuAN7Qi+v#g+bj6e$%V-DuHXn-Y!{k8jTu(w+aN z7D!f@wAi%!44O6*rVnHFl1Vg75I+|65R{^O^^t;>xrs(CMF9!QVhhAGWwI`dmMl#@ z$J94f!{%rnebE3H@Q~P6l29FSYG`ZqP1TsK7#B!WcX_hO%S8g^C>ryOE*lb9*QwY3&BxiP zJv==>KYeuc)rp?HDlg-HmTX^~AD9=&x8j`V1=NU+i$Xe2Lc3buma=r`N_ z@o1i&{L|ylUV7E19FVJakNZ;feW+^XW|iS{=k251T;FOa{l|S<{_5=X(Z!7ZCBL2D zpFR2M^C-=mEu9a9sq1+<-{f^K2w2y8;jIro`O9>W3_i{2uZh30bz>I3o0e$-HZGTk5h)-XJ3)79#mGTF-@7Kg8{sv zkm+KQq|R-O)HmuSUZqHPnk|AsfpT1XBWqP0N{yx4hGYy=6q6Wb0i6<(&^!6+(QDUI zb|{+#^_gR(kwl3Hir=6aW`Sk6X?91`G3Tm2T%a=%Xaq18ibAWpj?{Cqc)RlGYlo*e z6iC0*hdN(nzIQ*1qgV4-VW@dU;e^}vD1LtQ&%ZrA{p*n){IMUOes_4}F72@|Odmeq zKs%mP_&{x0*5R;|gBjH6)!iWYK$7*WJr9Y>rYm#YNK{?#VS%pDR$xwaisk zDH1ZpD_v)gb8}BJOfG9MJY`6!4U#E)P5COD>0fJoVb~j)SO5cYxEYq z?TiD~7MlV=i`|HqDD{{#d8u5htCWpn)*-Pa6{-`n-BJhj#D#Kdj={5~vGu5)Q-i#; z6oymX0=TH4FfFT*N3R?D=SG@{9bFLWOm+KxC|wT9D&?6)UqdL4uDpHFXWI?Sdn7yiP*}Z?lHsCAuX#d z$8yV>`ESP$w{!LHjt^$nA5Fph;sE&P|8l{Jd{T$~_;dW=f-HHc$?j7*`)TTXH&fp) zx4F$1k4{g%c_wG~{7FI)uGQ21=0gAW*~>f7rR3|$Pu@{N+~JL{^2L0SmwY?2)lD9R zd)1$OuxaVEnsO^l9@>_)2au*3_FoBkWEQ=qBqgF^2xXBEq`_u~LjqFhF%asjubI*z zc!8G=ry`s$)Xgay1?0c4ZrU+DR^wX_%`myy>?%~d2DV^ z1JH4IDp5){J2v`ljsYVnsYb?i@0NjNQ<~9X}Xp}-8tE9-% z`<7IfJW4lr3K`#2Gm~Hpx;#tjntQbEMFeISIL_FPFiKa8mQ==&4wSI?%gY|q@&v!h3+XYdq1KOXz< z&hO1G`$+-)Ndf(#hlroRigyfF+;Cxf=F2^KtAF3GaDh^uZ!i7d0oTG8{S2mx$B({$ zv<(#BDskntHqO7+^RF&9h^NK>gP-HmqZ<6_10XOQ3iFJK0>(_NHKK1W)J=SZ=u_6X zu9m9Su|Og+*c)Xqh8D&^b&Qxq*4%{cnpG^MPC93T2}?VOx5QSoI@Zd)?})}!^5jBA z;4dcH$?6>Bxuw;0TGFk4QdvFupfO?O)QeEJ9LeySGAuRTrawBmz{AHEK3nlX0uElsTOVyoA5ON_M)uYHo#I*F54>d_q>(moavnsUf#Ea81R^ z*1SO584H}wlvo7X(Ojr!t6DTcfw^tMN--XVf{X#xYM^cb0A%XJCB?NhWv)CtR-@bv zEL#aszX)j?)wi~qOnJ^q(N285gVp}N-5?nW8^HmN@!uF>62+r$P^T>)@!4l zq{rS195fF)+l1-@z7mYd?j-5WsLvt1mXunyV{TcVTc0!{+l(lC@7FD-DA(A|$| zv6@B~lA)QnRY7OA$WtjpyNtSr)25*eG;3Ypf*e7el%6T4=qla0<*fqg;?uQ|c6>H? zDjU2^y>;zz!LJi@Vvo2e*{Dn;AB+~^IVvQQ*=t%wx3XvX;^4W_N(<7Onn;@jYC2=+ zlA_IgtD57Bv!N$`^wse%VX&Bao2 zpURHkoP2rtInQ_f@te!_>;nx`-{z!#lr_oCj1Yp2wgQMP4(SwxaRLWswpQF$VY#mB zTZnLUhS!@USWK5j65#edqK|1Q@)p*GG^}$9v}|qCN5-xYNPACfaSPM1x&=;YtT`!Y z8^mw`kXi~^fcvnl*<#*@^`Qa2%|o$lVH<&?cFPgQH(A%-`$Eax1ltS4ZYUabYa!B% zMdRpmuC!kbIz0#=O$72r;88WeFPT|Wh|;#fPZ%R;jf3*6*e3fViv>o(qomc^%5ig% z7+%TH`zfrsL8Z3U60N>}F-vW0&m619p%D_fNDPyGZGusngyj)tdOHO`ay9r=j0)W% zBz8S#17|(;I$QAVGZ8^UN802xs1;LU5}Sc=Hd{%(^zCpE%|;&HY2~?aLKrCkLb>JG z3)fM4*@vwX9ANdM3AFkT9l@a8Q`W^eNTQ{N&{!s z3|siLKpIP<(%M+Lt&)v*dP46UW1-w&+5~4sEr3*+MRJ_Vn{~wjYE;cM_7-lrkBw2*9yJkypJ(qvD!ylRL>Ai{k3thibEZdU;5Vg9n9z^o%+Y z!ypmU=NLsewz)r>_mm4y8Y!Tr@ko-=BuOeuRI{4q);`zLYvL6t zDJJIA6@uhJQi{p!Dcdgcs_iFokj5E_Ggg@tfR(qOv)(`7}v4$Xd6dl&MHmck5|Yfj5lSg4Eguku?S6K zMDPXG2rWyfjdY|y!!?%dHI=!;DKrN|07R*v?{&nNXm{#$O;@$5+orzRTnx~wDU{S< zAwDTEjcFc(*5sjXK(0sgHE52tqb`J`52egC&QhGKq=POySVcSsuZeON{_{gOAu$A> zzA_$X0gus99B+T00cv6BMxArfCOP{C3x(T=-JJ%nPTakba9X6Hg`92Fz}xwz>%dnf z8Fk-CVP7X2GeOW_@}XOh?o-4fmLL@F)k&IGid8}`mX>UyqL?mM6)FzJa}JOp2c?wP zjJa7Gc_WmQeIf#-8G;2OVmPoOjim|owa4ubCsVyH5gH4<2eLnOjfTxg#FNhJ(k?Vk?@c7XvM%3L*^(RXFRnT1%We0HVwx2%;IH+u>Caq>LqObxSE? z$-!Z@hQipyCze52+)2!ZGWf!#HjH-+hjwo(5AvNgGtk6(pS09LW=U=CC(G)LHkMHA z5#C5i$!c$C?Ksqx%fSK4CTt2l(7-un1p!7nvSw!LeZ=T{Ga6Y6b5mLc7&cNsG<49F zoW(+pdEmAjtGAYc6GwOy3_Mw|1<1YWT&2XkBZg+t93Uafy0(8phs{FW56@tRcz#>h zH+4bc*vtvhD$+>{*1}ejR@~=tI|w3oOu%^BT6>wDG&Uwrvn5S^#Jc5QR>ySjGzakY zf;t5DN0u3ZCO!8}jGZH3=SHdq%za}+cZw&gC6qB80oc1yOj3|nRCtGaWF<{H$x2Ph z+vpZ>-n?|c{FS_6MVhb+Sang#eN~NdwYgI#Y?Oqk?LLuhlzXDCaQJOn+bY$1(nIP* zLTD1rI6)FmmAbc#M`IKcS)TVBZZtbkR;shp*If6)7pL=i^s}hOdZ}| z?06P%GsjRYyEQNSIbFQk7+5(jXG-AfZc#EEJpw(Xw4zd zAZzTA4}vq|oI7%52LmP2u8HQ9UP6d1YI~{qM4FA)FFN}haH7+@;zZvMTJ-y9%BxNZF;2>i1qwvYJ`t^!DvuFTW4W$N z5QmT&1TZN>=+ZhFN>W~_f?GPQV{r=ATvAQM6^CgWfE!%NpPpuCC%iz+OFbbZXyf; zwh0=MR!Oo>!pJu%&%#Z2?>=pK>lD`>!J^@=hVCAW}h z5+BV|n7iAqng+wyXBUPwXOeCam0hkjbRAafSeF@U8w|b)mW0%cGUcGN&cd=TTKo_~ zm`w0bBu>~ff&N-tjWrvxqHtL6F?w}EJqfQSDAMB~csNN~p`_jC#ootsq)6F7mMye8 zV=^k2tgCvF9Y+=wpHn*puyI&+@S64=AclOoP;HL}EToJGH6FGZz6+Or(aa`MRrAp{jqn-JfzsFBW)kX#8DJMSj~|3 zHhqwo!?-b^!eedYpyYRq3Nixg5WKfBkD3TB%uQlyZI9KHB=|`i3780+4I_VBG_|(Y zv{*O?9Vnz8of^P1ea%6MH%AgYGccFtT1=0nkKiH z;v})You7ozj8RayU-dcb!Owa{@d&#qRKHxHGz$fF_bPp~mJ{PE~x3 zT5yE6-b3g*b~T#0puXF(Ao}EQ3*wh0AuEp)n25h21tv5r(8PGfv)X7UY z8c^W|?=v{n?W{uCt`=FmbY#KBJxvQXWGrX{z>>kk3P&wivP+mft-77YYO%-#P!m8v zwuQ@vWr@v8UWpHnOl^_ZQslM)ii16Qw^V30PI*r4V=r74*?Orqa>2$m0tAB1klq@? z%yFe{rB_E8xDEsqjd(wz36G49IV|cJ`$np>Sg4MhfBVcLLUR<%RDpVFu6@_GjbrG8 zfgHnlH*QwWjCk=F1DfdrG{OZy?w~FMd8Z0wW&mO6L1t2)`zy3MU`;ouF>nQ(S&7Jp z?ye(DnQ2QFTT1{o8l{B?FyR@Cp!|5#l1D1pw}w*%Fgwx(6C{fP7oZr)Ohqw?4RxbC z7RFeUX+`WZjHJy`(5Q_SQwYK10k&BwVLdg>1XvtR60Sn*CGhHV9lpY>U2IM=xcPGc z79O(GXrs-%yz3#zbd9kP)Hya-i`7{d{=kER%b8Z*UpxVZ?HB-%enBI!RD4ANvM(G)bgsD)~ z*|bU1xo=Bp!3U&G+TcDDup*h@`dgkua4aO0Dmz8UD;cDRqXI&BFAyFIs(+wfZXQfU&LGwXsrb7=vh> zfb%C|b>!CKvOO)4Wm3a}hc+JPTmhahqk)@Vv-DX|hxD*gKFFQ{z&mE>qh~4_S7s|I zZzXMySteo??kuo{P zE{DR}GGEOgzrrSE$HU@KE5(2q#Xs=-5oHGPgMvu4!L9yM_UTSPzY_fg#a3 zdCOH~ZJfR@9VO$_SKwG2jLbUXD4i`$(;C8ddCYyz98g<2ai8$oTt=~Y=DK*Ljd^HW zqrk1Z`Q}Ab04>(BaOHyMG4IVt1?JnnsH}zlzo7a=m}cz;BtX}}M_WM~#2uMnPF^tI z5J9~2Y>NY@wr4MDwb!9WX~J+5{@fBOAyu_lWdl+B11BoyF0f-K$~-F4)Bv8;*;~pgno(QY4puFIoEkH>kBQpSS8OeXA)BAw zv5?kC!BI+$U4pbiV-6H70Yx_s(^x`k3v6B7mJ!e|Fz?`KNtf3BWPvn`3xVzf0WDw= zJ5={$me5sm-8K2pIp)*}%|C2b%OHu4h~T6tl$LwJ!ZqP$TLseqAWt3al%j!Jl2EmE z)aLuJDKn=@judaMn9jlb*4k=u<{Znx7_~^UJTmoOF*#&NGS?*JEyslU?IzgF#tIyj zCPV5OMyvksvzWry2K!FVZ(y z8>RK$sh|a6-v$;fQ+1P-M-ki2oo6lqi^c@`nj?bRLsD|bKAfwL-Tr&FlyWin(aK?8 z=o8KjDrtBaI^rR4xTVQKU^KjUnNEVx`aBUi9o@%Dhr`Nh4%sV44Pb@|cmY$@rzT;| z8_Tjarlv}9!N3B8c^eJ=LNMI}~p5;#e!(+(H(z)*{uB zF)0Ye4n%D<_^}7-j@zWQh1ll;GCV@xW37j9g0A^c2zHphRn!nc8bwoXymHGsjeL0u zsU>J|;cg7%xi8D4BVrNl9(VS`T8kO|aNCA-courc{5D$Ag+7*F7TCNJtbHQW{p`W{ zcRr5w;hXT=3%1bF*Be6pmA4lR3@W+*OE z=MU_1()(b}mGfpPd1p{HXkapb2+f%iDTl~uV6EQKaw+5$SR-|vpp-c?PoZk{*x38 zGi{@VFnrE6FAiHEz9^hA*g2EI`D-YK(I7T#!wz`GD)?sRAl$>j3OzsNUO+Zev9Z5` zC;UXgFwg^5q<{{RkBWjeaolgZ;EE6aPXSk~gOr|3spQCW3YWD}*b*>RPK~0#3k4jM z{c31AE3zAkj&1)Ds`lcv_6(usNfNbF9zfvH18yU)f@-RvUqNfk!<>{c@M)d1swUZ2 zp)^2?Yf`AVLqJusnJaRpEQA(T*gk0mQ*$${A()l~M$Mez5>jiCxGZl-shA`*8<-a% zQ(^79S5ce>v=1vdZlnS#Sqe_5!ocaw1gMc_E+YmHL3ZO?ytmnNrIGiOrH+LQbCW1} z#yrL*A|MxF_CBZ$(B05MtA|D-tMCd@4jEWwjn)EEtFjK@rkOMih2L9{&}){Bti$9i z!Cx*o*j;1G2B%P4YME2aZLLyMleGRg0?l=pr$3Y>a)g!aa_p3!TK`B z;*eTKA_NwPKACg#wF!}pN3nstwFpRw7jXJkY1J9PkXWG{kWQ_w&q*m^a=36?M(9~& zT4@Uux_V%qNwA^hJK3a2!V*>}q}3x}rLn^~nz~J~N^LUk5D>d&X|zUYwf7;S8`B-R z`m#U~BtR~$;;HX6y7gLHtOo=Il*|r3Wn`qJIba)6+~g}Nw@?p3oXvH)h?830bD;rp zD8%(4!ssWqJ?jHdCE))#{C*fdfW1yEz$1CoI4%tLA~wx3FQ`!wLzRd}BdpkYaY`Fr zmDIdR3sgGjZU9eumPCW=@>=Q&dzTRmfEl}}ZDk48)18T$41Kuf!@?!SjVCBYh;aE#jcl7E83MP=fl`iQ$T|P_@KbzxB6f5qa#=@hcz!CyVPc)6z6QL zI{P9twcJ~GQAtpRi_S9Y+k;F*O3b!md_O(_$)oY-v#s+cCw#9^lz%9;V245*#af=0&`3#IP3 zQwTX_*Id~=#pstUi*R$$!nP^YV=>C?Ia)}wt=+aHS3_`vriXC{d%~L8k@*o?Ox(ma z8&DmiRH1?aI8Lw~a}b&}`D`P_;#XlW*)#~EBu~6q+93{&t(?ZZiVQn&8m0Qb?dIsiizjmsO!Bh=n~0 z^NghwI)^i5N?~d*AyvOB#9jL=!5TH5sAHiqo4HcOqeAOzb$3S-PBeYbI6%6Sihmlma zGGP|aWsozVHhO@v7A`bHjofR=a}^y^;ObZD58a?Cs4FC<#<_;viqkzmbHsq0n}mi| z#FAGmH1xMLIGedgziMpeMl%OwJ(hX+AVsGdX29S_aI5q?Oq!q>p$=Vck=7RWl<~tMru=m1&9OxaS-u-~r29qP{cNFsV<_Uwwi& zxHcF}$}FQ+zg`)QrD#EgIOJuGQEE1nhMEpZh$-@MtCbZ8JK)FtaY1fb7!;4NY2Qo)imZ#0$r&kcD_a=Pi@7sz5+o} z7e*@;4IcnrohD@;(~#9qn_gMlu;C8FVhF-Nq(uwG-91~bKom?-ROheaodC?GK1ZFLgO@!RBVG)n_YVu%a2Zj&8*=iCi(R)}KRz9QGTqrPl{6L${CK;5!vpHQ)&)sNZ^bYLZ`Yh6U0JJ927A|YY@4gdx`G6l-G zgk?fT?Xr0Hsta+ zbf(K$8-Mz1JHI$PeZJeC|J}*y$)Y`7eeUl2ql?E|k7~UcRtH)3$a@!xjUWV(`Por9}*qE#+UbdaUcHm!N0EAcF7bD z2n4-;W1g&f)9I6^at2HmKI7}_>-+{+)*1=qg%PvGx*S z4uJ1k2PhQ~5y$RJ7^7|Or6;F~Gx{q?#rp;M`Ga3FX7<0l_}`~$-|dIcu>a2+S9v`@ z?>$dGc=+JuN%FzN2Oly+Vx~JjKK=f?Gka=s@g08e`PH2pYmz^^eV{*Jt>qK?N3&27 zq*ivcxrd<-Z^gtT=D@b>?+N)caG`AzK?*RPX{t5|*j;@UHFfBc><@N!CQnY!o<2Sr zyRZN9RIsf1%tT5LcUOyy>$J*W?jD((jmIy9QSRoV;$1_z*VFTGMN=MK>`qT^-Q*(b z+fH`pkDtwXY@b-zw4KSn>}wGp$N_)T(EBzF_(7!2Es^)uTE`nv$eXI_u*Ktz&FIww z{t5>9?X%qLOGwuj`<)6%*r~OwbRqmWmsGF-qZ< z4(Kjv2jxltw}3fu24KskSj$Um6w2f&Of2vO+hFQ~fJx1;!iCPOW0+#C4uY{@(9BGR zTMI~|+NOfwQR{M5iVo``QmL>tJ5`bynDXqtdIkMU7NfK|-$iKzzcl^|@0TL*!KOxm zeraiqigdRK=PL*zCOESPwO&&3Jn~qun4FzfXqyZU`ZyD`5qVHzGj7xNj)9zWXb_xK zK;)uAd{c^&>%D2#?E7-hKo-LZE|+yd9K*H`Z(N=bjP}&}`ZVNZE(uIs0{Pad7Zu8B zv@E>v3pO%j#TbkV2ye+b#u2lAwnVuE}=T;FL#jq`B^$J$=A`CTulH9b14Ve7Zh^ z(c^&D^0=qaK~2>ZdJ?g|WIx=Bi|GADSSSpR_Ld?gHw&E4eXgotiCSxHgQlU8UErBz z;C;NGHOEl5dsZd5AaeXYWVJ7i2Ex&pRQyniC zZ*>}`Bu_2i(_lRU>>Z#!$Q3-YDc51vMsST%gW0zMPLvx`G{Yz&)t4n}1cctBzup$q zi3n^}IESBW1k5f?zg}K_@v}keVtW46=M_O-9$ABTYC);wXR* zGg{1GJB*rbS$0~7$_F~n3h!5_My(4I(05?z%wCu6Z$z$L291Ssn;maGc)g(R_s}@3 z(Xv@)4~6gy5MTMR#H9&`$pnPR7QU)Y7gMg0LWGkLfC^y7#GTCJC*})mkC#}74 zX|?b=tnzFg2IYjC6+mEOk92}LXIbHSE8E4%3^fYnh>0jnsE$mDb9UZ0MmEHz=V_x( zdx=iaXxfsJ@Mf57nWjM;v`9?OS9$?RfVJ!l}yatCZKILezup@~T;Adn5 zL&sk6vWYFZ)bPECcMdiqs45utTu?DA)>w*9aY=D+o zFLs*0_%HX!HuQ7I#K*`2+&?ylUDU&Ns&}80``Uh^zoX=(Ti>I5zh(P55#&B6f_(8h zWz8oK>_{z5XHd#x2Nl8MY$I0WGFVL}&6NYA`=m*aJSqh<$c_t^9u-8j5g<2B)AMbU z_giM|Umc&G>JHGuchw|*0AuksE#m)>Cr^*|D~-2k5Z%YoAl{-JL?!Cv6uOP;Khq;S ze|Xtcd3r3*?QC~^dT!@?^~??niq|M=?qpKGMZmR{anJX4+;|Xtt*N(2gJG<(tys%uj9(CW^YPtDhAKGsDa(l6`hWO7LlDe0g3@J30ZfS*h2DUQs`e#58(Ad|!aDjC@(wcwF>VknIcYs*XEjc1S1gFU!hI`QYZ!hZ zymAYw%%0S(?YaZsZx~Xailx{};001E$>#-{fweb+gi?VKGn`FjS9nz|Yk`4jM4Et& z#sqYB(M}+|C2`f+=o>ez=VVGAxbFxKV+BxJhRZplT(;ikHh@dBa|Ld2uoCRM^KC}!8gfsfrhLF%P0yB556C0 z>dm)I1;o7R=d67$YDz0o!i2>|_l$th0?~6D(|dv@<9U0cX|NtcOl`< zX4w{}lT-MqQ7o>K4C6}Jk{E;}R( zOwfnHSw=3*gjW>&x#)UMD^$hhl)4y`BE~ABfl@I;4vC5D(UTmmcHdaRXwTOjxuNntR68A zXpsW6)!>^iTmUe4EGs@nYR@+7pfK=h$Zu-wk-}4JYHUFkhd|r(iZzLkKps~Gb`#NE zQ^P33C0<}w^H3*(G6^<#?C^>rk0X?!A(`6dy`Ic@1I(oc!iP^(otredR?aGJ^Ec02 zdhh`&C-8z3{H+m4=vu?D8;7JrSJ1?@#~u?4bI?fgZ^4zV!zfCoa8>FK!jiu~*njKV|h7zSyk}#(uQlU5-M# z)05-pyVH|lJ6KP5u(y4}0>qcwly`Uy;xK=~;l=RJU>>|}EB=x8*Pq4idi$t%*ie7O zSLNpJ`npbXGVB{W`@^%dlTCJc+kX2J6ZeU?+uqLw6fl5hqM3t+0ys2H)+A;ghce@8 z4Yfi9(~wFPJowvaA#0E#U79W?r|WG>3ylzi40@E1V4pdZ!JAITX>K8t8aimMkatH} zGO{$uvURheaclvY6VxHci0Wt*txoFIWtz_S25xvAD_;P(Y!ECF1&Dq&SO(&$W(&<) zbaSyY0@qNSI$}f%MDOcHX!lZbHXovEYmXm0M?nsNWGF>I-S1$|cS}Hh#1ys+>jng2o6T0`Qx__Qg{G&Oe03SAv?3mZ}iN3D<orr=C5br)C2N}MqxRA9j!3e;HI!R3Yq3wYEvWYQd16ioxa z9EXKeLd}X(0ClTPpuQY+Fivaph}y(qX;=|23;YMUJs^6;5hrEj%Ry1G#*I>2o}Cb1 zh&7;q_Z}%Uq_}WQEx*AidFXoKUyuIy_~IAmyMKRtbpG^KeCXY8r5~N14Lf`OQMc0A zu)OHvSe3pXX%qeN9e#JbC;rSP`#0}u4|^7VBKz4gr&yhp!s6|;j6A5&C~I)J)LDxi zD0AjIeNeq6dA)GX7-t3A)0jsDMh>Zqqn2J<-B@CPz;$rW%LHKyfw?_T zBjk4Jo4lZg5KugbFfw)7qhi|@=HhEF3VlHEVu*DId7U89G5(qPNjFupz z!(l}+JpmaAaUA%k)fr0FBdKcRZBk5CVzHd5H=vBlP-+q|F-rhA4iv(rU!HDcKujBy zv(_1fhmM)p0gqUc+oZ%@JLun=PAz+2mXHcHwM-{aZEnh0s|yWZ40!rvNQw+dA?u}; zIfpD(Vr_^Q42_Z{=w(X+JQh(sGv~lf;@Y{l;J7Y^Ccs}&6oA$Qc4gv;lnb{}>~r>o zai-Hj)jK_COoe>%V|F)znO%4)B(mxxWz2RtRFYAZnEjM8@@xfPYWSPtAu$I{b3nhG zijr670XVEJZlR5wq-3OF0V5Z^fhvx$gMe(T2G1kRK{*~#@^ zqHVX|t?m1K&-ePjbqMU8?!WOyxQ6X=_w})!$^SmuJ$j1!arHUtW53w_=3@6)&UfEF zc**d${`x9L@r!RC+*h%|AMiu*Mz1^}dy4BA1+PU@mI-g=Xdv^Nld}XcRV%jaLs3)h22SP5Tm)FXQGda2V za=$WKkNDBa6)NGAWrn_%A^*xd_jJEq39k6@Zz^!-r>DSZTrLRe!TEU z3oK<y#?VP{9@c$l`EeB;NycugM5pY4S~;9sadC%t~ptkkO$aipRks zigH@3R2|sNO=Id+owJpY#sXW~pri^{rY~TnG6g7XRg$KKj2_%wC;)d)ptg}yS=&Uk zFSmi1-?2E=+SVP);JB8JPT#nrM9NU|^nfs*_r+3tbNuW{Urv<pcrAtERsn8OfKZ zZ|p?3H&TvwI4d9)hv0v)rai|R@_L}SCZgOd`d_m@cNmMV=qTg#>GK;Ovkc{{yni*6 zTz#Hy$9*r)zxej#st&XD46chXcP!$)7cH?n)&}3VMZ?_`L z&!bb17Lm3wq?FE_7JmNfU4D6ly2Pz5_VqT8y~{q}metvT%B{;G7Ek9>IXk!SzLzsB zjbB_8e!oyhre7V)vjqTByRfmrw|@QnM4lXt|GwWo-F!;!(=hhn;e+F&6Z`JyMC~sR ze(6vFI=cAo{Hd&+-aI-xzku$_*54h=&Hp;Tkh6>L`tytJKkY>K|G~-Os@ga@-_H2! zzsR^)pcp;Ey#_$)=w$yb*qz%@w^DX#216BDj&AagKK41ge%q@*Jj34yz>^4_!Zzdh+^ za=iQM^!QlLcK_4l`1Hqj&RptOzB*nXdq90Ge4P5&^L-|EA9^2y zwMHZYdWsmH8)A@4>acROKHen3f6EyCKaS3aoyqQzeTZD(juIBGyBGg{^uO^tf4qo= z8!yV$EAq?TqjC29JqO~8$8xbh>|~>HonBm=KKbM$@i;pu!t`#3;kz;x+|9`M>J9zr z405x2iB=OOpI0kBQ!fbTF4;L`O!8tu9fBi`zMuz91qG|vGV(rSq|Dl~ZxUh&E08iz ztw;mcR<^jw8eujo4e6UHwJji!OPe(oGSuSYER&iXr z^ZV~VfB0bYH-Gms-Q;)sXLU`)_o|=w`FYeota*2*qsnK{g)7K84hDU*KwsxQb)BAA z)KUzt<#;etbqyx3yEh3G&Ob(9UU zHW6Y&@76}GHDtHiN~(sA(YXObcfc|O@<5PZOBs=8h8k_j19QnEcW?{Q`kK*5s$>eG z)d|j`TU1IQK*4yVu`(TzxLe~GXe#=cHKa{6SH$O~9c)t7#zE2lFC z;nWKmXooQ*q@~7y;KNaU4uw~Kb01Z54w*~<{S-4KJSTYC{qW|^=goT_vO_Fo7~ly+ zbJVIj3O1w*YbtM+uP;g6!w2V2Z5+w*+m<_DJv-jEFo&*kUI*T~cLMg?$j#55uCTQ4 zPhTcDpFiAfaP-~9WAsw?e}>)Us)parbzTDu{%RYft}B3#<>aHY>EA%}y0={Ve|!3e z)Ag|ZDkc}IeY%yo9OSC$6P-6*MIUlp8J`dU%d2j|Gc76 zekQuVYjg7czIcB(MTa-@-D(GXr84;C5WWMG9daWiA4lsk)pY2hp`;_dQ!Vwf6)SZ0gV2QDLY zPSJ~w#kEPfhuD+HKQG{CN2C=M^2>DCxM7-EaVv%OJ1s%%G7!=@PG#O#+f+H=w?WW$zG87=yEVmqe%ks zdZ0$%&zJeI3?&)QRUC7d3Y1-Fi*brgKSK zts5XIt9Nm#(1;_#`!n#$2uUte8Xk~^Cok38$PF4VoN2{cHVvaTx=Beo#$r?#v&_zn zN&$^qGTzh3qnvCC!_A^;f!IgOu`~G$>4mDN)+}Jf?RofFZ9SHCv@)$_n!(8)dZpEoY7O2M zz-w&=w`@T&cFb$lK0$D*kz19L>XMl^iJgsR9u8tUgss<3DFoGs$ATB*iDT0?GmU@| zA`GQEn-PPVuP!ugV<8O}ZW`PJ|kt@xNXo$Xo z?lD5>NIn4Ct$iKVhH}W{Qp9eqgRW90c_*pbsBj9cTz99|o2Oa8xyKf(IqYg;!Mw0) z!wY)l!u0TIXMq1bG^7nBaExeywZ%0rm;|4O9~2Y z1cW)jk`$uSoFzsLDq&ra$zwP-!E!@1{VbhYnjR**;he>;%e_3a*#L}26Ji90?Z;)7Qs;K01HA`|Wec};9=|-ND}&BQMTp-EcKDCHrVTT6kIug5#V}$J4k{9Y zCTySC*oQ;cw53Z5Oo9NHsOV{7Aody?$C2yMx)wIcO-Y3m$$ya>x=;b!r;HU)nnf{6 zXQ$4xWI_*)Vv<6Aj!r&xDGXLZ?F(Db7Db6hgF};hq$cV}kWn%M6x=H*r8b-JX91oK*8;AL-uI@dnWsl@f&(4JYaCX!UPLRWe z9IuYlchnqwbRvIxHxuedmvOw%7kuX!wVUdVpFy)B6n%&!SlLx6A!!i_YeUK$gRiQT zM+EvAb&>{*UA|6gj z8?H&`Yz6D9kRi~*UfY3$X|<7LKPV4PqA`@b7ImRbb12iwL_yz@}URfw6C;~*cO1h08$!rr50A5tfPJk9oTHS zx->^#rJf?S^8nR6;kQ8<*HcXtnWOU|_3mtC?u}AbjY3cnVniC^SE?_0rqWBuZP_bh zh{2)4Rvks~zuO1{QZ}FCu*s`X*+o)B{#eERkHDTaX^eF{k1%`mZY$2X?pQjFii%J| zeM$4AVrle}B&pvTw4Tk9kaoaNW{T9f4wB}4lgTcvyD+ko31#!PYncGPtl~wUv6-tW z&xLuZp@Wx7ZY|UUg4YlQntTA3Wk&T|sfU{wnCvEte;cUIh`dwha+)YVuZ23&O?}Sf zGQ21y!Ofg=>MffCb!8gHpk^F1SnO{LKy#xha8D4g5YA+IxH$(o?P*!^Z+`L532qrtXKZT93xSWw@!?(V&$&#zl{ zzfM_o(1Q8{mxuRv>+sHf`8!xG|GYK$k+ud`-~9FZmA`v-F;1VXLdek{*FyBl8@nCw zjh*c;+Ydjr9mVHxK|e6M;Lfl2dr)z1lo~Dvf~#M8`xtPa@iV)>-Pfu8UWi}cyxA;xL+{W+f6U zmnIN&w50?{-p!Tgc=KXM;;d;JqP7t05&-f#ZlyDi`Eer1iZ z=^HuH-}V1x>@Ppsm`RVbq zbvhp@D(kZx`F?CC8nSDC_*ACmx8+E8Xt=_xp@2(TP0VJvx1MynA$E_Rg^n@4ha1@Gr>rTN{#t3!T3{doKDBN}cZ= z8+B#BgZb`FX1y=IJ^3sD@NjoKI^~x;+=Ja8?c#j*U;pF3{a3epc5-oayt9+VgupBQ zaQFRVJG0$??0}zs`~pw!@?(B+zFXJi6AK5vdG_S#Ygp3%{h4fU-_@nQ`YY^+A3peh zwl%=zr>uXD_wvQ@;l&B(!4HcpcEEjguOm=gZO30#419I^sS6i-zL_3@NanBzCO|4%@wuuig533kMG~^^x6G! zI?q>SeAv=qPv4&QAHh9;-=q@n?jpY&IB%_Z?SKD|mnZ%rEdCwL+lLSP_oXCt*wV+d z=RSI*nI;Un;HMxw8;F&jMoe8+H~CDy2XXSr6FGrUaKGk0I)C-g4v|cxtm4~1_%(zC z2Knsykf8n+aK3S}-PHu9@1}|M&$1$GB|oZm z^RdVRGq<6>r(DPlxT)bP>0uaIV2+GXma(W=)BB)VX@rz1Mrch#KwL?87Dta`87|ai zU)g7ZQh_33$Xd$@u7qxldB(8CeR6Y(?tDTNX~ijoiMY?1%w{UFz1o{TbOra@Q;0VI zd~{;F-`hBrC$it>eBdfByjykY>yzOW&EPvD zqudMT@qL@i?pu@YPBKYvYy1B_!c#u%nDmi_+UVyqUcOV#gGSG*qq&SI2uJ9-Wg63gyx%$KhFYuY8QB1a zj!dnEx`$1+d2SKOV_W)mZ$8A7C}~=9EF&2$keHi}4O*@R5aAG7Xz-yRtQ3C4IwK}q z4#i36b)}YfZ&mzCrCYQ(i<`Z)qT_M}wn+&VoRGz+i5wHd4h zR})QGTOz)%=GZ9A(MPfdQ}GoD`5n9Oo{r2S7c7Abo`h2&I2Z%CRjo_<7=BG>m*nZ0U^$#BY z6-hMM1un+MfjCMzx%lqP)(r-%=1vOw4-UDc_etD+xn%n5gWn=k>-ksv7i7PX`n|!c z_`225o9ZukSJrd+-DOV#r-Y@-yTy9F7#sCUaSK%=IXgOEgTnFSoAs#I6}hfU3wUw% zwU%vjecReR+k;LM;F^5^wqYhTf@=yGU4mL94*Dy zrKIhh1F=4E*jVq^$DVytj4~9~!Gy3)$m=U~%;r4^6}5zTXt=lP90_`5<__=#bmGw= z6G(IP>TKaZCQm5l3+W2bZlh6MYJCn#2hTbeXJO`{bGA;sFP1@XBoYR3mcSt^*YIje z<)J&tf0pOpAD!9mw?_xFvp&H6cf~S)cx&1JHz(&9rSFxr`K7g{zpC>8(+g$NmkfjJ zrMWREUwzyqG#%Z+n}2TC+v!hS(SL2*{dKyv%Yop7wG7u!!sR@A^*|gpm%jBIZWbrr z^GiNiC;u*+60dE}9on0Com29y-GtYzNnUz2{`TRo!;jn~_!Q-x&n|QQPzmh&*CVd~ z@<*>m?EZGkL~vh<3~!O5#-_e4xS0W~4q0Umj!L&~>O-@3AjjQVwceVirXx`Fsgjrl zs@(+xH!MylFMZ83Y7m5QLlqh)iI|YEhTP(e(;#)o6Wl3~*A*_xlmHrwow5yWk_&8d zsP)GpT#`X!io;-~lNl(@GE=Fk+49J##ioEOh0(!PV-yTRA;i&F@5FI@|Iol+o&K+9 zf0Es=ZjJB$*V8o`zuThd(i8J>_v~v+xXnX*LG>5ko?NeWZv6Gbo!uO&x82Gw&TnJ^ zeS30EcKOwPM%wJj#2*D|^Q-%ZwE6JK>Utsg1?%(U2_R(w|chT*> zy!P*5@_5_J|50bVzdo=(W5JGM>Yv|LkMYPZ{vb~uU2GWWH?3`7)-^mjI{D+Vt-o3S z`lWH=GkbzBt83Q-rlOYg{J{ZF_lu9l-(H$A9=zrk-*^M|g{Bvt^B?XEB<~{p@?Ocs zhK#K4s3$GtrIg@jPHh~zfZ>u`N6n=I5hyGq4wW94IY#eYSdX5Q;U!2X@r#rSFct$; z)q=}YV(m-P=|<5wyU~;)6g!fkfnnuVrmNAljUVc4+F-6^>KFu0M=d~p(WLp|xR+&X z@!V=f_+oRxp^4I{W)9FUB%d?;&HdsnxjOx%nMOfiSRx5xl(nRxF6JhS30rFb1eIo6 zy%wp|(L~|W0@zqcbHriOyoFSufCVB@Gu-=3mcT&O8F)eN5rY$I4^$RQS7lHG5ln`* zp)v6Y>#)>QcP&y=Fgg`WwT2|gI&G*}@r!bpJr66RQgXlXiiP@!a(FO%|ay@rU1M^$*@cS@m(n# zYS@fVGNlifshUS{fld<8I(Z~tYD_8%ncu*3%{>q^K#k3qdM$-)7Abzr;403v)f$Bv zY*SENYsge3fsKqX@XDPRo=mDU0n5XIsv5I(AdnkP&(6afrFkyGnr8`P&>ap+iBFJvw@dZX65sm<&AMUX_Q- zTW?QG;SvzV-r%;fLfwr@x#fY_TXYLoZ!h_zQV1ke*v~vk;6@=y4k}%AB!=k#pmXIULZDK^T>ElCluNtOcJ$5 zZmTnR=@=ulM2Jmd4=#-{U#%Fw%#wTZ{NnLKcpeCq`)7G}a$&mr?Uu*)F}FvE6J8SJe>?^B z{=waDm;T}A8XrX|&@2DTw+dJd?FlDP_YnnlniXk$hC^l4njHk6qh<>?ApO_DQ6{RKYy==_{M6o_tD%m7x!6W;c&V#%c**U~7M#_0of92-3{%++U_ z;ETD!VV3@$X76w0;xTLxU!Dx8GM@jP6bi4VM5LMEgm8{>@_e_Rpxx2Q<}tjIg#Y6F z@^ALf))%{dtx+zvf4}Jg;Bnjw0B-2~Hle^e7HzE;EtNR+-ShfIAzrw}+&En2|Q zOMLRbA6-1YI-AYC^s0>clg1K%4)e+ndz;tYRqL`C{G?$6V<(gZnmC&Ij zgfIbk%G6>V(xxw4+78FSLA<9Hbb#eKNDSo6hDd=tYp!|GgiH%qIC-F2<}#znTS;3K zgl9P)PzK|g{9r@E2&#;oBemuW{$Gu4wq6Bg3GOZi6i_2VnPQ%msv;UYTgqxBrm(`Z zz*e0z!xN7@rp_d&)A;Fq;R!nbs#&^XCc$Vp09~^%)zAiUsi7kzz{ju-8+o>1Nb*L8 zIGC+Hp!QnQC~dM^K}!L7mn}G2QALPkAjz6&c+0s26JDjwkfKj6H*#7PH6-u?%An+| zNS_9m7!K>Dc_avQgPu<#aI`(sOp**=WD7bJeexdKzgmz@o*XKNCe$2f6zqKUSgyuU z7-3H|B2EFN#_EkJBbsT1DQ?}aj85EUdV!DJAl zqdq4pk}0IFgS)Ko2(cnjn4E$P9Hk-FsFL_vLP*u^c?QTpLS{KPhw^b`sxdY~w2YN9 zG_TOH6xnIFO3oof-e-_nCj(uq;5y~DifYAKam72Dt|O&LVGqn15l@;+s~VQ?ugDxR zN{0ps7Tm;yW_7x>1ikA#Eum_r3IlQ>dOtFWwW!6>wi{ z^GfJw1<2h#R*-!4Y&njMHx7@bV`^Jg#!OsdPP}-zHRN7r^2AO(#R7XE0(?T9-G>gl z!Xg8E7Z`=Wj!2=1M_3$pa*_tC_E^eR5)QbG2oj5lA_B@PLrKaB%29J+(VklxoKi8$ zdor+5g9yS&PUa8Dy{ZIVk=u0m4qo}%n7H3U55 z)_P0g*Lx~jI58ZYWdVdcs^x+)WMs`!ycAu@Q_01J`5K561J0|JqQu&S*$1A>V=}si zlq>RSQD9D1&|9b|HA^$}ClcP%q1KD0NG{>lCo`%pdm3Rde!nlP38cORW^7Q4A*@6L zb!3I5QbNyel(ue`MphXikzdho768*8l{|CBJCkG!1c`%3>q3eV0wq|a_Ewtg#EbTz z>#f()%$Mq@txOZ()dWV9k%RP6JPPPIOlqj?nMy#86{dq0;W(`&xXixE#z5|ZHj2=w z;FM<Qy)F=bVzA1( zxvvP4-@cdnx09nMPmkBWZ2kKEDD(Yedli0iKis1{~r-v^Zp>TAL}Cgn_6EDa}a)@7@bpti&$ts+g$ z;5LrX(}XS~b+-8$UdCZHc@!J%YzuMtN}fD@cK%tdDGsR0-)K~Sd-B(K`7%BF`!0xo z;Pm!VtLr0)gfH*Qk3Vc2xT3i0!urQr7sR)(3l6$hFTXAK%q;zLQTeA_RDN%g$k0@! zR?0D;q>>W#2^2>OttZpg2Olc$pa3v9jg<>7UHT9`VCaTlY7L>)19p%1mvU9y$p?SjjB z5tjriV&_mut&yq*)5g=nb{9g*Vlk1W0dae8RF`Jg_lXvO)x{ii!K!aQQf+NeEIm@q zUZ{vK(z5xwT4F9bbvYV!hZyXVkPB{|c&2J0_YtM9!%}LkF$G`H251x6kdStd(0vh2 zf*qMl-c=4z)T6T8)ur=Ik?V4ynYY)MS3tH85Ht4UzlJUD_RXyO0 z6&Z&E#>_GUnFbV%E1Gtzf9bdkj^umo@Mk#c=9!!i*?9?8b!&6xo;ag(<|9Q#yDn%V zU!n_Hor`VV`Yfrq?qLP!*n2war8)A+cah06??0`lRI-6BB`Dk@dn64KXPT2|jl2>% zvpG{0V!V5?NI(L5pj<)^bw)o{)6|uOcMD0H#cipC-E6%<0A%I5iL_mjtg|fZiK7T{ zTSH8E>aO-aqLu8o!@AG8lW0aPs5f-O3i+aK#;Sh!_1h}8%mO!z_Y}u~&vrKIv52U* zK4jg6ntIF;nUN^mSMMNhR~loq=z<1bCSX@{5LX)U7|_7iN;TmH^wGq8Vr$!%=9sH? zN(S|PNB*J{v?$n6BM{jxZ?(Y|Cz(fo$8#n`om1BqM^rKA*R5}C+_+G-7APuw4fuNQ zDFu<{`)Vb+CbQ(GBrY+0%#pfxfr^ca6!=`mmb$9NDjL?fW6>3KfHb39XrT{DV=3xg zGwWGa?ma;3&M?$?VsQ@G^%{8{CR(J$NUo#7#sY)HNEAW}tl5j__1iks|50dgM+T0J=$og z_4SZOi9$5R$>f+&W}`hy)x#dp~VlZz5#T$a)&>U8I?ObL?1(eg$d(;-A8~hmg`zaKw!{sNONgaYhMOgd z2PZe8J1Il7l$Lo(C0s}Wonh{EF69F?7RV7=Ni(ES_VK;01q+j0L-P;57BRf1t)|o+ z5~BP%tYqu(6fruE2Ah(`Mj1VR1Ok`7ej5hi);a*Vb?-mw27`>D4`;q@VZc097Rm;>KDqa`2pz7|nvma;2{F=mekD zOulelnN}Qc zU3uW1ri@8^G6cYmI+(#d)KtmK$ zZElgwtti}j8YX5LtOjryW7f`5b*8m);2LD$&FTt8MQW8=-b52>QaIJseP@`!S~jZa z41?`Jl2M?YWjK?mY4!5a$8J-YvLtA3S^@VEFPg;UqgCAwYq@BYN_mV(Q6gq9AE^bO zidsmP*O#{8LTaAWx654&}<&DP^uWjIBB(Yvt;^g zSSlv2cx4b9Hk3w;Q^a~tWj*AbHMW+?6g$w$6>5(`6Q5%>%9dx$BQRyJFsD{SFt@gQhW?)Lh`UqVKg@j=Gloi%drES3%CgjEtObo3AcC* z9btNM7NFqi$o7s*-n#S6W5Abn*c>XMlV3gej;!T`W!JK%g9M@0&S6<*&g}k2*UGRu z!dg4HP>W?Dxs!1)^P#W9rq8NI%Gg$@LkPPz!gXpEhdJKNu-scU5J9jGVOOckP-?|$ zic(Ww(}(Bg+{6;gurNagyFj0##SNcgDt^gdJde;S79I&VtJV$!@ucB~1)sFJ?J%Ef zY2JYkj?ixJAmVsYrzr`BWNwmd!<_Kl5LDq2P$o~KkOYY04Im6Z2~)qz2S*FzpVR)akgoS!Dl z+%|elH0#kv@&Pc}5Hqy^wrpt}twd+b`{|RYj}d}H#INHN1S`i-i|1N%j&9x4)W>Yy zkztsRjqxsUqQcc%aiLqsd+IYsFBT}l{TzGi)M^v*Je);XuGhB0=a`3ff!;+R$P{Xd z>4TGUin(VS>#(9RV3!z~DPrp;v1BT4RF|Yr=eI8%sdR%$cF7`<9AsK355xYpkFdNg zzN9o8?qr(S{=>d%15rga1?!>YC1ms^cLo4AXROI}IBFvo%5Io(a(*oGuU~uG*~##f z#WbPpteH$oDJ6}tIe2`_nqn3z5r&%48#P7=qDALZ^T{pysuwrAWTO-@zAYSYz&4hh zj}U6+MKXlv)m$iK4(lxBQp!}L#@;8c2B0Ah>(g3wOg)2244qN)abTYnnO)_)4E28C z$yH{jbSYnM+R6xjFzZ_N}SaN#qd+sGS80*@f0RXxT>9l zt_{zMQ}!vgEZaR*-yo|ZXb|z+)<$4bsjXEVk@GC;u-GQHu~s7%W-*euFevNnHP|$* z>jl)T({rRQa5*a=N^t9INjzezCD?XY#Uz6_j*X&M-ZsS^lD#lnDcj|>lq5QodQ;!8 zLj+H6XxSGTt+;i0ZMMqNC^!s*fdk4kiAotGyWoRc!ZJT&UkrkY`xIe@t}9%@#N4oA z(XZb&YjJ5t8Ywr5nlP(rqUlPWeUuvGc9_+vxzo(uQH)-wC1+UB#wZSM`z6D5Fl|@t zG8pug z5yLKB${Krv(_-2^K{t#&AROO0li3VBMm1ftb71eQ25epoHuLC77&_Wsbz+%VwCxX@ zRt5!V{9=$y67Zi>x!}o@sM}#smMRr%5DSI?F*FlPpFxKoHnvYgsUG_*Lmg>7y{>jD zAz>A2>es*(SWwJzG$Zy4zGkd@8Lqq>vG)#ZzYx5pSu@nSAa~*6Xem#sBjF2Em%235 zp^Y$If;xCWwJsznWtzja$i=MHO*7roG#|*?S~+;kr_!ika4Mk>BAfz@Vr$9MJ41;q}%VUtsefIyKyfev}t*628iXx?P5_Z{Wv_UpGPYv%m1sY78M+O*H%IO+kdC+f zy<;m&_rY@!)&Xs}yN2-r)YEfnvekAvy4rfh&d2O*!=D9Jy|A`#?bckXERA2Pqjn!X>7b3>iweI~THgA~J?DkbL(_TptS=ot1G|p2D7#I|>6&Nh z>-*c@ePh&QMy1+og?#_g+~u^j$}x!-&|>59q>f?8ESgpaq$(UnhvPJEmba2evt$NX z>JYUb8yD}My>|WkwAHjNO3;Ga#<80`pPXzdFqgCEvTXNqE_%~;vHOMKejf*ZY1hVP zyNG31nu#Z}0F!XYDd$`6qhwuW+$b>GzOH9A0@5UYGstNN3l)EAOw6 z0eA`kQBJikU)tvAGrshkT<`YO`-}oZflYEUBX8!sJ)=fy=NRrcX={)2n4tr&E&w@TgL5XOx9Hw%I%w?6~N0rSFl9cBRT4t6A$M>fZL~rMsn3 zXk)W*Wo4vUaxcKD5~p)}&#VW2&X?A@lQl}TW3BXh_6)s>RmW-4S6;8Big2=y;oya@K$VG(zf1NJ+;QJA3;i$ zVkC1d;D(>LZb005?9^~xlw1NJQY<9veIjMWgG82;p0!Dvpi;G-6kQ5)n9(Ie`HyAG z-E%x|Oj7PlZZs+KRLVMKg)jhFOE#o25^h3){7lp@KIeIBmp~c?j5r^ogFz`l(b%aW zT9!FmGh1;%x)po7rsG4BtasA#($mFbr4C(EzfZF|)pF_;{eUnXYngYj)?IRlA4YP!evcs;)o@tQKM z51_EVIqTnRY4Kb=Sz{0FuZ3@t3=c4lZhkV7D@nO-)c5up&O>oQ#@5l*5<@yVaRsCp zsrOb#zoNN+KjCI4)bwp-N4l1DvKJl_Bu6|OZWZ$Hti=&wYV%v)&fGx zi)M>G$X*EyUv$)RHd8EMx&cmJOQeN0t!qh(xs2$WLK!n=Y&G7J3iX>0Af0(t<4Y|| zuijFPxePi#Td$_R&p1qwC5|>RdtKO~16^71X4Mn4j$_hGZE-=I+j45^bXTJGl9s~r zwr}pG>`(Z_v}5|rX>eRg&HyWAr9od*5ixx~0b!dIO{G76=|)`CEWOjc>8kydxFEh= zu1RW_`2sToH$Y#x<+YLR#xO`$-mR6B`oK47^2VNCQ_D_1Eti%tAO1$aue;e0rwbVY-6I^!< zjb$A#wLLnrveLq83@~F4262MKYfyp~_q6!*H~M@fuG_UCw}MvgKY)(SdHV9!k^L== zGwY&r;>fF$oSR7%9rMNQrHtFZGEZLfreRkXdd!CF7lN?|a{Y2!(Pv@OYr+e-KnWPV zpuS3NZ=dbzuo7STrdbG-Vq|eT^M$RcGzW@yn{vNpNBykS&~yr_xCO9w5oE2qr>$?9 z8pE8Vad0s#S>@69$Y_<{2z3UHnQM zWTbT$D`$5(J(g)Zw@Eq$;VQ78@xZ*74U&N_nX$}$3@*DODHI&=P}?q(rq%jfOJf;2 zPHpMFP#&^do(g!CsR`b_BfhlAoO|?C9`Aw&gg9P0y&Q>weOz988XC-0<>8S+ZMhhG zignshdcRoq$T)hbGUXHWe+G;(?w#_M$Skp}=KiMEbg|Nt(rIJ+OIfqEp3A(#j?^0f zaGt4B4T$xYOj}K*PaCRQR!oX}EAyCVPHoQ9PCHg!dgbQeIr!%s*yj6435`lM({oDe zsh8E}GV`&%PdnMA^i&5`&GHIL(9)87>#{aV1ZVX2`tF@`_JZb}lZ>(?KT)5yutWSr zr~6bStc@NJ!xt5xqO4Z-e$U?imfiV4nkc2EgVoSy^|o}IwOONK@6zk0^KSx=9hA`R z6rixVXgxF@^4`n6ctA3M2HDo+`FT3Km9|Yr4K%O!w{Mw?(-}?gU_3n~&2pu$yQ!;L zHmZ?Om3pRLD5mtzjBi!?^X0Y2^EUf)aFW>p=VNey!C-HPyFBH?d;3%!MRNy@ zq|m-{r3HhoGdv3Bjk&!Bnlzx&)DXbmCoiZ|_LTts>`k zOZF%=-Z*Vro-4fmx&cl*+!dyZ8&UP9l|I|2^rt=Q-fp+nvL3Ttx(`M&^FeOJ$*7&t zf(g^@c8h&)f?)VLxEe~@QC5;-8r5KTahq+V6)Ydz3M?D>8>)EU2fo1 zp6sM}Z_YhutqcwVrt6C#Hd}X?M*6L3$r)*6JGJ!eUpv;<%r+hX0h{VY-@F+B+WQ*ZJ#;}{|=hgROB-dZLy|d%Onvqoyu7hm%Ikh0Z4=w@A_GX9@ zuRc|c=FOoRU>+`^@k?=55cjmhcA?kBvXa)}h^*zT9Z&DGGO+}hz}xalNmkxS$X3Q` z9WgK_rFoiPM>oqBEgcq1eyQyIBp3A_71zjXZnK$g=epsA0D_ce<^q@Mb|hl?YJV?$ zB>7dbxk218@zS0@odKGA7_oUmqR=3tX(3OEHZW|}fiU7O9Afe2c z-CZ72^{C%Q%{||ahI|njC?_r5GcE1!)x71zV>#+s_vD&Je1^81wBc&|>Jzmp7QG6+Iz@nR*9Bq5R&4UwBo{u(EN9^Qd1i7H5u3WdExE1NCUd{4OlW!1@ zSpMc4ko-yV4y2SqLo>VP>T|V-IZ)dV(Kziu3dVyisy-{bmYh|iYa6;H`?NGG?*g}C z;a+hHh2HMxMyoiisXUtrSUd^S18fSCRb4LT^y#teGT*tWPxd#CQe}M8Uhf6GXazPn z-0~8OBQIhgbF#`qzRw(In3iw}9`0hAIm_s?^ycK-F-k4n^6O=nUwCuYtr#eLxet|r zvZcHC9X4g|(_8Q3mH83d#-h#llOBeqavOLEC{cy8aNRUm zVPpBN^WZs5N$}{5c1LCAZ;!q1=hZyc)~9==!%R%N*f%sDiVjDvZ8h+?<=_ z9(<&+d&}i%YCQw`)sghrO!*CI7a!ac57K5BlrIw~0rXpmlniLODzBHT<@>bfcN&*B zd?>oo+)enFZJ+$w3NT^d8oU^(!-NtnIv`f2S1@Kngpc+;Ku7V$g z$PRYXIHyfmozz`mH8Uxu!8GV=*O_xrl*ipG*9G^G6R48fOCMo_ykOT;gFoLqgpTUG#) zv$pEzzO?m{#aGNrE)$`zU|VU+Es=d{|DwnoigYpCf7!F6+O+${+VlOgw1=&9 zV`u)BO^?}i8T@S>0xGP)ee$05o_m8lHaBdmcbOoAN{J<(1CLYnJ4<~xcBHx4B`~Ba z?3N6fmKkK1HQMR6OVmhn&!Wbo9YD^av~8Kgs8-d}T5a(H?!~|a>T-w4{9dwkYdTY# zSw8iHg|TE>7r*xmpZpO61?WHX$g-?@(fKV~y6mLd*=nHLTZMiDzpI?LX7mg5G-vC= zZj3Pm0n&$Y>Nc=%ILEQSooV?5KjR+S-fyhYlje+HE&cTpEcE+ zvQJL?gjH0At}l}M>tl^$A(eH#H9OkO|vt zT#D_QhpkMOK`b+Id7B{-+6o;>;i;F?cHM0wNQh<3NUf!NInXxGF|5#W*0edV?ZEI= zFlrko_0Fw-=uB?Wl-Keay!e>Qs5B_{JI$~$LhGOp>eSUaJXiQ5v1~K}Zt5H8l@WsR zqWOBW-F^M5xKw7FKcxoKe<|z>o`#h=@-45w-?Hs6nU_GdrOyJ3P1Em{vaPiM=e1W= z(+PnA2KZdbc+sp`qb_ECy(MZkIV>a%QoO(K+sf!pgeB`RcL=RLP>VGYe6H@wjkIK*`P!>;7y%* zjqW8i3MkodB~2>kWg{=IyT$B7r_4jWPz=P(*F?*KLxg$uReQDX(}cKr8Y_t6+FN4a zm+CJ4=DEv^VK;VcFK&YKg(PP@a_2yZymtOuxX<{j>V3|tM4@yJy&Ba0Ht zz*^=^&c%~f`BDtROysq9-$zPO)qMc9PaC}ThjV&(YEyl8-L5fJB(_4F{u}IDDwOEg zOUm~=0kt_{2ez(;}VTAgd}xETlcigHrmbc%Iwj!1r3yfmfge(G&uxid7OQMYO9B59P~ihqE|mK zh?Jp57ZcL+Vt+gLW#*^#Q{M~(9o}(slU}>77s!v^l2@rcUFU)jAV{qUfTl!&low(; zz5QN*6>s>6$(|qTKHp%gsr^Hb_1W1B6dkuhdBI)bX6e$q2B;sE10}i#@uM1)gA*HLpiQXH0vog}s|+NVc+ttj!;v;`pEt30d^x5( zl+3TfdeaW&KtTEXPNVFXTRYiCcBl8CIQud| zK^X=GExf(nYSc(fm-Akpc7}t2>t0MeYw=^{c0U1tTRnPVO`HdJMF8hvdUpohFT6f~ z%kCb?zOz#1QJDGTXq)$DYqJD9-RhgplztD1FYSrUpF|Axlv(!)4|Z$e?6#Tt)(@48 zS$iE@!E1NBpJm~otVbmWPEJi0kdF6kg8}3W^1rnsx@jvOg;}lqgtyX}V~*--<9wg? zM(@xWD{`buip?O6$J_I_ZCLDY1~nB8)NPx)0Q1Ti`gnF>#3QjIne1mL_f*0?kj7&% zPW6+=@qFJm46<%}740ZdpiaPxR&G5k#hYm+zGbjTF1<`>RXOI>Z)!x_j5FHa-?D3M z><7J&F$9@0)GV@YIWluyA*N&5n$uG~v4^ykTmV)Z#NU4BDQpflVKuIu-UvP5d{C4x zh{7KI_W5lNW~3Q8@Gatok$3W?Mp2j?9?L31|&b#ar^xzcz@}ZbS zr#qI6z1x!L>shu7?w<|vKWL8ETvLfnBfryQzF@1r0YX|(KcHQyF26xa!^lgch$FZKst8Y zGKykZ+$?2#rGDd6bTzxp=k}J)SqlkefEPw!wx!lB3ir z;}tLaN{utiUR#|>C>d6ed4ztUrG~iVj=4tk3-+|BK(gL@Xd-A?D`cu!=-(||<6x-RTLm1yZ2qxF-hebQ$bZazW&{=^ofO3$~ zE-6>_1)Ar@W;+{|GiV-r(_#QRPU}!fAYa6?Q_npwoeaFm<^bNATDfIbFRSP8)1E%g zp)ZO;B1Q^<NR8B%1;BshZ?e)dAh#$D!Yyz4>=STvE5TaX(yenrr}in$RbPK|7L^t?lD7^bLMOJ+?bZzcjUL&TmYd&<_te{b zx|XGK*rFdhd10J7o>YX2J$57)efgTFU4zq#48NcvbU*D<#eQGf`>b6n`f+wkFC=WO zw7ssJ8y(GxWwQb6Cky6P%jlQ(OINHPd*e#5bi8{Js;EjWD{ukV@SYw>$ZmC&U`_a_ z+TUo&J2wllxQ}yECsWP_4#$yhHrkrCVTT=*s-p=OK5pRbQod6oFm6WMCwS}qV832%ZdfC)>q5Q*T3*MJ(qiZ7@|n6bd-pH$`v*f9pn4k z7%odr;TbD6litGQRy*CT_8g=;w_Fj8rrdfUW_VQ3o&X%IuYPLqE!}e4WmkEWFY3w92~xEti8rPyHHCUuxyCT_F^Z`|yWm zz}x#<86Sp_)%dcWX%&wu)7VPQ`XrS_^xssq=w+}bz77EiZ*~FiTb+;0E3YHoEt~}4 z0m(oV@{n8Z_)`8#?VbN$R*VaMtM7M zF1S*1mcIR>Cif$E;#e(_1GF3T!YRD^40!<+E?GQ}niP8JYt0r(|{t@<%jC>GkfRMrz+H^Y&Z7w;9Ldh>To& zK2Z0Z@9B9*9kOznodf2;Uls^D4x{Vc?eq50mxh6L9<$+)-XxT03Xz(qzI`Vn#hPPq zu(DIZQyh1Rk>T>DA;UeK46P zp^j{;Ix&rn~zy@zdbBa773}8pm?bB*6+0Dy6M0oC>7~({Dj7Id_u+? za0%8*+6LYT_gF8zuCUACbv5PIL(q{6n{K0P^SVb}`?kgNwt72jZ#Gr7n$U(=47YV)d8tpyr zpl%dDn{nY$a_m2J6Rue->w{@EHX2O-g8|MPbXP5aLOr4g)|fg)7;4ba(9kM3_Kns1o&J&$Ko zMpO>5EyTiW9lL~>&Tv8>SneDNvhtY*=_@D)Ymd9(Q2B!A zfJ%;B-Q-@zSRDhy3Arq>NeJq)XP%%pEQ3#`tD%w#dZY?eeGQvi7oG zGz8%5obL1G)N!d1!3Tls7UHaTdK)d?tUL6!(h1(B`+&3UkxrW#&5G`*d)J*UBrRHz zn1PckR0ht32?UixY_hJ-1L?{g)E()HHemBnmb^aij6N%nF_|@ODKSY2UE4`IcPV{Y zk=T28maKcBe4>jYkz-Xi`qQmDPyMKm8^@A8AVTj@$=!s1ZCXdJpPR>xZg-b*`XNA8 zYnV$hYlHpeB5$9n8e7dSb>~KH5rzYGIOD?LsrI9i--@R<2Cg)B!|QLV=((QM=Dg&O z^cu9KT}E@3k~+T5tC4@H1V1`WOLbyeL*YmZ!cL`%ZolERG_U%OGH=5iI@40c z%ti=#FkLW6kG3suzEB+OKF6-}q!-HsTbq%C4&i2lnzY5T*9~U|Gj=53kSp3|khcVB zb_s>@hB`{BueP96P1=9rb6eLUGXvML3~PiuE)_+L^&zFal6LP{otfwF37J|aGlLs^ zq)Q?TG@I%5*=@7E^?jNy#{{YpSS?*M*A4kZJIu@V*!O8BuM)hxLz6-(2)y`~B|nS_ zBs z7ed;wb9d_dZNnC0=6FK1wnsU3qx?U-S!n!Ut2PTL<@YY=ZI+Fc9k?rs94V8xQg(0p z)b{$m^s=8p#>?d^rL15$Q?!_u$x+QR<2)_Umgr?GP`?8DZASmcmrayOQM;hJ)V|;-=0{)pw-qFp$`}rRuAS)aCP*Z`re>EtR?VA3IVDXOB8Y*815f zZC_UzROPZmQNhSr3e%i0OxyLl3#*-s_P6zL@u5|GbZv}@-^0Qy-mC?S7vhHyutZ<4 zb>DO)8*|F3<@+=rhhbMG4M*_lQwbu@Q@OCx!hvD0WBpvPXke3tCZ#Ze(z0JUMvzft zs9*?0-K!{roGB)n#GS_ko&vXsW!hg*Dh}w8!gap@xp$nIt?3s>4ykL9zO>=A3Hn2O zu8DzoUgcGJ-?DYipb(J1yDgo^FOpl!-fIPUY`@yuy-;o0xEk5<%HFi|tIuy!|CWu@ zqvi1kASK@gKm#|lm+c+<&<`&b$@TY^!C#UOr< zF19FsB$heDVo!HLN?Ftvs0a_XDxxYqI?9vJxohVH5`zo$eH7ta<;p?+Ib6ifY?(JB- zwJ*u0tzp2PJ2-tfkHm;~%MC&9mm*)^^>U+)Jv#Qm$|LAy(jdoTHM#P5L?_+zeW`l8W|sEk zx-F_`Bv`&XZj5u}6&GY7t@ud#R9yGLJ*AY!ZccTrm}i~Uc1B%@>;(q+OFAxSUVc@4 zV-cFuP^%U;4M<*dsN@Y0yDp79`pnwo~ce&C9)=?^I7ydF!1KLMbn~%{yl_!Et#P zmJO&um^yUhKwS^~E0(!Vxb>|}YD?&h2I+d@yp-`zx!*F*PcovI16~I<2`^0exaMO7 zE9@X=xSKB@I=Nf>ev%^@k z#X)&CLP%vQcfTy=gH`K3LA<9)!I6^wecBmU?>+N#gwD#b5YAKUi=&G?xrQk~sn<_% zFmAD1aUO$Z4x@wd%|U`;6(g&4gS&DIBFxg#w$MOzOUs$iA^0wD+!?*hEypZZK%bB6 z9#(7{15WLF4>BQ^)m%e$yfVAx&W4b=q#K-sI#uIzzIB+4a?{|U6Pj(CwvyKTbiO4m z^jWu+)@B{l>g-6!xDJ*(GK=js=jTIvTRoL7p&2uAD1&CqGau#_$E?SLbXzC7t0$l; zF31il67Dy%jnbK|vP_!qhKs7y`w4Q_B?u8qHM_ljW-pi7i${(k8_C5l_|B91s~d0L zRl=+fN3j)@u?jYbOO@i{^a|z{_pI*)ymFPckRG?frW?r_k>%O&#GTt~|CagOt)v!k zxe^%3^R}&^T>tI@Qa=Rtl z8F8N8KK6!>G7v0@F+a6_lKC3>?lRVl=dIfuOfh#Ds^m`BCOa)M_wL%Wgl*TwFYeWs zYA8nE%*pcYX+k0{b^Gh_08v1$ze_dSLGQ+SnS`ccVf%5Gw))J<4k_rxuBKpt5|}Ck zYxolB_Dc7X2ULKM)!9*qnE&Hw2zV3o6o}p?1r@oO_&=@n1YN8#i-5tM&A2M z+*2Ra0R_|08QR}uO>P=T$7u3)`JT5`a;S2iwxCoop#cD&SC8rT9EBONd%HrZFyQn- zfk9`alOoMTKWfn38BWYfGYrZI8(i~*k6AZd=Vp*Rp;YEGJ!MC=6kZeEdukaozN@Fi zy#5}LZb8xrR|-cPzlW)^9ex3LQY^d6C0tZ#c`ST^5l47=!|}C?o&4URk1|F(xOHLf zygLeYIkS$60abXYSG+Dj1ZO1CM5T&PzyOx2MME@kU*8MovAJkcNK|xTSA6%jDb;#( zl=n@1dJu&Xf7nUogpE@SJKB5p4SC4RRp#t7%{VPL69Ex|>~k}nT|FN1m*G{ykZQa) z8`aYGmfG0GSKhA&_xR;in;b>*gUv5K7z=F5 ze!jo$@J8bh1!81h)#J+SGBt-&@kxHQCxe=h-)tocj92s=X@^0~ zW$w&vd&VAH>xTUjr_3v;FMXs@VKTSz^F6+GDdRW!D%DqAA(tk&p75f%ZVShc>q9S- z1CM2^ckEzt1;NmDllqlZM?E}XRDrRKIvRfz&R*FRjSQ+0w@%BQ(QSk&Rv#C<$D%sJ zo+aC1a+}>7?u{#!Z6;vwyMhvr!2vHs!)t-JX2%Dk0Z4{|w|Se?x+hEy zpPXX48Z2wTc`{`)Wb8WYxf6@?__SW}@Pn2I&=HJ>%ss`rC%a>v7t5w~y)~7~t=C7n zLLDNE*Z15j5VMCD(1EeiP(I?!MCt=meu8md(NGt@?)DJxFj4(fBzD-zrOPN#41>M- z`W>^raB_p4J_m7|J9)Ey_Q*@38hri9gC@6)DNg|p8TX|OnGE>L!@1&(I!^Iuh4HJY z_}jjlY>r&>+k1`p2}5k|;KlMT1dX7;u&7No``d`-?y*e>-_nE5T0k%{`)S=60F4iG zc(a~Ta!uJ!n8UqfJK#+bZMB?s;wMZ$jx4q)4b+PP-tNn(t+w-;*_Esx6R}^Gi8GmwFd$XB&6tvGVn1RO?^98h{ z%Vb4a;)?%!knY|ZCj+?qWY!i2%H_6HG!G&Cxdhbz))^i2u)KhD2xQ%`7+zCxmo@?$ zd|Mc5bC$&@GaR%~*)aXz&us^e1g3lU0g?rJMM|IzLwmWt+wT1aZu$0M5|6L*`_a7& z8`M?r5OPkA#>RCfJkFD9_(eZBjSfrm-8CM&+qcymRRjzvU#=U;w>AN~k8$BqUB=%A z6=yx1)tIom>xW=&eK!4Kf)_XIJc<%aAkTjcyB{1Cd$+arJ`bXIm*J?*5FER+e3CcJ zNuY?AkON|9Wn#{)4cVKmFyeH!_?48)+@SFZ++h zwfy;iIItTJHwWr$q*#@Yl1xXw$G>#x8zmB5S}BT&G{o#d!FabS3LLtxzw!FP!57qb!;Ut zFUxON!?gPa%P|*iN_1l{3=rWf2U)a+?BU*1qKwR_TXVkONLw%nQ`(_k;q}XMjZALL zcqNCKCoNUGH+iok_0z|5srKHNb;4-6GDU)@87@e5j|4IS!jW5v37rCI6dHn0$e+Hx=cdKdG;9<<~}lETuCc+4j0-=I1u`|;tDzVTc%B|qR_)%=!XHMAWv6;XFhx#>svB!v~*CFKX$2exId?q}3c03s?XhHkZ?v)Y{C-M#tUIMetlR;Uf+T<<_1m>k- zCbsu_+94xGP)Nb+w53+5gn12D40NQ+UB}lBa4g$=`9<>>c9A?tkgwhSWVfU5i)*n} zYD3z1OC0NzxX99x^)y@v?MnbzZ?ubOl+oNFMF`t!%*yv$TWVOR!Xxhkld%iDM6*gg zlH6N6#fI!J>%@^h_QAbwA0+NE1NGOI;(=SgWw*}0dV1%D$$w57PQk5u9&nz*x*;!V z%Irv^o1Q|Q^ICedZapJ!(Jv@uN`WGX#Ws_{91J}0&wTE(<|m$`@VA@8%6z%XVeAx{gHNlo`+Vsc^b# z&!?pcA0%cgiYn4dS!=w0?MqHM-jRr>3cW+{y>P}H(#B~J@?JFE`86q+kNJ+^2Gna9 zX7{0W^wvf73*)G}2BY18#I_Qe0=sCnJL;|VoG;pAm`d@KgIf8>{b90jq(7*#{>keK z^Xg4cvl*3^*rFSy>=|<4f3z_9&$lwrNcfC!7dA$mnsDJOZ>`#*(=TO$NO@Yy$PcE~ z%4}T2PScr(g@bf~{fnHhub>$Z50|&ZIM{G8^dM@I0J59l&=p?_82dAA#$ai$7h*k# z4>um%#-?fwILm8VK7|%+SP)A}rB4=3J$g(q+n~$Nz9+BKZqbhv1j5J_9d{MMz}O`; z2*TDohJ?9psSe@u@@PZem_RKLA_RET^qZq7Elqm0_7eG9Y^s=h;HlNNE>ngMk;u?S zV}6qIK&QD24=#PRh|GMk@QdpvRr~Bay$A(^u&}y%s@)E=m3KmsT4W%4e2Flu&niUQ zs42JOB#`N5K4;*hs$Xsk*v zUr-|C9Y*J#@t16$Mh+L(#$)mDzwi?Nn>At3RFDb{VM3?7h;0T z_{IkgLe3I2RuCk%wJWbLi`hz|faGG4 zw^ExvOm1HPQZ}@-LMioSo$OP;wgtbn{>oYsomYWZ1K}`-L>FF*orz4?(M9d6F#|0s z1)gO(oT9RGO-B9&L=xb*=3f|xiigt(K3&vE$emzXf<>(L@<-Gx$`pybi~yjr#|yZF zlFFURCxl(avOYzYgteRq=BlKK^`W~PbH0#sVlPTK0E}OvvL+;}*?48TuQgZuQiP0# zxz*I7O@0>^Z*YpP_C4SI!2jYUoVd~slpQZ=yE&YZ>>9+P*vX3*Et;Xx1_2DmBx@(N z&QW^Sv);aCYve3xM52~pu>u?UE`44NvwHh2n;><0e|aK!Opk>Jua`?~Kv>h@&|C0! zJdf)ZEJs>(3@SY9%i~K<@m?%ge4&<|7)rJwUE}3*W=GtVP9GGvj<#+DLBZ!)1onD|@w3{*3BK{DOYxc9=z9QcUrr@#+ z4WrX01iWM%=gszM!2}8bs!-|+fev0mZ-|%05*S?PNP*(>g}+D{AenHSzw5RtBVPyQ z?&>4FQ_8VY@xHq)!iK_-igy8H)-bD!2*q+1=^!WB7Le>EeAiNK4l#q%WS2W~T^v<`~`V;|iUhVPdr@|?|9Iu17Yz%JX|6loWSpdPZF zI_)l$l{F-~ME^QEuib$z%Q!c*LRH%trAjIzq9<2L%=Qy!6-Hck{tQa05&pt#eGS71kS;rNe^$wb#IRWqcHtxAoem$Dm=^|Z zzh!ff+vO6}acVLgjHF}H-|js33s}*ynhV6R`*{m2=vFPSdKTe4L3OLkGXBJAa_d&?WkMJ&m^^28Y*S zEYr;ePq{M#vC7uwNak&$MV>8S=L*$+BZ$CrMDX9T1`TiNfyaa)StO?*y+C_gNxlnu zcDUUz{=aR{`lSe+wY5r4C!?DQqiHfNjCuxt9{Dn2ZX>DWrA_*lY$C?kg>lz0-u%zy zufD!S^`^Jt57{S!H>VjW!C&>cDSvZ8eV}zSF)Kl?Tz9aKCD5-FCA$s`k>_|oHMz9yU z5;SPDX~v})Jej?hw_94STxajUfE6hR$-BgqTpJSIh;j2`-uM3es9Sb9?F2g%=0oYp zLSB113A5++kSesiZMYil&Fx3SgF=T@U1_7TRY%qd2F{Vb5&1RmA`X=_W@&cot7CkT zC>=kAn)a(fU!-Br`0rtbyYcCYT#SM%1NKc!>O?=-gvX?~uZ^MF_i0C9Kf!|vj&4m0 z^LUssFbw-g7HUpW;9|U}3)-kljIP9qHBvVHQ%!oE6eqKf15vhQgDAnC`~m; z<@nwMMe>`2^wR2iwVsx2js6+2Dvk?RwzNL`-Ct5qvtoF#R+3$1MB+^0F5J3XdHPMF z8>%r4Dpy$bB1_cwfLG_}dzTwZw{UCG^~F?i7s?kWS`DwaslCORgXTY@ku)}O$usOC zM=C?)b)rIJqS|Ed;bDam5wX});>pn4!b5-i=a|&637iP92GcjhOukLi8(Z_1d3}DL z_Fxd_)DM4~5fq`7{XZZ`8~1xG`>cZX(v7L*d;0msrM z1$hz=`DV~Z@MF@qTRKF?Rx7s#o23ncc^X-Dcm~QrP1bKZD1*jXt;qLjt37xEjVx_> z{B3zx8bNz!7t=Tw+GM~SR5zJlSfo~nj8?Xdw)6Y4btcw50M!zqIUM3R4c>B|4psEx zv5aJ$_fn0^tD`cX)6~xDHIwTS^I5nE%2c+7(GheD#~>(h#nP79`2M!1hx7Y09+{+l z;YAq!$hLXb>ld0+FWy(URFP|@ynuzU?_nf;$oHOVSpHjTVF(Y>Y-XBzKkLEE_|ngt z$|i$5ZHqh+X2+!Z91*=8Te;w{VHY&Un`s`PR}Wv8`p}hd2m-ptFU2hr+SgnW5lch` zF*i&5&EDqup(4Q_rd)wB;^dmmk-frq3&WO%8_^1$Kbym2@;#7#_K{z=F5{Ii zMQD@(A_Qe&E45ku=4|cF+6uI0M8ncIUb6mD%WuM85;*v=~=){o#UP*?WhINM&a~Lo36&`gr-3$;bq zFF!+|REoj^`sid*-kcIX)g=r?#|MD>!@XZ!PZZly3;C#)c32Ary$3|86h&`OTx-NY z)Yb`FN*FkXzdMHTG^s=T9SxWBShm!C?vx8H55682aZM;e6a+QEE2*aq*r6K|vGC0{ z5A4~uG5E+kwi>DT9lW;6W+Mq_Gu)2+F*vDGM$i{gP!=-Cd%&B-I4K+A=!>qc=kvZG zq{YCHuZnDI_)aDl%150g`!2yBmPY&&IN8FZl9847rm6ZAJ(VHl7r~QH_2Hb_Fl}~& z_J?A32<)Z)_P4C;+W84DNH1Wj1A5QWz3MCa-WOfuC{KGD7HYy-FgC}*?6h2O^%8?B z83Z}&OBS~L0T9`KX=4;>%n$-(ma)fx@6;;y6xYS@t@FCApWTCYp)440sE)1dh+q@=UE2r5x+vV*Z$F9u17uxdnqVYtwlXqAi-Bxt$`^8bs zyKr|(j)wS~?bcJ%zzb>Cb3CAap<0HNPt+1V8@O>6*rE950Q$vzK~xbF<7b7D7fdq4 z^lx06UZI?dWmd5E!g3G=bmuk5$e_=?rOt;dTP(X>US0@0ki3&q;^et&#goj+ch-xO zO4{+c+`n<*8U#R-kT-3emg6DE^9rHOn`AjTw$(V0?zL9;gWNBc?X0gvq6$t^xVbsW z>@~xGytU0Q4QJz(-BxN5_ARg+AIQkv6(hE+U+~r`S1`7f*pU`QrWcl#Yxs7A_TMtS zhiYd=@O=-Ln2@ThRr{DZhct%w9Q&fQ2a{rs8k`K%*zI-FP1^TZ-acIbQH^7F~P`kW0=3FO>ZtOkZtG?(vvoat)M~Cu&lf7mQ!f#BR->e@3pm5!!wM~V&xDg z(i9EwZZWOsm8tmf)D^8aqDnF+F=Ca6Wd22M*(>!NW?(o7f8`2A+?(%p;p8sgr|nuO z8pdG007+osD7Es~ujgKR{^hVp-$EsZ?}3o>P8!xJ1?8OE4lBzp&F^)_I$=Y_dkW>` zHQOdCV|}3#efTMJr?(=rBg|Dv$vka5U&~MQfW5D&g{@}M?Uq}TBGLDOGI-n7`F+|# zOTQ8nlq855{B~TL9U<45@`Z7Xx(crW&b+^rG@N+WYws1 z*d)9__h5^zF&$&R;CIwn`z~Qy-H{sLyj%k6!`DMwU8%F53IvTX8S6UyAl-k9pFl*7 z9-LT0yMnoMB)D~Z)@vi<36L2M&bkbrNsEp!ny3c5bN=3vU^5}{;LXAZcxKGG%HH4K z=Gd3*o@ULspoIk}xFuUi_jT_2mTm0AH{3?~k`}%10x~vnt$Ck!N?*NBsGOt=C86ZC zT*!I%3fG!!zb~CcW9DCs%8`tq^ zj<=6UMUfPpxbh$wb9qF(+eTD1J^0>c|6$6C<9auGeIPY@d>R8jhT1TQDA+&d6$y$Vd6zjjPjPcn ztDsW3wAN3Ksp242PC5J>UQNeS@9Ir^5VJ5#o8|koxx3-U<`KL#a7>b$?l{P^v15rO zi*7zK!S+Xs9U~H*ny%8F&Q@0t+X#mf-0B9-ZSa3EeHy7}Vy&gTFMVnBt63o}--zeN z6oscZ+v&uSZ2kVWS!9LkEAU>tEY|(B-WlWj(w?q4%7!p-Y26@FJaLuhur`;o}9&l(rDux7#A0^+%~1d*Lx9Y432F8uyc$ zV-KTe-`T#nmVI{29R~wUxeypinV=|l;xyQUBrx{57iY?vNwR1=m@p?*yGSDHu+V=& z>KZ63kH&PAIX4tO#cClJ&YE}^?%QX<0DNpU*y(ZckxZ`JN@jK*nH^>8UOBahs36s`4MJjKi!#$mM^#gv3P8*e!xbp*^x+HBzfrInjNP#8k1~+UgOxu3x@GMPqfC6?}OjJS5gS{I`7IR)5G$}!t0p2!35AjJG^Y!Zi`a$N~ znRsqI>g2Wlna@@^Iw$BvjFzTWZxq*69G zSjJS4OeOi?LQ@^;c)rJi9wj_pT_}hNCP-B(xq3`M!%pfU5jOKibuPflq^3m_C84bu z;3CpQ2NLci5aA&^g3eG95DHr=6&A}**^E+Hfg=M74_WFdw#2cuL~#`u8o?<|M!h7B z!$FjJIQ9aENR)MV9@uJedxJUyK#;n0^2z!Xq?nMXIh0ORXNNrtYww5}t#cb4^cHBc zMCoh+IVchBY52qzTY*d~k($rYN0-AG?rhNTf%qgs8+2d*upgPJx(Pg%hh|cHW#gflNc#g?Ja>VC9Veu;tCjoup7)^ za2FBWOH~u@N@dOBZ5z>&%PKIDH13Af22+jAVw!^ihaUA%8SE}Nt9G&!r%gQ7R6MkS z0$ij7U|)i?H=K1gn%2v7wo1j-q5_am(?$uO3TFcnD_5(?TczfqBiEGG!VnxDT_p$1 z0Kp!@8j)X4E$9THlTiTN#cRuG#KQ$Fl|GmRd6gPT2Umet4P8E9^9B~K2FKkPC$*E* znuoO6lmmEIu^9o@;b`cZdrWOQY&eEuiq#XLqbjKEtIos2S}OF`CLb1?a@5L+`3q|5 zSz59dI^M{}gg%@)G@o68WgFUF$ltIzWTy$L^)>40Yy%$mO(kHLypJeeC9Rr;JR2(b zf_hC1PzkVkc#}Q?|B6V?#TWwcRK0A?UkvPVRe6|>cF{rK z8|DZQlObT`Lh&}1kzTKxyK+ zNHMgMz2M2y&>27>kT`)ttQu$YXnVE+^8S!EL>iFFfcTsh5EQ7Ujg4YRJ3zxPPF^QE znaJXbE~bYJ7f6#;)PN3jxEGnpaV9lX=rRImvAHR5^$K>xR&0w}=por?T_GGdMwOXG z3MhYs-Ih#%8~NlogIA1fmmoZXj%TibNjqrgrx>dsud)d?!mF+mWH!;c$q^7fn-RUa zVFbjUP4*HV4MC?5^x6U10nM{&n6yer0AKZ5#Lx$E2vJG8g?~VWco?J= z!lo0e%?PKucq3+*Zo_*bp(^RKaCuOsz=fhz54abwIdF!mrK(8O2{p$_ zpgZTT36$q7A{FSQ%E&`}6?!sIx0S=#RG>whSnGDUXVwanChn!_V1|UC8AU2YHAB2# zGaS6A7iGj=vzst=V{-wv9M*G;H3Y!T45c~vvgZa_c)=rOeAf)<8BRKoXoqKp;|u^5 z(m@xymITgDh1IFs8Zv@q94dOn!8bd3>%axLOCBKtXqd?^AjLMsy|d3k%+EC$E6d;j z@(L=(6_sBN8yfhL^fsBlaBN<)0x};JT0u9Wq-TN4L}ylJ7QEIVnCx^q0mla5j$9^c zoXN>9lNdq!8$0MW$+i(BqN;5T{X zkwK=j0tf`WI3tG8@LM;Gezn*cXw8fqCz&b?C$O`1L1$B&Tp=GPZV|ea2#~g^c&BJN zi_sf*pHkPZ*sVuQui1$2wiDVlL-{8HUT9tPXeElPi*XP>0Ne*C9dPeSCrlX>U2GWE zP98DM3yr;_eCvAz#0^xr%DS||LHEhk1@1`@bIsDlc8F@Cg$=6#F&?Wk5g%*<`?btTY+Za7?hkojj9KAc8B8va$Ek zlBFb&s$vI;0KI|GtS{g|fs^7Ap-x9(0@xRroWZ#?f|}{02<|yj#&AQ^#Z6XO#SzTY zu#{qi0E$>4#M(-Ox}u9tVx;0t0G$VzWHB*;Rtsbgt1-igKd}60faV_zi-79&fOU`t zy2&}4iw?mWaVLo_b*LB`Ft~(gBy!(Awt(m~Xeq+LhoylLNmy@u_8lPsdiy484~uW% z?ZV=$0fppbAUQO62;TM#odsyr3t_FK?ldHeCO2wffm&EO2c!rV5Er?&9N-BQ)zGM5 zB<%VO>9vG9Wrm4?TpLyg9U+H_o{_MNfe&PYePTDUNQ7U2N-fE&0UsVwkk6GMr)EtU z2@;=n@`$M*W-1N&RUe`-4z%J3?bsAqPli5aaE>1BPyj!GNzd-T5SDk)7t1UX=smFwu5t-*|!w)L@_JPX@daDL@*AT)VKh6jy;NFrxB<| zL7L^!HG{2=ui_32qB#7bhUMs{$J;6a$fUY7(J~J-_z2vw9tW_%vdffi&>~5y2ow#7 zj>?dga2ambDGcdn!8mXbaEge;CD^Wj7l&pHnSe-Kew1|=b(Pi=NY?Nlg+Xd`ko<54 z2C9?!3v_Q`?+7v--dG6(eLxQI%!L%O*tHn#;ZraKu3rgn0hsLqg~8smk(L}>T?(4r ziKV(y;F%jmOSY1MG4YrVYgWAfsu$OT2tyZ>R446?gKhQJBW9EViF#uvt?Z^Un8=i( zvk(;xQZXYP$wCSV=o&aaW0!$Iob?7tMoAJLlO~2l9BfCxmw}1!0JSHUh9%GPWKm)I z7@?6e0e(rC2DyVO=@Vzm*7vqGfAP7x02mm`bTGX`bse@1fuROAd7U^Nu;oBq#ce5# zsQejr-e{DYM6iXN)dg@bGz78BKzKxu%s>Nb7owna$Yu7-2`mZV$&IkcylRjl>$Pel za4+&@jBLTa!A2Pn;Tu40b*$D$SX@o6F0GVdsv3eZgN>im1|0;It2W(FmMBQ&A*3G- z2Kj*e3zle(5OB39F-<=T)wh5yMn|u01UN&HYFNmC?Duu@h=GP#0R|rM8w11|R2~CC zD6PjvvN#afB2k2VFzcbDC$TpfW-8Dkl0_BkF`=vAqli8w`BC^1QyFFeog-E`@aLme-F8aVw zw+?VEG)+VM-fKPiuvCK$EonlM5&@qsRk>k7(~f$we4^rXs0AHlj9%3H3gp+J)LK%2 zJ-3)~6t79JD}YIQJ75I}P3-1j@svUk>Il%68->8YD1zQ3s-^)*my0;F8$k^-9;p1 za&4V$X;|yU{T#@<+8Po8H!NgTS)`!}=;9cfYE4kDO}tJpA8T@)L+{h*WyegS2_o!5 zW>vVdqRcfE-`#d*F$JJq6w-6#*~kWaRoMA_>uCM@$#KRT@EW>-(v(IAqC{jj&A}Q>tYl#KM?rOv9(@7k16`h+2#*NUbUG|kL@=40 z*kXdA$~r4Xbdr7GiEc^2BXyURL%Bf=q%znL+5|M&N1Mba!B%AlEH@B&;%k;0s*-GB z8p+-0$s?wjsvDvjk{+c)3<1xz)|y7UQaVu8IMgPRY6;yj(71$dodJO^%J_e9}Tvp-Xu) z^F#_8!PV}Y4QVp;anzgVrYxL=*{o zH6e1C0M^YZNJSc3jWcCB%x4KJNhoFrD+@%a4MUS4#ljLw)d0!$q~XO0xIU`xAv9&0 zGbrbbi9L-#!iw%>0kAC$xQ18g78=}I3VC{Np?WsJaa1Jt3H?))e@zU`r31k!&n@aW zqW8)q6k#B~P@wH=tOzH;U}iG(0q0bF%*D_Lp;YV%7O}RHW|T|iutHck!2&~=*P}vh z7dEWJ3}^hb1J+0=_ZY-=qE`d&Fkt?=DLtDSOxv0bX)|;C}24oKrx-a~#mHFx1NANu;5`&kD|# zz%&9u2tqc9eys+brU{s=E-2qOSi$*#Tn2gvHWZM*p)DxSErDH45EO*FTxiIhhE>@W zldP-NNq8*UH_;EpsLOlM#vm!L3=sBME4v6>pckaUfr3mU&W6Py1_aw_SZ>Wqa)+{y z=!dY5q7MvWIjmrP7}aDG{ABr*NoS~Hk+d>lNt>&V2sKBpwv{Aw@`^G6d=Z>fFc23M z+iOE@-Y?Y|T0=Z|M zWfL#3o)jD2)SYX|^JLOAGF(VNb%*kpc$I-WY%`>gwVpiaYtO%O62Qgl~pU( zAmZ3yY7F@3!5*p+4alp;C~-(_K1EnyM+B*!oS>`$Dz>akH^!vNq^S(o4T3v#6)ELO z!-Bha#TrX~+5tOEcF{?}6!i|;>D*9#Fn-Bb4cE zs5Sb6&>f29=ouxAg{xF@lHX0&)+|9rmXUb)232rCwYp828_1i&T0)i=qXlqlh+h(z zGZhR@DdLo<^Y*Z$$%Bhm(5;Aw2H~Db;Bk@nRYIu-v0-10vK;{ia85KDdWOA6=GaNZ zg&J7a!~vnynA%>1j*xN9WE+fOX%{x&w~!!qFcIOX0@<#h0^Fl>&IoqIXDarA!g%!9 zWnh{`b|UX$URFwClHOp2VVa-hjy%C4G=_@U(iodM6o2Kg!3`U8W~mLPt}>+BSw~|a z%wZ>QonW=gErW)Sxd8ViNT5Kg0N^i8QV(gtaV#Ltccc~Izz{r}e1S#+Y*L%N(*Vwn zgJLb}Z-V=WwTlj>+TNWTWjY%yeLR@UB);45L5>h7fFeaqP^=Mis~#u+Dfkz852zMg zNPvY=&l7;VX6p(Zb+kP`)lnlxn1LTARNB`vv@ zO)6MyIf(QTsF|>05%V;%mk2F z0a$-HBMEzh#BqS^9t4Vfk6vZOda>8k!6K^?G&Z)0#4|M_Jg#8h0DEk+8Nu~lqTtCJ z1G-ToQWG;7NKwjJ^{Tn+PSFY^zVS#ETer3{LS(!-he8JjtPDmp{o07+K;;jDi;vKA zXmAlq286%htF+GBpw{3OK6Dli6n1CMDi%n@B{RI22QtRUkOXDqJ;D(tn5V`K0X6b$O9J2VAbT}D^(<01E!9)fORGUfKRLU6@`acGGHApMb zDOC=?*<0W&>s!aJ8GMA?x5!Vyf3OA>3h*cp@{ry~FRofxa0KCr<3WpR`lvo8QPP!H z4^dj51FIlu1<<>tJFNm67XrlIw}+J;A}Y5ITN{WsSxT>5nQC-sn&2?<(Q+5HaBLrN z)B-UjICc@7y{RnR!CdSRGaf*Nr66({LmB7LxXY;s8v-sQGQL}v&LrgZ08dEFmMG@Z zC1~u;YJ!MgfWftwzARihdw>xYbULMm-D ztVs$)aB!rk*tH(}XeLUfv3Ia%0J;dsEtnarB^2FZpOLcnGV9@V+8W{>uyVac2MXdV zAvX;~KXOz#tiabCmg2yZBLaehn(C&ZlOI6Tk;72JE{)W;-u-bH{b@T zPm(*VeU5O{8V!QR1`rpxDw7uGd~B1*KWj+ur=V<)LQE*CG=S9`&@CepOBBr-_T+T9z7?qJf9Q z1sZ$2a!patT44-9|-k7xZ3g(2DF#aGUK$fJWe3Q|ke+ zYEiC$f>sR3GK$56F9KHNGHi5s*P}>p*KSGHv3TmaG!|SmlWQ%boK_)85utts6|VxB z!qK5PDc43mNlPY*F*JnMiU=Af=>vIZgkr`7DswEVd6dF{D#*a$C(fuXa!b=df}>rx z5F$u;^}r26+<%0YnkJpKAYqtBg;~8C;wcHM(=1-RI`-}?3d>@*SK)xy#+mC8oA}psHvoaJM~z}EAVL6^vqD96eKfa6NdF7Uy!T)()03 z9sHFF=!E1&-3tbJI*WxOaW0kvP5xZgHu%3AVJ&IIPW)Q-Ba%ZMZy|_ zR*xW=n*(lz5xU6B>TwJd#!=Tt5e7c*&OzX$+kvG(A_wl(RxnW*R)-Tc4@9^SG6ao~ z@5~`Cz!9-!Jq`^Jb4l^Lua8tCJuHj4Gcc;!P$*qe2p;WlEZR{&}lpIuR#FK87hS> z4j@&wKMIO5@HPpobCw2}gMV~)r9|kt_35zIpd8zSw5QR&0osU~fsbV8EIe@@(1s8Z zC`knHEI?67)j&I^x+*}*p~2IGH5?OqvB8$o> zn0ltxY&+>Zd57tiA!C~inrHzsm<67>Y=f(sQk%?%Y>u7~he*xA16;ux4Jls}dJ#j2 z^TSranv048ee`JXVal{PhT{N{O!-l#M*!84D{Unc3G&g7vh&5l<5B#QTyh*K!5EaL zU?d~J4A8Fb7MCI~%Mm+goHEk(!aEg4JQ?8ZMi^0ur6a=PjFZv@+%XayK6?dsFK>vc z2zhhF){MA=dT2LwK=?{>%8@O_*}!S~QM8u2uF4E(g%KhO;yvyqaqsX|nM`fPDLIm&<2k-q(;MK6ynAcxoLnL z62)Ht;W04H)G~A$BgE7CmSQ$CX#&p#&})oz@SO)3Knxd+;*I#Ej6Adh#lRUsry{}= zP38bKBY-ETJIx~&cq57koChU>GT3msROgd#sZ6F|TFmOP%YbnJH@n`z04h#HJx5PJ zT7tJ2Ljy!lKdPC2G?k!vG}9;8IRJdAN^~uHV=x87zRAXMHI3nEIGKW3h?pn}S!9%) z5_D^|mDw5SHOI*m3}w)*b+Ctyp{N{KGA$0GF=_gZ1~hetj~=Q-nb39f3`KEhYQ{2BQ-gP;@k?lNfLLmVhTuXtR0f0$0@PbdJ(4L`C~1##`cm^m4x5@QVA3^}KUk ziV>GMAsw$)yx6=rr1?Uer!IMPeYIR2(zDrSpJ!hk9~|&?c3ooD^=xmwPm`n7-scC@ z{;~J$%tGlUFL*U?d!L$jdwTtjU-F{U>h;^cUSF)3HpjTXi{4(}Og3V_UM*jqH~4zX z59@n6IOgdB&e?vw>#&=cf&Fei_+Y;H$9Idr?DK-Z=hciB%gsKoW^H@nv)9YxSz9hP ztL4G0&w2f9c67X%(d^&MFaOQV)g*cR*JLWkbj6d?&J9AE(Zt+R`rM;1Rn)eqclljE!?e&q| zF#hw!m>+DWhks#SZQuO?CeYsBmdBIB946?AH{JGRpG{+X?+s?$ay5U61!V7Y+H4MZ z%=us{8Lc<-#rCP}eYK+R`86)-^xePs&*kF8%J1xpe}A@jv`^>e+2yFgqJJ*aa_ge(S^hR&NC zxHSNTKzqNw6>?nZ+DIIR1Jai)LS}%gOE4NBXfRG(v`)ZBD|&VC0$~;5mL|tZF`|6y zZ#x(~LYWs3e3hdYPb~<80hLg6t;vLubA2nOJAA#_hrQ`pFlVlCQT;uy+CD8dv*nom znHS5$n?-2nBQy8T$ZY3u>nG3&?)Y3u-)tW78-+9k4Ru*UzS5d~`ss zc{N*8Tg}J3@p?vQM=l2j{d_fR`^$ObPtHeoSAO$|SBJFV#pc@W;licdA+(zA@1X;$ z=O;I}cg50r(^Y%AiA#(24w2c%v~oY&n})@Ubz2^tU%)>*IFLQ)eQWngF!j~~`S!N@ zq@$?Wk9U}7w~C;ioeuZYQTy=W(a&kbcG7=yvhwXX>)$cXxA*y^hxeWKfCo+yZX7jT z7cIGBG7}{Qb7KImK;bD4rE~^kMNbHg9YUbu0&D1xCPReDQMjCGp|%<#Mxs(^A%h1x#Nu zYIi#XN@2G^$=@MR+K%e0lU}BS^{g!qE5d!5UbD^ebPha|gJ05oF*CD+`9QGr*+y!I zm0!*m3q1Yhn6d+2^x1mDN87z&d33bIgqa;I*SwznRlfgh_G+J3Jp1bm8N@!%=n(H0 z=fKCOKga!EN>w+Cr@oZi|MJG+)K@fLpe6=}-{DUw?76gCoQ$(aT;jiwf%)~~V3(Et zY{!?edzMq5Ec^FdnRv$zazAtJjsep*@}O@tlz+Ee^L0b{s+tjw{Ys|mxpL8TI~SJU z(?|K{%||r@t_}RZ-Y#x$MgR9ZN%nrVz&L%>Kr1c=mSoL?8~~FwvNfpMV~6mAFO_c6qU%d(TbSrqkrxoSMM z2hRmj=c1?Wq&bU|ra#;yB9c<|db3;|&VC`OtSrs6-b@2=jV1BftSygT&*q!6g6L`7 zFJb?DAq)1)ld|^=rSWOHoXy{JBl};!TYM|i?+EzDgogL@pg+2N{GAuGcf-;1SeJcG1TAm)3zFsG z22sZs%cIvPA6{Q)!2IEqjyR@kUOg%-dm80S(3LNVCZZAqr2U1KJjV2xgt7Wap4 z#p`f@E~!%wruVHLCcthE_5|Q!z+RZK3&o{hS&uKAxPK%ev^Tqrw zanrkjR6AFn{!E8Q^A+~fFAn6yI~1bqZiOg&!$Q<)QjD=r8_dyXvuR$PWy#10*2s@H z`WAKhyo~ zo!+UGa8KU(78h`7ojUo+Es$XP<8((C{zPpv|DI1b1DtA~R@64Uny+zpoyUA}ez(22 za!c8zU%Z&JJ%8^{7>~bN^smQuUwxRi>D|I;`6>RAG4T7h(|Eav&p18wWHS9qP)Dbu z3rD=O7{fO;>Wjxh>s)w zwjrm~;IC2;e>ccTf)AaC>yQc#6E9?k_&dg)vw`h5SR>xS($d3>i(JnkkPD(pR&=2N z5xpRqp%FIoy(YzZK-1jy6vM6J?_cwZ4rZSn9r0$q;ax-Tw>bkRLwE^F#6^%NhCE;hT53W2^gW*&@}GRS_`$sS;j1^F&VKbDh-y#f$Y~CFE~)%v z_S8^Za(P zy_hX-_Uuw7O#Z6{uU;I?>+1YE$`hh#MT_-Vt`1LEmD5k?=;-nv*DvT~U|rse&!dw? z1n0(6NxIxO3|_y*u)y1&X7!f;bAKq)w{zxa(~q1isaI2+E{?EEPjZKfxxBG!TA|mz zio2y`=Za|8W@BHiXt6m<5#A2}Z;dVeX8}XJt7dt7%FNk^A3VmI{dmnHeX9WHLnik) z$(z4F%2>OiA}`2@ztHRZV8~ooGq zK9Vy8;aU$D4G_qy=)?u?)%0w|_VRqXw&DYXy)R^PoFr?ZmzXRJ9<&1hc)&Ro_B5_k zUmLtWNiO1=T(9&_8D0Vg+AAS8m0Qm$kYTdorX>2Cu{i@@g(fmj-jN~=shJ+M_0U=y zx9hdYwErWo+p!G5$I0}rh4`*s69(~@tK)h9fE|{r@LJMGJU;pd1Fba|{MM{57yq(3 z9n5sq8v5}0-FJ)MPFM44d3?~P4=3E%>9JCdIYiM$5MxIN$3QsD7wZjEzdb}|x0cE+ zFq1!LEr!z#T$f0hQbT10kjT zcWkv9-?_7V$GJ`9p0=K^$5@L-(|mDpL%!-YNk1RkEdR&mv*}DyADGVZ@$Fl?>SbIt zZSNjvUb>~52v@v2ozoU7k)^2aVJQIGK*^;lV;R09#u#y*d+2n|3`;sjQmH~Q9Zseh z>Sa2`(t2!pQt0R2ba9DQa|Nnzkk}o~s?^emjp03PZ$0e;dcS-5| z{iJl?Vllc&O6PV9A5N^!u7oV-Kk-0blrJX{VXS8@dTO1!&u#v}^EX*gf zZ?8DPw5?1t0AIYoW?qBN4E)+oWY5zb?d->Q+}qYO{`X@#KzkiOa`yeVujZn_#_ZdD zemzxS9-+1P!}fh(5dWM-z9WmgYDd~iFRZ`D&0S{EJ)feklU3r9F2kGKW}$b3(cLFJ z@^`e}Ot8HEb5{FvR{L{SE4Oog;eJO-a|wfc#yzeN4mnj-9ukP;&n?sm_lQ z-TZh(M6+|Q|44M{J4saDtK!&oY7Cddkv|=MyOfmTKOVTav7?UV9pU}=B=dPqiQp## zHGelyVaw3VmOh=GW?A6py*H2gUsH~8M$S8*NSRA=P)FxQW=~JuACsbcpJJnDPi^*Z zvoHQQi^hLq+NCE*cTQFR7if_0daQ5Dl%74?Q|QP;Ym&aZw3A~CVKDsm#Ek=@_St5b zQfbfZxa9B%rJZa|GFo>Sb%`xnfX{1JvFYJ*b8H8kAxeuW!@dZfXYl`aD%)sP=01{c zu?CZFRoeMgYrNR3=1q3SF&A;wJL}BfQ|JE1Wu6^Hy21_1Jm0S9@aTZAuCmBDKZ`@Q zJ%+7ziWDqQIlmtfvGL@dca-G1MIq&cws!fd%aton` zyme!Ri(g8LHAqH@jmjEU-6jXEUFo@)TWx2*Jv>~3X7o9&Fd84)G3A2@Bz?BNBo&Xl zL-zWXV#Qe?_t$fMhVK?%@_MsczMlQ{1OdEQE)I|*p9anAd&6(-AZs*T%}p}Sb0wx9 zps+86rA2?MSA8W88!vRRd9h-7$+WpAahbgxpX&YZLx;x)oB25+_2GQ+p7rt1w3<^D ziqv-E{8e_@_ov`jfAd=Xm|dXNkFYwnY#WT7)EFI(zR9YbO&5bWmz^G5;Uji7r!KD; zf8>8Zo=;)Q$@2LS6_e}6>$Ko`TRc|h669U&p!?f>3IuQD5Y1$;S9^q0V;#-8WJ47* zwx-R{1)iHQV~gIYOr2DNF(lWRW5~B!jlVr!)#C%?;J@bU*5W@bWi`IpGAon)QnK*; z6&(U{^y}qH+GY2;=KkV`Z{K`6`>glb51+r8EmyN2zIr2~aae6-l5f-Dsq;2FUL5dx zJ=G{r^cUA>rXTZ{`x~6)aJgdn`U9-D?<7=iDT7C=Wj}5gI$pP}?==C-$Ijw}juV3eB5u>FD`}Hdn5y=gMDiHLB-} zmj}F6mfP^hdQKgo%_NRr%>_19tiT7EQM&1BBzP{9bE?MPRIsC@>P@V!-A+mNXn(#uq(!@F+3x|$eZM(A zB!mgi_X+=a`b?dZ`LbBfo-gPh=mK5=87x$8hQlEhI37LU8$1|24O^i@>2^&QK?q-F*;1qy{piGBCl;5Bdf{@ zyx`mo1k>`-DdVt8BNbPn%?dwtH=HWNRAo6h&ZgB|-ge90scx|Rk9nJY$p^#b7*oO})r&e?~ew5b02OZC?)#L^zGYWvOc;n8RE(dCHXT#0bI zJnX5z?p+fXTz~MR3wK`L!rvnfxObzs@|3hJ9&in&K|E5<%K2`TkGf*zfP`Ekj=gg= z`Id#&Z|L<+9B-~ERPR^&JR&Nt~-9fkslv*;5m1fw0_$DT^ zPW4KGjMF_p(k+Y)UyBeLy*FI<%JhVLG z=)ELGxkTlS(W?496vgI?D}LmFJ0;UBc%ac*Q@MMqeC<(H9W%PAWL-2dgxh(xe9OSrtoN78&Fn;y;={72rmOgXY4*Bd zmHfqTFNWZ4*5E2)P=O+ zLUJ&{grC#VYAKe57ZZd}zFVArbcN`Q{pG(|;Oh>SiTjq4X5Xs;W-l?0 zP7nVLt-qLWUVpw_zA#}Pi-&Z7OYVbee>oSM(WGhs_9=~_D%q}_VVh_eHi34jKWJ@I zDpVEKqE#@KRpByJ>!A)qu5^#lq@&FvIIYa^T?Lb1l+v~8WXXhJlVj0yF3y?EtURMZ zktwPg!ce*RTAb13I;6nJrZJL@ipWP5Mg9(iwYE5s@=xZ@=)Horb;KRC^=uP z(cGv?s5V?krYUVYXz|P{kEoTV=DR62cjs;=RgJ`<&%UAcny#%t+!t`+ek%+=eEa6v z>=ctSl@!px`*il4Y1Q_pmfu#HSi&ZnRa(#6gkr$0Ovc&s&1|{YQlc&x7|Es!Br`8& z>;2;~4kn)W;&S+7X?D)$gqaLP5@Vl)n^Br4~SJW5Iua(bF#=*JD z#^-p@dvC7dKwS~6toVCA-D2Oy6rj?)Tu)N!_~^m~On`&kKuYJD#;0@Q?>85QzFMRE z>|tMI^IkGKyL?TEAnvTA4fw(XanGMm1OKW^zkn*f+mE~(265R3Wp^yZpD+s_2@Uaf zhh(3n!~S4eMpxno?z12AerULV3Sz%ciqQ917c*hI-lu|mag+S<>28i6Y1#N{F{PG6 z%_AvYyH-ACtqQlGy06A)A2ms-afkA(wvO5LqI3vQ*|koUIEo57avQ#}9tb0K?Uc!~ zigg&}dv2;GQ&p`k_iUUV1B;F+JqA=t4LQgrnX1V6tk{=af*U19Ol`+CwC=2OTv&OX zSW(bMQHZHHZITlaCf}kRsP4v`fz+u{QSU=})Omf*IZFjRSerUGuYxu~`Dm*uo{J&_ z<=$F4dxYg7MIVxP%BDfeQwplUP@39k&i3wnk{U`IxjSre}pzpm9OV6w6?0DJQfWYivpRL|WyMyGqeSTSf>mCP4v znS=7q0bQJp%J8JAIvNwL#Qe2qR9meHU^o)1(sNeLrsktAnG=fSIcvoHL-owkIlw!G z#ufEkwYJWSa&k4A4VR$2@l|;rN!8|}3UL?{sSZkbyfu4M2W6F-Ny_(ORrWEelr_~t zo`RIzyECrqU=%>r%A-?}TODfHkzE+whatjRZM5toE8}cbUWcG+=2kQ&6P(S=aby1*o4Dpsp-F|Ez0#A7kx4v|-Mb{uW!I+rQt-*nN7Q zjgPS7-d-d5!}n-DI@^}tOHB1qS+;D$z&o~V-VIl3esB(+RZiIfnZv49^jn7YmXJNZ z#p8GoeP0_5HD*QH01wk0S{+G^UQ%yFDF(E1ys6%x-%*0e$^-2}0I3XT3_3PcB}M8@ zN3CsEtW8tCwxn_mR;8}lk_%eL+mY)(KUgmN%YBmg@UyEKBvd_7pUe|)l~iJpG8Piy=iR?f4&B`r>gSaN{TC=UrsYl{L! zT@xc%M4Zm8)KZ%|KbbD;IjtBd#I5$ssn?g(x=!uBW^Y%s9-5PK>p=OYZlLe!HJlGa zAH%ovi9}ITcVv6Qw!fS=ezBP!%E5boYXfnlZM}|Wx~h3NK#-%N7PU&Fjy$Nd zE!fhW=L#YH#evjaTZRuz2mC5`AgqpuF)wUYEzV3QZ;n8fKE3t`HLQS<_A&PnIeZB{-~QXa5tO4+OCd@UneYZ7jur0y+xDy_7veCMIa=L$-d zW(vu&0}#A1qIB3O3LdDB24+`PshZ9?wv;l8{-ZbM!BGt@(LBoZ!2xU(M<%XT=Ud`| z=HTjl*6tzhy&-h_F-S>Y>@SyVo-G%A+K~L8|N8Im7XR~K|KIFH(}>P*>e0D$I|sOEr<49!%QjA*84t zx#IRvkMf&ygX-tUdFRJDMb1Az$SX6+=~?cOOv>7IqXl7`jO>aXyo^RVyOcLK<1c;; zFW`5}H6Hyp66>B=(A))8_tYN3NgV&;GCJ=xnt$`5Ih)P_ejQ0^z%P90US$n2nwZGi z5<&UilLQGjEAoQddck_{QzN2*Xa5~0)uI>MXzJuY&%J=He#cdD1*D#@4Js~ucoI?U zJ=?o7oWS4T8%rQ2I5=3oda>dorp*gn>-wxoErHRsim|(82Bnx@Lsyo7$BAjEqJgV7 zhPCxQbdLzv0e+)hRAliEawJ7g8x=iZ><#${QW45ACIe>e0Qx0Il#HuWF`1}yNuDG# zXpTJot*RYbc~`6|BXp%l%GHf(3x~VmRsJ`1T0NV6wZA+*XoLp>R?Z*zXrB(|bbAEL zyX98*euoW7>N7VM75dBkKV>0)e|`7{(1^Q=3SIIrd0W5aj9}`2i=`MQWkHuA-p2GX_ zFE^mHUWI?z{>&~yMe^u>YAQvKkLtcvqy8`R&Hh>O?u3SM@=hM!ruK>RIiHA{{3EY| zAI6sH-omv}UFXrXYQ>TA9^mIO3QS+i$dq{!cBm_Q1$B+XLlRGqZP#PIe*16lZEu(4 zIrB&=RM%7(+NzRsQrafAA?278ezNH{qSZ!KXS@oQhRPQBXU(Awn_KYp9bIr=dguT` zC(C^c?X^%H>e@G#YwsGu7R6eVM=-b;k;xdU`UIC-?K)9wO(UWj7U1&A09ZE#tt6GJ zB{d2PpKa*a&{H3yBvUD=m}^!(TT-P}qmnlx=Hf!ow-Z+U18??uHT!l&b1WH8rD48% zoBV;oAnBWYw|Kr!efetki?_PwQ)GflWaa7K+-LRmY`HjieR&~R%SoW|aMo~JEakbM zo)T72U~GV{ajB^$jkZf|wX?n)6qtVa{LLq`-=4U}KYRR6`nJs^nwWk0YDdY3TX)vK zq1W3Xd1;_-Wsq+k(91S>^e*F#J5l6*h621lM4Jq9zdqi;gaxl_{!(`Py|1?$|8&4N zyxQK<4Fi{3LkON4zirwLKOC&|vuW+RFI4HnLLuJw2zG>e+yqPURG0Sqf?+&h&=`k_ z%~6BgV}{{QM0d9;VwYO--FwozwYu|gK3i@RpGsJKb@Zm#Xj_^dl{31|#h7kwGAbAN zPnhCV>4ua^F}DD>BIy$k;?Pa2im4Yg&JDD?SlOXtZ@G>$p3hLL()yw4u zqEcTi`}(0uQ#YJx2 zDH>G_aD0igDr^FN(DhJi(^gCSvXA02LpUre?+mL-xhfmEYVT7qJqatnwQ8+KBeE%P zQ&1HOu!A$(?2TrTOlRj(9-NhP0jzu?Rdn|#%q3T>)+Xv(1%=NKWmu!^{8?Qdp5#$? zuFc((|H-co`ilN@zDrE#cZ&(#4P!$1gwOj)RSp>sK)I;EW1ynY_UnV!^To@nMO7tP zIuT{OYWAP!^ds-O>X>Ku6A5l_1%7aH#SbTz`sBl)C%BLQQ)raFe>&W6C+dv$a5^M! z=)3mM8B{)4VedUurW=jx%Z0ngB!lm~R6javdl&xBbKZP`-RpcZ_xHylLT~G{#d{YR*{)9W2P%wqzA?YpN6-th3Eg zg*H;_*>v4mX+uu=VYA9)E6ii#aFMiY{#L=-pLxD`HQ%)T*%!<2ueFbTJa@V?s_|cF zB^&-3r}P26wLYdVS4X{<423z19;2g5AO}l;a?WbJGp% zC*QyP4K1#0T;6LR>YWJmpF5*JvC7fzUC;ZC)E}S~c@ZCZ!wBb*md}r%SxD8VOb8lA zD4<&!MT3V5TtE!aF$!jVhZv$7pDT;nysfA*k*X%J%B7PTj%=0kQO$XzlC)~Av+_kK zsxd3B$@dID@v731yWg(j4MLM0OGy64C8QJc%y$%t-U55Rl+Avs z9Zyn>$E(G&sjhs=;5f}e*6*k&&rb9fwiEUE2vZQ`*2j)`E_&2{1jVQ8a@YrM!u=cr zJ#C?wU79BE92*~`n>U3M_eawE=LO9zTG_0#*%X_@jB(o-JBqd&@5vAH$`%3SccV%UPK9R2NRD%NqETLq zuTEEGJv35st13G?R5K$7quI6s7C-3TTBmHtJEVY z9~!|^)2gI()kD~==r|6a{V;`;Ht^Im2?Bh&su)XdEsW^&?UY0QvgFzG4PL+vDF6>p z!1~Q{wOX$3v1)Zw#Mzn9_USx75yLuV^5|ch*{l8ehG$9T&PxG$d8p)bKfKb<{q ztJgF0$#;uits5Qj|NPf~|KQ$CxPoU}&5_A=Vfr2(_*HAnC$nGtZJPj|*)m_dAi*VK zzFE&$ep3vc(I>sgYnVRVvK9cZfYzlsB_hw3AYtA<)cj#@y5n=N>JQ7sw&r!oM)#eV zv>TPlu1;spLE28F61MZhUlB~*gaCMjj>2wm>g#EK7qu0@^Shm|R1=4zd+VD$4N#!D z3<=yJ_}trJets}plY5ui#}f5^s+AG8?x!ybPx;Mcw1FTcNW8|Qel)q*)$RgpYzKQrH$_ph~A0<}-y`bRc|r&a6x zCf$)lyx!Ykcwbgw+&L1tDqH%3)|)@iX&Y?3xiDQ`T*;ijH;o$VwU_7=XE;8ESX7BZ ze@-?OKXe>rCvVjrL!#tVwxy|15=zrtRpS~hwNzUdrESZ`^X+NfZ?QMq%3O%TA0 zH5rG)LKXT%vXQRj> z@2FzyU4=B9s+^k&p+z3OM6JafwUF&Fzse9!43Ug5q*cr#8{fLI<6T~qH5K33(j@VO`{~QL$x$gP?l{08M~_Lx>j1(z@Z0ST@$IwkZK57RTrxAWpq`2 zDXJQ7DTI-u#4gFzs9SQX5_^!bo61PHY8ZA5sy@hJxce5RN#Kj}tyxv9(JFeYhcgsY z#@z3fV}dkhbh#=IF-u7ii`HzdsiAi-NnOa&MhLAFh~iq2^I$(!Z%Q1Mw7peQ_cz+- z#bW+!_NPUEEqeB}+RWGVU>Jql=-zxL{PVh$(!>dN;r`UoZ<_mUY2W9BkxzG{^BS<* zcy+z?h5)^fE-q16p|&sJJ?Y@~D5+nqXY&OXtJQJa%amJI*W`N6Li{p+zUy`2x3KDI3C?Yr4M zqx$g%gZpF6x$YheUYU4*tij;@pjFRliC+s@{b~6b-C?`=@gu=)j9y8iSeOy*(#wE5O zy@%AGx9$dn)LA*NO9{hrBQ!8tp}@tS^f_Ejs#fP!pk}kT6t#GD;u5aPHpjr|kdZ+0=Nvpi_1) zS=>&qT8!X7Xd)vncHdq7XujLqdwRZ_9|{S46=(0^J(?bU_xSPBrt!2zC{Lq+t3%Ba zLTx3g9uf5!(2NRMm6O(`wWJZf>{5>nP_4FBv29+3VYMobhAL^WuH=0%sCjzlW6j#C zF|1L+I99m|3Z*ef=-o#AT(ZeU%B+$OMTN{-W!Hx?lyi3>q!^_h+pKjl8k7S`1!sdQ zSyweQk+WQCDNazy&ij~+a<+CAq{>-5DO*c*shCm;Vd03wb#JUno~sHCC1p-sX{uUh zCev(uS3Ndscmx$yP$Bk%yQ&q+nJG}l1zK_OF)mr3V#WvYV zN#SLv!VP{!K9C;CI*SLzc^Dc4HP!_9HWgJ&94fjJI-x%AZpYXE{9w6WgQx#;_WAN< z^(n zn6P{@Y*QE+IXez1rs$&;AP8H7uNyRuVoIWZ*fZ;3-J(p&cYAN7?m**{s_; zBAf5Cx_e(>?st`jzkI!*!+E=8Kz#2=$cuKx+aJBc*Z6^d_^Lwqx6@>J0u}Hpr{(Pm z;X8zv?;;N%4=A>=<1a=qxc+ScM(R2DS93JFp4w!-EbDK(E?2!O=A<9 zOX%@4Q429SHClx6PiTk-iy~8WG{gDsZr33HYJSkU&%T0v&g}!Xds00Ae7>9Q%Z_EQ zn>M~r1e10FKmU5U>?aB2FMhlE7x700wqQ`(Opu-L_I|K$p3N>Rww)_X{_SLfx~*~e z-oJjg_`$sS;j8I;pU%Fx;`hE=Tsr0S>6Eg9p@El($w-UWTQ#WLH_We=WZJDxcB!_B zi@djzraoWN{A~N&At8kyc?xyR8%m7s2Y4MQk_eT)r4PDGRq(x|?h)J4&+b}= z{cQ32>jj@l$-MUsZ#R!K)3XV;3)uWIpQ7iV?fp@{xP1v9Kt=Y4z30<%c`}{e+(?wn z+;VK(V!8Ri)#L|8lmC-0WlyB|{WFaGS{V7o1^XiixQ89Oq>z*;&M2RnRuqO-uGp-- z5AavtsXCn-yIPAfFjEY{SCzXR%Go@E)?{5mZPq3Zm589qN-E?ORpruE&WWqGT4#;2 zb7W_82t^V8CnPwmSIa5|8;LFXo^e&l+tIS?iX%G}d`v2j78Sq)-ZMunQvF3&ml6dP zMoKCSIWKGFIz^+IM{MGW9@+X{lB#KB6*^@_wIo$i=2p4Y9Qa+;=^jf;TvYG5E1ybK zWiTu69odjVVvQ%@v`eWDt$L}bCmXMF@2p1h6+V|e3Tz`Vg%XTW*5j~(!h7*qmF`i) zPu(XKt;eVU_OIE6A?e9{RxpG~cQnea$X)VTi;A2?jktycj#JUFcBAx04&tj?{ zqBUn~+)`FbAYOC#K{_40Xe%CE+7x^Rw;;A%)z+%SBRA4s5-pi?tii1|zfsTha zAAftje(C-t#oH}eiv0Tf<8Qt{`=CxD|A}#2I{L@Y&tB0vU5x0SaVLDvruu2LECzCi zzq*h<9Qr1Gj8fx=%ViM%bOoQ=C#z)qSv>j%7vtzF{qFPxSk;R$bkK@!+5Afsv**6v z+Xz7qCv7|WzbAIdlW+Ux+T|LNVwW*Xo_^AEa=0f?z_sd_%P{4O0P5f4>%Hg&@zr7H zym*RVAff*BcUT9#dltZ5aPGaG2mB=t>3f>^zm*Q}gSZR*>vvzD+0!_9sCe>3d&*JBD_ z{PC!T^qD06`O%Z=;s5;a|M$)H!GAmKz~A}lBi+pKXKRJ@Vs-G{vngax-uoSeRlIvu z=+o17^nV?F@yDYY`Lj4)IEDJwHQ0Ycr1)#k>yzd4l9PM*^uOv4FNjlL+IHSni2C~0 za<(;NMM9Y*$S21nOPIjSRC+Gnw7odXxxBTk=pl2UxOh^DEt0hvXll|}N@{s0dGwxh z6f|5ei;8F^E89+jtPxN2bn|4S_%LLPW%|P0DkgjINab%yiX+LpF4NSgi?42>| zDV5Y#nAyy7-XLS}xvV&xp9hsR7pVrOo@$H3dL9$sagJ&nx>4&MsKk(|dlO2w;^>;E z>v&yj8F_>@6In$<9G6bEGkDv|s!_*qkc(o;HRxu?OCes%$(9P$(N@*mxD>4NNlcnp zr&(u00!byQ)oBZUv%3VxQd`H!rYTWgAm_*BBq11$xtcC!Z;TVw%4AUbDY-E?{E-aa z*RizVqcpb)l(=ZQ8z}b zmnoMi*^CMZajY$o*$9*hqKuaYD7n>@{bEI@)~BbQdo-Js001|x2Jl1 z^y|};v&Tz!IsZ-@(R*JV9|CQ!7+id;f4NNoYrSSS`uRoO{)$=mX8X=3mXDuZu62F( zFQ)6mv!ikH$n^2ip~Qu~nVzRA-BJ+B)!M*c?vMZFwIS?Ji4nKk1YHUB{bJuT=o_wM zj(ibQ_+nFZ>jnLrC3tW16ukG0iQA3%ebW8^^d>UiW%RUXEM-3^L+!eY;k~N`UfirC zv)*-Ts?@b^^S(kIF=Vl547Jyg(iI~wLb2i41uF*|$Zd4qB zZL1n-8HIe#pUbnjq2PFSrKl%!JQMd zzC)G42i&z^b<^z4`a}8tUu(twK-tQ#ZzH0$z^w~~QDHt8g>>r~Q_p#L4}GBx z4P`%b_t~lkmDhl*+)^-JiM;9}PAOAQC6ET6Df%pROI?LS8{8pqZ3#AhPL_j`3Yar} z&e3$E(K@Fm`2Xd8^R7fk}>M>;1vR`IR$94=%ur{$wJy@rln<5TK#dn-fH>s&k znt1{Mu88x2S~sS}vSQ1t-l%K%`t|n}K>m#pfuByuKSln1iu`-OtLH~Rm^P0Mre#!WQ{v>AbQY$V5%-tl^59pgeRTCY zq8EzhiOT9IH+rXTW29ixC2e1c?xm(+G`+9GxYG)N($On7>sCX1O;ICZPKgqzR#D>U ze9$er&Dmn+BD`re+S;5NX{NY{+cc6@7qup?Q+?Uy2d^-aYEZD76>h?bq?SrkR5gw; z+iEu|Lq0z{)3dV&$NzA4^!4e0q`7DBl zdv^2`KsyjeTu;Zh=Rr~Dk!qU?qDQ7@5600$G)MT_2ZzQ7kB?4{AD1(uXT%M%Uc1LuR;|6aB-HdWz6|5FvYL-$^YGXkli(CbiYFi-!;5(f1_t#UEHis ztA=~Oz!iSZF!yx@#;O0OKeO3hY>6+rKKwyX{rK_M`?v2ptNH1vd#&i_#XAGr+y~4N zyuyufc#bYR_M4pEy9WQ4qZk z(p6CYhDHn4tXy#}K6vq3LcTz*n<+pi_#5s>zrIfD+T4z1ZDOpvPv zsV+d!ibxqP3Du^Zc*&s7c~YE1Q?fo~XL%GaIrJJS4lBed0FUENEA*O8M~IoX4z61D z-YF(ofb9^~0UWJ{-e)crb{Is@$=8S|MHd1@LL`MH##*)2qPf($Ie5BKku@lrG9sok z#^;M-(9k?s9RYZmy4B2;X$ElcYN}AEDMimc`wFZD?>0m5Wu*WB?8HF^Sxb$Oaae>$ zs0Sitt<19~$}=hPG&s{qqn7I$I=f1VhnGzaNVCq`VAs(|;Y8e9DA6?WP&-(U_P{w& zoe@rPNk}y{TCL2PDwk?_na?`fOr2T;#W7|kE4Zem%i`8&={Ga~_=P|8d3tho^rr_q zf#TuG$)mTge9Nr|Wc=#kA(Zi#r~1vw@dwnoT{whXrbO9n=u4F-R~Q>ych>(O$A8ct zj$+vV{`t|r9zWLaj`ZQfz2H7a@cHcM!bIWdU_56AkJQ5tXK4Dyvf{#w8L z>ajk)mR{wuLiSbEwih*FpFezv9r0{`<}(r&oVm;L{QjUnTy=08e!7XP!tGtaOE*hB z{1I68r`YEojF-mVpe6qPc=)e$e0vZxT{f0{XE76RuV?%yX%!!tQT8WV#3x$BCtAcu zaIf7i{(pxgzPDFcy_Sw~C$RskwTnH(&TB=Q1{!tE&=qN>SjLo+W1M>iaKrSNOUDI~ zN0MQaV&gz%#713^)S|ATbEs{h@wpjpRYgfWH|l+iwQ4QB?~KB{np91s&9>&tsV5hZ&oxG0o;uj(I=DHQ+EP6bx5lK| zJ6S4KEyrft#lI)^-@p0#w|W|K_`gdhBO^)rWuaxA0JWA5)6!(Wq}Qp16CP-#a;v*N77Q zbRKV!hyUqRzU}nx(>Z+I5cipd{O{*n-jU%(8Fk2V1fYOpnzE6m#1u!+RbrJEQ4>Bo znfOMVwfyJt?a70I1B{!!{Pf@D;HL5C^J?nipU<4-eZgN?MoluE75 zeNCTDcG^sB3t^A8xIjf%sRyYPZH<*Vi>{s4D6>p~kKt$?B;-oAdZT1fie(F>`X2by z9z~6OF(x?^juW#}np$g0%EQ{WQG|JVbkbQJBFze(cBNplc&W{x7$4yug7MLuD`5K7 z$QVP8l)@CT>}k6Lmeze5-owEDVYC&qQiaO}d+@a9LSuSNBUf77VY*Ne8Ppbai9>Um zCD)Bf7fsqir;r-#)-{tfHi}u-Vrj{O-e{=#%9{>OI^GE5~Af#tA z>tE+b@j@z8d_GL+lK7_hK`kn-w)XEcaYruAVRidExHMPWXy4K^mzJJGV*}Rs@DS#)hbSXj~)*Y8B3E-Iz2+ zqZmV2<|V8F8Rd-DD@ZaqstZnV-o~pMJJ6WHL%1D#CO{Y|5jK!M6 zLG3l#Kx6OF9Tt-c;(MfCkpYBr;)xgUV=e|^pJaqX7K8~QD{?V48Lf;Yt#3+H4|PsA z5Y18~b~v^{^f#9WX|?6fn}?;L3|XCAVj%7^Nv%YxIn^5H3?b~VmRHf53q?1CsBMaawyn#;rs;HT(vaH|V zGyZpmFUH~}=IZ1#7GxSDX)iVM&^g!I@-n^}c{*}RT56}+*@2}svhIDX{hW@~BLW<@6(vq=$Z>Xn#LON=6L?}|AOWT*gg;}I7JZ^SdhHMLHX=m{y^ z-FhlHM68ds$80$*@-PCi#D)oarI2ze4MX_YHZoUNk2BL40fTl<)Vl^M%OqRsVR+-K*w1trl*=V*VP-EI<=IeRwkdauvv}yqjR^bLIGJ@G+!)o;`k!aP!nA z`f13}*^&Q`@Acu)xuoOiOO7G)_{&SJ!?!vQw$d*uK#sl#8|CoX7yZT4?9d&Gcv%G5 z*Uw}4o78i5^x$}}i{FpO5A318oL~Cc(bxJNLPKs&ett%Ke|`4zZDvhBEAVBN1o z-Ra)P8rlAC=MBF)o_B#Vd&;eJ(aLb86mlWv?M7TNJDMpeMSP!m}*%ya2L>{$NM( zG`a>>kb98x6k|CE*Y)L?u;dNhJDyfG;*lKFw@c!CRqv6x+k5p?kJ~}VoHWwsRf?{1siXWFO6cOj-2645c|x- z)}Y!1c@7me5=|(VAlv0&I9wCT$U0KalsY(yJ{$FnqM?M8W=pH)J(uL5o=2jlBN4}B zq{zn_Vj=WyBdcyl2hS6LsRb2cjTkt>=OU{F4ho_p?gS59QVqych{R=q)M!pUB#XmF zjT^eZ-yJPhMm1BSiJXt#Ef~#C)rs7oX4h%O8&Q z(Sz{8iHDD!64Vb3^*9er`= zL*9Eu`yNH=kNTfLqX@tS1KSNZL{3**^m7u@GR_cw><=GGn1p1jd-kIxV0 zrM3TnCVe1N+YeaxoxkHjQTpe{4<7AT-}|GVojm;hoQL@_)Q0ca?fMA=_eo9g)5k-~ zy?brNRbcr?-@RF|NBL^l3*8Dp|9W!FM>qL?^F{dG$(di#m@Zx81Yg}c{_VD(YxwG= zPks5vPJC`-NL-dt{tx0dCdnw3dX2qJY2H1&(pVwAV62dyH&)p=8e*F5UpKqxJjL7z_bh3{0_=ltYSROt8Rv%y7#FzQvV>0=09-XUu zZodn9E#&`dY0j9F#J{|McPwRW5bzUy>x#czg(gi&=3*0gRDpd#sHIh(Q%?xu!eA7I&=9w4eRuZvbuY{mB3=d+_WF)X&xQ%3`A>@knKyQ=T zm@EV=oU@e(n3cQDG<1=s1u;%5)SD=ItFmTvbJ==a9SxzJG>~7w5+YeCiM*_;m8Y$Q zcdJR7C1;vxX6T8S)W$ZTOrWKuI=7onhBl`Z5sNh=F22_U<5+;8{p-vjqeYZ5Bj8u2hD8L3mW zY3e0}S#T9vS)r*gr6xkWijmD$sfB22F{}{rp>0~~8D}M97 zvpQlX=MF_z$)q7yvfepWFQIL)TS~@166G+!J_wCeeNe1DjHOM6<9-tbtU(7^JmaoN@}OJ6097O-auPDrE9X87WzaVRP4ewiBQ9G&VGpU1SQ7j{x_Pc5#kGB2}c*Fju6ws(fTXe-oK>}pmDZ4GI^wDj8ZX=*%KB_3n#$ z588F|2!dxpo3Yi9$QAE~yj@+PQPvi->T=)NZQ4uB>`qm1_wp3#p$l=yD~2#f+f)&S zGQFlk8S4WH@wJuV@Vi-yvGwP5L4=xkm_gz-l#Q;Qnv(8XX_=x3rZ2aThbs2#*{d_ln_hX zq)rRXbj3-UJFclfy5^CBcCTYO_f2ClF2hD}$_s1nO1P0~raacNuxj?a(U4Hm@{nof zfUDq%q=O<_c;+-XNx%si$wpGOcO?Gtewk~^cv?yn;wqWMeNyRz z^Rk@NUXeyonI0CkRN}yC&h1)g~m?LPk5y>!mV8&7td!>?VUeg6?NK`j<%7n{6>XwLy zCNi5lWhJ?+s=iN%OO1`kq>y?fUIXU8DN&lq>gp+SJ_Wk?8`AYEKFWlbZKn-}86nZ%@RUx-;dxV`w$)q~_B znd;KL_9{um8q&Q)MFP#fLss{kb2rKcrDoq3t0a;c%)GZ2c3#e!p_ZshCV_Eb8|lJO zC@zn)c&xqOs9OKELnsNZ{MX+;7=Q6s5r=Q9V88d(Uv-09zdkwLX$rSm!2jcuQuC=; z`m=vJ=Me1z^8iqv53@h}kK-?X7~5Im$MnjoADJke(DJ;{o6pHi5`)bF1!J9jr?^8XVCy$Glx^FeI}b&k>@=DL4xwKxRP)rAp^Q4w!g zd!o?m>@D(?!Z)+GIDPQw=odP+tL)jw39kP5#ZRDQr=NcO#ZN!}^H2AWUgR!5!&-c{ z^13T{>c&tX9;kO81V+UP{O~B~-$0S@TF;kfYKHgBMSnf>{7SdVO&+elvyo}>wG=2s z+l@2}wipDywmcE@S`MA}RSpr{%A!%U&P#z>5N~qWq@YpbTqdY@rRiD5p znOF;8FZgTqF?@2?)VC9+_dZurs&P8;V5OdAk&MMfwa2kTnY_9;-s26K#LFsVSqm}Lz44>l8*i3u&!@ zH>*o`BB{%A<4zgo!z@}!N@8l!d#_SL4(*CNQFphF;Xq{UWCNKU6G?U{BtLfs zgaru3$04(M>jQ^hs#kAqk~D0892K(=rwU@Do`eA*?os zR0s4g!6Z)+iZTodAdL*e$QfFy!L>@?yJTn8YL&taf}IHVB$=rXYnEd!ePCbfvs7VT zvw`XQ@a!la z9gGjo>1dy}){k;)eXY~-?~nbdjsF|_(yKcgzxG^Tg`}?!f4T3yD-{HPLt5MG80fwJ z9)0G){;yX*(0^M5vYU3mImK9GYBW}d0SHF>(km(K`-3zq{i=0`=E8-AX7_QYJ%yBX!o5mCrAgBzH1i~0;o!Ia7}U++H@!Nq61Ya}?UE(85gFdnf?hw6I@o4G(c8z+HhHWk zo*Ysk-T7~7fn=n`qQh6p)}Swm>{n zChM|j$wv97Y%R$4~cCh3Dps&hPGDURE^n+ae*{-mnWONTqIDAqA}0t zvLS&fC5dyS)H}{wbdo$O1vUly%wpThxxT_|i7DHrq9I$laUl(?1JtG*(;=r>TkDy$ zTOpR7$f_qe+4Ke@nkffi;b6pP1A2wWk0@Zhv$bIj@lgTyFV zt2Oq--fd(5!^*0aaFE2h3dyWSkv*>LzVhbPEbSA_ZK|>1g!D`XI^2++v{~lbU(S%e zO1<_kK2A^U;mO(A$)lsMj`j3ac^P-JWc&Q=z`S^dt?@J^>R>2xq(_@Yf|dS2BY9C% zuoVPHzuoSSNAu+PA0FR->0O_4KrY)o?n>47p{kYZRff-(i4* z=QH}3{C0kS`sAn2qcm@}bUqNKuIA}{o%cN_U|s2rw?6pz&(lFN_%x@#GJ5n;9qetA z3O+wO`mbAEz3(JTp;gpOt0OQBME221W&{hoN7o1<=e%M8-N40_OjGJ0o+XlDVp62{ zIKm9Rhd!xgUMLk4vTV6=MCb>TdDrH))Mb~vK}JL@NG#Sdrop@Q2##rxP<&O^T^W~R znleoX19(Lt)5Ro7o!c0xZ`4b?N|Ej~TLgmw<+%1n)~Yy^8cVkg$rz?6CNataIwd5b zck4o`6?kiOK1I$veJcQ=cpSMyk5sCh}@gxmHges=VazdJek%aI=Zu^*p&cX;G3 z?6J>HA3obaJDybdKy6vp;bq4MGpLitk53+fPW!1~`r9p-o?2*a|B|zF&yed-^v3qL zyEVqg$FX<5X@7i;S?`PHe|Oro_nCeDd~tcFR=c0bqIasUyOU+u9HnrIi>5o=lWV3v zSD=(@nX9bGd){`HGAu$WvlF`d@d45g;J;ZEr$ zNidmoNT)K{EYQkIkrMOLttCr7V-zR|6ZBen29m0aQkd$4BLs4&{VKFpVl+88aWf~W zIgu{b=q-BN83(K_HU)wfyAdx@>M>{XQn^-FDI3SELt;xRR3~P;r4H(e3+2=tgJ(-) z>rp+Y26<^I45zvUa8W^FT2>>EUNJoR%uVuGu4N3etp3L;rnVhJ006we+ItT0&| z^HU`q*+5~MH58M+30&H(*0mPJo)@6lNh+0TM3V_$=sqyC9dWj54W}L7bc;FHgv_eL za9U>@TU^&$PkjlgLojQgHsKG_%A?g#{2*-hR9oiQs5W#4183IyqFBlljWToK13xJi#RLN%NaA@e+_Wlzi;0IdRF$RVY$BE{Ylv6VsH zV}_+eT2@<*<%Tu$UmrZ&&edN&IGA03GzIgE1K?l$?3@$%qz?P>7x=+BS@KYm-KBE& z)71BNroLZnbDPf}og9DjOwR7vlY}B%tEcq{!0ymQ_%}a2)`v&G-pj?`ji~zQ`(x}^&!(|#&)k#KqemyF z@Dx9LF!tY_-I-nXlLGpa0{TM_5kG+y?-;DO=EC&MmwWP2|GMAd9Hl(lUix1G*TNUQ z4^zblkG_Aj4HVxhapko(&cD&KuP!!-r^WxhU*PCb4gT~25Eu@HdB#KmVa-kyd7ZdGdbq?~}(&{=b=~h3fte$+(m@sncMW|bjWOz>*mKtxdZEDFmwr=s5S&GbtD_5c^*Y{2#I7bo9*Tpf0Nv5&Yz-SeyV_16t|-etV^TQqF1 zIL#mBK6&fwPqkTRDxIQ&`8a{awm!C&CRTW{)hoIs##)BgK1phw#K|l5=njr)lvZ;v z1=Lm`;fF_JSQ(VT9!Vp3gDDQJy>hF0yZ*&m5=SZ(BF)-5^)#JoO#%;tA$uk+G4=&s zZ0x*Uu_kFrnP8`0h#(-)yP`3a8GWFq-;@X-r zR~{a#QSJtotpuoFgtU!nU30Esn`c=52TO?&EK@`?%~`zEbCL!Qy-)3iRGPfzg-8 zESX}?=md(8a#6}Tg@laPsQrqa0Hg@YLPcN@JKd?noB$ADhipON}BU#d*D&}$9&6Wxo=xUT>L&GpDX1q$N&&V+q59uI1$sQ2* z+pR`W;wqU*rjiTSIr=(yD%Tcsk0Fweg4T!)Q$VE@bCxl3mR%*Zu+sF&G$&*Vig)X^ zQBTri?*$H;2c2y~bpc-q#$3Lnmn%N{yEmI7#U4 z$Fx{YqYKH(_dtC7A#GKe8E=o2k6UhgoMR<-1iDdSgR?)5OS-v=UZnV;Zw5BG~CV`sH z7`mirGvBD@`22L}u^)Z);G5%D8cn?3m+o3s$mgezA1ob@KcofzMW)`9yy<^9yZFud zQgN5cj^7@CadDhyyZ-p?#d`LEhN*9JQa{R?p~jVIR#p_Ht8c{R|urNr?t3+X;|F?r!>}_ z6toRuH~>g3g)G2*Sk`PY@0azV0lv*cv20-*funZI5ym%J*WUX=$=w9o3&UKSyPD8w!u#rBWR6-@~qe<`y`76M!}<`)!NE& zbCDQc$A2rIskqXjP8ggg$N(PpBC03043sCO{5l5*b|;>2?v zS1hTdPNE8vhN6U+916HaN{S_I-C|s$8vMYy7I3(_lca^cdCpm?`r5M46r;u|l^Sj} zhT)QWC^V9#Tt=vQn?ff@No#F1Ms(s;nYz|aA#f_bq?m?-@kU=Lcyz+~LaKs`wB6pd z3P6p$=_XrleGUpcX>`R-Fc-v47b82@w6AHd8SQtVHUNnrN5QlxO&v49O|kl({I-+^ z&a4@>@M(cGmPVzuv2t4_8}Ial-Z{oXxxusv&Wc(9sWOY?IF&c+iUZWBnrZAU+;StG zxsbOh&SU0zkRb3{xdkU{Alzvk0B9!(XO0@lR+KSC;rNkScg-9VxBMxF~YKN)R zuHIrR)*$umTaRI6Lpm)}NmdYmV}~NIdXGlMHQ^?Ak~tQ|)w>VXX8ZK=kQxUM3I*vI zbs~mABBswVig0XmADj1-3r`v;pr-LilF}qeH7~_Xf6ur}N#-FsjR{e6HO14S)T>BV zhTZuFmMn46f~)};%g>Y!hWvRITii!Zb=QI+q}jXDXtwRv3+Vv5UCLCmn&#F%*V1d^ z6)7nu=F=5|GOQ?->q(H+pmh3f^xx*UB+5wW`~uzS&$1(5oqw z)L|h$DKL#`9)s58p>9B~NAopkj{&Q4#jg0kRb=9 zl-G>8SsQsHl#_iT0;L&(1tMZNup*763H7zd?GGnYy)F?N3%v)jKXi?T%}B(P*xCzz z&!sZYy_aF1PuS$tXckoXRp7X@fy_LY>!dgUi#Ba!6LoxP&do+lA#Xjq*XlN)ae{Xp z2T(E#b%`}~Epvv0$IoIbny428Eu;z}4GL8_>$h4kg}NV}!3^>I zwyE3A$ z;Ohl-2<(q6GXhO|?wc4pN5IaFR1KK>#)j?`PgYAPV>$w`ccYl3Ag`$K4)w@Nnskzt znv%ECE#SO)>45nwdBch{VHdFKqLllp8slnnr%u=?2~pd9BHJkUL|x(V+qAY-s`aFY z)QN=9B${!8B%UgDZyArqC~CY~*vB?}g6T^<5xxUblZqG8IF`iF7uzA6qPOI|Zx$1P z^M+J$-BVBQv#hYa9o#u^kwIq6Cn!-ds>oG>-oa*AiH--ofad7oHdXn-0q<_4$0HnejSU)%3@3% z-e2r^7H~7iP%OJOFZ(%NyxJI8IZDE4B^ZE-K&b|+arCG=KYfilYS)0>fX^*Q03~S6 zAg zHL-wrm$85!zxe5#27D(v`)hEb)4SqC-wj&y`)JCmP6;ti%8UgHM9w}Dt(Gc}5mIBh zs!I@ukQxLqDMRSeIvGk*Ua5jxI;>-H3e{XvO~e&1(=-4%3Qcdk8)@BFIOx*gd55WC zdk(0B5?U_gn#It==A0nHY%K_-H=}g6Kpg>VJoC(Iq2=w_7v@|&C8HDq3Y<8o7c?!F zMA!SVKF0Gi%Lv>@EnrhPOVFt$#u0|#mC%4 z7y@h)G$O5%WSxYOZ&IFxo9^Cy+VIvXu04W9!MUP2=OSyUXSb_!tQuwdFGn9h0tWhH@058+u~kRfK8%T@D1xw> zA?anz^99?$ibhqE-XB3YQ-DNgA=uiIODC%-m3Bj{N|_g405y)R*^e zUE_{%%N!j6^rC8RA+hri5v+a%#1)~e5sRA`$9&MJHLt>HrvRND@ zaFyK-Midd%Fzgr_X5qRgFWF;2k{ekDqZ|vD?KVSW8lDTgZImJmNo8iBKI_nw_bG`a zmKxi#pc}{HIuvCZz(G`17}fMxX+hcMErzt&9z1N+9wJp`J*eO$yAnLbH531VqrLXz<~ONZ?Oz)ZNC763{+bFWA!t1=QeHxkep zPGfL#i0A;D=bb59#8O4@nnyq*aH`N$GVI0{d$r`7*I%qJPmFL%WW1fL;07(oF$0g3 z^L{s=!VTVMaH`u`g|b~OvUuspf{S~a7Hr5^&<21dgNGH4TCil7Fnd~cJB`(1kqe+E zfPicZmkrAjo0q&2A0C<7BCn;$Z37esd-86n&}^LYoZ81;xGJ*sQf=gdjcWu51e+nf zHH4YtO4~}Wjxul^2q+ryenb-<869(2)G_vrRA;eJ9XJ2>nMH)=D43}N_0nAXu5BB~ z&<6uKhVgFPtehF~<}n5|(+6mT3xM1~T?X<_70Ap0!q9`vq(1joXm!AvZct<33OKV8 zkq_NnN0>6xmMpfG0Bkf$3lCtzGZsPl@unq@RI+akrwU+pqzfiU76UFoF_M{zViFtb zMt3ZXu_n`s*ku?=o1>sn8!M&|g2w}Fvr@u(YM2SIIGQ9}h1g5r)#o~Vg;~4UoMdqG z=Kw4`WT(+an|XQHLy+kjVY_Jxqvo8FB2L+cit-Qeu?DQ2L`~$|j>yY)5s3p~$ z+$?V@n4}dISV3DrBs+2xD+7uf!MK$&cE2LI%oPOVY~b|OK;z;`xrR1F>bW04psZmf zhoBU_JE&RKw3BP7vrKQkw-4bo@?3H-o#BFeD8xavjcIG9n)xuj6^BtWwT_L_GYkn+ zp{lcKlcsaumePU`NSn05eI{T1|)M`Y3DlRnh@tTeWLrrPeS8 z(KrF;Pr~ZRt;J<~S|ZD&h6N98JkGfSJYPlwH@#-*v!D*?VWoVKJp+Ju%+N>AR5Y&4 zR#M(d+8(n^#3anJuRmiVpBgn6k42eX#(o)g){2-P#PFt;NOJ5{0=|K?b?A>fT(n2Z zu{ao+b;MCRTbiadgzfT}` z(6&Z_TX*x#i>LrvtYhKI1pxGQA&+hrAZ7Zx|giV4|&T>&@qI zRPNhVRF{Y|<{LY^0`;4S6yy>+z~d#`qts$e7BeWD5iLk4zPHkKS1I)57bt|dKl4++R}EgY60Zbn6Z6K)Rw+tYbgxb z{Opc}v_=Y!QfllHq!k)-pkN6oy74lNC8V~%*2QfZ0sR8=4vv;|Y28m2NVB*Q=spn8 z0v54Dbw6eaT{YKTlMkI^PMy&F!)CP%lIVyCPMSh#xfd*46K=LuFbx3m)WJ?E8mJ`+ zRa-}GzF#(F<}}HX;>{J)Ie6b%TP@CuY37D<*zrrs+ihYU&PnuNUNm@vQH1e@7d zfuqu7NIm07q>RyDC@sRAB5cbExUnwV$?V`(fx0AhH~{0(4f=~6Gd{bAE(&{ELHB_{ z*@}^nXI)pCqI09L7UtSh)PS!5YqCCkQA%DF?(=0In}@dQwuWf76ABs$qT_vO3S+>U1R4FbPSYR-3qoH32rhA}#0BeW#T_q}Ji;Swhr^ysz3~Sa3*Rzf3Rxg?h zEp*142xkF#*RqmuEHUmha>Rs(fTVQ8_=p=a;Sa77qx6|#+U3ehIYd|-YlWLz$U@dy zq&hMt1)YVN9cR3^$HF{2-D+mH^=LhqR0Mk~6|$MVYpn^%IhPh`6H z@11?;l1D3!_l^+m(da2<**zwJlI$hvY|w?5_HpC zuYwQ*SF{>v94rq6)9=)&t{8lcnh(%OFsyu#w8TC8@$Ht`sF#s#M(y*Q8l?&^q0NON zjx&=D1m3TxGtTODBX+^1W~q_fz>iwHbOb&+b21FN=7xSFSi5HP0MT+U8Ph=w5la_f z0%@bykwfetK!=P1H}Ed@CyiQ0UMeW&4ty+y?ZWwB7$u_Ga01z)gPvsvGLzJyWzW(K z#U<+efn82|AI!OO-Yg~W45|hVOy&=vIa4C#5IGI3)jL`)g}ef5q^=W`G6$v$cZS6) zcV0b?b$~EiXZTiikniA6p|a3sxI&IJB&-93nX6=^nqqtzfY_B7sYCq}B9FYE%p@3$ zyHE;%rBO4Br$z;kv~Gg*21I@34DxVayZd1!G7p~CDJ7^@+ot^$SHydsc1Mrkxa+W`6vhTy>7KUpNrwhJ8AG_#=n3HhFCuIzLTIZ~) zN%mDJ4bbA66e{izP?c=vikvA6p@kK;Pg=p$+ze|7rX_(zJ~ok?~Im@;l8+_;wifA-#ONzUWQ(tVXQ+^EL}&Iylm=#HY;-7;&nID&e*ZH#R+ zk8ls6MujTus)8ttjIw!%{RI2b=1I1#__Gc;6p#Q4U_s=SMBqne{--#&ul23g$%gYG ztB$r7tyzOFJ`9=}{WOJaOUs}l$(L-Jc>~9};0&s-9x*uh5|9Xi!J%o4q1ar4$P!2D z19@wVl2V+g)0a#$tAj#fy0ld~C6}g3-lKCk@mMnaELD3d6B4?-DbK3wL&#RLNva-0 zSR&_VW0aM~3g;+dU2D%&G~x+?uuD^+Ib6xDjap^ZbVtZGyCa4OFs736);Aihx10;- zt%3qcW`mxRBT~`~Wt%E^$R|rIE^k4c#bjEoM$*IT3k`@vVXk)!&<~f@>qDWcLjPyr z{X}p8TUHFf!y5~aJ#ddPX(ruEqZmyU#;f5bw>YEstGrr$u~Lhp)F5|5@uY?7X~aA& zr##)7WhxrL5wmDt&Jv8LD-+ds?87B&16NJfV|QVnRfiU2^_D2jp{eFE%6b87MkyK( zVCBYh;aE#jcl7E83MP=fl`iQ$T|P_@KbzxB6f5qa#=@hcz!CyVPc) z6z6QLI{P9twcJ~GQAtpRi_S9Y+k;F*O3b!md_O(_$)oY-v#s+cCw#9^lz%9;V245*#af=0&` z3#IP3QwTX_*Id~=#pstUi*R$$!nP^YV=>C?Ia)}wt=+aHS3_`vriXC{d%~L8k@*o? zOx(ma8&DmiRH1?aI8Lw~a}b&}`D`P_;#XlW*)#~EBu~6q+93{&t(?ZZiVQn&8m0Qb?dIsiizjmsO!B zh=n~0^NghwI)^i5N?~d*AyvOB#9jL=!5TH5sAHiqo4HcOqeAOzb$3S-PBeYbI6%6Si zhmlmaGGP|aWsozVHhO@v7A`bHjofR=a}^y^;ObZD58a?Cs4FC<#<_;viqkzmbHsq0 zn}mi|#FAGmH1xMLIGedgziMpeMl%OwJ(hX+AVsGdX29S_aI5q?Oq!q>p$=Vck=7RWl<~tMru=m1&9OxaS-u-~r29qP{cNFsV<_ zUwwi&xHcF}$}FQ+zg`)QrD#EgIOJuGQEE1nhMEpZh$-@MtCbZ8JK)FtaY1fb7!;4NY2Qo)imZ#0$r&kcD_a=Pi@7s zz5+o}7e*@;4IcnrohD@;(~#9qn_gMlu;C8FVhF-Nq(uwG-91~bKom?-ROheaodC?GK1ZFLgO@!RBVG)n_YVu%a2Zj&8*=iCi(R)}KRz9QGTqrPl{6L${CK;5!vpHQ)&)sNZ^bYLZ`Yh6U0JJ927A|YY@4gdx` zG6l-Ggk?fT?Xr0Hsta+bf(K$8-Mz1JHI$PeZJeC|J}*y$)Y`7eeUl2ql?E|k7~UcRtH)3$a@!xjUWV(`Por9}*qE#+UbdaUcHm!N0EA zcF7bD2n4-;W1g&f)9I6^at2HmKI7}_>-+{+)*1=qg%P zvGx*S4uJ1k2PhQ~5y$RJ7^7|Or6;F~Gx{q?#rp;M`Ga3FX7<0l_}`~$-|dIcu>a2+ zS9v`@?>$dGc=+JuN%FzN2Oly+Vx~JjKK=f?Gka=s@g08e`PH2pYmz^^eV{*Jt>qK? zN3&27q*ivcxrd<-Z^gtT=D@b>?+N)caG`AzK?*RPX{t5|*j;@UHFfBc><@N!CQnY! zo<2SryRZN9RIsf1%tT5LcUOyy>$J*W?jD((jmIy9QSRoV;$1_z*VFTGMN=MK>`qT^ z-Q*(b+fH`pkDtwXY@b-zw4KSn>}wGp$N_)T(EBzF_(7!2Es^)uTE`nv$eXI_u*Ktz z&FIww{t5>9?X%qLOGwuj`<)6%*r~OwbRqmWmsG zF-qZ<4(Kjv2jxltw}3fu24KskSj$Um6w2f&Of2vO+hFQ~fJx1;!iCPOW0+#C4uY{@ z(9BGRTMI~|+NOfwQR{M5iVo``QmL>tJ5`bynDXqtdIkMU7NfK|-$iKzzcl^|@0TL* z!KOxmeraiqigdRK=PL*zCOESPwO&&3Jn~qun4FzfXqyZU`ZyD`5qVHzGj7xNj)9zW zXb_xKK;)uAd{c^&>%D2#?E7-hKo-LZE|+yd9K*H`Z(N=bjP}&}`ZVNZE(uIs0{Pad z7Zu8Bv@E>v3pO%j#TbkV2ye+b#u2lAwnVuE}=T;FL#jq`B^$J$=A`CTulH9b14V ze7Zh^(c^&D^0=qaK~2>ZdJ?g|WIx=Bi|GADSSSpR_Ld?gHw&E4eXgotiCSxHgQlU8 zUErBz;C;NGHOEl5dsZd5AaeXYWVJ7i2Ex&pR zQyniCZ*>}`Bu_2i(_lRU>>Z#!$Q3-YDc51vMsST%gW0zMPLvx`G{Yz&)t4n}1cctB zzup$qi3n^}IESBW1k5f?zg}K_@v}keVtW46=M_O-9$ABTYC) z;wXR*Gg{1GJB*rbS$0~7$_F~n3h!5_My(4I(05?z%wCu6Z$z$L291Ssn;maGc)g(R z_s}@3(Xv@)4~6gy5MTMR#H9&`$pnPR7QU)Y7gMg0LWGkLfC^y7#GTCJC*})mk zC#}74X|?b=tnzFg2IYjC6+mEOk92}LXIbHSE8E4%3^fYnh>0jnsE$mDb9UZ0MmEHz z=V_x(dx=iaXxfsJ@Mf57nWjM;v`9?OS9$?RfVJ!l}yatCZKILezup@~T z;Adn5L&sk6vWYFZ)bPECcMdiqs45utTu?DA)>w*9aY=D+oFLs*0_%HX!HuQ7I#K*`2+&?ylUDU&Ns&}80``Uh^zoX=(Ti>I5zh(P55#&B6 zf_(8hWz8oK>_{z5XHd#x2Nl8MY$I0WGFVL}&6NYA`=m*aJSqh<$c_t^9u-8j5g<2B z)AMbU_giM|Umc&G>JHGuchw|*0AuksE#m)>Cr^*|D~-2k5Z%YoAl{-JL?!Cv6uOP; zKhq;Se|Xtcd3r3*?QC~^dT!@?^~??niq|M=?qpKGMZmR{anJX4+;|Xtt*N(2gJG<(tys%uj9(CW^YPtDhAKGsDa(l6`hWO7LlDe0g z3@J30ZfS*h2DUQs`e#58(Ad|!aDjC@(wcwF>VknIcYs*XEjc1S1gFU!h zI`Q zYZ!hZymAYw%%0S(?YaZsZx~Xailx{};001E$>#-{fweb+gi?VKGn`FjS9nz|Yk`4j zM4Et&#sqYB(M}+|C2`f+=o>ez=VVGAxbFxKV+BxJhRZplT(;ikHh@dBa|Ld2uoCRM^KC}!8gfsfrhLF%P0yB z556C0>dm)I1;o7R=d67$YDz0o!i2>|_l$th0?~6D(|dv@<9U0cX|Nt zcOl`-MqQ7o>K4C6}Jk{ zE;}R(OwfnHSw=3*gjW>&x#)UMD^$hhl)4y`BE~ABfl@I;4vC5D(UTmmcHdaRXwTOjxuNntR68AXpsW6)!>^iTmUe4EGs@nYR@+7pfK=h$Zu-wk-}4JYHUFkhd|r(iZzLkKps~G zb`#NEQ^P33C0<}w^H3*(G6^<#?C^>rk0X?!A(`6dy`Ic@1I(oc!iP^(otredR?aGJ z^Ec02dhh`&C-8z3{H+m4=vu?D8;7JrSJ1?@#~u?4bI?fgZ^4zV!zfCoa8>FK!jiu~*njKV|h7zSyk}#(uQl zU5-M#)05-pyVH|lJ6KP5u(y4}0>qcwly`Uy;xK=~;l=RJU>>|}EB=x8*Pq4idi$t% z*ie7OSLNpJ`npbXGVB{W`@^%dlTCJc+kX2J6ZeU?+uqLw6fl5hqM3t+0ys2H)+A;g zhce@84Yfi9(~wFPJowvaA#0E#U79W?r|WG>3ylzi40@E1V4pdZ!JAITX>K8t8aimM zkatH}GO{$uvURheaclvY6VxHci0Wt*txoFIWtz_S25xvAD_;P(Y!ECF1&Dq&SO(&$ zW(&<)baSyY0@qNSI$}f%MDOcHX!lZbHXovEYmXm0M?nsNWGF>I-S1$|cS}Hh#1ys+ z>jng2o6T0`Qx__Qg{G&Oe03SAv?3mZ}iN3D<orr=C5br)C2N}MqxRA9j!3e;HI!R3Yq3wYEvWYQd1 z6ioxa9EXKeLd}X(0ClTPpuQY+Fivaph}y(qX;=|23;YMUJs^6;5hrEj%Ry1G#*I>2 zo}Cb1h&7;q_Z}%Uq_}WQEx*AidFXoKUyuIy_~IAmyMKRtbpG^KeCXY8r5~N14Lf`O zQMc0Au)OHvSe3pXX%qeN9e#JbC;rSP`#0}u4|^7VBKz4gr&yhp!s6|;j6A5&C~I)J z)LDxiD0AjIeNeq6dA)GX7-t3A)0jsDMh>Zqqn2J<-B@CPz;$rW%LHKy zfw?_TBjk4Jo4lZg5KugbFfw)7qhi|@=HhEF3VlHEVu*DId7U89G5(qPN zjFupz!(l}+JpmaAaUA%k)c|Ecn!g!J)g!5D<84w*RbsK6sW+gE%1~+&FfmI2I1UuT zrC*+IWI#+Cl(W_ug@=xr*a44NlG~)jT|4OCn@%lzV3v>yHMLA9P;G9?S*r^TUkrHq zWJrn(NFnQ`l{tqjR$^_47YvP(CFo^K0z4K`Ju~OPP2$?Qx8S%gh9k0SLDf4wXiSBC@?&;4ftg)+DkQS%BxTHYIaHESm6-jMGV*K%UuyW9 z;vq2yO>;oMoQjfH=K(mZEpDNWoTOx=VF4o-y@4u@u!DeXtmM*?)lYNvQYe9!m#zjX-go$kN!M!1IUa`*MIp2`0{+C6%T`*HO->tnyz z{pMo#Sk8CfK6uISxBmJnM)8YpAKX{5!5{EL@#D6K?uD~`aF@!DS0Aj0m*0kGX?@@2 zgtb4>7q7yl8ST>V`u5VqGQHihF1ppu_S(7i`Z}LtI(v5d?0jXd;9}Y>s;DQYiU&e2 zrI**riZeO6_;SB8T95eA$rUQ$lVyg!mLdPn_Qv;68ouB)yL>@@e4*$b2=L;!UEbln zNNxMW?S8!QM++=vSA`jT)MGi5abagi=XjX5n|$NPzIaU@%b)FqLF8{Qj2(NU>pfaq zzma0`$t5kXgRtDtxu0x<+>I~zk#sKGRr^FFsULY7{M$>j-)A6>X|M%xWMbF|V}qA) zz(f;tI0Si`e_14YX2%$%zgySg3ZpPnHgl5{%-=L6Q40a6=GJ{5jNtEOU6jhm5*iRm zq=4{1%uQqJRh_eykj4UA+MuKgSEesur7{I5Y*mt`g^V8DT_^x| zPoTDuQ(4MIbcQ`8`7Kh+}v8Fx88uEIexF(|9Ec#!wKX(|5uIMP^^y%{( zAF~YQtGs_Tlw5tDZpVEu&%gNgRo<$gu2A7E%x;`kG;!2;Fi_dfy%ARAr?>P zQ#m`g@4lBaERA1W6n?)@N2XsL%d-UlQoFFR!MA?>{6wA{jsL#iKHYpu?$a>#;NgSg zqZ9k?=tS)=4}R%T0Xn+)?)<5&o!&e;JHLSL%GTc<%gz5fzmT(w@A~tL?LX~A_y57k z;i}p=I^WLt>%YjjSfCg^!o3DS>gZ(uE!dwQUDy*`TmDZxxChi|lMB%!M>2F!pb{va zunP}Ay0$t!Z~4NYKj>s~!yy(HAu1L9xWF|@4=JwfJQEYHZ6I?nPz-<|l%%91772m7 zukzlr^1nUlXL7vz>h$Ew`}_Ip?;QHj{d8t-_S&=0feIi&5&3Dt zlGcW$ahi3mJfj1~=vH&A7@qw=X2oDf(m6oZ(7m}Z$I2mYoe_81s3Dv$y4KKya-?2z z3BBgL0v~!GgSAE^0(y!Vo*QD2OX{$4v_9S>!GFsb{XdS*hn>mpk$s3<;Eoa&uDcii ze)PZbJAb^0g&Qx*)hqJL-J@~#{5=Qai^p=YKkQ_qah+aVoId&FBk?#pD8lq^hvB<2 z7TnFq_v#J(=?rqSdWlvOC7)L-K2t9U=PubfWK8m6K^=l4jlQ4&AR}{*pls` zncl;klxCZ0SgX9OQs~BySpylvV&>SWmprK>&YF90Wv;mDgb*dyp`e?{WCCUjeeJ-p z_^cegy{Gs5e?B`FNWgbrJ-fJge0D1LXC1xiz#l&N^7#1qk2qexgB|_V>iXIvo<4ng zx*)$l4Qu+({`33qKY#dO^EZF@GTr2N`)74c#P_P7_xX9$KdgCor=!Ye(1k0=ISvMW zvp`?xJ$0R)SkzJsuH|?zQ*{oB;KiE(vBz+C^+9QJ=c+Qjjm0fZ*?TNlrh#CHE|kSi z0b%3CONwEs2#fYKW+Zb!#dRbHBepZ@h#q`XS5_vskIXA}uvartU&a&AixR zz=h~Q6m^shu{IH6L+{o`tu&UIb`4E|~xq^>J~kLBc}v+3VJ z^SZZO`hR=+htu`2{pBqh`b%2u6fA9(|HZ0Mu2-J0&wtsg5TDvmM$Y? zn`s#tW>C2M(g33x|4;gw@O#cEM3lv~3G73FjbkJmd$s@=&Mn$3)6H3iTMHU4y>dW* znJFT*y=TCuAv|(AN_DFW6QuwWY}xrf-3$3HLNXGf$J74pk;*t$e^%X!GIx*Vx8=>L6r6~vQS z54}2>b*aFT<)IpskdsU?IH0WaBr7xf>@4IN7fW8Mm&(+7Fz|o|^~RYv&FE%Gh{;}% z_~>#lPoqf!@p_;}=W*+UF-LU^ou1ohPI!r_KtA$7&U2?wn(M<=4t*Wgd(?^N8y7Wp z=-qlv)TVPuTdf-)DXVvJs?dld!uvDu$_Pm=QyLzSg(ol7+sF+XFPv$`S~d-%Ho8ek zI>usD7qiUHj7kBGTQc6$$fS9cVA-bcxF9tsOF%yL#K15SJnoC5GD>0fqw#|4*Or|D zpuy~xFA2zb6zeQk@x#rcX@S^B%ds>04C#fcr`9ZB#qD|cS#3R*b+j_AWtzds9(twK zk!lUz73C;#A;4>G2DfZMGIq>s)jmORs*zijlIoI~H;J8%W*!b=I)ts)PALS{h{u8# z3z&As%sB$)>u-w_ZcdLmIgN zqZa5{(h=q`y0ey&w1rOZ3hz%Fl-jZgHHC$>5+GeprmJE3jr*LV%$O)okD-PI79sHZ z^S~3=VqJ9H9AM7%WKuoFA(dKt=xn zVv#G&jA)3yg6=Uw=tw>Q+O2&Z)`oJ(pCV3~R+Nf{}tz37f)|;nUz`4g3 zt2yjyV!^zyYQqb9<-+vvX=i}{Jv5{ZC2)*rfwjdoFPH?Mh949l--#Kz&4?ymFms)g z<*>eV#x^bCG6aM*ZA(wrqm4Ju(>kjY~>H^Fj4H2o}{TACgvyWyP0uFJhVv)KTQ zMiXKLhVLY?G}3M(vr3!mm6_NW&&D)+LlQgSWWbcAFlD5n)fK%nm($nBe?B^Yy!-8Q z$mHLDGj>Pq!LN_;wEp_++0l>L8N4QGZwT#sfgZm+rz?ZbM@5L=3wHRAyrvB^bdS!y z=fyB$5DqF5f+lRA+1Q6e*R-We3QU3km#FAzVIcMz8^@9B(7F~j$xTUx6v=;)8@f;d z+^38cP?|+CN@u6evSdOJj$)EReU45(btw#1LhTD%&=y6BMuS6>d!#1nNRUx70u1@N+Jq&$tSx{eCm!b4%e&O#ZLy4aD?fvgelqq8;}=Z->{ zfz~AjmluVwsTF$vNTUNy#VlJp)3k^~tx`sD+v>e?TO1FQF&l^Zs;=%mt7VVmPtVST z{&05G4Nj25g&ePr)OXYzd~_mzdN&j5N0)KD&=-8?7`2<~jh{mwKYHlnhdLd9j&b~{ z7ya(lk9qJR36AeM^!!9hixy;#;v#tuer2nZ8h9A4dhT3wY#@(AmSH(~1zW-lVS2+l zRWFl98hr+DVcW>NW_3D^068J;O(P*~kGux8Vym8Fi8djO3I$S}!fOby(5t@Ux1Ofdoh7W%WQB+W`7G+9HRrc6Lo8 zIVULJnIaxeNgJ+7=WGS*tB@hk!d}~fglV;rWIremO`-#I%0vbllJBZW zBF({iuG9Ovx|^P>j*>_PRX%LarL;oA98($E=TfnzP*NN{knJC87X^lmH8 zxb9dwjf#p;LVZc|q+)6Gk|e3$8nm9xl8|=5PiBhLxDJx$e3Qv8t-CO?lL=+>wriOH zzO3R!p0Sy$DbIy@siA|HN^ULG1A^BO1)6*SmSsluTd9Ye7?|uPi+>xa&WOBI=W?1T zKd*&4(oKENM!5#lEyMoy(pa9)*-JmV#%7IzS#X{Uiq%h-=o2{O>Oq%M_5qb zweIe{q|dKgcE3(pbr~-SKs{g`jx+Xb}>$$tU}1q zAJ;Q_j^!rZj>4>2ZF0#dixk~pYb!hzuniV z{a%P)-@Mr@wMwilQ-}zfc6}1!tVz916F+-eMvy~Do1q0nLKD`{Tfw}JJjj)nGIE}s z@_ye}dPSB&S*h}qI?|A)??a?Vk+!0eoOouWGc*7aE5ezJOEhCHQBc5N%9G5Q6`R5` z5aKYJqh=)%E0-n^bhM=eNZ!q)gG{tibR&^WBxNw;EW7x;a^N!vnq^Q<8Ep?V4=Q__ zEq3R8-|r%Yi#2RV`+#|-XrRggQP1pron7m~dydkJMoy%yM~c`3OGiSppQAxvIxQ>| zq{|vhq2dvH-YTLrVj}Lj!c4SpG)$>wbi{@0fZRpah0bJslxZr%@vG?!hgorcZKB7| zcfUHb@86aB_`!|QPoYx%8mjeutlHJcaDKxy2le~YV>z+&@8$SUpvq6Y%SUIs@%Z#; z*wyfH0~sT`r*`&4mJt3DA9Fnbof#*FFK=3U`dQkNfei!2*4Tb2%2OkzCHOX|L|~kJ38f;JKTfaAMN6N_h0|xzx`LYdv`3mf9!yte*6MY@A6}QalTvE1$Zh|NWV4Z{O9W zzWOWdh#x-qf3`Ki<)^HFj`#A#@!`b@=fMw)EOx+sb+02(Ty4i+RSbM}`sC^9`O&hB z;jdnp@%Os9x4aK8>R@iH4n8*8;sS6i-zL_3@NanBzCO|4%@wuuig533kMG~^ z^x6G!I?q>SeAv=qPv4&QAHh9;-=q@n?jpY&IB%_Z?SKD|mnZ%rEdCwL+lLSP_oXCt z*wV+d=RSI*nI;Un;HMxw8;F&jMoe8+H~CDy2XXSr6FGrUaKGk0I)C-g4v|cxtm4~1 z_%(zC2Knsykf8n+aK3S}-PHu9@1}|M&$1$G zB|oZm^RdVRGq<6>r(DPlxT)bP>0uaIV2+GXma(W=)BB)VX@rz1Mrch#KwL?87Dta` z87|aiU)g7ZQh_33$Xd$@u7qxldB(8CeR6Y(?tDTNX~ijoiMY?1%w{UFz1o{TbOra@ zQ;0VId~{;F-`hBrC$it>eBdfByjykY>yzOW z&EPvDqudMT@qL@i?pu@YPBKYvYy1B_!c#u%nDmi_+UVyqUcOV#gGSG*qq&SI2uJ9-Wg63gyx%$KhFYuY z8QB1aj!dnEx`$1+d2SKOV_W)mZ$8A7C}~=9EF&2$keHi}4O*@R5aAG7Xz-yRtQ3C4 zIwK}q4#i36b)}YfZ&mzCrCYQ(i<`Z)qT_M}wn+&VoRGz+i5 zwHd4hR})QGTOz)%=GZ9A(MPfdQ}GoD`5n9Oo{r2S7c7Abo`h2&I2Z%CRjo_<7=BG>m*nZ0U z^$#BY6-hMM1un+MfjCMzx%lqP)(r-%=1vOw4-UDc_etD+xn%n5gWn=k>-ksv7i7PX z`n|!c_`225o9ZukSJrd+-DOV#r-Y@-yTy9F7#sCUaSK%=IXgOEgTnFSoAs#I6}hfU z3wUw%wU%vjecReR+k;LM;F^5^wqYhTf@=yGU4mL z94*DyrKIhh1F=4E*jVq^$DVytj4~9~!Gy3)$m=U~%;r4^6}5zTXt=lP90_`5<__=# zbmGw=6G(IP>TKaZCQm5l3+W2bZlh6MYJCn#2hTbeXJO`{bGA;sFP1@XBoYR3mcSt^ z*YIje<)J&tf0pOpAD!9mw?_xFvp&H6cf~S)cx&1JHz(&9rSFxr`K7g{zpC>8(+g$N zmkfjJrMWREUwzyqG#%Z+n}2TC+v!hS(SL2*{dKyv%Yop7wG7u!!sR@A^*|gpm%jBI zZWbrr^GiNiC;u*+60dE}9on0Com29y-GtYzNnUz2{`TRo!;jn~_!Q-x&n|QQPzmh& z*CVd~@<*>m?EZGkL~vh<3~!O5#-_e4xS0W~4q0Umj!L&~>O-@3AjjQVwceVirXx`F zsgjrls@(+xH!MylFMZ83Y7m5QLlqh)iI|YEhTP(e(;#)o6Wl3~*A*_xlmHrwow5yW zk_&8dsP)GpT#`X!io;-~lNl(@GE=Fk+49J##ioEOh0(!PV-yTRA;i&F@5FI@|Iol+ zo&K+9f0Es=ZjJB$*V8o`zuThd(i8J>_v~v+xXnX*LG>5ko?NeWZv6Gbo!uO&x82Gw z&TnJ^eS30EcKOwPM%wJj#2*D|^Q-%ZwE6JK>Utsg1?%(U2_R(w| zchT*>y!P*5@_5_J|50bVzdo=(W5JGM>Yv|LkMYPZ{vb~uU2GWWH?3`7)-^mjI{D+V zt-o3S`lWH=GkbzBt83Q-rlOYg{J{ZF_lu9l-(H$A9=zrk-*^M|g{Bvt^B?XEB<~{p z@?OcshK#K4s3$GtrIg@jPHh~zfZ>u`N6n=I5hyGq4wW94IY#eYSdX5Q;U!2X@r#rS zFct$;)q=}YV(m-P=|<5wyU~;)6g!fkfnnuVrmNAljUVc4+F-6^>KFu0M=d~p(WLp| zxR+&X@!V=f_+oRxp^4I{W)9FUB%d?;&HdsnxjOx%nMOfiSRx5xl(nRxF6JhS30rFb z1eIo6y%wp|(L~|W0@zqcbHriOyoFSufCVB@Gu-=3mcT&O8F)eN5rY$I4^$RQS7lHG z5ln`*p)v6Y>#)>QcP&y=Fgg`WwT2|gI&G*}@r!bpJr66RQgXlXiiP@!a(FO%|ay@rU1M^$*@cS z@m(n#YS@fVGNlifshUS{fld<8I(Z~tYD_8%ncu*3%{>q^K#k3qdM$-)7Abzr;403v z)f$BvY*SENYsge3fsKqX@XDPRo=mDU0n5XIsv5I(AdnkP&(6afrFkyGnr8`P&>ap+iBFJvw@dZX65sm<&AM zUX_Q-TW?QG;SvzV-r%;fLfwr@x#fY_TXYLoZ!h_zQV1ke*v~vk;6@=y4k}%AB!=k#pmXIULZDK^T>ElCluNt zOcJ$5ZmTnR=@=ulM2Jmd4=#-{U#%Fw%#wTZ{NnLKcpeCq`)7G}a$&mr?Uu*)F}FvE6J8SJ ze>?^B{=waDm;T}A8XrX|&@2DTw+dJd?FlDP_YnnlniXk$hC^l4njHk6qh<>?ApO_DQ6{RKYy==_{M6o_tD%m7x!6W;c&V#%c**U~7M#_0of92-3{ z%++U_;ETD!VV3@$X76w0;xTLxU!Dx8GM@jP6bi4VM5LMEgm8{>@_e_Rpxx2Q<}tjI zg#Y6F@^ALf))%{dtx+zvf4}Jg;Bnjw0B-2~Hle^e7HzE;EtNR+-ShfIAzrw}+&En2|QOMLRbA6-1YI-AYC^s0>clg1K%4)e+ndz;tYRqL`C{G?$6V<(gZn zmC&IjgfIbk%G6>V(xxw4+78FSLA<9Hbb#eKNDSo6hDd=tYp!|GgiH%qIC-F2<}#zn zTS;3Kgl9P)PzK|g{9r@E2&#;oBemuW{$Gu4wq6Bg3GOZi6i_2VnPQ%msv;UYTgqxB zrm(`Zz*e0z!xN7@rp_d&)A;Fq;R!nbs#&^XCc$Vp09~^%)zAiUsi7kzz{ju-8+o>1 zNb*L8IGC+Hp!QnQC~dM^K}!L7mn}G2QALPkAjz6&c+0s26JDjwkfKj6H*#7PH6-u? z%An+|NS_9m7!K>Dc_avQgPu<#aI`(sOp**=WD7bJeexdKzgmz@o*XKNCe$2f6zqKU zSgyuU7-3H|B2EFN#_EkJBbsT1DQ?}aj85EUdV z!DJAlqdq4pk}0IFgS)Ko2(cnjn4E$P9Hk-FsFL_vLP*u^c?QTpLS{KPhw^b`sxdY~ zw2YN9G_TOH6xnIFO3oof-e-_nCj(uq;5y~DifYAKam72Dt|O&LVGqn15l@;+s~VQ? zugDxRN{0ps7Tm;yW_7x>1ikA#Eum_r3IlQ>dOtFWwW! z6>wi{^GfJw1<2h#R*-!4Y&njMHx7@bV`^Jg#!OsdPP}-zHRN7r^2AO(#R7XE0(?T9 z-G>gl!Xg8E7Z`=Wj!2=1M_3$pa*_tC_E^eR5)QbG2oj5lA_B@PLrKaB%29J+(Vklx zoKi8$dor+5g9yS&PUa8Dy{ZIVk=u0m4qo}%n7 zH3U55)_P0g*Lx~jI58ZYWdVdcs^x+)WMs`!ycAu@Q_01J`5K561J0|JqQu&S*$1A> zV=}silq>RSQD9D1&|9b|HA^$}ClcP%q1KD0NG{>lCo`%pdm3Rde!nlP38cORW^7Q4 zA*@6Lb!3I5QbNyel(ue`MphXikzdho768*8l{|CBJCkG!1c`%3>q3eV0wq|a_Ewtg z#EbTz>#f()%$Mq@txOZ()dWV9k%RP6JPPPIOlqj?nMy#86{dq0;W(`&xXixE#z5|Z zHj2=w;FM<Qy)F=b zVzA1(xvvP4-@cdnx09nMPmkBWZ2kKEDD(Yedli0iKis1{~r-v^Zp>TAL}Cgn_6EDa}a)@7@bpti&$ zts+g$;5LrX(}XS~b+-8$UdCZHc@!J%YzuMtN}fD@cK%tdDGsR0-)K~Sd-B(K`7%BF z`!0xo;Pm!VtLr0)gfH*Qk3Vc2xT3i0!urQr7sR)(3l6$hFTXAK%q;zLQTeA_RDN%g z$k0@!R?0D;q>>W#2^2>OttZpg2Olc$pa3v9jg<>7UHT9`VCaTlY7L>)19p%1mvU9y$p z?SjjB5tjriV&_mut&yq*)5g=nb{9g*Vlk1W0dae8RF`Jg_lXvO)x{ii!K!aQQf+Ne zEIm@qUZ{vK(z5xwT4F9bbvYV!hZyXVkPB{|c&2J0_YtM9!%}LkF$G`H251x6kdStd z(0vh2f*qMl-c=4z)T6T8)ur=Ik?V4ynYY)MS3tH85Ht4UzlJUD_ zRXyO06&Z&E#>_GUnFbV%E1Gtzf9bdkj^umo@Mk#c=9!!i*?9?8b!&6xo;ag(<|9Q# zyDn%VU!n_Hor`VV`Yfrq?qLP!*n2war8)A+cah06??0`lRI-6BB`Dk@dn64KXPT2| zjl2>%vpG{0V!V5?NI(L5pj<)^bw)o{)6|uOcMD0H#cipC-E6%<0A%I5iL_mjtg|fZ ziK7T{TSH8E>aO-aqLu8o!@AG8lW0aPs5f-O3i+aK#;Sh!_1h}8%mO!z_Y}u~&vrKI zv52U*K4jg6ntIF;nUN^mSMMNhR~loq=z<1bCSX@{5LX)U7|_7iN;TmH^wGq8Vr$!% z=9sH?N(S|PNB*J{v?$n6BM{jxZ?(Y|Cz(fo$8#n`om1BqM^rKA*R5}C+_+G-7APuw z4fuNQDFu<{`)Vb+CbQ(GBrY+0%#pfxfr^ca6!=`mmb$9NDjL?fW6>3KfHb39XrT{D zV=3xgGwWGa?ma;3&M?$?VsQ@G^%{8{CR(J$NUo#7#sY)HNEAW}tl5j__1iks|50dg zM+T0 zJ=$og_4SZOi9$5R$>f+&W}`hy)x#dp~VlZz5#T$a)&>U8I?ObL?1(eg$d(;-A8~hmg`zaKw!{sNONgaY zhMOgd2PZe8J1Il7l$Lo(C0s}Wonh{EF69F?7RV7=Ni(ES_VK;01q+j0L-P;57BRf1 zt)|o+5~BP%tYqu(6fruE2Ah(`Mj1VR1Ok`7ej5hi);a*Vb?-mw27`>D4`;q@VZc0< zMdr40kK)0iZIOmk(OGNjj2Do7u52Y!o(LVNZ4LM^>97Rm;>KDqa`2pz7|nvma;2{F z=mekDOulelnN}QcU3uW1ri@8^G6cYmI+(#d)KtmK$ZElgwtti}j8YX5LtOjryW7f`5b*8m);2LD$&FTt8MQW8=-b52>QaIJseP@`! zS~jZa41?`Jl2M?YWjK?mY4!5a$8J-YvLtA3S^@VEFPg;UqgCAwYq@BYN_mV(Q6gq9 zAE^bOidsmP*O#{8LTaAWx654&}<&DP^uWjIBB(Y zvt;^gSSlv2cx4b9Hk3w;Q^a~tWj*AbHMW+?6g$w$6>5(`6Q5%>%9dx$BQRyJFsD{SFt@gQhW?)Lh`UqVKg@j=Gloi%drES3%CgjEtObo z3AcC*9btNM7NFqi$o7s*-n#S6W5Abn*c>XMlV3gej;!T`W!JK%g9M@0&S6<*&g}k2 z*UGRu!dg4HP>W?Dxs!1)^P#W9rq8NI%Gg$@LkPPz!gXpEhdJKNu-scU5J9jGVOOck zP-?|$ic(Ww(}(Bg+{6;gurNagyFj0##SNcgDt^gdJde;S79I&VtJV$!@ucB~1)sFJ z?J%EfY2JYkj?ixJAmVsYrzr`BWNwmd!<_Kl5LDq2P$o~KkOYY04Im6Z2~)qz2S*FzpVR)akg zoS!Dl+%|elH0#kv@&Pc}5Hqy^wrpt}twd+b`{|RYj}d}H#INHN1S`i-i|1N%j&9x4 z)W>YykztsRjqxsUqQcc%aiLqsd+IYsFBT}l{TzGi)M^v*Je);XuGhB0=a`3ff!;+R z$P{Xd>4TGUin(VS>#(9RV3!z~DPrp;v1BT4RF|Yr=eI8%sdR%$cF7`<9AsK355xYp zkFdNgzN9o8?qr(S{=>d%15rga1?!>YC1ms^cLo4AXROI}IBFvo%5Io(a(*oGuU~uG z*~##f#WbPpteH$oDJ6}tIe2`_nqn3z5r&%48#P7=qDALZ^T{pysuwrAWTO-@zAYSY zz&4hhj}U6+MKXlv)m$iK4(lxBQp!}L#@;8c2B0Ah>(g3wOg)2244qN)abTYnnO)_) z4E28C$yH{jbSYnM+R6xjFzZ_N}SaN#qd+sGS80*@f0RX zxT>9lt_{zMQ}!vgEZaR*-yo|ZXb|z+)<$4bsjXEVk@GC;u-GQHu~s7%W-*euFevNn zHP|$*>jl)T({rRQa5*a=N^t9INjzezCD?XY#Uz6_j*X&M-ZsS^lD#lnDcj|>lq5Qo zdQ;!8Lj+H6XxSGTt+;i0ZMMqNC^!s*fdk4kiAotGyWoRc!ZJT&UkrkY`xIe@t}9%@ z#N4oA(XZb&YjJ5t8Ywr5nlP(rqUlPWeUuvGc9_+vxzo(uQH)-wC1+UB#wZSM`z6D5 zFl|@tG2?|nuP9O)C$TpG z>u|a$68j&Z$EPkMgctxqV)9E@%B}k9G>QHCZKjGz>Eq0gBD~reGE?jFb$+C;_Jl-? zF5PGBy)B=4&#DRDFg+lO?=jN7ua&*^o;aObsZ~#-dAZ2Ur6w=%XqTQxnK+OAmc2W7 zYH<9d`AFXQ&v(k?$#Xg1GMJ?&&1;YaTZ0T;Qt|cL*>&IjeHu_bebxm>il;a0O0#vU z(0giZT&*}@R!&do7pe~G-hwJ`2)%cUexcRVpAOi%ICt@ISRXIx?tEciuECjZw%f}c zcJPL^?#X)}>FsP%=DnsLXL|K_YfIOna;TiAZfUYP&1T!9`)KeEkFPX>N>Cq8VRxoW zw5&eqBdX}u>w8mP8n0EHyAC9BPNbPZ>bzOpg+AB0qon2_KgtQXT8DZnCrd9q90ppq z?W4CehOiC3oowu#@>p+`HFN&_G5WhwpC#n;Nwy1Zg+tfJbTyxk4Bdv@nwq@gUBmbQ>ghQ(*=jo-U2VN$=VNxZ;m?AqURc|_r*(#?$HvugS>vM0gigvc zSfn7&hl-;J~bj`E$ z_5E${zA3#Ua}4*Jw6#ZhOwo8PVK!2( z>6jkx>77+>7l0hF!8w!CTXb(W9klg(0iRk`c3kwh()UP4yHe$j)vWarb#Ht0(%sT1 zw6R&ZvNF;vxfftniPO2gXVwEh=Syqd$r>fvu~vFLdxl;`^32_9PqZ1-mXhpkNx7<7 z)_%Nlp3)1o&K7MvmS&)!eqxm3-TNA00wYDIt4S(e2NDQMsivt*t$ybnEA|j6?p=3H z*B|Xz!G5Ih>LZvaW+xtUDSHmpleDlo^mnLgJYmLs0joUu4M{ZJHOY@u#QM)7?UeleUp**n_UNO?D zG|e0583lyt$qzG*@eHBDd;9w|^)8&ahP)d45pC1b-m5Vycq=w8XFMIJQim?7-=|rfYB}|aen6Oxwahza)gM!rEZ;IK z+Da-6y9B7f>CUp5x^*go`7Jx)U0Ih!!_H76haRl&)ArD?j+egI?OoD)V5;W^p?)G- zuuSCDdvO;=$LQ!Kz4oZzHqFmTH$SNZ2s6Md8J2ZqL`Rc{oPk6iHQi%-yq;f)cug7B z2T)kwob~Uuw0N$btg(mo*TOeRh6fl&H$NH4m84uZ>U(<)=b^YDW9#T@i6I@GxB^m) z)O)L=U(wvZpK!AiYWlXaBV9{6*$WQ|@^@GJo{%~6K6|GdDJC45PD9)Gnr+GRTI0IS zEe|YWKjP=hV8p7*?v!bk%-JToB(b z*Ce&ee1VyP8=$Y;^4iFDV;CeW@7Bsmec+okd1FtnsbwZS$Vyi1mP^Z+4}T+a-}1uF zOGg?$qD;E2$D6gb74?^TWg;*R@Mbxw)oZ2ads>|Ja(rp+T#&-%pp7bOrran8WLpo6 zOU`-u0KnA2gXlFw9W@ug=M?R%%bm^(KBQ0I;T;=VP-zm4m*T56x^39h?_ z#m9x8?9?P_y+a#TWa1~h4cwpYk2FXB|%vk0=2A5rt6bcS_sBM=?(`tRLrLhbh zr?zxoC=b~!PX)Zn)CBL|5nozl&OLf6k9WZXLL4uhUXH}TJ}xgk4Gm_h^6*HZwp@%o z#X4;$y)H+>9n!^rL5Un&t+a=N9qj# zIL}n62E=+xrmd#ZrwvstD<;Lgm3hoFr#9zlryVOVy>fH#9Q<<*Z1a7jghr*B={cqK z)XQpfnfX}Xr=9Flda8q}W_blAXlcp4by*uFf-`!1efQ2edqMNgNk&b4oc{D z3Q*Wwv>qA{dGF<3JRliBgKTT^{5+lAO4}x*2AbFV+qcZc>5Qg#FrJ>0X1UVW-PF}A z8`VgtNTYu#tJc_} zy8@n}Z^RifG@~o+E;J^#LCf+O<885e#gF$p3K0Y@pS3i?Vbt@HqW7y5~^XhvslIySB-q~?s&B!VU*Fm=XoLUgy2bX|ldox6d zSD&gz^X5 z5`fG%<34IRO&L}2bkOL;M;TgcU+D~Py$Uq4d(!P)t6OUx=*qwpw~do#MSxvlkWl8! z?kD=ALgyL%xU%l#`b3nU?nVYTk0JeeiaGo!ZK|$&5F8KVo{nC$oYhJ7<6NM? zaG*l%_npVkD83XpVA0J@jw2U1F*p_yHC^|@Na9H{MwXq?aMRiBkzOU|m%wGG{peOj88cY#~6 zaIZLpLT~qTqg5Q%RG!TQES`kv0X7B6sxB9E`t(?KneW`xC;J;msWQH4ulE98v;rF( zZh48tkry$LIa%c)-)D|9OiQ=~4|g%moMrS`dUNva7^RkO`Sr5PFT6SHRtyxr+=t3Q z+0xzn4x6%az`|pVzV7JhgbW^w2Ge`f>8(jl`VJ0SB>>Hgwj;}uR=mF`Bb*r`x$bi4y zJrJ~{q-%Efnzlb!cmM(qt!eZerTcPUKQru>Gqix2LJ2Wc}5%9jb00Q#*&N(QuCmDkJF@_pL#JB`a5 zJ``PP?k0T8woiU-1(+~!4PK1YVL}NO9S|$iE10|Jc{zW}a3^4(NN{!#Pz|dASHTZL zWCy!xoYN+(PUSU>fwb>&!VQ%H!^p>wt2(BT@VfJQ2dFq~?0oOat!)!Dq#%-BkST+K!GJ-N(!) z-`6$m*e$uxOJ>H+TS_hF5*a8Hzn8pksw1|gu_0Ku7(TvQuYX|aEXFhhQWCTQZx$G7v;4EisIGg=oCQRL9dA@X>&q@hXf_pq`hTzL6BdFb&CE^!7POd)QEh_-Y zSzGmUU)p-fVlNNgX=#OOPyUF30`#AGWLZ|d==_!~U3OCKY&B5rtwO(n-&M|AGx~*jnzMCb zH^vx(0O`XxbsN|>oa5Nv&a`}_rxH#~14w5zPZ)TCN46bPo_XeO=1!9WLz2d`)sA;o zX~WJP(N@em>Vg4!8KTI=WIorDj#{|@V?dn0h%s`svGa{`J7-JS7{L_KRdSFW^2yb1 z%w;r}CB+svQp`R8@|qeZnd#L)RBc{q?cNvGL|-O~r^9!t2PiV}(mIhy_@ho6fCKm}wi`v6~tP zdB}uqHZH|>&BInE%OIASxV+7f2yKOqr0~?sX}j*W5hTPiW~A2Ay&Pzp=NMM#IBVLR z*LGm|Dj2nmlX~aYKXfLyXv%AO4PJcAWmFmz`<-Uk7@>902X*S|9G)xukytjG05|mw z^vVdqc+q^l+3vpnRa`2w&7V?(>Aw{A1y93D9r>2m-*4G=n9NI{+R|r%#ir@^O4-(0 zfb-g`s_BHl00VrkWV~qBtWg)e5~!5+z9nc9nNudun|!R1G|vh#p}ZS;XMMHFL75vc zt#ODW*Dwg*XH+?Hh?7Tgnnz{?wPhP{Fd%5EK~SDIf-1DX8KERQ+_j()XVWxRNFn^Rkhb*WF_Fp;P9eUML1)=4+zmz#+ms`>MU#_h~}hJdG7Z zaqTTJ@Jn@m}uTo`Bk%F!EEkxrwJ344-8OrAAL$Z`(VEPA%@jD!r|x=|!G}99$QRrIYWf zR3a`l)XQf)4Mvxk;~G*9+uFZ^^6Fp00C22oR)J1VB@w zK*|d-o!)*gz=}6~#AMG8b)Rpr)zto>$NKDS28xbbp}gR(aICr0-OsXcP}ZZ811F~@3rNR%w!r{$2KnFG5#6*EkHV~0e!^Sn%rQrG zwQ;^rd!u*gj1@W3CBNho_ZN?dG z?{C?)Hui&F$QXjm7-|+-w;Y+dt`O6)Y|ZJZp4da$N-hAa4dQRV^At7*o3I+!PH%)B za6Tx?7erx?e*6432Q$))9QYP-!^k^%(U;yn<+jdG4I4_kMP#ki8$?P_SFJi3Y79Mf zmKxZgc~N5=es%^^<>`$AqZQeAVL%v9i1%DZKdAmWcER63eotebvv!`rC+A)E33_mf ze)&*LqSGBq#@=m7^z|&;1^3Se`5!dLYp$uprjg(2F<-FN-vFU28jmH64((1gIQKiF zt8y0H9ul*_RCB4RU$WiRvjoM(*2@QK-+M8QrC!{^xUiqWEB+~}>@@gwG>8w^ z#Rk+*@zW|vST=fy!tBgZ(cH)`fixQ6JhqVDPDX(gH91Pz_Gp_ehTR=<1v#jvw!7-v zIUpUoZ5c(eEN+&vy;8sNDY}~7@x7k{-_+W5`V#Tiam6 zAIVW_mGO#~eWk{kWv{KyB$Ny*$UH*7&{9KOa>raF`UQL1^BkT|q5HrL)S-1$sra0_ zov0k_*&Wf%^Ll;TU}=F{$~}4C8vUtf>+dqBkB1xzi`ed|ptO_D zR#Wg7UbPq7BA?B!SAE%srG`dCX7;qmfvT^+Ig3h*8p&G+5up=X=yq#{|3;7OOUun~ z#(U~*K3&UFIc(97oxCtk9ZxDk#U4A7i@to#)2_j3MTTEc5xSptsbaq`?S0m+75zB7 zr56&mR@z=y&W(;{#j@Fe^^*njs%7*``=u+^kG*jvSUTRl2vt<2mKC^wYj{r&BxJX` zO0Xt;RPArHWvHE1 z!fUlM5jdM;;z*V@bBKj~9*Uus@546Sy;Q1b znGT2We#=gy2hfm3XUJpyj#S@yTiU1}=HObpLw!NE3Vr&d5Gl6@_?B+D?J_Mv zdQXx;Flgcql1IeC9x?~F#l(r^wHMP0q|UsBZ>oF0OM1LncDKzDBzA-eRQOQ4^Rc`f z{z8nF+#55JnOcNd3y!y3VFyacYG;-rS{JMUsj9@eXI7nW->&NvMFe#Z^U%Z_Nd#UCilJjqXsOD zvgC3X{4Tgsa+bdRq9*qvcj8zrkpr|F^uj5;^)I*X(_^-a@b>vzDU)s|mxdi{g>ky) z*VR6&ZqPVVgTVIdH|#b&Gv%{yu~YQ6ZyA~b^rvKY3i3xZNa^+Np+;)oEA#eSz_%I4 zKNO4Z@2-cW7MHp(((9qB- zH};L(U$-aUnT6b;L!@+aSVhZ8-uFs*yN;@(NNlQWF#2xrrQ?;!K~auTw)&B#-{!F9 zyl+ALFh=KZvT+!Bxr8fgovS?*i3bD6-!gSZG7AB)>>J%~gHm_;x_(};o0ey( z2YZHcm7&H-#!q;XJC*yY0hTV;*NM-}VQ^9Rf+5Edea;((&?vst*Ae7|O`}!3=<8Jy z?mdrZQ%5A3Qo9hmJ9}_wgGdR(O6xm^RxQNBYaP3Un9guQA6V`j39|B;2I(s(2WyYJ z;ZXU4=YUF%T;1ee##kexg^6W$>oFtCmxuh}d8CY4-K0y_&&(Yy>&EzIaJIzwZM<lWgycX}Hw-mE+Hw$cgSrTc)h?U7EK8O@6BsC(C) zEhH^kk(hy#D^v!~gb4(dLu|6H&I9Sn9n>A^iZ)>LQI@Ps zI(I33S&`U#cb2Ssp?so?B9UWNH~Q19J5T+nj~mC5Js?8wP|4kde{EVvuAiI7jc#|B za{3`aR%@6`F>8bU}Q*3860&NBem+KQqfDw~Wtu*nPI%IR%ihV(uY2Ka*mSuyFWxJFd`6Zk(1>91P zq%Lju^D4QzEE8HVht^{e?^Q0Hc1Y4VtgAUY?+KY& zCo_W^e56Yv3pAVQ_1SH+z4d*XF2@9_5?C!=GuI9IL_5sO_1O1mCa)5_yhD>hDhRyz zmL)%o2_)=*_Ix6ymvKKMIYoW5M!Kb(y4`n+b73peu~5%qIDkUgFy$I>IOi0dA&}gf z^;Qnspcg{guyc3n`)$J(W9E25w6;e%cBA}1yjf`cU#m6?DCPGq=xvsblpVM$iX17E zw^DX*`qcLNzVx!6LB`AFE2XSpI8(Hkm&sAhGUGfg(3a?BD^R}z`fW!4$K3@bknxuxo>iqz%vmT%d!qb-%W_a8e_3uliy zM%Mb-C~aR?8C2!6Ls7xVSqjsfFihL^y9=wGjP|$naPgs4d~|J$iQmJ*E8eUHix=XD z5U@mFuXW#aB^z_fspb1LABSOAB@IXL=~D?J&QrOt(!zmZuVejOuxMbDg(jsifzq;H zIYy9CWT;>WMBS?>gPbWQn#7&Q1fBx7h-KPeP$~}Sk-~Mq0J(RZnXTy;M-HiLkiN9x zv7+$1jpw%ie1Rd2GMh+r3b2*|-|n@ygz`^Q+Hq zQ~#EY)1&3_2p}cj1waEgw3qE2`=VAd{X1Vek^ImUDIF!4-(y0X14lYp8T(ioG+TmE zhs7X%k1n<-ek7JT!(vZ&K}uQF7N`ghwko13Jvz#h&$(;o1QJ1$Lc*1C$~5&?U0#g! zPifgawgmRK#TLDBFLYhniXqhbmdV4y%o_ze;yoK-B8gj!+50N4Q#CAvxZ&%wJ9Au4 zuI}wvytOaMrmbPXo;x_S$io)qJGx4{`<1K#As#99OoR}aC&{iQIrY@Y)~s9W=eusA zJ)|qIQ2b0rq;vPgY;bgi@cDh(ni~LoIVdRCEpArnU6uLTjcl#cb9Q*RJ<4OKS_A5|7R4-@wY{bebLJS`Y)7XuFpnH{|{`Z zxegj_szHWm)R6az8%9tcHh5+c#iy|q5VMWnAhu>B=UMHIS%N5jW_6#nBvig&Tmy!r zrL$hWZJfU1JU!%&&5y*0cgqby?w2B8-}Q2%jXgT{!OA1(WzrzWVl}z)ctj`N^L?p$ zyJnX5)pkZ*i0lOh_)9u2 zXkLC*eB~Fr<-x*^oqUdP@;qVB!u(~Gb+(}6ie*w-_x{418ZPPp~0OlnK$j0Wj?;=GjcPr2VR&QCI;m;+u1HVH3G z__*d{1S{+yXSksU;@F+{VCUEX&@gT_tI@R`CIeU_dF0F)dO+-whPrw$dFmIMb>|v@ zrL)6Wv&BJqHbO{cDtEsu=7Ux1K0&;vNx_kl{(agRSMNRZbA-;yu@KHv>x-j{Jh_G` zK&jVHa4>GMTX7zPWe%f*@y$VkVHG2*b%VQd3nI+Y(zeh*bxX^c&>{FPZ`>KZ%q_<( zS3sYS>mF8Y8v{=5dJi%omepKCb-XgW<<5qXxuhGMggRB@biQ?%jB?Z9p%a>Io3@hH z{B*u0E%aHpmDXk*)avX=$hZ!cJ2H#yHRtC;ds{t~E}Tl(7mnh)b2?;`9pU7Wb_01-x>VwvZmT!loO^8Ik4L@Wh?lYyXz{ z+^wV*aJoS%-VZ;S+Zl15-aht*k1`M}i7`L5evt>*CsnHGWYJDc7X2ULKM)!9*qnE&Hw2zV3o6o}p?1r@oO_&=@n1YN8#i-5tM&A2M z+*2Ra0R_|08QR}uO>P=T$7u3)`JT5`a;S2iwxCoop#cD&SC8rT9EBONd%HrZFyQn- zfk9`alOoMTKWfn38BWYfGYrZI8(i~*k6AZd=Vp*Rp;YEGJ!MC=6kZeEdukaozN@Fi zy#5}LZb8xrR|-cPzlW)^9ex3LQY^d6C0tZ#c`ST^5l47=!|}C?o&4URk1|F(xOHLf zygLeYIkS$60abXYSG+Dj1ZO1CM5T&PzyOx2MME@kU*8MovAJkcNK|xTSA6%jDb;#( zl=n@1dJu&Xf7nUogpE@SJKB5p4SC4RRp#t7%{VPL69Ex|>~k}nT|FN1m*G{ykZQa) z8`aYGmfG0GSKhA&_xR;in;b>*gUv5K7z=F5 ze!jo$@J8bh1!81h)#J+SGBt-&@kxHQCxe=h-)tocj92s=X@^0~ zW$w&vd&VAH>xTUjr_3v;FMXs@VKTSz^F6+GDdRW!D%DqAA(tk&p75f%ZVShc>q9S- z1CM2^ckEzt1;NmDllqlZM?E}XRDrRKIvRfz&R*FRjSQ+0w@%BQ(QSk&Rv#C<$D%sJ zo+aC1a+}>7?u{#!Z6;vwyMhvr!2vHs!)t-JX2%Dk0Z4{|w|Se?x+hEy zpPXX48Z2wTc`{`)Wb8WYxf6@?__SW}@Pn2I&=HJ>%ss`rC%a>v7t5w~y)~7~t=C7n zLLDNE*Z15j5VMCD(1EeiP(I?!MCt=meu8md(NGt@?)DJxFj4(fBzD-zrOPN#41>M- z`W>^raB_p4J_m7|J9)Ey_Q*@38hri9gC@6)DNg|p8TX|OnGE>L!@1&(I!^Iuh4HJY z_}jjlY>r&>+k1`p2}5k|;KlMT1dX7;u&7No``d`-?y*e>-_nE5T0k%{`)S=60F4iG zc(a~Ta!uJ!n8UqfJK#+bZMB?s;wMZ$jx4q)4b+PP-tNn(t+w-;*_Esx6R}^Gi8GmwFd$XB&6tvGVn1RO?^98h{ z%Vb4a;)?%!knY|ZCj+?qWY!i2%H_6HG!G&Cxdhbz))^i2u)KhD2xQ%`7+zCxmo@?$ zd|Mc5bC$&@GaR%~*)aXz&us^e1g3lU0g?rJMM|IzLwmWt+wT1aZu$0M5|6L*`_a7& z8`M?r5OPkA#>RCfJkFD9_(eZBjSfrm-8CM&+qcymRRjzvU#=U;w>AN~k8$BqUB=%A z6=yx1)tIom>xW=&eK!4Kf)_XIJc<%aAkTjcyB{1Cd$+arJ`bXIm*J?*5FER+e3CcJ zNuY?AkON|9Wn#{)4cVKmFyeH!_?48)+@SFZ++h zwfy;iIItTJHwWr$q*#@Yl1xXw$G>#x8zmB5S}BT&G{o#d!FabS3LLtxzw!FP!57qb!;Ut zFUxON!?gPa%P|*iN_1l{3=rWf2U)a+?BU*1qKwR_TXVkONLw%nQ`(_k;q}XMjZALL zcqNCKCoNUGH+iok_0z|5srKHNb;4-6GDU)@87@e5j|4IS!jW5v37rCI6dHn0$e+Hx=cdKdG;9<<~}lETuCc+4j0-=I1u`|;tDzVTc%B|qR_)%=!XHMAWv6;XFhx#>svB!v~*CFKX$2exId?q}3c03s?XhHkZ?v)Y{C-M#tUIMetlR;Uf+T<<_1m>k- zCbsu_+94xGP)Nb+w53+5gn12D40NQ+UB}lBa4g$=`9<>>c9A?tkgwhSWVfU5i)*n} zYD3z1OC0NzxX99x^)y@v?MnbzZ?ubOl+oNFMF`t!%*yv$TWVOR!Xxhkld%iDM6*gg zlH6N6#fI!J>%@^h_QAbwA0+NE1NGOI;(=SgWw*}0dV1%D$$w57PQk5u9&nz*x*;!V z%Irv^o1Q|Q^ICedZapJ!(Jv@uN`WGX#Ws_{91J}0&wTE(<|m$`@VA@8%6z%XVeAx{gHNlo`+Vsc^b# z&!?pcA0%cgiYn4dS!=w0?MqHM-jRr>3cW+{y>P}H(#B~J@?JFE`86q+kNJ+^2Gna9 zX7{0W^wvf73*)G}2BY18#I_Qe0=sCnJL;|VoG;pAm`d@KgIf8>{b90jq(7*#{>keK z^Xg4cvl*3^*rFSy>=|<4f3z_9&$lwrNcfC!7dA$mnsDJOZ>`#*(=TO$NO@Yy$PcE~ z%4}T2PScr(g@bf~{fnHhub>$Z50|&ZIM{G8^dM@I0J59l&=p?_82dAA#$ai$7h*k# z4>um%#-?fwILm8VK7|%+SP)A}rB4=3J$g(q+n~$Nz9+BKZqbhv1j5J_9d{MMz}O`; z2*TDohJ?9psSe@u@@PZem_RKLA_RET^qZq7Elqm0_7eG9Y^s=h;HlNNE>ngMk;u?S zV}6qIK&QD24=#PRh|GMk@QdpvRr~Bay$A(^u&}y%s@)E=m3KmsT4W%4e2Flu&niUQ zs42JOB#`N5K4;*hs$Xsk*v zUr-|C9Y*J#@t16$Mh+L(#$)mDzwi?Nn>At3RFDb{VM3?7h;0T z_{IkgLe3I2RuCk%wJWbLi`hz|faGG4 zw^ExvOm1HPQZ}@-LMioSo$OP;wgtbn{>oYsomYWZ1K}`-L>FF*orz4?(M9d6F#|0s z1)gO(oT9RGO-B9&L=xb*=3f|xiigt(K3&vE$emzXf<>(L@<-Gx$`pybi~yjr#|yZF zlFFURCxl(avOYzYgteRq=BlKK^`W~PbH0#sVlPTK0E}OvvL+;}*?48TuQgZuQiP0# zxz*I7O@0>^Z*YpP_C4SI!2jYUoVd~slpQZ=yE&YZ>>9+P*vX3*Et;Xx1_2DmBx@(N z&QW^Sv);aCYve3xM52~pu>u?UE`44NvwHh2n;><0e|aK!Opk>Jua`?~Kv>h@&|C0! zJdf)ZEJs>(3@SY9%i~K<@m?%ge4&<|7)rJwUE}3*W=GtVP9GGvj<#+DLBZ!)1onD|@w3{*3BK{DOYxc9=z9QcUrr@#+ z4WrX01iWM%=gszM!2}8bs!-|+fev0mZ-|%05*S?PNP*(>g}+D{AenHSzw5RtBVPyQ z?&>4FQ_8VY@xHq)!iK_-igy8H)-bD!2*q+1=^!WB7Le>EeAiNK4l#q%WS2W~T^v<`~`V;|iUhVPdr@|?|9Iu17Yz%JX|6loWSpdPZF zI_)l$l{F-~ME^QEuib$z%Q!c*LRH%trAjIzq9<2L%=Qy!6-Hck{tQa05&pt#eGS71kS;rNe^$wb#IRWqcHtxAoem$Dm=^|Z zzh!ff+vO6}acVLgjHF}H-|js33s}*ynhV6R`*{m2=vFPSdKTe4L3OLkGXBJAa_d&?WkMJ&m^^28Y*S zEYr;ePq{M#vC7uwNak&$MV>8S=L*$+BZ$CrMDX9T1`TiNfyaa)StO?*y+C_gNxlnu zcDUUz{=aR{`lSe+wY5r4C!?DQqiHfNjCuxt9{Dn2ZX>DWrA_*lY$C?kg>lz0-u%zy zufD!S^`^Jt57{S!H>VjW!C&>cDSvZ8eV}zSF)Kl?Tz9aKCD5-FCA$s`k>_|oHMz9yU z5;SPDX~v})Jej?hw_94STxajUfE6hR$-BgqTpJSIh;j2`-uM3es9Sb9?F2g%=0oYp zLSB113A5++kSesiZMYil&Fx3SgF=T@U1_7TRY%qd2F{Vb5&1RmA`X=_W@&cot7CkT zC>=kAn)a(fU!-Br`0rtbyYcCYT#SM%1NKc!>O?=-gvX?~uZ^MF_i0C9Kf!|vj&4m0 z^LUssFbw-g7HUpW;9|U}3)-kljIP9qHBvVHQ%!oE6eqKf15vhQgDAnC`~m; z<@nwMMe>`2^wR2iwVsx2js6+2Dvk?RwzNL`-Ct5qvtoF#R+3$1MB+^0F5J3XdHPMF z8>%r4Dpy$bB1_cwfLG_}dzTwZw{UCG^~F?i7s?kWS`DwaslCORgXTY@ku)}O$usOC zM=C?)b)rIJqS|Ed;bDam5wX});>pn4!b5-i=a|&637iP92GcjhOukLi8(Z_1d3}DL z_Fxd_)DM4~5fq`7{XZZ`8~1xG`>cZX(v7L*d;0msrM z1$hz=`DV~Z@MF@qTRKF?Rx7s#o23ncc^X-Dcm~QrP1bKZD1*jXt;qLjt37xEjVx_> z{B3zx8bNz!7t=Tw+GM~SR5zJlSfo~nj8?Xdw)6Y4btcw50M!zqIUM3R4c>B|4psEx zv5aJ$_fn0^tD`cX)6~xDHIwTS^I5nE%2c+7(GheD#~>(h#nP79`2M!1hx7Y09+{+l z;YAq!$hLXb>ld0+FWy(URFP|@ynuzU?_nf;$oHOVSpHjTVF(Y>Y-XBzKkLEE_|ngt z$|i$5ZHqh+X2+!Z91*=8Te;w{VHY&Un`s`PR}Wv8`p}hd2m-ptFU2hr+SgnW5lch` zF*i&5&EDqup(4Q_rd)wB;^dmmk-frq3&WO%8_^1$Kbym2@;#7#_K{z=F5{Ii zMQD@(A_Qe&E45ku=4|cF+6uI0M8ncIUb6mD%WuM85;*v=~=){o#UP*?WhINM&a~Lo36&`gr-3$;bq zFF!+|REoj^`sid*-kcIX)g=r?#|MD>!@XZ!PZZly3;C#)c32Ary$3|86h&`OTx-NY z)Yb`FN*FkXzdMHTG^s=T9SxWBShm!C?vx8H55682aZM;e6a+QEE2*aq*r6K|vGC0{ z5A4~uG5E+kwi>DT9lW;6W+Mq_Gu)2+F*vDGM$i{gP!=-Cd%&B-I4K+A=!>qc=kvZG zq{YCHuZnDI_)aDl%150g`!2yBmPY&&IN8FZl9847rm6ZAJ(VHl7r~QH_2Hb_Fl}~& z_J?A32<)Z)_P4C;+W84DNH1Wj1A5QWz3MCa-WOfuC{KGD7HYy-FgC}*?6h2O^%8?B z83Z}&OBS~L0T9`KX=4;>%n$-(ma)fx@6;;y6xYS@t@FCApWTCYp)440sE)1dh+q@=UE2r5x+vV*Z$F9u17uxdnqVYtwlXqAi-Bxt$`^8bs zyKr|(j)wS~?bcJ%zzb>Cb3CAap<0HNPt+1V8@O>6*rE950Q$vzK~xbF<7b7D7fdq4 z^lx06UZI?dWmd5E!g3G=bmuk5$e_=?rOt;dTP(X>US0@0ki3&q;^et&#goj+ch-xO zO4{+c+`n<*8U#R-kT-3emg6DE^9rHOn`AjTw$(V0?zL9;gWNBc?X0gvq6$t^xVbsW z>@~xGytU0Q4QJz(-BxN5_ARg+AIQkv6(hE+U+~r`S1`7f*pU`QrWcl#Yxs7A_TMtS zhiYd=@O=-Ln2@ThRr{DZhct%w9Q&fQ2a{rs8k`K%*zI-FP1^TZ-acIbQH^7F~P`kW0=3FO>ZtOkZtG?(vvoat)M~Cu&lf7mQ!f#BR->e@3pm5!!wM~V&xDg z(i9EwZZWOsm8tmf)D^8aqDnF+F=Ca6Wd22M*(>!NW?(o7f8`2A+?(%p;p8sgr|nuO z8pdG007+osD7Es~ujgKR{^hVp-$EsZ?}3o>P8!xJ1?8OE4lBzp&F^)_I$=Y_dkW>` zHQOdCV|}3#efTMJr?(=rBg|Dv$vka5U&~MQfW5D&g{@}M?Uq}TBGLDOGI-n7`F+|# zOTQ8nlq855{B~TL9U<45@`Z7Xx(crW&b+^rG@N+WYws1 z*d)9__h5^zF&$&R;CIwn`z~Qy-H{sLyj%k6!`DMwU8%F53IvTX8S6UyAl-k9pFl*7 z9-LT0yMnoMB)D~Z)@vi<36L2M&bkbrNsEp!ny3c5bN=3vU^5}{;LXAZcxKGG%HH4K z=Gd3*o@ULspoIk}xFuUi_jT_2mTm0AH{3?~k`}%10x~vnt$Ck!N?*NBsGOt=C86ZC zT*!I%3fG!!zb~CcW9DCs%8`tq^ zj<=6UMUfPpxbh$wb9qF(+eTD1J^0>c|6$6C<9auGeIPY@d>R8jhT1TQDA+&d6$y$Vd6zjjPjPcn ztDsW3wAN3Ksp242PC5J>UQNeS@9Ir^5VJ5#o8|koxx3-U<`KL#a7>b$?l{P^v15rO zi*7zK!S+Xs9U~H*ny%8F&Q@0t+X#mf-0B9-ZSa3EeHy7}Vy&gTFMVnBt63o}--zeN z6oscZ+v&uSZ2kVWS!9LkEAU>tEY|(B-WlWj(w?q4%7!p-Y26@FJaLuhur`;o}9&l(rDux7#A0^+%~1d*Lx9Y432F8uyc$ zV-KTe-`T#nmVI{29R~wUxeypinV=|l;xyQUBrx{57iY?vNwR1=m@p?*yGSDHu+V=& z>KZ63kH&PAIX4tO#cClJ&YE}^?%QX<0DNpU*y(ZckxZ`JN@jK*nH^>8UOBahs36l&mwU}a{>id4RNJwSrA|6$JEeNpB%)0M zYyh;ZcFENjv9I7<+P;!g&$|E;oFs6PC|gyjBose>;~L)K8MIOgHa7_yC31C~1`0-6 z6##O%Qyg^A?1-npo3u=i&k)eC9zyy}IW-(W0K`%x3KZz9x6E|I0QFHrR>jM4(Hd*Y zZ1g0DI%3W|EPXJ>*B-c#8_*l7FkX?IQFcK13iRQD$+FNC9o8ORd)N+0&UU%}25-zF zoeafi$}Bt*3`yp~kVVNF_@{(=SSylhXlV^r4AyiV4ft)yWh|p6tV0PR0pkn>Sw0ME z)T}fExGucv67VzCqabB!7=W4Jsw4D7)i7=V*`C!n;a{C$Q^t{M@Wv)6e^6ksB4{lz zEL1(H8k+Bc9Rq`hXfdJq48RQL9zn1PP)!Jw*3QNG0M93=iaDTLEHnyJhxcn_*Xpb) zXCH84(vaRNk=SxQ4u1y?j#WjkVEBn(umJkR2F^AB;zC6WmpT$Rt2^-v2_8o94&t%w z@t22569h?GWArXNS%lD{N0P#T8I-pZOb?-x=0kUlxabEkUy-oqhDM$3#trdVZEFkx z)d_Abg{a8{>@5y}8AcEyM3+54lgf4Clm|>Z*scq&5&S5R)mbW$Ou#CpdX?ial!Bq$ zR`5a;thK#~aFNSB_|!*1GNfRgaYa<9PLW00b#hB^$I2j*AI_ib3f_)Ml_} zVeRc+qIIslf!+cQOO)C)AP32#Jq@4Oq%)9d$y2cr`sjREgF72Ed>}rF&;}hC0PK5g zl+6H-1!~o^4nO<(0-c;YM6jFeNtWu|Sdkzgm*78DP?~`IHOp~87`r7Yo#7ZMWN9^l zEyb<}2;veLg0LHmU~nfE+zVL}o=Qa7*xS~lB^QNjMBKRRTpJA87maBS1{`|ST|}_E z;H+9nlOLOS$RSy1139=zF~B}KZf_WEv{$93akfm!{IZW`JN1p%u$7hvH;_&`D1K?&7mWG~(d`7EeX04f1C4`0%H;9n8R8Sk9~o~ov``HO-*u5i#Dv>q5Uz#d%b zy*PN#F$yuXAdNTB_l7wF#AFCqIhU;VsYma)lM-5M9&XgN4T0`1pcWuxOMzTVsSkgy z);g?8g@(@MNCZ-0&qeaCq-YsW9=ePG3W3B46k?V*n?>8RbddKuw;@7@R0hQ7G=rc( zH7!kv25ARq`1#>=B7^dcUD4U}u)zgVMd2l&0~PK?YBf(l(k0L?Zx39epFcVCh& zUNSu-Dk(FB<9g3Lvq%8tkFZ;la&RLbjx+eg$aV?BBj|X>44AZmc7E_aGx91br#-yt zDnVuwotx+Z;nNY(o9T){>`_I_;ZbLFdPlDvpdHXWvxG@2hXn9d&xs9v5Ql&sA5p8t zm$o)i9`f=Lp3M#QMd(~wv}D)>Yw4h3+nOLe_EH4aPN zv&Y_MgAFy{t1y=-Uk;Aj8 z@LnGssS*AG6=GqKmI#}U&pINUs_cyzVY&_PiGZr4jm+ginXY+>=AKlHT>&l>rFy`< zfX#t3R8CoVqDrVa4uS3%t0YjKBa2j^lgc9x@s+DVLEV-QYbpaRTG(2*!aXx*m^8JT zigc=T2pUnOLR8b)`!&MBi)s>z?KP`%qZ=C&u;s9xYgj`7+>B6~gD-n5kcDSFQpDe? z4n4!61BrHcY;c?bpn^N-Y}XRN*~zdvHETmgu#8zBl>qeHw1Z*lGZ2{m70j&q}DnvN7wdi#5p7ji4 zGcCe(GI=aDC^C|2Rrn&oV}K74kKUFDo1h4V)pf8tS4Bc=Sz4pgBZpGp=n-1A1^si| z&{b4GbTxv-ZL5yqH?hYaL8j9T2n4)1B8HIgTUQPJYPK_wvNhy5L1kt*ft@WAI-63( z4EZ>Ai;yXKfV5S{H$}^tjowU@1DF1lC3$^hUtweTpQ3k>X zfcpTY1MWS^fGLBbi*{Y>;Sp0T)7UG@x3+pf+(4DfO{S8XlXbYdz�Ku93Ug22qXI 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

    ~W~eol_rc;3cj~wN-xW#; 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 z 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

    t=P?>YC4w%T-dQ2+@j8O4Uia~H-kUMMAGi3QV zP>H3s7GpRSUQC|63swU3-BF_4316y*ew??wyO~G77ScFU|6>X>NVh-FaS!Mx$qw5c&bB$#;jw1PbOGCAybJiCss6PlB0kiyp+6kd7SP6I<-$mvvpV zNgiXgh-`4z8LUrSnWT!Nlc{hy{q<}rW=g(bBub4yB_`<}ag|zAq$y5>pt$R*osE=9A4$AF~PC?%}o;YwwosvRbmqD;wgx}AF&C!QH|$jjGTy3y%_#?&@G$HNP?u)#B8SMa?3J-RN+W|hCcq!Q$#}Bqc0jU;)hX@ zv3pA+#EI*B1q+D7$i3c$ie+|x3c^i zie#0JK1!*n`rv!fqWADFsG|*NGGZ<~h${26cpZ6DlqO(xpePPxvalIJF&g`g-DYwt zGYTloN`;}E^<-^x`8=MuTk;WozT1u0RlAj`VEJ(*V(>$ zI^4Q_=ZZR)JM5LExoXEb+&`2?V=F!MJh}m`dtKx^=h2%5O@-liq`6ulN32;}$KU;qlK;Ck(9Sv^p|aSkE~%9eA?Ma zG?pHKf40)gp5D_e2j6QCQVph_wV=h3es`7&CED$d%V}NGDPc680(G5dN^SH`yR$6! z-Y*A0psi5SgJh+Ibb!p}nFp3UE|)H6rWEP7MWVri^q9t9tY;*shpRmwiV;uj@C;ex z5CX6Z99r5vbN9ytsMxf<_YHG+_%LFSIq>7z^)i$>Jlic01}XJzjM6J%{=C2_V#)iK zV%B|gxV=sQf2Vc6V8+(3-f)hlZ8%E%9Amj-3HEej(5$@E12b6CIfFW4$s)35bCRPN z@$JXDVUf^O0SZuWo9;JWW5IhtL%#Ui4~l-AS$9=ADsd)uo6KqEvU_Xy@;cWNTd#0nw--xm4|5cX zqIb+u8>a4lSsMcVwJu?>6F|G4H+M^u0j%CXvR0dxaBu%)I(}LF>iBYr&^ZS zlL&Yr7xGs!u5F;hHv5oYc1;)#P05Ss8>Sw8WB8bD<$1j6SgTm21#oHC*K)|(Ce+(k~rF#;r1IM7yK=rpE&vZ_CdP32oY=K@%zk#E-11& z^h*@Y$`d05|8z4#4TXQ^eHtBx^hIBeb>3Y6ZNW;OS5t$W710i%*ORl2-uHMZg; zh--H7e1Yg?rp@3wJkzE=_`*;K+zr?74d_x*kX!U`*PP(!8HV*!9kh|3a0LZP%67niz!4({OadHY zuEfmJ@e%!M9bj_`H$f_is8ehMT)sL_Zu9X%tF})j3$AUAhwC)OMLyO`Dt$Ds;aA(Y zP#Y@Cu`(Smg$2@arUj_IitiyHHG!91m(O6+v(_B+PjeG%XEoorZf$$m3Hy?Lw6?+m zS;#3{?%7hD*IaKKan2d+Qpl~a`T)Et6bp?jru%&8yiNNe1O-D!K@w*@m{5|&iuP>y z_sZVwglJGci8ALLDI80+=1tb`K0>jyocjzDf^-GgrYy^S<}z>`dA?pY3eL%1ysVpU z1#ZJ?X>Yr|6yH?Aeodvr>Xvz#M!Zh9oIRt*JW_xDnw2Ljr3F}%u!)ltr`Vfd1?Yf@ z7HxFcDFseiy&bVxLWd>kY25N2a@q(U z#69TbPBk}!P+MzkZ)&vCicLr*WUzJG4zgJ3R92Mi+aWcrw5@IPp%fm{Hc&w|Xub28 z*h*f6X$8<+w_xp2bikMgO}6uCmv)=i1{>WMHkdw}r?EcKR)T5w4mO2hziicRBZqGI zDGVPItT~jayofnoeJ;CeETNoI$7}EdnvQbnTrJ7)^q;}N$>Y2mIAbP1En9;T&;VJ= zegd}IR^bh}m&8*pmeC1bOe||&uusor(&tr5ve;Fg>6{S&MaX!zFV$`t-pprcTN># zr!S_fW{orATUn{M-xPNQylMglO?VbMgX_%s4iv7W`8TzA zZ=3Y_{IZcG0&JS#cmxRF1TwkwR(y80`CGqF5w=0`^q+G<$SvfqvQ+FQZ{M_&)<8T| zcEsy`QM@Ai=%y)28}(Ulr!0xZU1>NMI!9@P6hCs_bF%xptxT+a>j<|186+Q`wnymT zh*BwMx*Vcem6p9#4;@tp_2o!I>hw}pZpVY|X7%hoc92FKLOWdc@CuKPxGP5Iei`x{ z&KBw~6|S~iUX66nBJo-N6EMjk+bIid7Rz#B1bfnq!+Nc2_`|xZSXndViZTI0quz4B ziuHbLny(wzJy_mU}d| z#U5gzOuLr_Aw*yEtPEAYyQHe8(ON?mZS=%9#57>3bF^uTp1kkmJ|0S^+C>M+qd=NrrCAOa1Pg-@>?yBtPo(*s_zqqWitWc4*Mo@zy)cp z#bCX(c}DKrhtYeUW;26AFt|NW0s&{Mu@lc z_65yX6c`6x`-5QUMZ|T3=eh|Oedl5ldTSdvJX#pPj86Pmp?mlLu&3|R!b(}=XosE~ zmsNffb*l&mHt$ZzTZ1X`Ld#|jj_fs|Sxa6Rr~bBKmzQvRxvi&W_B_){{dX>>yoJg# z5t|a$m4cpP6=#O_I6YZ*aY-Z`)=NF>2(Y!#K96((8gJ>bSq@lVMSg~ zncj+JbmE|DQ8ytM$mq}8_I~%H-t161(W&MFsPte@xeINt*vm512!2C)OQfO!MIzB{t8Ud%sCq;kz-&kT8?xGASHclM}@KutsbHwf?ANFeEh6iE2vTt(S~x zn_t%N!Y8Y#^K%btXxDI2L0Xj5JdGtZ_MoU!t*&vR`576_XN+y?d>RLRj-C>1-y9KF z;7^u{gkBmF*7BO4cGd$r+;b?K&;VPyh`8k5vY}x6!?b<|%#F+dQwhtZ?l8BvPN0MoKeizRtL+qKO|2zmuD zE{|T|2uhp_eOZ09Qe96qf|LQUq#Ceez`^YAI2(+)eIe;h7tNmGb6T^EKrIze$Xs*W zlf7i!UG3%CV_Lu;mn00{93-Q@o5X#ij1f!opKy9>5-CHW zQ@yGWTC|pR=FkzZw@CV-ctuR^e3n5PLn6@QJcejvd%Lion=fl9%5WB83-h2tl-=5m z<94r;cT3tpOE#)t)zA_^yxqMPaixya1H09p5jGs3)nm94|-`EiKU#4lS>pYZ=e#y;&6G^dQ{?rwx^-hL$3- zyiE7ZFY6_;%QPp03@R7|Khjlj25il>c?e*nv5>U8(5MI1%P~>1YVTFOZaHF7qpuzZ zBG0ir?=7L^i>+XkM{haeK*5I?lU&B3y%c@ZS`po+X?iZZw_cdYnf5fE>8?^c@g0^3U;WQ z#;z+Ot9ka2LH9|F zL}2BM)5@f+JLU{~m&)v#KKkC#={i!>W<^%S-;<=cv@~;^t=jY5=-HT(L z$LeR$3>c(tm3(;3QE`6EFY7+NEtTi8ymu06Q7993^ey_**<59gsrmVCyLluL=d%bKT%No(~>!5RmZ+TN^x@0%+2q4T(Jz*`%yo?zI zlrzGZwl>1dI(@yJ(FEDy7Me4NM`uC_nWWF0=Xzkr!{8Dd$^;};dl)tDM16AF8Hd2g zFKf5-(nHCvM?$JqmV~nAl3kJ{uh0$vR1MYoB!wg-u5IAi9hF~Jw%vYg_HYlVbxuO3)z2;15m zob5R^PkClu?Uq7=kHg5~<)Ez8RBN=;(<8d0^HVz=MPi^}?e{GrB9U(77p1UZgObtU+ z`s_k*O^l2AA!*T0FRapOY2j^(UfJYSeKP2C*3>P%!zg3}fE$m-S)^D%xI8y8(3 zCR(d??i*ilZ_BCmd!A=ncR>dg@^rZumF-em7#g*lo2>bHI@_!ZaYa8aU0+l|$z^-0 zE7ftu+xoNJwwA6imgmltn^KwK^m=E#^$ZWTXRoVXhE2S+bf7;sjEX5W?vnO&7vo8z z8X*nS(2q7x=^mXpl$WhW*I>*6A9>!_!RNx5Q-VO#>&k+_-`fy#=6ry>mwIS`WDPE^ z)3VL1o>e>=oRfhA-JxJjRtJy%<`V9Vabz3%gn4tW9@{v9Nv5ZBHxHiE&14Toj$EZP zCBe{Mp&!bd1trXC5^hgp*M`rt-w?v(*#f)O)R_ zJkj7;OGm4x4j(a_B7HN#(F|uajWjh>f>kL@Ze8^v^As`b*AM3NDE(Hl8-_7AxCW_? zUj}FK#*nu(Ol-6{f20n%MjQT^46Lcnl?%-Nh5o@It-B@w|cGS(2~o8 z2^Z}5bd%WacwCz|m&saN!Wfs`vZt_;+)(1p*3+8y+>kwIMGecW7%h?(rj;0yNzG-i z`OM2qD?3}#kY@4^Z9x%vx3uLz2S2{yPaAbCR&_)DfechAqDai*p;WuvL5 zU}O4a=SDp~Y`_S{R^-z$paQ#lW#&5kGHV;oqsB)~#~9aO18z*#Ow0_pEVs-gWLWy} zn%EcerSiWCM~sXr-s$tM*Jdu>;%7K zsoiD|HA`AaEz=}w93O1`>u5m<6|)?arRJBl*>;!EVS?6@2?QZjPIA63r+Qmo+Ug7C z>|S2^5hnPkPee*TCb{YJ6AUKH3WXAKjTtL?{-oTfapqaQ+$24nO;JlTv%d!kUs)w2 z4C$3j*0T@FzGJZuRk~vqoy7`&Q$qs`u?tvBG8ep##H zwgf$nXSfX`M3HHain-WU#)GpfU0nP_yjJ9G@4!WscT{@jg`oGa;>L zJ6t(-Zat~HL|Nu+mw+v!C$6nfVmmE>366SWd%`@KQf)KWhT6av(yCP{Qtg-_pn79e zCT0HwS&m%hJnAO4rOJe=Sn}4A_-s7t&CUEmITn<7<3zn;H`=i0LvNX~HI&||nAI8p z{{}f(*NLMnm$=Bh`}E$!aMc_4LPo>VIR=FLJ;di&ZKe~U4!wM(?JZgZ86sBJ+so2G|SlQ2&@)#D?B z4tMjnUT@M-Zm_KDbs}CghPICMS}6DU3ZbY#;rKY;VJg9v7U05qlUXw_5HXj~FKmX4 zkkU(*R9EsHxvnC2dC6Kn;qccnB(cCQUsD8O39AUO+>!y69CmeOOL{bQ27> zRwDdEs=(-CEK&|5`zt<(=YHIS*K5Pogo$xRB2H9ma-+FmMvfG<%T$gredB)(dBTk| zQTaK~A%4~UQB|QYm86d zea+U28(fI3TwIJj#RrJ+w@EF~_3C@9eY_(e#_0R8(1s8CU0y))Y_o*jPJcS=V*B|0 z97ebzOy7)s!YNCEMEB!W0=eyG;$Dc8{I&fws;M^UMiVyNGdT7!-Yq7d5h9c2**vY8EPdzLf=YO`^s*&#~2=iq5H#HBvh_5`u|&2^O$?dS9`1 zAB-w!k|u7!5S~*EHi(jx;p@q{Ux%l+j>M#d?e@M+lmiAy^b=>~gS62vTlp}7ioW(X z$m6%|&{{nQwezETMLjeYnxE_5Sd1{SuMp2|+BC`anUS`wmPQRt&dZ*)#ulFLF|VMC zV;R(5^ByaOQ+@nS5f4bE^+<3`GjkojcIg!YtQPL{LjA^EHbxuAx~uQ~GHruBvUqQ> z`+y(C+O&ndDXVLbwHv`yjHh@OX6C3sQI%^;Lpt?`Uv@`EG~M#@o17||inMwea>sT= zjj}e>f*IC@lq8i!q5$&MQwc}#qoNMkO39;cymB=iH;mSt**dH?zmbNjjVd7zT;~El z*H#WEbDdHnJ)mZ0b*5c_9 zcq?Yy66E%Ab)9U}!GgMJ6A($kOnkH8FZl1{atLmwJ`qqgsnLT$c(OQgNxv(Yu=@+fX#1>)qNbZ`2*44S!- zgbbqRAA3tZ6Zzp^@4m6{1a!JN)z~sO-(cO+s1uKGyNYQTTjb83z<_BapQI4)R4{rP2D!Yl`oKlcu|8Q~s;k1VTUO!=<|dY)G;=M1o{Q19g_Ah2 zd-%qsDXP*Zo`d9_AGLDw-B{1CG{upE?1m$wl+@NJ-OtWy%!%@O<{32;5ikj@!9GjB zHF+yc&A&F1jy#btVg;qGv`t-)-h7m)b~zd#++>%j^agY3UY2wMYnGcg^`<3EF(ZNk z;uC_V#GOZ(ooI4 zRcKjXdJB_$xR^Ys0be9Ih>*z@su^}16T#b4>owg`T>QVvC`vokP^Z!*!AelVNjKV7 zG_5a}otURpX;u=m~^dfA3lk#0DbwYJ(I%w*$L zY&@qZNLODv`i%6G{jwgFV|peSu4Z&KJNA&~!RvW)^cm$sZhevPMUJuELrcyp~vuFQ6S z7VUI3*N0uK|5k>d+SZ`aMoOeh{=rrV`3lHOk&)EtK@CevV{Azo<6UR>U9xiNt)alw8H4&YaYyYH~sP~ z+fPPokuR|Uo}lQM)$j<6(2rCK`J22Z=TxMFnK(j&s@iCPO1P&Tl`+Ti_U2m4_DOhH zxh?Z>1^B`FIB8DIr>bEKzJv%wLImm>5$0kJI;{6;Cq}Qy*M@t~!mQ^q7$rKU`E$DW zo+Ftyzl`Llfko6c+jR3Xqc;}aReE0zHd&i0h;itqhtDujQ}2vZNqKD?WVy_S)m35` zw~`+cC$<`-ues>t)#r1WSmY5c=y)o=R%XHh4&##8y7{)dZc3x$t?*VD!)K+1Xq7Cy z(dYKKvvq6EJg2vN+ESVbDLw9v@WN8m4^ZoBiYgM4Cw?p%b`0|RtvyFqKJrI*>`~d~ z2N7nK)IV*t2g@r*)G*>Hd^?d|h})|on7P%PVir=W<*bM=(g_M_NvrN1q9#X=I6KOO zc~)xV1o&pO(^8|=uM>Y(TZxW|$0!+(vpj9#oz_xvtVohYHK7DG;HWi8bJo>-z_&|I zCt5;aA0NSto2;p3$%(7Yf2>`ZDQt>HJV~{o4~dD^4S6cc7|kzhX`i*jCVz@sU_S5&D2d{w2JVKo5|kATN8WFo!ljXh_&YFp>r{`O`viwvb_sR zvnk82VGF&efy_eA4K#X6!_?qi_kBhiiOICvxUgGGyudqCPi0J1Z|UqK8aDwxo<&^U zq!VWVTf3wsj=O%@Y?qT*_N<9IoNL-b%&Cl{y3_^F`^?cjsq*nJ7*P(Hl$#uL>nKY7 z?mf31LNZVmakwi?&3%Y=l3n!rewme0yY+Crg-8uCYuzEXraKlf@jm&s5%1b4PFZU3 z*DprEt(@JA*dcF7?i)wOq>)K?tFgO$dLoB7sm(1<%X;4#XFGfsEcmsqu+Foy_7wBA z?91T3vqp4kB%wlqT_iT1&^#Xy6QCcUSokAzphN7n8*&xbgQ}F)iuUN5#uIy5QxUgQ zn2Fn>_Y9?sTFUDAnRuS4tsQ!*y}wA}7sHu5&dmu2lvTfMlbM1_=dsWp;v9*gE;rYm zY&p^XuyD4y!dV;@m6W>5VWh3SZZ4ACi+wWc=Zgvn!Ayq?c38*e6)S6k3iiu-YsO^C zXqGmnV>AeNz5^*4#zwzPPOh$h^GPvhnUXaaR^gt@d8T70@3ty*Sf91IH`drDOg2g| zl(bw{Qp$63(nJQ_R}5?B5mIfv<5E^{A)W#k*A}@+oU^dH+cuIP6(PP-FV{*2liY$n!c`Nr4plV0#xWj)a+|DxqpV8J)8vjGhDr|8 ztH||`~2(;0h}()9V>I0-PGwCy!HNf~$F(ADxO z&1!P%3Il-^`wiQ32^I~>Q)1{N9V=}~_d(U!<@!%F3w_JYsclrc9SO5qJjLUH&dJJj zGvrDD;~)${*?`k7k8@CD|&x0UF=4@3T)X_hwhy>WIV4nl}f?~Q~=KcrZSRuVH+LajpL^_BNLXW*cPX231(P3O#%ZojvkMAin66*R$xAO`gB4cf@L605Emnp zS>u=W+m)stw)mPU%x<}%tf*<6BjPK$C9Sbn^wJb@Q z%kN$*HLgBV7>BX`rDGCxhP)MXt!nY5#tM&u4GyIBrJzN*(c`qX3O}UNA4*@H=~yL= zpaPNi!!K$Dv2(S#>eUK5KktGu#a5rB48ZW&6iaK5&mTRMKSZN2KlMSpC&5iTqxH`1 z2LZ#9#i^vRl~%D6lwL+`DRPD*t&huEDU;b{W*lBgHCC6c^($q}QsTpCZ-Q5%80!^RNRsozph`>cgRkBf2kc9&<@_?a zvrU7jF|Y5Eil=w_dvl$sWX!NG;lm!n5?z1Zx1X#t?fpif1Os&UuMvr<=}hZVb=Y6HWM|F@~;VH9lV*+b%b~+Dc2KZ{pZP z=&mUeH$Qyb8Rfd(5+~o3S_4Fc@Zfzn4xpL|d9r@prfRF@Hi*1N1B^|az{e%TU{b2ygImg<`ZL7yRJpzA<`G=zJfc~U zDD6juXh%`@Nyy~K)XmAEUk%AdJ7?dNz0rZ1DE28XXJVryM$HPyg9N~!W*6>~PmnxW zZy|Gb5ftTWWe1cjnvO4AOj77^<>6qzi87ns8p$<>=z)MQ2Bh%{R z^P0Q;e!G#B`m@80j9JOY5f385JX{M}nC=`OU`951p6E~T0LoExBEu%W`QG^WMnlLk7W)goBoIao4Z9&vO~MY8_2v@nGIUdvkIqh9l5(&(BBD zLGy+(2GgtM9wxD7xi>bpYv&<;tFB0;q9j#UthtH?E9KH>lzNAI?r6VPM#Jh(+Ya%Y zAi;hP;sk5k=cjj#Qpp4u#weTk?}eth_aZUny^fnE?gIVNcgUCZjX(_>$$ zST?DFs6QTiC=z~Ii?Pxt^FvDG$6_RVYg#tw5Iaug?n|9p2pphbmlH6mg?2@-?{#q> zSa7wf5j48glehFWqrsT$1h>yJLSt z%yTqwp1)?fHSZ%`i_)97Q|Z4&{D83FjKP8$w~ybJmWZM21ipEW86xJ0Od6|vKV?6k z)Xp+&BP+W=izES5VVz0$CT{t8>hElc6Ksc*QCUytWvEdUyI3p5rH>a$JbFUh%`{;K zhoTy0E6b0u*Yvx<>7V}wu&n(SVA;RbU+Am9(zoy4>zDe2qNjh&DEpD4$kRhq{`}QX zbiaRnUvK-Gr~a3(eq#E5|Mb@|ov-e@_pkKT0=M?+6G`p!SO4Z6aL&&mCjZqNef{=> zLq0!ubmwcJogd#l*v_xfi!ac|7ux!VpMG`k8~ein<$q*s+K(WBz2RH_ot)tG%RdRG z{6{|^O!;%8e2p{y4F>YR`i^T<#`Bo{QQyYj{B9<8`sKG+)qfI%{5RS0={MN% zU;pE;7OmgG)BP2D@;9*aznj|oAjn?`XVaGyJlb-?)4KdR_WOY0wImvo7?2N!OjijkJ9`h5EglM!^hPl zkQYCIXh}$aBPsw-CR{E;NQwgjmPz`qn)Y|lcmJ*Z{MG+uZ}rXVA66;*A3xQp--3Yu z=eK|TD;oVb{`KdtxG!F%zj*a8|KD#B>G@RO#?k-9tN--wt5;v@FJ9>L`tjwmZ{p|w z;$Qvew_g`*fBnlpo9gv9p}&9qQ+DJ(BKG&QZ-4MVD+2I8yin#}w(k!w`?vkQ?XN!C z_u2}#Z|~ou9{OKttNc5C^ZI=8X@&UBO6pSq^sBe}-L=p2V|?-7-o5=q=>Ga&|IO#0 z{p_dujVJrt@9*fB`nUGQr>Ed8Kg9>*BY(4Edfx4)@BewJ=YMUZ?xyZ2sE|E~M?*YALT{MMH7 z*>8Er-?+E^9{$!1{>$Hk9saWRen(}}ZPaqH_R#*V3C@ZO&1WgMWoUu+{VJ0r>)7!4 zQZzXiXCldft4fDYW!;lZO2RudQ)mmKK{G+Ep0KAyfrXY`1E!!IE|9W}D;z|hy4WsT zvcgEvS>)?9SOcBu4Ed8VXPrKJ7RfWHI9wwEq7PbDck=HLJeU(?QfUq3%6jHacg0AC z!s(uk34Wpy1zAQRw>+xKZ`3(oz5RZb&cFMazIpXm%7giXs&u}iY4`kZ@7~%gJ_-el zzWv23zx`gle*082d@=g=*!zF+;nTl)xiSCZ)sMa6dG+CE_VzsGlE2Q!cdxd7`1q~= z{&P+bFHg`q%0I_}A%`{|H?A?ydiK|Me?<^Xlc~ z@%4Z9@%5MX;nnMp|Kh`|W%l;@v-kbGFa5fgKmCe_?|FNFt6%)VUzwW1USzngFA4*;DyuCNC-~Jch@c-*q+&TK@ zC$HBVUhI1}T>iIRO#iHoZGW2Hk7^&l1;c3PCD;L*9CS04yorgR$MQ3M|G~caxxRn< z`t9HT+N1T8pX-}9?|yFQM{o424=x+GkG4O)d;i&Ae)b=}eruooIp1BMeg4^-*Kh5M z*Kd#g{bzrfKL6~ix352b@!@CsmUZa9e*fVk50d%6d!yg{rwYi=0c!Rxm#eLcH|HE(i|Ng~W z{qptx_aA@p&tLGLzIt3Bcko!tz@>8P zdVrO2q4x<{QTw!gaRMsX!4A^rK5Cz0pau{)qfo4Z@d?QKLRoq<_D+XbLCPV@I1)GI zp;+^t4gPqZc0JnJj(I5f|4A+QWg!h!xJ~iFEYV3Ck&4To$`3mi^}17~UI(8q62thz)56L(L!7;eQzw|KUg8ml5&z zIr)D2V}INe@W1@EX7j)Lb2$V46SUd?iHqrfk|OQ*?T~>tF){>lY;?%(058>$;I&<< zUiILb@39QWm?!xSp;U}1ZmWUvHcfWSS8wq!vl!RS_@&fCd}rMZK4E=16;QE{(zdvv2Qms3DrrurmWfeV9ay`~i*ti#CX%QmgVYC*q$m3!mbzjcxB$B+GijI;gH4ipC1=f^y&6dj0AkF3@Ic%6#TlbQ0*4A? ze%VZm0PQ(II@|$piHOHE&yM%pe*7bhof^D!sh@xiWP*f^EkTJZ@jWw+dxUh(*1_IX z@&90jJk~Ag$d1)N0?A-8EsPiKC35M+9rnx!TqQnPagjtx3_UB8z;Tfx<}|~dd8Tc1 zB)4lsA(Sk6${?|n81GPJayx9oYs-J_;jcFBa7 z6U9e(<{^kmHd$z?XW!4G)-k2LG=J+MBR3IMsAJx;W~puzh+6fI+X6A}c!bCy#;ZK7 z!UJy2wV8mv??%=pxYLg3T<4Ur4 z7EWi}O=iw2#ID=acu%^+_sqD`YB;UWK;KQYf@19*$^2Kg1~`j4GV^$s1X_a@<*#R z%;Gl^{b(44TAg8+en2k8;#o@Z;2g_FzyZQ-7M;0g*plYnqsxANEbHPChVGuOl`z^S zGc;R!Ve;wj$q62XGRyv1HxQ8({~y?TX)) zw-N7wZ;vpuP5fZHi70(J+T(1lbcmM(KQ+vh#Mql>ORsR#t;fp9EAbIhOdtkgjTsNiItXlNKdI*dYh@a3_PV=Vu75TkUoZ}Mmj77=?UMFC|VG!5^g1UMjVoDgB$>V8>2x@G++?E8xtYNb+UoBJ8SvQ$C z{h+-_5FJ|%jdjR4q4 z)#xRZ%b6;JoHCVF-GqwS{ov0U-ShuonwLqYZ(6mKI#iy^l$h-u8tkhI%1}*Hm~F2u zU|T%qIpuvX=6m&2ykbV&U5C8?`u(&*W%sWh=W zVn_$G8TMDrnDhv&iU)$Z|5#P;qRt;U4k}#il?8Zkm0V+5Ek2js1}H6*>3(;BB>oM? z&8D5^@hUzwT&V;zHv)BL^~jxtM{q)snAZI_?NKi|FCL{^I|OjxMPr|PY-lX5`bpgu zh~!T`vqWxc21+b>$DQ=$CYP9sV#vd&Um-NfTqAhw$%rzt18|ZQQuYhag0D!`5ny3J z=-ZM_+*6*UrK=m1eE08-bT^P?Ra(wvTk>$JB(2-Y77hd&hmuaLvam~+u5ISsvLtOT z()?p5-_Woa!e6;3*U@(0kJCEIY$O0UqL$iihAC-=QTT?Y<#wNspnNEQ&qR%O^1_FP z*kVch*d88=pJZh%Swbe~r9$JIC+Co~&e`pQGDvvdUID-oDX18q z{j#;n#VlGei)Ua^>DE9xgUX$KIJYFN6d|#KtigIt)=+9K95ME?GM}7)v}$aSlQV4A zTAC6BZh`D_A!O%x98_ABJe(2is@F((DC?{!l@d)1SRk}6a6Qk zZ)+r8ueIZWzq6!8W+j*1yz7l6^x+wz&Pv@8XISiO-d#L5F#usep1<89=hz9?(JSn4 ztHR|{5D1!aw|(~cXE_cTmj@7HN(EG;D>Os36kWt%t>VlCVNl)RL~^5?NIPzm)+0wCo3nbsnTz7 zw3O8upgh2+Y$MxD>XA!1&%Q5z$~mr6@nMl!o_efY3z9Q`J+-v)?)wWoW;Fz!FOGYMxfr~+s^gu(&r8ynd%rK#TI{h z)LIYin(|zB7s#=Aq1*1}VcR(r-kO!Wvd0?b27YYRkc5irmhG zCm41o4s3&J+--!_Sq9?1*#qkG$X2P<^P(D@nT{RwAW}xNQF~0ktoGb8fEQo_5Hp0h zlrCzupVh8g&ok`Qayf3WFErexR3r-oP^&hgcg6D1o$emN?XOkw*B7EjcipM1(_g+f zH#o9s9AE+sFIPMTAKtxK#!mK|d;p~4iF2}%$)(+;Aps7;dNn*_FO%^rr-eL8_$6y( zCTx6_fR|m?@Q|b|SFOhwjyT;E+AI+4ax)0mew%yB^E~6`8iPbMxjQ++cVoyF5_;@` zc|z-0*dOzvlqR-oN*f_&1->zF^@C^DHD&b?N+paIEYv*tQQX!lXCGgp^NM}mIl^F} zBr6{PH9NVoYMuUA4D;G2Mj=VS*Ei33%On(}HS_G(+-{q9Jpu_YFHEQf8BmNC$f`u( z%VOh~iR?Zw?{dGfBPoQIok)95*0+b5kr-_R6x~T0jlld&RYRL?=pIQ;pUX0VG@nT3 z-SJKQcGCCQt)Hhina{O^LwQFhh(afap9XaySGBu6E+yN!jT7vF^jUND6rU4zT*Lwu z6DL1pyIGod2`JqS4A})^G7}jHH7B32>vI}gG5qd8wp>MwNp8*m*Hm_lFd5WaEPK$ptV3^DY525Q8PUOx5T8K z!1hf9QZ4KbKwseVgq_IvYdm^DapjtiWscs(S7Ml+T;*C(ZLm_RgPEs`p zy@<)`UhSmn(P+Sn4xNqO+#B5%y`ceV%CUswVON$!P!SQW9y*x7H^C8EeU58ne7Qp% z63sc~gq*-3HuABWv1BH=u&Qb6a~V9268JHQnE@d}uSQZ8NIB*CLI8|$c3x}ny@9fd zoXPeWCG}OJ-$wmULDvB?)QXfn>hcWHl4r_Gm};0)Isre96ZT26?y;@@ z)R%1Q61K{%!lJsv)7@W$O>YJ9&SeENF)UD0u}C=PCSRdxUNbhuXU}CdR;PLo&!r$d zPqEuW&9j|mIi3|)$cZj(hCTcThb-OB40msW4sU!CmrHB$&Qt^M6&~Rv`vH6RSh?-I zXJZE}z06Etm=*S{!oa6a1$L@;@^?IRu=HB{6CHB>0kq(pv@+%fOLiYnJUCQKX@$Pv z^;Ikrqo#02Jepdc*>CdFJE0MTnPsmWHsd1+{YJ_<;ePhZ_C8i9|FOj@NOZ!bh?OT2 z>;+0$Mk!mVoyzpUFuJSanbmNYC!H+6%+9V5&KvFu2+7(=jF2>Q>kZfdm&pK`eA(-X zsw!0Y5Tq+j%bvA)l0*^9D_(Xg4tHn8AkZIoiYYGLr+AV?0k%asRwhzMzdDOaJ+rKGCTsOXf33GhE}f-woRrZU++9M+t_D1VXvs%!-FD=U?4N#itKdR zGq2BT-s1viw=xY$<+3?pkHd%UIl-=~)#Fm!PYqr)c}>0wNC&V9qo>^{e9b z4UPQn8c9ST+i1xtbImoR`jfR!D)b_E9{tl%(MXJl!7a)fItyK0fro`C&PI$!bs7cCmXh z)D>xEL-Qa`AX5f!qW-q5?Q6&#F_scTy978*g2xH8jwAOxV(QC7d}}OaSdSt0=7-|* z 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 XU9a9gt=`7o-S7SdH99z{Hyt?uLvNlq diff --git a/crates/engine/tests/fixtures/tenacity_exquisite_blood_4p.json.gz b/crates/engine/tests/fixtures/tenacity_exquisite_blood_4p.json.gz index cde75b40a9bf3c305cd8e89e099232cf58ef12b0..b56d4aaf17c2263efd3af6f2fca60d89d7381ffa 100644 GIT binary patch delta 673 zcmV;S0$%;S)GPYbD}aOngaU*Egam{Iga(8Mgb0KQvY&f&2oOjHWwcy@u1-)A32HgQuYhO@ed-|i9(T7s)I6rrfv|Qn&Y}`w04cwa(tup3E9wO z$y2cfvX(E(^?pM{W0`H_U4j`BdO5uXB#V!s5?G%Z92nO!{jx5Yc=E;M%bx=k+3r7P zcf9fym=BK&77!>E{X|{_*PBS!d8`AohJ?ntA=XnI)9}SIuC#ppHwZ7g3zWfi^ z@`(7?nxbwpmZ-+OZD`ARm8P7IJ5;iU5<`70XDl9_Vl7v1eW>1fd3PG?6s!?Uw@95V z<>Isj^dI+eA?eynUWEu4RkjgfkBvyj%0x%vx+8S0;#?xDsy}cn^c>)#_|&!#1{3=`TS9) zLiumuzF`)yc7bmeAZ&HPsp+O-4r%sV$@!EBk@c}|sEj4N3)KRt{{(|or>B3+1n*&; H1E56!4-!bF delta 611 zcmV-p0-XK&)GNKzD}aOngaU*Egam{Iga(8Mgb0KQvljXt+K9|Ey}zbpn;u|(-34m1Z{!lpjDCCRdM1J zqyVEua6Ez(e^9dsPC$^^WpE096fd#(jm2+ee}<>vr`T|2OF17{DQm%f*bJ7#fdA)t zdP;Np7<{kna&SkImf4A@x#Jg@?r<{Nd(nkUB;Mf5|1I)uqi_gxn!jA(W1%=y*x6q#f5-t(RG;#OZpi58478YR4P3X= zN;N43*-dc8KF4QHqP$f7!tnT~Y*S^0BB|5>W&TXVAU+l0yfk{dt={tZt=<=8LpNKV zWCtK?`A4}s?ulqD)4jY(FhfEwr*%NG_!ugI`I$n(xR&XcZNb8m8DT&tH~8{DV9N#Z zuMI_QGM1>ud@!`-yjoLE#~o@}Ly4h2mn#;JPO+1-w@IpZUf&&Ko`N+(+bvQTOSyR4 z0{V~pypZ(mB?ln_MwMMe*mEP&GqW572)JT)MFH`j8<3uL<{&`8gR>2YTxI%zT=VCg xib#E(Bt)r-uR9`@eO1cF$K%%sIICzP7Le+5qJ55!VH5d!`3D*fdf&&NMF6>5FFODL diff --git a/crates/engine/tests/fixtures/witherbloom_sprout_lumaret_4p.json.gz b/crates/engine/tests/fixtures/witherbloom_sprout_lumaret_4p.json.gz index 7a0afdc83199275780c792e5ab8e92092cde4c6c..c4cc26b73332f71d0b3f9a695aa314744b053e1b 100644 GIT binary patch delta 82 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%0Dyr_|D6L7eH>r&JiE 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 yW8 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%0D|HCIISh%W5zRXi0Z3SmJv;r%c5mk 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⪙XyoWo9_m)pfmS{% z9nw4Av?Z|709*|Nx)rbhPNv*zQyK?9t?}UKOvWF2m=GDsEGp|usGS|DVjX3{{w%_&F0zB z!P~XZ0s_KxFpK%bnq>$(s723NX6vBtDe+K%e`d^Q@HEYyfRIWX?kF@OPt%43o&bAG zinQEX3;-}~GSV=p41Deb)axbv2}{s|z>XQ z4ky0C2zUjc?wnd1E3jB>iJsAFfI`FQs)$#hoQSk4;~Q3y5cUG{>m`pT2J z(wGrcW!&fzbPhR&Nuq#D7@`W{1hHfk#=3^l*3#mLX&9`eD_(LHnU(}H&~w)*VoV0< zUb4D{3{?Y&Yz&Bxfobjn6bgtwV!%R_JG#T_>7A=;GNZqDj5O?WXJTUXVs2UjPo{*% z52vPOT6H3Jox?xXNzZ$KR!SV1+WUzi?%C|M+I>UNC4 z1QPU&69DqU$-YJmts3Wyl)|w%-D;Rgg}gcUJ8yOca$BP_TSqbc0#O)loD~hAcqr3# zb-%9j3O~u2vF@TLrvf-j)IM19l6B@l7$-z~jY{q>UI9 zm_u<9=;xDMI9xU12WjYUgkfWO_srgH^^#9F9ou)I6c>@0%0bmXohRb1;)=Mo_iha6nyiR>1s#j192kj zhW~Jo(@sZIOr_t}^l4W0jODa)r;=F_7LKvNl1+|5d&O9l=&Y-8hR}KZdyotczNi+x z(LP6Tga?r}ThV4vn~_U@A;z(QNXpR-@56|y^j?)M012FZ6J0`Em~j*QiKDPF9JU)8 z;LwG^1s?}`bi3IalX1mpqh=>_I!}|C!?&TUbMN@Yi?>!UJLd3b-rCAn?3;u+M#*!~>sSlh z#+$8;H_B!z7>&hSQ{uxk925*<7|op-k~#o7XXj}Q3ss^6)?8jsCNr~3T*MZWAZtZx z(rAcj!@U!8{PDbSWPP*_9?gA=T|Hkj(tMaTBR@Ue>Wj=D4~|%0jaTPq?f0>*jor!V ze0XYM=o7+v$@_n~pRQ zWIG4Ng;XAuWM0RQE~hFfbEr85y|?Mf#LscaeVqk%X;kz|%>*_#(V z7LSiutoiupO=r?)7-&x6dygL-Fm>INcRiKfvXb$)$9Pq&#A`i~PMDcJKiA(0cka8gR#{l99UlC6|8!?Q+5P+foc-0qSCj>LwvaCnI>Yxr|Hr}Mlnvta z_@RWtvRh8LN#K)D>vesy`*K}q!@r%p(9oai$?jo27fdHi0w-cuqVtqKH2>R zQ|3@U!cFM>Sx4xIvpweg6?wL>2<^$)SKMG3Na>kBA5(I?P>}FqV#PO#etX3_h3~B) z?urfh;t_W1dm9$A;^o1~$yQ7H;j=$nu4w;z9M;nOI~R}mf8LStm!i@Ci2>yH{ng^% zzxMsu`XAYZiDi4d6;FL}567DN>m1)oj$LkT`mN~W3QhYZFECuG#NU2xy;w>7Y~gd4 z{TfUD%WYXp{mWnYUGDq}_p^_tjN$75BQ0-rbaI(+(3@14YHBIHLerB$zC|KCo{qxv zNBURiFZnEs^K+m0Ope0~<-BBB?tv^3+I-L#60McH3k(#8+7GcBy0@l%NfMC#faMRz z`15>(`9;Ihc)NglP(8&_y zy7=h;3k0(cfU+$~tb~p>0c)s5w;w0F2fW_t5A2rG`44>0)^VQ>1?3nXA{L9ZI+iS=HE?dYGBsm*$-jxWV*()H9IAy0xsM({Xj}>F`IT^!2F>50&6|twWy0ZQewP2n^r=m(cW0C1dx7;2 z@-VsculGAD@BdhOfWzqEhi9Glfaitg3j4=94Fsjg0XETt_V`j{(%B&Y{EHca_PO$= zZ78lV_Qf&>mT3Uz)r+!om05$&VWrm^gua=7dyF+XUM%bNb$#+GdHfcgyPxgIRAyaE zO-2D5rU4FGONqr;wQ;3e#?i(t z=A$+i=gVGqmqr+NOT5bx9)^j}}AA!Ai+yq3qz7PWY< zg4NaPV%wbl)yKr${qo!%AMU<6OMSA(L2-q%;Zy7stM=2IsZ{aLdq3m94<^b~;!7DL zw~w{uS|UiF_Q(ITcWyhM9M^S!l>u*(3$|Q`u2b$D%W-sNBQy{oaA4HYB1{hjl5*k% zGV&04!aPaVZ}$v2vM6#$isa~^3uZ-lhs@i+4KLV48+-VN=>xwse8Z>yC z_st0To`?+I^=%DN*=8s%Um;KtK1#dBLiXW=9QPgPux)Rb$F704!pz5dpiyDgYwdFT zc~JD=4I>QVb~K-ZTUT>}hsavYfaQR9%^kbi!vE-2>@c6DRcHpF&3DBW`*0=pXdhdr z1%-{^TzbT8T8hQQG3!0joviQC9p}&xzs5$0#HU8ftG|l(dpX6BW|A8e@1uHuB~Qa< zLN4AR@zQEo0fCil1{SgC;f2BfV-SQbxU2#0jbQIIRTHkJxYCwO?#UA&%L3ZMul&`AN}j zYufRV7Sn^ZEut(FiI+{=?W}1i+XSN{;r6woQD27j&umO?>3z}kn5W*oShsU1oBGj+ zmjtP6+$^YYO$?ay_DeB~tx&^#;t_`mTmviKfg8i>xs=kA=C65|RIQm_^d_}fFZ4$B zr=oAZTe&qPYgngHm>TD%6soy!@Ep@z!6_n_d&E4&n#QZ1b0tb7lLq3LE7Yr<(=XTa z?M7QG+awRi*G*eTpMaLM9JaLSY8taPONrsO*7T@9BJ7mL&4AoyQr52)M{5qZC~KRK zcWMKPmojfX>CptOh@%eXNtnK@MR9MeOL1rv)O1;ZrC%)KE3~s)8?AeDScuIRO+fv6 zEwr*AVTBZ_CN2Hl!VBg|99NnRS)zi#>g{!dS~B^H6L=9_xNXBS()xuOZZbuV5B*^~<3ZbrS*G()zDHW!?2~ z-Fz)>C)0$xT)X8A^4XnmJ9# zOv`R=bGN|iXDU|cM&{BS(~B^rE2jlJDVvQfXBxqK>?VDhQp%wmQkLmgGM9{!!Ij5;t9}qKg3XnUGu=g;fE4{pMBMybkaaI&oD4wVy z&F1bIqHP(Zv5zYac<0AsBZAG3P-NYyVbkEP#9HgD&ZEhHP$^=uw$Q0Vj@2z>R-1|c zrr}LMxTesa9=s6=OV*io!u>3nT)d!Z$5J8D!LFItP`zDRSDF^RO$%HZ+l!FPrQ4ui z%h3lWAgsu!=otM8*65z6=9}Kb6_=SRvqS?+2GOJ8wG?b3DZUPuHxiIq6Uua-ko{M|0X}QZXOPyOY&na^>>kq7*;&sfywfyP|%BJ=R zB~Sfcw(fepa7Grn=*x+LOs7l`o*uj+M7_~9rUguVMR(~@mfZ?Raq9JM>*(usX{BNO zK}&ykyZ}9iE|WUt`7ZZIzj)50Wqv$a=EekPrjEJa@k+&R`$y*Z=rWtU=Q|>23eh!~ zR8?{a8l2}5R&I453N6N@aclaM)54xb>sc|V^~YmKpFVi#=x*uxRAlXkU)Zj@GwyIq zTe*_yt=)5?UUs(GBn3T@;&#{yOx;A2H4wcjl9$6aRm0*WYch{C-MC9i)5J1rOzXHx zj{|OgnXWmM$6|H`jgi>0iJV2H>cPSp*c>CDUxSEL~%Q*^a z^rgHxne;u@rorRrNrM}amRL6$a+}5q921isGHS_(Xrjrw-MT!EW69qCO`C>Buxw>K zp`d$L6NmF;RwaUT(^naaf_U`pN{%O}MKf-gX?(o9qS&<~lYG*ef+EcJyTgys+~Z>k zZ#gTJZkHB8HDemDHN8T~H_gPyPS1|Ws{pa?xnUVb$1-g*?GC%djHA72k%%6qXfock zX((~)5gJZ0dg!1ilAVc+l&FLr9oP~{NKN6^G;Tg=vg9LZZr<`;Yes2K_-$LW42`CO z0t7DQHLb^J$w-SbJFG?Z{DHs)`o!lZw;{M8;A^^o;^&^uWDOYxs3~i{)r#}lD(7|@ zNORty^EV?y6ISIBZcwyhx@Nd0q9*LJc3(x!ofGlRA>x>{SnEWxrYN#)kh@uiA+^2r z;=~eg1p>cSL=}tEYlv-aaAQh zUGnk8n~F}&EBFQd02~r=dJ-?-L56-Xjmu1rS5v81zLR;`n$(MCX(F^mfp5ca%2>)x z;l8{X)h;V@HVx6Kgqs_^wAaI`%Zfsz|iy%HNdRO5O*cb zD~(<`rWu8Hcem_3bJX$;09~4gC%=Fh-#x)rg2&Uu^mPMhVG5WDBrCN=(#HZ@Zl#@q z)TddbHUg>mm)k(8X%IwTuWSlnK|R&3rtcQ>q`)dNEwu{U(g-H~nkeb%*;dxnt@9#a z9}VL+#WxYUYbt^Zrz-CnCZB?@%KS?q8ez_!l*IkUy({$KG)-EvrfaWxr&)sCf?hph zltZZxJtL$}(d;oL9k0|HgD^P;djfqTP@2e!`ltAX_N&2_m1-CwELxoz1w;id#R~+U zZeeht)u-!9u%s(Lp%H-JmS^`&kEmfx3f)cV*7nR+5n~xu$s$?3}PFmYd_pNy`!_rBeJ;2yd(|6eXH1#%p_7<4pZEqftc-T}COYz!%);XKKotTbxpP zGnCjfDypFNrn|U=m_^wzv9Nv6E#91vfjBT@>y8`_E4r$y-##f%@ufKUA*!T_bcjd= zyGAr}mAq41!3TpY%6|^4PJO9|14aeJg1&=7_{fTt!lLNh`K)gP-^cK#DVve35+Qbj+5zbMf zQeZBd*~?mJt+oq06>(|}%6i>CgAy`}7xke%L?yy8YWf|77-;`^5(z z{=>`t*|*rl4e#TP%cnZ?)lXiXVZ2M?0zZ5C7q9R0Q`-gp+3SOr zcgk$|?FRLaVDDIzpd3&c)E(X44&BCnyd;GwA;k>hzp<|u@jrJFeFjJgVunfJc2IB;MO`hUH{)=6R7fx0HiZ?{ zgwuo@CVL<^&Ejl32nn(e9od8AV=0O*fs1djpn?^9Hqdg>iYa(~jG~CEqdd-@6if#3 z?~xtSIQK2!psZ)QDI&y9v3V-@Kol1wRu|$BErp{%98D70;{abUTqi`w0bz4fiAL!_gk5nxwPYVVLSPs(i&ya$ z8jhU;bF0iKo_QzR2-EE^KM>QN3EGL%RMV{red_)AQ0uZS=HrpFZZM95C9vjN+4$aQ ziU>=jU|7&w{uRJdvVsyfG&9k!j!OtQci~Grqf}P)oI4iVBgkNA@v>_oQzT}eqZx1t zOAF2AB8&*1JQNty@Nn2S$SVF1- zf6Kvj5a)Z?f_^`nv{l*&Tq15?#Q-j(R0Xnn88*DPSfQUH-Y(%(4(J-3 zMC90oIR&MP32JIin9#l6HM^D`a2)VM3VP{%2^8Bdc}ihyaYvC23=1;WTTyVoiGs&| zV=ZeUsUzHoWkJ{3{tn?WKaQeTNAouZI||b440;jBl?}7DWm_GpmD1{CWc|>ryHgYJ z5}ydYk7w_=!^mq&L*E$UFe!&TY(-Afcn7$%@d~NPMXyn~TKLsI7CBrPLY%gZi)t+J ztNMu^Y}6g+$0tp5p|NcU)D96}1BCFS7Ra6u7c?y#J$&x#*%@3%1XVO% zxKmd<`oz}bDklh3_8hhuc~!6Jv2_hi3$w_pS5<7kqJDR!q^0$2HbwE|%=y}V5RE%{ z{Z1%c-OjP^X@+~6Dxq#9Fp8P8asK3VmksBQQlp;2_N4AIJ!S#(29dX|EF%UEMRf|U zQ^9|j25p}_s^~$siRA1(=@CLy7)tTc1fegdRy-{1+-{1=C}W6Y&1&6k0Rv&ZtBh%`?RsAz0|+qkivk4KrRV{=a4xBt8hmYm#(oGWQ(DUX$r#@qUp`F-f@)~W zTZ%nq-5qNZq3iH--5ZYU-HDrxzHg*<(S|m6iB?Kfgx?>&!g2t@))jkSdza&31bg zRJ+&k?y%U1XxJRu9zmW;fK3Z9a##osVW)0HJRyCH&Gxm|bYyNE%%_>!vCqiL(zS#G zTG=+qx7J@OlXC(yP}e1U(7YNchp?3vAM=i#S{y@wW*28#hWKaZqqU%fp_qS)ZEk9+ zB~1io8C*AF$kH)`)bdiA%%g?=_-H5t3W6*TT@L}BXXPd>jhXu3$kOgjtYskmb1&*8 zGRMgk*F9mzD&V0>`xt@inYL1bKn>Zs;~B`|oj}yxRyyw4BiOfakno}=9hDNDea*}v zwC=tO2AuVncPN=ct5dJ-)ws1g3x{+qYeAz{jMYb{*xv9)0euX1mmS;OM;T6_?|wF{ zPt=-8{h4KM7V6`W(FY4H}cXmizF(P?D}R{1J^Mb6vsgB~ zmPSsfyZBz-evjbmJPRKJ_u_Ajj{iQ%4E~As|B3ehc(h+jQ8AeGgSWw8r;km-I5@Kr z)afRM_BOPiLL;$cC2zcUPX#?GFo`~hInErPS_$!`P;Y&rc#9qAv&E_`k|qkXy{%W& zT3ld)l>@10bDP_Vzpj?)`J=$(#tfyw{ zZVAEJOcF|B)dMbSHBHz&A(Q7GE3(^8|HLk`ZtnET>CVIF`#^2?0T!GYbkWE8 z9x`0>?8##BAjfm?H`(^C!V4OKe4E#^-|YtKUlU}fD2X?ls7`eL4wKE>WKwz9EZyBJ z-z~NzHbq_v<4!SKcW|0FtLmVHq8MK+S}z)HL{IO^0mL=%)0FQrDUn~a`SNC|95B<9+&<4^%Iy=>uK1^?xP zlBWULc$?>x$eyw~g?nNh0p_FJ-Loir3RZ=!AxsnL7rJiVTsLz+jcH)p+a3knDTxaCBY76h+KCSmx%4*rI3UvKsJH>W-m9K z?rqE>Mp1>3?8HOgzG7wnz&&MvO5W^H^fHTciiYc~S06hNCyhM^m_`$4q=F2YdTc!H&7$kBPm8 zR?LMC`(S@7<=*L7SypnO61_xUQM87`*wr|L&R*m%nH5Mv0b4Un1m0Wip%#x;r``f3 zc^nFx$5`TcrEq}BS-IHS)~lxiRI@Pl-ti;mV})8H5j6pR*qW%WmZ%nM*7s}n30Rt< zHK=P0VhH7v?&c6JZoxQlgzC?T24qE`1E-G^km}w9z?i+A(<;Y#;&CRUo!E*9ZeJYB zuqUXiDP9OAr>U6aT(y&Mq3W`lZe~VXS^c#}bN5x#H_mB5HXZyRHL~c7v!+c6LK7zT zDq!qux8RV(xrCd9=kzuxq*6c)7>uvvs%wf?R%#~(1EZ;z+w2ZZOx%+mrkpOEE$&fl zH%d`6Hc@+wS~!CrX0@kp7PYToi$0saRn|-l)NzEt;VQQ4f^C{6XL}LUsgba&rIIxk z=y7kW0QJmX0og2GlCy@*gs*egS9Bn|v%OT!q1w5@k_CPf=aE(+g%u%%2K_GPQ^+2q z2*92$#Jt3=>=Y|26qleSdNKvJ3);W5vWhUKZf9k0_AcVt8j7~X=Lrr$XuZ3e;Lyap zV%f(w)XFV*I&aNG&(7?9DBLSq7hev9eO!7Lii0DIrbMmXio9mb`yl>uq60mzE!EiVG_3|r4Iovl-La`M*Nd#JUi%F?qmoCwE#^h{Q7 zrFgtcRW?YC?Gmafln|Ah?tHM7InJ_7r6T+$iw@HtC7#Yj>FeNNUeVJ6m-zCyMS7LX zY(O-dG-=bNH6kLK=Pb4WYo<1h$ruaSa-#n}l8AZ_BP>OW`zhfWCDuy)GCQ-#pH{^- zQRp)HLk~|uPzsYSmMcfg3&J6FAARY4^ima|weGC5eTaJAsIYTj?slf&O~a_5Rc^%5 zpSqzu#i?(NR-_JBIpV@S@}j!jY35=i%Ey#UJf@PV@TGdaY&Z$k2q-;qOY7gi^!gu zLf$joCD`Um5|@Ec_k37c3pW9rkA~)yTN$TY``B^)Bw9etBbKzJ9M1-avauedKaZdh z30nijzB(tW|NVzW6=sfR>Dq?GvR-6dUI zGf~0982DJ@l!#xd#}ai?shvHdJSz*(l$5OLVjKmbwkI_d2F!5a8iy?~A*{k?s_h?n z-6VZkN+Q&lC}h^kFdl)TBEYk)W>b^0uG%Tk;MgYIaB=z!rlLiT3i$o08_GR+EHm~B zoCL5li&pWbXilIen_a6izt_sA7KrjtAzg~iaak2U%Ghw3`70iV3WOUS|b5;vB7419Ki3^`$C6-Np#?gFJ@UNZB zY1>S$_+u4d$=Qb5)Z5kK$y%*VQR|LYJR(jY?0&}Ov_|Pb#vT|4V8z-@5v;eZLmU~* z)1f!BdyaS#YXoypwsuhy)7~j%)){AwS~!Z+LcMI0MaeYBlfs#HHn}wEg%R*_#f2dx zHkWJTfU+ngS8OZz*j*G0C>e{{j#ig&$W$m^Ti|WiUi!1yH`Yxdv_eaMv@F{=>|C?w zN~gBf;jVtKc5dCc;=rrg>ZL5BRD{QbM%a2sl&C37LQt9WTzc&qFkb<}+s<-!Cg`BS z#V%N>8^<@N<<;oEm?!uk*fgiNEilC^?^sIa>Z*96w+?>SD=e<8xt{u$sT@X0+~J_@ z<~V5h6RxeC-8V-JR%%BDt7Bs~(l2q}C~*6PiLKjnx1rZ%l|Dx^JSjG^WpdlEJU7MbN@&6}q}@ARmCgyQ?`WML%Z8TL8#`=`%LdpjYq*D~YJGknrtu8;re3+>4L(b1rt*CY0pJ>0nqe=9zETIKHA zG4@IHO2i_9iw(F{f}Be4qCyyFv^T-5S7Gd<*i*M~zH%e`DPD<^qsqA{@n{^a=1T2O zOW1$DDsfcUZE+ftU$!Mg?Z(NtBnUbyh_-ZWGa`uI1#uw{ag9`Zixns+=i++01stq9 zDG6>5m##&<^^Gl+eiE*f;uJW^qdzA0u8$)UrY9vb3(_cIG%*2c&_~)-%sdblpH?;_ z=!V0PLBDpceK_7-Cv}s@5`+zr3n`_pr^tWY${JflJ@|e&^fs87DL1Cln*k}Dz=*ie zUQ`6|ltY{0m@MoHAQt7NN`-xh&1Ovy)IOsA-3pYpo}O(VAyVop$EM~}XmW^_f++Fm z{GDZj4-}O?+3ah7Qz4Y^EUfjWbjF)DD1Y)Pyi1qx#k1cd1tQ`U+47uac(`Xa||F6CT&O5y~Z!4Qvs={~`2hHpndHS48 z?If`qJ69;yRWNo;mGX|z3HH>{SZ{t|zg|q68m*_eS4=y5>+NbMQ`?%-6mPy) z8Q)qD>w}Mf`O%9HUj9X3jWqC=AKB|QJ>(C5u1Wp!-Aw~uA_!-GA-_lQ|Ih6M ze^OukQwsRTDd25p|L;TWUn`)6aB=$fxV;S;)pkwOO)DXN%h>O-D94SdZ=im4$1O@z z?`zLJ*gQYWN=e-gE1^-~H}%rpu`?Vf_v%q8p^SV#JGjxuSn@S#Z@lj$c0nzuQpctP zSzi{ub?pDyOTDEh&c66uUj92KfOk;I{cqk%wex-33i?ef(_eo4+0XSGzwvR($bK6D z>f{S{m%b+|@Q16b`$Ifg_@18ZjS4rLGw=QC$A8xNjy&t{o6!BcrMmxag|I)E9pSIW z1U@xUHHWy$u`Ysn^?M)&;+yxq%|}|~Z7f)d3l;Jfkw+0aKvCwz#?oU4cm*1GtFaC|E#Sbc4Y`65@_mydR2QNR&UeU4 zKa@kuyOuM)t9#csnSg&JF}B^u^;E*O8`U!-A(6BYuNY(ZvBIMx@mBrhv?W*iZKzIB zz(jGyI*SwMUz{hI7OA6;&Oe0;0hsqM}!p_q=$+^^a1 z%uyFTsfng7NSp9$q-P|L1}J8I*2-rly#TO|g!b@kRXI#vTY5{gbkzfLI;hfUql`kpvN^2#DsG*!dO%~{=t z>14zB)SRvo&Z@vC=8Giy8GXbUGSUcEuO;Po3}9tk~iW4Efs)lOI_|AiaH#JcE^rcwN?ILma&Tet8Iqud#hDx^j4L1hWuU$M*;(_Z_j z)H>ehN1rA&>VZSLs?*RMeW}k&cV^X4CzqkY)(9-*1{2jVH+^ok#<`QbQ?Fm81pP`? zPcfJez#elr`hio|WxZ$pHzjWsNb^}Y27 zs3cou%}Lbh&`QN!>>Qgi?057t`04)Vk3ZY%#gjI^bqe!8N(yt|PYV0O1mLfJ^^?DQ z`P;Ty-aP;N4_M;%U;O$%zBB!`ugAmI_M30;dvQ+qt9QXR;r+K8vk&%Xdf*Q}BiDWj zFMZ>*?$i14FWxkr`9SyjktOI)?YF=9iOq!fzGP_s(!TxGYWkt}=RbdhUwxam`djAy zzrLRD|M~~TOustQ%~Acmy@I|8%qU%5omveK)0i{nW~t(>Omv25uC7!}j|sK#j#5rI zh&u;=KYICokMt;{2Ko>O{d>n*!HOWC2<}pm0dLoIKJAiXo5y7J z%ksM4sDucCoh4ok=g#|{N1QdDQcUwGpE9A|36<45iZ#{dXm@Jk?zN!A&Bv5w>k{Rh zqg(ajLTa~OCH9fe-OsTG>Kfb*`r~zSEKk#c07Jjr_F}+mo`(+akh?OnSTo9Fri(mo z{?n;+DPd{k->S&*?TFid`bh8P!^dR#r%xvM^xNmY`<-_X{q^;WwXT-6?dX58^Z(kh z-Tp-c?1ld`kMFbSm9p}S|Jt>7M7%yPc=_z(f7~y>_ez#m)hKH{;rs1L)ZcP@UpQR7 z@d)pIEv)cw2P^Djzkz7pe+6P*f7^fmlC=A8M?#VG7oS7;w+izg|Bsiy_5^QkplURX zP5ixxPoMwzMWB7x$RvsS$2Bkg5<2HnF(a zd& zQ9*7d%1Q}MlwFFQeceM001@Cjm+&+`H8ZfuVXfu;Ty}41=6j7oS3Ld7X`xI&FN=_>@cOU)?v=R+PvLWS}`$>lC2#a zx12G;xUx6h6kM-x3ro|T;N5*^6M?9)jb_5IroFTD>f6*NCkFkv+cikEBJw!ygE=o>! zP8E}m`;}~i8+YK*)^mJ^3I{#YnmM=l-f78XW?O9T43sr)L`OPackaY%&Z75~wvQ%o zs^PiOgt&TV+&U6X$kJqcQ{s~;KUxu|(;|OOo5C(Blb{0Vw|BwUsf!hJtntTt?=EL5 zm)P~ykx-LqgMI`~@i+{0JDZ6e=7Jix*irFCuh_?RT3NAJJqr#BA$S_Q(R4w-Ybn9y zTWbUj>up-2!&O%~@vM%IwZ3&VG+kgQ1BWOT0Npp8GR%hl414ZzvN602FO+zFOhk7DcSJA5~rr0q#2Sz5O zhiF<~e5~X2qX+PMcPW}Qf?`5MqC>;f=;ZK^`tj;|(t+!vDI(6X^=DKHFle~91_XH@ zzI3@5SPtQp>}SV$fi8T`GkLoMU1I0;A{tsU>?x?PVCR&gya|;oOUOOrw$6MpO326%k zxq^IU1A~OE;k{#My`)FefoK)O{=YJA3&4%`ZRuWS@Werlrl_dDr_#C~4}i{3l+#0rG$H;%A>J?Z5nYpS>9S z#TS)8>)j}G`fC{a7u4=+so$Fx8(&ZTez#2WOY5ng{parp(7xkq`~xc%djD%c9l3}N zMS&_hvyI^?u3q5;(X!RXqr37ppswSwo3UPFC(;~G(b3v9hIs}uh-MNzA{(2S!P)7e zg;0zfBZ!WWZ1tOt?sr7p0v1wtOYLfT?+cLN&;UL*2Ypa-ISWY}OwLc;SDivc{>}=l zQ~Azr-|tB7saLoD^XN>k^oges=tH_ zZA-6&rF&O$5r(rZ?fbB4t>im;F?(78Ck&fh2_c*^PBAaxgg$bOg8YFm#doyhD7DVO z8Ez`=nZV)RPNRb^0p(w4%GJHjwPP!1__YKK9;y79F>jdD?DUGcF^>!1(mwQ`9nS+_ zF|Q6+T&T63EL7bELVO+=iBvQPOq?tabnY%cq8Tn?tDs@TX;JWBNYX?r^(`LnziW3) zm^{w3g_p8xkK!yXG&{`}hbc#R-nDJIP5yDm)t%SseM4p3U|8O(VKLx5)(l`~KQ&87 zO0xqCzrA`|rn!}M50KJIaiLv#$HutUBb;}*kJ;*5g$_gMAO)}F%prZ~;n zc*RZ+>H2uPxS11=I2l-`cOwyaes|3wL7fTesIe}A+xFCpiSUS(X#t{xh*YUySi17b zr|3ty6cf$fD`*BX8L`v5GvlUpGsCU9E(F}nI`?QPRy2&xjbzuvghIo0i8CmQpv#!* zcf~OOQ3;mgi_d<(U;On)|DU}p+pX)!uD?R?r8|JisCmenr*?!++J>#bFK!q$T8t@@ z;g#(O295rRd_g{~za(qbxg152mlP?Hw)|j-c~ zDR_ymwqP_dhQDA8tCus%f|9!O=zg3Ro9aPGF`aBG7`1fV^ zZ=aGkZB`435qz^8p$rMnL*un|{iddl>r;k@{pWu2{@$+LV<~N2SGFFnv+dKzzOp{^ z;!fw%InHQ)zdkrm)=ytv<6+)gVIRCWlO$dLWt}-)5^uN2dv5Sfmveagcht6W^kFc6 z=yO%y+qtUm=Un|_aZr~6y6sD&3}@~_K>ySJPphd2&TsU$DIs`MNjh#vS8~4k^Zn1Q z{dMu7wokmN>FgZ4Xvc^8`Pn`m>RdO+zg%YG+^;h08T-lV;-%o(Sd zrGI`AT<{m?U`{t6s~2~6Ki_L#j%V;4&zyR^`%MnH*RS+pTi@@tHutuz&F!l=e%*%O z!O?90$NtYZ-S=13#I8sAb~Uk&%V;kr+}VQfmS654PXFn;^?iQHObGq?vro?9OuCjW+`p2vd9$| zrgR&lkXB6*Jdc~TVSiEmLXujDe_lM#Ws54Ic0uE->U?|RtcSzs``B2Dk!TG7b%Z)1y0`4%yX4XFf*JIs%jq(3h#Xv|DWgjB$Pgh&g|^X$PNJuV=(8LG#GC>7sxq02`a5l zVmiOzM(6nxpZ6E*WY24nB z*Bv=uZwlj_S)j`-of?SM>);X_;s8Dp&PqCypKqiocbSj(KK-`4T{K5`l9juPKzo>` z3Tyg(rw}FE`4Y7PwDbl?W{6FX%?@%+{Z>gb{HeuDA)2D5JcstJ2V2e5JgPcYHswR)I7TJcj8qz4%(-z9p_p3d6vNfB;zIyBp-r+G zgUxbXWXd(!L1t*l<^dSoEL|&2Z_1vNVM=w3LRw0-8D{~($SJ*b3dgrXFsGdiZpPy^&MD5S=&Lh7xuM^O_cRfppm$fwjr{lRxz%Mh|qe8?3l zbj!f9&Kw$n)a>o|O$`gG8HSs$fNd=N!dfXHmVA-pHWkj zO~(@LY(8wt*v29h3OBAb|2(m$jy4L9jXRqwW zUmf(igLQlz{dWGDfPx93)uWQ5o}g%E%-5;;B{xIUf6^NM3C+vb_#Z6#x=;L}2vC2y z*Qf6EW)@++B@d2)!8wok$-TDMUowY}Qg8aL0)zL_xBu*1*Zv_lX{jP!j7~-jmNH7k2&FM1>iJN zl~yU@J<60cQm|iM2|ai#ZHtJmIiV|t;(UO;odUqh)WSY`-woBM5=Dr*5u*jzI^Asv zeqoODwUsP#Cz%dAAEF_ZfJr0)kfvxgl~$#0iW;V#U4#qf zCCt?4YfXy6RuE}3b#?=6;}m*S9#%P#roc^^QU%NHaY@sa4legF+dBZ%RUQ~yoqFEB zvyT!#;%ZVgO~v!cYU&G>4h^1^fmw&g&Cxm0rD?WWk1_h&vzm^*ox`oq01tQHfu&`o z6TWfB1#zb~;nSnV%s$!rD!)122S0VD4sL518W11lTP|e_zTod( zUI({zYh;~EE9T) z*7K_kS!CDo+1tE{%lF8mc`FZu?EZ@S%6kcRU8yj1G4^%(XvKsy&uw-?tr{}g+3oE5;5hkSG=r_+x9Q5Y3f;Ul-w}W-~ZdBD3!BjtxB83Lj42UI*-NOuGJQwe>A<{lQHIAs@IZFzK~ttH6oa z?`$M^Pn7Q)aYDQmZ~7fGxc{DNT{m0{e-QTdFh=fi0O(CE`2->h-rs7-gO)P-6?^`?uL1xKrvjlWNT9IN-qSYEhi776G3%aXZ*pV3klF10r zaSD$vq&8Z*j#1~?`iL{RBxeAc)r|N?k(Lq@iXjn)LxFxfHf*k^xsKkz{5I zUmC#d4xpDkW;l^Yv+QRN%sb0M9-$tE^3}E0l9IE9&&3Sn?O_*i;*(mU2_SYQ%*dwL zB3;ULh5-hQ$Kc0cCM?;FvTNi%=(u-E!AV}thtf(0?#FbKcS7T8otlw@!R+j_o*X5i z^_V+3-h0jqiAEVPOY90wSQ9|xlR!Sf!~`q{H>pfiU{E0|%At5~RLXYp%qJsN^hJ{F zf=zb~6Egc>rBeggK1f++r=QnB@kvQ)XwzVnB?O@zJ8k92#ZK{TrD68k5KWPWz#F`U z8k>SDaO~G0TP3R^y`9flvR~xMQ3cd?pj3Zq!tRovAK=yHkJchlK`h>+{_kh%dk1z;{R0 zSI=TvercbAPa3**XO^bIz zYj-}myz0BX9#_}S9K)C8zxYaT2?noQ!@u2R-9BvZ<=#rf?}Rq_51$aa;;g;rB+=EC z;-&%ndd&(4vKV-om)u2&uIE-&h1K88S2fv@-lK|<1`7-${DIV(s1jH`!yUD4F8|mJr6Bz9V5$S+u6jiu#plV9+Z73i)vuQTl0?1_RMDJu&A%jaY0I5!nq-!yu1j1NgD&uN* zLN$t#bRJv9E7m_-(k&|M(xf!%Iy3;QVt~~Fpa6N;xiV_47JxXbFs4j(2XJ$|2K8Qo zC+QyUEIV+NG&z=e9;qa2c2eWi(}ZJ{te2f>;|Ba0B&A;XF|sNu0MDVQ_7)l@1H%yp zNEfi&`7tZGw5(36R>|)~zC{^CR6wfO+gZyt0Q4pkzOuSejcjBR+o@~?u&@;-)>4P| zrA_TPt?-3Zap)FuJTd2vgH($~DegF$2K1irKLPprNn6hpdIoflK?ymcQ%;+(l#iKO zvR4tnQxO!8FmN?%L?`oO>H&aWPD&$U-|hvbkq2}IRtJ6+lgqy}qs{CevLuGIeWH0H zaS}_78QhJ)>)i|)XE32;yjfvPUT8UBbQxDuDUtOuafKLx zNmo?xE85Wi#FET#A*j~wx#+NP@wI`qIVe(OSw*sWFkw@X13)QQ>(&qdwA%XSfEDn! z=teLPup8kdn-1r4ix0%2fA$Z|^O)UNvq7ewdH(fZ)+hBx-|d~|*3Pvx08=p%oM#;P zAyp?n-8*@mt69bH^w{dWr%Hxf&;6rGv~QM{Q5&aaHp@w$fn%q8`{wWIbbbH!+M0f( z-qxkglq^717A9~+a?f=Mt3v|9)ZB0-HaJsdLuU#`-P01mO0zUjMp5*XZqx7;;I7!o znkZwBg~YmWcS!s=It-SC$KkUb&N^Ra{8;7|0Pp}66D*O%S48rY+cDb~N6LQE)4^`q z&a1V`FthWlOsu?amN5 z!O9qukQq;+qf&X{hivcziI%mDFuZV3;OM~t^;T(<$-fr}JdIJtL_C5ksxKZ~gvG*x zTjR*4ZLFV+j?O7uUzAp6PGC|x!?|giWX~ZfHLnIlUg1;{F;i9uURm}QvrV|GWT<6f zbhM_z>ry1$#Dr8e(Y=Dx)W~k>lC_g*9Iq;|;b6>Ke4nC--WK8DL;*b4qb`ae!5~l#ex~%@^JCE$Tfg3n$@Qg4TbrDhvGk*a9|3%AG? zw9(m5?n-NPfNSO~t6o#;aHb^um+XTiYqy@BZ&1a@Y}xEV_eU}hG5|4(Ord)dvYhUA zu)HmPZwymangr40>h3k*PYKgdraEzwG3p$taYgwJRw+a)g@kw86jpkkfexURk-P8M z%Ck%sTd|Pn+J)kz!Bma80a?YWlD5KE8@Nv$2{SEV!-!aW+2KDSY7*K>MfNlB3!(vv3DVqfw-0WnzbWYo>3$!wpfwSjdYJe%{Oo}bDm7`dHAZB1CqyLs_MXfXRJmxC%ptjn0dvDS6?jI0#XD5!b>SL zK$L9-I`d2<8f<6BDrDQ7r~xku=Tnf=$IrReL9$Yek%?B4#~LnzfMpO{NO_T_)DE6E zB>)ocY*|^HTqW-)>HC$bwuMr}BnlMOPO6G-<$T{zV2ac>g#Kn)cSg7Pw&lC=r z@QwuGz%@1F5y*|ok72E1ssTMCW`)|AB4_NI1~`%3QIb2^}P>#J8AJL#_l*B&4j`MR~2uHrxc@xR~g{qrCHw{`wu*CYz&42{CYI<}?v z7en|Z@BY{iKUyyH+0Kd&yYJy$J?v0nS{2!`9homMF7A9UxgHYn4KcOYjxGr6J9E8;apl z4D7WA2mPhnV@Ze5-G`Oo{iKa&9b+nwD< z)+l_Txc%jE-|)X)L7`pp3NFL!F1{s=_PY({y&Vzo^(Ob^I{%he-yFZrQ~R_13Fm7m zJ-IbC@U2>SZXDcttvcod{qP6+;fGWoe&M+K?cR^6-&1@x2WPFLewSg?p%e$m4vepT zC*be3*|=dnxui6DG@?mTdl4qD#!3+GQ!gPC`?Z==EPXmm>=s}Q{An^#t2t0xT&*3_XIy-v}R{}wDLBa zoProC%qnYk^<>=HmZ~Y?Hsn--jJ7-D14VJ*H)Kf>x#5KLt>D_ej+ri0Elx2?P8Vz4 zOJ*e63a4z!HK^dH5S^Bx^w6q^ntJXnG?7Y*!WnoViILJp=7%yTRAw)#%tU+_DQ7L3 zY|W?K!&q|S&Y2P!ymO4GGM60xpS>$t66-jQzcQhVePAoPdat8x$-G!02gHkyy~+pz z7#NFXhJyd@%z8r@vbYQuil8_=5i@Vz(p}wMSxe@?eOE3ysOZ#jg_w&>*yE z+=eS5hEP_iBQT&7Mx1`YFN#Wf%PQXCC)*ueMG{-V$AINbRbd+a>e@e* z0{3Zb=IilV9sV8$BnVs2nen!OwI8sY;_^__*JbS3<5m5sp=J!LiQgpOL-T3T$!3g* zq;tHs_;w1cBsMFDNM&#MeTEDF2U=!I5UwUZ?rfJ*>1*3c5e!EgCrv7ZfTIk~B z=w2Zf9G51BJfd!ym5GeZ1;`j^ACwxZeQfGA4dV?;BOQrYzoZu`Il2y)A9j_onlTf{ z9QR6gf}9#~6j_004XlZQ_fE~jl<^!Jkczo&3<@_m^UR}QZ|h^YdPr}OdZ?ylg`GqJ z3Di|lZVu#d-IZ+z1$bgNua>;2nrBMb8Y{0z0+Z?tHhaP5Fq7zIy_MX!En*8Ao0*S> zU8aWP3PZIE2GV;n>Z3NXII%r4+Mfc|rxKSlHp<4al9R6*jI*g1)hOVYSnSeUq1F?C zObbim#S$?~3~F0YrASp|u43V#8JK7Wr2sB3+Y#fP^2MJEv&;^bcHBx43w&f*woX~j z80*BRnZ~LzGmv3#d6!%wqw!`)*k$V6oP|!wR8RVcK3U-5J#ILFv@HCM%|Y0@GPN;d zv`H15JB6T{>h{?uf?jL{C*waC$nS(5vN_#2LxfsQScKSoErK62=8Ze1iyk{WfcqbWA7y+SAx;!Fk`C5$Te`92xVg1;ualr zu?K3o6AkKOxQAigaxhp_a*b5M!;CwflQO}+#)z3&7MjPo)>!XC^@KRTip9A=aW8BRm~_}=VE2}#G<=lS6IFlh;{^*g;GAmGZ8_{6*)xTi zOtz`Eggu1W^K~$t6p$T(58WAujNrxhV&j!|lT1FC6pWttp?3R(T^sgG{BjxnH&xW| z(m2xt&Pz!YolSPx-r;n<+g{vM*|63XN7y(SZX(O z4vn0I;*ni)crC0xywCWs{L>fk1^AJ#a2q--SlpX>~4*{iz zfYPTFPy)b@I}x~bD^(|70LxeaE#PbJ4QSQxTkzLs+6*XcxM_*roEG>78ID`d3{lK< zwMBGamCC}vfk~T1iUg>Oen}RVqVclR7(oF@RF>$aLwq3{;3em_lN>k-jO_rbv`|@? zl^EM$)~M1$-xb&t;2plUbx#0Mvu%+FI^ig-f{(l!8Sv{u3fxA5+p{)a zYs0&4V*@w%85*%qgi{A(M&*;n5}nQ_dHN@D0*al!)oRFctVihC2w525`%!tfnY#(U zYsDev$Ym=0W;`nH!1xKU0ZZ;E)qK`EEi|hTf_pMI(1WWDups$G?+W0h92O%kBFC#* zPJI}Fy)y3SjC)6X4!Nh%Im)$ZP*V?V9PJ9UTK(}9F^`eeUj1E(Pn`XSRwJhS+aOd}M zJ~7O)NzbhCIkP|b;015mTgygTz-2JTv&kj_-yZhHV$={$D=D^XPO%IkfIo4-Htbv6 zh%oYi+sK}PEahU8fP=iKEIt^X>b+cXPFQ8B@cmCbZ*J0ys@crEcI8ea*c`SaS7UO3B2tXVRX%OI5uCd^0 z;dlYsn_`qQ`(81~1U1}rFrOF@7$O-xx&;X_P-C%a<#bl^%?dmV*y$qn&(votJJ@BT ztr`MD4xK#T4NGPiucJI2iOKX*afp^m&GbUSkPGbrC8-uJ&#uFi+xuckT@@E z0OVv}^_i0u@#H1}sA~XeXz4ke3~ffTJeS~yNr&3-dcQaS3M>6lPv6b zp4cxOgLFK0EAYNAz|mMUmS{K~%MrV+!~V(0$YspWV<= zypdnu{Numf-hO$5Kc-{+>h`(0%zWXu9qV7;knrni|H@oxd)9T?CE7J^U%k40`nT4K z`4M}+KKs=lfi~|T_7|6X{`+S@htKRW_l_gHLy75IP?MAR&0q4)R2qBpHCH&{uc7Pr z2SVnHuRdm5*3SXnetj2r`9xay{&q|HLEGR#+u&2zHu%;s1zaA$V?eyDq>9-d9@sp= z6@WIM0M4!k@_UgyoR}xG+9sn%r>T`X7^aA&o|?}zl7|9Nl;LylVXf$7f+2L()MnQc z>NG!7;2|+x1kA;>Q~^N3%M>==0BIIDXU+N&>t^E+o2=R$k$)S^>1gVU)D6KBaME&^ zvf=Fyx_kqErYfE0AwZJ{(4t%2%kX$C2?(NCri%pzRL&_on}A=o?y1n*0PZWUE|$j> zR)h58fvuR&J8KWa_|ezBJJ981js=(k?-qd_gaMfW1QAlS%Sa7~%eE(NAR(>w6l$y( zPPnq(5=qgT8S(R3lntcE+IzB_VYB35cd-Vrn5idN)Oj*wB({hSHZoPibDFYvk&QV$^nn5I$W>U~20q?Fl7?j^C{5w3W3*OLOI&(K zM1%Ry5y*D}lpAG4-^5meF9mLgt4z|v4a^l)EGwAfF*naOOP5RFSBGlyTYc` zA_n-QoblqgJJXEI`%!5 zW3Y~}X>AUhM-P1s>X7iVsyoz%y#{?69^_juDZO-kW6Mu0{q%mBM;x*WD6|p4a<46k|$w7R^a$zJh5y0!+@KMTsLW{?e&QbuGk}H zfN5~*PxLv5p4}RZh+==i=0F2YkLRaYNt`EHi6`{C$EkNRWIc?(Cav z&*N8j?(?|9VR%{`brX8M`%~{zu&IP6y+o zC9^-ae&;)8f4>(8e@M>shqCYQ+OTPc_}SY^6E@HH5t_Jvrv5$N;u|yj$zS9$@sIi% zA5^>WUS{)9SMaeLUq6R!-d`f<7gxgYW-NHb{KxI<-`twX{G#eBe$tV;tnA6-XJ6W> z@n5eQGV4$N@OV7o&AxunbpEL|oqrCl*r%cl+O^R{Z#1^L&Y^+Ig(cPPCb4KUq1XfLRhHT87Yo^Tt z-NO2xq`k8hrMs|W?x!qSmP0IgZq4e+)j~R+%wqmEm^Yt5yud}LyeB8}qyFW(eR=aQ z{lzo zdHycl!aKs=A4#tHZUjE5M8=0Bvwz0ocqduCZ>>b8`qHnyg_`;=j+(y~Sm@-fetG-k zwf*~N=I8wa58Zd$Kz`H{@F6w#AUpp31ns{25J{dH*uj`Iu%?jJjI+dD_Eu`8DAX|W7rq}q^SCGPG_Enfni~OWLhWSsCBXAwO=IYRkf?@L#cPc z(r2~~d7pjWzRJ9ss^RUVUMoqrNja_2^_VGmHAY#j`DQ%sF&z^4MOQLAL`~DOklc=q zea%nbEifEg-j$Jg&){;Zh3wYaop|2@uJrq20o5TRh_YoaQ{((NW&qg<){9Jxfmqfk zP(`be1<*)BqK?Y7s zjc!(kMpl4rZ8`U=^|K5n0*mRIolEq+w;bIHGo9XJN~2t*vXgw8ZcGN$byTOjRf?NQ z$H0dx{aE{{t&r7cSoI}K@G6~3wz}y#QK}`EdfmQhaP=hi({8w^n;Pfr>+)HGw?c3D zzT)BYV!{L8jk&GJgoCsd&&ng4!#iLq-7{fuNMt&gZBu5LCVRQ_jJmEWLcC?5+}ctr zN1bl;MGu+oE=K8CMeW)l8-;%{n*1^wnKsq6wq^F-qFR1zi`JExl$)e2FO~Xi%*Tep zob-}eA`%a_=KWR`=4PKxeM(v={Zp(+ zgauPW*wAw3(rjgB&3K;zJQ8-Rc_Eu~g(KDdbS=Ye9w)Y9vbmzI4N`JvujGaKb}ejdV@$z*iCYLn~ggL>u05Wc3c!gjzg~@ZscHUc=Y+j0wOp$xnUTZy1Rn0l(X^d&JGpWEPLY_4; zK!em!Um1zJb6bIx!g^P7cC)(UJ_mjKq@T}_()#2O(rgoHAkKFNAKyGt&C#9igmLp*~^6%E7x;TkTVg7ofYwujNp)NZodoU$+CweD1cDW^DB?m&i2B`nPAJ|LOl7veEw`vGhOs1D5^+mi_~l{sWf&1D5`Kl#l+am5%+4&Zi28C&|PE zF+?K$TTXH83nDUS18m0vn>k_0-c!9J&z_ z5K~(B?LygeLpb({%r&RcFC?ydd2#FQI;}1sRz+H_T-whM)P`}5PeUE7_mZR60|pbr zsv+ND1hE;Zv?(Y$971LnN!K3Ev8IW}w9g=YoDjom_wbNV8^(3p5OOzS&hEliJW)Ow zdQ6mt^s|mW?Svfe(o@?M&gf+|A>hyIuv*r<$#j!V_G9nSTO9qVSL+!2{iTR>S(dgV zdh~nNeU8;E2K+8wE6QOsV(B^NP9XgZziJ!HxL6hg772V`si!1;{m6PXclc156$-`% zs(nK(7R5J~-CRE{)T1-+>$zS>CV|{;sX;-O`|QkUzTWw#!4Rl8?5kgOx_}f^^refY_B2N=M~#WvI+ep{cu~h$8e!Qz!*`elg&G*^p0E- z>6bGZ0(3qWA7=X817C(`fX{ikj=)?FjL#;a<`mVJ*~iDh#gyETbw?~xCJ1^enTu|W zQ6b2pR+y^cLT&nQ6Z+s$^-p|0{@S3O3v1?uT)3z7x8yLUtP?yVp#=THYh=VS$ID0R zjg^w=l|`E{dGA(p(LX5L*>4M{`cwMnqFk6{b3dq+$nMI!`7`UZ-f9=FJUlt3{RE-m zx4rVEbL~^7%f|%Sv{j`rG8YEgXbu+j)#SE!)En~pjJFFhmvPW3hX$2*LoIYcU2~at zJFVN3#?u1Ieyw+tchi5<6Kab?l^;RA%|0!;?Fwl?2Z2b}LuS$pPK zDLM!FQbCpryS9tV9s!NLu-hjzBO~@h{$KCy?8t;vV?x!2b)684hr}6Ij2PlPdeM5I z;)1-9PP;9Gptdk3O8#pzn;M0WLPe4hZdjv7cV*=2fI&+~EoErMYj+6*y+9NZtah* z9$83wD{02m4U&V8`if{Lq>i$0)m3u5kZ~X>uaK%cNbX_&32)g91u6MWoj!!a=x5cF z?tYVA=`!Ua*MxnKAYovHS+)RD-P>VFk{b>>Q_Sv7cR@a-; z4jQI&twgBZK7K(p3t^G|A)Nf_48a&L3-p$y(zfm|oeF8{NjqFsE_peka`nya3BxWA zqx6BRAF5kDGZekM3pMX?oUy05?gbFhXgYB3?pWw>MTRlw2pi9|xmnl8tp&1W2je=)kQ_pI?tyms=n$z1qjp=N5EV;_KBL#mwukPxQ;kdR;;7&+Ihhtb%#lh6*ONY+T z;K~~F5u&xD3$r?FZSZi4ApjbqaO5_bOZ#mz=EG?7^3y+Ro^~*Dd9=JvmE{g^*#%o` z!$0OJvBam{}Y0GOF7n_?cL$dohO<+_%kaiB9NEc3^x#vFjqv2~IA?SWj2QoLv zui+HCYwES-Wb|H6czjRjzjrk$R{`*ojYU0seHBk(%Wh|$5|Lcyv?29_4{B8zkkO19 zm}T1!zprp;VOky)`ZD6}0<;`fm zK2&%C(r3xJD?Dj*D6uS*<{=y__p+zm4F3Lj#feeB$UT}WnD28|Mqp9d1FNXtW~vRewzo>t&+)) zbShD^VGMrY$yd-#9=;B5)hScGj!r$WwNF`8 zr=XeCC(1&^kQHOGp09*Z#knx^O=r+u6D?$95956XPfee){YL*8=rIZ8n%_4 zWRAPjKl*rKD}qsY`);u7wNl8CX1-;+4Jau)zFyu(R|Yj|`L>uZ^ZoV+tHT2+e|ouD z&J)_o;b$Q?o%mFbv6OgZl?7lv?hq);xqdi1A30nnz=pwpD&=~v5vNcM1Ljbh%X;fR zUf!YZ)-84{_fEUWbPMSOPDq4BUEoLls_m;=Vvs<-RA7MHnT*>sMljO-R8O5nj&5(0hlkk}m?z^vdQR9#xIG@BV-w49+IpRikL(h@9*#yL z2i}unk9D3@K=5AMbmYtEK1{IOOb~D zw3m%(01wlrXyiz;ko=NiqekA{TP8DDyO7Z_P8P3!FigQ>+*=Wbc>Rfie!_j>A%M$X zA0n3^YjOlew+p$I>r7-wu}G1}m5YYk6sFWGM=9?oU$5vWn*4YmZB=#6_bgQE<(NCB zI8=R}PPW%Z*fRYBq)^6e=A!ka4z$$3yx!u;r)(q~1{1$=|3#w+6izEm;Zi+tZoc2v zv!~o1U-nU_X~MfI3twd*D=PK23;~FQI1`TxFR8Akz+u?BRx`~P@`QMZ8};W#jcY;> zC4>mY zC&^uT*4~6NbaI@0aCXhYiXhm#Hc}`T{gorM)RAt`o!UMtiYsT?GTGEfl$hY?By=0p z{mF}JgXeYOeW~ybf=i(p2aupmJBr%NI>fhg#cGdGGhMWmt_;F|2dYsxrpMHAp0O5V z?Fm&lrJZ0V|d4i*(- zX4V~(3piz%%9mo_)0^(^EY0-Tk!ebcI7=^5F=?6h2#b>^NWVP_9f$L_t9*zom4L&{ z#W*^{TE_S+e1hPXcJX5pVu}*u#{5)+d0}0cLU5D_t&>3Sm9rwBE*sJnrrVzGfSeMF zDPW|$EfA3HRb(!(lmvdNEld3p#>zhd%ydA90%3jWoh>R-+a~FuUyl|DIvIne?}MaA zMBzi>b;_;A^OiN73^&dnnnL^wiUa&K@%CEZ>pg;HG9B=`%r6`=IK6^c3hP&|?n#Tu zrTHP0=rDuPN76L93w5pHwDHbZRDygH*YYwqI-8gGVhv-T#Z|dv19=z=O_^=@Nmf?yz!xs4o0eAg2nNgzjQO)*7 zC!4rYQZZdFon?Y;-Gw99yp}GbdFQB8+IA#(Iabm^S`5-C#ZK1Tu890=**%m~ys_Ux z@f`V|!r+yYH`0@2!zSq(2%o`>qg_|@0K@o{|5z}$zE2Zc#zdb(9?4Fx)BDlU1cja* z%y0>zlg!d)CE|skn>zx$rYPGnOb&6vv$SOk6`R2SKI5d{>CqTz+3m*5=8aq!WgFo+ z3PJj`aC)_Th%EY$IToZhu-%YcULbDSKP^%)vECSp#}~?pU(={sB>fcp)DoDH5neLG zrDgmED9qtb;tUP$;}Dh(&ePKN#*B+xs;q%25Xs*+ys#Fe7_A1wW5FCL8@6$O0PoJa`~;xrpNypkuk$FP;TM}dZsQ&QhA)w z#+}+`$vr5nrCLd{bihi+SV-mW2{kCBu}?zdljm*~qefT3mD`GOvya6zgFjAP&S zXmjhVr1dP4ZniKf_ZKSmC`;bXU~mMbB<*;v_N7}0^5`LjpA29$(k6O@p5*Lwn5$tV zEkkUxegv)!9s?Q=Q&7vHrT`T<%T5)VQp};l6&~GrBeux8Qgx7ReHZYyjzR%6_{PFb zf2EGF{w*}-F+TwYq)AuJUAsdVOJ!RaP^iW;yCX-I%sa;m>9yt0`O=`9+#?We3wbcx zUX7d)m99KYgAJoPh>U2EbU_Z)HQ9}TKP4858550ao}d(2(6OzQGV)Ly(C=GTM^o_P zjo3ZHCVyh1OH!~-Fl3qyNq&snL2jxgT9(>vv?dsFT+#ag~!}c+!cwKW8a+|FlqG9&hLz688u)mF!|U z@i7}Zp&Z%By6HOg=xHFpA($4SS?tpaxx$r6AYX`rVgJ8{GT#6%`4$1f^2;oZwMrmaDpuni0yQ3J(GE&^G$d}2&5ENU2 zsC|T91uBGcryZn}>VCqG$fy&fq}%jS zTmQfN;&5~w9>|1o*p~UJP(30{K|g?H8WTBUCwr<023kNsV+KP+mnuCC-P#b6LMa`v z@Ih2h%e1F+C=ifGkuTNDOyPZ+g7?-1bOVENiRxH%+%X-yOV!1tx2)@A%4<{XN~8(~ z(V1RbL!MBGpuT1D{TVfgZUH+*4QJ%1c?nS{%(l}jurCOgbil}|$~X~VR2ce@Ng$_g zyP(sea7A8Q@fi4R5&Ud{YGJfO3e%ETsp$R`q+v5{2$O;Y3>6BqSCKKf-h@)LEEiH? zkVueN6N=(o3H=rQuzUrTY}v469ML?ber-VGy@Bs#das=JYpq_b4?M|Ns1yn zrZ704gi^%Qe0AD;eamWCB-yN1v4#7LO|0MF38{)&_Cg7jriN&eFo~Z!s{qYKgTt0F zttexw;1OC2CZi>KcFKJ9w)Y@dqEhvF=P#)Jmvbn=yLo%h>hbS`N+UJJeE zq>voSqzfC=<;U%W$Wi*esA7?(E9A)oj#8Mj1p&!ubs4#B!J$C#Vx|UdzXX08g_KS` zt=X4$A&H>B3|5zc)V6Ey^`wZd$Rs6mZMsWxC75W-u1vcCTR^10S=w0PiY{L&`)kcd zkg&?P=${i^rKV%jyyv_r{8Gff9?K`y4%vUF-$pLlIT9L=&~-Lj+UacVlYWzyxlATYEQp<4yJFhNpI@IqX3dZgR`Ug z`Xu<-Lgt0gYc5Xl^ttY$1+dq z&XEM@V8=+}UIjAa87_G~f&8kg#87gFP&f##>b_?sLl0lqGRDtFI`qnuFG_2(t*?ymlsg)zDQr2`m1)wdm7XX=E(*P z^p|O1BS_Id=n8zasR(qf%50ZM3gv6dT7 zpX$H__ncy1>SauI8kh+wZv>(f&}<>oWCeSBy~H#Gm>=|2o`mz9ls)D42}6nfY}q|M z%26_o4XS~(*HKQ@3Aya^h~ z7WSsV%;%~*(VCyH`%l<=cOh7LZTx8_9Fyr+tl+HAVOTv20j<}R5VL7nF$Ax@%YMc> zdmm-KPup%V4kABBMF8P3Mr)?ffqZ8yZ-P8W8R(qxv&SZLbjX1va)52<6s7f^Q~+)x zi7iCMU4S1vkt%YnE3Oxedn5IX-dr+GKCSj$EB0 z!6qQ`7^xUUD+4m$$dd+{iH=ekIXc;0Bx~$T+hVSZ(g`O-{*y#5eAbGF6O8T_iEEj5 zUx#1uBHZPQ+WNJ|$RZ%sT~)-wvQBb((7Qraals(I2&Lt*tKMA8hIA%T9&)ny-EfHZK;`%r!`oqn_3MG%A&~BMI`De7e>neShj+U?{bt`$qnj1=FmykpI=y_b1*rsOh<;C$;Vj-kwOH@H&vfDgWfYb zabL^UCXjaqQtFBX?84*%y-Dv_uEd^nP5C7~+O8ngg*;M@6uYT@>Qr7U$;rhFL}PL3 znvofVrJc;SV6;N}j3C$7vb9V(yTylU1bcC+mdxAzSau~NBan2EmT3&=!C2;nS#Xg; zfby5Ntji7xgjdqrNkH=>gSKo| zS)Quj%zK0QpA3>doEPka>`pR)z>x1X5e1UW!vB=@QFJaLAz;uf5-&OdI#v^bZOZzI zHnOwnux|RO7>8w7WLt|YtR5l2HXi68u{pn`bA73*8-5c~5w6M*rcdj7*Ihuya4J+l zj4f?DmL

    ZADDQJ_F5m{XZSc8)T#ryK~#b3mYC$=gl&W#_!TVB*QoID_J(lmTm8K zi9T^U+Lm#CK${?AxM9~WCK+C`Z`u*v(+fuG0E|JZu*rc6Y$s~Du4kc*Pj0+7YjM-Q$v`!i6w{|yh=&>exML}K=4LldDV~6)(qKO7 zG_|wR`noWr6ApZ=Uo1O=zF zv~Zb4j!w6J8$}Iz1ifiLw&M3(t~~v_3zINkF}1#=f(FTlkR>vydEKREU13^wLe;sj zDPz4F%%Gf(?whcc;_7K_B)S3ZHo?D5O-wetztZ`|eF>cjncG3qAIc_^WC(0MyfID@ z*Xc3~@{;SNg$qewU9OKJa)a(VZ)^&E4J3nfaGq|ZP;iw!)yG@oF4_#8xIkgBu!-=g zT|jv@=M`cJg^~0Ny7gPj+?6BHjT?2_L0S}pbPehNae0NNqY!;SnWRlP&A(5(+^^jpTY-Hp?d31x>{(4y>gLM8MlXsp!RM#)4Gs&j7{RQwbaBQlgUpmuom z^_7Sp=<-^3Q`uWV&5a*$7r7c;s+sjubvCE27;2L&(@S)^f%5Qpz(Dzi;zdv>H3fL` zHdziiNf`uv#`ScTZe-w{?x{e}zU1VVm4J(YouZM!V77jsqvyv9@LgSb0fdm2`O|W< z&c?y`q0LaqY%e4g9MQGHnzd}}d2PC^fIEW~y2+N~lmiEUBLHBs9Kp%N30)&JfP|)k z@P0mC$1TK-gk-X1+Z{v=msv|*v;qnD(T_}CCs+~lBUmbl0HVsR7O6;hWO7=lu;E;E-znc9pjJMw7swZ%i zoTmwShD{35Z3?4dlzRltO-?n$z4^|5fU0^MlOXI4OpVc) z(%q)>R#9;fjI~i4;W*>VIt<{O7Af)EXJvt5cY3&HR25uOk|<;v5q%WYkh`TfTP{J* ztOW>|va`F+^gN^Onh+0X&wecQm9{z&Au`LH?tdoQZ(p^fmgY z#+xW*kDVP%2PsZDzK0xyK71ho?md9^l06=fSP6g$ry`tbnQ(>cFQM0wKWjVUfsEe59tP5V|(o%~A>8hOkSsQ!MO>+-m?I#?B3SCKL|8X?7~%V;H!z?C(0 z5Eb-3iQFL&Jryi_3L^u^2_|^oIZJ9n-fF*-_)58VRRoWi(od;0!wX6=SUHigs%QT?U6)1zc z1e;`Dta(i4E)e@tK_)9DF9U1aCzmGU;=?^=krevNN}#^vv6d8>6bjSqG6i^Y*I~80 zu&RD1N81uP6KE?(A!igq(}B}Lw+pCf!chnEBh$%zwWl&!Ldyb$-R>#ro^kbumDEq0vdXh)7 z+6Rd|g%zV5zuS;eHN(}MTqT8=U_C#>G=rxllh8!Udzuq(x*BEBD+RGjQrt)Yh3c+c zD8O!8w~5SdszE^TWa5RYw=(3gWi7Q?)#(S@+(+|6XjIR~3=N=|J=F_wb2)_}Op!bt zCShBh!H-EKC*;V;fFa2&l(i9&eL75(h-r8&j&Kb5-U`i&LKzp)mo;G4qEHapN@X)1 zQt38BzBjbsO4s`xwhMF+D=%< zS@fJCDj+5GN(rHJ(PZf4S=Jd3akW%q{hHLE`Y+ERyP)6Jy&UoJ3MjvptwATV?00%` z7P(jfFqu!k6hT>XUUyGh4K3nDhiNMM=v=fOdjuCLD74or+>)$K!r^6HRal{2(rc_J z3kv~0BA7g5#ZfAt#5mx@8Q17Ed~XGKdpyzZ6?F%roRJNM#X=7T4Vtafpsc%M=S^|! zBXTJ5sXPj#;S^~&n8n^o{X2mM#|IjND3qs#tPtXQ>|-qS!;EoUC!IG zmKsGsQ|I{ZO{8YKFufuyz4i+-62L%WQ0`n95gJPc4JIX}s6nn451*QqA%s~4v_UnB z-eQS5fu^vo=s8*&D1a7g(mic*43x=Qt!=Hg@(`7-TUyk}sWL#UXp^Fb!XHN4Eg=aW zaMVx3o4zRwbc~F2nRY~x%(cu!F04obO^#kc*|lN1cCvh5v#BiD zj)c7|>n@v&sR{XIkDFe^qM$e!kk+lIcZJPrQ(&`@^)n%MLG)pbAEDE7Ky8<7SD86z z(a6Crpq8!1&(bBNK}!}w&&POBVKyP?%YrRSGD(bJBD|&}N@7i6-cq=Nmf>|)JKxAa(|1icw46Ub!#UhJ^Km) zh+uV0tSwwi6a(9nhM}NG7H~OwFp!wDif8ac!0+U-Edk!c7Vy_D>`U)TA~{c|cc##N zP1y2lncy5Ox2~B;0bE@d*Cv4DdK5k#w(QnHm420EU#i%di8?QAshb`Y%t zAhhF6Dv!WpQchLeQ})mXzG6@p_R@LIOrjW%*do29t*1-zID(0{j4l!;`<>0I;^qbL zWISu6Y#Y~l%MQW~m-a%+5RqCkqeN2xLnk3j8>VBK?3VU=n+?&jkw~mY8h`T`(R$1OGwsBi8}>SzO3$tTxm9J+9VNnOg&(TW14foGt93F61hqnhTToUDT1`O!wA z10kEZBrv}Kz>uFc@>#uvIka; z1urgmCUV||EB+>`x{PWGur)KOlk~r28~{Ht^tBZ!Wg7|;t|)<-8{r`XPixA z(=h%u^f_B1r@B_yOh5@u*)jpAMHm|d8WIh!gGnu4t{+~YB8xCR-*uC%-OtOnMXJK)zGg`S_~1NH6_;+HDscA;^( zyz6vk*i#)YE#FnVFn}mu0ASPlv#$LTPRN z#zbE%xu=|3uC}W-#=}{b^rc6?S?7kF17rA}DME-n4k-40sqUcwLSTLzYbp5H^^6}y z_0zdXL^Ew!h3mWtV$*pQ9rH`tl#_bi{T6{1`)z`s2^1B;vWZ?m;j%2qw5nW8nBKZ3 z1nC-VgmNov7Q^DB2pndeTnf~8T4W>>GHZxvKU+(c)++2^u6aZm7sa)Pkr=CUv~~(e zTJH)K0sRBH2}NxwR%gS)qi(=Z)RQuk5@?6gCH~aP*sdIuxBlKCOr>CvtHhU1GtqGW zge3en=pj6B*^a~j&Bme~&13l#?djH2#}Z!7VF)b^T3;AjrG0vTY+zZ@*JzGbYim2# z$EL{;QYh7E&1GIm$K|a!&r?9(c95D(yL_qeu;JcD-ZG$fs~}SGhdTyA6?W?1L6Sfb zMc$c+lHnhJ62_#J@_rk|Wkr-GkeU=9>Jg~iwoG&@lVDAEqbn8*bc@Ao88g`06>*Vp z=vjy~Sihx~X-}#SIpMf=f~=I@_GaXfVc}t84x>*hPV%DdTD5{vXKtaQ+@Uw9(A931 zg0EhSHL)|80K%uWTj)`t4E+mMS{j0$M>qAuNT=2!@2XIRdM0feLT33bD|DBbUbTPJ zqPh#T<>Dx0s9)fzYbKLra(h(}k^H7ZqVAcy~sKPj^ z^xa|^ba>C80SO`UM7~eXj%HQ;e>;ubjY)t$pi~$Nxr|#b`%-?TzLkIPrRpO1Th~gQZYW&T-FW zy(`l*m>}#M?U-rYP?Z`iBmUzENIQ-X$zx@snI*5D@YMgW8z$Z zJlbd;Q(x)O8W6`<6I7#Xs*SAxSFdzfha}f%QKLAS*6y1aPTv#a;JYg0A~x?l6}{b& z$+`i47Uja-jGWi9oAjF5vRtTEL!&|U-#Wm#LE30fQYaha*DO_mX`-k>Ktn*=*jQaC z0sMZ`^I42LWEv^ug1Gg5LnsWx@@Vo*#V0eWS|;xu>6f-Eae<(P{J!ILI?W6`tX=zPUVVel!lhN~w^=HC0b=00>ippv2NMV3HeHI&nk z*7fRzlXA3sI_X1WjLR9fFK<@YR&TpBMm#7uel631^fu~F0Cg9>&_!+*D}amx5<9nXaep-H_Hev0tzaLL4hgTUpj+E_N7DSka5D;EL1$q z*PDV$otLxO3eISPU5b};&(=e0jg)j)$xrGi$$8kY@SIz)yfgGf<8Fa+XD4e`-n#fp z;L%?1(x%cwH70!yOv%ZdGbap13saWf^s%&GLK#rO;>s}_eNJ*ByC;O5Q3dHrKY%BlJEi%t>Z@^%GoMlgTHdC>a=mcx|yj%+l|Y!?!ZTg0Vzb zR&Q(Bl$#vt!1tG(QJI*HD$c%vCDM>h|NP;H7WXlv*CB61c zv$@_C^aZ-za%F&v_+offph{tv?A4MH7or^;B!wZ4%+%*Xd_$v> zUbFz1j{XhIIdr4kQJhRi>*1nMVF#%)w;$nJsz+DdVBVs0NSEUiAhQujX~1JTNEIq9 zS*U9h2P@aIg09`QWeHlF;;bEF^j^TE(U!?{!pzV+7D?YB+$&t*r#6AnY;P0Fi`LQN zIgHj)1^qfi2IO${n;q#omO+i6;{u|vvOY~IR~|5DsLr~Kjr}%RflAHbSU=K%kDfN0 zD)1w7AhNNQO-0cUIN zg*0vStzVht|2wo8)!7NrZNI>=WAJ}-vzYPM?~=tQOZo1CEJ$}Uw#U)C(ilf_6Fq{J zW4o=d`M&gE&uGST{z0kkA)N8eD{ic~YL<2Usi$p;ST>OAZzTN|rT?v;_YQe4+aRxE zJQ^wGR22ZjyCQSoDGt69GP>*;eOxP93!g%T1z-P|0R~KAJ^z;7t`qptL0R8gq-e|@ zp%mA`qfuHz7LG!d^UEeGC^;ujHOC0kR(QLhBkq{}joDay2o*0;8)f2qq42VsHR5xahO%~3lM;#+WiB1E#XwoK=nG{b2 zs`+*O?!vKV1~-I2;NHe$kf{PNleh$QNl%ftuw@GQtfgX;J!BzY{c7ifXr~6 z(uG}hN9buw%pdAWg&g#x3jc0M_brnGqxpJ82AQ{K=6_Ww7YPFBE3VaEru)h zLgPn)U*iTHL;;4kOs>E}9;jU8eN5U+CWX-=7<@vG$2C*UX9vO%$U=+@JeGQk#15pHNzw0|jEM7f>tfkN>Q znFxXubR#-mMn7KmGF>a{Zy#MBW)iS(6BE5)FC1+)MZgT|yk+S^VKyRwo#DM+j6@Q) znBMP0TykDUA;gByM|U=0IXP{~H0-mZF$C|ZpF-MmSr0AaVH5J5Hod};D-3HXL>=fL z3k8-v#w(>=2Tv7kyMSEG`@J_^bQ@i{9`I8skyc#@YJ)}4OmOsln*Njo_#9+Gd2hB^ zK5Gs2HQg|lW!Vn;aI?Wa9^+?@XbA-WF57B;GdolC=K15Hey;mYfqU^rVAN+p#xm+O`cD2y)K|^g}Y`gHxzbQ@>-0^a~nMi z^_S`A7GUr;OsB|N=NJAjBP}7Mm$R1pfHl%@z0LYQt&r`vQAhV;z)q22DO@jC|H2zn ziogvPKv${K^$Z6Qt*MChDI(U1o)*{dMcmnjusXMX6jOuL<0{;Z@q~O0y6<)6Gj#X1 zaVF4(+8D+m11Ypx1OaRpXz9`m6)3VE+C)E+jOW#fP|%JXw|%LCu{0XJQYVk8UEA5^FU+UAZ=n?nDpc7T@~vJ+l(_D zn+L+}R)JLL4N0Iu+$tAhQQM|605#G;BM75G*M!_|Q(%z=0Gsu?69E;Hr8U#BhRkCl z3(8%lDyLIv*BPqTwXN}uywR3j$8z%(EF2Vp(v(rjDn>S}vKIhLbzilMrfa=ABO{Jr&uk!l6q9+r1)q6x>zh zK6NFB>EdXktDKaB2`Di=t5>18AR(No0Q~XL%F69Pln{*)o|eJhsb^luE%dvy9i$U; zFF_uVR245|St}CkH&sYDQ(I+Oib8y_sHSkwN;PoZ58q-)jpdUGN^3qm!R zXeu{zLs}#6e!SDGHh-$CycYc^g@L8ishDowFOuEs-wVmVbBtm&8dY`t>t6nQ3Z=dG81ATv5&-kEs`s73{c_3Tyu-5$ZHO$fq9 zrxV6A#>K>_z~wD&>B($QM*#;Qb49QFVQyEp_*3LpWUH=X1Uqj6UN)6;TeOxcDl{a( z6(?-r8yy~d1UjSxEfqbPK_P8eG_7(C##-}g#RBbApaKw;h81UMeB|lnzfiW$UxAxSXS7t&z$#Ite0hMv62e>ZC2vSKoM#X460fn?w zP~c@Y8XqDTq9+x^3UlsQ zEd~TV3LcO>bjDOHXC$ku)6~1ryH2734BdGF*SIOfpgsY?h0~`M#?uzvFXm;gXZlhB zlx!jHqkQompCF`MkvV(I!e}&?e(3e2FPir@Vf@hXm*LW8nNmTRIYS4dz=+bhLen<1 z725U90RsivGH^8fDEMB*%M8xz5g2aOmt;z}EQ>)VnS4(-bOt>OqIuH`nU4s2UEpojU!gD?lzLci%>_KkuGbJ^NFs0 znz2KbbFWaG+o$CKhaYWuBs#3)!Lg@M_vqI_ooCBxmqQF6f0}7o09U{viSqiYI@-sU z$`iSrxfj_O&4kz^2-M;xALY)`o@wAE(uA=##{I1&8Nsj8I#+5 z8hEoabElwUFPXSxXz=EnE^TtFQ|0mGLxha=eiY4-{u;(yA+)aua9Ah|Urm7D7EKNz zUO8y(Rk24Xsn=zFvD^h~Bk*)s=!PupTe0BoVkQ#blC7Q9lfi`SNA8#cP3g?)Gh#Q4(+f(5vW7W9HuQv!| zlid+IBpnf9AbZj(=*=(-88|$`R;7pZ z$RRIchfD@#8)RlOP>w@4i1{47pL~qi?JD4GbZVFQh6jSd!i?ytcM%3))Th@z+v1aX!uQ zb`{r+q0P74;9ZHLHonYCnZ}^SlnvGYb%!vw87_I&vo2>ps%U7eT1D>&d2hW zT1F)vUg!JO?$x0|6|ybqkd`(D$GZ`wOs4l@&5FAJgD%Z`X1Q3mXKHq93@``{^4=QB zgi4}Y2v0AbsZ0B9wBjfjm2;=UuEX*&m`kB)9S0IT+pK*7CH+I@`P*XmrAMXT6NS1S z2ay(a7_}*aLwDvjYW3*WN1aMVgVmA=mo^Kgrzs_2rzd%G{|O8S)RE=g`fnF((I1{) z6l-a}L9FG!=dZ?hzyEin*YdNk`wu4B@-P2hOSYKM>>mVM{$_$Lf0a7#h*xn!0D>2b zm*|R z|HQCdy9TbbEIZ<@XfvdhL<(ajg*YokAv~j@a~>umMLkUTQZ#W4Eg&968+cpas=5R( z^B%%SW|cw#O?~hjLrNou;9aqvA{T-_K_9ein#{qNWG(6RYA~)4tuImWHhrf_Mu{Z$ zfYOJ|@|yaNdP_V{#3VF9IR!@ow+ybr8{ZV-$n>KT0k z>M$3WCto7~Wt2XYS6xChr!vWlB#Pp=O@eM$`SS4^a^#aMtRkdDKy;+D^~*obI0r_8 ztH1jc&pqt7AzaxcafJD_tmR^gR8FiZCS*F zCNo4_9~fllH61Z4OiLEnx*|7a!;coR(n~MEOa$q(;P38hKA{k%N1Ty+>{ke*#px5f zTq-PD+nOPD=9x`P3XZakD)4%#xx1lF^(RE*9d&I4V^L_#kiCQ_b0uj(iLdkaz`UXn zh9_Yg_2FBU4Z+iFlpU)Ii`xkq71}2pG+9=gJSqelDTS*`pYM~XKrbefwVuH50CzFX zum$p$ae@L;dxSA{-W4IcR&4eb6&Vxzi zN}C>J-7Hpe3%X&g&~Y;@02&B%Ed9#k#!HqVxo(F?5(4n!wR z_1OFSh~=VY@d(hIu&zUWqnch~pu`L*N@)Sg=c^FP^c@_ejojG>eWuyrQ8JS04xLWvW;DXG*vr6N^~;E+_1`Ld z*bL^kFIAVY$44=-EQPL6v6Q&?t6O|Owha;<+Kl~#_h3N-43FYd01*llD7~G@@uB9}g)KhjHT5q(L|Ihd=pWXTuIW(d5>Pfe4j{+BnZ%jXmQbOs% z%#td;80H_0E4PoQ0bxv8GaD)LTyJvV$4VlEA|0NUEw?ec@48O53+d`!D=K_J zkTb&MPWm(qMQ+F#+HcFc_K@W`E9lTC*qv-)Z0({LgwwEP0^$&9UsF+c)S0Le$Vu+0 zi>;tLzhye^P1oGU{29BSOnnEP$)(*^r16A8VrZm{a>*7=BXfg_5cLy7^E#YR@Jh8RUg^4fSbWah#oyI#%)Ild`$CSm6vbx_@0^ezpaVo_3sz(A(2XN<@WJ zC!=heQ;@Qs3`8qdq0%*nBskHKhpV{>DuGTbz5TW}<^eD4O8QjC=`(_!S;0@4+aZl+ zzpcA`5QW+hPb8!-1_UaNNv^5a;%!#Q>o&?RqZVPzjcC=OBF8Ahg)_Q+mk?54jM9FlUn>jMq*qj|`NS zSR0MKkf9&IoPD(<4_Tvfs@XH8>-z86=Bz8m98~1 zX&Kj9Q8qK3sZj`FaDC@eM$HKJ*?XI9d*;H5UBE^DddMwdxK@c!xtgh&eUnM~EJrS= zC)@|3sZAb3V61#yK*jY}fcXO|B!@QN5YPaJQPgFNa#!?n( zTmOm28PUEL5!p5Qj7F<--dA3$gs;{kzXcuW(W(vt+XTf*1;0Us%Pjg+WbhE&1=M=& zNjoV60V*MRp&dbEVRrj%3gHJsXB!72Y*}C8PMbnw*hujiuG3}34xRb9-D;zz2@2SB zE1kUF7*^#+R(84prCX-9FwUtvU3CZc2^6etvzX?z26cRLVq$a9GkvqJDC4c&ct^c9 zO;|`ad09&XDrtx`MVUppg0Qx6-^mrOa3GV}Z`NBrvO#T;N#e?#KjWa703JNOH=~!= zj*wt~1&>(t2-7|-cm(1$L$#E@A&+OY_;Uw?A0sfK_T*ZSEEWh~)U}<%eJnbLvhI{T zZMCo>1jHUAQz~T6ZA{eZgz$y23notUrvc^@PRM2Si>byB;|3qyydgv^Z)nL_a7#`y z^P5_A0*-f-x^#Ahxw|}6d&`zKkD)pk1@s7;=3C*7+jL!o*5j9QN;rr9SO-6ab;@_E z5tbf|I%no5iBeIqUf2*qMYRy-7wDHoUD>F2wV!^C z9?rZoTsqXGWM!CAtUBZRycpm7KJ+Rcz6ilZ8iS#{@iRbq)V(&*t*1DX1(kQEXNJaL z%4%}rlr!KmgsafsNitb)0P&~{pNtDT4sL>F<+A$NUS@(I; zbRBIVPGJCLf!xo1g*Rvd~GJ)1R)$q4ehB-m!XgxyIRZdK{x8St4FhVwg6-9%LJNaM*>%io=-e5t6 zh!(cj`xiE&9AvGp5qVwXn4UVN+3LID5sHQ*bV~EQ&2K9LBjVC~i!{+HerwGpE5oS) zU_xD!UWJA_iST>Ymn`VHmw_MjAU2efin)m>nV`!i?^-ii;5BTBTlhrbsW6$MGYpLN zHWx)If@qX;LiO)U*D<(KD*c04z>!hT34=zyO{1X6wYZUu!2n^oWHZtz8OiR+`o|EG z^u7(elW-UG8s)FLQA7FobXbbOJ94Sv zq%US#I+Pe!he6HP^dwOfT6ZLOZORx?sDVO88yUjsa$Gfm6%@;oBMLSlq+Z{UqxW&- z&9u5n2E?EVB2=Nn z7!9t#q{c4Huv~Atvdw5rVrA%7Ui%5;r9|P?3gIw{>dZ##H5CSyd(l0uDBKWS5gDOL z<+D(C^UnHDVp~E}RtTxa)l(2omX}$TDZX*KIirX=PWBZ+AH2+K5rbq*Ul+5JW3XN5 zyhIufJzPD7n$!_oIgL&e#&Di4hH$ClXB99@qDa%=aEqrFy#PJ>9Z$qWaFn|+TzQnU zjmmJf9-?;KHPx!fDB0pV2b*+buxoCpX%sE!j0<_&E(n*(ekVH5`-|GzB*3JVB+(5u z-fz21EnKw2IF|J7(4iD>SzYK{pxjRHG)>9NEDV}Nj$sx>yF#kBO$R56$&O6ufeXV^ z_NCp?T1lmzWJh?UC|Q_NN5YT@brmZ0iGdfnXgf#>ReLm$ zdW_6jHY7p`0cpvF9>X|5gv3fm1iWUeL__=wOTW%hSxvUNMyRQ1p>c4gdf~j8-7UNj z(Y;uU$peEAbSO3SJql!tm+HE`kgFF)s&7r3mW7hh`e@{a*Oi4irY90%He|S9o4%@} z84^prH(UThNv%AM7{LoVdny%9qt2Z)Z=e-`xCckpR9ze@Dnf(i+F%NvCe+;pI(NFT zSKBfH378v$vFkwmOF8&+r=EI1qhj59sG3(KShfvd@{#Zme=9R+op6>7|Gk;2{Z z?mWU46gRY`Uf_q{2FKN03NV7#JC}9I_bFLKm(dyc$XS2}1)y7vBt zF^o}TGCuLl4S%EXT0m7V^O#>qlsj61B#=r9o$`7jorKnn=1A7plm)U3be8*Yi(V{Z ziwR$hpZP3k9jgtlQr2oNQucDjsYQ@-x%!UjdC*FEA|@LuD~6Q0&I2m)1^cU~jFRPH z>sux-O9N*x5#h_&HDff3Aw1d9^+YAg956S*+(k;K(^Ilwyj;Rj2pbvm4{FxgVMQ&a z172*yuD&3{$a9o0trLW%(4;uDKv$~>7^S{&j0^`e9Hu9t7y|`$ndnTOd_8%`yOFd* z$nHy>L>QjHBQKg^tzR8~3U$;TMRC-5dLq|f#HHJ|dGTsogf`?lbhg<3^AtdYA0czT zplD8BNB1q^i*;Ct98mdwAlEhico2%zX%fDHmV zd|4T%NaRU-G(82D!_ga4ioxTFnxRg;9(0&RN^@rTC_X@a#u8EX)PHcZ?ve}lh6dAI zp)^X4rfA&E62BI$<`M%LW%d*vUY?&b>YQ<2e1#P%Ianb~ynDIuXvaR$gWv^lF%MlNo(*B`Lb}Hr0r{ zo31l@<;=WPXiSaN+BOT$MaDU=r}xjnunei4jK@IILeANK+kx>HaiffV)2Sm$EKCTN zD0E-5ds-(tiR6YNZ%ek5mUJV2hNR#q`Zsn&B$3IU%B{ewEC8$5+pHN99p}uz%~K~4 zqSGTR(`bez$|ykbvhi++`RqwA3W5!uY7)6jGz>@sgj7OdpwHj;rHyVk(`aTuiG*ZS z5T^jAb|a^K2LIj;54Y~=SdU}eXwo-CN?{T87gGRH_^T5KCnEZ)=#p|Q*G9jAWL^7O zCTs|gE2$}K?}3{FTDT=7Q)F77h)GRQQIa?&fT9o&Bb-C=rZ^_x->2!sSX4?0FnOq` z>A+^BQRgk!_+&>M499-b7R7lh@-ob651mJ^BUc0~o;u03Vs5lX%?`)WUDh$A(6li# zWx5!?>b*k5=}qQ_hFTaJr!e8vi>u}7i71|h0t5CaT2kR)h5l!dJ@9n18@9||hw2RS z=i8WRVLL&URkn8-^_KNw>D@B^(F8DPbGzDTxQcC%Dg;et>khD^9m0Oh%;;t9J71=wRrqV4zH-Q(I`c!A$i910(BYVeI%A zB9-~G3O0#hTc&S6RVMlvyESuq+n5^%7g4Bsyk&Qyw?dd+zrYV72&7XRZ1>f||Ezb= z*iJMAz~t?ezxobYnCr^t{Xl^!AXP=hwNtNE0HrU5lCcTSbjImlVKnPe(b@c1CdTO0Xz_ntwflC|@@$#> z6t%sDxLFD)+M{h>sm_g27{at=!qenQWr6Qw?;lLzp$sLz-gB~!4o(ZXdZ^xvg}#9o zndwGtQvXp6VB|tNj~s60E_fUz-J#P#!JC_qknJhl_xQ-hF;N)1DHqb`poj{#pQjq1 z$y>scqW}Ulxb&sb6xbb_(Q`ZssjQ7tY-zPb_ccKS&xY5bF2eVUAl*|=iNels^?=Dy zA{$5#J1EL0^(|v1g3@v_9M(+jOD`W~PkNX~l6Q~tVz#Gp`XudW^5JpGsUmvITuk%2 zh(Z0w{?@7C5Sp)ve_ZyH5k_uCNVZneRbEB ztsj{PDk+fHK$ay;7o!ZJ5KDQID4Waz5X-Q$@QobMXBCKj+hUx`^hBbpgWT1b;4G6r z!$nu7X&d@4#>A2p&N>UiM>TO$GK~#}{Os;U;$fT2jY3tZf0;K#dty?>ZouGiP2y|W z*fn~89W&T1{KqeJVvByK0#?Cw|HNPPG9Z{^mYD%e7*;6|#DYXRL_6=i?TAJ*DGQ?j zh5wqFH`pO`TpHG&Wip(M@(Zh@JwZGy<4H`kew_2{R z$2vL$9)0elO%NAP^qq7hO@~9>JcO@VZ=Fc*(NbTGpew$l;aJ-ykSDt#IJHb>no*jg z8}#uPx0}c`(sEYwQl!wgES^bw1SJ2gvEMrLk*ZHJDIT)&Q5xI@Z`l|`C8a|_U=&ge z<;h~|JguF_lO2(Tmg}T;O|rDZV1vkJoh!xI5x%q6OJNq!&>XZm)b^1kFuAUZLkvd8 zQDm^KZ*X4@61t>J*$RT@)#}D=y-%YOFArF(`oFR13*r&4n70aQUrTS6#50k%a!f@9 z#+@1>2#7C-BLHu-t_2>)WnhxTnupQ{rPT|GtTyPJx2K8xFN}8!Y{@a{P#(?OBmERJ z8k1guVSLky-~IiPs;3|&P!)vlLq~{;(6aQV(KLCP zVtEc-bqJAc*_E-2{5Hn?5#vFN2to_FtcC|MX^$#wi--X{G*p|(=7VZtSh>U?duA69 zMS6xRvyG*qjX7!Nf>g4iN0BXz1sWSDDrBn@)VbP}K+mU>4?uOed_8HczcX zFnnZ=DbvClzv9!vd7uw>!_{HBW^+ssmripOq+L%4scmkCEWBx{)2cI=NF64pO19Dh zPkAt}hi8!Fjh|4t5oTH1Q}~PKHWD7lzlJ6F12xJ8#rcr|-qaqOZiRmWD~d}U5cKvD z-qv?0wmQPr3)wg;#22{U04cR#@D&HWsVMCG(bIj657Ux(>DiOb^GyAs0(qGW*Qu6$ z-XT1t9=g4(_m~o}aexS1d`vZk5@N8ZP0LQb)RHwDPD_MkR|=*Q z0!yfLFkG2#lLnV~Q|wO>$DULNYSTBeEg=b7nqAibWk8z0c2n|#7O1|{3pZ)tE)Z@e zxO2$md<0@>%L`P`Y+2DAl9eGri3fy+P8VC~S?~MAoUJ#H1{la#7=HYgBo>DJhA0fg zal`VK)yc7#Dj#IksZNV~Wh=rJKGBB1e#`1m?LZUOVwq$et9n0Pw|*Iwi+{`H4zJGl zf+5?YU2|>T6vcHEmQ{JGzlzV;`X_6SY}{(Ja5qH;1-*%=FqwYSQBj!B}UyKiJ#YW zNOZC)lAe4TjDz94%yun;mY1pagI~y$bt|L_id|;cwR`=&+9}A9(mRof=I=&OtRSNa z_-A;ZOuq)HT^gRDKqF70Xyz*3d}=rfMQB?fu_D-G z)TvAp$GPrlsaaET9fFLEXnkdmb<{fP7#Y+G4Sj!;;|dgIk38n8nq&at0iJGQeQ87* z(FUdKG@e_A!{UCY7n0tO;u$24bbM@Nvd*$A#eiCj+w)S-)-4P$Ke{7?Y8@SQD%LbI zew%=XI(h0Ue-2JY$GCr~RxPT((;c;NyE$0;Bs0p1Y2;bv9g4#X>GT2EVt4tQZ_1$d}HQs9A<9LCWybkDm1 zjOO*pYX+G?+F2=k5Qrj#6m;qR>ee#af;^(rafOEoW;19d(9BiXM*Qq^d)hiv+W?ov z#u*|0B1f6XsUjyS+;9CMRDMj?$TU-v{31DA4jtSRS5d>TWl?b#1=C<;&P=BuDF`!) zt}vp52J>31&KRUGZzTBWTT6OwFkM3gPw?y7qx`pqRKNdsXU4d%X<3*sO-qyJ3PCSg*C$y}Vp*d(h4Y-3gBaJ*t zc)fYd0}D#k!DT~D#)N4UUM7aPp;$1T_vTS8)3=09gTIv_B4iEvQC!e$yRG(anLhHo@M?O#-4`*aa9SV089%xqdZyC(l=9u^E^qXFe3#OtKW+l|I zWn)*^HM|x0V0aiwSAT6GtnN2LTc)iO8~WOEpx!{^q^FG(i#!xIeVEn>AU9dA1|4h) z!(_}djK>6ain6RXPamb7)8Uu<#99^zY`dV86ZDa1Zs)y_g&r%15hI=uCvGR|r=FgI zLf!V}W%Or)F8a;BdHYh6Q0%bK3-UT$W;6H#jL9U;bQtk1v`>@Bk4KRLh2LxAA^OnG zEPxJ@HBuJl=txb;ibuL@{g=!QY#{AtJ&p9gDg66*xeno3x?XLWk9DG4%>1IB6ro;E zYU#$`fqs}0M|GMcI)Bwx_vnZLA!3W_}HNg$`|piNBz8EjV7F`%Rr1Jld~5dy=Da zbMZ;ZOhsPa-ZllFnk$ri6TwT#}1oGP0z3f}U_A*7JNLdGZz5X|dt`|xc zvp{IjAd^Ais7;}#a}}dKffbp+j5PXy-#uaa5s;-5$_aAPS!yCCIm5Wup_WRIvdmN< zQzPaR@_2HhJKR21<~>`*e9LSrS8dG!l+4>|Q|fk0;lie1-hsBiEJ zib8EMvTP-nX;6wTe1y{=JFIWGt&?KY;a5<-rk>11Oa#0yGRlgANa>)GMi6)K#jfWu zZM;{@d?KCFqfI_?>nkk%@}O&#l^@L}*iB~-nsg(YhVml9N|fLQKQf7Cxa3!}f=XnR z>5zn^rs)R5`5(q!OwrhRE61B4TQ0^3H@~K2mmpy!dwZb2v*Q+rLSd`C`PxQhERR|<TlNl~i`A$zqhmP*mejD)!waQ{N7SRj|Jw|o` zb#7N+j?WU{@EB#7I9f~qGbCb>Rk|J76(Q1MEy^9iEdX1fpEwz5qlwMQ=DKlF8GB#a zlibPr9J&qcASuEfB&n8@UsGUYd)i3*dvte+W%lcC!Ym~wRD}SnwA5`jp6<=X{6f?V z8Q={eo7?526!O0>RcO<7T(vi3%=8@75zuVygWyA)*5aaNOOa`jm!a#8chRAF32t3E z)IJ{%q!4*rWT1tCEU~uG6H>HWoUWeCcQYQLF6g%pWaWdf0wP}Oji00Ni&9m6HF0@e zTG}ZWl4ORj6^?;Vh2T%#y=5CQ>m#?#%$1@KObu)&8@aBAd^_wTHW@@2g?Y129L;E} z8GqB6m-CG7MC9P?5r%9CO|!lkl!7=6(pJSzip8jKn`~Uyxf`hAoB)x&O~iKvm=6K4GJ|`2eZV;~mru({UvWE9p3`)V+{>axuN*0(jli`0x!Yjo4r0%VM2JaN=v{+P6tIiT1F8^ zK=hJBptue`THA%C@Wtd(At2Y^Z~={dW>Tw0r@~wtt(%>eg9O6ggbIuaIw*?)TF zeG7NX{Cq4ooD{>MzQg#Npil0|^VpTyJ<6Lfm1At2_Gz>yz|l$OXFn&tXGH>$DKK;5 zr26&X-s>XENy%xLcG!kCjI3Lx`tO)uP$2gqskLQ>gbSV=75OP$yOSy3Op3OOBR{t? z`YCt!D5SJZNJ5A4K+r7Pi$tsfjGZIgpj6w<;Ge1>UqP{aZ+e z329q1cI!4kREe`P#7ale<6PS+0$NrT_rf4;gMOC_NSu9i-{D$)6?TPQ+umn2(ZkO4 zO%=4=5k=Qp6@!^;LkQGZ{o!TQr>$40CfhI;Jz-Ci$dynb`|y^FMlM}0R45t&_@w^` zMi4Z7(^e(u38@)n(_z8B6$*xg>ra@*lU`v6aae26pYH!iak z$&n>o@^k@qA$Z)Eje-tO#~d9}X7Fh!Xb#@OafL7v!#r=9uo!{|cQXyqsq)IzejJ9E zY47`$h}Mtkm94P53V10?JnKOwruMK0R$olpSLnmU=~ht zy+h6Xq>G3ev5^CA=0w9pzYq(YAj>_S0@?eP)rq*(UIb83s!xVZx`*nd=jYmNEQ2tv z$T;kqVW(}6L0Zdn_H|EX(7$}vlrP|R>$f$!;!FrhKTS6So?9!w1L93-S6(KXP^b0b z4|%_Ye8PyPUjcrjF6-p`_9@nVZ_9=dI!dXQ8!T4fr(;c5j`k*~?rqr-tU;A2a2I+Y zQ~*?k1cPY-f7mh|7MiAWn0ClP(I8S&gF~dnsP6~1A)#%1t&wt}7zh=B49iZCBUq@Y zWorO=h7Dd>HysCNq!4f&C*`O1Wi)v57nP~=c43f~18zsAE^NgfPr69Hl+m6~HHp|x z;EC#ug2tdzp`EoMoq_st3*ZG97?{2rP}XS&!-_55YDt)Z%>B}4?M$u)DpQE$}8(47Iv z)*Q+&Ledr#56G?=SW;9-D;gbLOd`vDFu*D}_SC+#T$hYOGY1LDxAy)g;)wyukEdF7 zK+Rh!Oh1*^ z2GbD+pI)MtNh>LSvVQbzrObgehqYyzmqAIiBlHL?DG=7oC(Q=WCRI#leETLz>`~<` zz-)h0%l2tE1w!}_Bo9xg0De%}F)yG&D&~nE-md*f*`!i%Mvd`x=1g^k8g0Gr0$xD_ z~= zwsGw$Hi-P4EhA}y91Q{sX_5fZdeOD;8t4S!*&N%HOosOsO!h6zS1lGcDrh$b} z_k_scTJWJj(Hl_%bCIz#p$xB(Nda0#@D{zX!rnyi1tG>IZ@EXjNs zj33r^u3K?Bne0ZVxIJl#wLJYnHj5rCqrO*Y0qah#&HTblgyIyMJC9(c^Q9neMTk5c zKH0uh4r{?<6=`6RiG~a`xX)@ROY7}5vu`sol}!rqlF~`YgFz@=bZ2N)BpYs`U^2}W zG7}VsQs$o0K`KZyYSCNS-%5<>n4)qEF`VEU*<aD`;5X(o+bJ}>Z~3lEENqWZ zw!$9;9?RylNT-iu{b85U{}Zc4ZMtn2alntWmj6MoB>W1rm(oU(x)C+VGGxk@z!=NA zBc`P&BkEE*fsFVFd?wC9K2UCj&eFjI-$j@v&C7JX4yWyDr+J&?%(9UmI!hV(5s*BJ z($NAlWhjKAohLOxFX*+hmw@?2V0n~D7TlJV($SQ=Mt0k-6-F_tXE!9+Uf1hH$r3g> zIneuZ_#;$myNi5zXkV&)6MhLf&}AJRdYjA$RJgKH8PszaCMPN~xeiC8fh3` zGra!2PD^i2MN><+4gM!&F{^ceZzdl*$%+0@4KDaXBH$nqka3U=Au~4W(X$BvIm6`B zMr`k<;B;Mt7!z7XtV67Gqmd;5l?up}T{;Fe=8it-r%Nq!zp} zejxtSDCCu^i{z~H(KKRY_y%siLSdF*{Tn$I7^LOdpx84OzU5&rG`fBoW^S^i*pagq zqMnYq$fq5qAT-(R5SW~P#9ru3fd4(i6JX9r%XD*T{_V_XWn=VRMx%7N&h4dzwG6pB zlRHO62ulY=hzwox0(LW7fp5VmEO14Gy?YHaHe?N&g(oiMr@oY^DJ(!EGf9YgHq2`r z#-}nUquH|Tk;YH}MTV9hqiJfE*Jp$H`AI${CUpH^?!yQeD{O1qc=c;TB=9`pt(-a( zM%QxD+U$=`H_~h-KSiIMeOk>?7l`p?YP)czbiq#27@g!MDx0PZMGef6fuzj3=?@46 zi7_56-*s&37wps2Ikh#`Xheb-g>l7CHKT}no`BR){6g~>|LvupVlMXT4Q~8fcmOpZD^mb5Mlr!4$>D!I&!_%spIav8!fRaN_ z8woU+uwvE1AG*<&Xj%7OF7(0j9@4+Fr0>CQbpIAQvF^n6!G^=l}MR1ve|2UVYF zsRaf!r&aZMyjatw62 zpwHSv@6;NewM@2wIP1+X9H<-uEH}E$xzJH+r&q!6h9rZ|qA#&X%3Be&0D;}PtPrn1 zkEtjgx|Tu&Lv+OoAD0D^op4OEJo(aLyA#O|BX(oHeo_L?aW6!2Z?uG@f{z*)(g?7- zC6wVB&7*GiE%3P7OIhpfnkefNr%Y&&&;2}WQ8;%`h)=buCr6(eOsKL*I^V4##$o(` z3;|jIh2eM9f%Y{KDr1;|8chH*>m(I-pUzbAQ{Yv|0btf_ELv-0tVorV@G71h_sLYK}Pq216q$|`yRXyogssX%TFCk*L(5-JW@>Jq_- ze2Va1Y~E(E1%hhcmo6k4X5(SvZ0x~J=(^AeMklRlV0l^ZPNYd2 zaM7g_G^rn-bl8|u9+pDfdW{a=TZ&wyH}wc8rzje&=vs$I#RjNC*aAjw3d(3;aS|YZ zTh$$OHog?K8e$_zxO}yHO>P$1&WKIP0PY+!HWmIo$OLEmR zXGbBAQP>>^iq3LvTM-~~L*c0}$qPe3fI8&k{KB< zS%qZErwVwZqB8%avPz`Aum!8jfP0`0Q{>1T3++et-a1_mv(s$OZ)58{MeQmJr?_w> z%QOn|P0J(c)aS2ZI(aHRhm4~jjIj1ww!Dv2Zs2J{DCIMSpFgnZ46IT%HaTq_MJ1d# zZA+OJhln)5DodMP;S957CqmRC6iu~)^2S8yQ>e@ds>D3rdm|E{Jb9L3a+osiLWJ&w zt&dHM}mTGDXq0MLm+YM1K?|V+c4IR&zT(X|}E4 zn1;8IAYeqMa+<1>7k1Om2wU3g6{rrR1us1Hi4a5>4hzxfkC&OZjWZmQ^2w%Aw*wV6~-7(G4O)rEnqjDcjPm=AX?Xj)H{<0wu#XL#dD+&vv5M-ZqhEJ zva=hC%WK>Co4mQ=B)~nWR*)4jZ2429Ugo_yI-C1Aw0{SZr6%_6PR)tanoHe$r+%ib|F&3W!!0hTb=&TN3bugM)a)DsEES9Bs*Y4(KSMNKE5frqjS|JQl8MkBzP$VpDV0r0}f~XrM*T*yUK0r(7 zhTxPeS!5$kx+uy-QyojN5$N(Fupv-Qw?aEx9?H62k)HL=vS3uPhgDLL&|NxejIR9S7kjrq{J7PH4`b;V-#!l@rP!3P9 z8V_q*D*}JI*U=es#nH{^C}+su;ZNz(DVFrr)>yT|2Ec8q4p&-C`xRmcVI%>Jy%_=T z!V~sFw8jOK2%YUqOzp~g(c0oeMIFeVviM@!pC?BCOS>+ zsiM2xo+y~kXfpBD<{y=An?lQqOSenRn(QYr#uSxs?=lXe$RG@Z^SNG~bwvo}onGOV z$KA3C*e9KSt1|KsJgt8DG0ean00V>-p zM7==%I{Sn?dW41okYd@JvSXm&{Wd7{XeC8ZT`-TKSNKB|O6lQ-ZlGz0$x=iJ+b_j+ zl1Gr)MdM7+84{p>qF_3d#|Fd0HAWM@RPIBLZz&dxiY)J2wot_R6j)7Dry&d~fGh8S zBG|6hK7C~R!$S0`7BaNtEgRi*y2mzbJ8kIoOhGVbPMq-&vTK7DHw!)#OSEhKmQ3>X zrb~q)g3ayGSEHyc1xTJwxi+SH6nN$e<@GQ@Mk=Wkj^ov5LNB?kpPb&yfYz|$MUEv! zG*~sVqQ4>=>5sK79cZQ#?QC#iCj5P2u0KOEkh&_pSvwPs5*jsm2zZ|nFwnl(BOJx5PjZ_!XKR82t|mO7 z!o=ZCJ@c5z`3iC$7FN)ai5a|zIS2)ZWXUUd$6N^I6G%hrUQ=duRI9huYXp6t<{B*Z zTMpDwW`!T884(e~!zt1WWAZ>=zoMRQ`g#}#ikb)x4-#@h;BG#Zw7qxHF6>Ev$fDOB z?YN7n%-+W3P1g)jNo{9E@jF$B9U%ve`!ZcW)7oztylMniMp_c#ws3iUyl@98nE9x} zZ#Ynp%k3I#H-kx2H(Z`hh5?!PCjfdO(89F&NAbjTp{ou$?x?qe)`Km}Ixj*v%s^S6 zs%dpVvN06a$&`9aGG9c^jFt{{DZMC@P$YNSs`XPX17=rFY3sJ>$FK|37bcbBl@;!L zMT<}D`_{6#_K?6pjRj~}-g1Nb0Sb+uxcsG?jv|pOR0Lp3nGvZ79lavkw(b*YY7xQ_ z!p##O-5D*I3iByq%hwhQiZAWyR;5Q!H#HdBv`z=6;h>%DmuX@sLg0!qcdm z!$6TiD8KFaOYXLK~M9(l$e>#a@PFMwBJa&5JsZWWLT3y zcP23|Om~#s8GoahNAUvjys)Z_y5*5BO1;_AspQ`r^MFpa_fS|EhvQ?%@_1cx1cz*QbzazP_uP^%#CRX-O z|6Yrg{nHQtC*u z>$RFl6YYy$P$V{Q97pI=%b{!<$7{RvUA|?M^3cV|mSv?HLVYI-p9&BJ_td@wfC4VZ zSL(C$pbv&JDA&miL)~B^O*!5Gu7a)kONnd?h@W;F140Td?SbeGQHmp9hGIvWR(~nW)dvyl;E`^NyxIQ z2y+{kK`_M`h%x0l<)4R82l?UpmQ8!@4o(g`y^J_~sDoW{LBZ1X4kl+uBP!iGsiHlD zX07)bioE6@vAI(?=U|#q7z}_p&{mVlR@g-AM4Ml_W(t_Ka{{Z-N^lJoBWdq+VT6_y ztOUC76cVCvLW(44!f<6BOW|;HR)O z`GuqvQ}hWb^Z_|%h4t$cp=jeXbW6yO;ISfUXqz=&XJ1tm?qYq@*>Fe9Wb9GYwQanv z_wYF=MIFW3&3Kg+{RuO0kf1k9w2d?xr;B3-E(@K9;u#z8BrV95+&@hn+bEw55u;QXa@-gWu{pCbmZhdq`fYv#^VLk7{QjF%F z_CO+PYLGTVsak>#;_rxN*-W3AXfnM* z=L&PXz^sWh>4az4Cu$`D<=c8atb&6weDW&MX!*UbWAbRzCXdJ#8$PV1Z-gL9|576B zOYSFrg!Aa^f?Gg=%qQfHx(`G8{wa~w6$M4lv@b;gghn5Q!`3%9zm&+l&b1xfh*9m4 z0uoGmqb6AE%cGF;0b%b1kS3iKQNyanf~8#Vp*){_6|3DXOY zi3v#QEJqm9b+lneG=Y^1%imN`TZM(K%hBt42ilCO+G11_eaSRatTwv<|CmqytVGgf z+ANy{@f=**Utm#o2W`lwYZl;(S)c2TM3df#+{k419RzQ$PP{Fnp+;Zo63n#5I~w6n zj$097GV({6v(R(y$4^3Vk2Eh*dAnI^ujbPHp5GF!&xVa|hvK)zOKhD4xPm z_IDxI;kwc0T&V9|{U`#|KN)$s`97@;Y#D@tY?jVSgHT!??Z7IAR+ufD@lw)Cs9DOU zqpiyHx(q$9P~l3}`-jtEDzI7CEX+j-gfZ2KsM%1;%;k(6P-@5M_f) z!?;uEjiP}`KD}KTa($jLUi#+sVF+XuXUgy4=`8nLXTHdwST_q=ZkJJdcj2RUOj~SS zo>O&mV%H6R;#Q5Z+>GWLq)*GiDyeImuZ{@)4#SdT9=@8QWwOTL5S`wc!~9&t)92I$ z3-7mGz0;nkqfzD<=LsR{r_*Ji5Yo!Ho-8El6g|^*Mwd+MjDDB4GGpLRxWO}{OYhG% zvIQofb$23HCXYGmj87Y}qwpQ&RxHT_g?q2b$m^P}syx|Kts08|V4twoS~wBt;+8F> zAFdy`o}M(D-W+MwYnI#wlsfF+8CSZeV$1lJ$!=)_%HBpYMrG*2_XrzlZ#6zuJ}ra& z2f`LwXa)o3`VDf65YsvcooyK$dCB;f@`Hqf>@B)d!%@+*x{n`Oc)8n4<;uWz6roL` z?50&dSg(Rk=c!DpR?m~7KMG-k5JEz_7Lr`M^+Ip*+K&Dccp#Zq*>cghMt60AK6MBlc3q94^ zW7X}qC*2c0w(u#Fj4Uz09B}aJ9Jf_sc&w6Mp|HTdkbgEtxPo7x@q&3_nF?X#r$iRZ zZSbTga=_GYzU!gVS(`-B*@{`!MYh5qlDUl`9ft1~YLTY-lx{+Sf9Z+j8 z#Uv_(1j~e7!HCMV3=UrMyM1RNw0esj%MfMoLzcgQXCcv_F&SJR!VkN-C20AS$d0Ey zi}_Z{--#l$aOf$F<-N)>|eJqyR{}Kx#Lj0=XOA zdXTVY6s4XL*G+dqKns=0;LfG`WP>1TSAJ~Iv%Q`E{tumih~>#+$n4d%@W#)Y-}f?b|G{bt`G=g z2SXqpSxkK;qsaR_5xN$4fiud32IPa88VEGm7KOy6^<&2}bUD-k(=%~oLJWH_m_KNH z*i(^Fe^OZmAupt$OmmIyDS>*qU4%V5ZQM^P3oS7sO7Dzj6Y?@ZT+^wf6>8W>k<61j z6ncWG14D5<8KswP7`Mu#z1fW*lM*T_V8xVV`98AK+|vk4VCYYHOE3>2ugz$CS`n=} z4=-cU8z>doL0cv(!MM7v%zYDrdL%}Nn1*#k*(MvOpYG|Isjz4yNZ&>#!uLKh#g^{3 z%NVkR9GgNv6^?OHffb@Da?o{Kx?a|==u{^~n%+b<1xBk87tEk2IG^$Kxn_6N@CE7d z&YLps6so1n7|~zO)+rrmyk6F*Y4fed*BV(X%d1nV1M#%O!d)GFVwn}9#DVs6xoajy zE59z_YKs?c9fsg{Oq=fi?ZU$fdvp}-OV<+cm3>=Q+@ue(GuT^oICM#!A}YJ}GQ`Z< zLHe}c)W9%8ve0`*wK`Zjho?3fWyOy~#@)J(&|8orth>5Lq#sUnL}s))z^MiA0akc4 zrr&k*UprY43^M((T|wN;UQ%*pa$Hew0Or}3Qj$j2wgMkeCeY~x{0f_#?gHXhwoI6{ z={3-H4uOWwF>{PmS#^q6O(skeuB=NMpdH!?d&*2keYVxZn&QCmk0 zT|t&mvw|(zI9rCghz-A6d$y5#9JnklS)@VRvMt+J0Wys<%xS`~+F+$)s4^vkNDz=&x*Rd&}t0NK|TwvmCcYzHoV&N*xe?tdlSb7t%#8Q$ufa z+jP|m_lAxrkt}bt)=GkZmzmDQh}-Djqz0~tLMDXTht+)|)%d}DYc`GMMG{xxagGzw z3PkAaASEaRJZ)d}!A|HRnd#J}lBd@-8Bh5xp;kf@_~y3>%jpr&G%1#Xgeu2A4HgnO z)DKM-=`scjr=rV>lyt1~8&G1{5k-*Cv4bQSqhCqqgM+kDXJwfak3}{N)yZSy!_Ym$ z>_x+=zq*bm82EvgQ!$^ccOjMk^?m@59T$(wv33Hd6|;4f^yxO@Sw^s_{NTcrMQh1cLqU<>3f15xU$Cr9k~N z3l%TYMb+A(dO?%%NsI|ImO-NWF^ZT_H>%TqqcGi0u|#gHXgTZT1be*PI||gKTT)Jtr2Es+gB6^PI691NPSg5eDfz-jZ^dyKUWY53A%YKcGfRc6bqL{q5%vaCN3K_g=sEAc@z|s$On$}#MD+^NO%fS7+DrVNZl&jm5RcYZ!>AO zMaH%>Az}?++1SI_g`%G{{-?}kmohF3wnw+BrK>bG2|Gc!0;2=9QE%7;S>lwRX&9xiB6kEGGRh}PXc^g#jCKXKgM!; zd=pS=5nbsKWTMF^>9g{b;qlYFbCM$ra6#Wd^X&!(6_cbcvLgC#DZfvfZO}<3^h?GJ zzE&eNInzz4=eki|B#57Be*op@C_NDmlIA0}j3qL-Dzw z8Tf<+W2dgd1T;Yk8Zixns0%{WrU3DY(8Wo?kgwwOjsp=4J=M*Tw&c{ z;+FGPI7s?PIV7QtK#|f!==8Bc8;IAY-wCO#VXRF>_T&(szh!;}=zbXi|H`SBQU%f5 zn&EmO922+7gTaN2)B>)pLK3@8j7jzjb$KgPB?xU#lQ)P4rAZL!YQjRVBR~zolFX^- zx_N9!U{8@M*X6`c%b)06!c1Vx4!Q;5gXY7d1Xu?1yAxyI^Wsa$q>_nTu-Kkpf>@hY?-iaKxSAm2s3uo zq;(NeKqX!t{>^TX$V#+>c9Rab!R&#?gwTkh8=;XWvN<5K(g*dhzRHDDc1v`g^3R$m=j{Qblc~$e;Oikijz;@LSH0|ghp*eW4I7!23u!Sl zHgy~Xuh;shpcY*a0YulV?>f;oxLtS>(S9xqT@2m)_>QHH^?;hh_4Tdl0h1tZ#oV{^r&>px zkOxYaq~sCQX5LVN2Ympf=aE>k@nH(M3Tn9{)H#DS^-*TOuyc{#IA6+lvWL_cwy}IM z9C}8l$yVOtI6!PSuj%-LA zLfFr6UFH`FNVCy>!^X)Zci_0mcC~KanY3~?mXK)NDcAHJ;J8YP?(}Yw<+!p!&4~fSVMMG3R{(MHpEuL}HT;)? zTkwE}@<#s@2+YBRfh!9UL7}?!@iO;vf}PYdNjo#U+-xXAzL+}I-s*&(1IRD)}S zY-7-Jf_5R?7xHeVmn4I_J)&18c(JCDNiE&(Sgvf7E|%N4I54Rr0;qQR277><#J1T+K632v0#DV@h}}d!6T+$kWZoqQFiW2iA=5y z()G^0>4=zgJ;I@BdpEz<`)vvwE&@`DI~ksW9$}ET#DwTC_nB{*tjok{n06Rl++UJ^ zklr_%u51?+>M<9IdZvlGl2}t216(FhP9rLe_`Y zXj5Nit{|j3s8MGjXc^(XEGW(!@+2mCXSYbaagaK7dHtBGEi_b<&Bu8}6R4zANZ0G3 z>liJcc>QB~rxFqswaYJX$dAz*G5;5r;y>E04IbxPTpQj&5X1{%=oGD^TM7IlgFv=f zioF$M0@#egohdxRvEvxh)@K}xK4>{>va%nX6T|N&LZ|=Gj>cuYgVUCws7=D%)FKka zM|yA+tti-ubkjc#ERW|8A5Wi4Vls!p4t%ftyHAh|o0d~Na?hyA7t?Y=x!7|`<#0la z>8Vi{K~)zFeb^8XX{@s4bee9SVhKSc6Ig*gg7fW9vthmZF&;UpQYXPx*uK=4z*Y2$ zv!_VtjZIOT4k7^i>%1yiPQi5LX?)gQfV)<4wjx4#82NW+RmGy?wvg;gqu6i(^e>DK zA-B{R9`x_ijAQxWFKFd0j7-YB3LRfaf7>vHaRtbuGEF3`zQ0N&O}<{AsOVG(Xj)^N zB9@_3#xSx`kv9~0FNB1-V72b!I4b!x*WiY+X74-DB+}`1x>v^?uk&xeO&cQI0SCY| zNjv1v&@^$ymFSF$$ChCw4ycV6Vw7dj6K{G8yGtnf*)kogWH`jePne*gQ@{&rLqb?~ zf6Mw9S&t@cZVIK=UKmOL>c(Ul!*`Ih!3(|OwTUQ=^B0*LKQHPpPT(p%EvF)M?!oF* zJm7&0Fq11pa|*0(w)R5dYQ)7bGzKFL{lJUo1jiPpCXp~0jv zPOoyEr;;|%NLRqN7s*nTOvv|r^k%DI87+qUi8Lt$hbZ1R>!xE&OrA~$GLo;+7TK~X zM;c%XY|f^P3F+y~Upk^^ZTbb@GH7oI|E(#7#4%H!$L5Q}JNzxMX0BseoD6CKn)GWAPZ&|yfdKQx|338u7GgpT0LQh|# zh1e9StnOI04MftwAj3fx1~$*^N!lNsW0icFP-mbg0qeU5qxOA z?Ac<6p~URlr3VG-oeP^jUS`5&bGMMHYzt}trk7Oa@pI#|fO#;t!geGK;F`k!^}Mqj zNg5znYqfm%ji%e<#)k1CM8my0MXPMREqMAUk-(w?8vq&ya*E5DTyph2E|T-dG)y5G z8_}9XP-E~19R<@%(yQ{QMt2+~u{s|EcTNzzP{?7GVtJ;}h1F#Di0f_UWuknjP%{>} zw`}Z)^mr~j6@FHn1iaL5%&IHy>Vwq%J6A7)W*lkLAnHhxsLI@5iXa6nfI{h=dkdT6s&BBVB1xl!i zdRi1yxzvp1bmXugNpHHTPkkv0RWOlOtyyuwu7X_4t?N46k>!KX!8(Z|jh*dc9dkd*c-BW1qAg_~aE1Oz@ z^@3Io3$0H!qL(TyE<#ry*o~3S3)iOF(UGo{YU3a|&k+B}y(^5BSvc0cYnnuYTdfeJ zSi=nIZ5ciWlyE~gpJ7Qqn)#MP%J~g(!)`C!Lmi>jN_N6ZOBKQ1if_p@%vc8@5Z&D> z#}M-!7V^~YGE{P(5&%D*F)@0!I}{>Wfys7n8L43HWLv{%Hfdmp?c>Kt88Q%{ataMW#8)eG`Owkij*zF(J z;$W_5=)TC-%L*7lP?d?zNOS3IqIdZ%BV4n5O6cWUS6Cg;MQA6Tsgc9MJgjhd(JU2C zOV$pd`=y_m=&fc?&yWqF2~xgZZ!Bo{ESZ3i7O4~cX6P}9$%Zf>rSqT{qo{H`MXh}T zEeE|&o<_-_2edhISNxO4feMw#2S!`b+t7I&R=B&C8?3Xez%`#lex}sZ(Ee7)y!0*m_q(^LOn+bOH>S*z$(sZM63w9-9_WQGfhd^>DG$T zBa8-vl{fw+gtsaT(znyN%eFNN@db^nz7>ksC%iSRf{Vm6+;^~@=w$P@6>g zH!I180C%{eF&oUULe`F+WC%n-gUA_Z7g}^<)I^u_`?TAQfvnQIloAq(7tz}w^M1(S zTi0tnG?mbsXUZvs{#THk(Pz+4wT+duMLKJ6)e%*k%>dAO%g9}WU!J421egr$^`h9KMbzQgc z^tmeIi=LJ-T-$-rfYCok>%bNgXix1+#)%A_iDo1UZaPs8S>%E?S8+BTqCavIrkRVj zv2K;FEmYXrk66U^Q!r*iy^46k&Z_%N?T70 zUud8=g}c_o-nRsrky)CoZ#Ju^Ypo37C^7If4dU#yl+`n zSVev@f}$zO49EdsK$&?bokx>Zisd@e4I#X0tm)T~0GAWrLVel4W&M^ojMs%Y3+)LZ zYX%dRcQxyHnsiZIkU98An2NOR2g(Lo`*q0mtSdhmuZ(D}f7xnNmY^I;lZY;f_J7B> ztali3w28+A2q-@KBrl9aK}1&EHjB|rh)$MifVjj_=k-@tFn!$0`**(?ufx>JzY5T3W*75YL+)zj`pZ;l{ZgWbBo0zu9( zJzX;$$MJ@S@mW+-?c{;4GCGH6zE2Z|rdxEuj+P)V8xz*_b~c14{tqkNZt3&CM=||9&p&Sm+#_}{& zSOwk0ttvA+llgs!ZnX7+NXTbUD~6WR(!v4+GEo*sETb0GO^%rmTMxOnzS~H6nxcbX zX7JK^CFDsksrd9xcmRi@mh_~u6z=IJ)0t0(*18)>=^=?1sLa~U(oaAgiwmCM_ zcNFze>ooYaZCRpksS2*x!~qdy=@n71RVg9&r;@g0PXM%ah5&{@dB1P_E#WuwF|Tggu}E`2HNysmPKh&#D+5@^rVw~!yO*o+}BIn?Icc_Jbs|+Qh zS!mMslRc&6+*U}Rvmrr}F${K{yHkMa(dqu16%%rWT_4Yge~ZB1;wO+43RxTfIsun zgTW*k38K!RK!Af_Rbe)3sp<+Z0(#}%)6CPEfnp{F#<+YEx(+5x6ZO))L+2ggdqyZN zR|7v8MVIKUM4~@x##r4aCxli+MK$PwuBc6re>aTO;Zh_1YS|RVH*_4Z6;8d7xJz`_ zUdZIdf%tXM)thMR7>@3y7=s>JAj3a7s#Q0Vq@D>bn=={(d?REAI?c|KFul^QNW-I1 zNC^P|38?LR8H&+Tc>*g6pb#YZL_0{40?&YAN!xyC{#{R9uA&ai88Sr%n*xQ>t!6@m zK#Pn0Ha(%7Wl@Mt1_K^YT>x0<$x}AeXz!Q$QbXZlL~2GhT}*%ALAu6m57VsrX2?BT4TgaK+GH0jeELg(2GD;-|2)(^zmV^ znDGpqeBs07Fq1W7iu2R~p_}PQU@tl5CG)HU_!N#5nKz>b#n(H$GhOHkdE#8$8k-o^ za@}uTgUjr%F@-9Ar*1VBipq>uqnwq)Su|u&^GCWUfn_%{m+ink(%y)fj+KJPOd*De zgJn4`8lDw;3(V~=+Uic2m8hBt;6Cd6?idtT)Sl2ijPLa>v~Xmu_S34sM3)? zO4N+UWwZwodYQa%=9i$)y&2)W3_&~BpqV1FqRAFcNPER6=%ZJ!SC$d6NQfa1vg_WH z&lN21#+@R7nsGT$R>iN8Mlyf?MA>K3O(ygvl;}F`UK9lJG7D}`dT8kebTJp}(iw`~ zg?lSg67-XMn<9h8N>R&(AH~|e^a8cJf$19@Wd`AUT5V+sf^N4f7Ge+B?sbws*Luv5 zg0tLU6kOJUQ)m^RJkYjSk?tlq+z{`>L?0QCD2VQ!rX<#V5h|Q!grX=zWm+6DWOVi? zyIBL75WG+IwBMkz)8yknS++0+1+&A91KM(_1b7L!_03tOm>Cf*?pb)rj4JkcP*q5U zrs7%cOHD~wPj-!$+m=;`bUf@~#_NLG*OP2^InoVa?Oq7>GUG2a$TX{B7ab`i!W{!} z!qCHPuYgePq51d964X=*l>CP;RQ!Cqe_LOB+>q!E#_bYUf1E%wfH3n7CBF_y#SqN1 z_fPChY8VY2)2yeWSyC0(8imx*D;P^yL+KsFd3Q&~66(PQ5J6EOvuW6oRR40M}IzccUrg5Iw5E|*s z8I_A`!?VsQ>qRDd@0AtPq_=D+2%id;M|d;rlgamfngYf-ttJ~ zV)wRXjEHTYtdd-ZqKxx|0!*Q@>+rz%QRdd&T<_NFM_;0ku&pmTBPHbs*jGcxcrB|y z4fF#khffB*5^i27Y9i<+_gM(Y?6>U`^alC$hC`x_N)ZU?jKBeZOzeBmU0n1Agg`A% z4r4j8p%r4dmiKe3V#^>vq`8$mF6(jlAwWTk*K>>@vZB#I8ua`MrYKfbn z$AlKdpvu$g;1zLA-?ApCkCqckn+dH-sGdFtbkby9-niwUA8ALFdO(B05^FNiiohwd zU%J#yG-uL@j5;Ji3bWA-F&?JlfF~Ae!1)>}7u&pZ zM?1{ta`c-OXSesI@;ziQbn?j~weyC;pw8QRx4Ay8lQ%0YcKoyQ{a4*?BVVfA` zKE70hj^3k3hL7Yt@_yQRnw?|~{E}6(F2tFf!gqnYZ4x{K;T96zGR0?CP|}xDPYfQ7 zfONf;3qklO^-N(aoq^yjOTaQ~!L5w1Cq~3a%h1fg6~p4Ur-}A*Bm&87C3-03*`U^u zO=cEg-uI>b6rp#0i*d6znu;MiUNRJn>c2^iiFgEmiK`(0#waL~F{?l=l4!-ZWwH{H zek5aO@fTPf(X+ab^4>O~@7d5xQ$25UI~7sKB=+rGbL!ezk9VIyY1N=31B zCcsHhOFsssWKZN$<$dCWfsm{uYE`Hzd(t`gO-}UYdF@rI}IWT#pk4x8OhcDT8=4+AMO+F4P^ z=tU5eQiX!>L%P(K^?~7J3JjPB&n>4Z$ag5*_33%QSqAAI53V!58syTA1rK2*KZTL( zy(xT?>poO;IhGhzU3&;ck3v!%!lyG;P}W9{#5yGDghSX;cY$Cg2>03yyOyoQ)RMwc zdh<|$WCSmsOu@pB_2j6kJJBJFX%b^7gU!G|HiLd^%7nZNSOe6xI@ONp=}asG-vL^) zvX=oa16#&)_0WbZYQ@VCJ6&XsU?kT@M}x=4eN%J;4te=Uok}*((_xRT+(vLgEyytg zCF>473;mr(uv=ieBE+Zg!k$#G(D*}+1C#T!CSm^3VG($eo3up7L|PtJtYM|hE=NR(7XH6}x!jBr2!`AsAwr}e4I zkaAC9o1R^PiOl)aOBzTAI`|`+IdK%V0A>mwcU1J5tlMPbDe3Ai2$`lR`=$V24<2L< zb&Q$oH!UZfcZzGCBdlEz8f1)*?qo$Ccg*{ArWi#Nb`H*LNdKDgR@@mCnrg?4cXTR3 zXmG*zP6v23B32T_RVGR>T`@}h(wUmnb~8Me>0Wxwga+5pJNL0GfSFG~supBF3m`QO zQ@_466)QGXH1EBUy`V-Fw>QB_CgN**92Ua7QTAEy{&_%I^}s*hTv7eiec6>Q$R6g^ z-dlV+_gpgTFkTwtiz3RlkcV3~gwcJoI^Yx>vDvW%m1%+mY9a+&rrxX&1q`01Gewu1 z4wzyRhcj9a0Z;8>?oFQMN!l@&g(yrlf-)qy6xGmPt`{YYm5PPfg4m(a%fF4lhZ8GWxGh?5oH+89+9u(D*QJ5hhwFJug>2xH`r-9`+eX*4fO62<{H|r!X z=%(*_MYQFG3IR|qSoq%{5umeFziTkv{)kwYC)WrK_=cs5e&UX@uWx+{p`>r0R0i4v zU7!aiZN`kNAp38&?u>p3Tq83EU?o$$81`YZV-taE>QU|`;BOq|>6+#-_Q5vY{ zBFHLi>3yjC7E8_(hAtel%+-CJeu6A)aq%8vju4(cS8&3OjWK-gLW9a7Gl@1X&0h+Y z?MpLqA`H%N!U|?!MmO0|I1&`x?`3yktpWLY85CiHqy8V>gh+Qo9wX(NL3gE96HXj$6w-B^mzxt6*`c=^tmiwFal$l zTi(Mzi7~lU8w&ZBfk6%%S~CHagVVB-+-kCO7~4YwqNSS@a65*Zu3mtFY+JSv!!5FJ zrc2AvE9Ap{C(~b|+-=LQqn`m=Ph=$TrTwOpc`4>pSe-22EBv6}sZA^lx4e!u#Yf-` znYT$@?k!8mN}#V=OuC3GqqDh&JX>CyA7sn)k1nMJYhusL2vDu85N~T^doUCYLBIS$ zLdXm?94b&vhi+}X68(_63i7ev}azsHe*H5*?JU z>6JyXX43#@%eFq>=-jAQpn3pJ(?|FHM7<;Z!l#mUswIw>i%=^Bior~?)`Tu;7Ic4t zWz=Oi(LD5_msD7M32;t7EHx(MwaAU>l^w?A)4@a&hoBvL=~mfBU$7Pdt;|(e)^ADw zI`hu@oVqvF?x$5J5ZLLEqRv5Y9;M7mlURRZ!`=e+g`5Z)^c#XA0gQy=$VI0{=UF#s z8faW6)Dfwg7vS+^`i9=)(7YnDz2%;57Y?l(^7RT$jLL(=v5?#rqS$T^`6;tVvN#jh z?LzsYNpEPYRoU^3W$?!7x2`seQT}Xw@dZ8y#7buM4E*IZt#mFxqE`oXfNM4bg?AQm zC>@Hps-u|fg1KOd9$!4I0fAQ1^LDe4 zg*#{xbyGPuovEl}GVyHI-C(^0iuZl4@S`-U2MqN;-gy11X#xutq$u#{==ps%nhlAJ ziHY=~Z8`*^WmbzVi&QH}&R^4%B*`pinZNwR8r$tIfk#Ls&_r6n#cT6*}6@?Ayj`B5+CX93wvsZ527A zPCp7n9#8G7$7wR0+2+J~(L}FI*_3Kby0-O@(k95*vxOCO?{<`-GD<%=Lelz{^_>fu z+lXsp@TOVn^=PYRi4;vtwJMdM`0OLIX<|b{(F~@@`NYD^-b)K_CKoqk#9J*9`9^DUG>WfFQl+7s$IVT{uHHqf{iIxPD0d1QND0lnC3FE z#gWOBwN&t{9aL!AQnFjWH=;V=9;R|rpaKQ?N^Z;1(NB!}#I4$9uyiv8ZVGO_o0K!k zJS{V*W6MZkccc}&H5&QX{}yDW8Cy( zTKRqE)5phTcoPI(jU0eb7y~i4JWf9(qO;dmwK9ws7Trb&7zO+9qyfjWEBnfpP#BBM zVkWa$G!#VAU6*o4dHP(zn72MM+)QdP8D#WxY0)=0_M_Z6F6myPP`My9_O!Uv%e<6L z&X;wTiRS1W$QWcH)nbDQ+K)xE`l7ogh;`auLcI>sJM(mgEl>F>GTan zfIQUEoxj$xro9rzKpk>7irvs1fP$rh`2b_LBn0}3*oZz{R#2}^9=;NYcN>Ou@;g~XTw)J@n$ta|o)@?#N<0QT9 zA3G;K;RHOG<$f{Mioe3yYW>@*?>LECuhdm;1} zZ-^NqV-6ACjYDH|>SH-%Se_740UXhGXp-xhv6@QvM>9=kiuC16DytK`xMr#TYP?H= z1iBUhbNeLM5i{|O9yc5LX@fY#ZKx4F%HcYhCYn=)Umb}fqJ+nT!Jy}c1YB^Qj$vD- z3xcL#4KUrA?5l2sc0tBLrg81~q_P-KSCCTap-hYiOq@=Fxj;82q^I`Pprk1bdXU4X z_SK=ggFjqBw!YUWh@qa6Z{>wR%0!v9Rbf_CEB%pW_U5x>CuCAP)qn13ccyon$%nz) zBBTGb>g0syXgE-6yNvhhFw%K-hRbblZ;eLGTg%I5+NzDY0tPL)U7-g>A$svWe~DYk zeY4lMTWvRd4Oy3-#%^84!8U6|fmPCJ6H1B#`xPu+9h$hWOq2vM=;q?y2$X-~GbB4I-)^;jqKiuA1)2=>gK$Ee5E>Eh+Utdgk%|{Raj%{QQS^td z5zk0*v&!8$E+ZZZ{j&`aQHa%^hAT)B(1SNdqjS8F8g{6Yi>6(FjLk^IVI;VQ|HGD zVESf7nXz|-i_O>5Q@LP{-Py|1lyB%Z8i>>>+|+fqLw@0gFcK&W1WY=*$kR;^cg~d8 zFvS_ioSyc&7;+d84lKs)ca{-yRc5-pWld*xe^7EK$xH((NZv*G_H|4xPk!CX#o3QR z=EgA!N~5XlmAs4(w8Fe)GJD;CpzSH0%p_q#5v1xH@Mtn#3Z`M)wNYSW5)iDWwg0k> ze!Xe0>nZB#wp@5V5**1*4wC*id2Jn^r;RAwD(gA}40yC09Ag<}QqRw+_!MnIlksw^ zL1SA{jh6pm21;>HIf6P zoc&FaT%ir!HQfa(d$FfB5kEYAc2{w+4VGS6)Bs(AL(dbT3g#DtE#)DS*T3jCyeZG6 zO(%nq;BMNq@O3$HU3uNNkmYvmODQdFT^WV(Bui1PatfsaH9PID(2DJ;g6+%T^o3_R zRgxEh&bxDjxY91pv>`63aN2!tyyR*oS$Ft*FT|^Dekm1J=#*WwR#IhV14%oX3LVkd6ug@T7M&Vaud(UEfcUbm2L+eg$64nMH(iE9 zis=ggkLhV1Ix_l?0(sj08Zo;%@q;-NTCX|j%sXEufDS4eJ^A!>&Gg)i7({Q~sUSS# zWX`Y|(LDK{RIUdZ*pHFGB}O9TT}@wGcci9OpV}9#ETnoa#8(MLWPZ>`aggG3GWYLG zks-u*82i%=a(cpP{aGUYx#9S(T(NsbDiv|=bDqc+WsmsA|2x#oU zahM{hx*>Fe0L7+2ZK7aTFPeVxN|`Oe3p~lyxmK)PNJjg27v3tUB(0zP@Q3I7KmL;+ zeRrSv15@F8!bpGm-5>q<{P65Q(ZBzT@qH6*`k#N{ANyN(kqdyx@4eLAq=zC-RYyHW; zv>4@QB20gJzJGrB-SwUS+W*z6VE^oB4=aesWCG>=)I;{;Fkv6HPJwg8hH}AOGh+`rdc{^v{0$ zP51}j{Fndg2j9%E|Mf@TjBozpd*d(955M_~pZxeo-~9OB{@|OB|9^b^H@4m9hd=t} z2jAD4_4S)HmIc2|ipxjS? z`qN+0VEbilv48iSKmWmgpJFfR9}0UKPWs=^`pJ*&41P(r{qbL%?|tt#$+i7sy}s}K z>{|Y|)56hyGHJi`)4zRX-}$+M+j|ecLAULE??>n7fA-h^uz#jq_-EfWfII&DZ}IE? z#lTejEBoWW*)RS3qcHc=-^-8r1yMZ~{`W&R@BHYWeD`}gF&OsuUw&bk{ts`L|M@5H zZ-327{rtMWV*i=+Biu$Nsd{n_uJ)YwNj0_~J*rv)lx-edkK0$fA* z5|N=_180B!mp}e9bV`4Y%KT4%8D#wdO8o&!{Q*k-0ZRP=O8o&!{Q*k-0ZRP=O8w2C z)Gs8ae)Qcx{l4w}pZv(o^e^SJe&b*M!avsg|Ni*lpX{So_p5*RBkkdzpI`X9pMB`B z{)OJt`q#2<`q7x0^S}Sucjr4fKmDVB_nikizVly)U;6YvAKcJ5$=CM%%rBj1jej`4|0DV4KmVBt{`#9A{mDMRg1Qj4gX>J8XIdtWwfAZP^ZGvVUg7ZsVgl^m1@}+say%s-DFZ?R$YZ+n#)^8r~ z%8U&NADXOXD#IOTZNixb2YUA)%qu(YSp5wqciajJcMUo;I2B;}L<3C^9UAP*J6l^i z(%2WxjXY^pgW-NcKGYd5f>6`h@cM=x3+9Gk-2tT!2uLCR^gg=jSFrK86MY<~&CjiL z%2Y&4sZc{bam!{9a{U^h{MCA?$AkR}2K#5<{Wp5=-~40UhClmH5`X=-WBu8;$*}Xk zfA@Qegmi9y`Tqat835h)@BZ-TM&OV5gYSRyqakZ@zq@|rAO7f{D%p zed*SJ|L%{z`M2XQf1_#nj{?g6p)L3waM^#$6Z|GW_xprF_{sg9U&&o+05zXtICD~mPvADI z_rh&|^c8Rb3fP7 zXS`?dX7zp-TzD#)3hfzEb(zMqhED@g1tpT^nP5nL#zv@@T;&LAN`h3q#dm4wPv8VWcsiosA(`KW@YR z96EGWSr)S3=Acd3R1Rq=UjmY`^`uubeTqiQe8M~sm<4M;M%SwE zX1(+yMg78&9zkn>8W9E(_|v?DKTEiIx9#%ib)LtosqZ$uvpwnJn^1i@NXGPaGmLT5 z_+m|rBk8LOI;ciKJr{E4+Oh`m@grB9A%qA^Uxo!IP3F@NjAw&kztZ-xuF*BO7V@GP zwoGnUUI=7|g20uD%k*0?>mU8bToS-yAIBAOG9&=YR2w6@$M+T=_44^5=i?JpQj1#Q&c^8P8Ds ztU&nl8mvs%cmLvh{1t)u5A@GIUOxW&-~Xjg`2C@xfA^g~e*49v@V375)8DCj_F&O( zs^kAB^mP9L;QjylHv&-K`5!sk|LynpKfnJ<2m3p}>h^zMSK{v~kMhrU}6$%P^J_BfJy^s7QTVARq$!;XxzUVQX&reuFZ8rJfwKhMPe23-BWeE*+(Z~W-brk?iy`ak~9p9Sn%_rr63ZXo`_ zH~*!q-8X+Oc)rGue*D1tZ~Y!D2HD&D?MHvZYySt|{3}8LgZujHfAC-Zd-Nau>_`8? zUj7e1`2KJ1L;Ag@A%0uD`;KA!^|q$J^V;6;qsQfUEaLs`>S@1+lG5*xF8F=ij{ki8 zTU5A2`ur2%)Jh3=1G8aIJ%)30$~*pU{>_i#C*0nCBXNRsMq3k&p#^ixWw;K<1+6dI z98kB&)l82HRr@Gv^KqpN{~gPaS!OC;J`%0~D2sC;;+t6x5=ltnqX=ukVkQhS__REu z@g9D{8ty7_92-fC2T|*z&=0vbqi&niF9oe`L2#;Hm!7bAt?(p6oy|mZM~U1+HHMJU z$j%tI%BXQBm^@(YNEHS{2$7;z!64znHaWB4$AxO5Lo0|3JM`UfuPrG5hac`Mt{k1Q z&BHjLe5j&S)DddUF`_{>?YH$>^iR>UMRXPP*Q93G*+x_+-vY&ka>%abWj#$^}dw;{o z@|T-M|3Yg#e{s8UFETx4D^7ha?T|U@Nt2SuSJya9aD~cgsUAy?-EgeG2d63PO}n z)6OB2rnSlK<*WYLhuL;?P~xXGMbZ%;74=z+WdHR(=8t~2m~Z^>Uz-j1Ps!Q*iyxkU zqcimiCqMXeA=GbP!}aT8{0I6~{KxjIeqpTPJ1>p- zYsQNX@t<-le(<#|Jk-~}{yo~HzuQ)?|JbFWs2hxIN8d(8Q2b|%Hb3ZkhOmvY;CHkp z5VGuHWET~Ju8HD0)WsK30U0L~W{34ACTP4Xa=vhOc2qLjhS{vj=w!?9D6|OMg^$oO z^h@ZgI3ZRf>Spc3XCrz)yQc;84XA3R2=&>9V&3K3XGf;osCsT%VL8(`MgXKWsz3ST zYTKiF!TVT$yEXZ$h3F0b#aZ9gj{Y^~JtVHV}$$xU#=;p_gtTs&vhR z-)zO5eu&%d*pF!#HCjYyQqh%?76kd*d#!yqTuQWkMNxx;0EV4N#bTWr_Po~`aNk>7 zDG6Fy@IFogSM?+S(G6?EMv(ofHfHgwkQzW(*VQ8#PZ$kgxI*{=ZH2@wJ`5wExI_({ zeF$jSB7`_WX9|(AM+*f8Vc0kgy)mf~x>I;SmYu5MD+#nUHJ0Dq*mx>y@WFPq$ZjQM zh1KIbFvMz-tQb=+80*>~b4MrjnI#yV#=Ieo%J{#ISs>bq2{Q^ylWd+S5Yokr(nrq0 zRH5HmQRmf1BvKv6rU^rl=(C-`=LVLo5O=ON=fF);%i9a$^~wqXV+{$>v$yO1tjI^O zL&omg=f|cE4&{7&J2`*YS@Hhz-}}ufyplp&$o1i_KR!R-PqxVMP5=HcXOFH@f``p= z^xB{TF?v7Gwy}~j{GIua-Tbqdcx78eEU+ zTRrIKr%Hc*{(LX&b-d+sytnk#{_t@~$_mS1GEffx##lUqZ$#oAzLmqj{q9NxAB_0l zTQ=nKtG?foW)~m<@`pG62$J~Z@AK-)aVlsO{3$fao*M|EesXsBFmB$Ay9nzCuimuu zUOo`-ok9k--dmz9JQ5YcoAUVlq|fiKROBX(a47qe{j;m5`CIDTy3_&J5*YUB`BMp9 z+}f;v&};WvwatF_)6Xg02e+*LKtNsGm>crw)z8}Iw;JHOv|I@AJCiLN+cSwF)vRHS z1Tj!0PVHlSt3u8vmF_85FD_;chEyO2h0_^H~>aoy|6mp2cJyh5bU9Z7nQGV$UAya=6Q73};q<6`*`vGKS3WEC7s zPwpve(%i76v&FQD`$-=ng{Bw-CRYb>HG}S}yjz*)muKS?5^VSRv(vi2gLP{^LF@J< z7PWi%-K)=bf4Ihb`2Fs4N>}*wP;RF$-h_W(eaoe)q+Z?c{&Di`v53w+_G-rsyZ`9N z<)X%i0IWIq+aI5t?@y$U{`?u?pO|iapl;r)M+pTJ%ZgW$tva=sw z^M)Dl=lQqiC-}=pS2Fp!py)Q_nadO-_ZY8oFF$blcz=8j@rxJVVwdN@Os89}^5~A7 zKVbvjsh;PiR>3L$?P3w1J@{|lY;4&NKRlg3NNfyO<^L|O7r(Vi()7U}zob|F_!j`V zSQT}vq4ddxwr*9Q zNmj3%tc^mioK`kDIdUq92 z84u90PKLA*u2c88p~@J6d4aH!Hf3y7Zn=?$$*CaC6xucN-53=}#Za`%`1>vC$Cg>r ztCD&qXHwvi3aGE>YHAu%?M~I2e>^!IbL{?f{_Oc(6jS&V6%%C}9ES_3b?IQ$vlrrU z-ERQnI2H5rQ3N=xU!Tn*qX^QRyuF|&ml70?>ZW17;E;#6V+!7)oJ4`#MSUE(yB|3k z@gXEssoGW&(K@mP2&jB!7A@ha>fm*Y5*I&4LZu$&z$D!yLg!b3NH@wYzgh^85R+Lr zI04a=8P)7kq$y<>_o>V&;b~urnZ5+l zIFclSKY)cQhcRn-4~Kyg3JXg)M?-3_#3(ime67joQCBM6`atO!b*?_gqH16(nyG`- zAQPK`Ey|&%BK3BOi1AGuh((g_5NkiDn3ZLH+%j-fgh7OyJKgu9f)}rXu2>PdG9pnIU|V&?Znx#%(-RYgOBaa#={lDro>Ke=~d} zU0tnqBO0kGkR6k10$H}lxUtDV@%JwN@Uo3p zrhjc_ObC(saQ6*n+yL%A+ez#8FRteU>n~Z*cjr>ccma@hs}FR97xk8I(x#>kaEV?V z4dHo5_vmhi@hK&huY$f`VYhI(KYxa!`+8lYRUIGyJrbDn_2}-$4A0)}S<5B6j65E0 z*CV|0Z|2hKR^i@oNx%G`YZF#qK)-#8H{+fJ_iZu#w=^INtOqi(uOW5`oXrwp zEHqeXeuP@}u_YQtml|yf$~p4c#}Z+R!l;M~rfAh9KjKU-1(KQvH7)s##2nFZV0EwT zZ&)#lotgX^W+kE1CcUX;WHl6+qses*`zbgXRx9jPIIB7^=nP{R!>UyyPaz?jL#VA% zTh{22;USasQ)5K&HY&KmZQ?hNB=rq2|3YEIB@A8`F0jCm9e7 zWJ8Wy@>W;lqDnQzFi7WJ82YU?MuU;6MHZu&D6EZ>HNPd+lByBLT-v6dq(P2-{hlxe zb&>5D#_gzUM0ouIg#{Ck9Jk&P8G(ok@(IHcj@1O%bb^@0uy{(a<%A-gwquzsD5-r3 zvzU!wtgjH;TyPW?W8sOULvi8kVEtOV66*=yE#CZXe}4Le_ha|%vpG-iV6eGQ*kF5H z|2}W4tk~7Pq<5aYxb#S`@$$~z8(`JlJk57X{(UhacjqH~=-ZU-y_Md0*IK+AXZ6z^ z&*!7%9KXK&Ieu0@J-O6DZ=Hd>mu+~@dCJ&xunCTMr!4n{(9$HVD>J0nolC|a33}*k zc4efwIl3Oo0KV+fitvDIn&_ZPq`T1P5Fy|DlI}w1A;N2>-e^!6(?Z-!cVX>hDpXAM z!GRW`JBQLH+F~a~J=cYwkGVj48}eQIDaldl4Kg(nR#02E#fQGg=IY5f$gU4c`b>7h z8vBCcb5%&FNdvtK`CunSc+_4s=jcG|I_D(kv;-bTwj@%72q#0m_5(`0SQ5|`9bD0| zF!@kcw&X%qD^b1VMrPO%R7j<`V6@p70Ea0dFKtvxEbSv3YJ=;qR%y}Jnwb0LFu#Hy z9eTLgM4SK|l(*zzq`lDRXnLb&&c>0$K31aEOnh$Bd8jbvOnUa_gAmA;HnMj`P1D16 z3dN8Yk1U4)`l@XlxUD7ZHugSP%+_cNSS%1bpm8n%v;JCg^ys?pM^Eb+hV8yNt@4aN zR-*L5mw$VH@`R%L!97Dca$ZR1*V?sMBciXHv#!L!VSmMlb=JEXWYbWv{_1kaz zsBZRi+~sTz@BUpg)SvG!!9}jICh&Ud4~KCw{+=xi_HiRW_g(JyO96pPq4vd#UoZ9h z!wblklm1%8-}?X${W)v*XS;nrW@O?W^uk+3A>Ou!B++6@)~M-em_$cpqB7OeJ@o;f z)zx%lfFhQb{In`rra2O$90s;TBa*aneGp0y#$2;D!2D2)z=J*-jF@H;soG?nGcmDg z%sH}f!}4n03(z&`oOOrq-pQmqW|qP(xcYSVJG_39(R%_~lniTZ4O_;lE(yAJ(X*BS zi?yu6*(@9HGR#(619{zH)A1`ynKXu{f*nQE5T;XOJ}J5uTDFbB5(z2zlskSrT2o;# zk?XzHqE<~sFC9&h61FyM9KjBiyc5py#qx#(`_M($UNCOO>K-GM$q>e}M03L8SgeNw zv2)B8y|+C`dI;aL41Sz-4qF>cW)~rWAlra#n*33H8b?}c|24-`I4hq&?T>Ns|49-; zSE=onk6z&)np_vPQV(~B7)=L(hl?UA($fjH>L*iI@aQs>`Ri2$_SO3+54hOFk6#J! z@II>m?I&0T`0zN$t%DfFH96C}6c8Rhil1(K2*1%r%iEEftc9GfRSm})vgjbLE!=tN z#p1G0@U@Q&l2{858)8{$=Pob}Gx2?)>?rt4FGGsCgDJ)rq9n1z+29v8s3O$|wOZ0` zio&$`v(d7_pRb77a#7Xgs%A?zkLX5eybX5EX5xVQ^_qnewXtA2D5w^nSNEwcsu4F5 z25mKOR(UtQsx>Z^I#g^MsVwOR4-V_BP<^8j#Mp>ZnnR7{W?6M;CxM8-!jd?=DrCO! zHNbjUc_~|Sud{@ti=Y$xww8BRwagCs6uru}CKWNp_1xx=I+U2O$if)>^yI(@f=Puh z9eP=OMl79ADV5X)6uJtm9rP)&Grw46N~xuc*kONg80KcPrm`V;=v9)c8SGo?wobqD za6)d8LmJLvA{P=fA<*cBMSa+EpR}9HY{PmQW>u(V$C8j)Co9M&<}D*&Lt&J3sT>Kt zx)`wo9>a~7+7Fgvw)NgST7X@iE6quWlbBSD<^o{1Cb)gY7^^yK%CY_wV@Eb;RkH0~%W}YO5cY5chubm)`+$@}DZ=^sg|+ zo67nsV6mal{9&t-zjwA_`z~z5M=WA{Kp%wl_&(`-zmyO8`uQ`a6M0ohzZUi*22Shi8E@Qv^Q-XS&ZX!?TuMKw^o4hk zxPq~mT`;S70a*>kuB681`#MP#Guq#wFvLI zTL{}|bkR#@gM?hmLl8zyuJHu%UK9Q^iXbM`He z+=s)K)@}{9KoIxJ1V%)nQOTG&bej{RO@={622aVy_QEjX>gqXFf-D+#)|JG2HZEau z>*(?0b7z8Bbrn0kvVj*r*p|m(ezZQZTM)GP1UR^=Ey(?pY?+>r*M`c&M4e0af$bSM zsMT39QnSj{=Goa*GQ14Kj(TiEv#fE9jv=CkPiSz$8$|08>1*O@ZR9~TZ44voUyX(?kDxkAb4V%(k?^%bEq_lB-u2p#uBifB!ivJ^FdjKbJhu` zpOOSxZMJ?nsOHQn84qoZy=eG^8dFL&;Qj^~hBs3g?5nIl;+4vkI?$KoEwx~fwRP-s zi9_Ko5cUkOrLpujCf{7_OOM94U~FtwGEq9S*t>GMz32LBg!RbSJgC@93j54 z2T2n%jJcr|pn;RK!olSn{^y!_3sA+F4cDZOPD0pL7{{p)B2u>%N+SeB>QWYr3z`#; zp7+EOZg!N790hWyB{jM{z*H3zj3D7gS0Vh=Og{vw6KyOE3goz zM@vp|nEQ>2%WfH&MNP-i+rUOU2*?SOcuE0uXgEBJy)VKb#}p|<@&B`TW<8W$$94WI1YeQ| z9bgYRKAIt8A6KYL>nM)&^>A zHCDG;IQa<-r{Q&Gb;uI}D&w$in5BE{6i>LHE0c@A4@KL_8nUNOUSqn!(!J8L=xv(e z%391Aa=G*vfq^$d`kR3_i%ECUpI}+uJayhk$;Q=7z?G4eo5SlW*g=wg9WHMU zzx>|q5`*TnZk{(7ayTt-tE88go7zrcSnh%&pS?U^?!AuXE*9(;@V>W`=MZq#v(>Jb zlo^nDZLY2$Z)&el^3>lGF)25NjI3<+H#2*7pH7}2xZ7$NNe=581Tw;R;Es7JEw{{3 zoB@G9E8nk7E<9JksoveO0cf9~Fzw{5o$1pQF^qY1&5y^+$Xw}IrhcV+9xqqyw&et< z@(M1MU~oeuemF)1>T-40uZsVAFQsAnRLQVtc72pG1^IBSuT zahH_lvX8~Ij?-;PHIw6!$897LVs>S@&|=HcKBh;YXF%taaTciM7P&Tg3!MrS7Lq;s(Rd}jWYm=p(b7SB+`7Du z+Df+n@<@ZS*s|sEgo5r}r+p01Do2on07O8$ztzwk3g|1eD>>dkl=>M_q9eg9&3J9b za>zIg9V8jg?YAiEMt#AWPc}qXrgXcsFseG1riHvh$@g8>Gd`uAdo=-KJ+n!iG8wEw zdhcN4KeZAzROFzE#M9?)1HJU7LU>o!IVP(oIBa>I66MgN16!i2sw3Q**3Bm!mV5-w z*RYSBDK{tlw#h5TOau047%urW-N$IoNS87T=blUNA23{?&raEk2{8%y=BImEmSJ)t zgY`mZowq6v7zNMI?X-~A+unx^-IVPO%Vv_@plI22xPS3Fuv7;Vm!3N(?3*J$#t61L zwJNR1vTcyN^^og|BLYiRkk;7nTdlhF#c3O&8^UJn>G1MDJ_>?n@?%+Spe_Bao=Wsv zrZC!Oja++`S79@r^nQ$99 zmb!&)X$6!1nkeb%*>2XCd(4G;6kf8J~M&@DgteC%=i;s4#XMtqk1myo7}Cb z(X1lIGAK0j9c;OoI7A&-%Cm{4q+(-^R@=^m0D7h2UqnctN^q{o#$;Iru??HeHXKTE zwBPXxj{2}EBM`({bnE&`_H5e~UH^OSkvo|ufmIoeRk&HckX#P>wv8W-xlg12LZVFL9r730Ui^Z zkmS*(=-Y3fJf`BPX+hN{K%mSC+2Y5AP_+z1A+oG`YAAktD@4Q-$l%|i2T`1 zs-XL)r=J4x`q+yfxW^xOrF$n-JD+TLZj&9c-@=>kG=0V7li)iEh2yM z(d;kwJMX>!PcQbzKNcmu*FnqA>cP?%_Na)y|KjO8X6gEiwLkg~FJJ%3t3uu%lA6(9 zzxd17&-v1#z<>R^+W1YxA-;!5@V8miKZDq@C_y=(GN}7g;ZzZ$zehmFt0tUwXkn+0ORRSgb`TOI4jqX>^05>}m%zn0SkTjyElVtR zDq1lGua8j_admOaL`(`M!}x(g3t-n*3OLB?b-aQIv6F3Pm=Z*BL1I1CZFMI4w@lr8>yOC?!)Ug*i^CKsCwy!d;*}}MJsR}vI z%#`5LKyS>qk2SQs#1CIZd*v?0#(?0YF$Eqg-I%OqNui}?UcrwsBZCA^M4iZ6a8r&( z?m&cHc0ILZA3H)|BC$f9ggNB%M{j5vl^Mk|?__~6J^u28^1_**o!h|xGr36Zj}Nt4 zb)-K&1!6hXpvcjZRXQFWM?_d6g=dh2`CmuFL9#rjFpYrRmEsZt&RzJ@N+0D_h0LJQ6gA@PFT{brP1wUU3dYlv z2zM6`tG5>3W;KT)KG2ZjwVFnGbYUe=fJGQYWR>_EamE~DWIk7!RkSUv>=>qFOY5!I%bS z6Q{ihZRrryaaM1s_eVv{3#khHEeF?)6S@u{7=mv@obO=^`ukZxT?}VaGKvUr6$23b z6112)4#SrB7Ay2q#M|jCfI@WM$VBAWg*gSKigm*3OlXV6f+l0*iI#HdZm z!sy#_(KZTK3%}aOBFTjz#A#vN4Tpvo`&pgHhn|>q%V+8=G{S~J?GUwDnU74PLwcf?aB{IW z@o-8;+tIW2#sF1a9KC$*>xm4mBZ4X#-_e_vO{2M51bYpE%AUivYT@d2Jhr|=$ASp{ zsMJLZ-|O$LlytS8U{e%N&g9o_hSB&V8^R2{b=U12anER>E4^vmt&*X@B9VWhu(jPW z$+||pg~g=qGCjH=^9GT(EiWSm4n=h`u2aT;m^MkDyefkN?I1bZC%r<5GDC?FzI|-3 zT4ltiIE@FO#c$R4NAOXk6mYCJ8yHEyg zN%|EA{pnFp4`&~7G3z&~g!7LM$3$FQMs?5zRd7bN?x4$R2EWCW?|Ydq!_QMxTy;Q+ zLCYT2(4Rn9lRwyE&K^m-yU0$DB|{>Kn`uP#&_?!$vO@g)zIX(WP7kkGu9+R*Wu@Swn4#+YpDJ0yADT- zn=|Q`R!WqG-&TGzxmjBqE0@sMNy$h5gc5YM$Yu$@Fb_^XlKW(rNBgp8vKIbT`mUKw zTVyIRX16D7plAY7EJUuxOns2Dv}Z#rVNP;!#p;pBRc!5;Fk=<)(4j5QY`hY-T!KIi-kI^9ndF^7 z6oviAJu!lP3kL}=qJyuS#oW%4NkZ%CyI{aG0q~G1gjT0s+pBd$UI|TqLZse%Dz!noln5zwC=9eP2Yo2<;{ zE^wH=OC#=4cCveVv@%*DS&qb*r{acQQuZxmJ+z+2cT126m(AStQ}PD)6W7*VkXg#I zVT*xMmh?Kh{PG_<)swKAcjRITcrC4*PaN94YcSsi4}N^XgP;77ryqRdX2joPpZYkai z)S9gEhy=e$kftUt7c^ z8&pDMnk+GNCR4H)#fP8eMJtW+J#v|+GT>La#T z`#G0TA(i#|L}Ri7DJLf|8wGof4c{?{>k50)qTAr4Rq#@1wzxaS{*?L@Pm1`aG!z9a z7X{oX=@`OLqKBfZ%UVTmepdfI#sa7mawaKs?OF6kqOwnAeQD&n#Ok_7c!9Lp5V^jD z4af32={+T5!$m|y%evOONWlxtUU}ZdYP-k*iPhgE!RI33 zY>aaXzcU+k(G<%|ih_%3w@hsXL+Gs*Wi*j%2l1k=me8E`>4sY;SHrrSA=xGdni$@s z>)pw}i6b^GbeOBPEUMrwch;S5YVL`OCr5Zd+*)gJ?Ha+-N59+cV~a$))l`uAMF8Do z+M8InzHkqdEJyxazZWkzVr8^6@}MhSvuLAapG3s1BLN9^q6>OP%4u}ct4+2pItFzW z${e6;A?-?$Xl_=|MnXDGozmgwf`#3dHl1R z)J!pF8IN%oMojfEU9T|blWx{oofPf(N+m@gbw|{CrRlp!xM-`Tn`_dQk!^8Q#|XFI z%nN|zwH_Q)79?286YPr;FyRlcG6S z@&Y68y!Y|b;rF9T+r82X@o%OT@&iNN-=I^&e_x#%Z_)C1trFt@_$nd(%T+>toFIL+ z60>C%4+%OvhSjY0JG3PLcXx}LzX?cZ-Z+s>*Al=4o1KJTg{A?kL)Z_~?x=+Fa+)XO zId|=s90I^(=@$s-R72kmSLN|q;N{Fr#U<3^x4!F4D%>p9m&2~~17_Mep7=Z3q4UsV z5(VdqrTUtX^O7Unn?h93SJ!`#BlS~|F1uHPBXO-fxQatYxMDL8LMWKph~dOcJ%tXysg4QcU462L35I%gI1cNk09V=;2xN|m(>jA!w# z&fZfNb~;ZkiUuUYW{XMcjOHqW>$z`vRHCMqPD>%w8>oE3CSXUl%Aq;71*nD7cQA<% zx#Lq$^h_7CVoyTIh1^MIh*=k#Xpfq0OM3Au6zYd+A$^w`nLmMYKSs4cXZBeu`uP6a%J5XP8B`n)fNzqFqRXtta6&7?-n0 z*SX2!f%`$S+c*5qQ4>$B~ zQ+K&(!19p4<^&hijm{?ImSgdkK&28wHdxD36#RG8|fv0^ob+SbXQMOGcsmXc$sHQs>w6u0!1f8 zUbJWN6w1{3*oY%ot94=S0hMG!CW00{k%>(j=6*i5s0R^NwYh!Nnw3*7U5_c2DSl%= zx@6y$qn6gw9411q%?jgkamSqsUvKG+BqkZ1Bfp4oAZ10xx3=A7FM?T33~+U&GXTtOgc_uxZ3^g{{IZL7+LGn%?^-NSebcO}yyI?MeNUVF=P>W+%TM-qF{FmMDl=Wd+5spRYLuC$ zBz)OiD-Ym%6Igo$@Z_eiooF+ylPI>nSODm(?)E%ZTj1T6CqGt%vtGBE(!(Z0U3)s| zSa8(0x$h!~=Od;S<6GsLWm<0=wIZBcET}wB**En`gZdGoX?{-s} ze@ztCgaRmeNmNu18FWy_urA&p6hdv7pmUIm@bn37xtfVE1@=$EO=r4k*caUo%p8L?>aTg1f{% z<%->SO04uSdQ#>ZL_Am4ZncGs8$~I1M5wS>$LBrDrU)YivfBAv+BlESAP}-s=VAzx zpu09ph=*zbx^=p1m(NAsch_2;=F7lTg0nBd0DLB65t$;8ineC=n@qsdqe=PMxb|&D zQQCzb>5W)}%D?2i`RH7b4-wtbR}k>lQ`Rg%bb*}5UtB!zmL=m%Z z!ioV#bLhoEKVY3>6VVJrX@iAeqCXTktWS@tfUSapZDWTlNkvS30 zbBT`s5@Pp#ZJSRtMc(S6$W)6&D+qnJZHh$rl-m||waS?7<|_JkVH+#msMe)^t~e<9 z5pJ)K=I~wULvqxzFd2e~>@94YgNwSHi3-N2(}L1YkS8H(M{B~m;d}@t1NgGxGY~ExI|3ugI~Xv|I-_29pp{kBBejgDCV=B-$WwuZ(ncu zn@t_mnSb%Ip4sk!O|gG1sP_HFJfp~uts(sqq$_lC7K8vqYOc!tJw&~CuLK@bpUmo?~P>=P? zM9L$O5FQL?Zu?ZSnXWwz-uE6on4}KDm3*S0mXByESK*nM)3ln~e46VyUT5Dnl~HiU zGhJ}`bJy6)GL@Fr+d5v@Bi2nO&++tv49nA{-}RyS;FOw#{o<7)osE$o*ovOeV5ZLf z97}BuZOEX(l(Z^Yf!);{ zBdZ2&sP#rBDRw=>ba%@k`0c)ZWa1yX4%|mpZuQgti5&BfMaAvw#|*r;`$zK^pC4Y! zV37XK=r7-&@BGr{m+HNK^3I2!F!Z*6{A%Lu3uJpgKU7Xu2xZ5g@ZVp&^YRy;ob${5 z2lnO93w=71_>Bj<{8zo{HyKa!SN-LCuebP96!7j(S+-|j%^PI%KHC3h|JJ_#iEI3S zy`Jq~{-VG5r~N;lRQ+qc(|14JtIvs^eoo%>cRbTyy!f^0#{P?5?jK(r-QPMY8;JOi zAAi(eynH1w`-MNTgZf$=)&ASdf9%MY{`02}@Y{*^zV{secYg@Vyx-kG%Rilm`LcNu ze;AARqnc4+{gnj)K-9O&B*Q5R?ZlNFx_h;}X)7-=B4!vbgstw~Co?tAwGT?PE#I+N zKc}nI2Zc+hi$*5&4Cu6*(?_36so9!0d?;b?9mRK)8%!|gCNtF=Gb90a@i2 z-BYEnt9Fm1S`Y>qX$|YD4SOUXsWdcDRb#p8Avtc+QuT-63NO4tlbX97gzP^X1!T0%&Zn%uF8bNQ5P+jDZnLMbMT{+XX4+*>av zP#v`7>6x!hc0Zn8u5^>>v;LE*f68mu+0)t10ADuYyQ05-BehsUL_CbXYvI-6gRr~x zO!hiD4JVEAxLZ45ecl(P23o*aiV4`1;M;O#T|%x@?a_gm1i;G)$U#k(&qS~yeJZ3+ z`Pe!|Ej1H;YPzz*Tn^Ha#;h6osR8Bhwb0c+*TY^p0#6C$CJm z^#rYV-wjW@9fiX$kr56#iascM)jY?UVjjyn341vA%%RaI2G;NBVpbjI6i&PwF|zci zH0@f+*&%d%GvGrTCQ5K8=lTg0={|GGb0pdutj0MX`r|3sCLF1y_0y(Lh$Dx zRh!&0uRQg_%_ZGqlWESrN4Lk7GjZmQBr1Kvw{xiy^qZ!pMm4N!oRH3DHRQ#tA|s&@ zf`*|r@C)Im6?EZs7A!Ix(XB>J57EFwBR98x1yK#Fa43w(?bIjEl6Bs+nm#b)%o@O; zG@*!KG@9hOGQFb?(8a2F+1G7RU0Z+aglM6u#H50?Sc8;zx5$rn>)X{Q{Mkzh;v4Kk;wx{73!I zPu_Vox8UI#{L|;_vwr`%9sl<3s~`LK!MoR<=c~uEeqkKzZ@%Mj;cJ9%&h@iD`@Mt) zfBLq-@jIbNUoxuq_Z!3Unr}YKE&{SX_|>NqD#W9-tmkzC`ZwPx;Q!2&mRHl;$yLAm zWz$$*U!~uCKgWgn3!nUIzx?f(h;Jc1^Kb8pC$sYJ{!EBac-B%!?jf?$Fx2%;jAJIC9H!$VMqT6wd4^*Uy6X3sr1~* z-^&q9-GwkYm^O+WB`8&5c82A3?=*I-=y(Kj^{7GXi|)%sy;?xDFF%sdg578@E>rCE zf}JCYE$ENuDYVDfT})@xo~UKb%cR?(L~dSgmv-Jl!Y#2WMpT3njX10Bk;c1Cu`0OJ zj=vwp?X~Y!nVsMV5EbEhv9%@+?dfiFK7{h^W8gpg^+)gb^$xI7-tNQwqr<9SJ$RSD z{N=HsPd>CEb^r3g7h^;(pZE|^Vhi5df9Dln$By=|ez1Y^w@L5s2HF0>5)SWi$X@>U zPx>z(;e!AD>Yx6TeG|X(*?9gpPfz^ahd=+oZvDT0OOA4t;T59XMD z*!hgN{P53*AO21f7}DLwWCZm=*vwJ(dMM--sX7I%3+ps{6A~!mRht;pP9&8EN@^61 zuax@IpQU{E<-=8sY-u~{7JdPIQMzg{AeQqm=J;h77=nr@q{E+!q}!_;;Nx!ipJaJ zsF=R*iT;+jlsluhniv*fRpN8^UY0`%SKn4?ZS$dC9@&bRd>836A(Pw=%qk{i5eC8% zJ2T>4zd19azNSoCkP)c)%7vaqMCNQ_WcGuZ1o`Y}d9m)NPebqLqRq&PTDR=3{x8xxeC_UWu&K%n-MjMGwb7mBSh{nc9Kaz}&m8+2}H3mf4M5Xd4Xc$Zo{FtJc-3>yzG_i8R$O#%r{U=7yfZ zRWWRjf`w7>eUQxP*J+UF7KtWA8;n1aG_L9zh zom#k<_kL!`oI>$>B8zzUnV8>IuBw%-V)nY7kMu~t6Xktjcg`C*t*S#1YSEoYI;IxW zLFhQ@?~}he&-{lGwPP#ab?-cSwFZIKR?U7fPlX8~hvoIARa3V9Pm5!18m-q6n#p=H z&LtsFsM~g>wp!k^`)w`H41jU1p35)Bk~FWMC;Xr%?u}VhvDYU97&FQx)j}96p*y+6 z|558HhjvhlbVNqi>2}tHz~9Y3>3Uzm2As^>CyOTZs*6oc{RtLL;6&1u;)gC))i*Aa zqV7GGj+ke5mOi7EG9myoLQ01rfR?`=E$GM~V8{qM8Hb>|K$WInGpq&m+=U4g z&ycb^#zO#xmeBj4>gsP(5}LApE^nEu+a|mbA(}bsjqcgzsV>=hTa0dGpjj|Ys1ccr zr`?^tMLHH`t)4!DyP)oSMN>_U+OaW^vW!~ztbdxtfBD$guL+m@kNwN{MZg5Zer{2W zKc#5N+n&X@J&SL97Jn}(ju3YmRgkGJ)W(VFH%A|O=v^MooqXO9W@h1oil{k~Uz9r| z&R@~8o^&RqM~mKv+snh)beQ~TC=D6X>!4m%T$qm*>TBgESjO@Y%cAFK*98-t38r@KF${RjV&XtLR zn@3yk9t`yn2)}Y19c7Huttbhp;b6)o@fj{Cq@3gob82-6X3k;5xAdpcW6#q;g#qRF zo(f}P8F;I+5-qEe@8Hrc53_CL_mcMfBpiO~P0c*jRXqv-?fnR9(wN7(bWn9FPN1TE)0hNOJ$eWMl zLoc@vN_STpx;8SR-O9A=cxEUC{e8|(?HdU(%(o|RFfp2Hp z;0Oi?Ck~O5r4u}+%}i<_FV?d}MD&C3++aXJ*m}2?y;EP6zHifDvW)nmoI!J~! zb{XU3Ewsf!LjJok?)d1xt^1tXjwN6Gj;A;V@K#IZXiv{hS8(9&rNetnd15SPxH7jL z#q4GKr0;DE2iQ?m%Vgp89K(yAT|UzAM*&-148z-uR*qUGn}ek_b5kc*lmccpQ941Z zUl*xyfVKS3m@&ckdTa%3#G8oa*x_>dB%MS-+xQFyqdssRgcf)OF$`mLD~x| z4bx9CT~ybchKHM}YQn35^A_2i=B%rAEgfD4?U6^K8(3E+mwt)333gNDv`wJm1m-O; zv2mDSB|{lcx{ezoia(`ex|Xs{p@>DwXd&eO=)H?jh15%DVsEvEmp%Qe3@WHL;&Ibi z8IYsYUX3hDEJ$lE``!_W!O4)@n?kISJW%(v9=3N+N!>|ZIJtsS^;2}4Ffv#7Q53Oe zx+#}QI=7JYWjaWO*6r!h9u@67gH9C(1+XU0=}KP+OM=m#j#LPB-Q?!n)?YCx>^TM6 zwe`zJ$Bmn!M44xsA~HGx8r^11$<{GJQxt&7qbPQaY=Sst3q#8W?=J_2Z&vm7pZ807 zN#uQru>BW#7&%Gvvfn38eD$;M{;?~;{BNFOF#G?1D)nIgZ9UlAday4)8*l5u-qwS? zjrafX>%qJ*en!n&On@kEL^$!zS4>eTd<#6DH|1yy1MM57Z`eUhHvv5gZ)&)yhT1lc zG@T%nLAh09YUx5N*~V2RRLfds%D0Up6@WIG7^8C83DiM#gtQ}p^jR#pwKKz`{Sfw} z-oG*JP8jj>%t*R(j=|z{hrsn1<~SS4-R^h2T4AtRYH77F83ad= zajy~jLW}sRKA((mOILKUZ|_>JRw^(UHqQ8gp1tYyG0@)gKQ^K7Hpp=&ZZm~9%fm4Jytu8ndP@Y6>Dn&DJ{liGVrYTW*8^G$M9F- z!5CuM#n;~xF#Ubk5hm304+0M#Vl=)((DYlOke_`2`00!8`UjEt`!mET-*Hp_H#JuO zpS?F-uH(A024Cd{|F|lOsXFuEf3oC3(Xyq_q^taO%b_@$aE<+3FpkvH$jbM{_)T1#b$9~r$w$MkccWHCaI#fND)R5OP3Ozgt7 zWDSC`>6SS~szp(38$rt$YD5^o;-ieC^j4zKGX_WP)ui!($uGVu4%(EEr4uQbZW&W8 zT?9;Ar^Xa%31IhZc0O2X&5AZ5{!4MOcDhxVxoTEKn(Mvv)}zoKmFBETFbIkLM{cm$ zV6p>5M^|f)_*~)Q#zvhY?p-T~zC+;9Ojt+~-N}R4gyp`%wow}#Utvr(plJ#lQ6oEd ztyP~>GSmY>qf_h$!(XyL$1Npl(UPh`WmShsqMMk^9KLayn`1Tb8Ffq%{-FY{$#|mc zO(j40sXTdl4Lh}MB;P41y?)lsnyP;}cVz$d7i6s7D^kFXQUlFJvS zV$7b!SSZDUFzMP0S!)Y<6Il8-)|IA!sn%IUrFtm}Mx=;5yJ2e}j`bqy54lpk^ zbLlDifIkRb=sc7Gt{Ne;>szp%g;T%4f)-ZJ^OC43EseA>hLN&-Q#+Dj zg_{Zw)Wec?&w^JB^qK?puH0eTJAHO zJd~BHzM?3Zfgdy}iQZqKk^z>tTi{))(N}r4pmfAWUQDITBh};JXf!D^0ySZ9lO&gg z>ZyhT-{h!*XQ}h<7x-9Kqp`WAi$n#uZB;3&LHc74*IMDs7vl{TWHjFWdbjF57JJDY zadf%{>bfx^7$iZ|-AVs~3cv#J%ZujOa}ft37plcXTWy*MB1CM4Q?-u#yf}JlO^afC z%L%F(Un3POJ0zCSXQW;R7o>2!v_wFc3I~fo&2&wPHz| z)VdWyg*gg-4wp}I5Tb)giTGGbH`r4`s-lvwPP!xvo6i$oZ0Vyft+kAm>l|8@%K}?w z@}e6R(<~{0JP)AZbgA(g7HGZ9h179=2c;}4o7xrmbex7G3KO54Rwd1*hZ9{kM;n5* zz!6^%&N%>`GL-N^tE`94nq)MYtlXB&L84pdJx)tDRrJGEE;CX}q7b=Y$CG#x_Kl+3 zIyH-!P|gBYf24pz%s1v#w6Jf?X5;(ftQHuKDVL2w_{7#%5;Jk$77Gq*jXhL&WcA#t zd=@6HmGq>r6}3OZP~U*(Y_?-I{sDR12sO1-$E{9+cuYsEII(LFkAs98jz8_#TntS zywk3W?ucDSU@v&mFoSG_0)$iwyM3tDFZATXii1hsEnV*uCrgn!)7yd9CCdv_;XTYC zkmTUW@(cTy7fllgGw-A19Mmv~mrGb|i)`q~(j1R@&VWAB)eIrYjSQm$t)IfTX)H;ZZ1QGdZ&n8~58FF;i<1Z%lXbfH+k!`EYHv zIx^UDB!-^68JuK9RYePdn#crOSS0KdHeS&IQ!yZD+Z(VLrDWI3W+T(A!Kq-^68XZY z`^C<;8F5^vyant8oNeBXJZr+q#btD%SB-cNYbP=cWI^D`s$EeGG?TJFbT+mlpo+M= zD3IdMi-zk55RfSgn2EyhH%yXumD#;?E$I{ojtmTbp-^ea3~S|}$*{p-E8;3?7CWiX zLTi#WqxWLVs5L&qU{c*^6`Ww-qQP;l(npEq^+0mi9&I3|^{ad*0k7dP$IWS38P-z6 z)h8M;EPfjDvdT1J5Gr~yeBl?=M20h>WCDBhy=Wk@-P7e902P=HgOOiKhBcYI&q&mi zlLOd%R&40kz*e{n+XN@k$nk2<_zdW~Ue*))!79f?=zVZxDBla;X32%7R|Sri)r|DB z(l)5rHm2b4J%@wvTycoRfGdTdSlO# z7{ac}HN@GPGGL>7cRj##1L>IU&=fo(oK7pLPn;5g1n{K*13aCM&6|@%5d%j*YVAXs z32sYdKL!O(;bq_|DB8;*1|XAV;3Nl*HWfkm8XE?Fj?8GxT^iUdcqMo`MOX&w+eQ1q zC@Sz$IzkoF8x!!+TPomgZKtkQjDt})y$K#Z4bri3Br3be@vsEkZU@k@2v{q;dhCt` zc8R`T&2>x9^&4JAU%Mr*t#;maTn(PX_SB$iNM2)?r>t^8%VyvuwkF~tk%n524e;?8denJ@CStqAS82(IO0Z$ zmocUq99n8-bV(RdtpV0#0E~8JdOg3;RfcZnz#f-=CcO*uK16{vDA#$_`40K|4ZDqLeu*A7iveA;)j~Z{l zRyZ;VVV{Bns3Ni$Gyx=;OSw9r`hKe61alf&qkp`mn&<5k%+N{w3!I=1& z`6m682{)n|gk$)c*v{2*l5(A>1ooIb&cx*8hRhAGB4Cpb?E$8QzTHSnJ2`)dCvskd z*b{7QfzgW|?o676O%9!Me@k@iVQ+{}fzZ_g1A#3LY^kE`x59x}x zS`)#35G_Vi@QM{&=}=BOyWu$~C&R%sxPTGhN2IAAKsMq0){sQNI+OOkG0wt5A|?$o zsbv~>9w2?!f!d$kZ#{ZaDp7@~`XG(WrU7jr3IskOi9X&U**xLIJK`OhpC~ZTwCOtc z1%d%S8c$pQSxz$!e}WEczoL|}#u zTBxc7Q&E#eq}G!hz>XgnjzE+W*AdeMLjc2t@R~ZBcC42rIvJig%`r}(3<-*vTvc}F z7}w<;fMrw~sFRenf

    -FCZ4e`j(>%!WlTk#BOw}Xa3BA1bwzrT#9T+@UJ)vgEEVprV#IJ zu}f383|?4kP>#*;FcTfI(Wu|42!uoDE*c5<=f}(L5{3{S; zm{JCY$IY2I4QH2`x?*KSfT2$xfs*me{3LonMBNJlN=J%k?S}~5dVGBFIOgoHbMT=+ z(GBkowgb^lR7!f&fcUVku&2Fqj+$-%2rCNg+W-ci2$*HA)dt5p5INhJ(kWPDIb#Ue zfTFlBgoMn(b^xfc0HcU%U<(nO00yUO>(sdysUca8{9t(&t$D32GNY4a)CsZn$Wihk zu;>Nm7?57THjd9y8WA__A1*>LA!8pFUIV@mPJ9vwgvO*Ff}a?0j$#B}62pbd_zYx$ zqs%b(P~mwjz|ux(Lz-i`EWo7(ijFaiZIuY0483rSQx5^KXI^C(f zEVu`RweSX+$;W|(q>;NJ9JG}XloSCl>f}2h32#kIa~0ZLUIyHXjl|PQ zjlD*8>@n%^0aLM8XfEWk!SQ;)71tOgFyf+rQ#gNEL>-0z3|xjckB7mbpboNOk{R}` zmsC6UifgMy!pT-7!-Fg1gc&S(8bvKQJ3w@J<6efn;Fy#d_>#a+0x%NOCin`Ovqad; zQ7{rN%kZgj0k{@;Owh=w?Am~z$pkJlI+mk6!*f1La)bDT#Mr{)NX5cz>v{lZ%A(?& zGiOaa`Gpy-;BN!WruABIubqsgea72i7^`F?1?Clj6E+GQnG^49=fr&^f6fmzhMI|l zXdTGIn+~)m>NYlvZHsSi!X=+ z@?0;AB_Vjx#c+y`lC;C7g)%q=E-O^AAx@X#6P!5WWV0$AR;79LIeMdW?kmZHZZRZE z6$@p9CoQza+r>Al!*z#slajD08i){nPY9)%N35B7yCoty> zSV^I5V`h-zW^!z-sa>r+kxFG!d63T>mYkWN2;%?)5CNx}t}C6S#m!((5y6oAgP_q9 zLs;b^DcN&fS?n_c47~bYIO17JQ&}`ALhv0C_~Ap=yCHZ_89hAY6gh9-Pc$C7;-n64A~CrZ6RWXmd_QN6WS-%1>MZrOtjT)kjJdu&Mu#eIi>*sZcL_{qe zUK=javR|sP1jt9_$gsnEFtTnDZjrf&CTtx#u*8}Ytry8JN1T4W+tkdnEo`)6oW-CK z$F}2qz*nX=)@Os!nM~7hS=dU!6q2e8wrGPg{J888I7;0ct5{6a1?I^O9VIYlG60fR z>N0TKfJ27Ci5X{Y7q0vf)t>qk=f(I`T}bPB{S*kuoY}j zc}Ot`i`}fH-h80&dE|-h@LpE2!UM4CSK8N#FfUFa)F51`oc|?dPYD8(5XQ^N0-)9j zXTcj*1UTJG){}*ds|XE7x8my^;Ab+P3&Lq~cv_;UxF}0F0LShn$K~LuI}1EPeAWPT z&mk%75boTL;6mg)5mY1Q#%M0<`Hvd8oEl!qH_=g9%a#_FM+wtYa0`vCKXtC8(1BikpLPmYv7c_ zg|w}VGR%KwF$X(`j*G>Ts@W8(;86{apJ=bT$x(3FdPAmMoH2k#Sh>Y`Dgwi~Oyh(Y zm{a($NG8+m1{}r0%!oy(oN<7?lYUUI;F^c!#5VbZnHJ34Fo*#%n+)I>L^&8{D+Dfk zBEu9`mF-`N11&i9u=sVIvr&jq5KAoplx*~*wd{t;D@9B&#|ZMF8pag6VIgxb15c(9 zu|qnLsgr`eEH7gk2ADu%ljAtVmX&2sxP6A9dS!9)dX8-2C=IK8Ks7k0Ok)IiRyQlW zvT)6C7JNpSU26FUy`X3Lc463akhe zN`t^rR-gm;PK$s*RADR(wD9 zQl<{f#F1PtgT-Q|iBOt6U2B}>aR?d}qm2aY9tOHG^0(NAtk+w@70px_HZMYtB%9oO ztXIWGVgZ_&ZTJNRpxm3)wjtgzlFjpewxLOn;brJNusjWq1TRm<>qcD7%K}_sgYol< zctHbTAa)i-V&Kt&1@f}rBB?0qSfXcgUJ3_;ZIIa0c+1hP`CcDWqU<6LCaYsj+DPE~ zOHPSLx<-M=o{3-VMoOPh*ane5mXyVkQM6^uE`V@Hl+!Wa)%E1pbqWT+e0)Q(fu^n$vn2-hLa@BJ0N16V^Upp@h2)_6_J~AyZXiCyHNf2wTKPuB1`J8*^-6 zNI5LP3~9#)%m3Wqg@E0J&7D*TeBZatA|OGNlq)Y-FSlBSg8 z;Nk(IX>r*#12dSJ77WXv9=o>q3+W}`Wv#J@B1fO7hB`nCYp<}iJrBvQz*PF_u#wsz zl)@L|Wg3`;E|Qe&qF?G~h8+Y5k4$g7Npc7cV-3un5j?}hNOw~J9xY^d(~c(EQJ7T0 zV(SLeg%F~6L0kb}yisZiM?n#j2c}H`8Wk5<8`vGufCsvmliKO*`EWw0W)ZVQ7#ZM2 zU~7rQ19kwmRb6`Et51$?WCNRAm>;vXMY1cfts#@i17MH=J3B}S^IgNfo~)`1egjeg zuEK-E#|a-lX(AihB=Iap;ooIj1_N`{5ite1MT^!SgBu=5@jw!8x78NMs+Xg{i^> z2MVxF`VF~^xk^TJk**C<4hJ%r6am1&kxM}=Ikpd*3ji7u*G*d7@ZKogr5s{|703owHUJ`8U` z*jae$vt^x>K(F~eBvi!rg&ogq94Gi;^`O#c0R>gyn!-3;E*q@x3;++>H@ecq@(uha zu!mNqN^UR!s8`C{dn@mhVr7P#y!99;DW``_;1t|CDf%+TSqYZ`RVIKO?Gd0O+Lk7$ zfN&|bLys&e2YlNE;wm#u~bj0sIOnCbBERgD?bNE=3 zQgB%2LzpEp>{-BBO41dE%Z7>A7r7G>Oh!fxPA8HF33zW*X(Pc2NRv}Moi#Do@Vu7J zC*2p&8IZYM$(9UkGLsB!-ydDCGf*SLEWk^)H7y*N1jgZ7!YV1j1}(l6_BAjWgpDKX z#)gatdy3mjM8yV0E#1~ zl(Z-ZETX~*gomdGG%Vk+cwrDqRRA8picY{u!XV%tQ?s*_LU9OevAhU5Cv$R5O27fY z4$%m8GpIzZ*z=3(pq7F-#oLwIwF6c9ar*H}Q-nb_>d2~)QcqaKVJs>CZ49@9f zyksn6l(Ak0b4K9NSYb!tOOP6*rx_u+RR~_>GAv`X%rA1kv6Nl9$0yt2Y=z@nkps|& z4orY+O+Y)DJtp-+0ssR}%_PX;WxyMn+3Lj98;t6p47>uiEEQ-_VGFnQvL4~+IHki# z+)+v}V>1H_0qA6o>d0lKX?D)z)Um$ACU2VJVBr$rD`pi;9$~o#pU7|ol9g4!JiOfk zw*ngnTi}IMH&74Mu)KoQOp6*PHStgzg$^-Z&UlgV!i@Qlrz@v0`f zh=eVdPM!G|12n=TQ<=3fi&7aLm#q#`#l}%&nHxKVNo~Ltwvt=Il~%A35%fxbNGt%+ z6~VG*VZ_l2mkQs6j{~5oEb__8LX4KlVCO|@rdPHLz?^gD8OFY>ATujPohR6o#fJprqRkv)kr4XBO5m4?w26*ICWOLlcBue7K4Y`4oW&8( z$*nDkoJwd5M*(MKOu~l4MwbJKXhN|Lq>E=K^PDUFTaN&RS#`6fg<}H@ge&HH68v_y z9Kd_Q_bG=14B!>l%PI%L76fq&JXymtY`j*$Qr{?J95kJF*R9I}1Uo#(RSN?8X)@%mYMv%e|Nd}%4JAsUkfOv>yC9Hre zHI*HpgGCga`oe(+y>zV7;4p@gFgDJBNPxa2N*@;SWD@UWuwq;z#;A2-EH z?SqLtgcT(WvdqD#is4EMu9AfqBRxM%6;xj(nUr}h5hE> zLJ91;bemAIGa3NF;TbPPtP16yU@h^oqQV2q+(*&{Xq05j>`n$K<~zlLsM-|55KfWM za3uq5i#>>axKbOlT^}gJPY;yU5gtmHtK zyFvq;XO3~?COQ1%tZHm?^`5VOa?WHR)>GICM*8BVE`!V1V&AYsy!31$cAjjV8u%sv z2kak_%L2Zqv1Hulcu3<5;3=#^#68N2xRQ%DZYMQZ{fFnsWLyuKjDABSpxj>83Okvr z&|5OjVlEZ{4CYfeL{O5P$JxWHhHnYevI9JFY@45Kvn4K~oR(bXo0B#PMK41I*Mhf% zWrP_=Fb}&C<+5rc9VG%v8iy#1f|Qaqun`FGx;XLVo5dNla7Ho|W&?XL*q}+GAJcGF zWWOPftxWm=gPV1X3onKZ_JKr^#6|LgJ z=*)~+A@6xd;0eoJ5K|!h&+FX~vrGxB*eIUJ=2%$l###=lUPmc*Cq(CZuuVb|;G{^c zq#GsJv4|LI5DLkZ;3JsogH_=cChvLA>@fyr0#E`x6fV-lTniqnaPb_BBR&+?3md`V zy^OgwrKFT#;bI^)IZu73pN2sMuppUfBP}{F%QZPNzbEFt5jL_sO?`p^Y{{$*LLnhQ z&9PAhJh1o-M8cLD3MgP7&)ylS$y=xz5f+wx5*Yztz*NoL-cH=4U~YE)+CeKUIxlwty-5>TX=}bu3NUKF{esmRcaM? zwghAsr6IzN zbZL0_z9dswj=BzU&AP)T)6^KhW{(pVqOqV@NUVud&)yZjtW*Iu1G9ca4ut4M8b3^C z%K>Y<%yxz94K6C)$N|J$Ddx1DwlDrzOHX0<%Kx3uwoLJQQR@J{ieqdgDEM8zTRyH@7d01IF2-cYH=5)8!i5>k+e+I4%nK? z87SBhz6Ew(Wfpy4j~q)pPAn2G!zKXQ!8zoIHrjMfoOGO*f)}_JgEFvJrGzA~4qGSK z7oGU(*`+uXgNgMrc99ImGBT@5HxGaZ;~6c>wzjqPvO(3v$@W5)AuMaj93`p%7}yD> z$}k--gWbZr7Kw#ssV%_7s%7J^AHe1`4mq-`5x`>xnFplY2q$&$0$cFI$JIEH1DDM# z*u5NXKyZnm7{SPFfcVz)s}8wrXh)7}yhz29Md=2(FrPWtXMj~DH<_OMkpv4YwHUx(1 z0;2HhB(CRWjU)zGe>Mqt(iz~eYB3sWb}#h>cnKI4EQn6BE!ok5AdzS=wu!e;rH>1S z9G_0X1{pDvoT}1h@x!VP;G&$gxa2w!nR#Xpq#8@SNV;h2eGfe1>qJ$CQ4NN4$eh%1 z_&2hnJ9f_J))6Ur843fg2!=B^z&(;_B(*RQ5I_bD2q%yPlXFtmPKM3dZ5bI-@jQiw zgb^@{lG4e;)=W?gBd+M-X&i8-d6!fzEWmnBM;V=sO@)ykY%ilW=2TlVofA+%Q*s%A z6FCAYL{Ec{<>jQ74pSG6ZEeJ7Wy+$k5{hT8Z02!{7wlp=Trxt0m6o@Fz+3@>EnPGE zn3V(P0|(F{40pM};mKE+cuI-pdAwFLsIBBJ-9QjEjKrs;;(=uY_$dV2DiepWd^g!( z0?W7Nq6>%9vt^y|KO)g7Q75v0MH`O2KecSq71RDV=o|ZnFnMdRlPM;OVp+ce0#Tc@ zQOU4yiJf4`;+t|N#jqU;hj@vRW4mxrTKannFcpGD9wmNg6%$=2RiA<13VR60dRe!O z0g{YGlWL{-5%5kszO@Zz%{dgHrNY)1j;*qNx-T-YoGF>4*lI0p=al`a96~aIts1~W z6z63Q5OJPn0lmvcN-*v4rNG02dlU1Ph=3wq;6(hPMp>nIfCu@mJBujr&WtFhNcuV& zlN7@GY%DG#qKu+1jrb5>ftA}t@*BJ%B~5oFBNj947PDS5W|X%=#KnX|_CTaY`Ymx8 z-butJ7cnr!3!f%U!Z=pxv&1r` zA=WKyKpNDSV!jW~j?Jq0zwV09!X&^xAQw0kGC6M9Qvb%{B#-7sL+;R;f|O&IClE3+Ezv z>H&|**DtkQ4&DN&QLKQ&CW8SxsTD%^SYQuSAsC6-xX~D^(bY(?JEtD;vKj&;z=UDf z%Q#cO`O`uG#qmeZAmOC|it(T9dSvjBmFZh0Lgnmpfwi2>x+_F(UNylXcp=f#!F2X7 zJ2vPPk(+oRe9?1Pq9*gtb1lRyO*ZBYFQnRY{m@iB>>7y zmQo~o^z5}aRp>H!Tyx^9XM+yD4&Zp>Tw5`X>gWJH+;6b6xLc!9rK!Q1u`37>P~yZn z0J)XXJWhSN!PWp32?@S-)7La>Q)Swvt;erKw8I0m$d zFBS(10H1Im121E?X_(^OfI1d>XuC)V}XAV8F zaW{~1r#op@?l|}q`HoRWim<3>V&Q-k6xj9iunu$BnFag$GS9wnAp zOGX&05QNHyHliUa-qE+XNRc0kxzHXX4)!|9064xk>@eaJPnH_z$b-Ojli@6!QoHIk zR=gEz(jep!J~;Ml7wl3^c^?><)CBj|5v`20;H;`OPoCJyK%Wqqf?5S(>cCR5=?Y&> zt)nZ+GHo6JLMFn~C~=l##vC?db6P4XGS>!k7n`Q&CO%fk$rQeHBmZV&6a@oAsm{#! zwBfnn@TCmV$XJ3Si`8l}B{wK4#jz?X`3wbcDMZFv!!~IEjAVpdinTU&e-#Iy*>O_E z)HFoB$`V@$;Q$2%;hm&U6<`y%q{{AVhC2))yc9KXB|oe0K?XwhI0;CD0dJiv!iwJps>PDq{_K{ORl9jaMT6nHFgf+ za4d#oHUKG!@R%K>2o)ME)Qqd@Q4G!C*iE_2k=7n~s6&p<_nHh4XMZ#wQ z_W~E_ikHCAY%LSYjjf|Wb2CayRb=>If^^>DnHAG@yo}Tc*e*mAQr2fv%7h2>o>XTU z#zvkER)A`z2rFn*2lh~6n@t4xfjIzNsO#PE(ntbj3Vpp#R8Eue34DLkMSxc>L)dRx z;-EHrXfp>{JLhw;*GNp@gboM@21u65yOEU?a-O9QTnK#MO)CJ4;ur9)0i|SmmV^VG zP|hUf3hdzoU`bI1Bym|9hR#;n3)!@hyJ(c+WReymD%l}8?UQh92>kCnS)B35bHU;> zOSzr}SdgqTRe{;NLfNrGq2Wq>-ZWEgb^Xvmd&XuwrB^7GH3?^QqBwD+s}?0I`cuue zCC0Lbss6;IUt{UNL|zrUn{V1EL17oWTJv4XQx@s5yG@)*0+Ey zt~mQ^y|DN&RGf_3SSFs66kc+&D!X{u_~9rN#<)IFewECdtW#pK*1I9NWw8rKhC#8G zln(RAGr_`Xw^GNzPy!kb=AuP=iZdyi6{w`!)I9^oiW%%A1S0NTnLSy>P?lk;2=7o3++2#FrxN_SSsaxzkb zY3L`iW8LCWnD%VaL(B27O7fjlHNuez3@a%_Y-j@uMJzjnR|;>Pcq-tv1ISt5*LA}| zm(i7}34S6=q!9;#wZQ;r1~|Ij4L@Z9ycT9bxo+~Zw8u59ui=F8G7sCqK3p&Gn62ap zhhaQB<;O{_CeR(XuAVb@gXuKKqE;RJ9yA`N!=_01-vgFVo=rk*s$M51{VONMfD~an zM3|1(kPBKLui22 z;*>9QT!9^u89QW}VX}*wDF}D19mY?A?wy*LWE1PcnZPd8#9X+oy>p9WhF)S z)>|!#>}+SuY`TtQUQ*;w8S7>ApPD=mY-}q`n+O*s`*E>WLAt^^#~Fsq1JUh9fK<{O zGJ!_oR=5y}+Bz!(q((w?#aSNC1ClN&Bm@>705D0fJ0qaLWNGy5SVM?|5ABVEkcm|} z>`FP#q-t$l8t)mTkdcz{JHnlSUyUBcI}erU7KC|$@tLdSt`Jp+OhC6^(3QY6>k_PPrd zTO$D{aOUV76B3RHl!!P#FWH44->Kruvvkd&N0}|fb4M5Y9ey4 zIFd!=lJKGp*TDhN~U8q(C{+V>VcODFj=AhGdX0 z7$Ml=0XWIc3kNMynT#ByWy~-)NR}#!uws*w++y^)9zcXqiD4mQT*GdkfDB*^^Dj)6azP4RG#ogoNL!2R@_NVk z%mCHUM6+^JJ4tKc-6_@3gZNV%<<{7b5;(BrGV7;6LrX4*ukm6-jk4c-MqB|r+=Ng? zc}8s%(}k%*+=kB-+O9#qI2hx_$iyf@5(@Hq91Wmk#D}mr@=Yn0!Ff0OOBe@stdaHu z*xn)(fNhmg&_TKyO$rprsj|VE{Sr&Zl52&?(`ngnIpjeyqp|hQoR=WgDBv)@d&ED> zR}g9w24N+$6Gn54ixZ;&moun_Zzk`w1mXa)yR+AQaBdg2cnR<;uvK%b@jEC%%c-16 z;J z%&@IB&X+WKvZYe>SQb?{wIo~5w@otbXOkw*4PkE1YTl8rf-$ZW3e(wQH_NITE#gK0mA5ci73a6mGbr^nHD{&J#_B zC^k*ghros4n*w5)TDx5(Rfrw|4@B8nn2OlTk#>DrCVNR4NNlg zJz3Bh=~<||S2d7%v1D(oa#>>qjQw5G5>J8y9tcaW32x?VuonNr3xbnVRu0q;_#3vpSV9Nu9? zb)6!~ot7MM2}lYyUb;7@9|0yxnB3T%j^kA`XYLSG^ac~>1Px9<-DI0w%dGNf=0hk| zq1a5u^j8t)3ZQ*NfJH)K^3{k6JRl+LyMlwpy9)9Zg3GZw$<93*Yiifun>~V>;c|K^U3rwxmPC76As5ZyEu;IZVT*0kV-WWlbd{ z?A6*wi(ULFBAtTBfIO>wSwNmk5^y+xtwJ_#C5N23d5R6;j4+nrWFQ;|P7vpFus(hW zvD-wznb^H$HJK|k$G8;v$z5%Y#;gdSorMH5?BkO90%u2SrlcicNlD~?m!`W}am1K# z2LxrNkp#*bNEKc%IIJysZRN5KXjj#ur=)Z&i)id(n2762!ONH2;B1aXZTd1PWeS59 zr)*gLZ?gb%i{XN29j!AZEBfku>z0J}Fb;@$ydRRc#AU3+lh=7}+r2VrP=RcN8%#?l zFekF(=lTWMCr`7i9!oTG+G>$aMjo)QNbfCjm4iOGb>L^lu~7M@d=@@#CyK`;vE z&I&s=%bLM#2u))dB*BxH)h9toUYL14DRxixsN^{;Wn-kp1s7#9YO@GVx-$jaYe`PR z7Eyy}FiJ9kYW9xP(<~*?PFLp1^r> zJU%#lla}}!)Qs<6plWR1F7fj9z?HomKEL-iRjMxzM>&4RFL7S=Znd+vvM+B^ zB(yKiiNU<>vdc)seEX;jJi+Gw`+xr5&3`_^cmD5jxH;G#n}fs66MUOZ*?tL;_&nM? z9_7Es=J~<1!_5ze_{Zn?>HSUP*BhJTpAI(W-_53S5jX31+x%xaJlw>VA;(|mp`Z?fVi`}@=(J(wG8h+2;EeCre7F8lX4W&Z#d z;@?ER<$}+_wfIZXoZR4wqs_mWfB!eL;b;C(_V$l9PsV;}V}q@=_jrT1DT?&C_l?PW zomYbSc`M*|?~6xe|A%q(e`38qUlk8`*Ft>A#pCm>oB#Y`-+SkFGP`Xjx$JHG`Tofk zzJKrJv;TI1vd^oFv&s#gQJ8$I8YiFP;HUj_-{-7|D3(W548JeO$N0FH3O=8huH%K; zjSrtcm9^l%e!psxo_`y%-lvPPeH=V3t<;HN)AnB9U=dg4rI**=``-u8?umfu0k-HK zmEL}TaZKecp62PJa>m@e`sI6hQhpfUpGZjUKc^iYTu&O& zldIOHIFa~VZ?*pHM1=GriMkJD!PXT$g8katfAbE39_08FBFz~X=Dzl<@D^}*^%@o@h{G)aeWKlx_|s|UFlU^bZ_o8dE@6c&*!~=D@Nt) zxjg&Zho|=BO;`LMs}Z<&Y7VFqCdPLwBl^mcojmSVcXa*Xx*F$xBzn2ybVKr1@a*_0 zR_TZ<10T4zfA&nC-#7Fd7dr)cu9rsQ-e2e=e!JhlnGfM0E>fX==XpJk23|XgZ#ui5 zuWpV<^)hDd^(X#lOxy_`S*^}%VzZYtH}`%+r0|6xgnRGV?tCOz<*X5UY4i6VKmYRC zA)X4m>rnQ;)^-aBZwK|SJjiRKiLp~N^=i}^{SDvINaY{5-56e%Fzh_{8CE=N& zF%<#6*M4?Z*zRyVrcUAaVz5tS?WiF|wVh?gz=;yJS57iLB1$G>K}K*X&-(_EVUyxu zd6n8qOk}tvDGEzC+o~r`y3{sI3Ujh4TFbamK?GkoSUHPEz?rhvX1*5rJb8Znh{};~ z*Qfk^|FHb{{80AZL;5l?BbSPJ&PF=!lkyyJ0+9;tae9c4=&m;tMsz*$k9cYi&cKXKeZF~Gp3^`) z-kW1H{_9zJ3=px|!$Idu+sJp@z;=s~zzt5WKfQvl^|s@Z&)2VdIZX1G{kUhGxSygt=?!OZ{o*tYm(F!cxWTGqH2*f`vz zvPyP%X*^UR+_Ha1*x+l5Iv8neEeXe_(5B1sRA-u>D7H+e5wBak>z{I@7dvc&&`2ZZL z)8DT#D}R0P(>{+2LF3r}l>ke@oG;DDXW#9g9%i}Wg{OBt-H#8B#zwDa^z;MqkC%>q zZ`&7%zxkrbUb=)g`WoNw>pdA7DNo*>UD7Wuh~mzsm)_>7?hZ^SgE%56#3wQ3VGnf2+KJ@{O z$n`$&YT5FapZDkS6z5T5p5HwGf@ko|FTdKymOk^yYZ$!;G{Lk5J`}&RU z-}~*~_a5`FzF6TQ5ZT`(MgO+sEWi4_Ggyf~Jvr?kG`srA;V4~6UA>{U#eN>fWS?DJ*Ua7~d4bscxbEtRy6Mqgs0-n>tw)TOXo zWsi0w(+zbHRc%)aBEEP81A2hX-L8|e(wB=IcF$7*CGGtWpLmCamEH}a=}RW8e)pJR z@pt>5A0Ir~Ys^ILA3b??EN5R5RzKs8o1Y)zzaA7EH`s-7nqWRTS-;+ViP#gqi>rhH z;V=6Gzk0O!*}VAqH!n8-vi|R{H-8>XBI6|Bbn((NG5*Wgem$7yj>_h%<85LZj{bOj zwh_yPSbkG3$cgg@`}lT}xW?sAnLF5j@mUEh1yn%mo7ZtIyBFJ6gYPGf=3X)w#0274_Y;QP3@6O!I7C^_@nCr=NK z_KsI4aCCgmKl~Br>)r)_a{gD;2;l;eyW;z0Oz@{>x=UgnKu5 zjPAWhc)#1GT02R$P~+Wo{BwBif>(GpvB_}m`^Q_*a`Lbe#(lqLfesFzoQV*(zd0W^ zzANgx3rR2{`k7^oMKcc<5Vw4@&0zdOBUhu#_#;Z3lGNm?SKAgoIvjn zekeYTRLHZVam4T3e#ACC8pk_)i+8^@Mlycoee|KZ*r0m=L2(t~%~ z;+D6?YBtZ>bp$g9Sd|@WX%{^BYtK0T{&er~`ML7r@!sPRWggp8dCPqNgo8Q+p zSM=Uj@4~J3H{%2h10WxdBK7B|&yJ7Rau-m>^Phk+#%5sA-Ycqj$5*=?i2qPee$Gj~ z@@~#YCHFps$dqETVilCrLcqy`3tkCa5{c;~o?z4@odl16d|&9Jw^z)k+~pz5^<_S)pG~ zmUHu&e27u|LK1{Bua^8ceE#%!{CM@ehy57x9=9}-fOzcZ->f0ouQy*jI$$>bGJSKO zNhi;m<2(I*$J<%68*3xp;hOJ&iF-Y%u~|Lx<{9hqYYyb();Cq`+%2kGF%TR0K6In$ zO(q#GOyj+pYxvuX+YBzaLB8bIKB<(vu^;;S!Nvupvv-BxueM}g30EF{|7`6m*}m-a zU~_FY`DYD5)(-nm=S!@Q_jqsrM**n+^^7jDJbtiOAMKJsq(B&en*DP+7bP#MbVkaI?x;(H-UfoQi=cTXq|v!;Mh zqF5lATeCO5`#D>w^-B2UtH+O@J=xnoINUt=pK(}@t`1cGxu+)|-~rgAzm19>AQoIx z$`@yoPmb2FH=p+|-3QW|#6M>-=CoJxSW2DSzkXT7{MFeG%J&RKwyqsVxIb&>GM}IC zKmTTbe8IDFL0RL^BE|Gy$7e(JZ|eVzoAZwUAy{Tp zgDRAs$0{g)vn{{m*Ka;i!H^69np|wtlRdE*C#<_dSk!gUB#v9i|3SY&%60rzB=4iP zFl8lO$sv4w@Z+OrN5`8#jPl>lH(xS6aq#@Ih5P$&X#u{qLjKJ;2Xn>x{crc5V6EHc zw||HEc)}n6e)VMFWLt4R!CWgKzrPu!J=#2FBy;%kNV4vIdgXfd_i(x&9pHCoOZ%Q+ zaQ)BbU(Wv9U73HkGXL8)s=s2{{})-IeaAxHRc!Anws)nuyNd1Iwz#X<-c@YxDzSSz93NnJ zth^yV+qL-iGVyvYr*oQg!FB=a*w#B4$> z(I1-~2A2}SzM5s)N+pP?i`lUQjhYIDEbrA*KC@9sFJ}*5QK(g4+z<-sHfovGq@`;L z6?E2mLmi8$!==!3qTuCKEc|wW`AfX%M^DP(kJl&hupiLi``a=2zk6Jc9(}j};Q4-e z$_)OOdq;SS1IJ*86n&>X zc=&slCZfGuJg}_<-DWgU_K#r%WSbQ})D0x7{fn=pX-B%Q5S5kOUG0WaZHo>bX+Sh=K%z z|Aj!S>x5v@5V!e%_>Y}cx|G?fV zRVo_W-SgLr)8%h)ysw5?-)z_5-fK?xc4DKyp4+JEEz{-r*Hg+6sUiK>v%SO98q&Fc z-5##fL*`6&IYg7WyIyPUzU*ZBMWHB`=Sor8d)dCflt$a8`pBMA>mgIBwJk;0w#-tr zwk}njc1^UU*1M|;0iE25>YAF0vbl6SsgWfTWWn^PCe_sjWejzr_Vw_Kc5$-JHWj0; zr>;8Zrl!d~cS~+Fud-r)XeHE`PlU(V-9cJHE^Tk^5}Umc&}8sl|8U_;zCm*N$a2EKiE{KdMMCq|a_ z@AY>>aKR4R9apR9UOA4t$a`+T#L+kV7qlBcSaJ4?3%}uucQLWtg@T`$P{3cr^n45& z0Xtd3e_Y4(eHc}Mmz_Rawxeq|`dqnD@>U55&y^HDTsP5fbhr;6jo;IIT!ZcQ#*EhK zC;#c-_zmrZT|#9z{No}%lMm}f;1 zuOFT#Pm5Ft*p~Ib7{ESyOB#fM@I9{YNrwoGOyB$Oy$%a6#`DF^<;|ikG3T^|kSVpB zC`viULgs{GMog;!^)A(`G^mT2mu!utUOT0XTV7_&%`{{6SY<)ArgApLAbFWk@YU2&Y{CPL>=qwz}VY-&+{37XU=IL%8*$}TRL(fSNd=l3C9qDl^F zl(v}U6nQ|)Qez*B)yd@Gy33kfTej<1N7GB!Ns*|AyC z!awc(@aVX*kaClBDE@LOsW;`JzWCK~*(nW`b~B~viWDeca$j%Q?ewlZ)ZTn4&&4$I z@r4~PkILhd2{E?5+}|7?ka@0eo<03+^S|-;bpEdhkn&~8PjHLl_0xYU&p*31vB)iV zSih}J>`Uf}$Dh~ljthX%&b{P|(%ih)!-M0(4_o^{Un3k{3o1-PA2Eq-a6Ohpr=1#$F%uSl474kP@>!Ct3;&<_XuHwO{idxi*c zH;53g2oYe~%i#qJb_y6oy7N3}IMpkciSpB(^}1MOVIT{`oik@BgM>Z-hMg z%I^!Ve7>&idmx86lf(J>-k-#Be$7eZ7d!Q0|5Df@PI1#UDI-3VXzyi0YdLfOxS_*+ zrNH|B^G&Cd=+%g{fMRLCvw+2!RNCP(7Mv^UGVu% zoA<6a@2)rRt_ka|H}9@D@2)rRt~c+lH}9@D@54}X?2MS+IW&9!Qk*FlYhb+%i+wAh z*qJQ;{d4~3GzvR2MtA>RSZ)jdKO~sDcPl}je5Kn;MKq^I>fS8fwYE5~%#y0tOYuRQ zUWYEd?3Ris)lAbuU92T_OUr)AW12;o8LJ($#TqG`6+;>gSH!5x;!5jFwY@LN_ffKT zA?2$L4L%(0(f$FJzg@Lc>lz(ex1+$kBk!fYWJ=;K{aHdnaE3B&%S~`H<-7m<3?0Gi z-Hz*o@K1Y)?2p-lbVgWi6POwhexw~U5w}d1a^-CIHP|JuPb>1#@GI<~Lj5+i#J4al zyfpOR0Ml>X>3RS2LD?8SAmV>3ujV#Ia6%|>ngu_vj>%(rR+{tNIQ!SXeYt_(w6TMv z$*x0NaM!o?VH?^%E*t*|lxytF(K|gB>!w}YjB`n)nI-BFs~IgeTbTxGje5T{18` zt?Vy^uQJD(OYvhF)^!|LlNZYIBCavy_s_}awwry(qxk5YSrAK2wzcM^Y8RItl5NT- zYitlSU zSZgGkzg~IJYwJp%zqyn9b=P_>4RBI#z4%3Z_T4_4#GjPsYoqyFtGn;fwEZ&=dR~UB z`Nk(eZ+z|*7( z=YLqR**iMgR{H0mY=HJ$%6E?uzpvdb>`(vxBts@sLoY7db8&V-8MNmr0`T5qVCvWS!$OLblCMZ)&e} z2+B4+s$2BLgG!@d>WQG%$5}(pap#;D~?IMVG^njY;jng zC$$`J)>P3(+Qrv-5*o8|s{68z8ote-y{tgt=g&_|P|x-ycOySLox^yWZs(cy!@#yf z{O8&OOqXfjyJ&NSyEeYv+xXtFfOqYDckO(4eOq_!e0SU8uAT3$o$s!l@2;KiJyGp_ zDbW7Q8)Xr?!7SiqL^b~Q;$ro>^;=`fPRLe1;pxts6|UK-GvEt}0jYm*6T~*}^ciO- z_CL}fbhjRY^|s$XEpiNAiH@$sY;n26a5gz|@9C?&To)aR58d_9l8=3auuM19;zo{3 z=}IrNv|wzR$(S8g_{{Xv44tX0Hx{Q_SaP(6EI=uh9-{R$QL!iOsw&Iyyw-V=^^Cb# zA8aBgpf~kuxu?VOKhO7N`+c>~=Y=y^+a9`K zT#A0lO6w&wt9?|_W`D)T{=+>{)O~PV9{+d~z5O3j5Xjw*diKK;K)d-fQ-bTJzaZk= zqPK(Xwq?iXeF7nn83?H(`&BP;d7ml1{h=0S4v&I`AgP7*7TlalPV&2@O-6b6O=cjqhtuYWY zzIDG}$ca1&AO3cQ;>kxbKX*l=bE`hLS~$RF7oAB*K5JTvi)}GI4;{0buI$+T?X4aq z4mOUr0`HyGl1i$J^CgWweW{u#aMlrhDPxHy;+L%|xKw}mIm`uUm-;|Eu055Xb zVI`OPZ1dn{CPMz^tFONL>|ejz|4JM!TTSHe&kR+_{ZI8Qtz<$dRKEVjA72^4kl(Do zTHV#=+0!*+!b`SX!aI#%q|*_M*P-bNDbUKeC~1@@7ffZWcP^WKf|@RELnjNdRUKw~ z>hoWbq4l&g3ZI5`6Qi-c5J+)aIMnC9ixyKj^^i zKbHp2r?N-Qt?f~BJ9~7Ezqe(XYnKo%oaDNxmil!7?GkgXuN9L3HTRECv_wvNF9;gG zKOy791OH$5&ftf8_utH2@VCER@0e-ivF8A)b{C`o; z`qnA?H@lzrFngaQ2mcH93-;Fhg1vgh^;+$7Z{yD1KIJ)9k9pw0G|A^;nheC|L9d4zQL5|;z0qC>g28KHuNAD8GTl*WgnVvPp`KzO| zxtre|9IlC*(+VULJPk(wI_uYu}!#i&$vP!$$Y9$4Eb~O6;_4&!6 z=(6|kln6h4CBl!>lY9W0r;9;YjWe`nm(80+x0vo`snN7F92DY#OL8DLsYJZ+^>n?o<8q8_te}jLFR*}dwi6eYofX85bp0vJ!Ih=$Ks2}<)_W( zhlksinlrjJYk~*>Y2EIx9|QdLe~d?axc@nx*OOx^1;Zjo?xROqyOqfFKUrbwLPv6C zCx8D^4dbWx{nNqziYm_%AOJ}~w!fdDS$@|8{Cw}hdc;Uuvu?+ov=?`MfWQ3{aU|Z( z$^KY8Uu~uPn(X4ewrsDb=WCfPh9+sR{3tszJ^N6G9$Keb|5CC_W|! z_ILa1=phzs|BT}8h3SWt73GZh;0cOcyHIdgPw?bxikxRTAR_gr;xAKt>U7yDF*cn{q5? zcE$-wx)eipBuKv#64|ZANx!i|bcw3V?(xZ|A*XSj(D@@u4uzPioz*X;WDXXGv}9-P zVoJ)r+gP)SJ1UZ!(c^SsnLgo8+LR@g;+CkV^L7jyq&KBdHlsMRxaQO1hEq#P%`d_B zl5}$}=y1K{(0^iCcb2!f-SOb zwI+Fva`_=Y`)J5GxTKS|R(k`pbTTsa(*a=F(O!F5(mdMy^k@%%@#qA$9Z>*<`-SNr z{$M*=$iKKx%(jk3F$4VCaMWt|xAf6RkDkr>_|~VMuSyH`ZF#=k=+{oUNPp|AyfrsB z|MXS{o-=Oboh7JiHt<}jjsK#~i#JeWU2l=gueg~dQ;)#%WO~CKmN`5%^DZn`+!m)m!=YVHRSon z>tW8NXhSXzn{{#|CS0mh5m9VM6kBFn2GtyuHA>aIbJ(mA_KrpSY7sWGpRmrjm{HTH zQ`a#${G@`;d8V{PqYzyuSC)*ZddWH=oSt>)Xs;GFAME1`1MW9r*!=R~2^M!}>9?B* zpKnzM^7($@rrDebwEqd)`&DMRv%NfWu20F*?!So{fS!Ct__ZF z<-B~CPkVK19({32u(%Bsj~?wkUD-F^Ck^H=!r{qdLk&qUC74w3fo_JY zaeIAn`26Yd0qjJ1{Bd+bej!lw*>25{_I8>fX;ZQ70L!`azmdM)*OiLTodbdAkH+6& zD-Px@<#lhHQ}F(!HYlh$M?a23=jZIsG5B5JMb|EtXD9vC_67d=c<-_F-mn+v+2Q`m%=^>EZ2kqvlTAezN-CV) z;b({fWexGSI3Q2(0)D+Z=T{%TTr~9X`jh{ciH&H4qtkj1}Tsq7}(gKujV=#ohF9VYv-ZR&`6KB#RMncg#JS79uP0B4U1;zt#-pMDIx^dkGvm-_b zPL~$a5`AX?lgd)2*NgH-jgY1O{$=IRPf&%s2C8r$4XS{nJo^eRfEn&uFk>ZRKl+4NOfOAcbAH?0 z`~TUy(%m+$Ed45k|I7gGGky1^|HZMh07>kLJeVKTfpJ%h6IoP~R66cJMn6P9;XKKl zbBm;?y+jqY*aU(=vTD6mbfbuyb%hOM))_KwSDU@n_M z7)#I6%>3A_)sAN7Nx`xQbxMy2u?gm-h$(;;k!WL_1D|ZBM6WWMC0&y5LmT6aGRk=a z)fxp_I)!+Rhya~axd!VazCBmd#`wrf3R!|nC4mZ@+O!!5Q%X#>7JMG0|CE#p#)*Ka zGEs+hO5kFWP@N38r!7uyRwe!!KZ5DBv{{wW>uKBo?}=gX-mAYIkB>V2h(RmG?YL=K4@D#Q>f|q@hDr9@xz4FYoatTZb{lf?eWMz1ceUG7+Z;Cjjgo z(sym8P4OOO*p>+4#mCJmr9UjN#KTrfZ@@WsuY*R#SruMEip2iJxB>5Y1;<>?KH3;V z&(;c&4Z`n)P`3sSs34;}qbH3J`f>lGzxv6&r!x zy;P3oo$z?e<%NUMw+E9pKr(Duw3le~Hrpgy!x_G|s}`H4dVBb>WBo+bx!RzM1lKpA zUAoOiOX%0(%yB)FH|+LYqzYTJ^HR!ey(jv_x!Z`U*Dypf^0jXZJXwGM>F_AIR$ZJAKuA zeI)WRJ(BzQYBmizekM$SfBbs&B9KY#4D)43{XdUG(>?gQiI|LMZHI&X*$pYk*YSVx zIXB6R7a#Y~MwX06YHNANfyP^v&d(}5;6we};v)X?j0PVGMZAAME$_p;dl!FS49=|y zwtP#1Ez|vLdrht=nQ!ge>eFX-SI3?TbBIzTpeI4c&K){-tt|+v3S+^hAbZMKM5aP4 znnMhfR7+k$P=b_Em6SFY>0Kj1PPR(MJS3+Dp0HSO#R$lv6eDev-n-58P>DYBo5>WN z`)qcFH~(qU{Q2#YR?F9OYmT}V*xG2(f`y_BG1ooxA1_YmS8;+rbpN%6^5+Xq#rg6G ziw^VJ`hN+sET)PUp+Gp7-tEiec-ESo$u&I|*S`E(FI1PdVfyKDJRRTLt5&HV*@#9D znPPEaa^v*ZCGF7CU@U#b;>|qonogO;emNOvFnwd{&LNVfeY?!Qz!cb0)@^?>MlUuW ze`s4%F=TRZynsrZQLkNToE6S$gW5R#q9kZZ^A5Lh4e# zIQ00>qK#)bBJ|r*UMpv?A1ZJDMw$*_GGY&P~Z&%0%Dj-5RA=cE6$5e4Dp zZ|wtg&fL}pJMR_OmAYt*LK_@31ePq6Qn@#lnrd`UK}_LIv9f{|DS#?5qj4<}j445S zX{>K^oRNj-Nu`O!ght;=0S^BPUJFqrB^=B}8+?37W3dZcc8wkWuKfNXOn)7{B#<=u z*jrTTns7xupjkHk%(A(qS^kljM}gkeFdw}-AS@l0^Lp2_5{}C6REQbHkE7Z6_f;-* z)t$VqM4=X#x;4jiKYod-6n#c~u6_M>!W6eoJ6zvFw9~2B=~V0l33fUayVqi;Q?b*j z*y&X4bSmzdr0NWz;j0!=yjZjTe?0qfeAxYUI$J3t7%JpHCGx}TqO4E1kF0Lh4S3ru zK$KE=p%^5`1t?tt1X~@bY<YvqPGn2ZUk zSQo(?#z5iXgIAS-(W$yxQxQ3BoCQD=Kl?yBfCGg8Tg%EmfA-(we>9%72j^8;5tV(F ze;dyxHzsJW;$003zSX_IhYv?Byr*tvViHG>(b1_kkB9Mn+jqaQtPVrse@`mRccXuQ zzODq^R;iCZ&K(HfFUj98solF?g!^N5|E?{-mMGmfN60%)_ua*O@wJQX8uTYn1&Oj& zmxF>Ts3^gc1m`tF=#sSLPOE5pR-#=lQD+%|SwmyLszRuxLM3KO;XGH7`YDUHS-5J! z=isSeUBFwzAX=KTh(cIpHpf4+k7<9h2?AP2KKwBtAHJQ!^b+}e7p4(^=r~qhmRaMM zyGReSt~!6UHvM|9IPTQGj>E=&e_GmT<&N{yTvVJ`+rG;UT(;%&i+G~1F9eJ2B=EEMnHV+yU?@k?tHV|>&1c%EeG^1E_LtA-$8_d zz4Ghn3WA^2PFi{E{(OM9Y0vy=a@cY8tes$ux%HQ)F|m51?8gnfBwI0to0+)VLyYG; z)3q~QJJYqX=~`92t}|QD&sex_m(RzP4UN;DK%AtVk5-8UwG@qU62>_}8;qE;sx?$r zt<3%6Bq@?jA!3MB69zz8ONhZ>Jj6t`!g`+t<%z9hR>@eQ@WAkdT!B|sf#lvuQCPB8 zZyYD>1+?_P?vK95ji>W)@HBgOZ$bNayAUbN_WyeL3SX--dOMv=j%JrMh%LIw+Zb#Z z{fYniPkhu?oII<%OWK1ko6RK{(jk&|G+ONi0Wukyiz%kbIT*Pe7QwC7%b)Hv#f6XK(~uv;!wqIw z>0GehLRKt;vQ9z}jzi`)Ca!&S+VmVR*2#EMO^__2nU6$&>UcVvkEns+*K#>I_=Y~<^wPJTu6iV$q2JI- z?zM${_V9uL>(BLzRsTeaBPVGBE+Ym=3}d4b9YpkqnqyRCBQ?fHhYptEX|!|bs#TzInkd0r5ok-r z%jN;n+v&I!2H#9WL4-68hmWwFG+c5{GKm#EW`Q*X*WhHk_*2P1EeAX?9~1yJ?!;G|g_BW;ac< zo2J=K)76-_hv*1aB1&Af;g>-e(~cns#yTomyZ2Ar(m^l7 zv2F6Xzd4>S+csA(GQQN8aQv?Kuv53_74l520JBp4Ta1y8&aY+HOS&%Qv`B0X&(VHg zRM=PbHs7{9e%&ne^$git5uLjBlpE7>&)&7SWz`IDe}m1v1^P}$x^Iz{rTOwlKft}N zE%>^@mR)XPbG?H*X-D6e{rz;U!QK8^Z9^mGwz+~(s86Eq3GY{@Mo1egs|?SgqxGPQ@(`Uh;C-7hkb*I4)6NF5VUhxb(g{!M z@j%)ONRo5OB2U6mXHSt_hT6 zflFF4`^;{v>8cGeiE+a|IWT&8%Q+2?fMe-%KV#lTkST<)3DntL!*S~F^oc% z>v)DyZ2Y)<=kwFTZFo!Vp}spWTS8CbV}k^x1?8KF zyoRY9Lym$stJen?7AuVt0kjDMVUQ<0g)k^E8A6bb>q3M&%0>~TlL+`^LBN+R#KI~t zgoL$5>4mejSxCYsWuUr(n~4}8c$Xksrz1i?P(7_q>Nk;H)ofb4&KJ%=%gOc ztrSAr97&FW3UGvtLE`D62%)M#DAN~QM}?;{Z4Ot+h*!yUdt@$irJ1G8q7XvrkU%rx z@MunfD@gzg5h1>DxfDU3JZ9XG778CTE=abtAb94A5ZK~P3v~r%#dqN&ep=}!@cQHN ze0&mYp_q^ zzVc`f?01cK#nM=85;370M8_4F*HC5BHfmO+Pd)vv(#~=(plI}5%AisAE^722Qu%DS zbB<^gxZ^Bk?!m^)DT9KJUKjzE%YqIGwc@rO{X1H_(FcU*Da__K3^I|$pzLj39(qK}{vV^a6ap+ef$t>Pv%2Ur8q|l2 zp_%0uxQ#T#Rq<~38p@Na$Ch?7xA)rTKg8GZ<@h&=;S#0KK?Dj{6uBFtDtP6kC{-)n zItqLEHy#X+RSDoZp-1v1gGfH5nN&kfY6t z77T+r^x{0DM^bpw$P)&wEP25dUL930@M^5Z_za4rdV>-k{V8sXYk&b7`Yo2|XeL-0 zmBUjNB9cXqhDXZ`ByPo&GfZR(jjiCJRw`HEY4A=lx(fvlDROektH1+W#FYVqMusP) zKpUfaV&1o4t(F*(Cl%YZd24Z96QKb?YJe6`PYoxMM_CJo!%Pz{$hJtPYQjJgw?&6v zz-3WETHM%qL;(%2;M4F?atB<~!_o<#xJ5J}LdGav6=pKK;CmO%E6;nkioV3p>EI5! ztL%2J_xnTqb`IxTb-i!TSrzmA3kx5yMd!d0TqJ;=P;6%AM z;v#EZ#T_qMH+UJ#2(iz>dK00;AG_$kNu_GexCkWGYjCkB<2Lb3903l_BV^QgemINmDSO zopMrD1l^Weq*;jwaq+`;xpK=b8Xev8I~ZDs%mg4>rWR=>Au>d)70q0irQZpoA}0FDka)5ccsrDVyV_=ZYUc!_YmT@qyqxe*Bro(zv_0*2NoxmWWaC>oG77cp4BqVn`i=aIHkklOZv? z1eOxrN-5I1Llae8QKf1dd}~sa$)rd$VG7TRC-n)uKs&`5liXKfOCf8hDgqfqO?X?$ zQv9y*ewD#X#qd4GYHgsSX{AizF+j44s=*Pj4Hp8U5Ft_(KNPZ0Xskm`hRB;K8$js_ zN)}*XjuzJ|oq3bHasSWWwe41QY}sG2cy*?ExDV^7Ap;PGN~D&( zF;aC_Jq7YP+o39+QpGfe#`2r%X>&mYAIKdYD!nMf0Y&0DFvM!_bv1^w6*GP9BdgHx z!&~6Kq%m)hUg-bVF>$t$O&Bp!NUzOX3WUvedTu?XV2WlT&x|_F)`3++=2#g3iWv)J zW1nFH=}bASj?wWZsR=xaM=+R(83M){4>X&+owtV~9|DK;gP&eKyFp=Vyp_V%TaJI9 zY^d-|3Y}GqJvn9>bvamfdMhryqJ(tEb%D_*z&EHy=wCNYb5JX`z8y^(fZu^c);Fm$+xASt}ZDhdD*Yej{o;E zUE=LL6Hhwu%k()Tep`09^y!>!C)4wzgJrwXC?^3$A z$|HXz0N0sR?Q^Oj7Jw~vqv~u%jS^-Th=H;kb^8GD9BdlBDGeA6EIeVKSNxbT+Gi;( zO<_3BHW=oP*&Nj@X50jbt^t|74U%g1NfxpWz~9k2m4;>~YYiY7ZC9`frUAG#$t}pN zW5~j;k7=?KV@?cyWo4_Yu4y1q&&XKxS*9x*06b52h!j=v)GE&a^qO3(X{C9(0$^FD z>SRXoR_L`TQL%A~*8sC)1^0-L#U>_##<;p{t2CJxYMo6s_Ldf8?wR#a#;N9*kBi-8 z%~4`+?f@%7ODtSlpCeAD54kFHi%*tDPp#Jjn_^^yb?uVHw8H(Q4I!Z_`hZn+(Ti_E zx0ydK&GWlw{Rk55;MUtF)_#HL_6-(w@aE^=zd0a{7Vi}n__u>on%Irj_HbSj zl3RYusj8%2-F1YZ=sdw*9dN^L-}~`i?%MrWz|7vd9_`oPhXll^0e z4_^O-T^=1X9c{77>-8-En0%hgS_P;0+inrx-1{%S+1Rqjk6(<(%QuEs<^OiC7oWAP zpy|DTd`GML$$PurZ)s6qzH94B_1S8+uKBJ^x6l~cWtDZUN^CbdnVQAz*?QO(muIs9 z8g6P*!BWOha2Z?Wx2X)LAr6dK`6Sv*hZaW4k8z2xgOr z5dz(8$_x^vR8!UgI_AmXOSNm%J+7=rtYQl7pnDwj6sE!$ z?GpaJ1^rkuYgM&u7n71eXA3l0o6!}i8dB{>*_!`2JnEw#{O9q@S2s~i;Y(CZlx;8^ zc2euqz#?fE4X)dDVC<)2-t9$z(fa7w*wc%!ij%h+^!!wU!cg5b%mWU&f0j!7w6M~`=$ND# zA^TEczrSLXn|{_1ARz{$a4-U*$s?-KR+1mPvCo1}4R7mc9Rg|rd?(t|HC&kA=Y_yH zLXe6ifP2YfEcdj}*$kh9%9ZZo$q!(m%3;jx-os#^gu=okrHF}=2))<@_*yH-;4&pQ z>jR}{)T#Isvnqk5Xr^>kbQ;(UY*7kL^2)ap$njLQfmp;3UrbX;Vp5j*anrz1k>!Zj zAvfQ$3VvA?qmuBzVOLyj!I&A_mgE;&4ZZH@q5`C6E`~b@k(}|g+A>IxEsOxcBS6w( zm_Qa+6SdM4H#N3CrR(Kk@30jorHLo)3=)JcTb^PqCBYW71_GQG55#&S(^ebQ6Ar7drjJ!^7O9eq zTX9-5XR)m-ml&t51;>^OzZo`?F0K^2*!M<}5c~=>(0+m^5>KCI8H~ ze?m{q#*?~4$g=l#zdUP&%IV*l852UJ-aq&OGj1(UzuC1LdEa_Iv;JBO`uTWeGHzA( z?_x1*dpAtp&rI6X)CFFm*Za3-{+}D_x0@WsmlRY!bNYUd-NMWL?Mocpqj}C&wZH#& z&%Ru5dw1{BJ$tijeeb;S`I~zex9cHpIeFd>Pfm6gC~v?or*8GKWZrzSXr0>Yl^b<* z`1EkQNRUOpoV#B6?q9L>pO6)9FUGh1=p`;(S4g+hEZj>b>39Eq4q^3<`t3`6Gj2(6 zU**%kCV$QJ7FfA) z5dk;}Bjyy;u*L#K5RPaVu(}o2H_Vt8&J;hpnRJDvho`M|3YTLB>*oI z7no|`0n+LO@=1BPusM>gFV+tLWK$EfC4dZ#i%N>b0L<6&qVp~`M#H9WH8L5+#MNJQ zFy}YNlBF2GQgeY#y~P}kb^V?+24$A22Ec7EvqxC{iwX-6uutMMG9!?2VLd{3-iVk0 zOt%=b=oS|NmJ6C2LXaSC@~UUXF2eXGGzj2CzNZdY$|!vtnza){dXQKD9{C`SPB9GQz4mXsP{RQHDRn zgI*_X?^=4}V{`E?oz)*VJfAy@IX*i593QJ49iHl-Yeyh&Wg9+moHDi)tiTX&l;u8G z4KZ#9L|2g5oD<{sBt3LCx!h%JhOUP)fGs<-7XuIfVPA;L?d z-l$L+!$RDz>cY~(jI51YRdP${j;^$cHrqi_&voJRF=a?^<0lltSiw>14PB&>R!}d> z=+I^ff!s0DS@l6lpA2j6Vw+HWu7stmB-oi@&67z6id1_x7Nr5L%NWCUXju;H$ri|Q zi15agNZ+BfvsDS}(!pgNGlLI#ChIGnZ?aXmPt`%Y^`L^}?1It8_!Z7HIi#tL5@Bjz z7BUIoVP>w;mLiP(a+sgN_Xa&&t&k@G2j#6(t`IM@(d%-tjF610c(ho^S~KvtRi~~( zA4BwL)rYbY1#3^dAnsQN6riB{8qUZb42ucan@B`f$1iA zuyr;4mKEDiHU)UL&{aqMRw>x!kFTKzZ_MwX*LAS1_ES~NU**}pRu9knSJook$Z>G_ zc>eg%iF{7|_H`fC<$8{roXy2||CV~6o!*}E_@bYT-?O>F?$+~j+v$Gqa|oOYwFj?1 zoa)Dp&`%HBTN!_!f;{wkt>xblDgRuaiI30=*YZMKw}wQBn8X@2Jb_7cWG2c(P2Hq* z*sQL|o(_tbtN3A+ScW--UJe5+QOP82T!J?7?;=-T};cazN-Rz=tjZdjZ@o)ZKf?gD#9|$>xN`F zVn-h}dT(1;;UPTBH26649JVr;#417(LDmjzDt@mzjXjatzmLuaH{ZT!Pw?XZMFK)+ zq3t&hf5(4>T)SMU`v(^}nl3mVc1cucee%ATyn=_PuFQS zt-Ys{#9CO`5X(wCx8pQSh^FMirZSbUjzT4R(%dVu$+mnu!vnGGRI>s1~1Q^HL|(i0gtuTh5zR z-VLuxiBm~~imhGpT-D&gVVwo4uUC>7o28USSADvXXX)B4M?_#^N$g%_cE0c>06ok! zl`W~2k%Q>G*ol3e(>tqbVg)_>h9z4>MT~JR)zMcTN)#+I(+591dtijcNrflvdRjb2 z%#Bw`veXWRt^#uhy$CDwvsEVNl5>v@_=CeRH;Xlu4Z%aNil}0+Z_;cTex~kLbBh$D zJBx{25Jp0v(KD0!u;pH~8`EsVnshVScz zGkL{)rtNcBoM~VO5BlEd4zdb}%BCE-v{g5nveua(Xz0!a{iHJKQKBw(q}DQ^)w>(C z-9L38?TJRdFDJj!m-_v9db|SMe=)bwSuNW5lbt~Fk(0OSNsbT7j$3}~%MO1;5}bI`~)oIQKZc-=VQNqqh9<<>Efs?B$Q3ocv39oc`&? zcux=ajfLj#UuO&Vzi$`lHj79;WvSlzIj;wK^y($UiF{QLAFl&Ei+^ncei$!ygrdLS zeLJ*UuSVSZ@$J*k_S4ohZ|k^R(!4P=J$iPuPi6CYlH6&xp|{GM-;$7{|9t%Ch~?+i zHD6K(+*obPTa_aV4%ybi1H8l$wHED7oqHzZI9*z0)X&Ws0DfFjWEocgi^&BuvtJ~u z!PuF!C12EBHJgobIspC=qcni5G*;jez}r=T`y>;Y6PA$Q6KMZCod}ic_Vzs)AuN5FbS1f}q)$H0!{cVS+4w zQi-K0(^82}rwHSMPAun(1WYtF%QX!?P%V&Z2Ed=aPTdw|9jpWiO~XnEiLB~{xL1~6 ztZ0mb*|Lx-P<)@WD_vF?6!RAL4(VppRAFlb4Eqph{7`1h@zKGLH;XNrufS#XPxsT8 z=6?Dd&IuT9NgD$z)w3qd#SEJ_QWQkraPPz?*|$xC)?}nq*21#$Z2Y)!JHy0w!@E`& zfw7KtB=$w{k;96Gtkf)=fCw>d`cT#hYg}JF95Wv@IViPOHNtvs7Q!|fo%LL^K|;>y zAqb;xG!`KqEJ-WbwGskOTybkypV?a2!CJ4T-%aJ4t?Pg~Q1bMGa zphqMcCB}@d>lhGiYZzo?@RWQkFAM{wt{y`PWKp-HOj*{mae~RMqs5QM9RjiH3U+!X z11r9>ERVx{uWewrAZQ!=mSf*0TreDva<7(K?s(HF4J3Qzx4?hLLqJ2gpn4pB}NY9W8)i5ep_( zF_C`MX3IVmiK#i_i-TyjYqpGy84)``Vn1)O!0NEaHbw`fqk~jImVHnJ2ta-Ulq1u4G` z8)CJU0c)x&o@Z@3b3+B1sPNb@3EuM=oZjlAjEe#C65C6M8aZBzfhuvnC3YEYxCyIG zs!3&9?kDw3CwXEWt6YZs=TK?OlVoKSjU`||*$j46&kJQ0&RGjiUt~F2ZL)qksOH2h z84qoZy{LGE5=Ep0yuV=$!<{K~_7&zI@s&!2I?!kFmRc~ZwKeQ>j$PqhAnh4$OJ(Y9 z6klCzQ}@cdU^{O5q9>~vYwI?tJZFLCj9%B=dt5I$tEz^v>=EJ%YmhWK!x$Ty0UB7G zT|Ky*!~f2Ky8u;;+3=c_-q;YfX8LgogviR<3b~R3LfT3T#tWK+N6+`fl5V!=tvL$h zP!-kNx`0v?FR`+Dj+`qCw752xjo=0JTT@w_=}_6@X5po+)`U5MN0v)607MLaDJj_u z7MMtl>zee?on|B3HLQnG@N(dF5K=vmd@eGZskEYT8L%&lirzqYSaLg%aG!z;XPW2{ zvu(KGccpOzRV?Mx+LPc75-@k%|73ul0K+scG>1jZU4eWGQ+>TpPStE8iQG~iVz9VH zY~N~&WYdp@r?3b&9Hx{pChngLTZS4L<{)hh%lX)TZCIcr$O*;9> zgc;87aY{YWdIhsCR^&S#y%P=G}_5P9zo(`1<-kF@q*rcw+V8jNM(wJRh?hm zr4`~!Gi09YDs^cC1ro0tY+C0h#&&W)O}o-UxjJVJ3BYy>_olml>|2ml;E;k8UF{ z@J2}gFz{wG=`Q*kEX!M#_8TeLxO=CDQFj?QGO}`OdL0GZNV2cfmBZ$j-%BntXio3V z^8`~4rlg$w!YOdZJe8J5<|wX!z@L@xHzpU} zr{Yx8a4Z1YCn!uiIcsP7G*t{^T^;l5@iH=3+Ln1dIj!sEirulC09F10dpZe{C#0rF zV->tsMO%B{*CXuGh2_cIw~VTc{^WG9MF;AZ4eF!Y3(==9eT<8Eb;3H2%P${!qJ2!aK+k~oDdQ|q%dK*4@)p_^fWIn>b+jMW79*5 zf*NDXZ!R|dh>cWmk<>M+BCt zAiZP5Z>{OnSEpr&ZVH>Rrqj#+_$UZk$d47Vfxh)yBiHDUOkuRenx%~<$NM<>9t@X9 z8dl4;veTO#E?Q5NIL?}pHPsQ2siBA5%iOJ^V_pNe$eS|N!Rv4qP~dRT63sWSzQ~@eBF^I7FsKul8ZUoZQ)2%ec()x5r!CQ<5xh0*sEP_0Jj876rcjYnEG- zZwl%0OYkV6A2MZMp4gTSa+Qgk7IjWVr-4HI0KixSE9@BZDg!@GKF0utwuh*JPUkSh z-Ei}Aqfd!>MFe$+dFNH4j&A_yPE*a&FQB}e7T8Mgc-goD-9Ye(QF$gxCZePrvcZ-| zZl?x8C@XpB7*g>scYspMAc($R-W0&%0Ns2{-!10Jgxkor)G6#+Z!qiEL`m-`cCwak zorQpXbkt8|-$dx1B?~T`D!*%(dR?5+q@8q16&!GlB#v0&Q~4_!C_Y#2NLax-aj$+^wn6>?+1GDKzr~Y*Wz ztBa=OYGaOeKhA^zMx)_hL`a}YaIVV66j=tb4V%q29ZGSu-|+~J`miM<5X4z@>c-A? zZ^u;~|AI8mOEkU;{CINgQ_SG$9x6L?6pnO!~=qDjoWOg4~uv6p9kf7UO-jHQc4Y78zA00B;&bR)sIPi3GIl zi(O4;$xz}bNPK|WJK1j`W=D5mdKEw(@#Z{4n=i~*PV_uT@@P?X_2jes6kmG1yn>TS z(6?ie^g@Q98hCo;zJm`2SLFYk&pHN!CYj`jAIpvE{mB0n*~;lyg$u#=%#^fx#Hz#7 zz`Zg*a;Uc%JgeD?1?fBTa+g}mP;HKRZOjMYb(>geWMj#Z4sec+aTZLlwORZG5 zA8h6@*xZDod!TqMA=h-MW3O`NS5ELA-(+5kg>lhR6>?sMDZ#aa-k5J6Tj*trAHIq9 z%3X?$0l`UQ3OqKtF?pLchn~B61wZGC3=+5zbs}%UO*tC50}*!F_1v?4>-|}vhLxCT8ho?k)p*Joz`~iLaSHOE#yYFK*_0Fv}*0R z6JM%BqH7B%P5~-%yGxs#D4VX*gpPB!NR6nauP~gDnyw~J`w-gFCTR2S(eoHD6)`WQ zD)6@*TsJQ0I)GpbzD;qy7hBNp7XfuKoI}YdBEU@yK=4b@Vre@}d%a1l&@T~hr@a6Q z(S9QnQQ{Eh6qKsg39CJ!B^H-kfvBYi90xs&xNW>+3lv+FJm)ZvxFbcgK%Y4{Em~Mn z@HkT2y_v$<45Fk0prY%9zXO;?=q-v~T~yYBrGm7aK?}hQkxAe+5mtw4<-Et7ML)b2 zwd?|3;uB#o%Zb?WfRVSHr@k@7nQb=sv=d1p14UxgCS_rCwNkZ=!qvjB_OVEEVG40t z827-T;l+M6C-R{?=Dn4>v==&IL!fquTC78nXVd{XE0opZD;ybo+XEG5j+b6uOMIzt zrC6#Xhrq`~KlhfUD&DxR4$sh=79rH`jHiVBidw?S#oENfDH-io_cl5MRCRFl@MY{* zWN=>*RMGf>-n48Q&DA2Q9QYj zUrP+5@mDs48F)Lj;~a6%XrU`TX*<19A~@l; zWg$N?480$b+k>KBgsF>|KOx>N8a+wC@v$vtm2?*Bq%BF`!k|Ch>K);pD=udJMvZX( z)#g};i_54^+Mp`VsI?PxSk2(~m`h6Ad>MY8qT;3vN(@@|u!Zpogmw9YBj)Upv`bZX zdTtpK@y(NTNWBgmA6o}$6lTW5vZgNCH&TL)=6o5a{hF?;l@~A2dCG(mEYl)l`xFsS zUyJ^;aUU47w&H!3)w)kuRx=ZJNjP~-4j(JU<%AO_>6u7rH81-XM-)LF3}dVoy3#U= zhRW_Sc4r;-n_TqOF>I8gY&%)9d7gCNqkU)Nh6iD%`ULTHS8mMF(#dn9Rv?GAc*kiB zon&nXjB4oeTe3Y^q!n8hp&RgX-P@#K#&y*GPHNN9;^s{HrPmr|;g6NyEKb(Z!pbF# zeRKBFzd{K*T4b|?Uzi6cAIW*L!=rUMD_aZyuH&>qrY$m+7_&Pvwonf~3j5qb^IK;i zw=)rDC)z8cI=o)*37bF!CFmAP(6N#O>^gvvWFa_&NZpL-y5M_!71;0P@Z42LiB3LQ zWS(@QrVEVe_1GpqI)Aw?@&p6fedi7@XhGaQ1 zW1gy;dPv!~P;}F}8$T>TB3!mg*H_6Kq*q*9XF+DE$cAkON?FqD>hQ~dXjd=7YTl8H zCE&I7=7hSdAN89X8ucXt_t8&&cs@Jd5w)Y=oxuLDPkw#Z;?HX^-vY6GiRwa+4Ch5{4PP7mc3xq6&iBP zB%~lg7*P&E&ShmVrv+)+X_Hzqu{C|6@TM%i0D*imB1Cey#ey_r3rnB<6ibTfR|Nji zU%o>a?Fv^~T^7XnaJ9W&$;1pq<+@@744ui{is+UXvCKkh8AL`lSDZrdc@Qme0=4G) zgzH0eqB-001zm`I=$;-&At0HvVLmPFEzSU}mSaL(k%~7s4I!r?KenwdD+-#$rbi$< zN9CRz=@1k>BGm+qJp+g3LfR+kanT zoJqaDJ$w;HDD)hf4ppOiP!HX=;MHi!J|?$qgte?Uh^#ZZvdub=C|tgVJ@Xu7QSXzH zgc1^3ATp4C5ar)hu${#!{fd9mfJz}}l0wf}RX-AyeO1=iPOeL=Zg_+jNSjTO>qppdZm*p_ayB+xMMT65 zZzHGLbQEV6lg(B9GU`=bJAf1^c!AlctW>SGiyV+xeIg0IHVJ2AoJ;tf*{GYQSRPUo zTvWRkYAYB*Z?!11i(EU17j?CS=Cn=;Zk=5VJ9R^{T?{lcyh+DAbW{r(YWumMm?$#CkSl%> zVXarXS$lO+wBs9<6oJ$oQR|(TA0pwRt(Ih0LkkomW(<(k8rd@ z9YvzLB>m8H!#IjI`SD%mN6g<@qLX*!#Lwhr_P&PDLRK09Oj+#K!>_^Y@1!6vF!I4iU%Wc}zEf$t zH(DY7-Lyi!WvKgWbZYqDSEt5%wERu0g!n(aN{Ihzm5}cyNMF6iVwuHDf)0;iHLD|q zz6IdYu&DXFfOO`K6WMe<15B{lS@>0G8n8Nr{V?s0N+>UOhDJLn6%5kYs<+Loz8&>dX%LO+^l_a7>jS|>- zT#fqDSd1Bj>s&x)M2`oGgtctJr$Q@7s-?NH41J$XgNYz!euG~c6+@+lkU|d5TM=25 ztEOHLRShebn?gf+c{2;()!3Y~3i=f07WUYToVQYCtpej&ylZQWT!fwOD;Grr5@EB= zBy~n}Rl)T#jyx(+Q%k4i5LyB%-*5=nk*#uQjvWDN;q((sB1G=^wi`Xu#jMzq5OO7V zQW#=3#3uSn&9-Mf_!BDiL#>j&%bm=hK)Ii@S)jA{BA%z$?l!Euno7qS+1u_DpO>!ahb#4^Qi>`S-o+ji8_dYZ#T=(Sj3 zJ}#bka^>=t-pFE-(K+&q7za{TRD5gMUGXBA&BOrDnx~=5CxYB)klsw~Jq#JZq_610 zE9g%ngBHNk8=WRSWJz#c9H_>`WGKsLYkP18gQ$7mZ$^Y&Jxn}eVaVls zM4buKZ{(SDZ!*-_Wali2eg(+~ebg&c@h}(`SkidBZz6Ca?mBqy5Lo{WK>e?N2rB;K zga0m2_*=~m2;b7#0Vcx!$)_Luc>Kf1KmO^D^>;Cn&p-aZ=QV@r7vSi7Z2s-R=3h(s z_AfsD!E1T{Oso5m7Wd!6yrZw)+26#F8s@63`~+(Upj@a^W}dU~Wp};40N=a7+ADx3 zH~pMUn`v7_v2|eqpu2}V>soDrcSoN5S`p5E+h$4+n+$au`Q~fEQQy}|RS?fdOe@B> z$u-NgCL6UPoLnuayly>-`lLyHlFU9v_1U%NRjEQZG~!QBROUYmMKz%SN?tM*)l&u? zlrgP~HwcAL8z$%+ zRkT`tBjZL-R_pjovmS~tav-Z+?xThC=nMiO2X!unFbTSAv4nW22B2GKxc>N3 z<$X_U_0@bCm`ZTZBN%|sWGo_61aj5VoRP=`ym~Y#Kby}`TspvMSRGyCbh#zkiL_@0YqhW2Oif$BI--c#cVWcer`=ebPBe+_Z?v5(CsS|V@l zQe>)^L@Nk=w|$93_+0uCcD2fw z>XUG<)fQ+~kKkFpdR*byev^wC4aZ6gWB_-e4%@`b6`{K z-wLYze&e3?4nzJp%dL z5}t{8e;2BKwYSwBa!-v3i$B*ytdcCns>`@yX|JBxZl< zC$>@Filf@Uef~EC`O?4pxdZ&&#Ctz_ZT}Cy4a&UV+(64eo}2lqc@qCR7VkSXqr&-!cT7B16USdSdFy07Tr85>YHScpSO0>PCSgoJaHR^-HBh*DB z6M6=8+O6fIFSWK}%^N<{Fu6wc1LX!2%t>UXMrVd3qclyH4?4(i2C7=DPrD??OZ~O-hLHnGKPOpD7IlwAG0}KRVG4}B#On5J z7l{)goAJ80c6|^`yqf{iW0_c8%C#p(M5B*^x>b7GwsyPQdQU3_EB~Znag#D~6J5+; zIybwJW2{B!@g`>-n3pLK?oFyyw{mE*nGEur0+Y18SuVJqu|x5X&={#GJ??BVJg#X0 zIwfp|r3(Qfa;VF~H9aGwNlorN#JPOVw(KQ4Vxbh1MgN+gA>7*@Cr};q%JXZ!Hrf4n zM}2Z4(`WrBOMfc+v^DZQ&H!IA;k&9|Pe?7+5D^cf?^<}Z`XKCXJ(Hu&LBmO>JT7Sk ztk3(Q)IcvV)@lMaHTb?=-H(tfReN+`W&!Ye19DJ{*JmPFkv?1z_1g}~EJ5jMT6Y!ro~btBUjoq5tiG&DsPi=9`OJGz5Dh98Ef-HF2C zkH`p{97P`#y;@oGE-{a7orELYv`XmoiGlS8x|mIyIfollCq|ZEDov*~a&`zECkA|I z!9)pCc5d82k?w0Qd5J`OgVi{fOMg5C+k_+aYW=e5V1tOBqY(VHk(y0zSx;Gd;O?@{ zvB@+SKcYMHDTO%mKoXTc;pALy1pSt&sZkBrSRHvWtH{V`grH$)4g5m*c?TVM z?FEYrM|7)E(?c}y(#XxJ-$7KvDjX^!atHN^s}}7yy-gpOa%K%+P?}IhFgi{09GNjt z2N+^iJnY-HsG+4#+97(;RAN%WTCG9KyCm|X)%xA)6Td$``%J#!2cLfW*;mktzxdQZ z+t(uyZ{h0ijXeAnM8TZl3m(03b-$3){62BMKmA80S^q76`{3W}Ki~V{&D??)*WgdT zSfBOV&+Yi958r&*zYN~J^*q0REbA|gWBu7T94>r|@Xfh?`D=eKp~3IJFL3-uDAHGq z>izA;aJ=Q4uh%XDvOoRt&nHxfN9ncRw+ZN zF3ex}>5tFn|2!t*caWa>rw_%GdGjCsK!|mJy-_Y7oiB9OKKf#O@te5q=j+p-e0iS5 zM|y5CxSzf5^8E7Q{Uf7puR?||pAFee=34#IIFeuWW`5BG{l8yw2_OE7JN^=vf4dvM zOz401jm?scq0AAhe|$*Hy@LQa!K#RId@teT@~$HF<0_OQ~7ok0RZiGEaif+N(vYBIMw8QU9 zbyg1W2?o3}&h0UIxV|gpnARsIoK=OPgmn-o9OxgRmOO*#OBE0^m7bJ++KyoAsf5YF zv{B?JL#Z;eGc2#0@;tGj;}OW!qXw-DrN>1*T0pd~yd-9RSDQ@@K z;E4V4-OBC=yoXDXLPeajpKdh{=6Pf7dK;yl7s0h!Ct#xr|Pj{R1A=KYJ2L6M8{OsegKLA$B+x_Hx=dkLpAH2&ie|2o=r$4bF zb$|cqFUN>Jf5nG@5=ZdX{+&mB8#_8b{?-P{-zUAl8D#sfmT>rpP4@YJ{ptA8OSs^F zzxmUDuq*K`UykR0{q)3N|KzVewNw8Ozjmn3`=rJDq{aKB#kVAB@vr8XzTNqZ_x$kR z4nO>rBrxRE=VAo)McB+y_IfGg6{)%vtqbckdlwQY;?=qs)X5~3CQ51)jqjYt*3WXg zrsz6z$z(%(9}Lx*G^1tI@tBWYa&9J&;B&1LHhBYcS}0=`R}wiz;LkE5rUDY;Tz9wg z99N(p)>Nh6B7ag-m^a-w&5t$`fC(W8U=bl_6i>)vC5&yVCaxN4p=i86j*97&7W!M_ zQtr;tTV_~*Rf(@NM%@l2TwSfv+U7%hJhBxr`ytY2LMEkOm{rWkB20uOPGQ8mzH=2s zeNCCPA|uesQz|`+h|Jl<$l@n63Ccau@?yg;pQoPBMVpZo_1=nmwqH?qaCD#T)gvh? z9#LCIVLa7~WXndHg<)Lcz@*dm>U5bg%Pb)m+9$(0iktDAruS;q^;yr&M4IL|<28Cgb3^ywni#f6!NREc zxkzS==XS_*k3vk+N*uugPw=Cfo3F%S~tF$T|j?OPt3d>Gf_3-F4kd zFQ~IwPh=ghh_r5olCK*{Bj56@ek!xi%4_$wswG9teq~c8oH|s@UedmAOD`^#b6zuK zZl!oVlSNEpW#)I)r|Hc$F?*fPm-NU;nex7H2K$YiR?{X3t?Eo2$V?z+d7|I^IvP0VgZ@Y|(_#bg-$Zzrmsj>`1y&{M5l}y5cq|>M>#+hBLXlpJ@)lCgiHS0`O(KBV1i+PWl@YjrfA9gp2hb) zi|>0De=8}D5Ko>>kg09d#);{7M<03^LmtiDa^DeV7U6@2s5z2flshBN-_WvNbSCAO z7QGM2%fr}onDWw4nlhx%MZK)LuwH6tUT*TH<)4~y>IdQYO7oPHY44G0hiwXXviH$y zwtXgijbi?lr!B~M`R%f`Ooh1_*@X)nHY<=hrVed2x}oBdH+(@kR~HIy9&Noe8R{bt z{**We${2T8Q4&(a!IVqlYq+40a+WhJxwk2pxuy-@(odtup681S1Iq6sSH{FL@K$>z zT2`f`;Bu0OIX3cp%X>~!=Fp1lp2hCxPaS>Y{aS6@@R0`Hh-h6H+KZlSzy`G@l zNuASOp|vvC@-LZgZ;hz}K9#1r9FYHwhk?P{hq7FKv#N0kx zDlxuc0$NF0jiS$%Eq0Y%Ezy)G5JnJ+(C)v0FB&QO5~`w@O%Q!*BN^5>bE70_C13oBw>k#!HcRDbP4CH1aNzE(&3jFGVs2)*GPfPY>}~6$>vo0% zoG7Ygvhcc(=|#^TA8GibfURwY;T=XRN4+MSgQa)omUgZv1-E3J zj0wKCYj40tyop%O6CPJ?)=m_(jjzFA)CaDM&;pMjhGA`&$)70@q_wcpFntx%MRm++ zct}iD6J8DMx5(;rXI-s(Yx6Q_k316Hz&bLejz`2zu$v;MV*(X7FmHj0jnf1x8OnI` zbKRU#{3&14wUliNRV-3Q3nBNH-n$4@$fFJ>_BLyHIm_?Hpn_&29uJ+B0Xa&o)hwdK zg0$wc(}_q7E{5DD3bAJPK;7F%INrTV>TVvw$qkgMucF(8k-0jLqKK`~O}S0dxreNa zX(Lryx0gqIRJ89-I#nDLz?wLht79W92}XZ)q(Z3MAvfoae#NA)*Ai&g(r+6bHxosP zGS4%rdFgMIbhcwZ0pz8>s-y#L!@59WpO z3u@M40z`2m!ilLoF-M{BBk*|Nm7_5XbR3kvVFxiM0(unQw2-KVIyR0p-yoDhxm9Os z=|(Hr##Loh%X(qTw~ZqefHs*JqjJRw)IoKGv?GD^RV}!63d5uQ6!xRuzccMl81eDU zNJ^!|VDY(2;Cjyb=;D(K{fop$dZHj51!pJi{#8XmzX7`ZrEIH?(*EEFAAfef<0b0> zloGz35apMOAl_q>_t@muRK~mqCGSDWdrB?wFj~m{`V~c6S+^7tqPDrq@=&LcTQ~=HB1SoQJ}ExN+T$b@n&YHp)b@ z_c;S`=G$xl;d*vIDTL5{FcH2MgYWaqCtKTouJst^37qGUbb+WlL?+F866U6zeLYMFK1UESaUCqCet%;rWs? z#>@>6AVG2i1bDF!<+3FpkvsRwwdNf2Himbk{8f@{Z)BYH!B9L*s`hxSJQX#|9Y7V= zRuWQJj7DYPmfWBiCqIwkufT)W*f^q2R|HIdE!e_L_526G!xI{fYXnWFL?L%?9zVV8 zu0M*x-!BlST=P)>WsQ}}6hAV0iH_;#K*?f+9*YmtaHwVs>6zGtYsne}W792jid2iD z*fxTeG1Q1KfW=1{N9nCZp=S(^+N(+91Cw8TR~)n{AxkGxFx@hyTDl0BxK52J(h|V# z+3b9<(wY@*Lj0HFV(oORFmu(ch&0!G>8(ehJu1yvlVA`M`;XjUv%zEsh>ot-9`U)t z#f^9oYIKIM|Y(Uc#Hljv$?pmupr(~!Hf<~v< z4~D;Fe~w#9)S@L-gUYH7lSDT$nK^vpG&jd;;4|u&BK$)IT$Axc?>3cu|Htz9$vfDo zZ6oJKO>=AeY$8pCT zk5X2}s1{E_Rsb`0!sU+JB|tMn(p1r{!(|~fmW()UmV1PqP?lW2Fco9=EXG197KBOH zUdUQo$eX~@x3R7?1x&ThA}ZBOQ7|G!DMu zG@zFWv5cV76wN86n+ugB?{NTiDauYzUC&qGsS&$%!nmf4v5j><(T|3GoJ%b*X(dt= z!4Ew}I9HigJ?T6Y8vd8-fW2PdKHeQkmX3YPUow+)j(je3?s6(FgoN=tAeA z3~<#5nI&IV&hd^!3uIW8S*nXw8e5fU6?AsOk=J;zH4vtMv9tnjKNo3@xj zLOZ1rxiCo9VX;CQ_gLS8^(>tF1s1fha-Nq&O=)SQjWLXr<(t}(3@hAJc%UAZw0jo3 zVxZR?sCOlIV~sPg@UA#38NFKI6DnIO)3Bj7SE^j*ea=}g*2FELT?Kf?OKBEfs&rrI zC#XN4v@L8IVeeWOy?Uyv;garki^BG+sH+V7w^Hmmt11=P)6#OE+2o2S=kxnGvW7gPSC|EL2Z56!<1b6+BCw zcfY{LvKo!eEnOrkz-_BaSq;)3d$`sLXTBJ3s34>9?$^6j@3GiR=7^)yHBi@$5y2n{ zqV7)m7gPWifL~rT&z_4o5V=q-CfaJ#L=YijGn}e*Pt=ys8nUD-@SigKvxF6*fsT)>^lT9j+Bi+N9R45Gu@3@N>9) zl7kQ(OiIMZQo6yO5>geFe09<#Vc2}0@M23JeQB*_tX${Ns$3S>GLskGsF-F+3FLVI z4W~vZ@V>TP#7iYD=a7?*u48kY2zLJ=U^R`%USZnN|!XvBaR^_uWX|1Fug{`QC ziiy^GtGnm|%ClALM<<247K-V~x<8E^LPbvrlabAO*;EJ%@xqDL+8|eTg%JRF!)~K= zjJ&Lxy!PEJBNg^m;6^aGno0KRM$0}6a}bbNGI-1d;U!yF5b-9;^`tsm#j<&90bbUk z>TJulJ&N`vIoI*83LmKPQT!Hi8QZqGWMt6+aE0LtFwuaF>@Cg+hvl7iU35q6Is$va zlZF{&BNQN{QrPW7t$v{=7giih@^0yRpEy~H)S2E6ye?T@mxuM$(N+H`oI zO0CsO=SQwDjfe6Rzl%vErZl|C5CKFZ;zoJF$>$V$@;LcyjuU2ojW1qF0I#WzI%HpgggkSr!BLfZ2y-%!2 z)hkI^NE&8m2|_HMvKainXm-=#iPWl-sIAf7m$ATjxz)a9-Pq>F5WqwoMBr5e+xUik zp&fh2jLfN57Ljso1996B-~-PbT*V4B%QVIT_vPgd=UVxXCn{h_n59RXFu-9>>Ee_k|PKY)Nt zS-?ybhQDEwysOOarE5v2IB;ZO@C$`XLuObj2Tg_z23rwVNwe5Vg%(Okh+*;5ke5}a z34>74li>@$pe8b$5hWAYo9{&fiS3>)=K!d{bQp~MQZlT`rkotW=Cfi$zXrC# zW!NS-iAIiBbH-;t-}SPd*bi1Y9zySfBSZOK_%=%}G`%Wtw5(>NpOv;j#kMg8hwnKY zgy)Jwl+QGEXaQgrHrKI_5YdD(j5zMXe$n0MZ+Kj>HglO|Bu%)|3Go z-Mi}nrW;7dY=@@c5#e-NNqyp!2qb_n1sLGzbZp+7B#Ia~`cZ2i(oAq$BKt8Ya0)L2 zS3%KU4lw|kECVMwaI~oi!q?a^@N;BFWA4(xX2C1L(<#C-Sl=$%4@Oaem(mfcklvVp zkKR%NcWXO!wPGBM!s$)$@M(~ajU!RnMUICh;C4HJjzz#);nibzEU-)T^=htzB3viL z9&IQQVm4aiH3?q^afl}CMIp&_l#wZ55^*0!lXi^|YY4#xEL{PPT!6nC+@Fs|2D*%f zjY$L^UUY{O3*SKU4TcT-yl1su1~V8lkkPQB7>7S7WB?(VTf`AJO1z9Q)!@)lGowqw zh-wY6CIeu!E8|lTg+jzwh(_4M=s1UCsH!sIDB=C!>k%E+4fN?qNPO4t0kV4%dlA!r~Rns;_Re}22NvE8?ZGEJnD1SqlI!|zDNEKdPT|*vY2jfQkyujn) z*y*$dJCbR_W{$!&W9Sd5;(A_mQf-C z;1wvV-I^nd$VCKv)3E`-y$5!iz^BCdy3M{|e}H@;y0(w+y8c zrxO9mMjTF>)6Gm#c}h8Y&I7Z39dQ;ryRjkJvhUn_*+>Y#>H<$E+Mi6+D~?uZho}n} zPJF#ZDBetBq^TwP;K>3y(;3TRiw;`!imXaW6vT1j7-A#X!m7dz;^Q*Dc<2)HSOi*~ zyu6gGl*n(L43uVcMCm1p?X?Ovu_NfSmEuxlLxO+BSs0XA3VqEETHRUXEi1814VL;8YUj=ExpC1O}NO=s7$pbJY0tBukbfPZ>E*MM85nh1HD%r&I0*ATwe6;THrs z82VG}t4QM%agQR=hb3JYaQ6bpLN7BdgA~?xyTPUaJQNg-%iv#uD8rO8Fg$L~#A!IY z%+wVtBLWP4`UsSaXXYo-10w2P5KuZ&JZnEh;MU{ggU2yvf1QI51&VHXcd#9ZcA`?! zn+C*(b%j0copaP|`$t$&VBZEX_(Z@gbFDTw)`7^`#*|LM8p|0&zy=h>eIX=d7PbRG zjRhD*R0CUx*aR>*Ra>Xdy+{qoa^wfgvuMq0ZIKzBETc|{wMUMU4}nE5Fvo!O0=98{ zmePp0VgGOuf(aS>u<#o2g>d4NKp-?G{Sf@bfO8Zh@RArVT*hZ03mj#JxrYkRV*!>n zN*mG~%VhyBHBfYnVQi~J_+;pXW1M;b@W}i*-0Nthlk2<(oEjq7Awv(k`vidG>-ubS z%n+z!Cu2r{QdkOD%ceUH8;6PI0A?{fg{-@LKp=cTWSC-2XVmFVM=AgqNq$V`@& zRZtm*i)Rn00U?dt4dI}zgrKAdfKeyk0ZDjkVw$Va=JGP&R%|4mPHOBmvSW`)hYy&F zy+U&#mko~B1FpEnD1i|d{hPx1!y@W11YqDYym>qf4h40P4U^2UZ@r}2u~%GMEfP+) zA{icB87ItO$;=c9%)plfeiDF@m^Q&z$ebm@W{!f9a9M^=jSIlF zz+-|&PG#2y{7fcrnbENvj<}a0P!G zU^cDSf_v>`EbTMi4#QX_BPlSi2%NA{;K-bKXFDhEBl&ZFs4>(`Bt+{#9^Q1IJz-B! z@E+t^W|%>2$w4jZ2b;ukMc56gr!p3@o+g?@=zvnpf|4D*8(n-s9FXUFSu6>`i!O#! ze3YaeHZ7FFDR5b#iVbnP6rbS45ht5f>98uzqtDSBopWDF7IcdtQL0!d8$4;DE#5A^ zSskuBtecdCP0>Jv@Owfi%{*ew%0~;A(l32ur5f1>$fN22tA?F%`Tn1p35Oahi166py(nTp~BCHt9;H-B8>~{3H z8R3ze6h5b5PHWY&Rxqm=F2s=un}nKU9<%v`(lgfj9=CI_<{6rWB7=Q>k)pT9yBrR?Rdx{8#+#dvuo*2R^7fH#U>&jxE z5n$le_rej+N}9@|NfCnYh`LP?C%`DrMkPNXY~z;0%5l7UV!~UA*DH)Q-yJ2fDtJq znGv!vr!H>+y9MD2y!PN^9xM68o|K4oCNPC5$txFdeu9G6_N?Dm79`kvgfP1W7?Y_> zUoZ24sW9K@>j7kz%6$d&7f6{h0hQ#kBFQ*L^N}SvO=SWv)cG*I6HZ$eB(xNK$_tBh zjKmX@6ajV&VXz+#anJe{fGG+N%52mSZRClJw1s_?&R9RMJ0v1%>G0ZciI)9RjU_-n zDo2JL-h+{Ki*Sp~MKodS(19h^lxV$3emUaw>)obio^4^H72_-hjX1U)=L5bnwXr@M zjLu}5j?2PU3Z{@$Ww1pXl;Ou^hrm(l-dM$Anl3O;Zs;h1Ig;32HuJlWGAi-X9=!^CR(y9RZbROEN}(K zVqt$pMja3quLY*tGrDq#!d9BYo&(_*B7TOI>tzG>U*Xx9i&lz>6}Iy;E;4CS0YEN8 zJO<0UXwQZ~gr!6^c>&5VHdTX|R~DoIJ&nvB7uFY8Gbou!Ux%$=gUUmSL0If&E%oLD zh0h~TY=`%s1TtkcT=0CFJSfu%X9^%FywW5kt%v`q+D5tCh*V7= zm#$+24IwD}6YLo74tRrIE9(YK;$UV0pxQ~IgW?L53B@rlB({~y05&FFo{5zPpD0@D zi>+vY6~DqfO34Dlaq_f@V0>cbW{`KO)i9N<5@#Xmn^a?6MrD?OrI#AvmTYU-awCPT zS22&6Gt=*o*|wcv%Cd94@47Wt3t5GmAOc zIdohsmQ>BAPz8@_c>F|r)lH6q!`2%z<>HJ1G{VX)##0d(&Se@W#K4@whea}(Za3g4 z7G_2)LgkDD?49(3dIi@!EGM?fAI!91=7vEGklADa#~{kVFk2yT*%KM2u&QkTN*rjx zsfWd{>zs{3jDlEd0ia}~C#_{SOkOEsf;mQz57jWH*bNJrdl`5#g@_%}flQqg>}7cw z(=fmU5}O>yA-1e6d&2EA4Am=(lh<=(3rA^KB0C;oBqy0XDHmr&Qcbye_4q*7o-pimkFjCWzep3Lr4seEJ&KM9;KR%SHB9$_AU?z^_dKoMh zGfjljMA_!-_ z9>_RR-6$e3Glqo&Nz);w0dk`09t>j(E~~D?17c$t__nf!W4=a3UMgB7qG;HgM8O=O zfdMN)rV?2 zqKs}}e4ApKmAOIuS0yDmem+wiY_E}%#f}U(lSN4f5kdr(ZzAqi4b~YT-)}E#oq@a( zkP;h-_ORNlQ#h#TOz`@qRyTrlQg9y2Nw?zO^eH}8JNM$v|v~U z_1Lw=Uq~+jFKdlO6gm1tHPiuGSbK%7?RiLc1*XzZhmF(*p%lItFVny*bdjWF7yVK{ zGwdKhcw~CpO_D=s7;9kmjNln2M!K5<@Ms~sn|3tOj>4o07F#!%E`$)p3*rj+;*C;E zI0}lGJTPqn(5Se;+Q9CJ20YNkoYYQd&xaF2HH(-f!pHzG0$WQY9 zayXE|qzC{Gj$8_2$+3OdTmaCRxNg$ohWAF{F69u@yR{IHIHC_VBqfhiI6IqCGy|IG zlQJb%QI-lRw@IA_h69UqJmgB$2Ulbe;ie=}TYwo<@L_lh!p_1|pDpX81bWT)A)z9^ zFYI_`<2b<&s|S@n3n-`p*A&L-a@k;gX8?H6zR{H?mT%xcfjzV;RdRy?K)q7l-dlO6 z6e}~_zw9S(vP9`PH z2!MiBNm@A6;Dw#DTO-_*u=NS=qa%LzVZzg|XMt2Fox{hPl!C)DAHpn=Vb222Qj)GP zTsBO^zQ~=BU@|gla5|AZNWgoeN*f7IK$@K5>8y#thUc|(KIy)I&VbDAO15NRlbK{- z`~K*9oq-w|W&vKZt!d%FBrp!w5>`nGHfZssu&;s1AZ#32H#THM*i+nI8h0HP;20Mm z4Cb7*mwu!G&!#j&ETAwZ{Y;?1UgWqGVhrEQN*aU+o5}gX3Y25guaa@cvn>}}0_Y>@ z^=`8aIM{{C5p?35gVK@xmbS^Tf+Q0{H#3kxDYFyG!AY?&8nD_pycQ9vQtM?1`8g@> zY#VC>YNq%fJ~DfN1z2Nwr@bSnAx&3jVYJhIR8R3|08kt;rKCkUU=bBgAUr%hpkeuj z#S4Q_ssix%RdfPQ5(WYHn3|oX6pBM&i{(YgIhm7dQUVSDc8Er(n?WUN#hxDxz&CN^ z0T7H^^$WxF*c((W%$@l+X12+vlog|Egf&g1KLVF6kb5zAffeL`WsVaLocJ53UU;?u zj$z_}t}QWnC9h=6W6{`d#`YA3L?2OgH7L#4#9DHp5lE;759u^^Fd}Atg{XsLffl$| z%o4CHB19|2$7u|9&r0s4GpiwNDq}u`@j@B}QAR{G*))8mc)+N8Xzba9mYnO9*6z*}qUtP+ni4qJF9}Kfi76C60r=(kKEPJ>fUB)~*ZKg= zlK?7WH7bKJ65irN*=@q^Hte^Et)l>AvrN1MO5Qj)cLFm_;TptqOY;E3YGgCTs3N#z zNg^=QNP11q(jmUWJB3TY_r^WB$)j_c!86H^=>a*JXK+p@<0WGmqm1=3m@@*8#tJ(E zUxL&iJ@leq5&#%* zY9>JzF9Y7t%vL9+-e6P*W#ARCWvM`e3R}3Xm-Pro$0;2~;*L^+8Jihc2tX%uR7Wl= zO|x?zr;ha{HhI$&2Md<~Uoop-@(9Z{_(X;ykgTi%=HcxYxE0tq*a9!4x`Bc?a6w~8 zVH9T}D}1Ba0g7;*sG!NqVuj^~t#6v;n@oOFfM;yxj8`?;MI>ywbn48%7@!dznaZq< zS(M7~xNLQhDmIQH%iP!@OlkwJu$9~ruC#)Uh@e;cLt+7lt_YSj3nPwJxK#Kid>jBx zWsy%#7Gkta20JfOGrh810NwO8@w zEIuR{7j5Pci-gc0Rsz3Fq)l`zG9eUZvr7fw@fn+S@EVfzjHyL6v5O1u!eEi_%&)uKZ+D3ru8O1jIuuD`5p(sj2J$9W0{Y)E5ps=%r(o z28S_}gt2i3L<00JQTn(@a$L2NW(SyMgNGHZC#9<+`?x7qY9CDGA*?82kYx@=RSZ{B zaFr~?80q<8s-XHR$)wC<(yKV}grgA(d!>ZG8*w88DC{=}7fN8)rQ3vxozVaY4$pWY zVpS;r1Z#=01`xK%*pEW_L0`G2bZ`MAfDchH#36hASChTkJvX!eFGLKy|4h=@v9tu0UxM;t?sTM=Rr(>2Mckg>i+ z-U2&_5g0TUi8xz<5G%1yT_X-RSTqhK$YrdNW;m%qht{}{*%cb#JaddAH_72AXH{dH ztM`2MlXE5mv7W+CFwz$)WA0ZIAH&XTo&*>jV0qY$3q%l z08e2RBJNRE#FbpMaXYEO>OVY3CgXa@Wb_*v0p<3xR@lj0h2D~J7IU!xU@)J$A%c?R zJkB0oHGE5$mL1@cW83^>n=Nq><+S87-<-5bD0&$xxE8!6EF;V~f_d1DD3?_m=_nCU z(l|t66r_}_fsH_b*Tsn^-z?6cg)@?&FdNu|!3Iqd{g{TcBKr+-Y-Q317~HI5TzD~T zun#1PBrcK}#YXW&HpjwZH`a1c^*TziJ0UvPgKZL$04GIiCEX~&jzz>!gHTAO1Rudv zAFK+uFnP~=W{)v26Mz!np>UBV=34Mrg^TB49Py#BUf2i@?`6!jDJ7)@3l{^a$$9EK z{WJ_BfCb4+8)?ybS+2>E`8_fBjj)mBY3dUUU`u9g5DEzaYL1O6;DN!Y*ATA2F8HaW%0tKuBm@JK zNXeQVv;6R^06n;-ure6uiK-7?gp%DkUU=b=W$=zUahP&o0HG7)-2}v5RCd zmXTRix_JOR7|&=~wzaLTmkp{WPPP}a3}IPI<|t7Gz`#y0Rfg$!8SEC`wMZ;9OKkxr zRxKNU{Qx$nambNfjQ}1q$UGqBMmVX17ubRyKCZ@r9Jp*|!S3a71AOxxtLT%`As^#IXbzoL?ZofS+iiA^?|qea1W1 z0S3k}&IV|%%&sVAcmmL5gF_P8%tAE?W)HfS1}%1gvmr247Z8P4CviP5Ya}ti`m;&E zlg%Dt%lq70N9nv%-^oX8PKA$l5oEH5XubeOtm zY-=MvD^nJQl~6o$WiyXsykHm0;gS&|thBrZ1m+45Z0VZO$E+MUA2@&xVYtf$4o|+q z#8XN%&*Qb4L2V^(=>~$RVI)2!6%Q;Mz)vCAR+%`2<-5rS6Ii}A7hM3EKxV%-i0nlTwxuBk zkxkAP76kdQNSw5TA&05a*d_`nN@M3C+--7MnyTREmNOz)w?aB};9fvfJO*H~U?fB^ z%!n`&tDM`#CnvULdgdH7EJKuYS^!27O5@dcn&?SOu31hE6R#^Kj)(IyhYuYji8s>I z$}xP+DZ)~^9YnF~hvFOpAQ;Y%(^^uu2H%ma+f^ych^ESA(K4+Mh%My$it|f&DZ`PN zX$F86c{adLM-*jGii&SimmR*8&Y zLTWTNAwHFsD)O+z%(>=bVO$W`3P$2sonmXJp%#t9y;%opbQ6f$oQ+C`g-h%NLl)nZ zGbx7cP&mX(j2zpAgVNI9TY#w$Eb=JvL#vqRI;r{${8rdQIM&O$WekvHESgj+#gBk@ z+VQPzFl)}C04)`^zHn@n?bCgcf#poeB*j*1X*;LvPvsDj32fB>7NR&WbAX8RGz;im zHd2CVhc5*l7TlYdw?qUK@d78}4>igvy#qYRcimY;fp=y^IYrXf(U_zV)@NgJ84+a^ zeQCsp_zJAtCX(Oa4Jm25D;cqvVYis|k};#a6(TMs9I^)@HPUa1%kWMjHo1s_DP}Mj z#C485a#*;?m_s3le8Xemd`q>0qs}~qh;j>75TUD_ECgRU25DmFU;+_7Tf2cC5z4TC zK}t&n&~xCVE*$B^wU#Y>RF5u-Z5lvke!VQPyM*0zoD9m=@GP(`myQC4dJQ}awSp$i z6$b_2j3V^`IN|7LRpeoiv6=!TsTeB4^ROCgh*>Aas}RPqN}nZ`DGjl1VFS{jz7+F) zaCU4~#s76zd=@4F_5r!Tp^(XO%O)Snr^Ki7?{$@OAub~iY(%unsnbS4EAriu6OzHS zoL91;<|i?rW+@9_fxHCpn+oxMuW7a^n7kl0pbEiA%*KtzSdFemirqQ&h?mt6AOR)}yI#hb0?wZn0w|6@ zas~-61yGFtWY;5uhpbHBDiJDYp9`$zWY%3Fa`UPQ4#5kFo(`t7f7!7?r-1+jOKCb%MG>$ z*s^VcO6;0Sr6a(_k{0QZ^Z?kx2-3Wdf%Z1c& zp%`J7;nL>hG9Os2CXEKG|Iz`@6NDG7nG}Lel*=LlQ}R1gy~8n}O?$Bf@ccaiBZL6@ZOgF(sE>!v?xm{8($XNbTtkLDG*k%@guWz zJ|hj6;#`a|nrX6iEV@QII*O|qW_}FItY+dHIdSi~OmQDL9;A|C*^5~MDsNP6L;^Bu z;3RM5oL2Usag0l`nagoyacr^LA#ucm1;_1W*pOOA-5Ed)iFPep>bkGg;FInqm}1<5 z^bDFjl5DWf{0ew$p2!`iNuI4F0QZ8EB?K3Syw;9`0u{DDkcUi~?(inN<2a#B5-JYP z*W*l+y=QW7CZU_G#4bU@xr;_!l155)Siw(XE5UiluyCy%usn0>D={0-PEYXJO>BJb<-C_>G%1)~7)o_!#-|O>1&1$Xh(^W| z99gVZlPS4DQ7Mj9QORd0fJ-4V)*7}+17IX0Q$E5LI?*a zC5sY76dkLBWGHi6mo?u&XM!-f%!YM=&YyuQ{LW8i% zVc9*K&9PRbFTm-BTf=K&p;+qm&0t9Y+ZRuYFAlE)R3Yqwy=pMxK(r-_P7y<}!mdu1 zy*TSoA^;e+{xqC($U?b;IGG)-g9n8bb|O{I?OSp!#et(PFt4$52!~@aB(niXNrcDj zAVsLqV4-GQRgYq52FGs7WsbBqK}kDA$s~O=GOO5VI?2qCGc6K61GpEsKv%p3j%I6_ zP;P7;4Vs%#TB;(${}QD04$rKZuH$8-M!%G0b>Kqa`)*nRSQNj2cMT{d)3YQT;DmA}DOX?*Cjd)| zG9Zb|(lB(k(q71>jod|}6ep9k7*WX%!D*j_V?*G7=gH!XKb{K~pIOTFEWmhq?Va;xiy4%#y|<0-vDsjNvjqZ7r6BVDy9S<#&l z28I&Qa4;7w+EbiK(X2ov-KOptI9AMHCm|4V@5=1SDkf(V8-Om;Q_Ne)WeEACrJ^%? zl-TP&n8+Ogdm64=B{5us!Vw5J8hhHDDEd-umIZNyf77_RUIup*2n5_I+Y&4c`346- zaHA5MP$U~fdV{UDG+fjeu8Fp(0Z?Eg0x+zX!4*izBhp?#*ql9pN#W>_f^$P$PT2y* z_?;gbIr77xC^4dB&Tq0pt0a%qRbtsEQ^5NaM5Z?mDx(R+n>kO_D9=71rvniz# zTX2f7lU4=q&v}U`y8=EyD84k2RdeJUB*$JTczD=LH>IrKwN<%@NuYhBR3iWh2f$NJ zh=4h$vtH&VDa?u`VCV2&4niVHwwRpfin!psghEL409U%RLY9+}8cah!ksa$6kHWNP zlO9@*hgFjAq^c2)Okh|^A!0)tSSVuIA-qy}>%>z5uN^?n`o69k4!Vr4Oil0;St5-% z5UdRbKr_J6^=|kn6X3Nl3(9qqm!&q`Q*(pCxYBhoG zxOMfMxf@KUITp3*;P;^MFda5U!v7wygz{_>VpH`xG3j49DF&nn+abbq>~nB}ISu|41`XIs79<6nL9Q$l`OdOAmQ<4n?y!?J49WVT zsn~)2ig(I&t3=Tp!9u7ZsNjFtfNFViHI0Gx=LK% z8{^JYfYo{G3rh&FcuPUJYwa+83Uu$(#3Y+o7tREBp(YOFFars+8UO+0EwH5v3kpyq zJ+zMfNHCrgI|4y_N6aT5ieSu@#9k?07T6j@QU{;uQ0rv=OD-!ZvbWx9QDkR3V`kHJ zB=eFYf67=dqyN<8d0=B(VcJBvFxiibwF=S|);Z2FWFClaHv*)R-jE4261T#INYvI@ z86Y(hqASkwa2}9!Ng*My@Bn~GdfgcT1tv?QXU7^s9DHbR9E41)%3)W^aVAx3>(Y47 zAcc&SjNcLN1pI3BDBgLfM7JQ!Q?%s6aW+;jmZSjKyao8pHz$FFBksh07;Nd2OD#|lzqnIvC72-C0 zrqFf`^2NazFGeOt5t2}l*W+jaB_lqB#gT7Hu?)_;(O<$iuw#w1AHen&p#W^FjDil* z)o4bk{OMycjmkVsYU^Z@!cc-S-yf$n=l9~nVm42 zV_cjV1-P6+HGDI9rzH>vklmfV?t^o?u*FM&UxBTfTaDjA30h9&Oe&vZzp+BY1UTY^ z4t#^nBVU0X(uOS+nd$UEfWgQpMS`?U*;IM9rq~lxmnZ~flQCfI!efSQt#Q7j$&)RW zs>iaZ!l@ z7G7WuM-*6wLS8$u~2OG9H5H z-NlH_7{yyQRs@`joGh?ZhXd^GavA$7*&$_lZW^bS8iHRN8n%~e(@XF1RQL>v4)nm5 zgG3$-aykMk_{ch9lkyENo1JjXvNga7v)&}v3|aT!%cAe=vvrLp}GkPE)?z-IG)zn{UTmw zYEEAwfPyWg`v_a!<6(f5@nCL6s=(8U&7})_J=qt{b*p6j!1hm+(38=XX{z_6gF#@# z(m6uYM8RUb_0A1O6eyPwN0T3gz8CQ_2j}q>INXX4@hsi)GHYOxneWMh&PdNf-My-T z%!?&^W0lJqD`4#Jl9qT99PmI`a!qhEucVq2;Y(sIQ5EuFSSBQ8g4Y%siFLb>98Scv zlp$xAHIws>UHxpvHWAJ}lHy$M<_$Ug*p|mchjctBzEe{7;OR)6Czr(xhiDc(`0CRn zTp8KnsS3qrGN!+ZFjoNW zBLXZE3X`u!RNw&#Vc!)TG~QK^uMk|0P5NSa7Nm_pv%>->q|v?w3GOD%gyW}pX=l~U zV3O0PQR!m|-86)E78AS~Ddr0ZU3E|GPBZ&59$&ggYQ8GmRur)J$!jZ@bwInS7Cj}UV_8IF7sEtcR|;OfVKOBm|F}N zJnLwkDOu51=UcZVw1;s(%;Wu#yd^GUC7!&_bKCBfNrMVx8{A-8I*H-xk$s#U@7hYU zBF=wdm*yNbOj@_q)bx}%zyLJJbxTYpL?*g{@UZZlx|C;QD-MEDICoaqv02s(WpzHI~?WsDZj*d)t5hwcDU8f+RDDXPLa?)KPLwBrpqoP z5%bN%GVlbO|L_0)znlMfi0}Mg<8X7ZKQ;%4o5%Pzo3i~9BJp{&c{Iv@jm@)zr-z&G z5Al!B@YB1S#;-Rv$3Gry%)gsWNfwIrb zi?hlNo>7>5qZ%il;^4>qbKmEzh$xmvR1Ci>$H(}%7YaU~n6Bf6+KmsMJ(0EGzkauB zlAeDXvfihQv3(poEv?jvVAJ+qUtfLr9+lpHe{!<#oKt^1 zU66Gvix}iq=IVtUB%bEU!*a&ly!_>Rd0f69-_mk0B8j>WWWm-IJ%at(+kgEIf#qrsx#>@2cDGjG8(FSP9sb|1&gr-7&o2~~dSPS^ zsO9wZ;OUX{C-E=Nsd0S+-@1SNU|s1|Ty$^lHF@LbHqYn1ea9xdaKN7v%ak?RSD|mMN6svT^m4Of3+dq3I z&+i-hjfyVE{*!eg+=9MSuNt_bR)x+}Rqwg3PU`cppXiPs=U?Uj>EkBE}VSdbB1%JaTPWZ0xQSYD;J5)&D2Ns7V} z&bI1FlPh5pbrgwVAI(K98RrKcsTxoAoI_-#;urJUf)V z_kg}k%*dr8p0kmT`#2&Uw;MEdmyC42g1eE!g2npg+2P^Cy|TZ-ccPm+AO2jpteX{E z9^I8A`nWs;oIs?4dz>EPBf9I&gb`hj{6n7FgEKH=Q=e^~lxH*$kM`!+jQ@OE9sxvb z_HfYo(l+wlHn81dByfY1>rb!XYrW~X)=bS7IH9GM8+qP(}mQ_jT3 zR~*kSvdF*LJHTt%KbixPgZQ``O|iY=ZGO8CbiaShmwBT~?M)59z`yzum{r~A>t(b(wqjGlfV{_)b$?@jw6@i+I1?4?V1 zqp$G&zS@(ak@EP>*(Lq_f++56dg)D`>NZjL@>2d15_P|btl{5p5Z1gyO#YgUbqS#J zUTx!bfta21d0*40ym;ep-4RzxMt!-@q6L1vX5r4gb>@=a&!^s}5qY=IyIQvV#pnHb zJi&RCnCCao?(qzs`Q?}U*wSYnc@3lYfCdk_)Bk|Yh5tF5ZC}69-8;Yi$KE6U)x8xS z0+Ib)QuJ?1&ho3@IfIq>)05NwL9?r$9FCIZx~Y)CJ7>LT3$C;%&fb^8K2=Wi_So3Q z#_on2&tAopsWi1T!#-bj4c8Q@P}gx++)_#FX!Io}>dpH^N?i)eRrY8{GTl%IQPp;( zAmZLb7|;W3?)EMzD}A}hVfQ>0P}1Ii^NDvzSn1s$n!aSh>UWPA7Js|{`SHQyy~a$` z{?X&7$8z>1Vf7R4xcTV;{_B3haf4kLrwQhhllAM(7l=LKySPdS5dN}1@T-TLpUm^0 ze)D|uFYEvQdh_SOBr;9{P8Tmd6XU;#?bm~O?x<|OJl-az;pmUYXB)9xh~+osf}A*i zu#ayiiECW`gt>#g$;*E{c>1Vsi*v7h$jMV5>_2+8DM$D^M+ex{htEFy*DHq~+x5MJ zt+~DZ<+h%A{`{o~<}?=goCdS3X|Pw~0ltqrJ0a=af|4`8ef;F$XzzG+0!PQ^{KFq{ zzV2M`C+ENB`J;8#t(GTe9oy-CyHWw{5-#{m(d&#g;lErqM7VQ}$LP*`g!j8`sBa=^ye2K{LVQ@&WjPu^B?Z~5s6 zz{6#{mH!Jk($#QN!lMgX!Ur2&b z=GBrPhtHlIj~}j{_pl#B-s6Tw5)hC5^qVy#`}OAD!vkjHFVi>onRN23Ilj~1cf6f7 zyRkOn9j^Hfn7CJy8k^N4Z=SL)zve(rZhc+F&fTKA6$7z>??X45UT2cw!ZhB?xrV<# zzscZ&8{`Xq?UPE$Yx|+!J=nOQboRFJ`{kDGE8)tc@1CxGCEJ&M9&E17CjYD<$l785 z>3oUx@gD8%{~!SMKcCVimPhyZ>LcFlt$6JtH<|BiD|}#lVq$SMka>l&AFiiHdT@@- zlGfj9-ACRHp9IzPB!!F@1}Z~Y9dgcSQ+zKZDG=>;>h1}}Vb&B7N)!tub8Gg-cRyz< zwO$FIeEI0n)5m-J2Zx*c|2+=N(ba*5 zrTaiyllbQ>#+>#_9!sfn``0gun7=yPLHVAc$kw&v2=}M$T;}uh{byhAk9#~T7nC*r zEK*GWd3-ih|GNGk+?;p(t1LT@)4`MR(#HCx?Dh3Zc;V-#XY|QQP;|1{E(=nwqm*%# zZh~tpWqjam_uic1-qCkrc1{;Z{Q3vB@|wa@PFS%W1%^lmuUlRa4XRLj9;=}I^|t(y zU%&Z81w%3bXmYVlPxi!OoUrZ+VNusXlQ?c6{|EgBDcA8=k-U%E!jzSCC5Q0U!4D6g z9vyG~Fv@>D+kC6Po*-^1yCc!1xXE$w@P!Sz3ze>wYaw`Km_ z%KUHIsQ!v&|6gQ<_ALu}Td}>Z*xr`rZY#F8+v2ujdt0%+t=QgHY;QIrdJ*x|<*e{c zXG_k6p|9_Z{j@UsYZUk0%PB4rem#G;!Sa`5gpZn*Y4h_t1h=2YF!=1sPBPH0%HHJ9 zPvmPaowBK>DCPWa`F~wHWzY1Yr~~D?BPqV_OA>NiQ|&4UN{QoHys%7e1qq5PlU<8%FA}fk zayq9;7i<@xj%~f;<;kSiu{Qyc_x+Q7^x{RH zDI=YmzB@lH_~OyuV`qbXzH6=FjLmcGz1^yll_n!k_=??|SXBKl*q!{AaP*jKYm zTd4#wbul}3pixtykmbF4%4aqT>E-OVE2b+{CI zP87VniiO_}Fn@tJ{qS)){Nde6JnRQF`2J=L{_h@@qle$_-+#7Wo-l*|#oiI#;=nQ3 zA%)-9BFX0I6P^|lQf@mjPOs#E>h@<_H1v3nL#)RS56AZKefBPSZ#?{+OB2yvE*{uc zf^ISzDEr4S09{3*QH~sYqK_=K%C_~)d6x^Ijvl%f!b5>!n5@{GKGTY zZeG}FlUr4N8E^v&m4uhvYg)9<0pZt}){7n?1+wyJ3-w&7XGB4Q!T&;_)pbI!=HJB& ze~krsA7u6K)EEAzgZgM(WAx=O>5Tt89$|w#!aX;CEQjsk3Tpp$GQ0brJlXt>w5V$% z;tOVpGi{E)-mEo>&B2o=2h2hW)yon7j$AMAImCJsL)ArHQ-8(YDpe{P+uifGi__(= zal9{wSzmA0;La;f_hw?Fzn$Bt>J8K7_}5d)5UC;k=hMBz(;Cvbf88Fg(?jM=b~!|o zxw~Fz?Y`_}`bD8Amgh=Q*?ZZ(zm!JXruxX9QtKg8sR%}bo? zTik#8xRUpOzH+0zKB%X*F=$ z17FVPNOtd{np^U*{a+oQ;Tq$0-(y4EG?(HPlm@7|wE!)vMH~L(;QSwF!2+x%iK3q4^ZgjX09**DBd%OeN?X?-L(@*}>!SQR_3Axhi zUg!^i1^%NvyJ%XIXH>>RKJ*OUP1(oo9oItmcgK5=<-oBjw^J!Tl3SicUM{hw0vfuC+_qGw`_K3fr>pVr*Co#{8B3?Z_kDnB&5U?%l ze=>l5_=YqH1K~Sd-;)jz7@5BJUwa)EUX17S>&u%(TVl>>2_aKzH&K*wj)lw##f+F% z0qR|aog#YE9*Aib3)+*BD*-vDBWL2_{Y!xvmm6 z{h1L6*>}58Yk$I(s~eg<0n&d|_W!ZDcQR}AwrbTG{j+Tf;wnOprz0qKJA7h)sbeQs zB$c$c(rI(Y1=9IehHe?CpgVZNy;uRn9=$SPUrU_U7|`3X_U5@

    >8%Ti+> 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

    KBl&1Ug=X}ex_?XB3x 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 z%0A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%0A}lBN^8H}Hr}_zK`VCM7QR-K z+x=G7$@Mz9WI*s=Oey6`odEp)<))s<;p=-qp3DDp*lh2x{gIh`gTNudJ@bJ;lt2JP ziSBC)e@AA=uqQH3h<#3#{t86lwR^38vQBz``t&b8FCODF1#;ubpBrL+00?A{u>WT9 zpb2}E=j9%VHCaINeEenD%@wJ=Bm(*Ey)Rd&_oW8&@6-VD`_F{m&2K({KP8Ey+Y0z? z*qiW%`<$xzMJtdz1OKA}b}<|5!(6=&v;S|*Iucj5^ZR$g?}#)m9LVn!7O7vV-7)N{ zb{F&BT-p|?{x8fxWGn!~e^$V5!l&%xS$QAk^$z1u(M#p_k>TY54!rQ+`YA?>;C8^ud48 zQ}!zg=!0oMDckNTe|3nRK6nF=*!U^KmYiR$^Pm}fz1pL>G!~q0=IMmBg$YA4DW&uJ z>cUcm=J#4pO3AgK3+z0x)poAUNXm=r`cKgqRt?IpH)2?I1Plj&;g0QL=l1R4Bw$!> zXILbLl~EuO5g6fw*foH*=OL0umi9l?(YTv_s_!SH6H*-FZXRo0wB0_Gcil? zZ-@s?03eG04Uu#�mhj_isZsD_2Acb>j|8TOHdhY4RyEN2c7kl*+oEawD3bOQ$}n%as8KJ*9m<9bD|f; z!Y{A34ZB|LV*V>xeqny|3o{UzTp%(jzYIVw0+^NeVNTwMS#clcxZgZicr^gT$3^UO z;syXtNlN;6B(@EEBVoJ`bHi>v1DFSICL*3y%axQyQ|R5h|5xzXHT7Tb0bP@I*(-d{ zk?*wr9M0W4T;a8*#ixwi$McZj4#cWo5O)lFAeKP>g!s4Q0EmDFO>5;!c>nb2Uwrna zJhvU`eH*$y*@?8=@BH01?2Yt~U##s`f!~S(BAo?9`r{tbwj(XIFVg=DMOApc+m_h= zNb~K`nDmQA@omE%8V{7%uA&%$N(X4JXP*;a_hJ5DC`wQ23Q!gl8~!W{aoeeq!g}LZ zo!Bw#trG`H>{p$z0P4ikeZ+U{!~DNcR2FLvP|8g9NvwGrb9;bZ^RMc6;0&N+{9Ww! zXs*cXREb?f$6S5w39m%{zY1vlUJcZHQS6h*_dkc__6`f1--G|vQ}%X*?G^$QaLBI~ z@mEjz1$j?T*{RPPzw3sc)LX#oM8qMNZ@(C-+l0Z=qWobMCNy{WU-C`G*^Ski z=qbA`#Qaw}1ATD2F&@-HfIisws}KI?p0e9QXnzNyC&29A^_1P-ee+ix0s7!KpgJDZ zLK3~+{jQGxxu@(_$B5sBUq8 zpTlN*hrKCh@(q&?Y#{)|U#oGxj#d-KhUa%hXO+Si7JU??Q-q0g z5msj7oq9sxRz(icYWXUz)7}2FD=+BmOQ$C575#OGw0&oZU>oYX4gP|uL7i4;+(d|G zi2p#nH+-Y1vgG^5x2@-LmJVA^sQIWP@cTco^r zI$WgqZJ1!?tc$8nrcXL+b+vj_)T<)Q@@&=+_k{_g#|=DFopiG#*`mIg&5(@l@VRGO zv#PGNNGJrg(A@1ayWygQkf-ziavJ8So#E8kUAL92=^I=8I5tKVeCrlF=b7MW~Lomg(_F4e}Rmp(2cfjg)oygM&iIC}>RHngK#XU)Cav^-L(Ac8>kE*x=I#UsYNKp0%()3uNICFXq6rGzM{ zg2E8NPt+#$GMRb#llrzun!+OWMK0Zb5!_I6T~1o3Vm(G#P`LTQ)%qfH+eeIt`aRH1 zn4HI<^XVGQ0K_RQ*AFBgM9{+phRb zi#D_;(QXoK4h^&KitA=5>Q^k85gaVKS2Xb%KcQGJHH-GC*WzayxIc$6nKV(%M?g28 z>cVEaHc*pOv-9!qmeftc1miNepMD!x_fMaI>8P5#T+LxiO%P^>7djW%caJ6Lbg84t z3j1QS5w{j&Ihz%}B;;W+h1%!T?RlP}O%`=9bDvf*4h3Q9_(Bm82ZuKh>KI4de7z+* zX1sWGLtjIu{q5)+vQM|BNTwP!m6tr|n?IhwtWbYsK6zqt7)F(ML044Vp`cXwGj+@8 zaGDDlzP)T?LXeRGsrJzaGgo9gJ&Yn7AI9b?+@G~B0~%} zjd6m~z6m3SS)9fm6|LsCgc!J;D=N^-vQ|ReZ>=CgV5ZXvL8OlikP5sjyenDm-fBx1 zvfb(OquM}PAee59j4S+sDYG-0`|XBCDYGv9vyG_k#n~=sMc-gllXP`XLhXplEe!@L zf4`&Nt3mkj=g;}iafQkx3>BXhdt8J>kesnRp8rZD_c`^2;~SfHq*WXB!X#nIvWTYU zNgwb=$CigeGN`}w^DHP;i$Eua#Ed(H2@P!qKO=N51U+tS9>uwveCxx_w|J;uoP8c#_m^Er9#rfZ?JgG}+CQeKN~o-zP6Wq(78SbITSN63`VR4=V=O zwnQTGskFR7i^A9h+t-HL9HM>3;)@kKeEZ$qhjQ{kT^qA zRYgVbxP!G2r=K5NQ0>b1vz*L}3nk9pXTzONR)1mA?5zISSW;=hTCtH_@4+^qkB`SX zlY-OfM%b*rAms@ijUpfd0d0)WnIa&}WEvJ}TJ}M$OPcd$>xECIz-nA5&r}pv*++P?0kVFG0b5)s z%0<}9A~bvBJO&#bABw+K4P@vRR&tPeRwqKB72NQL+4lmy1>h zVkN}PE$!_yGHs}Gs(tyn6?W;>6>8*p9)7F%nLF)ol4yZ9x+?I;n4bSB=2E)O*rWk= z?m8&OS8^UPFX?f8*g&;p~Mb49|4 zc^Ca@XH+5O#%l@fNQr@kk<((uTu5d;$2hOhjiH5lPH_<(F>s7nMsq0sx$cmC=f&rc zR|LcEYJ6xX`=IEeFas_S_>Tm->bbbt7F*{;Kq`<=g5xWXqT)`VZNZ7^q%G9Zr^L;K za4-!hp)rLp=25w5DRx%u9Z`OBTXb9r7W+jsHx?&@&anmerBbilu|byTK3FT1S;~a* z-JptVz#f~cB!$7o%RJvfh<07+h{@V-gm zyU~C|)|#fKsjf?Iro(wDhl8ii;Fge1{0=XsHq-3eK<9m_eU_g)3NcVr zdAEOYcd;4(X($-Wu=$L6JD034(lyuRj!(3n!T9S=oOfPL7+Mh6P*g`vq&DZ`UGhHb zmRf(!?}J(C;v(v2?GUh_CX>}fh+D3+?@uos6_C zNk~2_Zg#cX=`IYFrARPF>Pw~ItsF0gUF*vEf`mZ}u&&KMT8|C!y))RmsJ;NGd3I5d zoqf1Ueih2ZF8_YPmo6SpAudQoyHd%*@sHx0&t!(sRx5_L5Dalc8H@SqYh3=Jn2(Qi zGuiq>65kH>r-L(x@aI2cUaqW%1zCiGxFA$M8_opZ1)pbjndt?N1r-aOP=iM;6-N?< zFMt<5xH#o)F?M@TSUcPBN7v1lW{YU`m)@Gs8=IPusv1Jpi388Pzjf=Gi>rbUIAE&W z#-V^4nln+j*%&%ED)=~~e_dQs9+|f4h@Mldce8eh9B#Bdv%%AV#4*|ye$}La=5*>W z%?d_LmZ%f8JzGI!66AV#v2s1m$&LO4P!+^Qh=YQ84?QY0A)!nUVy(?URgD{~=(SN{ zX!02w%7qQgH7EIaXR1Ce41;rlm?QkYd#f}lJzo@5{Fo7h`PRKQWj)96UsCML0rc-s#kSzL>zPRu$CeY)y%s9c^U}x1# zRngqH-a}XN!hJ0_Ai-?%K66Tup!C=nT_#nY&x9jLJyb6!I5`G#?wdGfW!}g(CocoH zDUS?aLC+?)CBTE@2F11Vg+XvZmXuflpgY0yG<682EB3DN(r9(qJSO0~>ySmai7ME4 zB@C>x@a$84)U0BM%tQjrb$MFV#rj;FVktuVqZ3bL_uzf`{BrxK3B^=YXXSctonjtn z<%`z1Jx}mL&8ZKLXsClIuCKHX!qYhU`E=`7}I!R4SR5q8* zt}K_W+k;%RqTA6LB_}cjiZ+^h&6x*C)p_tU!=S~|^d<>M|K{c|Rhdr*(?H7jw@>M3 zXGe#p(DnHOPJ`Mh%#(C+jrk_G;CT92)#Etld1q%2%Ay>vnUb8hGdSh9GkEmRH9R@+ zhgfwW`u3?->0a>XW*LslUy!c_qZxR@d@4&ClWPwQVou%?qn5-zP zO>_8;UifD3r=a07MvvIUZ@Lf`<1`$+Y2EVq^Gjx;e*_(49+Q35v!zFk$yelinq4i+m;^GWU8^mjkSj-WBt=rJ=_yS4Fb zm(6GkaOy_nVq8WQ8CH)bvNAC zXKj=0nY19-Ji);g|4hhywSNY|Zk3ja+H!GgZc9to6IHD>|S3N4BW zY|S@9uQvDFLlDl43%LA81zVP6=}wgsjYY}9Ve?N)ZaL^?Fp#beQmVp1b(Lkk*~QlV z@ueo+-K)#%jcTE!VW3Rvw=ixhzuA?AE$S~K@M%np#_V0(Xjtic$#31G`3TQdDz0Go zWPJg1sYYFtZYWNtL~YRZI|4VmAz0rrSDG+mG>G7Cu3yde#|AEL--n$cVErp4P)Q7( ztB2@Fn;|^vpqeOWs9Id6k?GmN*js84 zf(nmbXK(k|%F-9)&p8v|!5&{Qj%f?5Ru7@omCvZ^JyK_N(~rxgPHomBVlo&D#r0e^ zL~(^L8U|9N{cbAhweq14%{ct(Bm!3;sa-0!fp zO0l)7AC(TFxCxoDh%jc?r7&h+6J6-|gv^;G{{lBf10K+MWAG1WspFfZJO6w?GC+*K zPPe3CPV!@+ND{ibvbomViB)%PoX#wzA1)c9U0J+2z&KYK6>G{lgn9d_jMSl0GBR27 zCs|oo{JK<3`ngxb5URw1YPr9eH!q+K)6&JxXYVFKAX@+4f$xlSL4{(ZJ?1dR9tss0{ zaP0u(;C<`Zk>g>aw=WdoMJ?e3xA4(=R^j{Q*VkpfpNzeF2=l&2z9U{d}=Iyp$z7bV|@?M zUNU%x17C}`__|hM&W#jj<-I4l^l%J|hQqny-HXqnSi(TT5FH6sq2%j~Muq@@#4;)^ z!wt`*b-yIq=Tk^Uxqhx8TuB+S zLXO%yl21n|t7>1vzdsJkTw&5EPrp_1UKP=13KzC=Ch}2@l}SG;V5qBZ9eljo>4C~G znYZgOY7w0N)I8dP(PIS*yUbY86T@DK;NSB~q|Z*l!;Azy&Spk~W*;V-G4$xsfCsnj zY;y(zLiQB8J=kril%X8wMI9ZyqC%`_A-O4eMO$`_Va)tNYo zmF{_ndhT<1w1!b(UdUO$&=+t+XG0We=-l05dvr3Tuc4dBKP9RgBZhHUNPY!Ln(*%N zp?8w{JG&Sbg7w>!QnbWEJJQCdr+wp8YQ8-Lz%O{N>RNa`wWbtYT+$E5;@NUk>8VOIo=qZ=6J{N~N%>(}D@+((y!m{~*Ta~!@`f?~}m z-6;AQ*aYH;7F>O2_*-Sd$RnYyog}9v!C$hEl zK}p12YFX>V4ZSi1`fTf^0~wemRPm7@or9Z$YJJ7qw1YTR&Vv49;{K9# z1KrA8l4*1|v~D?kY;sgPH08haw;ql#mdf%KOwujxk%q7Ue^_|Js$hrLuS++Vs8k2T zoPUNt`A(JfgUWbR`mU)+JHD|hqX7lSx^Utr1Kc_~&W59hT0JF$sdZQ1;#;Wn;A5(1 z8uNl{0wtnWHMPL}I(_}`uULydwbF!1z*}mdjD;-(eq)=svRuX8@1ABW{ufw>Gpn4-Tw1k$KbATQFVB4 ze>#!Lv#2L-LRB3yLYHL`;%P-$L>(wK1h`<{`7te{5-lBjFH^j#s0Wn?cnMAE72b8@XW zXnU>ZTvuULd8x1L1n0u`iKPyN`0x;Zf5-cPmoS-rc`;rl=;7nE{*?*N~zMI`PSTutfgIFyolvJ|ub z3(x4j z5-u-17r(vOFZK-Q-7(T56ms2#OmhE-$gZj}_-5-Fxr*ykl`)pON+-(`R%oP|wCWz# z(2UuF2rzEFoweYE0)A~n{={o~%__ zidV3}pQe}~qL$#z6jZEt=6*c1wn5!kS2M;vAinhnIPY- zkG9^~7KMm$N3L!7sESvL$f7OPjM$bI*_suPh%v{Tt)(4T@IXeaG|_KD_$A>*afEGA z288-=@i*4e7G6jA?OcjCh{=l4)a_L_(btUg4`^w<`5itVe=KHO+I8@ex|(rYP9UQZ zNr+v>$_#ar21MNOUcwV~R=(=Sm@V$eU53UDty(cG-Kgz^U$5hp8TosfS}`W8zdx)( zJN0Ahp%}vPpYr#lMIbDU5yp1k0|?5iP4sIx`I`89_z2C7G5se3?q#atdrz+c%ZIng zEtmm9*baa+{SE}^RI&5;BM`g)1|%Qo1lA%}FI&6Xq--0ZNxcaujq^{!1E)-Yw<`n$ z+-v$4k6x?tn>GKc66K8i?ZEFq$&IykkN-L2cVJ!&Vf$}>rz3z)6T9zE>|BZ0T)Ry( z&hrE^8Mxi<4{rYgYZs}gOuJ0g*hEGph9-G)`8^l_dkKK8wfH4}$>NwOywh6XBM)Tq zA6WJU*6ueknf7~RYpIM%T3YXD0;i{PnMU`h=^O@!Zo&Cdt#>^jv6@a0R)3k@te^&X}wOpB=rYH<(mxyMSD8(U)%k z%wxsuTVj*2Bzyh2esOoZ@BF5~2CtrN9=j*)SA^>_<<+L`dk8PVPPEyWa77{e?;57- z*4z02YYS$qjlPWkyEm{_30Uj%yS3)AR}w6fmHc+b<9EoWWWXpp;;R73O3>Uj?e@S= z9Hxqiq3ut{=^*DumAU1XCme9*x93tTcc5(V%{(**d_*ewT!EIH80@!s`!Z&g!K z)7pKSH*+r|iHNl}6~>!3YnUCjN!)Epc%`mY;I=Vg%N3-`0@K57I}=#DmK-F!zMj2l zbAhRO8^$a$D)#3@pWT1=-e9_V`#+JJEEW`a;*8nSw&nVGrG&7|z*iJE##ju5)P&AzeTuIU?_n>&|hcgFslK+xNu zVP>Y8m{`8whHs286R~3VrOCA&(3k~6&;vkvegm@DjJ7Ufvz_n4wnGV;9^Vw0rY#0< zI$=s%2R>obYBRGM=zu8+0O8L7v6%&8=L>+4eg^_{9wGGn5eVzQ0XYFa>GIB%+2-Hx z(@X>&BLR=`|KPD6bxrU4KnHrgiu#`c>0DnBf`5=bZOpeeIm_0sHf!HU=uux*5VA2b zF)16^Jh54Y_*H;t0iDyK`%8}<-mH?ZHy!`TzqaPHN-$<>z(a`ypk#w-@~8NRfcUfi z5dW{@c7$2vZ2WJ^7P|mc+gyHMw+Zke1@OUi)qXAfP4k(mONq1^MZV%XZa|G|Rbf24LGu9>t6wXjJLsqJ8(hm6&mwbhN zhnS|?bOI=lnE>QDHs04Gz;x^Y0di#}K)Ll-Vd9)_k1{u~1vztPLR_fK89;8H2(aHQ zI&;RYaAPA@WN6#*?k!AuL#D02evnx_PSFl(Hp>J1sGYSp&i z>Z>#(U(f>%90Gj=Z=b<$9WC(Df9YsHt7P~{r^CFJfa$gwmhfEWTm>@7++ER}wP^0v z8({{hwl8gQo0-*LwzQw^iohXY-#igOec)c+ObQs&RTPxi{{KlpN-v2!OPE%m@NVKWG(@P^Hu`x&6a>aJ&w*@z9%+knFaQXnJ zYHA{L3CNqb3}7-_0!n2p0jRb+^VY4D&Qdi?MylQlcx^jxB>*u~0xV@b!iy5e=NP}t z&G$Le%*^RKE75X#{34&dL*`r+F>eI80|=0NIiS<_(^TtU?g0$u=@_`g++c9F3lzzm z0wU)v1^n+I@IQ}6ze45x-$CFX2e4n3iso*4|Gydps_^G+Vqy7mrUcl^Tmmrj)~?!u z=MBvZ29C;lUIC91=4%q13))rh^%;DbkAW-Zi2zp;)CfU(Wv`u?(dAvR*D0EsIcdNhB*S_jm?Q#@;TaIR&X_}c$^Ri8=&D%{0ePE}> zZA{8i$N?`)SGV(5$VEO~X|}_RkbXJ)fVYxag>uAZn*WbBNm)qs!``cMeBypiBIs}M z-eOjaHzYS~ z4x5}XU#)U;=dJ9{?@cw6a&LlnIfCD+AJ#CBuu0l&ZGa2_NPrT6Bx4rIY8616fZve- zok^Moe?*c6kVO3_B)5UiP0gDMf)*z($?@J~7XVz=`UjU8MA>vY1RQERl(^>4fglJU z)sGfrZA|n`MDAT+7SXm7*a0H`@!K5r!v)q+ZHvuKz6uZ!yN@%m`%8}@%$EXVEH(}7 z`%@rWfI}lR?0_*x6Meka7g(nmPrKP{wF+Q|`f77T=e_~QR>YhhnH$LGLpSX)^MQRc z@i%z+m)3kWG(^rUyu~%1~O;Ci?T7Wo{9eond5J%Fh}W~GmC)M>kF*SN&-xqj{ioP zOMvaXWq^&dCBRX(5&*iDqx06SIL=bFRW_;)+ZqgM%v%XipD6)(GM50+ytS)&(=Cr_ z+Z~y6)q!~ex|J-mTkp?X2_S=m)0V_?*-L=U7bL~6 zQUZ?6ZYw#Nw^if3Z7aFi_}`Z~{x{|={`Y6%ACN6`4>;H9`|BM7vS$tfDrf%mr4eulaZj75H_5goAI+;6o`@B)}RsyDnO{>fd+GXnjc3XoC z^7-C-?y1)o9lpRRPy-M^)lAM%<|c5#JP}}hPFdz`2`G^{1?11uF)*jRWF`e@%iIHi z@yzE3aC4@SFFggUnJodAWiA1w^Hu^b&z69End6@|U-1vfpDh92GM4}_8J=^B`xVA7 zhc#5DGr$J3Mj1=MVso!~>sCNtG<^uTAsbZ#aBblwc?0Ta3vxFmd1fIE7ntX?!IB8m zj%HoY(efy8Y-%$;5~vcPO$+?7?P!wb>3s!`X^}P_V9u4SQks;bwfcxt=jnn<{DYj% zIP0_|heid9ev^D-|9{6&mW~8K2I9VNOPo%apa_gel%y{`Gd3mD@ zT=S8V-J#<>7_GNXA0ZgO%6y85*F5z`IMrGoA#K&8`rmN_-}VmacD@fc>{8vO7unMt z$z(Ec2HNo*eeK-6WLT(E_c_Y=L4HpuDfqzlN7WHV;HzBFZj$7yzQvg>dQ|Gja^8mq zpE3ejOl=mv!GpWwFPy9s{2c4slG4xEwU_9d`7x(Pa6`{6>)qx%p4FSgZfQsSMel?U zr`U=jxo3K`D--WF43Yymt-OJ$EZF1fP~9Hkgd9Y`k%x2Xlv|s_i=R7hz=n%5C{Iuj z>`RJ~ARlYk>|>qnv^*+2?TAfw^``orsheW652rOgU*CMvE200oO18ecoOj&o{b?J6 zZUZq_-#rqDCq9We`tBw`L;x`ftOBtSh<-r43&gxx(F}-*{ns;qDmAb=Ev5kxsLBJP z_a_m&*9(YFKuiIv9zZh*SojImsk{A&;Qj4KcbkZJnw*6!(O#QRdq8ShqnGZ66Dz#5y8W4f1JRo|5)oBr^ z@&ck05L1{Bns;nwGw&qwc}JfL(YdF@Fx!XWnHo;;mZU3=PXOfG z0P@?wuxG%q-zG@Wmt{l^A;VPTV}CNW(u}HOvGzpGI@E5&=h8>RR@zM z=jEjsOkq+`$@DU}XDyj2(%QO9Az?LS$4rhmr6a7dOlaUhFLjb2B?3n8z-U<6Yu9l_ z2NN%1U!Daj4VPhP*wd|ARrNwG8fUM_wm?%c59?sA=i^>67O6||Q`&kE?J8*|sZgSi zt%MP!B$v!0lonCGN?NP0gAJQ_TqC*B%oDf=237WiyY%Qr3-Qz;X|bh!V=d&7i|b2V z-J{zmm%`^&5FH#Og9Mv8K@#|hToqG!%^v9cRC%ZsxXy$RA-OmN3)LLb`J>+A93qw9 zS|jm*H&Y?`Mw22>HwkYbY_w2v824PygxBm7P8MH6NH3NeIJ-_cVjaaJc~qeZ6{`~@ z6||3grBd-_9^%IX!n38KxBc$bwF$W5N=iwc85>3Ek)-kaoy0BlN_zR7lIIS*K4Cp~ z?OP0&)jP%%lnK{SLr;eX))hdTyrdVLP%m4WMB+lpL<5z}ZDGsnrQ3rb-VxS8ujo;EG?e2MkD?$~sMT2F{Q~44v zOr4H=ywKJ`F_m`N4Kv9-?WC&5?2@n2d+P;_ryeX4vY3qh;*(;Io#1%Bk>jflDUZRU zm4WMJ5E!u$%B?UngG0XLq_d8QOW`-diwMr6Jeol09_oydU`w8}agGqwEBPN=*e6*$ zz962;x-JddfvprLrwiiw9Cc1cgFwi7GvFac5h*ljVM`UNj^I1qq6cO2DGXZ4`H#>z zD~D(v%TwH&?P5p3O=XeGD6dtF8I*JZ-GOgHWzr1MK@)w_iy{c4JH$;o=p;VEuKf^Q zhGV4C<%UqMr8Ig`Eq)%tYF6)Fwustsj3OQKV0(r|q!=dtiA!_yX(0CiBzqrts+ zUM7soDAZkO2dzTrzXRUmmH^e`7jYRhK^c)1kFis=OCO@N0C4GE>{LEUK=TRxo^tG5 zznWTCi;F$>9kGnY>$b{BjUE`MGx>Uj>;;p=!0M2U4u}>@s$GH+b38-k!z%9JpmD)+ zKGl2Rbj*Zjp#MYhM;|BnaS8$2*TM7ROEWVDFHD9=rg|Tezd-?SxV@706dy#jV2jT` zFG=OAOzRvVxdpyr4FfmFuMb)$nP6sr&5LA2#f2GKXryb0dJh8yIgzrGr6-v?MG+!yki1LU4H=r9WBRlEDTd}b?)H$grj|Q&4 zA(QEM-R$I?0#9Pg42peOzV=wU4wPOP9~3-P#elkYGQG~C@=zDULlC)}j}iviK~m@`?6D9LoyqQQ6Alr=wJ^0tU6L|q3Q_(QJGz@0{#I-Y zT~9CWXbGa%8BruB*+ikPjigq5hsbPUb4WFBjV_TfPSRI^Y&!5sTQt0=Qtl-#r7>N2 zKwRLm+`N)t@+*!|dmlEH(g8_z%sgi%Y-deLi_f#+MOFS{Z}H%p;j2vkWl3IY3kq5F z3P)vd4vQ5fVgBNTNnV-IL4p=f2yxARVhX>8&!i4DicPhr zr84crDqIDp1i4pwZDxtp7oOJ!iOKz|G#6Wk0luna6$PJ?UO-zVX;nlvrKn!-ugS>Z* z#0Kh#byB4rmwKT6?FD7x%yzCRLE>uIh2abbFraKN2bxF7c6yJ6Ra0X-k1f}53oST) zyMz`0T#*m2@~X3HB06Git4)!SPg?km470A`LY5i&CFcbcUI-bsO5r~oIaOWo+=du$ z$&6-<(}&t@!mTscXBJyl273u`=@2#+T&BXO5V5y?DGvzJ&a zE4OECUc4G#5E$rJh12$ZN1;IqgQ~j0hUp-wca#ci$m+h2x@jQ@!!Wjdu|zV_nWnaD zsg>jm@e<$n#wko`Q}hGp12~s+O@Ze^#U;DpMd5__n`%%Tq^L4)kCj_yN5`OuyXmZ? zPnadSAa)m-P~hF&+vp`J9osOdVm&!}Av<|c6o}a%#Gpe0OP#gJCy)7H=n?~vInUT7Qe;nsReaN#8uHsk1YtXsyDaZnHV;r-0u^sp z(y=0}A~v-9YlMxK!*&#_4tQ+Xnwq9r7+w=rX&@aGb|&F;N=~8wBZ=!PTM?(6yxYaTu{mqm0a`F@ z>M*Z6I0@D17QL6!PvlxkJ?(IHuBeLi5=^zwIpafk8ZPcBm`KHjBEk=%@luk(a%rmO zlVrJur-br8gn&^7aiEpFF+`0F2;a0YFeLrSe!}*$8i-pVC>$+Wbx7I`F}ixBLmG%w zt+4W?I7*pfPJX*&I9GjqID@;tPLyxnds%Huu|t6{toHrW8{DK`Cf_2Lf+6&_m!ZYi zYcWmkqPzRid(YaNIHXotop-T|rZ&6DDpbDMZ(|*4>7zFzLHhFL2+s z7nT+SF1BjCwO=r)3FSSlgBiF5)9VOOdvShUwJBd-i!g--SJ(I#)#h8N47;Xtzab1? z7Ij=8JKpUUyyTy7G#s<%HzVC{^!542QjCN_jpE?0ts%^nc90c{)S*6!Fi0H|Po>yd zts)URu5cCnLvKrh`AL@i&?W^p!o^Ws*H4e8y10+(LJ1|lkS6C=LP;IxD)*9W<~LJR zbb$pX!H|Uh$roOs-l9>dcy5ADjqYn^HFR5@gS@h$-il>H&xhNguS4yFDQ8@z&!z?k z#=Ew*75lzrL%Vwd*%tgC_mNaHU5Aat1oB(rP`h1l@k<V(U#;kM*cgP(+Btj};~tF0P&nZrE4>NlpL#{4kO^@U zf#@F#hkK4P?A~_!PpnDnI$3ZmqEeo^7gd~@xmP>>cBEcc^SQE68^7SSVK%su6hv`d zHL=iN?Aqn*6Kac+5{8(?ifz|w%XS8#$y&P%CvjK#{m03qD{>tza;kMMD3!tUnO8kX z`(VZJi9* z!5;k@l6R0*=r|GO@YwOhCA3`;qKn3Ctc`q$2s~dpaU*i6JzvF&=~b~A}MJsSQ<51ghA6zC$zFji>7U9Kj zN78IBTCuzQq|WD4Qo7NvqFwj7yzObCoZ<_#RaeDs?QDKSYsOfsXhMB0+6|EP!}B7?6OU9udy0ku#ZlnJ%{{bhz8FjP%w;%u=hY8jK_O1qHvuOq_i1-uk*~3az&? zG>NmeFcb1xbQa^PD8fNY4%L5G8vIT2kteLWx>lTyv{Dn&tjOdkD(11NL#e8&mUo6< z_64F<$Fh{(>r^U^3oq1FojUIuJrr1si>a$C9jmch1inJT{Q+FWCG5) zq`0fQk#)XR6GDmhq6&wV$D>%*;HuIUc?`d>x{O{@p(4qlwySXJ1}ixEeZO#p26m|7 zjgb3X+Y!^(FrJ{5nw)NBXh;bOFAptD(&JhYJ;cAhQFW#jxmkSR^w4Mygrh-Xx>$rQ zph#1N@)8@riNLY4lyATrf85g0xXi1UI@g(pRrpbhf0wU8MIDvDS*_ic`Of zyjAKIXsI1PIRqQ1gL$aSj}2X&60QrDZ<3rL*J&Q4)fwT{Pl}|Y(gn!AO$ldiCVcaM E0BKCtOaK4? literal 857134 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

    W`pzwO zvCk;IaB_{IHg%A_i_o+p1RlOOilWpnYb|~1u1WwdmJpY61D+YYbwnahy{nOne2&G@ zWXEHMG=>5XLMXkCLb0ZtZI=(oSdkk@kzffV1+Wx_Dfo@5=+w5_(tBhI0pc)nz8?zc z97C5;X{4kz*+SJU$te90l#_AzJ+OIS`&^y&T$PKV#I<2fC>c8Y3TZR~%#w_jmOX|L zm~kc+r&dcJ&^TGo$ODK&1y?)OK*1Mh52KU?BQscg7tFdR+gA=PA3r-^>w5ezL}`0((U-57_7|%X*X+$`ovL(8K`5KGfnUy- z|MJQZ_NT;%+iik2LVcglOUC+!tC%An#1x)xif+B2|F8t_CU?QTXH48~#P4DE|NcW{ zyz}U3$1G(Zl%aOj&G5-)ffv^+$+$HV3I!UKY2KHiSqz!a!+9<1kbrA6)%04WM2=>sqp2bmi-?^2Sr7fkS)nAsVLwe2eBY~WBXvVV?XD?EouRAxkBRVfW!w=Muz5x7*X76 zjZ}+h4$zx8NWOSr;RY2w`W%Jb%ynyqW2^VjL#kFpbZEm2GJNP<9aeGnY{Q{3>LUco zCVA`*(B5DUu8zSCS&~4r2ETvYd6%t9(bW1@P3R0B)_)K=tx$%_t^oRVufS> zb%IlDgn|{%Zo*V^^-dyGdj~9{BRbLwxmpRJ56ON0fID>SQM?zI602o64{G{$_YmMY zNq)FsYd)NJZ$xDH;M1MbvwrXy=S59B`+windEJrKQXd3+uME7~*L&xf`+SiTaQgvm z<$AFD^|7tL(C!xTG?ZK~z+YG3)?-$Lezz+7j>i7>Bsb-aTtUI`Q6~dl#r=#;(n|fSVw@Sz4)~4q#^$F^vL*IRVGUiF@L#G_{rH9H$@_ZOq>eDeW zn6(KxLBNzsdarA35Tz7lxuYj-|fDUA9e9t+Lg_7 z13wzqlZ`^F!pYF8!x?t^by{yTD|*jj%2`j3u~!V4m2T&*k;ey$`aAhW-)Y9*X`1h` zh5vB*eg$sTdFA_>#P#$*w)`R9%%K4CXGR1*nvj2r{QDI7cfY&mM?jcn_0>$vAeTyz zf<_?834FA;zvzcL-K6%R(MtE4!LtU)qglDp8Z_=bIL3xy`bsp-B{&ArHdfw(CTv75=mmE?>WVch$7O8>5$B@9gc< z9hV~qebBo9IbzV9=d)-u+`YvSfVLuzDDC!_>!7H0q}rr{(1K}it1q^#IkJzva%kMz zUo3a_mn+)d(LVFkez3FHd--OJTP#~{1YBN(DE{$am9AvWc^8=Ci@Er}UkBM;fkyXx zOX0hMH}3Cf@5RBzdQ>$$`NF>86Nb5$6&SnvPd#?n9vq3MT_65PySlUg-TducXEh%! z-KC5@_YI(c?nId3=@?`fnl5Of&1PC@`o&6|&|6s^&@X}=aYb!TbM zF-4=pk($6|Yd|QK8l-_8T8aW*I)%VZaAtXA&C#{u!FSG(f-^iW zH5jgy$kd&WY3kq#7i|rEz+teRMRgdCR$OZmGrJiE(PGfiy_KTF0z{k#GE0mxN-ddU zE;2cIG(yJFAu=V4n2t6+AK)Fis*X!{hL@3YiK!$IXB@l|iYe3xyv7!FxJ22WO`Oxg zIU4}jAUW*7HB_*S!;GoBvLaHJl9H4FQ362{HfK7lP-7XLq!DJndYF*2H0wy!>^drt zIT5$&vS$jZ6R)gCn@cf35pPa$0f8t~7&VK8l5$~tm`dqYLWAm!;^<=n&i0+=h9lJ` zxn0lv;|twZ*=$I%49>I zt3=sgY;e_C{|`HVq<0JN=D$B*{CQ`eUN2~Sdv3TV2tJ=J4onml%bo3ai{(z&)qA~R zl*Ub*L0;(ocl7$jKJ8yguX0`?dl9wmv?lD?_O_jfd-FAqNmy*<&dc-rBfZ;naO>V* z$5r9>zQA)2OIrPrvFvy4oZsqa#@YaqiJ8tDOWs+`#Le}LA0@5gBQwhW zM2q-Di}*x~_z14G+r|GMk;M1*3ad-$7>@$`->hA1&bKs%2VtX8muR{oir{k>%+Y(9 zGk|NR$DBJZ@TmvvEZ}Q$kh`zY(2`n6$+hH49oG14$f(ePjeU0@QU+wpB5VU4NDOU+ z!I{EkRwq8$yTJlcta~LSK#dhz>wSz;a%(fAFpi3a0#N0t`BG>>(a7iIy$%h{*yhwz zRby&nQ3t8k1QfLahg^uGuRL8`G@8AM4xnsuLgca%nqkPpX+`Cl&vaq0-tE8K>L2RE zp3~kN+P1&3>-~GWVgUWqQAD^rl?Cjs(UcUYNuD({<|GT}}y(4I7RzR0f88;dD;OJSigI-28hK=QQ zXM$WxRUM*Iai-0bIxOswN6MxmEYKVl@I3m6DI$%T)`*e?&Bw6UW+dbSJX(do9y3RF zx#%4Dl;)8bbR?VPh&fJ3gCJB&2$VY4X`^W7>0W`PsEIU-@w5v##*qfGII{7P{R3@$ zBr=>$zbbIDAx8*K5IJg??tr;A6}IPKWB(*;E2Ka%my4uM!<-9sQ6G9NFj6zqg<_FG zbwESkDF(^0OiVgcpz0d9P|a?gB4AAnKGGNoYhXv$8md?c@sGFW!}e~Ha=hE5n|(y?U?=)*LQ1o-JKirJ&fDL?`ZGHuipOu=j&VP zco5R@%=*jxC{Cq9`IBKv=fpSp2eqi!Z10~d@kqX!)$aBS_-ZygXm98lvRND9wN$p; zM$OYU%mNmJg@7~Vo_Y!?pXNxNZ|62LN)-jkLXe54om&BR!yAU%`-G^Qt0`l2P>VUM zHBLa@GkEXZV9joHlTnK2R*dB1dl$$W5;QLjhSuyxPE^O7?h$Ftz5zEGkb4klED9lu z_nE7jgW4t9Ku+3BcbFNA5#K$uVi`cTCK}R6^F3!aVIM{dhs+ixWLc3TLB(Ek4_Moz zL^W4Ll#OT>JR~*8HWU5HP=~eD*wW--k;@%N14Zv3H54Gu9!d!tGD zF7hYt&xK~7$b+) zd$5{|m`Jc^s1}%*LM_nPHz*-?@onVB)B3h|b|rQwEE$sb1JL|=8`bV|vH^R%UWnnl z6!E+W zvhPk}_>o-cHZ!t9eE6t;YV1*JWQt0tv6e4c+Oo3f{Phanr_6!X6MqmRSdnRTc#dwn6jvS z=tO88p=DfD1diDVC+t{i_chZc5Nj5(_Kl#3cu28FGn7WC!qr8In8>;{47EuL##JyR zwuuL$8AHjVxKw&hE3QI9@fiyQV-hEJ3eArJ&a;#eLkhKDlPvrV{m0g>{^RN5f9%qm z?ZxyNU;J@*Yo&#{Vb}A49EfXlJzwwat*YD?FX1<5c$@H7!g1y_;R9o%a*^M{M~8eehyg0Z{4@jfCIkGd4x2puF>gcOV?r!|9C>3LLF%H%~}^C-Ot;*4e= zCINbM1(KO*QFa2H9oD9SM9PeE3c-iKmMb;P=YWij*Fgt)3Y$#!*zM(4rL$*@YlAj1uQuGC9)N161k(k`D}I`B)v< zxz@NxqUq?MQ4BC;M+k|$4IItqA`-gf$cT=1C8$d|6lZw~9#S4gYGj4x0{hOr_z9S5 z9gIdy_1qIo=#*0LU{9Q@(uiJLwv*KB56vskg&Zp+Q==<{FKRN-#@!LDQcbwwa;0zo$e z#;yYNoqxjK1R{HU#$&6K;l6#xK6#DZM~Ldf?QoB2#C)rs7tch#e78fdw)!ci-ld!j zyWyYHt{fyBuX9b0yEq)4)MpRl6;6Kgo;k@2T)(Ar=z;hBwjOdm^sj3b0{22rOxaZ# zr9okTBNRm?-lJmiq!Yt zE|0|N-yJHwtcQKIwY_bD%e%U|1ozgvr8TCzYS{1b?RGJCm#;vJtXs3HCu{5j*J6Mu5(1G&B2)4fHQh8dHke`ul+4jo_aiCp;2))8)X zIVs|jWX+5GcJ9J>_V|W-@^yc=x^HgX0qyXKzTR2CnKOI;3Qc+-Q`-lu`_|96Qk4FE zf9utJ^pij7-g5iRnuqx@)P{HLc74deJ*)}de>|kz$JbVD0?WU8{b9i##Lci5xD|l@ za&pW^H~IeXm+<@Lo^EJN7p}0tn_I`2k z0qnUzE5231s!iR6#tPw-u|ha$tdK4+R=C^R_pF`5wF}=TPoG?=>OFe=6-wTFuy>Gx zqM9L>F(74TpjZ`}1{vMep2?;dZn%_V7NBBQXVN@0j{>9j?ny?cF~j4kWNnGTv9UMQ zeAj$N@U>Lwq!jTiEn$;(@HhWwxxdvH-|kvRe^Dp+hvn=Auh!%pRJ?cA;r;a8`_HG; z!i>n~rL-Ii+IhE_x8-90CG8(v#OL|q+hlTE7Hf6S?RP%GxB&zJe!@}7V0h8`-rR5gN=WFt${ZJ;)2v3aR2MDnMzoi5xq z)aM!Lh;}si<^hM#;KOL*IVQ(6w~gpKrw-j@qQ-7G_h!M7EwTzA$4=F3{e3+ zsie#~);u338l(q^$Gr&M5Q1YK@HHAQDQQ4M*E~u zs6>eaV$A^(+F5CWTG!Pfd&VA&^^$52oU4UgC0fzjP-+5p&Nfb|*&EE78cXOjfWj~_ zPR-CN5@;$(;ppp;045 zjm*GO3smQs*t_Apy=WB{g9b6nZWP0;dWiH)E(9}%Pl_QXg1-P{o zie^_Q*o`^bKLSM8jeX!M5NQWrn(KoqcD3sbF~>1lGV7xRsoS9^k-$}B`4vBS>X@;O z?0a=~W}+=fg_fA@gXfxD4w2@=h*OMSp-l0)4+C0G3WSv2*>?$du_NWQev8rO?sT za0DUcfYMXUdG)Yn>zhpB79o`~fY3HWms=N49lKvWOjJ^MP%9TBqDZwMDEqn8VB8%S5p#wTj5K>gk&gVKwo$M;p@B$Q@ zeWz&BHTB@AY3V~#n=}?qxpQ|4aoFBFf?Y@@LhNI(8zpL-Xo$;UsEZ)c*|(qpuo*=( zCyAk_fX)`A2ks@IfasWn+W@T(1vgq8s+Rbd=EIaiw7VsHgj6sBstV-RQyd&)m^)I> zgraUh4aGdP$Ws4&hU^hX_2}Cwza)q&-Unz>1(J9MLrS*Q_*Njt5{D?78q%tpA}HoE5E=(aodPh+Oj!wv zqma%8Q7pcuF5p7*kVZH2-w+^3;4)h9sjTS0tykwg6svbrbs5;sLLNzFgrX@<`j4dU zHJV6sS|(WNj`Rq*O359aqhQj-Q9`89BPeTzG*Sd)tkV}lN;7V+z36BTW5x(&(A;|o zu-G2bG<&iHnt6qcrZL9G5ZRQPZGKrf0E%PQR;!zNIYV5@o(LFSvM;s*4I2vip=~lE#()?&Vhhhh9V+zO91&$&0r%!L6^ByE9GURtxxF9hRC$V(HKRea#`7 z1?CE%UJtWB`(fw#yFQ&IehTjwzxpY>f4cZ`Yj1X_ldo_8_4(q3{n};y zPfyk_cD8CiDB(7ci-pzX^)?%XgWCVJb=P^~w`=wQ_X^5fD9^wBg*szy@Jm`KyDhFs z4?mX_bXN+?aGXN1zP&el-v_+8)q3yJjx1jtY5sJ3{C!u)L05RY-}bT4p7p$LJs>>X zca%_R!Z(ix%A*uTYjqp!T^q&TJfBxi~Ast>NlS|os$J)6pJ@3Er4r9TJ=dVr|a2U z>~6hUd_jG>%I!XD<5X%=3*dmFwJGzp#;M)-lLXh&mhTgm%PO;A@RyF|T>m zd2fQSr%Y_1^vDwth~_XJ3uN{=M>X)vuYz{7ucLxbW~ko9kd&%mfUSs=*9 z3T--JYHKnALGhxHdLn2M2Vfs56E)vwD3cb|n&x-|1=8SRvaD*K$P2Qd;`L6+-);T) za`6rA-aVXgw@2i~x9;E0X6$`B8$Y_U@p{>pk5WH%3uo4quJ(`gusZi7!ZJA4)F7Jq za6&48IV7lFTPv7dbalg%sHt+Z;ebzel6A}M5KFQPAy$`SsdgxY(0atk5M5?S$$XE= z4H&E~GfRnaOgq9(F%f|c^j1s~bQUiXgolfzCo%{-_SV#e0XgW}8PF_1Y<%ouVy&&) z+s{Rd)+&J2j=$u|W+4g^SZk>*(VV?i;^bZGP%#vnJ*%DFV0!|#-No4jUF+uBGIr^Aew{xvYE|}5))yO7Z_JC$B z?G4!v)Hs!uxgpbVt%4St3)-qs>%~l!bqtrY&IMrdVd7UL6iieO0+2$raOz1!Lj5fq6nF=Hs&FYk3ho;6>*~hwin4~b+k`GgX zRO~E|g1~Jc$)FMCdLbsi-=>}ATiRWGZ=Q-Dch7mwbYO8b8xW=Ky@g+_j1Sgyv`a_grjvm?gf3Ppz+}ZfjwcdoJPupM4Yj2~1;Af<@y^4X}<=5!38~a}u-_SoV z0@-yt;269wK2+$VnE{B6_OTTpv+s9UIk!#g4vIPDgdk13_0k29k_R5S;1~{j>XSSc zMlDHefw=`O>?|{_UW{#}4_pVOzSPMy#3mItU zzY#mY;RHrvYATMxWWu!0i8Mz*a$>}f0nIrAuUfPRM_DG(s0NQlf?{7CBnc6?;edgI zLW@4MN!4KKRlN@A#syp@w&j3Ox)*YFj5etnQZuJ)($ra=O!9I@2hk(>C|+?w0)jc9 zCJ&)CTQ{$Ou@`WO$=GM?>r~FQ;iQHHktY?+vZZUvKrT@?YE$%KmD5bMwg}WXL&6q- ziw1MDY1NEq1Xui!oLw0TrCA|Xt(J`Tyn?O-pVd!7;Ba1@I)#CgV^+i%Bn*LTDZYiI zjVJcsIge7n-XtU%8Bhv?PwGch9dYt%1~oC}HWXiNL0SYhI$XyVsB%oDoz0Nmq+a`j z_T43KFZcGAuNE(MX!oMLjK^8BJ=VtRwE@~u$PjmW>(W8&*&E6)d;Mv~dU$?q@ zKT4KDEmkv)W`SWwWbX}7ys^NWSMo;Wlno2$YFu25AXqvi$sX7yCK+4v-HFpV^a(Yl zVWncQEZbC*x6qFStc|MjAjMhoI_%zJL44+BV;Xz5=8a?O&}AJZ(X5PfW(pBRjR8D7 z0@Fxth$b9c{7DpHJSj|xLoWjX2+lBvZ@vGl2m;YGM${%}w`FeHB9oS>9O&>m+ zK)c0h$9_6)fSMXyhPyIW&?d>m)z zht9`K%z96o|2=Bg-ec$bdULr`tKCmz(MMI+J<2jndd?~M0itT|$t6OQ;UL74W#r-0 zoVRUKhIx|;&4FStv6Fb9Xmpp>iP*R+eR>@`t>Pp@h@n9WRDeyBPuaK1l!upzV|I!q zcmy$hP|}nDiz^T)`;uK!2~)NjDWK~%lC=RgDfZ&9*CvO5dtNn^;t&l;IQ%IE+u*3i~5_zp& z>&!SvRDC5w(0pS^0|}as5j2-niW26DW0sD-20|!ev)x=ew2(5yP}K&{9QxFwY7Eun zr8y^asv8C_l2Moj7oU176B?@;+FFko%+A5Fo0dI0>zuh*Q&!#eDzFYE_vvgE2Jdral*r>XDl zOnskEbDL+cmODQl%h}yKOenJN>gc>#>))Q9J%J7+Uxz=rqlCEC3!mqUd777eJ+jqR zZiGkGpFG&KRJep#a{_gBO4^-~rmCI4=wgovX+uehw~E2#0opAMHmW%!SPH!jgxY9B zLRbYaq(NOFV~T5abBGMi^4~{eZDq2wnhO?v1i6Ss(Dnd~-GMK`sjn^TH13G4G#!TX zuuM+_qvOt0q7Yb`9rV*2!;GY`FmNjKv~+-z%A_eoP0_i8t8Cd+V+@eHoo{N;QO_CF z7YsgOYg1C4W6zCM!A1L|6ceD0L5D^RjbigWy@-t2WgKTaj%~6Qp%rJkpVrk?i(jy^ ziz6~w6hw){W*N}|hpn6MExOt<&xncPSW7UYTbX5$Pk@9TdM>f1WPsWvOpW3jxn=~d zY+>~tnyVEM$x$0=@VG!yy=mIRUvzhewijQ`?cx_Bs$RU=vGeM98q4&|UG6SkEqBdR zd~d7IzuS8>r|c&M^d|-MLk|%@ffaWQR$OsoI`-iXU+T~E8P+J}-t^M{#&9kBpij+I zaqHEaSJOc8Mu{tz+BpA?_Ffzu5J$!TlP~PuTQ&Ip0T7tva!TR@I2$u1D&G3$42@B{ z^C~#{rdp~}`Y;j^o4rvq#?Y`aQ0d(V#37TgT_Pd7(11jOnXuHAcnf)WE`5yH+Kgxn zIZDcq(fq}b8gP*g8fzGhgab|W6X9qi>++vmgr0FTABcsB9MX>XkOJgrXFjFj>(|5 zY!ZI+NOU6_Ww3c5Z@j_aJC#;aEpfX3`I1BOkc){lOKs4CD3lV=JPbO{nK*jihVf#3 zOVbrgfO3dnR(co*`j!kRZe{c?!$a!@S4bvPb5IJ7QY&+x9$RKX)hSm{j_x4FE=8!8 zTkBE@ne)`Vn6}erb2=kPh^8Hl8Cv8*nSv=Wr%hPSoO%X_y_;&)L1SkCWN2M6_%StQ zN~xdl-Y|s z*H^l)7l!IR&Q0_Rt<*9046XSypD2t!>xulQ?&Ig$eVlhMZ`64lusA=60^NHj(A!WS zF@lfLI)RKpDHFsPT(FE+Pi@0az@!M25HgxUtf)dWa{_|^o5?097!v7AEnZB^n$6&# zs+w+NKu(-O@g)h`3kL5TJI6rPrl)F0kSSn&S3k%y*r#qInF7;l2+pw^C|H4-4^UH! zL`8F+!@?wGl->#qG;2~DCvs8`9LNzNtDknWxtI)eREWM>!yv_Gyab_%Pd;RIVI@6@ z>MZWJaq&ipE5M8qa?GhnZ)4@DT&j=FI}h5kwML0;3P=!qjM#gOIID!}Mi7+*A|_KH zd$v|8w1CaGmd!zPrLzrIU6`*#vdOLhw#v|?V;Tc<$6Hodn2rf|>?p zbCRIhk5T3ldPBfY5mGH^o!I~lId^K<%N$NKx!kQ;YiKUW-l&t0AMwxqWx9T{!qOg>^1;ZYekzJSOQQ+Nt1xS_@;O>V$1~ zb18&AM8Hw)kjw!9OU}T~+=p>U^>IF|b#mt0+{v~rJ4Vb=yGC!uH<89X`&^EV(TGVth$%rOzG(4&}^Gi;Ng7a9X!H?_RQSlw36gwuH0Q+o4 z!99mj>xh1Gk&<~Oo8FJin%k(Sfg(_m7ZIk4;$I3g#}cjc^S8ysd=;F>(R4Id76;>PU2YtR13gKT^+P$ z46Q(^O$<@&KKH}tkV69`GLwc(U@=Mbr=P-4Pe)PiT2cAkc4p&paFzjp=kz7c} zl!XTG$qN>!cBv&ZTq1QDdf*UqcO_0!=wMRPQY!TB71AgP8kGjlrI2-CW^yazjW(>{ zAu;C*EM#1y>Gn@gbwzAB2gbO<$pDW~A`-pYq$Z4i0w3fWj5UZIsnX@8ggH%&Oj9w^B z)>U$*Mx_XS9^o7-ki-mH1vPbvvXUUAF=BNJT#ax?r5ivifGH*nF6Y+!WUCEdxfBR# z0<<3CTcEBcDE3;f*2{8-T4HTIHXM3vIfjpUP4$I^2d>Rq}F37vletNNNWVW^0Zse zK;6*ooQ0T6kg0txxs{NHhd?$l7bO!Ucfgz(rG?0|$SXYW$PVPiLyES`1ZP-zbu9!h zxld;@jw23caI+Rv?a(ZD7JWzOB~qK4Lm53KW2^CWWe+y=S8q&8K@%94KJ#d6@|HPE zAUba^7Xg#KXyTGg{yk*pgWSQX<6dhXtL@q|(YZhNZ zO`(+`O2mbxO?_n<$w044rlfYm;*(s0F09^B3F^uOj%c?t8jn$}IG+AK-Kd4GF|-sjRg6(5Scs{1-&CQe z(I7RgfGG?hS6z(Ui%Zk_rct+#3fRlMklg&9pi3}8e~zne0h(;t(Gz*B&QADM`g5P%2xnfVUV9+mZU9VD+{7=?{lO zS_UHYVZDcCf6(aF4kJVj$YXB!E#{Jv%(KkS`Cx|}F-W!wzo0qpOdvDLP!jOnV9`ny zSgelERa52egNswouB9k<(>R%TU2;ar%+S!6&?t+zmB-IWoGC!dY_yPq7HN>7n6rK@ zC3~3x5Lr4}5KTv#4zFZE%C?1##vypya_nKHxSZ?|7uyES;tqYx5REU)#GTWO;h?5< z#11;MX1X=8+5`rvky%2Od1rAE&wU{H=FJ-^5O8VLTD#=RhY&>iCo%#I zHp`lk&|3Fi=V8<%=9DVI$cABC3JAGobR|v5F8bK*vh1VP8Vx7*=26h?&N5qo*ec1$ z*~b|%B$=W!30b5u{S%tmER=ck^ps3IKP~JlDO%!~#9+}X*nqO_g*68%cAfj_AZWQ` zXpE<+wMS_{z9!HhHBe~Xmnr|^(nYm_bi>!P)gfko#4%Z*NsDa~W2HMgxh+-0%zb^e z?$qwA8mx?I7Jxk)#emuJigKEv9+7|o32-hUXzh)it()d%FnLRv$zn3#yjrR_&8cTQ0F%rk2^E~SVasyqN734G51lt4=qr8>F|$(n1%m7Il213hcpBp zoF4D~u-5{-WiKGy=*W=tJht@jKA_Ut%_wCZ{yb{P3a%3N|IJG=8-(uNCaBUluin!0N(4#}Bvu#GxY z-v>?tQ@W)gML4;;>lC}JCegEbC-x;)JN)uU8c-R;rNEL^A609aT(!+9KIQ6K$ zL_6n&F%}C_q~=1FExbC5Gb)!vTBUT0BMXH0NyB-ladNldH5wKmhI~0+r;P@tj|mZK zc}-LJDt>x(oMsP1l$Ldy!%UR%TL;+gGvdJrKUDbw%Sa#vD2!2&+w`y|FCUrvTjOQQ>83Yjg4oMg<9hbqLv3Q>X#y1aUVmsg71v&!gq&m1nW{wn|*1vXcnP zGf+_zadfrind(x{c2td=TZn;OpTo#c-Qh6iJb`{SnCr%~*3cyYH-+jq7dXv)LEWuo ztkzP@_y{SrmQ#B z+TrF)t8wAvWA5D^#zjy9*KWtbfFhz!3_BKiF1gy|B}wo|a&t35QI3Uc+A)JdT#`zb zXhQr; z%Cx!QdJ=MAic^|64cfEm$f-dEFBYMPJkgbli-i}*tlkfNgyQ>*3loxr+qn;57tqWE z-L#;gWSM)V`=T`?fzvtxBZD*sl0(1=ut~B^(b8wE2wszb)(A)y6iWhbOtaJ(#dQ5; z4waY@PKk`Sy$fzRg&ou96;rZjLsz(geFjpUWfgX#TBI&zAPX+oG|kV|m%DaiIhe5DSq_=v{DQGm5UR`D3cW~&Uxoo#+#4SUM*9^3lT}YM7^i^>2 z8)p^~nyX-@imn%>I;^&BIry!L-22|mIahTp(Be|fFyWHptd8dTV%tD7@ z_|B1p?IX0hfTmlnW%L#B&GvwN=pnQ`caCORY%QX((OgvAfD!jtfaFISm9%0>VjfQF zXtN_-Fv7Cv@dK3UI>$no#QJL8o$1$7&Q1e%nT({(Rd7&S8lv}J!q&FY7_pvC%mi{5 z9Fp)Wgi(Cf!Mc3}uA@(8H$n5y9=&j%#I3d(CzU~4kg2Yv2m|AtiBgm~lS#pP)IjJJG(|^pAV;xgwBnYZxs|f)ywX!)^&R7E z^y%w_j4QKC)i?HWq_H)D5_ydRLn+SgkY>$B!wLDyg{6sYA3evFSo;Q@$pzPt56jiI zcq+%5@;1Hg0#LGR0~@6z010DpmAFysjo2>B-n=YWo2Y?4>z zdOOtVSVeVciCd3N>!6m&wT3YW1x7oc9ahKOTF`0JlCHB?uV857c1{(|bDeJCqNmgc z7t|rcYfPK%84Y;B41JB{3I$DhmYB>*J3{J=m;^5N`)5q#V{=WqghDw>U-mHUtQ9do zh~bSbx}L&t#p4t7rrY^=fTF!(a)Pl-UQi(*X<330c|kZPZs#HDD{>XY7jPLt;six! za%?r{#!K;=4$VBsFLa1$JNQm0Bu0+XQte%>Pd}7aNqF}aeXQ)Kn{yzJQu2&Esd{ge z$26FeM{OxC4+d*frwc_=u9`Jk&x4w-0$O(y(?wJ?TIRsQl?v|1WSbFnz_&$RQN{Vc zp!!6ZW*rlq0Md=4O^^-Zij07h7tA+$N4zsP%|6Fwvlp6m)J4-p25=L6?(Qq>^y*t! zt+0#@JS4SXeZ%N5qfKPaw$X%_pmH~=C~5DKG2gK43e<1C_kvtvLGxI#If5(~J>fzM2?+J!0zSwLvKDPt zb_Bw7L8!lJjAIXVf$dzmZG7x=vOy=_P|0~gY$w?YFP==id(!;uy_>Rco>D^V^gSg zaajhme$n&xf+ML?wL1%Xbs>wb*^7Hc*?}!?<&b>;x&^xnep8_U&xi0;d$p21YGC z&a{#nqhfNHVaZf>$XgB(^IH?xaLa@~s^bi+XIRlu#^}$N767O4hMWM6Ri`DhLt6#u zQm;$UFkWNAe_=7>Jj9Pqz|(e|J}@ZL5FGNXt48j`)`gv()uyN(9|35xu|!>rQVI0= zV((3S(`smlHZ7r`xsK>~;W_hAe2`(y+R)n=!xbDsvKYXkC0Av3O{?^2hdW8Rcq|$W z@pTReYWIJl&qIEbuq>2f&yTH!Teke=LJ8>2FhErcG0jZ zkuY1#sM<&5?0g7bxmHlmtfyP0P%2JwGBzRH^vJvJ8hZ{U1WO}FOt|+*N}m`X<%Uf7 zjViIq;25HnD;kpzKpayA&CRFoW^2LKl`tvrWo|-k9Pq>NZU`=u))cYN1!8!FzK2@3 zaDqW;D+C9iZxuC!@6Cltxn)f)SsJ-Y^sz;Fa6val=XvN%j#j`TIwV;3gR16?^KdgD z9qxrOFux76km4MhUpCm>*sQ&>>E6G0{#e!#9lxo6yH^YCzOxqU=OiHiMYi>eZ0pm> zw)!Y*Ah=6_9GbYXu_mO65^WYwCUZTcLyW%Stlq5+dC)Qaj>AdpHSfXY{fpiRm)0B9mU+H$0A@C z_Jd)Rh%}cth%E->S#uLJ^}49oEN!B=M4i8|%k?o<&Z*{PDkT{iQVq8-ncqTlxCfVf z$Z=tj1U+5Q88mAeSw~p9wJ_Vr;8qQY@4%;^t~h20!H%@L*R6$_ zYEMWt#rV>rV^>0O1MVLm@=A7R#*V?bbQe9^(x{oc#O4ZG(qsZ@Ylw=b1o7}tJN;yG zltXnG-f@U6iU|=CWB}8v3lWa05R&T=$`z`Os`yf(H62?8Hx)f{j7uZ>rgp+u)7J?7 z+_1);@NDRcc*3!!N^sOv-Do_yXCJdE&vK#^C#yrri~|*Bzv!_}MATJup-fifu0K11!i?H#-Y;QR-akwsd?AoAvgG6@$X|;v zjE1nmfE{4P67*(MAh-v?3TJ+oMuFIj`ds!AB;rp93Ip1DMTFKtlvPpC#vJTL6;yoa ze+sl>1ETae$(0l`bI(Ps3tK#<%CWi7!9sxs#hwjE&Wh}YLd)107M;taVFG8k*+SN-aPCbqf>ID~4fs`zIaj3$e z=}Zo-M#rhF;KloH2j3#2@krIJWOo(`7B0+9LQfphS|&t5E&z|QTw9R4;RH?Mn_G!` zRv-G7fmL+1=8;;JXrXVK9K}W8z4`7(P2D={fSg6}<-9=Mwahli-8H3|atx`Nny@BH zV<6$9PaL@?^br_b<(PUD@wu7^EK7@M+r){p6tbfR5+O+?%-U9AYZ%nhstD-AMQq>$ z=OdcVHHB2G`VB!`sg*&HTzJ#MPI8^_29f_k1;-C-h;rJ zD_Se3*kW2vE9Pko*%r6u8kN|pa19$c&L=NWea(!;A-04>2rLeRb52dv1d%PTG8gjJ z0$NI0(Wh_KX=M+Eg!-~|I;pn7>|(^^P;prX_*pv7(i9T9x+%}PpNpJWvPtO?OIUF} z>Ii5nEeq#pB$NBBu5rc{0$~@I=5+a1$5_3S^>kONqSLzo5nwK@;;tWVjX7#

    7=% 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 z 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

    5sD2pXoy?V6RdyZVG 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μb4|eUUTG}*MP9(KV^TP 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≫w^)YIX@ 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 gx%pkJe`jK1uYG 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�B_3uCUZRv9OJe5Z*t_C2Gw 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 0 or $delayed > 0) + then error("UNDETERMINED delayed-trigger allocators: \($installs) install command(s), \($delayed) delayed trigger(s) — deriving the used-token set is engine logic, not jq's") + else .gameState.next_delayed_trigger_token + = ([(.gameState.next_delayed_trigger_token // 1), 1] | max) + | .gameState.next_delayed_trigger_instance + = ([(.gameState.next_delayed_trigger_instance // 1), 1] | max) + end + end; + +def stamp_trigger_firing: + if (.gameState // null) == null then . else + .gameState.objects as $objs + | (.gameState.resolving_stack_entry // .gameState.resolving_trigger) as $rt + | .gameState |= ( + (if (.pending_trigger // null) != null + then .pending_trigger_firing = + _firing($objs; .pending_trigger.source_id; .pending_trigger.description) + else . end) + | (([ (.stack // [])[] + | select(.kind.type == "TriggeredAbility") + | {key: (.id|tostring), + value: _firing($objs; .kind.data.source_id; .kind.data.description)} ] + | from_entries) as $sf + | if ($sf | length) > 0 then .stack_trigger_firings = $sf else . end) + | (if ($rt != null and ($rt.kind.type? // "") == "TriggeredAbility") + then .resolving_trigger_firing = + _firing($objs; $rt.kind.data.source_id; $rt.kind.data.description) + else . end) + ) + end; diff --git a/scripts/migrate-dump-fixture.sh b/scripts/migrate-dump-fixture.sh index 7b8e0126ce..4e158e8969 100755 --- a/scripts/migrate-dump-fixture.sh +++ b/scripts/migrate-dump-fixture.sh @@ -113,13 +113,30 @@ GZIP_VERSION="$(gzip --version | head -1)" # 2. Patch + 3. compress. ONE filter, applied to every slot in the prompt. # ONE definition of the recipe, used by BOTH the migration and the control — # a control that re-spelled the recipe would certify its own copy. +# +# STAGE 2b — CR 603.7 firing carriers (upstream #6842, 8121fd1c6). +# The derivation lives in ONE place, scripts/lib/trigger-firing.jq, loaded by +# both this script's pristine path and its --in-place path. See that file for +# the CR 603.1 vs CR 603.7a discriminant and why UnknownLegacy is not legal. +FIRING_LIB="$(dirname "${BASH_SOURCE[0]}")/lib/trigger-firing.jq" +[ -f "$FIRING_LIB" ] || { echo "missing $FIRING_LIB" >&2; exit 1; } + regenerate() { # regenerate local mode="$1" dest="$2" filter='{gameState:.gameState}' if [ "$mode" = patched ]; then - filter='.gameState.waiting_for.data.target_slots |= map(. + {effect_kind: $k}) | {gameState:.gameState}' + # The `effect_kind` stage applies only to a dump whose prompt actually + # carries `target_slots`. Several dumps in this corpus are paused at a beat + # with no target prompt at all; for them this stage is vacuously absent, and + # `--effect-kind` is inert. Guarding it (rather than letting `map` abort on + # null) is what lets ONE recipe cover the whole corpus — an unguarded + # `|=` here made the script usable only on the two dumps that happen to have + # a prompt, which is why the other four were never regenerable through it. + filter="(if (.gameState.waiting_for.data.target_slots? // null) != null + then .gameState.waiting_for.data.target_slots |= map(. + {effect_kind: \$k}) + else . end) | stamp_trigger_firing | stamp_delayed_allocators | {gameState:.gameState}" fi mkdir -p "$(dirname "$dest")" - unzip -p "$PRISTINE" | jq -c --arg k "$EFFECT_KIND" "$filter" | gzip -9 -n > "$dest" + unzip -p "$PRISTINE" | jq -c --arg k "$EFFECT_KIND" -f <(printf '%s\n%s\n' "$(cat "$FIRING_LIB")" "$filter") | gzip -9 -n > "$dest" } if [ "$CONTROL_MODE" -eq 1 ]; then diff --git a/scripts/stamp-fixture-firing.sh b/scripts/stamp-fixture-firing.sh new file mode 100755 index 0000000000..d16eaa2eb5 --- /dev/null +++ b/scripts/stamp-fixture-firing.sh @@ -0,0 +1,130 @@ +#!/usr/bin/env bash +# Stamps the CR 603.7 `TriggerFiring` carriers that upstream #6842 (8121fd1c6) +# made mandatory onto an ALREADY-COMMITTED fixture, in place. +# +# WHY IN PLACE AND NOT A PRISTINE REGENERATION. `migrate-dump-fixture.sh` +# regenerates from the read-only pristine root, which is the stronger provenance +# and is preferred where it applies. It does NOT apply to every fixture in this +# corpus: measured, `dina_conqueror_4p` and `witherbloom_sprout_lumaret_simple_4p` +# differ from their pristine regeneration in exactly one object each (Priest of +# Forgotten Gods' `abilities` / `base_abilities` AST), because the committed +# fixture carries a LATER parser state than the 2026-07-22/25 capture. Rerunning +# those from pristine would silently REVERT that. Stamping in place is additive +# and cannot revert anything, and its arm-1 control is strictly stronger: the +# stamped artifact minus the three new keys must be BYTE-IDENTICAL to what was +# committed, which proves zero collateral change. +# +# The derivation is NOT re-spelled here — it is loaded from +# scripts/lib/trigger-firing.jq, the same single definition +# `migrate-dump-fixture.sh` uses. See that file for the CR 603.1 vs CR 603.7a +# discriminant and for why `UnknownLegacy` is not a legal persisted value. +# +# Usage: +# scripts/stamp-fixture-firing.sh crates/engine/tests/fixtures/name.json.gz [...] +# scripts/stamp-fixture-firing.sh --control crates/engine/tests/fixtures/name.json.gz +# +# It stamps TWO field classes, both made mandatory-or-repaired by #6842: +# 1. the CR 603.7 firing carriers themselves; and +# 2. the CR 603.7 delayed-trigger ALLOCATORS +# (`next_delayed_trigger_token` / `..._instance`), which #6842 repairs at +# load time on the PRODUCTION decode path only. Left unstamped, a legacy +# dump restores 0 through a bare `GameState` decode and 1 through the +# production decoder, so the two paths disagree — and 0 is the value the +# engine's own coherence validator rejects. Stamping the repaired value on +# disk keeps the decoders in agreement WITHOUT weakening any assertion. +# +# ALL THREE control arms, and a one- or two-arm check passes vacuously: +# arm 1 => NO_COLLATERAL=true stamped minus the 5 stamped keys is +# byte-identical to the committed fixture, so nothing else moved. +# arm 2 => CARRIERS_ADDED=true every firing carrier the dump needs is +# present (got == need). Keyed on CARRIER COUNT, not on byte +# difference: gzip/jq re-serialization alone changes bytes without +# stamping anything, which is the stale-artifact false pass. +# arm 3 => ALLOCATORS_CANONICAL=true both allocators exist and are >= 1. + +set -euo pipefail + +CONTROL=0 +[ "${1:-}" = "--control" ] && { CONTROL=1; shift; } +[ $# -gt 0 ] || { echo "usage: $0 [--control] ..." >&2; exit 1; } + +LIB="$(dirname "${BASH_SOURCE[0]}")/lib/trigger-firing.jq" +[ -f "$LIB" ] || { echo "missing $LIB" >&2; exit 1; } + +for tool in jq gzip sha256sum; do + command -v "$tool" >/dev/null 2>&1 || { echo "required tool not found: $tool" >&2; exit 1; } +done + +# Every key this script is allowed to add. Arm 1 deletes exactly these from both +# sides, so anything else that moved shows up as a collateral change. +CARRIERS='del(.gameState.pending_trigger_firing, .gameState.stack_trigger_firings, .gameState.resolving_trigger_firing, + .gameState.next_delayed_trigger_token, .gameState.next_delayed_trigger_instance)' + +rc=0 +for FIX in "$@"; do + [ -f "$FIX" ] || { echo "no such fixture: $FIX" >&2; rc=1; continue; } + TMP="$(mktemp -t stamp-firing-XXXXXX.json.gz)" + # `-f` with the lib prepended keeps ONE definition of the derivation. + if ! gzip -dc "$FIX" \ + | jq -c -f <(printf '%s\nstamp_trigger_firing | stamp_delayed_allocators\n' "$(cat "$LIB")") \ + | gzip -9 -n > "$TMP"; then + echo "STAMP FAILED (fail-closed, nothing written): $FIX" >&2 + rm -f "$TMP"; rc=1; continue + fi + + # How many carriers this dump NEEDS, read from the dump itself. A dump that + # needs none is skipped outright: stamping it is a no-op, and a "the bytes + # changed" arm over it would be reporting jq re-serialization rather than a + # stamp — the stale-artifact false pass, inverted. + NEED="$(gzip -dc "$FIX" | jq -c -f <(printf '%s\ntrigger_carrier_count\n' "$(cat "$LIB")"))" + GOT="$(gzip -dc "$TMP" | jq -c '((if .gameState.pending_trigger_firing then 1 else 0 end) + + (.gameState.stack_trigger_firings // {} | length) + + (if .gameState.resolving_trigger_firing then 1 else 0 end))')" + SUMMARY="$(gzip -dc "$TMP" | jq -c '{pending: .gameState.pending_trigger_firing, + stack: (.gameState.stack_trigger_firings // {} | length), + resolving: .gameState.resolving_trigger_firing}')" + + # The allocator repair is a SEPARATE need from the firing carriers: a dump can + # want one and not the other, so a dump with no triggered record is only truly + # a no-op when its allocators are already at or above 1. + ALLOC_NEED="$(gzip -dc "$FIX" | jq -c 'if ((.gameState.next_delayed_trigger_token // 0) < 1) + or ((.gameState.next_delayed_trigger_instance // 0) < 1) + then 1 else 0 end')" + ALLOC_GOT="$(gzip -dc "$TMP" | jq -c '{tok: .gameState.next_delayed_trigger_token, + inst: .gameState.next_delayed_trigger_instance}')" + + if [ "$NEED" -eq 0 ] && [ "$ALLOC_NEED" -eq 0 ]; then + echo "SKIP $(basename "$FIX") needs=0 carriers, allocators already canonical — nothing to stamp" + rm -f "$TMP"; continue + fi + + # arm 1 — no collateral change: everything except the carrier keys is identical. + A="$(gzip -dc "$TMP" | jq -S -c "$CARRIERS")" + B="$(gzip -dc "$FIX" | jq -S -c "$CARRIERS")" + if [ "$A" = "$B" ]; then ARM1=true; else ARM1=false; fi + # arm 2 — the stamp had teeth: every carrier the dump needs is now present. + # Keyed on CARRIER COUNT, not on byte difference, because gzip/jq + # re-serialization alone can change bytes without stamping anything. + if [ "$GOT" -eq "$NEED" ]; then ARM2=true; else ARM2=false; fi + # arm 3 — the allocator repair landed. Both fields must exist and be >= 1; + # 0 is the value the engine's own coherence validator rejects. + if [ "$(gzip -dc "$TMP" | jq -c 'if ((.gameState.next_delayed_trigger_token // 0) >= 1) + and ((.gameState.next_delayed_trigger_instance // 0) >= 1) + then "true" else "false" end')" = '"true"' ] + then ARM3=true; else ARM3=false; fi + + echo "STAMP $(basename "$FIX") carriers=$SUMMARY needs=$NEED got=$GOT alloc_need=$ALLOC_NEED alloc=$ALLOC_GOT NO_COLLATERAL=$ARM1 CARRIERS_ADDED=$ARM2 ALLOCATORS_CANONICAL=$ARM3" + + if [ "$ARM1" != true ] || [ "$ARM2" != true ] || [ "$ARM3" != true ]; then + echo " control arms failed for $FIX — not writing" >&2 + rm -f "$TMP"; rc=1; continue + fi + + if [ "$CONTROL" -eq 1 ]; then + rm -f "$TMP" + else + mv "$TMP" "$FIX" + echo " wrote $FIX sha256=$(sha256sum "$FIX" | cut -d' ' -f1)" + fi +done +exit $rc From 1168afbc01ca6bf462bf5f276eea45f40380e9b3 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 08:21:52 -0500 Subject: [PATCH 27/62] test(engine): re-anchor the CR 603.5 prompt census after the rebase onto #6842 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The census tripwire pins the exact source coordinates of every CR 603.5 prompt producer so that a SIXTH producer is a counted event rather than a silent one. Rebasing this branch onto upstream #6842 (8121fd1c6) moved five of those coordinates, and the row fired. ADJUDICATED, NOT RELAXED. The row fired on COORDINATES, not on population. The producer count is still 5, not 6: game/effects/mod.rs :5896 :5973 :8927 => :5918 :5995 :8949 game/engine.rs :10500 => :10589 game/effects/scoped_library_search.rs :452 => :452 (UNMOVED) `mod.rs` is a uniform +22 shift and `engine.rs` a +89 shift — the signature of lines inserted ABOVE each site, not of a new producer. That `scoped_library_search.rs:452` did NOT move is itself evidence the SET did not change: a genuinely new producer would not leave an untouched file's coordinate fixed while shifting the others by a constant. The producer TEXT at all five sites was verified byte-identical between the pre-rebase tree (`chain3-prefold-backup`, dbc81821d) at the old coordinates and this tree at the new ones. So the expectation array is re-anchored to the new coordinates and the assertion keeps its full strength: a sixth producer still fails this row. Correcting my own earlier report for the record: I previously stated that upstream had ADDED a CR 603.5 producer. That was wrong — the count never left 5, and the failure was purely positional. The correction is carried in the tripwire's own doc block so the next reader of this row does not inherit the mistake. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/game/engine.rs | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index 0eea008035..c02293c350 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -13920,6 +13920,20 @@ mod stage2_injector_tests { /// that caught this — which is the evidence that the SET did not move and only this /// entry's coordinate did. A line-number-only shift is the benign case; a changed /// producer set is not, and stays a counted event. + /// + /// ⚠ **RE-ADJUDICATED ON THE REBASE ONTO UPSTREAM #6842 (`8121fd1c6`), NOT RELAXED.** + /// The row fired again; the PRODUCER COUNT IS STILL **5** and no sixth producer exists. + /// Four of five coordinates shifted and one did not: + /// `game/effects/mod.rs:5896/5973/8927 ⇒ :5918/5995/8949` (uniform **+22**, lines that + /// commit adds above them in that file), `game/engine.rs:10500 ⇒ :10589` (**+89**, same + /// cause), and `game/effects/scoped_library_search.rs:452` **UNMOVED**. + /// Evidence this is a coordinate shift and not a set change: each of the five was re-read + /// at its new coordinate and diffed against the pre-rebase tree (`chain3-prefold-backup`) + /// at its old one — all five are BYTE-IDENTICAL, same files, same order, and the one + /// entry at an unchanged coordinate is byte-identical in place, which a gained-or-lost + /// producer could not produce. Same set, new line numbers ⇒ benign, re-baselined here. + /// NOTE for the record: this rebase did NOT add a CR 603.5 producer. An earlier report of + /// mine said upstream had added one; that was wrong — the row fired on coordinates. #[test] fn the_cr_603_5_prompt_census_is_pinned_so_a_sixth_producer_is_a_counted_event() { /// Every `.rs` under the crate's `src`, and the `#[cfg(test)]`-attributed @@ -14019,13 +14033,22 @@ mod stage2_injector_tests { assert_eq!( producers, vec![ - "game/effects/mod.rs:5896".to_string(), - "game/effects/mod.rs:5973".to_string(), - "game/effects/mod.rs:8927".to_string(), + // Rebase onto upstream #6842 (8121fd1c6): `:5896/:5973/:8927 ⇒ + // :5918/:5995/:8949`, a uniform +22 shift from lines that commit adds ABOVE + // these three in the same file. Each producer re-read at its new coordinate + // and diffed against the pre-rebase tree: byte-identical. + "game/effects/mod.rs:5918".to_string(), + "game/effects/mod.rs:5995".to_string(), + "game/effects/mod.rs:8949".to_string(), + // UNMOVED across the rebase, and that is itself evidence the SET did not + // move: a census that had gained or lost a producer would not leave this + // entry both byte-identical AND at the same coordinate. "game/effects/scoped_library_search.rs:452".to_string(), // 5d LOW-fix: `:10493 ⇒ :10500`, a doc-only line shift (+7 comment lines // above); producer byte-identical, total 37 and partition 5/7/25 untouched. - "game/engine.rs:10500".to_string(), + // Rebase onto #6842: `:10500 ⇒ :10589`, on the same terms — that commit adds + // lines above this producer too. Producer byte-identical. + "game/engine.rs:10589".to_string(), ], "the five production producers, NAMED: the CR 603.5 gate in `resolve_chain_body` \ plus the two repeated-optional-payment drivers, the per-player acceptance cursor \ From b2f9f471a8e4e54f0df80f46945a6da4ef1152ac Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 10:35:13 -0500 Subject: [PATCH 28/62] test(engine): re-anchor the CR 603.5 prompt census after the rebase onto #6851 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CI built the MERGE ref (branch + main 96e41b3ab) while the branch was still based on e12447f4f, so the census row fired in CI but not locally. Re-anchored per the row's own protocol — re-derive the SET first, prove byte-identity, then move coordinates — never relaxed. MEASURED, three independent ways: 1. Producer SET is still 5 and the partition is still 5/7/25 (total 37). Only ONE coordinate moved: game/engine.rs:10589 => :10640. The other four (game/effects/mod.rs:5918/5995/8949, scoped_library_search.rs:452) are UNMOVED. 2. All five producers re-read at their new coordinates and diffed against the pre-rebase tree at their old ones: BYTE-IDENTICAL. Negative control confirms the diff instrument discriminates — the new tree at the OLD coordinate :10589 is a bare `}`, not the producer. 3. The +51 is fully accounted for by #6851's own insertions above this producer: `git diff -U0 e12447f4f 96e41b3ab` nets +51 above line 10589 and +51 across the whole file, so predicted 10589+51 = 10640 equals the observed coordinate exactly and #6851 adds nothing below it. A sixth producer remains a counted event. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/game/engine.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index c02293c350..d559c15fac 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -13934,6 +13934,24 @@ mod stage2_injector_tests { /// producer could not produce. Same set, new line numbers ⇒ benign, re-baselined here. /// NOTE for the record: this rebase did NOT add a CR 603.5 producer. An earlier report of /// mine said upstream had added one; that was wrong — the row fired on coordinates. + /// + /// ⚠ **RE-ADJUDICATED ON THE REBASE ONTO UPSTREAM #6851 (`96e41b3ab`), NOT RELAXED.** + /// The row fired in CI but not locally, because CI builds the MERGE ref (branch + main) + /// while the branch was still based on `e12447f4f`. The PRODUCER COUNT IS STILL **5**, no + /// sixth producer exists, and this time only ONE coordinate moved: + /// `game/engine.rs:10589 ⇒ :10640` (**+51**), with `game/effects/mod.rs:5918/5995/8949` + /// and `game/effects/scoped_library_search.rs:452` all **UNMOVED**. + /// Evidence this is a coordinate shift and not a set change, three independent ways: + /// (1) all five producers were re-read at their new coordinates and diffed against the + /// pre-rebase tree at their old ones — **byte-identical**, same files, same order, with a + /// negative control confirming the diff instrument discriminates (the new tree at the OLD + /// coordinate `:10589` is a bare `}`, not the producer); (2) the +51 is fully accounted + /// for by #6851's own insertions ABOVE this producer in the same file — measured net + /// `+51` from `git diff -U0 e12447f4f 96e41b3ab`, so predicted `10589+51 = 10640` equals + /// the observed coordinate exactly, and #6851's whole-file delta is also `+51`, i.e. it + /// adds nothing below; (3) the total stays **37** and the partition stays **5/7/25**, so + /// neither a producer nor a reader was gained or lost. Same set, one new line number ⇒ + /// benign, re-baselined here. #[test] fn the_cr_603_5_prompt_census_is_pinned_so_a_sixth_producer_is_a_counted_event() { /// Every `.rs` under the crate's `src`, and the `#[cfg(test)]`-attributed @@ -14048,7 +14066,12 @@ mod stage2_injector_tests { // above); producer byte-identical, total 37 and partition 5/7/25 untouched. // Rebase onto #6842: `:10500 ⇒ :10589`, on the same terms — that commit adds // lines above this producer too. Producer byte-identical. - "game/engine.rs:10589".to_string(), + // Rebase onto #6851 (96e41b3ab): `:10589 ⇒ :10640`, again on the same terms. + // The +51 is exactly #6851's measured net insertion above this line (and its + // whole-file delta is also +51, so it adds nothing below). The OTHER FOUR + // entries did not move at all this time — a census that had gained or lost a + // producer could not leave four entries byte-identical AND in place. + "game/engine.rs:10640".to_string(), ], "the five production producers, NAMED: the CR 603.5 gate in `resolve_chain_body` \ plus the two repeated-optional-payment drivers, the per-player acceptance cursor \ From 02b382a47815695367c7fb729f1bb67f59742de1 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 11:03:40 -0500 Subject: [PATCH 29/62] fix(engine): close two fail-open seams in the loop-shortcut analysis proofs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Addresses maintainer Critical 1 and Medium 6 on #6886, plus CodeRabbit 3699361027 / 3699361052 / 3699361032, all in `analysis/resource.rs`. 1. CRITICAL — `ShortcutProposal.per_cycle` could not survive the PRODUCTION persistence path. Adds a serde adaptor riding the four `PlayerId`-keyed `ResourceVector` maps as pair SEQUENCES, generalizing the existing `counter_key_pairs` into `map_key_pairs` so one definition covers the tuple key and the player keys. MEASURED MECHANISM (the old doc comment asserted the opposite, and was wrong): a bare `BTreeMap` is fine through `from_str` and through `from_value` IN ISOLATION — which is why the existing `periodic_delta_survives_the_serde_json_wire` arm passed and gave false confidence. It breaks only under the ENCLOSING shape: `WaitingFor` is `#[serde(tag, content)]`, so its payload is buffered through serde's `Content`, which stringifies map keys, and `PlayerId` is `#[serde(transparent)]` over `u8`. `PersistedGameState::deserialize` routes EVERY decode through `serde_json::Value` + `from_value`, including the WASM restore at `engine-wasm/src/lib.rs`'s `from_str::` — so `from_str` at the boundary does not save it. Measured on serde_json 1.0.149; the failure text is `invalid type: string "0", expected u8`, exactly what `tests/integration/loop_shortcut.rs` had already recorded as a standing limitation. `generic_triggers` keeps its bare map: `TriggerKind` is a unit-variant enum, measured Ok through the same path. NEW ROW `a_populated_per_cycle_proposal_survives_the_production_persistence_ boundary` drives `from_value`, the `PersistedGameState` boundary, and the WASM bridge's own `from_str::`, with all four `PlayerId`-keyed maps populated behind a reach-guard. REVERT-PROBE, run: dropping `#[serde(with = "map_key_pairs")]` from `life` ⇒ FAILS with that exact error text; restored byte-identical. 2. MEDIUM — an EMPTY `FreeUnlessReplacements` derivation discharged the CR 616.1 obligation vacuously. `!events.iter().any(..)` is `true` for an empty slice, and the only thing preventing it was a `debug_assert!`, which compiles out of release — so the fail-open case was live in the build that ships. Now a first-class refusal in every build. A refusal rather than a panic on purpose: it matches every other seam in the module, and a `debug_assert!` could not be covered at all, since it aborts the build tests run in. REVERT-PROBE, run: deleting the arm ⇒ the empty case flips to `true` and the new row FAILS while the non-empty arms stay green; restored byte-identical. 3. Comment defect (CodeRabbit 3699361032): the zero-delta early return claimed "every longer period is a whole number of copies of this one". The repetition test inspects only the most recent `2k` deltas, so a larger `k'` need not be a multiple of `k`. Behaviour is unchanged and still fail-closed; the false justification is corrected in place, with the counter-example, because it is the kind of claim a later reader would lean on to widen the search while keeping the early return. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/analysis/resource.rs | 316 ++++++++++++++++++++++--- 1 file changed, 281 insertions(+), 35 deletions(-) diff --git a/crates/engine/src/analysis/resource.rs b/crates/engine/src/analysis/resource.rs index e08a9d2e24..555a3556b1 100644 --- a/crates/engine/src/analysis/resource.rs +++ b/crates/engine/src/analysis/resource.rs @@ -475,8 +475,9 @@ pub enum TriggerKind { /// a beneficial (CR 732.2) loop. /// /// `Serialize`/`Deserialize` exist because a per-cycle delta rides -/// [`PeriodicDelta`] on the `WaitingFor::LoopShortcut` wire. One field needs an -/// adaptor to get there — see [`counter_key_pairs`]. +/// [`PeriodicDelta`] on the `WaitingFor::LoopShortcut` / +/// `WaitingFor::RespondToShortcut` wire. Every map whose key is NOT string-like +/// needs an adaptor to get there — see [`map_key_pairs`]. #[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] pub struct ResourceVector { /// CR 106.1: floating mana by color, indexed `[W, U, B, R, G, C]` (see @@ -484,21 +485,25 @@ pub struct ResourceVector { pub mana: [i64; 6], /// CR 119.1: per-player life total. **State-readable.** + #[serde(with = "map_key_pairs")] pub life: BTreeMap, /// CR 120.1: cumulative damage *dealt to* each player this analysis window. /// Damage is an event, not a stored total. **Event-fed** (left empty by /// `snapshot`). + #[serde(with = "map_key_pairs")] pub damage_dealt: BTreeMap, /// CR 401: per-player library size, as a signed delta-friendly count. /// Positive = larger library. Mill loops drive this negative. /// **State-readable** (absolute library size at snapshot time). + #[serde(with = "map_key_pairs")] pub library_delta: BTreeMap, /// CR 122.1 + CR 704.5c: poison counters keyed by VICTIM `PlayerId` (10 ⇒ that /// player loses). Per-victim so a multiplayer poison ∞ attributes the loss to the /// afflicted seat, not the loop's controller. **State-readable.** + #[serde(with = "map_key_pairs")] pub poison: BTreeMap, /// CR 111: tokens created this analysis window. **Event-fed.** @@ -543,7 +548,7 @@ pub struct ResourceVector { /// CR 122.1: counters by `(kind, object class)`. Includes +1/+1, loyalty, /// and poison (poison/energy are keyed under [`ObjectClass::Player`]). /// **State-readable.** - #[serde(with = "counter_key_pairs")] + #[serde(with = "map_key_pairs")] pub counters: BTreeMap<(CounterClass, ObjectClass), i64>, /// Generic trigger/keyword-action firings by family (proliferate, magecraft, @@ -551,35 +556,64 @@ pub struct ResourceVector { pub generic_triggers: BTreeMap, } -/// Serde adaptor for [`ResourceVector::counters`], whose key is the -/// `(CounterClass, ObjectClass)` TUPLE. `serde_json` accepts only string-like map -/// keys, and `crates/engine-wasm/src/lib.rs` PANICS on a serialization error, so an -/// unadapted tuple key is a browser crash rather than a soft failure. Ride the wire as -/// a pair SEQUENCE — the shape `ShortcutDecisionSchema.points` already uses. +/// Serde adaptor for every [`ResourceVector`] map whose key is not string-like: +/// [`ResourceVector::counters`] (a `(CounterClass, ObjectClass)` TUPLE key) and the four +/// [`PlayerId`]-keyed maps. Ride the wire as a pair SEQUENCE — the shape +/// `ShortcutDecisionSchema.points` already uses — so there is no map key to encode. /// /// Not reusing `types::game_state::tuple_key_map` (the repo's other adaptor, which /// stringifies instead): it is monomorphic over `HashMap<(ObjectId, usize), u32>`. -/// The two sibling maps need no adaptor — `PlayerId` is a newtype over an integer and -/// `TriggerKind` is a unit-variant enum, both of which `serde_json` accepts as keys. -mod counter_key_pairs { - use super::{BTreeMap, CounterClass, ObjectClass}; +/// +/// ⚠ **THE `PlayerId` MAPS ARE NOT OPTIONAL, contrary to what this doc claimed before.** +/// The struck form read "the two sibling maps need no adaptor — `PlayerId` is a newtype +/// over an integer … which `serde_json` accepts as keys". That is true of `to_string` / +/// `from_str` and of `to_value` / `from_value` in ISOLATION, which is why the direct +/// `periodic_delta_survives_the_serde_json_wire` arm passed and gave false confidence — +/// but it is FALSE on the production path, for a reason that is about the ENCLOSING type, +/// not this one: +/// +/// * `WaitingFor` is `#[serde(tag = "type", content = "data")]` (ADJACENTLY TAGGED), so +/// its payload is buffered through serde's private `Content` before being handed to the +/// variant. `Content` represents every map key as a STRING. +/// * `PlayerId` is `#[serde(transparent)]` over `u8`, so it asks for a `u8` and gets a +/// string ⇒ `invalid type: string "0", expected u8`. +/// * `PersistedGameState::deserialize` funnels EVERY persisted decode through +/// `serde_json::Value` and then `serde_json::from_value` — including the production +/// WASM restore at `crates/engine-wasm/src/lib.rs`'s `from_str::`. +/// So a saved game whose `RespondToShortcut` proposal carried a populated `per_cycle` +/// would fail to restore. +/// +/// MEASURED, all four combinations, on `serde_json` 1.0.149: bare `BTreeMap` +/// is `Ok` for `from_str`/`from_value` standalone and for `from_str` under an adjacently +/// tagged enum, and `Err("invalid type: string \"0\", expected u8")` for `from_value` under +/// one — the exact error text this repo had already recorded in +/// `tests/integration/loop_shortcut.rs`. With this adaptor all four are `Ok`. +/// +/// [`ResourceVector::generic_triggers`] deliberately keeps its bare map: `TriggerKind` is a +/// unit-variant enum, so its key is genuinely a string and it was measured `Ok` through the +/// same adjacently-tagged `from_value` path that breaks `PlayerId`. +mod map_key_pairs { use serde::{Deserialize, Deserializer, Serialize, Serializer}; + use std::collections::BTreeMap; - pub(super) fn serialize( - map: &BTreeMap<(CounterClass, ObjectClass), i64>, - serializer: S, - ) -> Result { + pub(super) fn serialize(map: &BTreeMap, serializer: S) -> Result + where + S: Serializer, + K: Serialize + Ord, + V: Serialize, + { map.iter().collect::>().serialize(serializer) } - pub(super) fn deserialize<'de, D: Deserializer<'de>>( - deserializer: D, - ) -> Result, D::Error> { - Ok( - Vec::<((CounterClass, ObjectClass), i64)>::deserialize(deserializer)? - .into_iter() - .collect(), - ) + pub(super) fn deserialize<'de, D, K, V>(deserializer: D) -> Result, D::Error> + where + D: Deserializer<'de>, + K: Deserialize<'de> + Ord, + V: Deserialize<'de>, + { + Ok(Vec::<(K, V)>::deserialize(deserializer)? + .into_iter() + .collect()) } } @@ -589,7 +623,7 @@ mod counter_key_pairs { /// /// The `Vec` victim term (rather than a `BTreeMap` keyed by [`DecisionSlot`]) is /// deliberate: a struct map key hits exactly the `serde_json` restriction -/// [`counter_key_pairs`] exists for, and the single consumer +/// [`map_key_pairs`] exists for, and the single consumer /// ([`ResourceVector::elimination_bounds`]) collects at its call site. #[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] pub struct PeriodicDelta { @@ -1279,8 +1313,28 @@ pub(crate) fn ring_delta_signature(state: &GameState) -> Option<(u32, ResourceVe continue; } let per_period = ResourceVector::delta(&snaps[frames - 1 - k], &snaps[frames - 1]); - // Smallest repeating period, so every longer one is a whole number of copies of - // this one — a zero here cannot become non-zero at a larger `k`. + // A cycle that moves no resource states no CR 704 threshold to bound, so it + // supplies no per-period magnitude and is refused. + // + // This is deliberately a WHOLE-SEARCH refusal, and the struck justification for + // it was WRONG. It read "smallest repeating period, so every longer one is a + // whole number of copies of this one — a zero here cannot become non-zero at a + // larger `k`". The repetition test above inspects only the most recent `2k` + // deltas, which does NOT establish that the whole ring is periodic with period + // `k`, so a larger `k'` need not be a multiple of `k` and its per-period delta + // can be non-zero. Counter-example over 8 frames (deltas `d1..d7`, oldest + // first): at `k = 1` the last two deltas are equal and zero, so this returns + // `None`; at `k' = 3` the test compares `[d1,d2,d3]` against `[d4,d5,d6]`, and + // `d5 = d6 = 0` forces `d2 = d3 = 0` while leaving `d4` unconstrained, so the + // `k' = 3` period is `d4 + d5 + d6 = d4`, which can be non-zero. + // + // The BEHAVIOUR is still the safe direction — refusing outright costs a missed + // offer, never a wrong one — so this is a comment defect, not a soundness + // defect. It is corrected rather than deleted because the false claim is the + // kind a later reader would lean on to justify widening the search while keeping + // the early return, or to replace the search with a single-`k` probe. If that + // missed class ever needs to certify, `continue` is sound here for the same + // reason the return is safe: each candidate `k` is validated independently. if per_period == ResourceVector::default() { return None; } @@ -2097,13 +2151,23 @@ fn resolution_events_are_discharged( match verdict { ResolutionChoiceFreedom::MayPrompt => false, ResolutionChoiceFreedom::FreeUnlessReplacements(events) => { - // `events` came from the RESOLVER, never from a per-arm list, and is - // non-empty by construction — `probe_resolution` returns `Prompted` - // on an empty derivation, so `any()` can never discharge vacuously. - debug_assert!( - !events.is_empty(), - "empty derivations are MayPrompt, never FreeUnlessReplacements" - ); + // CR 616.1: FAIL CLOSED ON AN EMPTY DERIVATION, IN EVERY BUILD. + // + // This was a `debug_assert!(!events.is_empty(), ..)` resting on the contract + // that `probe_resolution` returns `Prompted` for an empty derivation. That + // contract is real but it lives in ANOTHER module and is not enforceable from + // here — and `debug_assert!` compiles out of release, where `any()` over an + // empty slice is `false`, so `!any(..)` would return `true` and discharge the + // obligation having inspected NOTHING. Fail-open is the single direction this + // predicate exists to prevent. + // + // A REFUSAL, not a panic, is the right shape: every other seam in this module + // answers an unclassifiable input with "no certificate, no offer", and the + // refusal is what a test can pin. A `debug_assert!` here could not be covered + // at all — it aborts the very build tests run in. + if events.is_empty() { + return false; + } !events.iter().any(|ev| { !crate::game::replacement::proposed_event_prompt_cause( board, @@ -12348,7 +12412,15 @@ mod tests { /// ARM (ii) ALONE WOULD PASS AGAINST A BROKEN MAP — an empty map serializes fine /// whatever its key type. Arm (i) is what discriminates, and both are asserted here. /// - /// REVERT-PROBES: drop `#[serde(with = "counter_key_pairs")]` from + /// ⚠ **THIS ROW IS NOT SUFFICIENT ON ITS OWN, and its green was once read as if it + /// were.** It uses `to_string`/`from_str` throughout, and that combination was measured + /// `Ok` even against an UNADAPTED `PlayerId`-keyed map. The production persistence path + /// degrades to `serde_json::Value` + `from_value` inside `PersistedGameState`, where + /// serde's `Content` buffering stringifies map keys and a `PlayerId` key breaks. + /// `a_populated_per_cycle_proposal_survives_the_production_persistence_boundary` is the + /// row that covers that; keep BOTH, they discriminate different failures. + /// + /// REVERT-PROBES: drop `#[serde(with = "map_key_pairs")]` from /// `ResourceVector.counters` ⇒ arm (i) and the payload arm both fail with "key must be a /// string"; change `PeriodicDelta.victim_slot` to a `BTreeMap` ⇒ same. /// MUST-NOT-FLIP: a `LoopShortcut` payload with `per_cycle: None` stays byte-identical @@ -12444,6 +12516,180 @@ mod tests { ); } + /// CR 616.1 — an EMPTY derivation must not discharge the replacement obligation. + /// + /// `resolution_events_are_discharged` answers `FreeUnlessReplacements(events)` with + /// `!events.iter().any(..)`, and `any()` over an empty slice is `false`, so `!any(..)` + /// is `true`: an empty vector certified the entry having inspected NOTHING. The only + /// thing standing against that was a `debug_assert!`, which compiles out of release — + /// so the fail-open case was live in exactly the build that ships, and was untestable + /// besides (a `debug_assert!` aborts the build tests run in). + /// + /// MATCHED PAIR: + /// * EMPTY ⇒ `false` (refuse). This is the arm the fix adds. + /// * NON-EMPTY, no applicable replacement ⇒ `true` (discharge). Without it the row + /// would pass against a predicate that simply returned `false` always. + /// `MayPrompt ⇒ false` is asserted alongside so all three arms of the match are pinned. + /// + /// REVERT-PROBE (run, recorded): delete the `if events.is_empty() { return false; }` + /// arm ⇒ the EMPTY case FLIPS TO `true` and this row FAILS, while the non-empty arms + /// stay green. + #[test] + fn an_empty_derivation_does_not_vacuously_discharge_the_cr_616_1_obligation() { + use crate::game::resolution_prompt::ResolutionChoiceFreedom; + + let board = GameState::new_two_player(7); + + assert!( + !resolution_events_are_discharged( + &board, + ResolutionChoiceFreedom::FreeUnlessReplacements(Vec::new()) + ), + "an EMPTY derivation proves nothing about CR 616.1 replacements and must \ + REFUSE — `!any()` over an empty slice is `true`, which is the fail-open \ + direction this predicate exists to prevent" + ); + + // POSITIVE CONTROL — a real event on a board with no applicable replacement still + // discharges, so the refusal above is about EMPTINESS and not a blanket `false`. + let non_empty = vec![crate::types::proposed_event::ProposedEvent::LifeLoss { + player_id: PlayerId(0), + amount: 1, + applied: Default::default(), + }]; + assert!( + crate::game::replacement::proposed_event_prompt_cause( + &board, + &non_empty[0], + crate::game::replacement::replacement_registry(), + ) + .is_empty(), + "reach-guard: the control event must have NO applicable replacement on this \ + board, or it would refuse for the wrong reason" + ); + assert!( + resolution_events_are_discharged( + &board, + ResolutionChoiceFreedom::FreeUnlessReplacements(non_empty) + ), + "a NON-EMPTY derivation with no applicable replacement must still discharge" + ); + + // The third arm, pinned so the match stays exhaustively covered. + assert!( + !resolution_events_are_discharged(&board, ResolutionChoiceFreedom::MayPrompt), + "MayPrompt is never discharged" + ); + } + + /// CR 732.2a — the PRODUCTION persistence path for a proposal that carries a per-cycle + /// signature. The row above is NOT a substitute and its green was FALSE CONFIDENCE: it + /// round-trips with `to_string`/`from_str`, and that combination was measured `Ok` even + /// against the unadapted map. The failure needs the enclosing shape: + /// + /// * `WaitingFor` is `#[serde(tag = "type", content = "data")]`, so serde buffers the + /// payload through its private `Content`, which stringifies every map KEY; + /// * `PlayerId` is `#[serde(transparent)]` over `u8`, so it then reads a string where it + /// wants an integer; + /// * `PersistedGameState::deserialize` routes EVERY decode through `serde_json::Value` + /// and `from_value` — including the production WASM restore, whose outer call is + /// `from_str::`. So `from_str` at the boundary does NOT save it. + /// + /// This row therefore drives `to_value`/`from_value` and the real + /// `PersistedGameState` boundary, with a POPULATED `PlayerId`-keyed map, which is the + /// only combination that discriminates. + /// + /// REVERT-PROBE (run, recorded): delete `#[serde(with = "map_key_pairs")]` from + /// `ResourceVector::life` ⇒ arms (i) and (ii) FAIL with + /// `invalid type: string "0", expected u8`, the exact text + /// `tests/integration/loop_shortcut.rs` had recorded as a standing limitation. + /// REACH-GUARD: the map is asserted non-empty before the round trip — an empty map + /// round-trips whatever its key type, so a populated one is what makes this row real. + #[test] + fn a_populated_per_cycle_proposal_survives_the_production_persistence_boundary() { + use crate::analysis::decision_template::IterationCount; + use crate::analysis::loop_check::{ShortcutProposal, WinKind}; + use crate::types::game_state::{PersistedGameState, WaitingFor}; + + let mut delta = ResourceVector::default(); + delta.life.insert(PlayerId(0), 3); + delta.life.insert(PlayerId(1), -3); + delta.damage_dealt.insert(PlayerId(1), 3); + delta.library_delta.insert(PlayerId(0), -1); + delta.poison.insert(PlayerId(1), 1); + delta + .counters + .insert((CounterClass::Plus1Plus1, ObjectClass::Creature), 2); + delta.generic_triggers.insert(TriggerKind::Proliferate, 4); + assert!( + !delta.life.is_empty() + && !delta.damage_dealt.is_empty() + && !delta.library_delta.is_empty() + && !delta.poison.is_empty(), + "reach-guard: all four `PlayerId`-keyed maps must be NON-EMPTY, or this row \ + passes against a broken key type" + ); + let proposal = ShortcutProposal { + proposer: PlayerId(0), + predicted_winner: Some(PlayerId(0)), + count: IterationCount::UntilLethal, + unbounded: vec![], + win_kind: WinKind::LethalDamage, + template: None, + per_cycle: Some(PeriodicDelta { + frames_per_period: 2, + delta, + victim_slot: vec![], + }), + }; + let wait = WaitingFor::RespondToShortcut { + player: PlayerId(1), + remaining_players: vec![], + proposal: proposal.clone(), + }; + + // (i) The precise mechanism: adjacently-tagged `WaitingFor` through `Value`. + let value = serde_json::to_value(&wait).expect("the wait serializes"); + assert_eq!( + serde_json::from_value::(value).expect( + "a populated per-cycle proposal must survive `from_value` — this is the \ + combination `Content` key-stringification breaks" + ), + wait + ); + + // (ii) The PRODUCTION boundary: whole state through `PersistedGameState`, both the + // outer API the WASM bridge uses (`from_str`) and the `Value` form it degrades to. + let mut state = GameState::new_two_player(7); + state.waiting_for = wait.clone(); + let raw = serde_json::to_value(&state).expect("the state serializes"); + let restored = serde_json::from_value::(raw.clone()) + .expect("decodes through the production persistence boundary") + .into_game_state(); + assert_eq!( + restored.waiting_for, wait, + "the restored wait must carry the SAME per-cycle signature, not a dropped or \ + emptied one" + ); + let text = serde_json::to_string(&raw).expect("serializes to text"); + let via_str = serde_json::from_str::(&text) + .expect("and through the WASM bridge's own `from_str::`") + .into_game_state(); + assert_eq!(via_str.waiting_for, wait); + + // (iii) MUST-NOT-FLIP: a proposal stating no signature stays absent from the wire. + let none = ShortcutProposal { + per_cycle: None, + ..proposal + }; + let none_json = serde_json::to_string(&none).expect("serializes"); + assert!( + !none_json.contains("per_cycle"), + "`skip_serializing_if` must keep a signature-free proposal byte-identical to \ + BASE; got {none_json}" + ); + } + // ── PR-7 Phase 5c: the DRAW verdict's paired CR 616.1 obligation ── /// A mandatory, non-"up to" `Effect::Draw` trigger — the starved shape the From 85eb87aeffcd223142eb9d415645e661a44a384a Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 11:04:06 -0500 Subject: [PATCH 30/62] fix(engine): refuse the resolution probe when a prompt already stands MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Maintainer Critical 2 on #6886, and CodeRabbit 3699361064. `probe_resolution` compared only the `WaitingFor` DISCRIMINANT of the probed clone against the incoming board. When the incoming board already carries a non-priority variant, a resolution that re-parks the SAME variant leaves the two discriminants equal, so the probe reported the resolution CHOICE-FREE while an unanswered choice sat on the board. That is fail-open in the one direction this function exists to close, and no comparison against the incoming variant can see it — the incoming variant is exactly what masks it. Now keyed on "is there a prompt at all": a non-`Priority` `waiting_for` on the probed board is itself a refusal. The incoming board is a RESOLUTION BOARD by this function's own documented contract, so a standing prompt is a reason to refuse rather than a baseline to compare against. The discriminant test is kept alongside it, so the guard is STRICTLY STRONGER on every input than the struck form: it can only ever cost coverage (a missed offer), never soundness — the same direction as the budget-exceeded and empty-derivation arms beside it. NEW ROW `a_prompt_standing_on_the_incoming_board_refuses_the_probe`, a MATCHED PAIR over all six allow-listed arms: each arm must still reach `Events` from a priority board (positive control — without it a probe that refused everything would pass), and must return `Prompted` when the same board carries a standing `ReplacementChoice`. The row asserts the resolution does NOT clear that prompt, so the discriminants really are equal and the struck guard could not have caught it. REVERT-PROBE, run: restoring the bare discriminant comparison ⇒ the negative arm FLIPS TO FAIL while the positive control stays green; restored byte-identical. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/game/resolution_prompt.rs | 99 ++++++++++++++++++++- 1 file changed, 97 insertions(+), 2 deletions(-) diff --git a/crates/engine/src/game/resolution_prompt.rs b/crates/engine/src/game/resolution_prompt.rs index 996b3129ff..bfc0c770f3 100644 --- a/crates/engine/src/game/resolution_prompt.rs +++ b/crates/engine/src/game/resolution_prompt.rs @@ -17,7 +17,7 @@ use crate::game::{effects, replacement}; use crate::types::ability::{ Effect, QuantityExpr, RepeatContinuation, ResolvedAbility, TargetChoiceTiming, }; -use crate::types::game_state::GameState; +use crate::types::game_state::{GameState, WaitingFor}; use crate::types::proposed_event::ProposedEvent; use crate::analysis::resource::ProbeBudget; @@ -118,7 +118,26 @@ pub(crate) fn probe_resolution( }); // CR 732.2a: an unanswered prompt is a choice the certificate cannot // describe. - if std::mem::discriminant(&work.waiting_for) != std::mem::discriminant(&state.waiting_for) { + // + // KEYED ON "IS THERE A PROMPT AT ALL", not merely on "does it differ from the + // incoming variant". The struck form compared only `WaitingFor` DISCRIMINANTS: if + // the incoming board already carried a non-priority variant and the resolver parked + // a NEW prompt of that SAME variant, the discriminants matched and the resolution + // was reported CHOICE-FREE. That is fail-open in the one direction this function + // exists to close, and comparing against the incoming variant can never see it — + // the incoming variant is exactly what masks it. + // + // The incoming board is a RESOLUTION BOARD (see this function's contract above), so + // a non-priority `waiting_for` on entry is itself a reason to refuse rather than a + // baseline to compare against. The discriminant test is KEPT alongside, so a board + // that entered at priority and left at a different variant still refuses. + // + // Strictly stronger than the struck form on every input, so it can only ever cost + // COVERAGE (a missed offer), never soundness — the same direction as the + // budget-exceeded and empty-derivation arms around it. + if !matches!(work.waiting_for, WaitingFor::Priority { .. }) + || std::mem::discriminant(&work.waiting_for) != std::mem::discriminant(&state.waiting_for) + { return ResolutionProbe::Prompted; } // FAIL-CLOSED on an empty set. Measured: every empty derivation observed was @@ -928,6 +947,82 @@ mod tests { /// /// CONJUNCT 2 (the population gate) is asserted as a conjunct that FAILS the /// test, not promised in prose: the set of arms observed must equal all six. + /// CR 732.2a — a prompt already parked on the incoming board must REFUSE the probe, + /// even though the resolution leaves the variant unchanged. + /// + /// The struck guard compared only `WaitingFor` DISCRIMINANTS between the probed clone + /// and the incoming board. When the incoming board already carries a non-priority + /// variant, the two discriminants are equal for a resolution that re-parks the SAME + /// variant (and, in the reduced form asserted here, for one that simply leaves the + /// standing prompt in place) — so the probe reported CHOICE-FREE while an unanswered + /// choice sat on the board. Fail-open, in the one direction this function closes. + /// + /// MATCHED PAIR, which is what makes this non-vacuous: + /// * NEGATIVE arm — the same ability, same board, `waiting_for` parked at a real + /// resolution-time prompt (`ReplacementChoice`, CR 616.1) ⇒ MUST be `Prompted`. + /// * POSITIVE arm — the same ability on the same board at `Priority` ⇒ MUST still + /// reach `Events`. Without it, a probe that refused EVERYTHING would pass the + /// negative arm, and the row would prove nothing. + /// + /// REVERT-PROBE (run, recorded): restore the guard to the bare + /// `discriminant(&work.waiting_for) != discriminant(&state.waiting_for)` ⇒ the + /// NEGATIVE arm FLIPS TO FAIL (the probe returns `Events`) while the POSITIVE arm + /// stays green — i.e. the new conjunct, not the old one, is what carries this row. + #[test] + fn a_prompt_standing_on_the_incoming_board_refuses_the_probe() { + let base = probe_board(); + let parked = WaitingFor::ReplacementChoice { + player: PlayerId(0), + candidate_count: 2, + candidates: Vec::new(), + }; + assert!( + !matches!(base.waiting_for, WaitingFor::ReplacementChoice { .. }), + "reach-guard: the parked variant must DIFFER from the board's own starting \ + variant, or the negative arm could pass for the wrong reason" + ); + + let mut refused = 0usize; + for (name, a) in six_allow_listed_arms(&base) { + // POSITIVE — at priority, this arm is known to reach the recorder. + match probe_resolution(&base, &a, &mut budget()) { + ResolutionProbe::Events(events) => assert!( + !events.is_empty(), + "{name}: positive control must derive a non-empty event set" + ), + ResolutionProbe::Prompted => panic!( + "{name}: POSITIVE CONTROL FAILED — this arm must still be probeable \ + from a priority board, otherwise the negative arm below is vacuous" + ), + } + + // NEGATIVE — same ability, same board, a prompt already standing. + let mut stalled = base.clone(); + stalled.waiting_for = parked.clone(); + assert_eq!( + std::mem::discriminant(&stalled.waiting_for), + std::mem::discriminant(&parked), + "{name}: the resolution must not clear the standing prompt, or the \ + discriminants would differ and the struck guard would have caught it too \ + — which would make this row prove nothing about the new conjunct" + ); + assert!( + matches!( + probe_resolution(&stalled, &a, &mut budget()), + ResolutionProbe::Prompted + ), + "{name}: an UNANSWERED prompt on the incoming board is a choice the \ + certificate cannot describe — the probe must refuse it, not read the \ + equal discriminants as `unchanged`" + ); + refused += 1; + } + assert_eq!( + refused, 6, + "reach-guard: the row must range over all six allow-listed arms" + ); + } + #[test] fn derived_event_set_accounts_for_every_board_axis_on_all_six_allow_listed_arms() { let state = probe_board(); From 2b8b1d4c764e1f2bfce5f78c4b21ad7a03a2e806 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 11:04:07 -0500 Subject: [PATCH 31/62] fix(engine,ai): offer only legal quantity choices on a bounded shortcut MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Maintainer Medium 5 on #6886, and CodeRabbit 3699361023 / 3699361081. The candidate generator emitted `IterationCount::UntilLethal` unconditionally for every `WaitingFor::LoopShortcut` node, including bounded offers. `handle_declare_shortcut` rejects that combination outright (`IterationCount::UntilLethal if offer.schema.is_bounded()` => `reject_shortcut_declaration`, `crates/engine/src/game/engine.rs`), and that reject is a SUCCESSFUL fail-closed handback — `Ok(result)`, not an `Err`. So the candidate was not merely a wasted search node: the simulation layer was handed an action the engine accepts and then silently discards, i.e. an illegal quantity choice wearing the shape of a legal one, which the policy layer then had to know to score away. `UntilLethal` is now gated on `!schema.is_bounded()`. A bounded offer still gets `Fixed(max_iterations)` where its pin set permits a `template: None` declaration; where neither applies, `DeclineShortcut` genuinely is the only legal answer at the node, and representing that honestly is the point. Paired AI-side guard: `LoopShortcutPolicy`'s final bounded arm matched every remaining `Fixed(n)` INCLUDING `n == 0`, so a zero-count declaration — legal and representable, per `a_zero_count_declaration_validates_over_an_empty_range_but_still_checks_ cardinality` — would have been scored into the CRITICAL band. It commits no cycles while spending the CR 732.2b response window, the same weak-domination shape the over-bound and `(None, UntilLethal)` arms already reject. Unreachable from today's generator, so no current ranking moves; the arm now states its own precondition instead of relying on an invariant maintained a crate away. Uses `PolicyVerdict::reject`, not a raw sentinel. R8 OFFER-WRITER CENSUS: unaffected, and checked rather than assumed. The census counts occurrences of the `WaitingFor::LoopShortcut {` token; this change edits the BODY of an existing match arm and adds or removes no such token, so the pinned (22, 14) pair and the per-file production multiset are untouched. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/ai_support/candidates.rs | 33 ++++++++++++++----- crates/phase-ai/src/policies/loop_shortcut.rs | 17 ++++++++++ 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/crates/engine/src/ai_support/candidates.rs b/crates/engine/src/ai_support/candidates.rs index 91bb60ac93..464ed23fde 100644 --- a/crates/engine/src/ai_support/candidates.rs +++ b/crates/engine/src/ai_support/candidates.rs @@ -3235,14 +3235,31 @@ pub fn candidate_actions_broad_with_probe( WaitingFor::LoopShortcut { proposer, schema, .. } => { - let mut v = vec![candidate( - GameAction::DeclareShortcut { - count: crate::analysis::decision_template::IterationCount::UntilLethal, - template: None, - }, - TacticalClass::Utility, - Some(*proposer), - )]; + // CR 732.2a: `UntilLethal` names no count, so it is legal ONLY against an offer + // that narrowed no bound. `handle_declare_shortcut` rejects it outright against + // a bounded one (`IterationCount::UntilLethal if offer.schema.is_bounded()` => + // `reject_shortcut_declaration`), and that reject is a SUCCESSFUL, fail-closed + // handback to priority — `Ok(result)`, not an `Err`. So an unconditional + // `UntilLethal` candidate did not merely waste a search node: it handed the + // simulation layer an action the engine ACCEPTS and then silently discards, + // i.e. an illegal quantity choice wearing the shape of a legal one, which the + // policy layer then has to know to score away. + // + // Emit only the quantity choices the offer can actually take. A bounded offer + // gets `Fixed(max_iterations)` below when its pin set permits a `template: None` + // declaration; where neither applies, `DeclineShortcut` really is the only legal + // answer at the node, and representing that honestly is the point. + let mut v = Vec::new(); + if !schema.is_bounded() { + v.push(candidate( + GameAction::DeclareShortcut { + count: crate::analysis::decision_template::IterationCount::UntilLethal, + template: None, + }, + TacticalClass::Utility, + Some(*proposer), + )); + } // CR 732.2a: a BOUNDED offer states a legal repetition count, and the declare // handler rejects `UntilLethal` against one outright — so without this candidate // the AI's only non-declining option at such a node is an answer the engine diff --git a/crates/phase-ai/src/policies/loop_shortcut.rs b/crates/phase-ai/src/policies/loop_shortcut.rs index 808f90c855..235ef277ef 100644 --- a/crates/phase-ai/src/policies/loop_shortcut.rs +++ b/crates/phase-ai/src/policies/loop_shortcut.rs @@ -230,6 +230,23 @@ impl TacticalPolicy for LoopShortcutPolicy { .with_fact("max_iterations", i64::from(schema.max_iterations)), ), + // CR 732.2a: a ZERO-repetition declaration is representable, and the engine treats + // it as legal — `a_zero_count_declaration_validates_over_an_empty_range_but_still_ + // checks_cardinality` in `crates/engine/tests/integration/loop_shortcut.rs` pins + // exactly that — but it commits NO cycles while still spending the CR 732.2b + // response window. That is the same weak-domination shape the over-bound arm above + // and the `(None, UntilLethal)` arm reject: the outcome set is {no-op, minus a + // response window}, so declining weakly dominates it. + // + // Unreachable from today's generator (it emits only `Fixed(max_iterations)`, and + // the load seam refuses `max_iterations: 0`), so this reorders nothing that can + // occur now. It states the scoring arm's OWN precondition rather than leaving it + // to an invariant maintained a crate away: without it, the arm below hands a + // guaranteed no-op the CRITICAL band, i.e. ranks doing nothing as game-deciding. + (_, IterationCount::Fixed(0)) => PolicyVerdict::reject(PolicyReason::new( + "loop_shortcut_bounded_declare_zero_count", + )), + // CR 732.2a: within the offered bound on a bounded offer ⇒ committed board // progress that eliminates nobody. Game-deciding ⇒ critical band, via the // auto-banding `PolicyVerdict::score` (NEVER `preference`, whose `debug_assert!` From 71b1ca060699a3b0f1f5ebdd3ef43617a078d669 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 11:04:33 -0500 Subject: [PATCH 32/62] fix(scripts): read both trigger-definition shapes and stop overwriting carriers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Maintainer Medium 3 on #6886, and CodeRabbit 3699361085 / 3699361087 plus the non-object `command` nitpick. Also folds in the promised doc correction. 1. `_defs` read `.description` across BOTH definition lists, but they do not serialize alike. `trigger_definitions` is `Definitions` and `TriggerEntry` is `{occurrence, definition}`, so its text is at `.definition.description`; only `base_trigger_definitions` (`Vec`) exposes `.description` directly. MEASURED on the committed corpus, which is what the maintainer asked for and what the earlier "all 172 carriers matched non-null" claim did not establish: of the `trigger_definitions` entries, ZERO expose a direct `.description` and 100% nest it (145 / 165 / 132 on dellian / dina / witherbloom). The live list therefore contributed NOTHING — every entry collapsed to the `// ""` fallback — and all 172 carriers resolved through `base_trigger_definitions` alone. Total descriptions visible to the derivation across the corpus: 875 before, 1755 after. REACHABLE, not theoretical: `dellian_emblem_conqueror_4p` carries a GRANTED trigger ("When ~ dies, you gain 1 life.") present in the live list and absent from the base list. A firing whose description existed only there would have aborted the whole stamp on a classifiable fixture. BEHAVIOUR-PRESERVING on the corpus: 172 carriers resolve before AND after, all `Ordinary`; the pristine regeneration stays BYTE_IDENTICAL=true. 2. `stamp_trigger_firing` assigned all three carrier keys unconditionally without reading them, so `stamp-fixture-firing.sh`'s header claim that in-place stamping "cannot revert anything" was false for exactly those keys — and arm 1 structurally cannot catch it, because it deletes them from both sides before comparing. An already-canonical `Delayed` carrier would either abort the stamp or be silently rewritten to `Ordinary`, the CR 603.7a to CR 603.1 re-classification this library exists to refuse. Now derives only into an ABSENT slot, which also makes the stamp idempotent. Preservation is scoped to stack entries that are still on the stack, so a stale key cannot accumulate and inflate the carrier total past the number of triggered records — the one shape that could have let arm 2's aggregate comparison cancel a surplus against a deficit. 3. `select(.command.DelayedTriggerInstall)` indexes `.command` with a key, which aborts jq with a raw type error on a serde unit variant (a bare JSON string). This file's contract is that undetermined cases abort BY NAME; filtered to objects first so the probe stays total. TWO NEW PRE-FLIGHT CONTROL ARMS, both with negative controls, because no fixture-level arm can witness either property: arm 4 DEFINITION_SHAPES — `_defs` resolves a nested-only description AND a direct-only one, and still ABORTS on one present in neither. arm 5 CARRIER_PRESERVED — an existing canonical carrier survives, while an absent one is still derived. REVERT-PROBE, run: restoring the old `_defs` ⇒ arm 4 reports `nested=FAILED` and the script refuses to stamp (rc=1), while `direct` stays green and the negative control still aborts; restored byte-identical. DOC: the header said the stamped artifact minus "the three new keys"; the executable `del()` names FIVE (three carriers + two allocators). Corrected, as promised in the PR body. Assisted-by: ClaudeCode:claude-opus-5 --- scripts/lib/trigger-firing.jq | 77 +++++++++++++++++++++++++-- scripts/stamp-fixture-firing.sh | 93 +++++++++++++++++++++++++++++++-- 2 files changed, 162 insertions(+), 8 deletions(-) diff --git a/scripts/lib/trigger-firing.jq b/scripts/lib/trigger-firing.jq index b9b38badb9..98052e31ca 100644 --- a/scripts/lib/trigger-firing.jq +++ b/scripts/lib/trigger-firing.jq @@ -31,10 +31,35 @@ # `stack_trigger_firings` is keyed by the STACK ENTRY id — what # `validate_trigger_firing_coherence` looks up — not by the source id. +# The two definition lists have DIFFERENT serialized shapes, and reading one field name +# across both silently drops a whole list: +# `trigger_definitions` is `Definitions`, and `TriggerEntry` is +# `{occurrence, definition}` — the text lives at +# `.definition.description` +# (`crates/engine/src/types/ability.rs`). +# `base_trigger_definitions` is `Arc>` — text at `.description`. +# +# MEASURED on the committed corpus: of the `trigger_definitions` entries, 0 expose a +# DIRECT `.description` and 100% (145 / 165 / 132 on dellian / dina / witherbloom) nest it +# under `.definition`. The struck form read `.description` on both lists, so every LIVE +# entry collapsed to the `// ""` fallback and that list contributed nothing — all 172 +# carriers matched through `base_trigger_definitions` alone. "Every carrier resolved" was +# therefore true but not evidence that this read was right. +# +# The gap is REACHABLE, not theoretical: `dellian_emblem_conqueror_4p` carries a GRANTED +# trigger ("When ~ dies, you gain 1 life.") that is present in the live list and ABSENT +# from the base list. A firing whose description existed only there would have aborted the +# entire stamp with `UNDETERMINED firing carrier` on a fixture that is in fact classifiable. +# +# Read each entry by its OWN shape rather than assuming one: `.definition.description` +# first, then `.description`. Empty strings are dropped so a shape this does not +# understand cannot match a description that is itself empty — an unrecognised entry must +# reach the `UNDETERMINED` abort, never satisfy a lookup by accident. def _defs($objs; $src): (($objs[($src|tostring)] // {}) | (.trigger_definitions // []) + (.base_trigger_definitions // [])) - | map(.description // ""); + | map((.definition.description // .description) // "") + | map(select(. != "")); def _firing($objs; $src; $d): if ((_defs($objs; $src)) | index($d)) then "Ordinary" @@ -79,8 +104,14 @@ def trigger_carrier_count: # case to the engine. def stamp_delayed_allocators: if (.gameState // null) == null then . else + # `.command` is only indexable when it is an OBJECT. serde writes an externally + # tagged UNIT variant as a bare JSON string, and `select(.command.X)` on a string + # aborts jq with `Cannot index string with "DelayedTriggerInstall"`. That is not a + # named abort: this file's contract is that an undetermined case aborts BY NAME, and + # a raw type error leaves the operator unable to tell a shape it does not understand + # from a real install root. Filter to objects first so the probe stays total. ([ (.gameState.resolved_rules_journal.entries // [])[] - | select(.command.DelayedTriggerInstall) ] | length) as $installs + | select((.command | objects | has("DelayedTriggerInstall")) // false) ] | length) as $installs | ((.gameState.delayed_triggers // []) | length) as $delayed | if ($installs > 0 or $delayed > 0) then error("UNDETERMINED delayed-trigger allocators: \($installs) install command(s), \($delayed) delayed trigger(s) — deriving the used-token set is engine logic, not jq's") @@ -91,22 +122,58 @@ def stamp_delayed_allocators: end end; +# DERIVES ONLY WHERE NO CARRIER EXISTS. Never rewrites one that is already there. +# +# The struck form assigned all three keys unconditionally, without reading them. That +# made `stamp-fixture-firing.sh`'s header claim — in-place stamping "is additive and +# cannot revert anything" — false for exactly these keys, and arm 1 cannot catch it +# because it deletes all five stamped keys from both sides before comparing. +# +# The damage is silent and is the one inference this file exists to refuse. A fixture +# already carrying a canonical `{"Delayed": {...}}` (a modern capture, or an +# engine-side migration) has two ways to lose it: +# * the delayed trigger's description is absent from the source object's definitions, +# so `_firing` ABORTS the whole stamp on a fixture that was already correct; or +# * the description IS present there, so the carrier is silently rewritten to +# "Ordinary" — a CR 603.7a delayed firing re-classified as a CR 603.1 ordinary one, +# with no diagnostic. That is precisely the silent re-classification this file's +# header forbids. +# +# Deriving only into an ABSENT slot makes the "additive" claim true, and makes the whole +# stamp idempotent: re-running it over already-stamped fixtures is now a no-op rather +# than a re-derivation that has to agree with itself. def stamp_trigger_firing: if (.gameState // null) == null then . else .gameState.objects as $objs | (.gameState.resolving_stack_entry // .gameState.resolving_trigger) as $rt + # Existing carriers are preserved, but ONLY for stack entries that are still there. + # A key naming an entry that has left the stack is stale, and carrying it forward + # would inflate `stack_trigger_firings` past the number of triggered records — which + # is also the one shape that could defeat `stamp-fixture-firing.sh`'s arm 2, since + # that arm compares carrier TOTALS and a surplus here could cancel a deficit + # elsewhere. Scoping preservation to live entries keeps "preserve what is canonical" + # from becoming "accumulate whatever was there". + | ([ (.gameState.stack // [])[] + | select(.kind.type == "TriggeredAbility") | (.id|tostring) ]) as $live_ids + | ((.gameState.stack_trigger_firings // {}) + | with_entries(select(.key as $k | $live_ids | index($k)))) as $sf_existing | .gameState |= ( - (if (.pending_trigger // null) != null + (if ((.pending_trigger // null) != null + and (.pending_trigger_firing // null) == null) then .pending_trigger_firing = _firing($objs; .pending_trigger.source_id; .pending_trigger.description) else . end) | (([ (.stack // [])[] | select(.kind.type == "TriggeredAbility") + | select(($sf_existing | has((.id|tostring))) | not) | {key: (.id|tostring), value: _firing($objs; .kind.data.source_id; .kind.data.description)} ] | from_entries) as $sf - | if ($sf | length) > 0 then .stack_trigger_firings = $sf else . end) - | (if ($rt != null and ($rt.kind.type? // "") == "TriggeredAbility") + | if ($sf | length) > 0 + then .stack_trigger_firings = ($sf_existing + $sf) + else . end) + | (if ($rt != null and ($rt.kind.type? // "") == "TriggeredAbility" + and (.resolving_trigger_firing // null) == null) then .resolving_trigger_firing = _firing($objs; $rt.kind.data.source_id; $rt.kind.data.description) else . end) diff --git a/scripts/stamp-fixture-firing.sh b/scripts/stamp-fixture-firing.sh index d16eaa2eb5..03ffff4062 100755 --- a/scripts/stamp-fixture-firing.sh +++ b/scripts/stamp-fixture-firing.sh @@ -11,8 +11,9 @@ # fixture carries a LATER parser state than the 2026-07-22/25 capture. Rerunning # those from pristine would silently REVERT that. Stamping in place is additive # and cannot revert anything, and its arm-1 control is strictly stronger: the -# stamped artifact minus the three new keys must be BYTE-IDENTICAL to what was -# committed, which proves zero collateral change. +# stamped artifact minus the five stamped keys (three firing carriers plus the +# two delayed-trigger allocators — the exact `del()` list below) must be +# BYTE-IDENTICAL to what was committed, which proves zero collateral change. # # The derivation is NOT re-spelled here — it is loaded from # scripts/lib/trigger-firing.jq, the same single definition @@ -33,7 +34,7 @@ # engine's own coherence validator rejects. Stamping the repaired value on # disk keeps the decoders in agreement WITHOUT weakening any assertion. # -# ALL THREE control arms, and a one- or two-arm check passes vacuously: +# ALL FIVE control arms, and a partial check passes vacuously: # arm 1 => NO_COLLATERAL=true stamped minus the 5 stamped keys is # byte-identical to the committed fixture, so nothing else moved. # arm 2 => CARRIERS_ADDED=true every firing carrier the dump needs is @@ -41,6 +42,15 @@ # difference: gzip/jq re-serialization alone changes bytes without # stamping anything, which is the stale-artifact false pass. # arm 3 => ALLOCATORS_CANONICAL=true both allocators exist and are >= 1. +# arm 4 => DEFINITION_SHAPES=true a PRE-FLIGHT control, run once before any +# fixture is touched: the shipped `_defs` must read BOTH serialized +# definition shapes, and must still ABORT when a description is in +# neither. See `definition_shape_control` below. +# arm 5 => CARRIER_PRESERVED=true a PRE-FLIGHT control: an existing canonical +# carrier must SURVIVE the stamp (the "additive" claim above, which arm 1 +# structurally cannot check because it deletes those keys before +# comparing), while an absent one is still derived. See +# `carrier_preservation_control` below. set -euo pipefail @@ -60,6 +70,83 @@ done CARRIERS='del(.gameState.pending_trigger_firing, .gameState.stack_trigger_firings, .gameState.resolving_trigger_firing, .gameState.next_delayed_trigger_token, .gameState.next_delayed_trigger_instance)' +# arm 4 — PRE-FLIGHT: does the shipped `_defs` actually read both serialized +# definition shapes? +# +# The two lists do NOT serialize alike. `trigger_definitions` is +# `Definitions` and nests its text at `.definition.description`; +# `base_trigger_definitions` is `Vec` and exposes +# `.description` directly. A filter that reads one field name across both still +# resolves every carrier in THIS corpus — measured, 172 of 172 — because the base +# list happens to repeat the same descriptions. So "every carrier resolved" is NOT +# evidence that both shapes are read, and no fixture-level arm can supply that +# evidence. This one can: it asks the question directly, per shape. +# +# Three cases, and the NEGATIVE is what makes the positives non-vacuous — without +# it a `_defs` that returned every string it could find would score green. +definition_shape_control() { + local nested direct absent + # (a) description ONLY in the live list, nested under `.definition`. + nested="$(jq -n -c -f <(printf '%s\n%s\n' "$(cat "$LIB")" \ + '_firing({"7":{"trigger_definitions":[{"definition":{"description":"D"}}]}}; 7; "D")') 2>/dev/null || echo FAILED)" + # (b) description ONLY in the base list, exposed directly. + direct="$(jq -n -c -f <(printf '%s\n%s\n' "$(cat "$LIB")" \ + '_firing({"7":{"base_trigger_definitions":[{"description":"D"}]}}; 7; "D")') 2>/dev/null || echo FAILED)" + # (c) NEGATIVE CONTROL — present in neither shape MUST still abort by name. + if jq -n -c -f <(printf '%s\n%s\n' "$(cat "$LIB")" \ + '_firing({"7":{"trigger_definitions":[{"definition":{"description":"OTHER"}}]}}; 7; "D")') >/dev/null 2>&1 + then absent=RESOLVED; else absent=ABORTED; fi + + if [ "$nested" = '"Ordinary"' ] && [ "$direct" = '"Ordinary"' ] && [ "$absent" = ABORTED ]; then + echo "CONTROL DEFINITION_SHAPES=true nested=$nested direct=$direct unknown=$absent" + return 0 + fi + echo "CONTROL DEFINITION_SHAPES=false nested=$nested direct=$direct unknown=$absent" >&2 + echo " the derivation does not read both serialized definition shapes (or no longer" >&2 + echo " aborts on an unknown description) — refusing to stamp anything" >&2 + return 1 +} + +# arm 5 — PRE-FLIGHT: stamping is genuinely ADDITIVE. +# +# The header above claims in-place stamping "cannot revert anything". Arm 1 cannot +# check that claim for the five stamped keys, because it DELETES exactly those keys +# from both sides before comparing — the one blind spot in an otherwise strong control. +# So a carrier that was already canonical (a modern capture, or an engine-side +# migration) could have been silently rewritten to "Ordinary", which is the CR 603.7a +# to CR 603.1 re-classification `lib/trigger-firing.jq` exists to refuse. +# +# The NEGATIVE half is what makes it non-vacuous: an ABSENT carrier must still be +# derived, or "preserved everything" would also describe a stamp that did nothing. +carrier_preservation_control() { + local kept derived + # (a) An existing `Delayed` carrier survives, and is NOT rewritten to "Ordinary" — + # note its description IS present in the object's definitions, so the struck + # form would have overwritten it rather than aborting. + kept="$(printf '%s' '{"gameState":{"objects":{"7":{"base_trigger_definitions":[{"description":"D"}]}}, + "pending_trigger":{"source_id":7,"description":"D"}, + "pending_trigger_firing":{"Delayed":null}}}' \ + | jq -c -f <(printf '%s\n%s\n' "$(cat "$LIB")" 'stamp_trigger_firing | .gameState.pending_trigger_firing') \ + 2>/dev/null || echo FAILED)" + # (b) NEGATIVE CONTROL — the SAME dump with the carrier removed must still derive one, + # or "preserved" would also describe a stamp that stopped working entirely. + derived="$(printf '%s' '{"gameState":{"objects":{"7":{"base_trigger_definitions":[{"description":"D"}]}}, + "pending_trigger":{"source_id":7,"description":"D"}}}' \ + | jq -c -f <(printf '%s\n%s\n' "$(cat "$LIB")" 'stamp_trigger_firing | .gameState.pending_trigger_firing') \ + 2>/dev/null || echo FAILED)" + + if [ "$kept" = '{"Delayed":null}' ] && [ "$derived" = '"Ordinary"' ]; then + echo "CONTROL CARRIER_PRESERVED=true existing=$kept absent_is_derived=$derived" + return 0 + fi + echo "CONTROL CARRIER_PRESERVED=false existing=$kept absent_is_derived=$derived" >&2 + echo " stamping is not additive (or stopped deriving absent carriers) — refusing to stamp" >&2 + return 1 +} + +definition_shape_control || exit 1 +carrier_preservation_control || exit 1 + rc=0 for FIX in "$@"; do [ -f "$FIX" ] || { echo "no such fixture: $FIX" >&2; rc=1; continue; } From f806d49bc254548b8e278edfb98fe7abc6a1f9ca Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 11:05:07 -0500 Subject: [PATCH 33/62] fix(scripts): make fixture migration atomic and envelope-preserving MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Maintainer Medium 4 on #6886, and CodeRabbit 3699361092 (Critical) / 3699361088 / 3699361096. 1. NON-ATOMIC WRITE, and the destination is the committed fixture. `regenerate` redirected the pipeline straight into `$dest`; the shell creates and TRUNCATES a redirection target before the first command in the pipeline runs, and the production path passes `$OUT`. This recipe aborts BY DESIGN — `_firing` raises `UNDETERMINED firing carrier`, `stamp_delayed_allocators` raises `UNDETERMINED delayed-trigger allocators` — so `set -e` / `pipefail` stopped the script only AFTER the fixture had been truncated and a partial gzip stream written over it. The failure mode of a fail-closed recipe was destruction of the artifact it was refusing to rewrite. Now stages to `mktemp` and `mv`s only on success, matching `stamp-fixture-firing.sh`. 2. PASS-THROUGH CORRUPTION. The final `{gameState:.gameState}` is a REWRITE, not a projection, for a dump that is not `gameState`-shaped: `.gameState` is null on those, so the document became `{"gameState":null}` — silently, since that is valid JSON. Several fixtures in this corpus really do use the other envelope (top level `turn_number`), which is why `lib/trigger-firing.jq` already passes them through. Keyed on `has("gameState")` rather than truthiness, so an explicitly-null `gameState` is not quietly normalised into the husk shape. Preserves the input unchanged, per the maintainer's disposition. 3. ARM 2 HAD GONE VACUOUS — it was reporting the opposite of its claim. It compared the patched and unpatched regenerations wholesale and required a difference, and inferred from that difference that the `effect_kind` filter had teeth. Stage 2b broke the inference: the patched filter also runs `stamp_trigger_firing` and `stamp_delayed_allocators`, and the allocator stage rewrites the two allocator keys on EVERY `gameState`-shaped dump in this corpus (measured: all six move to 1), while the unpatched filter runs neither. So the documents differed unconditionally, including on the dumps that carry no target prompt at all, and arm 2 printed `PATCHED_DIFFERS=true` while `effect_kind` had matched nothing. Now compares the `target_slots` projection specifically, and NAMES the no-prompt case instead of counting it as a pass. New arm 3 `STAGE_2B_LANDED` covers what arm 2 no longer claims. TWO PRE-FLIGHT SELF-TESTS, on synthetic inputs through the SAME `transform` the migration uses, because neither property can be witnessed by a corpus fixture — both are about inputs this corpus does not contain. Each has a paired positive control: ATOMIC_ON_FAILURE — a real abort leaves the destination byte-identical to a sentinel (and a SUCCEEDING run must still replace it, or the row would pass because nothing ever writes). ENVELOPE_PRESERVED — a `turn_number` dump survives unchanged (and a `gameState` dump must still be projected). VERIFIED NEUTRAL against the pre-change script, run side by side: dellian reproduces `BYTE_IDENTICAL=true` and the same `PATCHED_DIFFERS=true stamped=["LoseLife"]`. dina's `BYTE_IDENTICAL=false` is PRE-EXISTING and reproduces identically under the original script — it is the documented later-parser-state divergence, not a regression from this change. Assisted-by: ClaudeCode:claude-opus-5 --- scripts/migrate-dump-fixture.sh | 183 +++++++++++++++++++++++++++++--- 1 file changed, 166 insertions(+), 17 deletions(-) diff --git a/scripts/migrate-dump-fixture.sh b/scripts/migrate-dump-fixture.sh index 4e158e8969..dcb9cbd7f9 100755 --- a/scripts/migrate-dump-fixture.sh +++ b/scripts/migrate-dump-fixture.sh @@ -121,24 +121,142 @@ GZIP_VERSION="$(gzip --version | head -1)" FIRING_LIB="$(dirname "${BASH_SOURCE[0]}")/lib/trigger-firing.jq" [ -f "$FIRING_LIB" ] || { echo "missing $FIRING_LIB" >&2; exit 1; } -regenerate() { # regenerate - local mode="$1" dest="$2" filter='{gameState:.gameState}' +# The final projection PRESERVES a non-`gameState` envelope instead of replacing it. +# +# `{gameState:.gameState}` is a REWRITE, not a projection, for any dump that is not +# `gameState`-shaped: `.gameState` is null on those, so the whole document became +# `{"gameState":null}` — the committed fixture destroyed and replaced by a one-key +# husk. That contradicted the pass-through `trigger-firing.jq` already implements for +# its own stages, and it is silent: the output is valid JSON, so nothing downstream +# objects. Several fixtures in this corpus really do use the other envelope (top level +# `turn_number`), which is why that guard exists in the first place. +# +# Keyed on PRESENCE, not on truthiness — a dump carrying an explicitly null +# `gameState` is malformed and must not be quietly normalised into the husk shape. +PROJECT='if (type == "object" and has("gameState")) then {gameState:.gameState} else . end' + +# Applies the recipe to stdin, writing to stdout. ONE definition of the transform, so +# the migration, the control arms, and the self-tests cannot drift apart. +transform() { # transform + local mode="$1" filter="$PROJECT" if [ "$mode" = patched ]; then - # The `effect_kind` stage applies only to a dump whose prompt actually - # carries `target_slots`. Several dumps in this corpus are paused at a beat - # with no target prompt at all; for them this stage is vacuously absent, and - # `--effect-kind` is inert. Guarding it (rather than letting `map` abort on - # null) is what lets ONE recipe cover the whole corpus — an unguarded - # `|=` here made the script usable only on the two dumps that happen to have - # a prompt, which is why the other four were never regenerable through it. filter="(if (.gameState.waiting_for.data.target_slots? // null) != null then .gameState.waiting_for.data.target_slots |= map(. + {effect_kind: \$k}) - else . end) | stamp_trigger_firing | stamp_delayed_allocators | {gameState:.gameState}" + else . end) | stamp_trigger_firing | stamp_delayed_allocators | $PROJECT" fi + jq -c --arg k "$EFFECT_KIND" -f <(printf '%s\n%s\n' "$(cat "$FIRING_LIB")" "$filter") +} + +# The `effect_kind` stage applies only to a dump whose prompt actually carries +# `target_slots`. Several dumps in this corpus are paused at a beat with no target +# prompt at all; for them this stage is vacuously absent, and `--effect-kind` is +# inert. Guarding it (rather than letting `map` abort on null) is what lets ONE +# recipe cover the whole corpus — an unguarded `|=` here made the script usable only +# on the two dumps that happen to have a prompt, which is why the other four were +# never regenerable through it. +# +# WRITES ATOMICALLY: stage to a temp file, `mv` only after the WHOLE pipeline +# succeeded. +# +# The struck form redirected the pipeline straight into `$dest`. The shell creates +# and TRUNCATES a redirection target before the first command in the pipeline runs, +# and on the production path `$dest` is the committed fixture (`$OUT`). The recipe +# aborts BY DESIGN — `_firing` raises `UNDETERMINED firing carrier` and +# `stamp_delayed_allocators` raises `UNDETERMINED delayed-trigger allocators` — so +# `set -e` / `pipefail` stopped the script only AFTER the fixture had already been +# truncated and a partial gzip stream written over it. The failure mode of a +# fail-closed recipe was destruction of the very artifact it refused to rewrite. +# `stamp-fixture-firing.sh` already had the right shape; this matches it. +regenerate() { # regenerate + local mode="$1" dest="$2" staged mkdir -p "$(dirname "$dest")" - unzip -p "$PRISTINE" | jq -c --arg k "$EFFECT_KIND" -f <(printf '%s\n%s\n' "$(cat "$FIRING_LIB")" "$filter") | gzip -9 -n > "$dest" + staged="$(mktemp -t migrate-dump-stage-XXXXXX.json.gz)" + if ! unzip -p "$PRISTINE" | transform "$mode" | gzip -9 -n > "$staged"; then + rm -f "$staged" + echo "REGENERATION FAILED (fail-closed, $dest left untouched)" >&2 + return 1 + fi + mv "$staged" "$dest" } +# PRE-FLIGHT SELF-TESTS for the two properties that no corpus fixture can witness, +# because both are about what happens to inputs this corpus does not contain. +# +# They run before anything is written, on synthetic inputs, through the SAME +# `transform` the migration uses — a self-test that re-spelled the recipe would be +# certifying its own copy. +# +# (a) FAILURE — when the recipe aborts, the destination must be left EXACTLY as it +# was. Asserted byte-wise against a sentinel, because "the file still +# exists" is not the claim; "the file is unchanged" is. +# (b) PASS-THROUGH — a non-`gameState` envelope must survive the projection +# unchanged, not become `{"gameState":null}`. +# +# Each has a paired POSITIVE control, or it would pass against a transform that did +# nothing at all. +selftests() { + local tmp sentinel out rc + tmp="$(mktemp -d -t migrate-dump-selftest-XXXXXX)" + + # (a) FAILURE leaves the destination untouched. + # `stamp_delayed_allocators` aborts by name on a dump with install roots it cannot + # collapse, which is the real abort shape, reached through the real recipe. + printf '%s' 'COMMITTED-FIXTURE-SENTINEL' > "$tmp/dest" + sentinel="$(sha256sum "$tmp/dest" | cut -d' ' -f1)" + printf '%s\n' '{"gameState":{"delayed_triggers":[],"next_delayed_trigger_token":0, + "resolved_rules_journal":{"entries":[{"command":{"DelayedTriggerInstall":{}}}]}}}' \ + > "$tmp/in.json" + set +e + # Same staged-write discipline as `regenerate`; the point is that `$tmp/dest` is + # never the redirection target, so an abort cannot reach it. + ( staged="$(mktemp -t migrate-dump-stage-XXXXXX.json.gz)" + if ! transform patched < "$tmp/in.json" | gzip -9 -n > "$staged"; then + rm -f "$staged"; exit 1 + fi + mv "$staged" "$tmp/dest" ) >/dev/null 2>&1 + rc=$? + set -e + if [ "$rc" -eq 0 ]; then + echo "SELFTEST ATOMIC_ON_FAILURE=inconclusive — the abort input did not abort; the row cannot certify atomicity" >&2 + rm -rf "$tmp"; return 1 + fi + if [ "$(sha256sum "$tmp/dest" | cut -d' ' -f1)" != "$sentinel" ]; then + echo "SELFTEST ATOMIC_ON_FAILURE=false — a failed regeneration modified its destination" >&2 + rm -rf "$tmp"; return 1 + fi + + # (a′) POSITIVE control — a SUCCEEDING run must actually replace the destination, + # or (a) would pass simply because nothing ever writes. + printf '%s\n' '{"gameState":{"turn_number":7}}' > "$tmp/ok.json" + ( staged="$(mktemp -t migrate-dump-stage-XXXXXX.json.gz)" + transform patched < "$tmp/ok.json" | gzip -9 -n > "$staged" + mv "$staged" "$tmp/dest" ) >/dev/null 2>&1 + if [ "$(sha256sum "$tmp/dest" | cut -d' ' -f1)" = "$sentinel" ]; then + echo "SELFTEST ATOMIC_ON_FAILURE=vacuous — a SUCCESSFUL run also left the destination unchanged" >&2 + rm -rf "$tmp"; return 1 + fi + + # (b) PASS-THROUGH — the other envelope in this corpus (top level `turn_number`). + printf '%s\n' '{"turn_number":7,"players":[]}' > "$tmp/env.json" + out="$(transform patched < "$tmp/env.json")" + if [ "$(printf '%s' "$out" | jq -S -c .)" != "$(jq -S -c . "$tmp/env.json")" ]; then + echo "SELFTEST ENVELOPE_PRESERVED=false — a non-gameState dump was rewritten: $out" >&2 + rm -rf "$tmp"; return 1 + fi + + # (b′) POSITIVE control — a `gameState` dump IS still projected, so (b) is not + # passing because the transform became a no-op for everything. + if [ "$(transform patched < "$tmp/ok.json" | jq -c 'has("gameState")')" != "true" ]; then + echo "SELFTEST ENVELOPE_PRESERVED=vacuous — the gameState projection stopped working" >&2 + rm -rf "$tmp"; return 1 + fi + + echo "SELFTEST ATOMIC_ON_FAILURE=true ENVELOPE_PRESERVED=true (both with positive controls)" + rm -rf "$tmp" +} + +selftests || exit 1 + if [ "$CONTROL_MODE" -eq 1 ]; then # 5. Control mode, TWO arms, both mandatory. Runnable by anyone, at any time, # with no engine build. Arm 1 re-runs the full recipe and holds it against @@ -178,14 +296,45 @@ if [ "$CONTROL_MODE" -eq 1 ]; then ;; esac - # ARM 2 — the patch reached target_slots. Compared as canonical CONTENT, not - # bytes: this arm asserts a DIFFERENCE, and a difference in compressed bytes - # alone would also be produced by gzip drift, which is not what it claims. - if [ "$(gzip -dc "$PATCHED" | jq -S -c .)" = "$(gzip -dc "$UNPATCHED" | jq -S -c .)" ]; then - echo "CONTROL PATCHED_DIFFERS=false — the jq filter matched nothing; arm 1 above would pass vacuously" >&2 + # ARM 2 — the `effect_kind` patch reached `target_slots`. + # + # COMPARES THE `target_slots` PROJECTION, not the whole document. + # + # The struck form compared the two documents wholesale and required a difference. + # That inference died when stage 2b landed: the patched filter also runs + # `stamp_trigger_firing` and `stamp_delayed_allocators`, and the allocator stage + # rewrites `next_delayed_trigger_token` / `..._instance` on EVERY `gameState`-shaped + # dump in this corpus (measured: all six move from absent/0 to 1). The unpatched + # filter runs neither stage. So the documents differed unconditionally, including on + # the dumps that carry no target prompt at all — arm 2 reported `PATCHED_DIFFERS=true` + # while the `effect_kind` filter had matched NOTHING. That is precisely the vacuous + # pass this arm exists to prevent, so it was reporting the opposite of its claim. + # + # The no-prompt case is now NAMED rather than counted as a pass: it is a real and + # expected shape here, but arm 2 cannot certify the `effect_kind` stage from it, and + # saying so is the honest reading. + SLOTS_P="$(gzip -dc "$PATCHED" | jq -S -c '[.gameState.waiting_for.data.target_slots[]?]')" + SLOTS_U="$(gzip -dc "$UNPATCHED" | jq -S -c '[.gameState.waiting_for.data.target_slots[]?]')" + if [ "$SLOTS_P" = "[]" ] && [ "$SLOTS_U" = "[]" ]; then + echo "CONTROL PATCHED_DIFFERS=n/a — this dump carries no target_slots, so the effect_kind stage is vacuously absent and arm 2 cannot certify it (arm 1 and the stage-2b arms still apply)" + elif [ "$SLOTS_P" = "$SLOTS_U" ]; then + echo "CONTROL PATCHED_DIFFERS=false — the effect_kind filter matched nothing; arm 1 above would pass vacuously" >&2 + exit 1 + else + echo "CONTROL PATCHED_DIFFERS=true stamped=$(gzip -dc "$PATCHED" | jq -c '[.gameState.waiting_for.data.target_slots[]?.effect_kind]') unpatched=$(gzip -dc "$UNPATCHED" | jq -c '[.gameState.waiting_for.data.target_slots[]?.effect_kind]')" + fi + + # ARM 3 — stage 2b landed: the firing carriers and the allocators are present and + # canonical in the patched regeneration. This is what actually distinguishes patched + # from unpatched on a no-prompt dump, and arm 2 above deliberately no longer claims it. + if [ "$(gzip -dc "$PATCHED" | jq -c 'if (.gameState // null) == null then "n/a" + elif (((.gameState.next_delayed_trigger_token // 0) >= 1) + and ((.gameState.next_delayed_trigger_instance // 0) >= 1)) + then "true" else "false" end')" = '"false"' ]; then + echo "CONTROL STAGE_2B_LANDED=false — the allocator repair did not reach the regeneration" >&2 exit 1 fi - echo "CONTROL PATCHED_DIFFERS=true stamped=$(gzip -dc "$PATCHED" | jq -c '[.gameState.waiting_for.data.target_slots[]?.effect_kind]') unpatched=$(gzip -dc "$UNPATCHED" | jq -c '[.gameState.waiting_for.data.target_slots[]?.effect_kind]')" + echo "CONTROL STAGE_2B_LANDED=true carriers=$(gzip -dc "$PATCHED" | jq -c -f <(printf '%s\ntrigger_carrier_count\n' "$(cat "$FIRING_LIB")")) alloc=$(gzip -dc "$PATCHED" | jq -c '{tok:.gameState.next_delayed_trigger_token, inst:.gameState.next_delayed_trigger_instance}')" exit 0 fi From 181276f21c9cab47c41956590f1a4801719f6384 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 11:05:09 -0500 Subject: [PATCH 34/62] fix(engine): route the choose-from-zone fallback chooser through the choice authority MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CodeRabbit 3699361071 / 3699361076 and the outside-diff finding on `choose_from_zone.rs`. 1. `resolve_chooser`'s fallback used `players::opponents` while the multi-candidate prompt above it uses `players::choosable_opponents`. The two differ by `player_exists_for_choice`, i.e. by PHASED-OUT seats — `opponents` filters only on `is_alive`. This is a seam this PR opened: routing the two-or-more path through the choice authority while leaving the fewer-than- two path on the raw list made them disagree about who is choosable, and it did so in the one case that gets NO prompt, so a phased-out seat could receive the choice instead of the only legal opponent with nothing on screen to reveal it. CR 115.10a + CR 608.2d. Empty still degrades to the controller, which is the fail-closed direction. 2. `find_legal_targets_excludes_eliminated_player` had only negative assertions, so a `find_legal_targets` that returned nothing before ever evaluating player legality would have satisfied all three. Every negative is now PAIRED with a positive reach-guard. The `ControllerRef::Opponent` arm additionally moves to a THREE-seat state: in the 2p fixture, eliminating P1 removes P0's only opponent, so "the eliminated opponent is absent" held for a filter that simply never yields players — vacuous by construction. A live opponent alongside the eliminated one is what makes the exclusion attributable to elimination. 3. R8 census doc block carried two stale copies of the plan's original "22/12" while the shipped assertion pins (22, 14). The header is corrected to 14 and the inner prose now defers to the assertion rather than restating a number that can go stale. The two adjudications that moved 12 => 13 => 14 were already recorded on the assert; only the prose lagged. Assisted-by: ClaudeCode:claude-opus-5 --- .../src/game/effects/choose_from_zone.rs | 15 +++++++++- crates/engine/src/game/targeting.rs | 29 ++++++++++++++++++- .../loop_shortcut_offer_writer_census.rs | 8 +++-- 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/crates/engine/src/game/effects/choose_from_zone.rs b/crates/engine/src/game/effects/choose_from_zone.rs index b99cf699cb..3d1b73b962 100644 --- a/crates/engine/src/game/effects/choose_from_zone.rs +++ b/crates/engine/src/game/effects/choose_from_zone.rs @@ -1090,7 +1090,20 @@ fn resolve_chooser(state: &GameState, ability: &ResolvedAbility, chooser: Choose return targeted_opponent; } // Fallback: first opponent in APNAP order (CR-correct for 2-player). - players::opponents(state, ability.controller) + // + // CR 115.10a + CR 608.2d: `choosable_opponents` — the SAME authority the + // multi-candidate prompt above consults — not the raw `opponents`. The two + // differ by `player_exists_for_choice`, i.e. by PHASED-OUT seats, since + // `opponents` filters only on `is_alive`. Routing the >= 2 path through the + // choice authority while leaving this < 2 path on the raw list made the two + // disagree about who is choosable, and it did so in the one case that gets + // NO prompt: a phased-out seat could be handed the choice instead of the + // only legal opponent, with nothing on screen to reveal it. + // + // Empty (every opponent phased out or gone) still degrades to the + // controller, which is the fail-closed direction and what CR 608.2d asks + // for — an impossible choice is not offered. + players::choosable_opponents(state, ability.controller) .into_iter() .next() .unwrap_or(ability.controller) diff --git a/crates/engine/src/game/targeting.rs b/crates/engine/src/game/targeting.rs index 115f017d46..065bd044f0 100644 --- a/crates/engine/src/game/targeting.rs +++ b/crates/engine/src/game/targeting.rs @@ -3658,22 +3658,49 @@ mod tests { state.players[1].is_eliminated = true; state.eliminated_players.push(PlayerId(1)); + // EVERY negative below is PAIRED with a positive reach-guard. Without them a + // `find_legal_targets` that returned nothing at all — because it bailed before it + // ever evaluated player legality — would satisfy all three "must not contain" + // assertions and the row would certify an unreached code path. let player_targets = find_legal_targets(&state, &TargetFilter::Player, PlayerId(0), ObjectId(99)); + assert!( + player_targets.contains(&TargetRef::Player(PlayerId(0))), + "reach-guard: the LIVING player must still be a legal `Player` target, or the \ + exclusion below proves nothing about elimination" + ); assert!( !player_targets.contains(&TargetRef::Player(PlayerId(1))), "eliminated player must not appear in legal targets" ); let any_targets = find_legal_targets(&state, &TargetFilter::Any, PlayerId(0), ObjectId(99)); + assert!( + any_targets.contains(&TargetRef::Player(PlayerId(0))), + "reach-guard: the LIVING player must still be reachable under `Any`" + ); assert!( !any_targets.contains(&TargetRef::Player(PlayerId(1))), "eliminated player must not appear under TargetFilter::Any either" ); + // The opponent arm needs a THIRD seat. In the 2p fixture, eliminating P1 removes + // P0's only opponent, so "the eliminated opponent is absent" would hold for a + // filter that simply never yields players — the assertion would be vacuous by + // construction. A live opponent alongside the eliminated one is what makes the + // exclusion attributable to elimination. + use crate::types::format::FormatConfig; + let mut three = GameState::new(FormatConfig::standard(), 3, 42); + three.players[1].is_eliminated = true; + three.eliminated_players.push(PlayerId(1)); let opponent_filter = TargetFilter::Typed(TypedFilter::default().controller(ControllerRef::Opponent)); - let opp_targets = find_legal_targets(&state, &opponent_filter, PlayerId(0), ObjectId(99)); + let opp_targets = find_legal_targets(&three, &opponent_filter, PlayerId(0), ObjectId(99)); + assert!( + opp_targets.contains(&TargetRef::Player(PlayerId(2))), + "reach-guard: the LIVING opponent must match 'target opponent', or the \ + exclusion below is vacuous — got {opp_targets:?}" + ); assert!( !opp_targets.contains(&TargetRef::Player(PlayerId(1))), "eliminated opponent must not match 'target opponent'" diff --git a/crates/engine/tests/integration/loop_shortcut_offer_writer_census.rs b/crates/engine/tests/integration/loop_shortcut_offer_writer_census.rs index d14e52cc07..7804e3ee63 100644 --- a/crates/engine/tests/integration/loop_shortcut_offer_writer_census.rs +++ b/crates/engine/tests/integration/loop_shortcut_offer_writer_census.rs @@ -9,7 +9,7 @@ //! number written into a plan cannot fire; this can. //! //! WHAT IT PINS, and why it is an INVARIANCE claim rather than a re-measurement: -//! 22 production + 12 test sites across `crates/engine/src` and +//! 22 production + 14 test sites across `crates/engine/src` and //! `crates/phase-ai/src`. A failure reads *"5d (or a successor) changed the //! offer-writer surface"*, not *"someone re-measured"*. //! @@ -119,7 +119,11 @@ fn cfg_test_scoped_lines(src: &str) -> Vec { /// is not a code surface — it writes no offer and consumes none — so counting it /// would make the tripwire fire on prose and would force the pinned number to be /// re-measured by the very commit that ships the row. Excluding comment lines -/// restores the plan's 22/12 exactly, INCLUDING its per-file production multiset. +/// restores the plan's PRODUCTION count of 22 exactly, INCLUDING its per-file +/// production multiset. (It does not restore the plan's original test-half count +/// of 12: that half has since been adjudicated to 14, twice, and the assert below +/// is the authority for the pair. Prose that repeats a number is prose that can go +/// stale — this defers to the assert rather than restating it.) fn classify(src: &str, needle: &str, file: &str) -> Vec { let scoped = cfg_test_scoped_lines(src); src.lines() From fe09bca02eb89d8433df82e55bae99db4f380d9d Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 11:16:36 -0500 Subject: [PATCH 35/62] style(engine): satisfy doc_lazy_continuation and drop a self-comparing assert MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two follow-ups on the fixes in this series, both caught by my own gate rather than left for CI. 1. `clippy::doc_lazy_continuation` at `analysis/resource.rs` — the paragraph line following the `*` bullet list in the new CR 616.1 row's doc block needed a blank `///` separator. `clippy --workspace --all-targets -D warnings` failed on it; no semantic change. 2. The CR 732.2a re-park row carried `assert_eq!(discriminant(&stalled.waiting_for), discriminant(&parked))` whose message claimed it proved "the resolution must not clear the standing prompt". It compared a value to the thing just assigned to it, so it proved nothing, and the probe's internal `work` board is not observable from outside `probe_resolution` anyway. Replaced with a comment recording what actually establishes the condition: the REVERT-PROBE. Under the struck guard that arm returns `Events` instead of `Prompted`, which can only happen when the two discriminants compared EQUAL — i.e. the resolution left the standing prompt in place, the exact masking condition the row is about. The row's assertions are unchanged; only a false claim was removed. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/analysis/resource.rs | 1 + crates/engine/src/game/resolution_prompt.rs | 15 ++++++++------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/crates/engine/src/analysis/resource.rs b/crates/engine/src/analysis/resource.rs index 555a3556b1..ef6f6c7f45 100644 --- a/crates/engine/src/analysis/resource.rs +++ b/crates/engine/src/analysis/resource.rs @@ -12529,6 +12529,7 @@ mod tests { /// * EMPTY ⇒ `false` (refuse). This is the arm the fix adds. /// * NON-EMPTY, no applicable replacement ⇒ `true` (discharge). Without it the row /// would pass against a predicate that simply returned `false` always. + /// /// `MayPrompt ⇒ false` is asserted alongside so all three arms of the match are pinned. /// /// REVERT-PROBE (run, recorded): delete the `if events.is_empty() { return false; }` diff --git a/crates/engine/src/game/resolution_prompt.rs b/crates/engine/src/game/resolution_prompt.rs index bfc0c770f3..a8a84d7119 100644 --- a/crates/engine/src/game/resolution_prompt.rs +++ b/crates/engine/src/game/resolution_prompt.rs @@ -999,13 +999,14 @@ mod tests { // NEGATIVE — same ability, same board, a prompt already standing. let mut stalled = base.clone(); stalled.waiting_for = parked.clone(); - assert_eq!( - std::mem::discriminant(&stalled.waiting_for), - std::mem::discriminant(&parked), - "{name}: the resolution must not clear the standing prompt, or the \ - discriminants would differ and the struck guard would have caught it too \ - — which would make this row prove nothing about the new conjunct" - ); + // WHAT ESTABLISHES THE SAME-DISCRIMINANT CONDITION: the REVERT-PROBE, not an + // assertion here. Comparing `stalled.waiting_for` against `parked` at this + // point would compare a value to itself and prove nothing, and the probe's + // internal `work` board is not observable from outside `probe_resolution`. + // The probe supplies it empirically instead — under the struck guard this arm + // returns `Events` rather than `Prompted`, which can only happen when the two + // discriminants compared EQUAL, i.e. the resolution left the standing prompt + // in place. That is exactly the masking condition this row is about. assert!( matches!( probe_resolution(&stalled, &a, &mut budget()), From 9e7d81f4199a14464a9e96ba9ec6db6711716bbf Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 11:42:06 -0500 Subject: [PATCH 36/62] test(engine): re-pin the F4 bounded-offer rows to the post-gate candidate set MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The bounded-`UntilLethal` gate from the previous commit changes what the generator emits at the real F4 offer, and two §5 U6 rows pinned the pre-gate answer. They are this PR's own rows (added in 59afd02b0, "pin the bounded-offer behaviour it actually has"), so what they pinned was the behaviour the maintainer's Medium 5 identifies as wrong; re-pinning them is the discriminating test for that fix, not an accommodation to it. U6 (i) `..._is_untillethal_and_decline_only` => `..._is_decline_only`. Measured: `legal_actions` at the F4 offer is now `[DeclineShortcut]` alone. Both declare candidates are excluded, each by a different conjunct — `UntilLethal` by `!schema.is_bounded()` (new), `Fixed(max_iterations)` by `schema.points.is_empty()` (F4 publishes one point) — so the row carries one REVERT-PROBE per exclusion. A single probe would leave the other exclusion holding the assertion up and report a false pass. Both were RUN: * drop `!schema.is_bounded()` => `[DeclareShortcut { UntilLethal, None }, DeclineShortcut]` vs `[DeclineShortcut]` => FLIPPED, rc=101; * drop `schema.points.is_empty() &&` => `[DeclareShortcut { Fixed(35), None }, DeclineShortcut]` vs `[DeclineShortcut]` => FLIPPED, rc=101. Both restored byte-identical (`cmp`), and the F4 suite is 11/11 green with both gates in place. The row's third reach-guard claimed `predicted_winner == None` supplied REACHABILITY for `phase_ai::policies::loop_shortcut`'s `(None, UntilLethal)` reject arm. That claim is now FALSE — the generator can no longer put that pair in front of the policy from a bounded offer — so it is restated as a measured property of the board, with the policy's own row named as the arm's coverage. Leaving it as written would have been a false claim in a test. U6 (ii) `u6_the_ais_only_declare_candidate_is_refused_...` => `u6_no_declaration_the_generator_can_emit_opens_the_window_...`. The AI has no declare candidate at this node any more, so the old name and its doc table row ("the AI's own candidate") overclaimed. Its four one-axis `apply()` drives are unchanged and still measure the ENGINE guard — which is exactly the fact the generator gate depends on, so they are the reason the gate is correct rather than collateral. Its `for action in legal_actions(..)` loop now iterates a single element and is therefore WEAK on its own; that is said in the comment, and an `is_empty()` positive control is added so an empty candidate set cannot satisfy it vacuously. Also stales-out an upstream comment this PR broke: `candidates.rs:3040` (from #6839) said the `LoopShortcut` arm "only ever proposes `UntilLethal`", hence no AI-declared shortcut could produce the `PayableResource::LoopCollapse` prompt. This PR's own 7d51e3555 added the `Fixed(max_iterations)` candidate, and only a `Fixed` count routes through `materialize_fixed_shortcut` — the single path that registers the stash `turns.rs:455` turns into that prompt (traced, not assumed). The prompt is AI-reachable now; the comment says so. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/ai_support/candidates.rs | 14 +-- .../fantastic_four_bounded_loop.rs | 100 +++++++++++------- 2 files changed, 70 insertions(+), 44 deletions(-) diff --git a/crates/engine/src/ai_support/candidates.rs b/crates/engine/src/ai_support/candidates.rs index 464ed23fde..de08c63af5 100644 --- a/crates/engine/src/ai_support/candidates.rs +++ b/crates/engine/src/ai_support/candidates.rs @@ -3037,12 +3037,14 @@ pub fn candidate_actions_broad_with_probe( // accepted at `Fixed(0)`). Clamp, or the generator's sole candidate is rejected by // the reducer's `amount > max` guard and the AI has no legal action at this prompt. // - // Unreachable for the AI *today* and deliberately kept correct anyway: the AI's own - // `WaitingFor::LoopShortcut` arm below only ever proposes `IterationCount:: - // UntilLethal`, which routes to `apply_until_lethal_shortcut` and never reaches - // `materialize_fixed_shortcut` — the only path that registers a stash. So no - // AI-declared shortcut currently produces this prompt; a human-declared one in a - // mixed game, or a future bounded AI offer, does. + // AI-reachable since the bounded fast-forward landed, which is what stales the older + // "the arm below only ever proposes `UntilLethal`" note this replaces: the + // `WaitingFor::LoopShortcut` arm below also proposes `Fixed(max_iterations)` against a + // bounded offer that publishes no pins, and only a `Fixed` count routes through + // `materialize_fixed_shortcut` — the single path that registers the stash `turns.rs` + // turns into this prompt. `UntilLethal` still routes to `apply_until_lethal_shortcut` + // and never gets here; it is now also not offered against a bounded offer at all. A + // human-declared shortcut in a mixed game reaches this prompt too. WaitingFor::PayAmountChoice { player, resource: PayableResource::LoopCollapse { .. }, diff --git a/crates/engine/tests/integration/fantastic_four_bounded_loop.rs b/crates/engine/tests/integration/fantastic_four_bounded_loop.rs index 17261b01bb..43fea5beed 100644 --- a/crates/engine/tests/integration/fantastic_four_bounded_loop.rs +++ b/crates/engine/tests/integration/fantastic_four_bounded_loop.rs @@ -206,7 +206,7 @@ fn offer_parts( /// point, `owner` and `count` supplied by the caller. /// /// This is the shape `handle_declare_shortcut` ACCEPTS (measured in -/// [`u6_the_ais_only_declare_candidate_is_refused_while_the_accepted_shape_is_one_it_never_emits`]), +/// [`u6_no_declaration_the_generator_can_emit_opens_the_window_while_the_accepted_shape_is_one_it_never_builds`]), /// so every row that needs either an accepted declaration or a one-axis hostile variant of one /// builds it here rather than re-deriving the mapping. Keyed off `schema.points` — never off a /// hard-coded slot — so a re-dump that renumbers objects, or a remedy that widens the announced @@ -1137,32 +1137,43 @@ fn optional_entries(state: &GameState) -> usize { // ───────────────────────────────────────────────────────────────────────────────────────── /// §5 U6 (i) — MEASURED: at the real F4 bounded offer the engine's AI candidate generator -/// emits exactly two actions, and NEITHER is a declaration the engine will accept. +/// emits exactly ONE action, `DeclineShortcut`. It offers no declaration at all. /// -/// The generator's `Fixed(max_iterations)` candidate exists precisely for bounded offers, but -/// it is gated on `schema.points.is_empty()` — it carries `template: None`, and a published pin -/// set fail-closes on that. F4 publishes one point, so the gate excludes it and the sole -/// declare candidate is the `UntilLethal` one, which -/// [`u6_the_ais_only_declare_candidate_is_refused_while_the_accepted_shape_is_one_it_never_emits`] -/// measures the engine refusing. +/// Both declare candidates are excluded, each by a different conjunct, and this board trips +/// both at once: +/// +/// * `UntilLethal` is gated on `!schema.is_bounded()`. CR 732.2a: a count-free declaration +/// names no legal repetition number against an offer that narrowed the bound, and +/// `handle_declare_shortcut` refuses it — measured in +/// [`u6_no_declaration_the_generator_can_emit_opens_the_window_while_the_accepted_shape_is_one_it_never_builds`]. +/// * `Fixed(max_iterations)` is gated on `schema.points.is_empty()` — it carries +/// `template: None`, and a published pin set fail-closes on that. F4 publishes one point. +/// +/// So the AI declines because it has nothing else it can legally say, not because it emitted a +/// declaration the engine then accepted-and-discarded. /// /// # Reach-guards (each excludes a way this could pass degenerately) /// -/// * the offer is BOUNDED (`is_bounded()`, bound narrowed below the ceiling) — on an unbounded -/// offer the `Fixed` candidate would be absent for a second, unrelated reason and the row -/// would not be measuring the `points` gate; -/// * `schema.points` is NON-empty — that is the conjunct under test; -/// * `predicted_winner` is `None`, which is the fact that routes -/// `phase_ai::policies::loop_shortcut::LoopShortcutPolicy` to its -/// `(None, UntilLethal) => reject` arm (covered there by -/// `declare_until_lethal_with_no_predicted_winner_is_rejected`). This row supplies the -/// REACHABILITY that policy row cannot: a real board that carries exactly that pair. +/// * the offer is BOUNDED (`is_bounded()`, bound narrowed below the ceiling) — that is the +/// `UntilLethal` gate's conjunct; on an unbounded offer that candidate would be PRESENT, so +/// without this guard the row could pass on a board where it was never at issue; +/// * `schema.points` is NON-empty — that is the `Fixed` gate's conjunct, and symmetrically the +/// row would otherwise pass on a board where `Fixed` was never at issue; +/// * `predicted_winner` is `None`. Recorded as a measured property of this board, NOT as +/// reachability for `phase_ai::policies::loop_shortcut::LoopShortcutPolicy`'s +/// `(None, UntilLethal) => reject` arm: since the bounded gate landed, this generator can no +/// longer put that pair in front of the policy from a bounded offer, and +/// `declare_until_lethal_with_no_predicted_winner_is_rejected` covers the arm directly. +/// +/// REVERT-PROBE — one per excluded candidate, because a single probe would leave the OTHER +/// exclusion holding the assertion up and report a false pass: /// -/// REVERT-PROBE: drop the `schema.points.is_empty() &&` conjunct from the `LoopShortcut` arm of -/// `ai_support/candidates.rs` ⇒ a third candidate (`Fixed(35)`, `template: None`) appears ⇒ -/// this row FLIPS on the exact-equality assertion. +/// * drop `!schema.is_bounded()` from the `UntilLethal` push in `ai_support/candidates.rs` +/// ⇒ `DeclareShortcut { UntilLethal, None }` reappears ⇒ this row FLIPS on the equality; +/// * drop `schema.points.is_empty() &&` from the `Fixed` push ⇒ `Fixed(max_iterations)` +/// appears ⇒ this row FLIPS on the equality. #[test] -fn u6_the_ai_candidate_set_at_the_f4_offer_is_untillethal_and_decline_only() { +fn u6_the_ai_candidate_set_at_the_f4_offer_is_decline_only() { let mut state = load_f4(); drive_f4_to_offer(&mut state, 400).expect("the bounded offer fires (see R1)"); let (proposer, _certificate, schema) = offer_parts(&state); @@ -1194,16 +1205,13 @@ fn u6_the_ai_candidate_set_at_the_f4_offer_is_untillethal_and_decline_only() { let actions = engine::ai_support::legal_actions(&state); assert_eq!( actions, - vec![ - GameAction::DeclareShortcut { - count: IterationCount::UntilLethal, - template: None, - }, - GameAction::DeclineShortcut, - ], - "MEASURED: exactly two candidates. No `Fixed` declaration (gated on \ - `schema.points.is_empty()`, and this schema publishes {} point(s)) and no declaration \ - carrying a template at all — so the AI cannot pin the point the offer DID publish", + vec![GameAction::DeclineShortcut], + "MEASURED: exactly one candidate. No `UntilLethal` declaration (gated on \ + `!schema.is_bounded()`, and this offer narrowed its bound to {}), no `Fixed` \ + declaration (gated on `schema.points.is_empty()`, and this schema publishes {} \ + point(s)), and no declaration carrying a template at all — so the AI cannot pin the \ + point the offer DID publish", + schema.max_iterations, schema.points.len() ); @@ -1243,7 +1251,7 @@ fn u6_the_ai_candidate_set_at_the_f4_offer_is_untillethal_and_decline_only() { /// /// | declaration | measured | /// |---|---| -/// | `UntilLethal` + `None` — **the AI's own candidate** | REFUSED ⇒ `Priority` | +/// | `UntilLethal` + `None` — **the shape the generator emitted before the bounded gate** | REFUSED ⇒ `Priority` | /// | `UntilLethal` + a conformant template | REFUSED ⇒ `Priority` (so the refusal is keyed on the COUNT, not on the pins) | /// | `Fixed(max)` + `None` | REFUSED ⇒ `Priority` (`template: None` against a non-empty schema fail-closes when `last_loop_action_sequence` is empty — measured empty here) | /// | `Fixed(max)` + a conformant template | **ACCEPTED** ⇒ the CR 732.2b APNAP window opens | @@ -1257,9 +1265,15 @@ fn u6_the_ai_candidate_set_at_the_f4_offer_is_untillethal_and_decline_only() { /// Closing the generator gap would therefore ride the grant mechanism, which is why U6 reports /// the gap rather than building the candidate. /// -/// REVERT-PROBES, both RUN, and the measured result CORRECTS the obvious prediction — the AI's -/// own candidate is refused by TWO INDEPENDENT guards, so disabling either alone leaves it -/// refused: +/// The `UntilLethal` rows are what justifies the generator's `!schema.is_bounded()` gate +/// ([`u6_the_ai_candidate_set_at_the_f4_offer_is_decline_only`]): the engine refuses that count +/// against a narrowed bound on a real board, so emitting it was offering the search layer an +/// action that is accepted-then-discarded. These rows keep measuring the ENGINE guard directly, +/// which is the fact the generator gate depends on and must not be allowed to rot. +/// +/// REVERT-PROBES, both RUN, and the measured result CORRECTS the obvious prediction — the +/// count-free declaration is refused by TWO INDEPENDENT guards, so disabling either alone +/// leaves it refused: /// /// * disable `IterationCount::UntilLethal if offer.schema.is_bounded()` in /// `handle_declare_shortcut` ⇒ the *`UntilLethal` + conformant template* arm flips @@ -1271,7 +1285,8 @@ fn u6_the_ai_candidate_set_at_the_f4_offer_is_untillethal_and_decline_only() { /// The row asserts both arms for exactly that reason: a single-guard probe would report the /// AI's candidate as still-refused and hide the change. #[test] -fn u6_the_ais_only_declare_candidate_is_refused_while_the_accepted_shape_is_one_it_never_emits() { +fn u6_no_declaration_the_generator_can_emit_opens_the_window_while_the_accepted_shape_is_one_it_never_builds( +) { let mut state = load_f4(); drive_f4_to_offer(&mut state, 400).expect("the bounded offer fires (see R1)"); let (proposer, _certificate, schema) = offer_parts(&state); @@ -1286,8 +1301,17 @@ fn u6_the_ais_only_declare_candidate_is_refused_while_the_accepted_shape_is_one_ state.last_loop_action_sequence.len() ); - // Every AI candidate, driven through the public boundary. - for action in engine::ai_support::legal_actions(&state) { + // Every AI candidate, driven through the public boundary. Since the bounded gate landed this + // set is `[DeclineShortcut]` alone, so on its own the loop is a WEAK statement — it is the + // four one-axis drives below that carry this row. Kept because it is the only assertion here + // that re-derives the candidate set from the generator rather than naming shapes by hand: a + // future generator change that reintroduces a declaration at this node has to survive it. + let candidates = engine::ai_support::legal_actions(&state); + assert!( + !candidates.is_empty(), + "positive control: an EMPTY candidate set would satisfy the loop below vacuously" + ); + for action in candidates { let mut probe = state.clone(); apply(&mut probe, proposer, action.clone()).expect("dispatched — refusal is a HANDBACK"); assert!( From fa6b13fb9c18e36e0c949ffc6566986a88a966d9 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 12:35:48 -0500 Subject: [PATCH 37/62] docs(engine): reattach the R10' doc block to the test it documents MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Independent review finding F1. `92cc9c625` inserted `a_prompt_standing_on_the_incoming_board_refuses_the_probe` BETWEEN the R10' doc block and the function it documented, fusing the two docs into one `///` run. Net effect: the C2 row carried twelve lines of prose describing the axis-completeness witness, and `derived_event_set_accounts_for_every_board_axis_on_all_six_allow_listed_arms` was left with no doc at all. Verified as a RESTORATION, not a rewrite: at `92cc9c625^` the block sat at `:919`-`:930` attached directly to that function at `:932`, and the block at the current tip is byte-identical to it (`cmp`, 0 differences). The commit is therefore a pure relocation of exactly twelve lines — proved by sorting the diff's added and removed lines and comparing: identical, 12 each, so no prose was reworded, dropped, or invented in the move. Doc-only, and deliberately a separate tip commit rather than an autosquash into `92cc9c625`: rewriting that commit would have invalidated the per-commit compile sweep running against this range at the time. `cargo fmt --all --check` rc=0, `cargo check -p phase-engine --all-targets` rc=0. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/game/resolution_prompt.rs | 24 ++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/crates/engine/src/game/resolution_prompt.rs b/crates/engine/src/game/resolution_prompt.rs index a8a84d7119..85a0d2481a 100644 --- a/crates/engine/src/game/resolution_prompt.rs +++ b/crates/engine/src/game/resolution_prompt.rs @@ -935,18 +935,6 @@ mod tests { ] } - /// R10′ — THE AXIS-COMPLETENESS WITNESS, over ALL SIX allow-listed arms. - /// - /// Two INDEPENDENT clone-and-resolves of the same ability on the same board: - /// ARM 1 derives the event set through the recorder; ARM 2 reads the axes - /// before/after and touches no recorder, no `ProposedEvent`, no - /// `replace_event`, no `pipeline_loop`. The two arms share - /// `resolve_ability_chain` + `GameState` — the SUBJECT under test — and - /// share NOTHING on the CHECKING side. That is the whole point: a check that - /// shares its deepest dependency with the thing checked is an identity. - /// - /// CONJUNCT 2 (the population gate) is asserted as a conjunct that FAILS the - /// test, not promised in prose: the set of arms observed must equal all six. /// CR 732.2a — a prompt already parked on the incoming board must REFUSE the probe, /// even though the resolution leaves the variant unchanged. /// @@ -1024,6 +1012,18 @@ mod tests { ); } + /// R10′ — THE AXIS-COMPLETENESS WITNESS, over ALL SIX allow-listed arms. + /// + /// Two INDEPENDENT clone-and-resolves of the same ability on the same board: + /// ARM 1 derives the event set through the recorder; ARM 2 reads the axes + /// before/after and touches no recorder, no `ProposedEvent`, no + /// `replace_event`, no `pipeline_loop`. The two arms share + /// `resolve_ability_chain` + `GameState` — the SUBJECT under test — and + /// share NOTHING on the CHECKING side. That is the whole point: a check that + /// shares its deepest dependency with the thing checked is an identity. + /// + /// CONJUNCT 2 (the population gate) is asserted as a conjunct that FAILS the + /// test, not promised in prose: the set of arms observed must equal all six. #[test] fn derived_event_set_accounts_for_every_board_axis_on_all_six_allow_listed_arms() { let state = probe_board(); From f2f76fa39fb9e91c5f6208f35a10ab58d3e2f73b Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 13:48:05 -0500 Subject: [PATCH 38/62] fix(scripts): prune stale carriers, stop overwriting canonical ones, stage atomically MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Maintainer round-2 [MED]. Both halves he named are regressions I introduced in the previous round, and probing them surfaced a THIRD defect, worse than either, in the same code I wrote. 1. STALE CARRIERS WERE COMPUTED THEN DISCARDED (his finding). The prune scoping `$sf_existing` to live stack ids was correct, but the write-back was gated on `($sf | length) > 0` — "did we derive any NEW carriers". In the exact case the prune exists for, a dump whose only change is that an entry LEFT the stack, `$sf` is empty, so the assignment was skipped and the stale key survived. Now assigns whenever the REBUILT map differs from what is on the fixture, which also covers his `{}` case. Comparing against the current map keeps it idempotent and keeps it from touching trigger-free fixtures. 2. EVERY EXISTING STACK CARRIER WAS BEING OVERWRITTEN (found while writing the probe for 1, not reported). `$sf_existing | has((.id|tostring))` reads as "is this entry already carried?", but jq evaluates a function argument against the INPUT of the pipe it sits in — here `$sf_existing`, not the stack entry. `.id` is absent there, so the argument was the literal string "null", `has` was ALWAYS false, every live entry was re-derived, and `$sf_existing + $sf` let the fresh value override the canonical marker. That silently rewrote `Delayed` to `Ordinary`: the CR 603.7a-to-CR 603.1 re-classification `trigger-firing.jq`'s own header exists to refuse. Fixed by binding `(.id|tostring) as $k` first. Swept the file for the same trap: the other three `has`/`index` sites already pass bound variables or literals. 3. THE "ATOMIC" WRITE WAS NOT ATOMIC (his finding). `mktemp -t` resolves to `$TMPDIR`; measured here, `df --output=target` gives `/tmp` for the stage file and `/home` for the checkout. `mv` is atomic only within a filesystem, so across that boundary it degrades to copy-then-unlink and an interruption truncates `$dest` — the destruction the staging exists to prevent. The commit that introduced it CLAIMED atomicity; the mechanism never delivered it. Stage files are now minted next to `$dest`. Root cause of why the self-test missed it: there were THREE copies of the staging recipe and the self-tests re-spelled it with their own `mktemp -t`, so the atomicity self-test was exercising its own copy — whose `$tmp` and destination happened to share a filesystem. A control that re-implements the thing it controls is not a control. Now one `stage_path` helper, used by the production path and both self-tests. EVIDENCE. New pre-flight arm 6 `STALE_CARRIER_PRUNED` in `stamp-fixture-firing.sh`, three sub-arms, keyed on dumps whose live carriers already exist because that is what forces `$sf` empty and reaches the gate: * departed entry + live entry => `{"9":{"Delayed":null}}` (prunes 5, keeps 9 CANONICAL) * every carrier stale => `{}` (his explicit case) * nothing stale, NEGATIVE CTRL => unchanged (also the idempotence check) REVERT-PROBE against the previous library: ALL THREE flip — `pruned={"9":"Ordinary"}` (defect 2), `all_stale={"5":"Ordinary"}` (defect 1), `unchanged={"9":"Ordinary"}` (defect 2 on a re-run). Arm 5 could not see any of this: it only exercises `pending_trigger_firing`, never `stack_trigger_firings`. CORPUS IMPACT: NONE, measured. Derivation output is byte-identical old-vs-new on all 12 committed fixtures, and the full control passes (`BYTE_IDENTICAL=true`, `PATCHED_DIFFERS=true`, `STAGE_2B_LANDED=true`, `NO_COLLATERAL=true`, needs==got on every fixture). No shipped fixture was corrupted: reaching either defect requires a departed stack entry or an existing `Delayed` stack carrier, and the corpus has neither. That is also why no fixture-based control could have caught them, and why the discriminating instrument has to be the synthetic arm. Assisted-by: ClaudeCode:claude-opus-5 --- scripts/lib/trigger-firing.jq | 26 ++++++++++++++--- scripts/migrate-dump-fixture.sh | 25 ++++++++++++++-- scripts/stamp-fixture-firing.sh | 52 +++++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+), 7 deletions(-) diff --git a/scripts/lib/trigger-firing.jq b/scripts/lib/trigger-firing.jq index 98052e31ca..917b662635 100644 --- a/scripts/lib/trigger-firing.jq +++ b/scripts/lib/trigger-firing.jq @@ -163,14 +163,32 @@ def stamp_trigger_firing: then .pending_trigger_firing = _firing($objs; .pending_trigger.source_id; .pending_trigger.description) else . end) + # Assign whenever the REBUILT map differs from what is on the fixture — not merely + # when new carriers were derived. Gating on `($sf | length) > 0` dropped the prune + # above on the floor in exactly the case the prune exists for: a fixture whose only + # change is that an entry LEFT the stack derives no new carrier, so `$sf` is empty + # and the stale key survived into the written fixture. Comparing against the current + # map keeps this idempotent (a re-run writes nothing) and keeps it from touching + # trigger-free fixtures (an absent slot and a rebuilt `{}` compare equal under + # `// {}`), while still writing `{}` when every carrier the fixture had went stale. | (([ (.stack // [])[] | select(.kind.type == "TriggeredAbility") - | select(($sf_existing | has((.id|tostring))) | not) - | {key: (.id|tostring), + # BIND THE KEY FIRST. `$sf_existing | has((.id|tostring))` looks like it asks + # "is this entry already carried?", but jq evaluates a function argument against + # the INPUT of the pipe it sits in — here `$sf_existing`, not the stack entry. + # `.id` is absent on that object, so the argument was the literal string "null", + # `has` was ALWAYS false, and every live entry was re-derived and then allowed to + # override the canonical marker through `$sf_existing + $sf`. That silently + # rewrote `Delayed` to `Ordinary` — the CR 603.7a to CR 603.1 re-classification + # this file's header exists to refuse. + | (.id|tostring) as $k + | select(($sf_existing | has($k)) | not) + | {key: $k, value: _firing($objs; .kind.data.source_id; .kind.data.description)} ] | from_entries) as $sf - | if ($sf | length) > 0 - then .stack_trigger_firings = ($sf_existing + $sf) + | ($sf_existing + $sf) as $sf_rebuilt + | if $sf_rebuilt != (.stack_trigger_firings // {}) + then .stack_trigger_firings = $sf_rebuilt else . end) | (if ($rt != null and ($rt.kind.type? // "") == "TriggeredAbility" and (.resolving_trigger_firing // null) == null) diff --git a/scripts/migrate-dump-fixture.sh b/scripts/migrate-dump-fixture.sh index dcb9cbd7f9..406b6584a1 100755 --- a/scripts/migrate-dump-fixture.sh +++ b/scripts/migrate-dump-fixture.sh @@ -167,10 +167,29 @@ transform() { # transform # truncated and a partial gzip stream written over it. The failure mode of a # fail-closed recipe was destruction of the very artifact it refused to rewrite. # `stamp-fixture-firing.sh` already had the right shape; this matches it. +# SINGLE DEFINITION of the staging rule, because the previous code had three copies of +# it and they drifted apart in the one way that mattered. +# +# The stage file MUST live in `dirname "$dest"`. `mv` is atomic only WITHIN a filesystem; +# across a boundary it degrades to copy-then-unlink, and an interruption mid-copy leaves +# `$dest` truncated — the exact destruction this staging exists to prevent. `mktemp -t` +# resolves to `$TMPDIR` (`/tmp` here, a separate mount from the checkout: measured +# `df --output=target` gives `/tmp` vs `/home`), so the previous form ADVERTISED atomicity +# it could not deliver, and elsewhere depended silently on the operator's mount layout. +# +# The self-tests below call this too. They used to re-spell the recipe with their own +# `mktemp -t`, which is why a self-test whose whole subject is atomicity could still pass +# against a non-atomic production path: it was exercising its own copy, and its `$tmp` and +# its destination happened to share a filesystem. A control that re-implements the thing +# it controls is not a control. +stage_path() { # stage_path — a stage file on $destination's OWN filesystem + mktemp "$(dirname "$1")/.migrate-dump-stage-XXXXXX.json.gz" +} + regenerate() { # regenerate local mode="$1" dest="$2" staged mkdir -p "$(dirname "$dest")" - staged="$(mktemp -t migrate-dump-stage-XXXXXX.json.gz)" + staged="$(stage_path "$dest")" if ! unzip -p "$PRISTINE" | transform "$mode" | gzip -9 -n > "$staged"; then rm -f "$staged" echo "REGENERATION FAILED (fail-closed, $dest left untouched)" >&2 @@ -209,7 +228,7 @@ selftests() { set +e # Same staged-write discipline as `regenerate`; the point is that `$tmp/dest` is # never the redirection target, so an abort cannot reach it. - ( staged="$(mktemp -t migrate-dump-stage-XXXXXX.json.gz)" + ( staged="$(stage_path "$tmp/dest")" if ! transform patched < "$tmp/in.json" | gzip -9 -n > "$staged"; then rm -f "$staged"; exit 1 fi @@ -228,7 +247,7 @@ selftests() { # (a′) POSITIVE control — a SUCCEEDING run must actually replace the destination, # or (a) would pass simply because nothing ever writes. printf '%s\n' '{"gameState":{"turn_number":7}}' > "$tmp/ok.json" - ( staged="$(mktemp -t migrate-dump-stage-XXXXXX.json.gz)" + ( staged="$(stage_path "$tmp/dest")" transform patched < "$tmp/ok.json" | gzip -9 -n > "$staged" mv "$staged" "$tmp/dest" ) >/dev/null 2>&1 if [ "$(sha256sum "$tmp/dest" | cut -d' ' -f1)" = "$sentinel" ]; then diff --git a/scripts/stamp-fixture-firing.sh b/scripts/stamp-fixture-firing.sh index 03ffff4062..c2cecfbee9 100755 --- a/scripts/stamp-fixture-firing.sh +++ b/scripts/stamp-fixture-firing.sh @@ -144,8 +144,60 @@ carrier_preservation_control() { return 1 } +# arm 6 — PRE-FLIGHT: a carrier whose stack entry has LEFT is pruned from what gets +# written, and the pruned map actually reaches the fixture. +# +# This arm exists because the prune shipped BROKEN in the previous round. The scoping to +# live ids was computed correctly into `$sf_existing`, but the write-back was gated on +# `($sf | length) > 0` — "did we derive any NEW carriers" — so in the one case the prune +# is FOR, a dump whose only change is that an entry left the stack, `$sf` was empty, the +# assignment was skipped, and the stale key survived into the written fixture. The prune +# was computed and then discarded. +# +# Every sub-arm below is keyed on a dump whose live carriers ALREADY exist, because that +# is what forces `$sf` empty and reaches the gate. Arm 1's key-blind comparison cannot +# see this and arm 5 does not construct a departed entry, which is how it got through. +stale_carrier_control() { + local run pruned emptied untouched + run() { # run — stamp it, print the resulting stack_trigger_firings + printf '%s' "$1" \ + | jq -c -f <(printf '%s\n%s\n' "$(cat "$LIB")" \ + 'stamp_trigger_firing | (.gameState.stack_trigger_firings // null)') \ + 2>/dev/null || echo FAILED + } + local objs='"objects":{"7":{"base_trigger_definitions":[{"description":"D"}]}}' + local live='"stack":[{"id":9,"kind":{"type":"TriggeredAbility","data":{"source_id":7,"description":"D"}}}]' + + # (a) THE REGRESSION ITSELF — entry 5 has left the stack, entry 9 is still on it and + # already carries a canonical marker. `$sf` is empty here, which is the gate the + # old form failed at. The stale key must be gone AND the live one must remain. + pruned="$(run "{\"gameState\":{$objs,$live, + \"stack_trigger_firings\":{\"9\":{\"Delayed\":null},\"5\":\"Ordinary\"}}}")" + # (b) EVERY carrier stale — the rebuilt map is `{}`, and `{}` must still be written. + # A prune that only ever shrinks a non-empty map would pass (a) and fail here. + emptied="$(run "{\"gameState\":{$objs,\"stack\":[], + \"stack_trigger_firings\":{\"5\":\"Ordinary\"}}}")" + # (c) NEGATIVE CONTROL — nothing stale. The map must come through UNCHANGED, or (a) + # and (b) would also be satisfied by a stamp that simply wipes the slot. This is + # also the idempotence check: a re-run of an already-correct fixture writes nothing. + untouched="$(run "{\"gameState\":{$objs,$live, + \"stack_trigger_firings\":{\"9\":{\"Delayed\":null}}}}")" + + if [ "$pruned" = '{"9":{"Delayed":null}}' ] \ + && [ "$emptied" = '{}' ] \ + && [ "$untouched" = '{"9":{"Delayed":null}}' ]; then + echo "CONTROL STALE_CARRIER_PRUNED=true pruned=$pruned all_stale=$emptied unchanged=$untouched" + return 0 + fi + echo "CONTROL STALE_CARRIER_PRUNED=false pruned=$pruned all_stale=$emptied unchanged=$untouched" >&2 + echo " expected pruned={\"9\":{\"Delayed\":null}} all_stale={} unchanged={\"9\":{\"Delayed\":null}}" >&2 + echo " a departed stack entry's carrier is being carried forward — refusing to stamp" >&2 + return 1 +} + definition_shape_control || exit 1 carrier_preservation_control || exit 1 +stale_carrier_control || exit 1 rc=0 for FIX in "$@"; do From 03ac1cdc61408299c34d88b24bd2e66b0b56f3d9 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 13:57:20 -0500 Subject: [PATCH 39/62] fix(engine): treat an `UpTo` repeat count as a resolution-time choice (CR 608.2d) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Maintainer round-2 [HIGH]. Confirmed, and the in-file evidence was already self-contradictory. `repeat_for: Option` was bound `_` in the ability-level classifier with the justification "for each count, pure quantity eval (game/quantity.rs)". But the doc comment on `quantity_offers_up_to_choice`, twenty lines above, exists precisely to distrust that mechanism: `game/quantity.rs` resolves `UpTo { max } => recurse(max)`, SILENTLY answering the CR 608.2d / CR 107.1c resolution-time count choice as the maximum, and only resolvers calling `QuantityExpr::peel_up_to` honour the flag — none of the six allow-listed classes does. So `repeat_for`'s dismissal cited the exact behaviour the guard was built around. An allow-listed repeated ability carrying an `UpTo` repeat count probed choice-free and was admitted to a loop certificate while its resolution opens a count prompt: the same fail-open class as the two Critical findings last round. Routed through the SAME `quantity_offers_up_to_choice` authority the per-effect quantity positions use (`DealDamage.amount`, `PutCounter`/`Token.count`, `Draw.count`), so a newly-added `QuantityExpr` wrapper is classified in one place rather than four. CR 608.2d and CR 107.1c both verified by grep against docs/MagicCompRules.txt (negative control `999.99z`: 0 hits). TESTS — three rows added to the classifier's mutation table, each REVERT-PROBED, all three flipped, all restored byte-identical: * `repeat_for_up_to` ⇒ MayPrompt. Probe: replace the guard with `let _ = repeat_for;` ⇒ FAILS "repeat_for_up_to is a resolution-time choice the probe must not swallow". * `optional_for` ⇒ MayPrompt — the row he named as missing. The gate is `*optional || *optional_targeting || optional_for.is_some()` and only two of the three disjuncts had a row, so the third could have been deleted from the condition with every existing row still green. A row per DISJUNCT, not per gate. Probe: drop the disjunct ⇒ FAILS. * An `UpTo` nested under `Multiply` ⇒ MayPrompt. Probe: swap the shared authority for a bespoke `matches!(q, UpTo { .. })` ⇒ FAILS, which is what earns the delegation rather than a local match. Plus a NEGATIVE reach-guard that is the half making the first row discriminating: a `repeat_for` that is NOT `UpTo` must stay `FreeUnlessReplacements`. Without it the row would pass equally against a guard that rejected EVERY `repeat_for` — a coverage loss wearing the shape of a fix, since "for each" over a fixed or state-derived count really is pure evaluation and is the common case. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/game/resolution_prompt.rs | 73 ++++++++++++++++++++- 1 file changed, 70 insertions(+), 3 deletions(-) diff --git a/crates/engine/src/game/resolution_prompt.rs b/crates/engine/src/game/resolution_prompt.rs index 85a0d2481a..4ade6c93c9 100644 --- a/crates/engine/src/game/resolution_prompt.rs +++ b/crates/engine/src/game/resolution_prompt.rs @@ -554,12 +554,12 @@ pub(crate) fn ability_resolution_choice_freedom( modal, mode_abilities, repeat_until, + repeat_for, // ---- choice-free: bound `_` with a one-line justification ---- condition: _, // resolution branch selector, pure eval (both branches recursed) duration: _, // continuous-effect lifetime, no prompt player_scope: _, // iteration fan-out, pure player-filter eval starting_with: _, // APNAP start override, no prompt - repeat_for: _, // "for each" count, pure quantity eval (game/quantity.rs) announced_x: _, // CR 601.2b announce-time count, pure quantity eval, no prompt multi_target: _, // announce-time variable-count bounds (Resolution case caught by timing) target_constraints: _, // announce-time cross-target legality, no resolution prompt @@ -625,6 +625,24 @@ pub(crate) fn ability_resolution_choice_freedom( if matches!(repeat_until, Some(RepeatContinuation::ControllerChoice)) { return ResolutionChoiceFreedom::MayPrompt; } + // CR 608.2d + CR 107.1c: an "up to N" REPEAT COUNT is a resolution-time choice + // exactly like an "up to N" damage/draw/counter count, and it is answered in the + // same silent way — `game/quantity.rs` resolves `UpTo { max } => recurse(max)`, + // taking the maximum, and none of the six allow-listed classes calls + // `QuantityExpr::peel_up_to`. This field was previously bound `_` and justified as + // "pure quantity eval (game/quantity.rs)", which cites the very mechanism + // `quantity_offers_up_to_choice`'s own doc comment exists to distrust: the count is + // READ, not prompted. An allow-listed repeated ability carrying an `UpTo` repeat + // count was therefore probed choice-free and admitted to a loop certificate while + // its resolution opens a count prompt. Guarded with the SAME single authority the + // per-effect quantity positions use, so a new `QuantityExpr` wrapper is classified + // in one place rather than three. + if repeat_for + .as_ref() + .is_some_and(quantity_offers_up_to_choice) + { + return ResolutionChoiceFreedom::MayPrompt; + } // CR 608.2c: the chain resolves the effect and, on the taken branch, a // sub_ability / else_ability effect — join both (fail-safe: reject if either @@ -668,8 +686,8 @@ mod tests { use super::*; use crate::game::zones::create_object; use crate::types::ability::{ - AbilityCost, AbilityDefinition, AbilityKind, EffectScope, ModalChoice, PtValue, - QuantityExpr, TapStateChange, TargetFilter, TargetRef, UnlessPayModifier, + AbilityCost, AbilityDefinition, AbilityKind, EffectScope, ModalChoice, OpponentMayScope, + PtValue, QuantityExpr, TapStateChange, TargetFilter, TargetRef, UnlessPayModifier, }; use crate::types::counter::CounterType; use crate::types::identifiers::{CardId, ObjectId}; @@ -1558,6 +1576,22 @@ mod tests { a.repeat_until = Some(RepeatContinuation::ControllerChoice) }); push("modal", &|a| a.modal = Some(ModalChoice::default())); + // The gate at the top of the classifier is + // `*optional || *optional_targeting || optional_for.is_some()`, and only the + // first two disjuncts had a row. A row per DISJUNCT, not per gate: with two of + // three covered, `optional_for` could have been dropped from the condition and + // every existing row would still pass. + push("optional_for", &|a| { + a.optional_for = Some(OpponentMayScope::AnyOpponent) + }); + // CR 608.2d + CR 107.1c: an `UpTo` REPEAT COUNT is a resolution-time choice. + // `repeat_for` used to be bound `_` as "pure quantity eval", so this class of + // ability was certified choice-free while its resolution opens a count prompt. + push("repeat_for_up_to", &|a| { + a.repeat_for = Some(QuantityExpr::UpTo { + max: Box::new(fixed(3)), + }) + }); for (label, a) in mutations { assert_eq!( ability_resolution_choice_freedom(&state, &a, &mut budget()), @@ -1565,6 +1599,39 @@ mod tests { "{label} is a resolution-time choice the probe must not swallow" ); } + + // REACH-GUARD for the `repeat_for` row above, and the half that makes it + // DISCRIMINATING rather than merely red-on-mutation: a `repeat_for` that is NOT + // `UpTo` must still be probe-backed. Without this arm the row would pass just as + // well against a guard that rejected EVERY `repeat_for`, which would be a + // coverage loss dressed up as a fix — "for each" loops over a fixed or + // state-derived count really are pure evaluation, and that is the common case. + let mut fixed_repeat = base.clone(); + fixed_repeat.repeat_for = Some(fixed(3)); + assert!( + matches!( + ability_resolution_choice_freedom(&state, &fixed_repeat, &mut budget()), + ResolutionChoiceFreedom::FreeUnlessReplacements(_) + ), + "a non-`UpTo` repeat count is pure evaluation and must stay probe-backed — \ + rejecting it too would trade the fail-open bug for lost certification" + ); + // And the guard must see through a WRAPPER, or "up to N, doubled" would evade it. + // This is the composability the shared `quantity_offers_up_to_choice` authority + // buys; a bespoke `matches!(.., UpTo { .. })` here would pass the row above and + // fail this one. + let mut wrapped = base.clone(); + wrapped.repeat_for = Some(QuantityExpr::Multiply { + inner: Box::new(QuantityExpr::UpTo { + max: Box::new(fixed(3)), + }), + factor: 2, + }); + assert_eq!( + ability_resolution_choice_freedom(&state, &wrapped, &mut budget()), + ResolutionChoiceFreedom::MayPrompt, + "an `UpTo` nested under an arithmetic wrapper is still a resolution-time count choice" + ); } /// STRUCTURAL INVARIANT: `game/ability_scan.rs` holds NO `GameState`. From 431f051711de01c5e06df3f8e0155832a2810033 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 14:27:28 -0500 Subject: [PATCH 40/62] perf(engine): probe a chain root once and gate before the board clone MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Maintainer round-2 [MED]. These are the two CodeRabbit comments I DECLINED last round (3699361056, 3699361067). He raised both independently; his ruling is adopted and I am not re-arguing them. My decline rested on "this moves the shipped detector's coverage", so the coverage is what I measured. CHAIN ROOT PROBED ONCE. `ability_resolution_choice_freedom` used to probe the full `ResolvedAbility` and then recurse a probe into `sub_ability` and `else_ability`, although `resolve_ability_chain` — which the root probe drives — already resolves the taken branch. A depth-N chain therefore paid N whole- `GameState` clones and re-resolved every subchain the root had already walked. Split into two phases: `chain_offers_choice` is a pure AST walk (no state, no clone, no budget) that stays exhaustive over both branches, and the probe runs once, at the root, only if the whole chain is gate-clean. Recursion retained exactly where he said to retain it — the ability-level choice gates. THE CHEAP PRECONDITION PRECEDES THE CLONE. `stack_entry_resolution_choice_freedom` cloned the whole `GameState` and bound resolution scope before the classifier could reject the entry on a pure AST gate, so entries headed for `MayPrompt` bought a full board copy to reach a verdict that never looked at the board. `chain_offers_choice` now runs first and those entries clone nothing. He offered two remedies — "the budget (or an equally cheap binding precondition)" — and I took the second, because the first BREAKS a measured invariant of this PR. `r16_the_f4_offering_beats_probe_demand_is_exactly_measured` pins `spent == conjunct6_asks`, and its own message predicts the failure: the meter's charge sits BELOW the `optional` gate, so hoisting a charge above it makes every optional ask charge twice. Measured, not reasoned: adding `try_charge_one` in that position fails R16 (`spent` exceeds `asks`). The precondition form bounds the same dominant work without moving the meter, and R16 stays green. COVERAGE DELTA, measured: NONE. Engine lib 18355 pass, integration 4422 pass, including every F4 certification row and R16's exact probe-demand equality. ONE SEMANTIC CONSEQUENCE, stated rather than buried. The old form `join`ed the branch verdicts and `join` UNIONED event sets, so the derived set included events from the branch NOT taken on the probed board. The single root probe reports only what the resolution actually proposes — a smaller and more accurate set, since the old one described a resolution that cannot happen, but a DIFFERENT set. `join` had no remaining caller and is deleted rather than kept-and-allowed: a dead combinator documenting superseded union semantics is how the next reader concludes the union still happens. TESTS. Four rows: a choice gate on `sub_ability` and on `else_ability` must each reject the whole chain, each paired with a gate-free NEGATIVE CONTROL so a `chain_offers_choice` that rejected chain SHAPE rather than CONTENT cannot pass (probe: add `|| sub_ability.is_some()` => the control FAILS). ⚠ One of these four is NOT discriminating and is labelled so in-file rather than left to imply coverage it lacks. Probing each recursion site independently: deleting the `else_ability` recursion FLIPS its row, but deleting the `sub_ability` recursion does NOT — 9 of 9 still pass, because `resolve_ability_chain` resolves the taken sub-ability and the root probe observes that prompt directly. The upstream conjunct dominates the discriminator. The `sub_ability` row is therefore a regression guard; that recursion earns its place on cost (it runs before the clone, where no probe has happened yet), not on this row. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/analysis/resource.rs | 22 +++ crates/engine/src/game/resolution_prompt.rs | 195 +++++++++++++------- 2 files changed, 153 insertions(+), 64 deletions(-) diff --git a/crates/engine/src/analysis/resource.rs b/crates/engine/src/analysis/resource.rs index ef6f6c7f45..477b075339 100644 --- a/crates/engine/src/analysis/resource.rs +++ b/crates/engine/src/analysis/resource.rs @@ -4298,6 +4298,28 @@ fn stack_entry_resolution_choice_freedom( // counterfactual being asked. The clone lands only on the probe — // `resolve_top` calls the same shared binding on its own // `&mut GameState` and pays nothing. + // CR 732.2a: THE CHEAP BINDING PRECONDITION RUNS BEFORE THE CLONE. + // + // The whole-`GameState` clone below is the dominant per-entry work, and it + // used to be paid unconditionally — including for entries the classifier was + // about to reject on a pure AST gate (`optional`, `unless_pay`, a modal + // header, an `UpTo` count, a non-allow-listed effect). Those entries bought + // a full board copy and a scope binding to reach a verdict that never looked + // at the board. + // + // `chain_offers_choice` is that verdict's AST half, so asking it here costs + // nothing and removes the clone entirely for every gated entry. + // + // DELIBERATELY NOT a `try_charge_one` in this position, which was the other + // remedy on offer: the meter's charge sits BELOW the `optional` gate by + // design, and `r16_the_f4_offering_beats_probe_demand_is_exactly_measured` + // pins `spent == conjunct6_asks` for exactly that reason — its own message + // predicts that hoisting the charge above the gate makes every optional ask + // charge twice. Measured: adding a charge here does make that row fail. The + // precondition form bounds the same dominant work without moving the meter. + if crate::game::resolution_prompt::chain_offers_choice(ability) { + return ResolutionChoiceFreedom::MayPrompt; + } let mut board = state.clone(); board.stack.retain(|e| e.id != entry.id); if !crate::game::stack::bind_resolution_scope(&mut board, entry, None) { diff --git a/crates/engine/src/game/resolution_prompt.rs b/crates/engine/src/game/resolution_prompt.rs index 4ade6c93c9..706ff39c02 100644 --- a/crates/engine/src/game/resolution_prompt.rs +++ b/crates/engine/src/game/resolution_prompt.rs @@ -45,24 +45,13 @@ pub(crate) enum ResolutionChoiceFreedom { MayPrompt, } -impl ResolutionChoiceFreedom { - /// Worst-of join for a resolution chain: `MayPrompt` dominates (a chain that - /// can prompt on either branch can prompt); two free verdicts CONCATENATE - /// their derived event sets, because the caller's obligation is per-event - /// and a chain runs both branches' events through the same pipeline. - fn join(self, other: ResolutionChoiceFreedom) -> ResolutionChoiceFreedom { - match (self, other) { - ( - ResolutionChoiceFreedom::FreeUnlessReplacements(mut a), - ResolutionChoiceFreedom::FreeUnlessReplacements(b), - ) => { - a.extend(b); - ResolutionChoiceFreedom::FreeUnlessReplacements(a) - } - _ => ResolutionChoiceFreedom::MayPrompt, - } - } -} +// A `join` combinator lived here, concatenating the event sets of a root verdict and +// the separately-probed `sub_ability` / `else_ability` verdicts. It is deleted rather +// than kept-and-allowed: with the probe running once at the chain root, there are no +// sibling verdicts left to combine, and the union it performed was the mechanism by +// which events from the NOT-taken branch entered the derived set. Keeping a dead +// combinator that documents superseded semantics is how the next reader concludes the +// union still happens. /// CR 616.1 + CR 614.1a: what ONE resolution asks of the player, observed by /// RUNNING the real resolver on a throwaway clone. Never a hand-written @@ -214,12 +203,7 @@ fn quantity_offers_up_to_choice(q: &QuantityExpr) -> bool { /// `ResolutionProbe::Prompted`, which OBSERVES the real resolver opening a real /// prompt on the real board. The arm only decides which classes are worth paying /// a clone for. -fn effect_resolution_choice_freedom( - state: &GameState, - ability: &ResolvedAbility, - e: &Effect, - budget: &mut ProbeBudget, -) -> ResolutionChoiceFreedom { +fn effect_offers_choice(e: &Effect) -> bool { match e { // ---- SCOPE FILTER. DESTRUCTURED WITHOUT `..` on every arm, exactly as // HEAD's three allow arms are, so a new field on any of them forces @@ -249,9 +233,9 @@ fn effect_resolution_choice_freedom( excess: _, } => { if quantity_offers_up_to_choice(amount) { - ResolutionChoiceFreedom::MayPrompt + true } else { - resolution_probe_verdict(state, ability, budget) + false } } Effect::PutCounter { @@ -276,9 +260,9 @@ fn effect_resolution_choice_freedom( enter_with_counters: _, } => { if quantity_offers_up_to_choice(count) { - ResolutionChoiceFreedom::MayPrompt + true } else { - resolution_probe_verdict(state, ability, budget) + false } } // HEAD's own arm shape, kept verbatim (single arm + inner `if`, no match @@ -287,9 +271,9 @@ fn effect_resolution_choice_freedom( // not prompted, inside `draw::resolve`. Effect::Draw { count, target: _ } => { if quantity_offers_up_to_choice(count) { - ResolutionChoiceFreedom::MayPrompt + true } else { - resolution_probe_verdict(state, ability, budget) + false } } // ---- everything else: fail-closed MayPrompt. HEAD's named list @@ -525,21 +509,24 @@ fn effect_resolution_choice_freedom( | Effect::RedistributeLifeTotals | Effect::ReverseTurnOrder | Effect::ChooseOneOf { .. } - | Effect::Unimplemented { .. } => ResolutionChoiceFreedom::MayPrompt, + | Effect::Unimplemented { .. } => true, } } -/// CR 608.2d + CR 732.2a: does resolving this ability (its whole chain) ever -/// enter a resolution-time player choice? The `ResolvedAbility` destructure is -/// EXHAUSTIVE with no `..` — `ability_scan::resolved_ability_axes`'s -/// classifications are deliberately NOT reused (this is a different question: -/// e.g. `optional` is read-free yet choice-bearing). A FUTURE field fails to -/// compile here until classified for the choice question. -pub(crate) fn ability_resolution_choice_freedom( - state: &GameState, - a: &ResolvedAbility, - budget: &mut ProbeBudget, -) -> ResolutionChoiceFreedom { +/// CR 608.2d + CR 732.2a: can resolving this ability's whole chain enter a +/// resolution-time player choice? +/// +/// PURE AST WALK — no `GameState`, no clone, no budget. That is what lets the +/// recursion stay exhaustive over `sub_ability` / `else_ability` while the +/// expensive probe runs exactly ONCE, at the chain root, in +/// [`ability_resolution_choice_freedom`]. +/// +/// The `ResolvedAbility` destructure is EXHAUSTIVE with no `..` — +/// `ability_scan::resolved_ability_axes`'s classifications are deliberately NOT +/// reused (this is a different question: e.g. `optional` is read-free yet +/// choice-bearing). A FUTURE field fails to compile here until classified for the +/// choice question. +pub(crate) fn chain_offers_choice(a: &ResolvedAbility) -> bool { let ResolvedAbility { // ---- choice-bearing: folded into the verdict below ---- effect, @@ -556,7 +543,7 @@ pub(crate) fn ability_resolution_choice_freedom( repeat_until, repeat_for, // ---- choice-free: bound `_` with a one-line justification ---- - condition: _, // resolution branch selector, pure eval (both branches recursed) + condition: _, // resolution branch selector, pure eval (both branches gate-checked below) duration: _, // continuous-effect lifetime, no prompt player_scope: _, // iteration fan-out, pure player-filter eval starting_with: _, // APNAP start override, no prompt @@ -599,31 +586,31 @@ pub(crate) fn ability_resolution_choice_freedom( // CR 603.5 + CR 608.2d: an optional effect / optional targeting / // opponent-may effect prompts the controller (or opponent) before execution. if *optional || *optional_targeting || optional_for.is_some() { - return ResolutionChoiceFreedom::MayPrompt; + return true; } // CR 118.12: "unless a player pays {cost}" is a resolution-time pay prompt. if unless_pay.is_some() { - return ResolutionChoiceFreedom::MayPrompt; + return true; } // CR 601.2c + CR 603.3d: a resolution-time target chooser announces targets. if target_chooser.is_some() { - return ResolutionChoiceFreedom::MayPrompt; + return true; } // CR 608.2d: resolution-timed target selection is a resolution-time choice // even though `targets` is empty on the stack. if matches!(target_choice_timing, TargetChoiceTiming::Resolution) { - return ResolutionChoiceFreedom::MayPrompt; + return true; } // CR 700.2b + CR 603.3c: a modal header / reflexive per-mode abilities open a // mode choice at resolution (conservative — rejected even when the mode is // baked). if modal.is_some() || !mode_abilities.is_empty() { - return ResolutionChoiceFreedom::MayPrompt; + return true; } // CR 608.2c + CR 107.1c: only the controller-prompted repeat variant is a // player choice; while / until-stop predicates are pure re-evaluation. if matches!(repeat_until, Some(RepeatContinuation::ControllerChoice)) { - return ResolutionChoiceFreedom::MayPrompt; + return true; } // CR 608.2d + CR 107.1c: an "up to N" REPEAT COUNT is a resolution-time choice // exactly like an "up to N" damage/draw/counter count, and it is answered in the @@ -641,24 +628,44 @@ pub(crate) fn ability_resolution_choice_freedom( .as_ref() .is_some_and(quantity_offers_up_to_choice) { - return ResolutionChoiceFreedom::MayPrompt; + return true; } - // CR 608.2c: the chain resolves the effect and, on the taken branch, a - // sub_ability / else_ability effect — join both (fail-safe: reject if either - // can prompt). - let mut acc = effect_resolution_choice_freedom(state, a, effect, budget); - if let Some(sub) = sub_ability { - acc = acc.join(ability_resolution_choice_freedom(state, sub, budget)); - } - if let Some(else_branch) = else_ability { - acc = acc.join(ability_resolution_choice_freedom( - state, - else_branch, - budget, - )); + // CR 608.2c: gate-check the whole chain — this node's effect, plus the + // sub_ability / else_ability branches. Recursion is retained HERE, where it is a + // pure AST walk costing nothing, and dropped from the probe below. + effect_offers_choice(effect) + || sub_ability.as_deref().is_some_and(chain_offers_choice) + || else_ability.as_deref().is_some_and(chain_offers_choice) +} + +/// CR 608.2d + CR 732.2a: the resolution-choice verdict for a whole ability chain. +/// +/// TWO PHASES, and the split is the point. [`chain_offers_choice`] walks the entire +/// chain as pure AST — free, so it stays exhaustive over both branches. Only if the +/// whole chain is gate-clean does the expensive half run, and then exactly once, at +/// the ROOT: `probe_resolution` drives `resolve_ability_chain`, which is the +/// production entry and already resolves the taken `sub_ability` / `else_ability` +/// branch itself. The previous shape probed the root AND recursed a probe into each +/// branch, so a chain of depth N paid N whole-`GameState` clones and re-resolved every +/// subchain the root resolution had already walked. +/// +/// ⚠ ONE MEASURABLE CONSEQUENCE, stated rather than buried. The old form `join`ed the +/// branch verdicts, and `join` UNIONS event sets, so the accumulated set included +/// events from the branch NOT taken on this board. The single root probe reports only +/// what the resolution actually proposes. That is a smaller, more accurate set — the +/// old one described a resolution that cannot happen — but it IS a different set, so +/// any change in certification is a real delta and is reported with the change rather +/// than absorbed silently. +pub(crate) fn ability_resolution_choice_freedom( + state: &GameState, + a: &ResolvedAbility, + budget: &mut ProbeBudget, +) -> ResolutionChoiceFreedom { + if chain_offers_choice(a) { + return ResolutionChoiceFreedom::MayPrompt; } - acc + resolution_probe_verdict(state, a, budget) } /// The RECORDER-FREE half of the completeness witness (R10′). @@ -1632,6 +1639,66 @@ mod tests { ResolutionChoiceFreedom::MayPrompt, "an `UpTo` nested under an arithmetic wrapper is still a resolution-time count choice" ); + + // ── THE RECURSION IS RETAINED FOR GATES, which is the premise that lets the + // probe run once at the chain ROOT. + // + // ⚠ MEASURED ASYMMETRY between the two branch sites, recorded because the + // obvious reading of these two rows is WRONG. Each recursion site was + // revert-probed independently: + // + // * deleting the `else_ability` recursion FLIPS its row. The else branch is + // not the branch this board resolves, so the root probe never executes it + // and the AST walk is the ONLY thing that can see a gate there. + // * deleting the `sub_ability` recursion does NOT flip its row — measured, + // 9 of 9 still pass. `resolve_ability_chain` resolves the TAKEN + // sub-ability, so the root probe observes that prompt directly and the + // upstream conjunct dominates the discriminator. + // + // So the `sub_ability` row is a REGRESSION GUARD, not a proof of that + // recursion, and says so rather than implying coverage it does not carry. + // That recursion still earns its place on COST — `analysis::resource` calls + // `chain_offers_choice` before cloning the board, where no probe has run yet + // — but the soundness there rests on the probe, not on this row. + for (label, attach) in [ + ( + "sub_ability", + (&|a: &mut ResolvedAbility, branch: ResolvedAbility| { + a.sub_ability = Some(Box::new(branch)) + }) as &dyn Fn(&mut ResolvedAbility, ResolvedAbility), + ), + ("else_ability", &|a, branch| { + a.else_ability = Some(Box::new(branch)) + }), + ] { + let mut branch = base.clone(); + branch.optional = true; // a gate that only the recursion can see + let mut with_branch = base.clone(); + attach(&mut with_branch, branch); + assert_eq!( + ability_resolution_choice_freedom(&state, &with_branch, &mut budget()), + ResolutionChoiceFreedom::MayPrompt, + "a choice gate on `{label}` must reject the whole chain — the root probe \ + cannot see it, so the AST recursion is the only thing that can" + ); + + // NEGATIVE CONTROL for the pair above: the identical chain SHAPE with a + // gate-free branch must still certify. Without it, a `chain_offers_choice` + // that rejected any ability merely for HAVING a branch would pass both rows + // and silently stop certifying every chained ability in the corpus. + let mut clean_branch = base.clone(); + clean_branch.optional = false; + let mut with_clean = base.clone(); + attach(&mut with_clean, clean_branch); + assert!( + matches!( + ability_resolution_choice_freedom(&state, &with_clean, &mut budget()), + ResolutionChoiceFreedom::FreeUnlessReplacements(_) + ), + "a gate-free `{label}` branch must remain probe-backed, or the recursion \ + is rejecting chain SHAPE rather than chain CONTENT" + ); + } } /// STRUCTURAL INVARIANT: `game/ability_scan.rs` holds NO `GameState`. From eb6a29b0e0791d4dbcd496ebdbdd15bf6fa4e818 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 14:44:33 -0500 Subject: [PATCH 41/62] style(engine): collapse the effect classifier's bool arms `clippy::needless_bool` under `-D warnings`. Fallout from converting `effect_resolution_choice_freedom` into the pure predicate `effect_offers_choice` in the previous commit: the three `UpTo`-guarded arms mechanically became `if quantity_offers_up_to_choice(q) { true } else { false }`. Reduced to the call. No behaviour change; the arm comments that carry the CR 608.2d direction are untouched. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/game/resolution_prompt.rs | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/crates/engine/src/game/resolution_prompt.rs b/crates/engine/src/game/resolution_prompt.rs index 706ff39c02..7cf4984629 100644 --- a/crates/engine/src/game/resolution_prompt.rs +++ b/crates/engine/src/game/resolution_prompt.rs @@ -232,11 +232,7 @@ fn effect_offers_choice(e: &Effect) -> bool { damage_source: _, excess: _, } => { - if quantity_offers_up_to_choice(amount) { - true - } else { - false - } + quantity_offers_up_to_choice(amount) } Effect::PutCounter { target: _, @@ -259,22 +255,14 @@ fn effect_offers_choice(e: &Effect) -> bool { static_abilities: _, enter_with_counters: _, } => { - if quantity_offers_up_to_choice(count) { - true - } else { - false - } + quantity_offers_up_to_choice(count) } // HEAD's own arm shape, kept verbatim (single arm + inner `if`, no match // guard). CR 608.2d: an "up to N" draw is a resolution-time COUNT choice // the probe would ANSWER rather than surface, because the count is read, // not prompted, inside `draw::resolve`. Effect::Draw { count, target: _ } => { - if quantity_offers_up_to_choice(count) { - true - } else { - false - } + quantity_offers_up_to_choice(count) } // ---- everything else: fail-closed MayPrompt. HEAD's named list // VERBATIM, minus the three variants promoted above From 78d328fd4f524406e46dd814bc9057e2994dee6f Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 15:09:59 -0500 Subject: [PATCH 42/62] fix(engine,scripts): gate the sibling clone site, make the atomicity control able to fail MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Independent review findings F1-F3. F1 — THE MAINTAINER'S OWN MED SHAPE WAS STILL ALIVE AT A SIBLING SITE. `optional_cleared_classification` cloned the whole `GameState` and bound resolution scope before its AST gate, exactly as `stack_entry_resolution_choice_freedom` did. A `may` trigger whose ability is rejected on a pure gate (non-allow-listed effect, `UpTo` count, modal header) bought a full board copy per RING FRAME to reach a verdict that never looks at the board. Previous commit's headline — "the cheap precondition precedes the clone" — was true of one site and grep-refutable at this one; it is now true of both. EQUIVALENCE RE-VERIFIED HERE rather than taken from the review. Hoisting changes exactly one case: an entry whose scope would have failed to bind AND whose chain is gated now returns `Some(MayPrompt)` where it returned `None`. Grepped every `.residual` read in the file — there is exactly one (plus one comment), in `optional_relief_for`, and it opens `match cached.residual.as_ref()?` with a `MayPrompt => None` arm. So `None` and `Some(MayPrompt)` are indistinguishable downstream. Engine lib 18355 pass, integration 4422 pass including R16 and the F4 certification rows. F2 — THE ATOMICITY CONTROL COULD NOT FAIL ON ITS OWN SUBJECT, for a SECOND reason beyond the three-copies one the previous commit named. Arms (a)/(a') exercise the failure and success paths, but their destination lives under `mktemp -d -t`; with `stage_path` reverted to `mktemp -t`, stage and destination land on the SAME filesystem (measured: both device 50 on this machine) and the `mv` is atomic by accident of where the test put its own files. Both arms stayed green against the exact defect they guard. New arm (a0) `STAGE_BESIDE_DEST` compares DIRECTORIES, not devices, and the distinction is the whole point: device equality is the property that makes `mv` atomic, but it does not discriminate here, because under a `-t` revert the stage lands in `/tmp` while the test's destination is a SUBDIRECTORY of `/tmp` — same device, check passes, defect survives. Same-directory is strictly stronger. REVERT-PROBE run: with `stage_path` reverted the arm reports `STAGE_BESIDE_DEST=false — stage /tmp vs dest /tmp/migrate-dump-selftest-EmjJdH` and the script exits 1; restored byte-identical, arm green. F3 — the branch-recursion loop shared one assertion message across both labels, claiming "the root probe cannot see it" for `sub_ability` too, which contradicts the measured asymmetry recorded ten lines above it. The message is now carried per label, so a failure prints the true claim for the branch that failed. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/analysis/resource.rs | 17 +++++++++++++++ crates/engine/src/game/resolution_prompt.rs | 19 ++++++++++------ scripts/migrate-dump-fixture.sh | 24 ++++++++++++++++++++- 3 files changed, 53 insertions(+), 7 deletions(-) diff --git a/crates/engine/src/analysis/resource.rs b/crates/engine/src/analysis/resource.rs index 477b075339..78785bbda5 100644 --- a/crates/engine/src/analysis/resource.rs +++ b/crates/engine/src/analysis/resource.rs @@ -1689,6 +1689,23 @@ fn optional_cleared_classification( }; let mut without_may_gate = (**ability).clone(); without_may_gate.optional = false; + // CR 732.2a: the same cheap-precondition-before-the-clone rule the primary + // classifier follows. This is the SIBLING site, and it had the identical shape: + // `frame.clone()` is a whole `GameState` copy, and a `may` trigger whose ability is + // rejected on a pure AST gate (a non-allow-listed effect, an `UpTo` count, a modal + // header) used to buy that copy plus a scope binding to reach a verdict that never + // looks at the board — once per ring frame. + // + // EQUIVALENCE, verified rather than assumed. Hoisting changes exactly one case: + // an entry whose scope would have FAILED to bind AND whose chain is gated now + // returns `Some(MayPrompt)` where it previously returned `None`. `residual` has + // exactly one reader (`optional_relief_for`), and it opens + // `match cached.residual.as_ref()?` with a `MayPrompt => None` arm — so `None` and + // `Some(MayPrompt)` produce the identical downstream result. Re-derived here by + // grepping every `.residual` read in this file: one, plus one comment. + if crate::game::resolution_prompt::chain_offers_choice(&without_may_gate) { + return Some(crate::game::resolution_prompt::ResolutionChoiceFreedom::MayPrompt); + } let mut board = frame.clone(); board.stack.retain(|e| e.id != entry.id); if !crate::game::stack::bind_resolution_scope(&mut board, entry, None) { diff --git a/crates/engine/src/game/resolution_prompt.rs b/crates/engine/src/game/resolution_prompt.rs index 7cf4984629..af05b5c8ff 100644 --- a/crates/engine/src/game/resolution_prompt.rs +++ b/crates/engine/src/game/resolution_prompt.rs @@ -1648,16 +1648,24 @@ mod tests { // That recursion still earns its place on COST — `analysis::resource` calls // `chain_offers_choice` before cloning the board, where no probe has run yet // — but the soundness there rests on the probe, not on this row. - for (label, attach) in [ + for (label, attach, why) in [ ( "sub_ability", (&|a: &mut ResolvedAbility, branch: ResolvedAbility| { a.sub_ability = Some(Box::new(branch)) }) as &dyn Fn(&mut ResolvedAbility, ResolvedAbility), + // REGRESSION GUARD ONLY — measured non-discriminating for the recursion: + // the root probe resolves the taken sub-ability and sees this prompt itself. + "the root probe also sees this one, so this row guards against regression \ + rather than proving the recursion", + ), + ( + "else_ability", + &|a, branch| a.else_ability = Some(Box::new(branch)), + // The discriminating half: this branch is never resolved on this board. + "the root probe never resolves this branch, so the AST recursion is the \ + ONLY thing that can see it", ), - ("else_ability", &|a, branch| { - a.else_ability = Some(Box::new(branch)) - }), ] { let mut branch = base.clone(); branch.optional = true; // a gate that only the recursion can see @@ -1666,8 +1674,7 @@ mod tests { assert_eq!( ability_resolution_choice_freedom(&state, &with_branch, &mut budget()), ResolutionChoiceFreedom::MayPrompt, - "a choice gate on `{label}` must reject the whole chain — the root probe \ - cannot see it, so the AST recursion is the only thing that can" + "a choice gate on `{label}` must reject the whole chain ({why})" ); // NEGATIVE CONTROL for the pair above: the identical chain SHAPE with a diff --git a/scripts/migrate-dump-fixture.sh b/scripts/migrate-dump-fixture.sh index 406b6584a1..eabf8911a7 100755 --- a/scripts/migrate-dump-fixture.sh +++ b/scripts/migrate-dump-fixture.sh @@ -214,9 +214,31 @@ regenerate() { # regenerate # Each has a paired POSITIVE control, or it would pass against a transform that did # nothing at all. selftests() { - local tmp sentinel out rc + local tmp sentinel out rc probe_stage tmp="$(mktemp -d -t migrate-dump-selftest-XXXXXX)" + # (a0) THE MECHANISM ITSELF: the stage file must be minted in the destination's OWN + # directory. Arms (a)/(a') below exercise the failure and success PATHS, and they pass + # under a non-atomic staging just as happily — their destination lives under + # `mktemp -d -t`, so a `stage_path` reverted to `mktemp -t` puts stage and destination + # on the same filesystem (measured: both device 50 here) and the `mv` is atomic BY + # ACCIDENT of where the test put its own files. That is a second, independent reason + # the original control could not fail on its subject, beyond the three-copies one: + # even one shared recipe would have been checked on a layout that cannot expose it. + # + # Compares DIRECTORIES, not devices. Device equality is the property that makes `mv` + # atomic, but it does NOT discriminate here: under a `-t` revert the stage lands in + # `/tmp` and this test's destination lives in a SUBDIRECTORY of `/tmp`, so the two + # still share a device and the check would pass. Same-directory is strictly stronger + # and is what actually flips. + probe_stage="$(stage_path "$tmp/dest")" + if [ "$(dirname "$probe_stage")" != "$(dirname "$tmp/dest")" ]; then + echo "SELFTEST STAGE_BESIDE_DEST=false — stage $(dirname "$probe_stage") vs dest $(dirname "$tmp/dest")" >&2 + echo " a cross-directory stage makes \`mv\` non-atomic whenever the two differ in filesystem" >&2 + rm -f "$probe_stage"; rm -rf "$tmp"; return 1 + fi + rm -f "$probe_stage" + # (a) FAILURE leaves the destination untouched. # `stamp_delayed_allocators` aborts by name on a dump with install roots it cannot # collapse, which is the real abort shape, reached through the real recipe. From afca4eed50f2c66e124dd8df2cf2d166e4464cb4 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 15:35:09 -0500 Subject: [PATCH 43/62] fix(engine): correct the ChoosePermanent CR citation and complete the attribution assert MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two items from the 17:49Z CodeRabbit pass, neither previously triaged. CR citation. `Effect::ChoosePermanent` cited CR 707.2c, which governs when a copy effect from a static ability fixes its copiable values — nothing to do with resolution-time choices. The rule that applies is CR 707.6: an object entering as a copy of a permanent does not inherit the original's choices, and its controller makes the "as [this] enters" choices anew. That fresh choice is what raises `WaitingFor::CopyTargetChoice`. Verified by grep against docs/MagicCompRules.txt in both directions; negative control 999.99z returns 0. Attribution. `probe_resolution`'s `waiting_for` refusal has two legs — the board is not at `Priority`, OR the discriminants differ — and the row's attribution asserted only the second while claiming the whole arm. Both are now asserted, with per-leg messages. Measured before claiming: deleting the accounting arm flips the row red with the new assert AND without it, so the row was never vacuous. The divergence the second leg would catch is not expressible on this fixture — parking the board at a non-priority `waiting_for` changes what the chain proposes, dropping the sub-ability's Tap, so the row dies at its own reach-guard first. Recorded in the comment as a completeness guard rather than a bug fix. Also notes why `QuantityExpr::Power`'s `base` needs no `UpTo` recursion: it is an i32, not a boxed expression, so the asymmetry with Difference/Sum/Max is structural rather than an omission. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/game/resolution_prompt.rs | 32 ++++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/crates/engine/src/game/resolution_prompt.rs b/crates/engine/src/game/resolution_prompt.rs index af05b5c8ff..4be3c26823 100644 --- a/crates/engine/src/game/resolution_prompt.rs +++ b/crates/engine/src/game/resolution_prompt.rs @@ -182,6 +182,9 @@ fn quantity_offers_up_to_choice(q: &QuantityExpr) -> bool { | QuantityExpr::Offset { inner, .. } | QuantityExpr::ClampMin { inner, .. } | QuantityExpr::Multiply { inner, .. } => quantity_offers_up_to_choice(inner), + // `base` is an `i32`, not a `Box` (see `types/ability.rs`), so it + // is structurally incapable of carrying an `UpTo` and needs no recursion. Stated + // because the asymmetry with `Difference`/`Sum`/`Max` reads like an omission. QuantityExpr::Power { exponent, base: _ } => quantity_offers_up_to_choice(exponent), QuantityExpr::Difference { left, right } => { quantity_offers_up_to_choice(left) || quantity_offers_up_to_choice(right) @@ -340,9 +343,11 @@ fn effect_offers_choice(e: &Effect) -> bool { | Effect::HideawayConceal { .. } | Effect::CopyTokenBlockingAttacker { .. } | Effect::BecomeCopy { .. } - // CR 707.2c: raises `WaitingFor::CopyTargetChoice` — prompts, fail-closed - // MayPrompt (never resolved through the normal chain, but classified here - // to keep the match exhaustive). + // CR 707.6: an object entering as a copy of a permanent does NOT inherit the + // original's choices — its controller makes the "as [this] enters" choices + // anew. That fresh choice is what raises `WaitingFor::CopyTargetChoice`, so + // this is a fail-closed MayPrompt (never resolved through the normal chain, + // but classified here to keep the match exhaustive). | Effect::ChoosePermanent { .. } | Effect::GainActivatedAbilitiesOfTarget { .. } | Effect::ChooseCard { .. } @@ -1289,10 +1294,29 @@ mod tests { let mut work = state.clone(); let mut ev = Vec::new(); let _ = effects::resolve_ability_chain(&mut work, &chained, &mut ev, 0); + // The production guard has TWO legs (`!matches!(.., Priority)` OR the + // discriminants differ), and the attribution claim above names the whole + // arm rather than one leg of it, so both legs are asserted. + // + // COMPLETENESS GUARD, NOT A LIVE FIX — stated from measurement so it is not + // oversold. Deleting the accounting arm flips this row red WITH the leg + // assert and WITHOUT it, so the row was never vacuous as it stood. The + // divergence the second leg would catch (probe board at a non-priority + // `waiting_for` whose variant still matches `state`'s) is not expressible on + // this fixture: parking the board at `ReplacementChoice` changes what the + // chain proposes — the sub-ability's `Tap` stops being derived — so the row + // dies at its own reach-guard before any arm attribution is reached. This + // assert buys future-drift coverage, not a currently-reachable bug. + assert!( + matches!(work.waiting_for, WaitingFor::Priority { .. }), + "attribution (i): the non-priority leg of the waiting_for arm must NOT \ + be what fires here" + ); assert_eq!( std::mem::discriminant(&work.waiting_for), std::mem::discriminant(&state.waiting_for), - "attribution (i): the waiting_for arm must NOT be what fires here" + "attribution (i): the discriminant leg of the waiting_for arm must NOT \ + be what fires here" ); }); assert!( From b7b2b82c595593a7a779ea2735b21447594de083 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 17:55:04 -0500 Subject: [PATCH 44/62] fix(scripts): accept gameState-less envelopes and make the stage-2b arm discriminating MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three review findings on the fixture tooling, each with a revert-probe. Stamper refused valid envelopes. `trigger-firing.jq` gates both `stamp_trigger_firing` and `stamp_delayed_allocators` on a present `.gameState` and passes other envelopes through untouched, but the shell read `.gameState.next_delayed_trigger_token` unconditionally: null becomes 0 via `// 0`, `< 1` is true, and the script demanded a repair the jq will never perform. Every fixture without `gameState` therefore had NEED=0 but ALLOC_NEED=1, skipped the skip, and failed arm 3 — this general-purpose script refused an unchanged, valid fixture. ALLOC_NEED now returns 0 for those, and arm 3 reports `n/a` rather than `false` since it has nothing to certify. Probe: a gameState-less envelope skips (rc=0, SKIP by name); with the guard reverted the run is REFUSED at rc=1 with alloc_need=1 alloc={"tok":null,"inst":null}. The new `non_gamestate_control` drives the REAL loop through a child invocation and asserts the SKIP fired BY NAME — rc=0 alone would also hold for a loop that silently stamped nothing, which is different behaviour wearing the same exit code. Stage-2b arm was vacuous. It asserted only that the PATCHED regeneration carried allocators >= 1, so any pristine dump already at >= 1 reported STAGE_2B_LANDED=true while the stage changed nothing — the same vacuity arm 2 was already corrected for. It now compares the stage-2b observable (carrier count + both allocators) against the UNPATCHED regeneration and skips loudly as `n/a` when they agree, because a control that cannot tell "the stage landed" from "it was already there" certifies nothing. Probe: against a pristine already carrying {"c":0,"t":7,"i":4} the fixed arm reports n/a; the pre-fix form reports true. Stage files leaked. A signal during unzip|transform|gzip, or a failed `mv`, stranded a .migrate-dump-stage-* file — and stage files live beside their destination, which on the production path is the tracked fixtures directory. Now reaped by a trap on EXIT/INT/TERM. Probe: SIGTERM mid-pipeline leaves 0 debris with the trap and 1 without. Two earlier probe designs measured nothing and were discarded rather than reported — forcing an `mv` failure aborts at the destination sha256sum before anything is staged, and a small dump closes the window too fast to hit. The probe uses a ~32MB incompressible pristine and signals on stage-file appearance. Corpus re-verified on temp copies: 12 fixtures, rc=0, all four pre-flight controls green, tracked fixtures untouched. Assisted-by: ClaudeCode:claude-opus-5 --- scripts/migrate-dump-fixture.sh | 36 +++++++++++++++++++++-- scripts/stamp-fixture-firing.sh | 52 ++++++++++++++++++++++++++++----- 2 files changed, 79 insertions(+), 9 deletions(-) diff --git a/scripts/migrate-dump-fixture.sh b/scripts/migrate-dump-fixture.sh index eabf8911a7..454c1b669f 100755 --- a/scripts/migrate-dump-fixture.sh +++ b/scripts/migrate-dump-fixture.sh @@ -186,16 +186,32 @@ stage_path() { # stage_path — a stage file on $destination's O mktemp "$(dirname "$1")/.migrate-dump-stage-XXXXXX.json.gz" } +# Stage files live BESIDE their destination (stage_path, for mv atomicity), and on the +# production path that directory is the tracked `crates/engine/tests/fixtures/`. A signal +# during the unzip|transform|gzip pipeline, or a failed `mv`, would otherwise strand a +# `.migrate-dump-stage-XXXXXX.json.gz` inside version control. The trap covers what the +# explicit `rm -f` cannot: death before the next statement runs. +STAGE_FILES="" +cleanup_stage_files() { + [ -n "$STAGE_FILES" ] || return 0 + # shellcheck disable=SC2086 # deliberate word-splitting over the staged-path list + rm -f $STAGE_FILES + STAGE_FILES="" +} +trap cleanup_stage_files EXIT INT TERM + regenerate() { # regenerate local mode="$1" dest="$2" staged mkdir -p "$(dirname "$dest")" staged="$(stage_path "$dest")" + STAGE_FILES="$STAGE_FILES $staged" if ! unzip -p "$PRISTINE" | transform "$mode" | gzip -9 -n > "$staged"; then rm -f "$staged" echo "REGENERATION FAILED (fail-closed, $dest left untouched)" >&2 return 1 fi - mv "$staged" "$dest" + # A failed `mv` leaves `$staged` in place; the trap reaps it on exit. + mv "$staged" "$dest" || return 1 } # PRE-FLIGHT SELF-TESTS for the two properties that no corpus fixture can witness, @@ -368,6 +384,18 @@ if [ "$CONTROL_MODE" -eq 1 ]; then # ARM 3 — stage 2b landed: the firing carriers and the allocators are present and # canonical in the patched regeneration. This is what actually distinguishes patched # from unpatched on a no-prompt dump, and arm 2 above deliberately no longer claims it. + # + # MUST COMPARE AGAINST THE UNPATCHED REGENERATION. Asserting only that the patched + # side is canonical is vacuous on any pristine dump that ALREADY carries allocators + # >= 1 and its carriers: the arm would report `true` while stage 2b changed nothing. + # That is the same vacuity arm 2 was corrected for — a control that cannot tell "the + # stage landed" from "it was already there" certifies nothing. When the two sides + # agree, this arm SKIPS LOUDLY as `n/a` rather than claiming a landing it cannot see. + alloc_sig() { # alloc_sig — the stage-2b observable: carrier count + allocators + gzip -dc "$1" | jq -c -f <(printf '%s\n{c: trigger_carrier_count, t: (.gameState.next_delayed_trigger_token // 0), i: (.gameState.next_delayed_trigger_instance // 0)}\n' "$(cat "$FIRING_LIB")") + } + STAGE2B_P="$(alloc_sig "$PATCHED")" + STAGE2B_U="$(alloc_sig "$UNPATCHED")" if [ "$(gzip -dc "$PATCHED" | jq -c 'if (.gameState // null) == null then "n/a" elif (((.gameState.next_delayed_trigger_token // 0) >= 1) and ((.gameState.next_delayed_trigger_instance // 0) >= 1)) @@ -375,7 +403,11 @@ if [ "$CONTROL_MODE" -eq 1 ]; then echo "CONTROL STAGE_2B_LANDED=false — the allocator repair did not reach the regeneration" >&2 exit 1 fi - echo "CONTROL STAGE_2B_LANDED=true carriers=$(gzip -dc "$PATCHED" | jq -c -f <(printf '%s\ntrigger_carrier_count\n' "$(cat "$FIRING_LIB")")) alloc=$(gzip -dc "$PATCHED" | jq -c '{tok:.gameState.next_delayed_trigger_token, inst:.gameState.next_delayed_trigger_instance}')" + if [ "$STAGE2B_P" = "$STAGE2B_U" ]; then + echo "CONTROL STAGE_2B_LANDED=n/a — the unpatched regeneration already carries $STAGE2B_U, so this arm cannot certify that stage 2b did anything (it is NOT evidence the stage ran)" + else + echo "CONTROL STAGE_2B_LANDED=true patched=$STAGE2B_P unpatched=$STAGE2B_U" + fi exit 0 fi diff --git a/scripts/stamp-fixture-firing.sh b/scripts/stamp-fixture-firing.sh index c2cecfbee9..617ff316ae 100755 --- a/scripts/stamp-fixture-firing.sh +++ b/scripts/stamp-fixture-firing.sh @@ -195,9 +195,38 @@ stale_carrier_control() { return 1 } +# A valid envelope with NO `gameState` must reach the main loop's SKIP path. +# `stamp_trigger_firing` / `stamp_delayed_allocators` both gate on `.gameState` and pass +# such envelopes through untouched, so the stamper must ask nothing of them. The defect +# this pins lived in the SHELL's `ALLOC_NEED` / arm-3 reads, not in the derivation, so +# this control drives the REAL loop through a child invocation — a jq-only probe would +# have stayed green while the script refused an unchanged, valid fixture. +non_gamestate_control() { + [ -z "${STAMP_SELFTEST_CHILD:-}" ] || return 0 # inside the child: do not recurse + local d out crc + d="$(mktemp -d)" || return 1 + printf '%s' '{"schemaVersion":3,"note":"a valid envelope carrying no gameState"}' \ + | gzip -9 -n > "$d/no-gamestate.json.gz" + out="$(STAMP_SELFTEST_CHILD=1 "$0" "$d/no-gamestate.json.gz" 2>&1)"; crc=$? + rm -rf "$d" + # Assert the SKIP FIRED BY NAME. `rc=0` alone is not the claim: a loop that stamped + # nothing and fell through silently would also exit 0, which is a different behaviour + # wearing the same exit code. + if [ "$crc" -eq 0 ] && printf '%s\n' "$out" | grep -q '^SKIP no-gamestate\.json\.gz'; then + echo "CONTROL NON_GAMESTATE_SKIPPED=true" + return 0 + fi + echo "CONTROL NON_GAMESTATE_SKIPPED=false rc=$crc" >&2 + printf '%s\n' "$out" | sed 's/^/ /' >&2 + echo " a gameState-less envelope must reach the SKIP path — the jq passes it through," >&2 + echo " so demanding an allocator repair here refuses an unchanged, valid fixture" >&2 + return 1 +} + definition_shape_control || exit 1 carrier_preservation_control || exit 1 stale_carrier_control || exit 1 +non_gamestate_control || exit 1 rc=0 for FIX in "$@"; do @@ -226,7 +255,13 @@ for FIX in "$@"; do # The allocator repair is a SEPARATE need from the firing carriers: a dump can # want one and not the other, so a dump with no triggered record is only truly # a no-op when its allocators are already at or above 1. - ALLOC_NEED="$(gzip -dc "$FIX" | jq -c 'if ((.gameState.next_delayed_trigger_token // 0) < 1) + # A `.gameState`-less envelope is passed through untouched by `stamp_delayed_allocators` + # (trigger-firing.jq gates on exactly this), so it NEEDS nothing. Without the guard + # `.gameState.next_delayed_trigger_token` is null, `// 0` makes it 0, `< 1` is true, and + # the script demands a repair the jq will never perform — which turned an unchanged, + # valid fixture into an arm-3 failure and made this general-purpose script refuse it. + ALLOC_NEED="$(gzip -dc "$FIX" | jq -c 'if (.gameState // null) == null then 0 + elif ((.gameState.next_delayed_trigger_token // 0) < 1) or ((.gameState.next_delayed_trigger_instance // 0) < 1) then 1 else 0 end')" ALLOC_GOT="$(gzip -dc "$TMP" | jq -c '{tok: .gameState.next_delayed_trigger_token, @@ -246,15 +281,18 @@ for FIX in "$@"; do # re-serialization alone can change bytes without stamping anything. if [ "$GOT" -eq "$NEED" ]; then ARM2=true; else ARM2=false; fi # arm 3 — the allocator repair landed. Both fields must exist and be >= 1; - # 0 is the value the engine's own coherence validator rejects. - if [ "$(gzip -dc "$TMP" | jq -c 'if ((.gameState.next_delayed_trigger_token // 0) >= 1) - and ((.gameState.next_delayed_trigger_instance // 0) >= 1) - then "true" else "false" end')" = '"true"' ] - then ARM3=true; else ARM3=false; fi + # 0 is the value the engine's own coherence validator rejects. Reports `n/a` on a + # `.gameState`-less envelope rather than `false`: there is no allocator to make + # canonical, so the arm has nothing to certify and must not read as a failure. + ARM3="$(gzip -dc "$TMP" | jq -r 'if (.gameState // null) == null then "n/a" + elif ((.gameState.next_delayed_trigger_token // 0) >= 1) + and ((.gameState.next_delayed_trigger_instance // 0) >= 1) + then "true" else "false" end')" echo "STAMP $(basename "$FIX") carriers=$SUMMARY needs=$NEED got=$GOT alloc_need=$ALLOC_NEED alloc=$ALLOC_GOT NO_COLLATERAL=$ARM1 CARRIERS_ADDED=$ARM2 ALLOCATORS_CANONICAL=$ARM3" - if [ "$ARM1" != true ] || [ "$ARM2" != true ] || [ "$ARM3" != true ]; then + # ARM3 is tri-valued (`true`/`false`/`n/a`); only an outright `false` is a failure. + if [ "$ARM1" != true ] || [ "$ARM2" != true ] || [ "$ARM3" = false ]; then echo " control arms failed for $FIX — not writing" >&2 rm -f "$TMP"; rc=1; continue fi From 2f1cd86182b279e4356a076987eb7e60f0695a06 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 17:55:18 -0500 Subject: [PATCH 45/62] chore(i18n): mark the combo detector as experimental at game start MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User-directed: the game-start options box that gates the CR 732.2a combo detector (#4603's opt-in) now reads "Combo Detector (experimental)", so players meet the feature labelled as alpha-stage with the lower performance expectations that implies. One key, `common:comboDetector.label`, which titles the options group on both entry paths — GameSetupPage.tsx:544 and the multiplayer HostSetup.tsx:532. They share the key; there is no separate string for one path, and leaving the host path unlabelled would invert the intent. Deliberately NOT labelled: the offer/response dialog titles, the off/on/interactive segment labels, the descriptive tooltip, and the infinity badge (measured: a bare glyph with no tooltip naming the feature). The label belongs where the feature is titled, once per surface, not on every string that mentions combos. English carries the requested string verbatim, lowercase. That knowingly differs from the one existing marker in settings.json ("(Experimental)", capitalised): the exact wording was specified, and an explicit instruction outranks a one-instance house style. The other six locales follow the established pattern of translating the marker, since leaving them English would break with every precedent in those files. Verified: eslint rc=0, tsc rc=0, 280 vitest files passed, all 7 locales carry a marker, and en matches the requested string exactly. No test or snapshot pinned the old text (grep positive-controlled against a known assertion in the same suite). Assisted-by: ClaudeCode:claude-opus-5 --- client/src/i18n/locales/de/common.json | 2 +- client/src/i18n/locales/en/common.json | 2 +- client/src/i18n/locales/es/common.json | 2 +- client/src/i18n/locales/fr/common.json | 2 +- client/src/i18n/locales/it/common.json | 2 +- client/src/i18n/locales/pl/common.json | 2 +- client/src/i18n/locales/pt/common.json | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/client/src/i18n/locales/de/common.json b/client/src/i18n/locales/de/common.json index 7924b92d12..cad40119d6 100644 --- a/client/src/i18n/locales/de/common.json +++ b/client/src/i18n/locales/de/common.json @@ -48,7 +48,7 @@ "updated": "aktualisiert" }, "comboDetector": { - "label": "Combo-Detektor", + "label": "Combo-Detektor (experimentell)", "title": "Unendliche Schleifen erkennen: Pflichtschleifen automatisch beenden und ∞-Ressourcen anzeigen (standardmäßig aus)", "on": "An", "off": "Aus", diff --git a/client/src/i18n/locales/en/common.json b/client/src/i18n/locales/en/common.json index 1daa7abb7f..98f2191045 100644 --- a/client/src/i18n/locales/en/common.json +++ b/client/src/i18n/locales/en/common.json @@ -48,7 +48,7 @@ "updated": "updated" }, "comboDetector": { - "label": "Combo Detector", + "label": "Combo Detector (experimental)", "title": "Detect infinite loops: end mandatory loops automatically and show ∞ resources (off by default)", "on": "On", "off": "Off", diff --git a/client/src/i18n/locales/es/common.json b/client/src/i18n/locales/es/common.json index 794faf51cf..8b744fd262 100644 --- a/client/src/i18n/locales/es/common.json +++ b/client/src/i18n/locales/es/common.json @@ -48,7 +48,7 @@ "updated": "actualizado" }, "comboDetector": { - "label": "Detector de combos", + "label": "Detector de combos (experimental)", "title": "Detectar bucles infinitos: terminar bucles obligatorios automáticamente y mostrar recursos ∞ (desactivado por defecto)", "on": "Activado", "off": "Desactivado", diff --git a/client/src/i18n/locales/fr/common.json b/client/src/i18n/locales/fr/common.json index a080ec5723..991d964506 100644 --- a/client/src/i18n/locales/fr/common.json +++ b/client/src/i18n/locales/fr/common.json @@ -48,7 +48,7 @@ "updated": "à jour" }, "comboDetector": { - "label": "Détecteur de combos", + "label": "Détecteur de combos (expérimental)", "title": "Détecter les boucles infinies : terminer automatiquement les boucles obligatoires et afficher les ressources ∞ (désactivé par défaut)", "on": "Activé", "off": "Désactivé", diff --git a/client/src/i18n/locales/it/common.json b/client/src/i18n/locales/it/common.json index 8036ba87e9..6e52f2ac6c 100644 --- a/client/src/i18n/locales/it/common.json +++ b/client/src/i18n/locales/it/common.json @@ -48,7 +48,7 @@ "updated": "aggiornato" }, "comboDetector": { - "label": "Rilevatore di combo", + "label": "Rilevatore di combo (sperimentale)", "title": "Rileva i loop infiniti: termina automaticamente i loop obbligatori e mostra le risorse ∞ (disattivato per impostazione predefinita)", "on": "Attivo", "off": "Disattivato", diff --git a/client/src/i18n/locales/pl/common.json b/client/src/i18n/locales/pl/common.json index 6cf3dd7c21..d354c638d3 100644 --- a/client/src/i18n/locales/pl/common.json +++ b/client/src/i18n/locales/pl/common.json @@ -48,7 +48,7 @@ "updated": "zaktualizowano" }, "comboDetector": { - "label": "Wykrywacz combosów", + "label": "Wykrywacz combosów (eksperymentalne)", "title": "Wykrywaj nieskończone pętle: automatycznie kończ obowiązkowe pętle i pokazuj zasoby ∞ (domyślnie wyłączone)", "on": "Wł.", "off": "Wył.", diff --git a/client/src/i18n/locales/pt/common.json b/client/src/i18n/locales/pt/common.json index 5bb44cb5b4..5a70ce9b41 100644 --- a/client/src/i18n/locales/pt/common.json +++ b/client/src/i18n/locales/pt/common.json @@ -48,7 +48,7 @@ "updated": "atualizado" }, "comboDetector": { - "label": "Detector de combos", + "label": "Detector de combos (experimental)", "title": "Detectar loops infinitos: encerrar loops obrigatórios automaticamente e mostrar recursos ∞ (desativado por padrão)", "on": "Ligado", "off": "Desligado", From 0277009d33851e554c3554597fe521d9b04b26ae Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 18:45:15 -0500 Subject: [PATCH 46/62] fix(scripts): key the stage-2b signature on stamped fields and compose the EXIT trap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two review findings on the round-3 fixes themselves. The stage-2b signature was half blind. Its carrier term used `trigger_carrier_count`, which counts the dump's NEED — pending_trigger, triggered stack entries, resolving_stack_entry — and neither transform touches those, so the term was identical on both sides by construction and contributed nothing. The comparison ran on the allocator terms alone. It now keys on the fields stage 2b actually WRITES: pending_trigger_firing, stack_trigger_firings|length, resolving_trigger_firing. Measured on a dump where only the carrier half can move (allocators already canonical at 7/4): the new signature reports LANDED=true with patched s=1 against unpatched s=0, while the OLD signature reports n/a with {"c":1,...} identical on both sides — it under-reports a real landing. With the carrier stamp disabled the new signature correctly reports n/a. The control path disarmed its own cleanup. `trap` is last-write-wins per signal, and control mode installed a bare `trap 'rm -f ...' EXIT` that replaced the cleanup_stage_files EXIT handler — on the one path that regenerates twice. INT and TERM kept their handler, which is why only the EXIT arm leaked. Now composed. Measured with `mv` forced to fail on the control-mode destinations: 0 stage files stranded with the composed trap, 1 with the bare one. A blanket `mv() { false; }` does NOT measure this — it breaks the script's own selftests, which mv into their temp destination, so the run aborts at ATOMIC_ON_FAILURE=vacuous before control mode is reached and both arms report 0. The selftest was right and the probe was too blunt; the shim now fails only for the control-mode destinations. Assisted-by: ClaudeCode:claude-opus-5 --- scripts/migrate-dump-fixture.sh | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/scripts/migrate-dump-fixture.sh b/scripts/migrate-dump-fixture.sh index 454c1b669f..2486918f7e 100755 --- a/scripts/migrate-dump-fixture.sh +++ b/scripts/migrate-dump-fixture.sh @@ -322,7 +322,12 @@ if [ "$CONTROL_MODE" -eq 1 ]; then [ -f "$OUT" ] || { echo "control mode needs an existing committed fixture at $OUT" >&2; exit 1; } PATCHED="$(mktemp -t migrate-dump-patched-XXXXXX.json.gz)" UNPATCHED="$(mktemp -t migrate-dump-unpatched-XXXXXX.json.gz)" - trap 'rm -f "$PATCHED" "$UNPATCHED"' EXIT + # COMPOSE, do not replace. `trap` is last-write-wins PER SIGNAL, so a bare + # `trap '...' EXIT` here would silently disarm the `cleanup_stage_files` EXIT handler + # installed above and leak a stage file on this path — the one path that regenerates + # twice. (INT/TERM keep their handler either way, which is what made the omission easy + # to miss: only the EXIT arm was disarmed.) + trap 'cleanup_stage_files; rm -f "$PATCHED" "$UNPATCHED"' EXIT regenerate patched "$PATCHED" regenerate unpatched "$UNPATCHED" @@ -391,8 +396,19 @@ if [ "$CONTROL_MODE" -eq 1 ]; then # That is the same vacuity arm 2 was corrected for — a control that cannot tell "the # stage landed" from "it was already there" certifies nothing. When the two sides # agree, this arm SKIPS LOUDLY as `n/a` rather than claiming a landing it cannot see. - alloc_sig() { # alloc_sig — the stage-2b observable: carrier count + allocators - gzip -dc "$1" | jq -c -f <(printf '%s\n{c: trigger_carrier_count, t: (.gameState.next_delayed_trigger_token // 0), i: (.gameState.next_delayed_trigger_instance // 0)}\n' "$(cat "$FIRING_LIB")") + # The signature must be built from the fields stage 2b WRITES, not from the ones it + # reads. `trigger_carrier_count` counts the dump's NEED (pending_trigger, triggered + # stack entries, resolving_stack_entry) — inputs neither transform touches, so it is + # identical on both sides by construction and contributes nothing to the comparison. + # Keying on the STAMPED carriers is what makes the carrier half of this arm able to + # move at all; without it a disabled `stamp_trigger_firing` still reported a landing + # via the allocator terms alone. + alloc_sig() { # alloc_sig — the stage-2b observable: stamped carriers + allocators + gzip -dc "$1" | jq -c '{p: .gameState.pending_trigger_firing, + s: (.gameState.stack_trigger_firings // {} | length), + r: .gameState.resolving_trigger_firing, + t: (.gameState.next_delayed_trigger_token // 0), + i: (.gameState.next_delayed_trigger_instance // 0)}' } STAGE2B_P="$(alloc_sig "$PATCHED")" STAGE2B_U="$(alloc_sig "$UNPATCHED")" From ea1b0ac19fb3fe393ab1acdf6d3e45397e3e3d13 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 18:51:25 -0500 Subject: [PATCH 47/62] docs(scripts): state the stage-2b arm's residual instead of overclaiming it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The comment added with the signature fix said that without it "a disabled stamp_trigger_firing still reported a landing via the allocator terms alone". That is only true for dumps whose allocators are already canonical. On the common corpus shape — allocators repaired 0 -> 1 — the arm still reports LANDED=true with the carrier stamp disabled, because the comparison is one equality over the combined signature and the allocator half alone makes the two sides differ. Measured: patched {"p":null,"s":0,"r":null,"t":1,"i":1} vs unpatched {...,"t":0,"i":0} => LANDED=true with s:0 on both sides. So the claim was grep-refutable as written. The comment now states what the fix actually bought — the carrier half is capable of moving at all, where before it was keyed to inputs no transform touches — and names the residual: a carrier-stamp regression is still masked whenever allocators move, with the printed signature's s:0 as the self-disclosure. Comment only; no behaviour change. Assisted-by: ClaudeCode:claude-opus-5 --- scripts/migrate-dump-fixture.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/scripts/migrate-dump-fixture.sh b/scripts/migrate-dump-fixture.sh index 2486918f7e..c012d416b9 100755 --- a/scripts/migrate-dump-fixture.sh +++ b/scripts/migrate-dump-fixture.sh @@ -401,8 +401,14 @@ if [ "$CONTROL_MODE" -eq 1 ]; then # stack entries, resolving_stack_entry) — inputs neither transform touches, so it is # identical on both sides by construction and contributes nothing to the comparison. # Keying on the STAMPED carriers is what makes the carrier half of this arm able to - # move at all; without it a disabled `stamp_trigger_firing` still reported a landing - # via the allocator terms alone. + # move at all. + # + # RESIDUAL, stated so the arm is not read as more than it is: the comparison is one + # equality over the COMBINED signature, so any differing term alone yields `true`. On + # the common corpus shape — allocators repaired 0 -> 1 — a carrier-stamp regression is + # still masked by the allocator half (measured: stamp disabled, allocators moving, + # arm reports LANDED=true). What the printed signature gives you is self-disclosure: + # `s:0` on both sides says the carrier half did not move, whatever the verdict. alloc_sig() { # alloc_sig — the stage-2b observable: stamped carriers + allocators gzip -dc "$1" | jq -c '{p: .gameState.pending_trigger_firing, s: (.gameState.stack_trigger_firings // {} | length), From d1a5270a47d1331dfa24db5233b543501bf22403 Mon Sep 17 00:00:00 2001 From: matthewevans Date: Sun, 2 Aug 2026 18:14:42 -0700 Subject: [PATCH 48/62] fix(PR-6886): restore loop shortcut port Restore contributor changes lost during the delayed-trigger lifecycle merge. Co-authored-by: Lindsey Gray --- crates/engine/src/analysis/resource.rs | 7055 ++++++++++++++++- crates/engine/src/game/engine.rs | 4629 ++++++++++- .../kilo_live_offer_from_real_dump.rs | 20 +- .../engine/tests/integration/loop_shortcut.rs | 4148 +++++++++- .../sprout_inalla_realistic_offer.rs | 6 +- 5 files changed, 15165 insertions(+), 693 deletions(-) diff --git a/crates/engine/src/analysis/resource.rs b/crates/engine/src/analysis/resource.rs index f53a282b5c..ae1c174b63 100644 --- a/crates/engine/src/analysis/resource.rs +++ b/crates/engine/src/analysis/resource.rs @@ -38,6 +38,322 @@ use crate::types::player::{Player, PlayerId}; use crate::types::replacements::ReplacementEvent; use crate::types::zones::Zone; +/// CR 732.2a: the metered spend the resolution probe charges against. +/// +/// A NESTED module, not a new file, and that nesting is the enforcement: Rust +/// privacy is module-scoped, so a budget defined beside its consumers could be +/// re-constructed by any same-module code and its spend would be invisible to +/// the meter. Defining it one module down lets the constructor be narrowed +/// without also narrowing it away from this module's own wrappers. +mod verdict_memo { + use std::collections::BTreeMap; + + use crate::game::engine::{CapAuthority, EntryPinSlots}; + use crate::game::resolution_prompt::ResolutionChoiceFreedom; + use crate::types::game_state::{GameState, StackEntry}; + use crate::types::identifiers::ObjectId; + use crate::types::player::PlayerId; + + /// The shipped probe cap, per classification run. + /// + /// RE-DERIVED FROM MEASUREMENT. The retired `12` was fitted to per-mint charge + /// counts (dellian 2–4 / F4 1) taken over the CURRENT STACK only, before the + /// verdict door existed. Over the door's derived `(frame, entry)` population the + /// announcement gate mints keys too, and the measured demand at the corpus's one + /// offering beat — dina `beat=19`, `ring=3 stack=10`, driven through `apply()` — + /// is **13 charges** (`asks=13`, one charge per key), i.e. `12` starved the + /// acceptance offer by exactly one. + /// + /// `26` is `2 ×` that measured demand: an offering beat may carry double the + /// observed key population (≈ a 20-entry stack at the measured 1.3 keys/entry) + /// and still certify. The ceiling is not arbitrary either — it stays far below + /// the unexempted sweep the frozen exemption exists to prevent, whose demand + /// measures **96–107** on dellian's `ring=16 stack≈176` beats, so an unexempted + /// full-stack classification still exhausts and still refuses fail-closed. + pub(crate) const PROBE_BUDGET: u32 = 26; + + /// CR 732.2a: cost is a COVERAGE knob, never a soundness knob — an + /// unaffordable probe degrades to honest-red (no certificate, no offer), + /// never to a wrong certificate and never to an unbounded stall. + /// + /// **Derive list pinned to exactly `#[derive(Debug)]`** — no `Default`, no + /// `Clone`/`Copy`. A derived constructor recompiles the construction escape + /// with `new` untouched: the derived value is a zero-cap always-denying + /// budget, which is fail-closed but meter-invisible and relief-disabling. + #[derive(Debug)] + pub(crate) struct ProbeBudget { + remaining: u32, + /// Latched by [`ProbeBudget::try_charge_one`] so an exhaustion can be + /// ATTRIBUTED rather than inferred from a zero remainder. Read in + /// production by [`PeriodVerdicts::denied`], which the metered mint + /// carries out in its `MintMeter`. + denied: bool, + } + + impl ProbeBudget { + /// MODULE-PRIVATE. Every budget is born inside this module, so the + /// container that owns the meter is the only thing that can start a + /// spend — a fresh budget compiled beside a consumer would be a spend + /// the mint's meter never sees. Re-adding a + /// `ProbeBudget::new(PROBE_BUDGET)` call in `analysis::resource` is + /// E0624, which is the closure stated as a compile fact. + fn new(cap: u32) -> Self { + Self { + remaining: cap, + denied: false, + } + } + + /// `false` ⇒ exhausted, and the exhaustion fact is latched so it can be + /// attributed rather than inferred from a zero remainder. + pub(crate) fn try_charge_one(&mut self) -> bool { + if self.remaining == 0 { + self.denied = true; + return false; + } + self.remaining -= 1; + true + } + + /// Did any charge get denied against this budget? + pub(crate) fn denied(&self) -> bool { + self.denied + } + + /// TEST-ONLY constructor. `new` is module-private so no site outside + /// this module can mint a budget whose spend would be invisible to a + /// meter; a `cfg(test)` door cannot widen that, because it does not + /// exist in a production build. + #[cfg(test)] + pub(crate) fn for_test(cap: u32) -> Self { + Self::new(cap) + } + } + + /// A frame's position in ONE container's OWN `frames` table. + /// + /// The field is private and there is no public constructor and no + /// `From`: a `FrameIx` can only be minted by + /// [`PeriodVerdicts::frame_ix`], which resolves a `&GameState` by POINTER + /// IDENTITY against the very table [`PeriodVerdicts::verdict`] indexes. No + /// index arithmetic exists anywhere on the mint path, so the + /// window-relative off-by-`idx` class is unconstructible rather than merely + /// unobserved — forging `FrameIx(3)` one module out is E0603. + #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] + pub(crate) struct FrameIx(usize); + + /// Everything ONE `(frame, entry)` pair answers, computed on first demand by + /// [`PeriodVerdicts::verdict`] and memoized for the rest of the mint. + /// + /// Every field is produced by a function whose signature takes NO published + /// slots, which is what removes the key-completeness obligation: a slot list + /// is a *window* fact and would make the memo key incomplete, so a fourth + /// field that reads one is a design error rather than an addition. + pub(crate) struct EntryVerdict { + /// THE MINT, CACHED — `entry_publishes_pin_slots(frame, entry, + /// proposer)` with the CONTAINER's bound proposer. A proposer-less + /// (`unproven`) container computes `None` for every key: nothing is + /// published when no offer binds a proposer, which is the mint's own + /// answer rather than an invented one. + pub(crate) published: Option, + /// `stack_entry_resolution_choice_freedom(frame, entry, budget)` on the + /// ability AS IT STANDS. + pub(crate) primary: ResolutionChoiceFreedom, + /// CR 603.5: the optional-cleared re-classification the relief used to + /// compute inline. `None` for an entry whose mint publishes no `may` + /// slot, and for one whose resolution scope cannot bind (CR 603.4). + pub(crate) residual: Option, + } + + /// CR 732.2a: the ONE per-mint verdict door — a TOTAL, `(FrameIx, + /// ObjectId)`-keyed, compute-on-miss memo that OWNS the probe budget. + /// + /// Totality is scoped honestly: [`PeriodVerdicts::verdict`] is total over + /// every `FrameIx` this container minted, and MINTING + /// ([`PeriodVerdicts::frame_ix`]) is the membership question — it returns + /// `Option` and every consumer treats `None` as a refusal, so a frame + /// outside the period costs a certificate, never a wrong one. + pub(crate) struct PeriodVerdicts<'a> { + /// `ring ++ [current]` — PRIVATE and not indexable, so a `FrameIx` + /// cannot be turned back into a board by the parent module. + frames: Vec<&'a GameState>, + memo: BTreeMap<(FrameIx, ObjectId), EntryVerdict>, + /// PRIVATE: the field route to a fresh spend is E0616 from the parent + /// module, and the construction route is shut by `new`'s module + /// privacy above. + budget: ProbeBudget, + /// The cap this container was born at, so `spent()` is a difference + /// rather than a second counter that could drift from the budget. + cap: u32, + /// The THIRD argument of the memoized mint, fixed at construction, so + /// the EFFECTIVE key is `(proposer, FrameIx, ObjectId)` with the first + /// component constant per container. + proposer: Option, + conjunct6_asks: u32, + conjunct6_frozen_skips: u32, + conjunct4_scans: u32, + } + + impl<'a> PeriodVerdicts<'a> { + fn build( + ring: &[&'a GameState], + current: &'a GameState, + proposer: Option, + cap: u32, + ) -> Self { + let mut frames: Vec<&'a GameState> = ring.to_vec(); + frames.push(current); + Self { + frames, + memo: BTreeMap::new(), + budget: ProbeBudget::new(cap), + cap, + proposer, + conjunct6_asks: 0, + conjunct6_frozen_skips: 0, + conjunct4_scans: 0, + } + } + + /// The default-cap constructor, bound to the mint's own proposer. + /// + /// `pub(super)` and not `pub(crate)`: every in-scope construction site + /// lives in `analysis::resource` or a descendant, while an out-of-file + /// fresh container — whose spend the mint's meter would never see — is + /// E0624. The OFFER path constructs through + /// [`PeriodVerdicts::for_period_with_cap`] instead, because + /// `verdict_memo` cannot mint the `CapAuthority` that door demands. + /// + /// Every U3 caller is a `#[cfg(test)]` site, so the plain lib target sees + /// this as dead (U1's `denied()` precedent). Its production reader is the + /// still-unwritten R22 row; keeping the gate `not(test)`-scoped means that + /// row lands with no annotation churn. + #[cfg_attr(not(test), allow(dead_code))] + pub(super) fn for_period( + ring: &[&'a GameState], + current: &'a GameState, + proposer: PlayerId, + ) -> Self { + Self::build(ring, current, Some(proposer), PROBE_BUDGET) + } + + /// The cap-parameterised twin — the ONLY budget-raise/lower channel, + /// and the reason it is safe is CAPABILITY rather than visibility: the + /// final parameter is a token whose tuple constructor is private to + /// `game::engine`, the metered seam's own module, so a fresh + /// arbitrary-cap container built anywhere else is E0603. + /// + /// `for_period` is this function at `cap = PROBE_BUDGET`; both construct + /// through the module-private `ProbeBudget::new`. + pub(crate) fn for_period_with_cap( + ring: &[&'a GameState], + current: &'a GameState, + proposer: PlayerId, + cap: u32, + _auth: CapAuthority, + ) -> Self { + Self::build(ring, current, Some(proposer), cap) + } + + /// Every other path (including the unscoped sibling): frames = + /// `[current]`, NO proposer ⇒ nothing published ⇒ no relief. That is + /// byte-identical to the pre-change unproven behaviour, where relief + /// died on `scope.pinned == None` before any mint call. + pub(super) fn unproven(current: &'a GameState) -> Self { + Self::build(&[], current, None, PROBE_BUDGET) + } + + /// THE ONLY `FrameIx` MINT. Resolves a frame to its position in + /// `self.frames` by `std::ptr::eq` — the same table `verdict` reads, so + /// the returned index is correct BY IDENTITY, not by arithmetic. + /// `rposition`, so the only conceivable duplicate (one pointer appearing + /// twice) resolves newest; a duplicate pointer is the same state, hence + /// the same verdict. + /// + /// `None` ⇒ the frame is not in this period ⇒ the CALLER refuses. That + /// is what makes "the memo's last frame IS the caller's current" + /// structural rather than a `debug_assert` compiled out of release. + pub(crate) fn frame_ix(&self, frame: &GameState) -> Option { + self.frames + .iter() + .rposition(|f| std::ptr::eq(*f, frame)) + .map(FrameIx) + } + + /// THE ONE DOOR. Computes on miss against `self.frames[f.0]` — the memo, + /// never the caller, converts `FrameIx` back to a board — charges the + /// OWNED budget, and memoizes. Total over minted keys: it returns a + /// value, never an `Option`, so there is no miss contract to get wrong. + pub(crate) fn verdict(&mut self, f: FrameIx, entry: &StackEntry) -> &EntryVerdict { + let key = (f, entry.id); + if !self.memo.contains_key(&key) { + let frame = self.frames[f.0]; + let published = self + .proposer + .and_then(|p| crate::game::engine::entry_publishes_pin_slots(frame, entry, p)); + let primary = + super::stack_entry_resolution_choice_freedom(frame, entry, &mut self.budget); + let residual = match published.as_ref().and_then(|p| p.may.as_ref()) { + Some(_) => { + super::optional_cleared_classification(frame, entry, &mut self.budget) + } + None => None, + }; + self.memo.insert( + key, + EntryVerdict { + published, + primary, + residual, + }, + ); + } + &self.memo[&key] + } + + /// Read-only: the bound proposer, for the relief-side agreement guard. + pub(crate) fn proposer(&self) -> Option { + self.proposer + } + + /// THE METER: charges taken against this container's one budget. + pub(crate) fn spent(&self) -> u32 { + self.cap - self.budget.remaining + } + + /// At least one charge was REFUSED — the exhaustion fact, attributed + /// rather than inferred from a zero remainder. + pub(crate) fn denied(&self) -> bool { + self.budget.denied() + } + + /// Item (6) loop bodies that reached the verdict door. + pub(crate) fn conjunct6_asks(&self) -> u32 { + self.conjunct6_asks + } + /// Frozen `continue`s taken in item (6) — the exemption, counted. + pub(crate) fn conjunct6_frozen_skips(&self) -> u32 { + self.conjunct6_frozen_skips + } + /// Calls of `stack_entry_reads_projected_resource` from item (4)'s + /// `.any()`, which is the only body change item (4) takes. + pub(crate) fn conjunct4_scans(&self) -> u32 { + self.conjunct4_scans + } + pub(crate) fn note_conjunct6_ask(&mut self) { + self.conjunct6_asks += 1; + } + pub(crate) fn note_conjunct6_frozen_skip(&mut self) { + self.conjunct6_frozen_skips += 1; + } + pub(crate) fn note_conjunct4_scan(&mut self) { + self.conjunct4_scans += 1; + } + } +} + +pub(crate) use verdict_memo::{FrameIx, PeriodVerdicts, ProbeBudget, PROBE_BUDGET}; + /// WUBRG + colorless, the canonical index order used by [`ResourceVector::mana`]. /// /// Matches `ManaColor::ALL` (WUBRG) with colorless appended, so index `i` of the @@ -157,28 +473,37 @@ pub enum TriggerKind { /// Compare two snapshots with [`ResourceVector::delta`] to get the per-cycle /// change; [`ResourceVector::is_net_progress`] then decides whether the cycle is /// a beneficial (CR 732.2) loop. -#[derive(Debug, Clone, Default, PartialEq, Eq)] +/// +/// `Serialize`/`Deserialize` exist because a per-cycle delta rides +/// [`PeriodicDelta`] on the `WaitingFor::LoopShortcut` / +/// `WaitingFor::RespondToShortcut` wire. Every map whose key is NOT string-like +/// needs an adaptor to get there — see [`map_key_pairs`]. +#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] pub struct ResourceVector { /// CR 106.1: floating mana by color, indexed `[W, U, B, R, G, C]` (see /// [`MANA_INDEX`]). Summed across all players' pools. **State-readable.** pub mana: [i64; 6], /// CR 119.1: per-player life total. **State-readable.** + #[serde(with = "map_key_pairs")] pub life: BTreeMap, /// CR 120.1: cumulative damage *dealt to* each player this analysis window. /// Damage is an event, not a stored total. **Event-fed** (left empty by /// `snapshot`). + #[serde(with = "map_key_pairs")] pub damage_dealt: BTreeMap, /// CR 401: per-player library size, as a signed delta-friendly count. /// Positive = larger library. Mill loops drive this negative. /// **State-readable** (absolute library size at snapshot time). + #[serde(with = "map_key_pairs")] pub library_delta: BTreeMap, /// CR 122.1 + CR 704.5c: poison counters keyed by VICTIM `PlayerId` (10 ⇒ that /// player loses). Per-victim so a multiplayer poison ∞ attributes the loss to the /// afflicted seat, not the loop's controller. **State-readable.** + #[serde(with = "map_key_pairs")] pub poison: BTreeMap, /// CR 111: tokens created this analysis window. **Event-fed.** @@ -223,6 +548,7 @@ pub struct ResourceVector { /// CR 122.1: counters by `(kind, object class)`. Includes +1/+1, loyalty, /// and poison (poison/energy are keyed under [`ObjectClass::Player`]). /// **State-readable.** + #[serde(with = "map_key_pairs")] pub counters: BTreeMap<(CounterClass, ObjectClass), i64>, /// Generic trigger/keyword-action firings by family (proliferate, magecraft, @@ -230,6 +556,104 @@ pub struct ResourceVector { pub generic_triggers: BTreeMap, } +/// Serde adaptor for every [`ResourceVector`] map whose key is not string-like: +/// [`ResourceVector::counters`] (a `(CounterClass, ObjectClass)` TUPLE key) and the four +/// [`PlayerId`]-keyed maps. Ride the wire as a pair SEQUENCE — the shape +/// `ShortcutDecisionSchema.points` already uses — so there is no map key to encode. +/// +/// Not reusing `types::game_state::tuple_key_map` (the repo's other adaptor, which +/// stringifies instead): it is monomorphic over `HashMap<(ObjectId, usize), u32>`. +/// +/// ⚠ **THE `PlayerId` MAPS ARE NOT OPTIONAL, contrary to what this doc claimed before.** +/// The struck form read "the two sibling maps need no adaptor — `PlayerId` is a newtype +/// over an integer … which `serde_json` accepts as keys". That is true of `to_string` / +/// `from_str` and of `to_value` / `from_value` in ISOLATION, which is why the direct +/// `periodic_delta_survives_the_serde_json_wire` arm passed and gave false confidence — +/// but it is FALSE on the production path, for a reason that is about the ENCLOSING type, +/// not this one: +/// +/// * `WaitingFor` is `#[serde(tag = "type", content = "data")]` (ADJACENTLY TAGGED), so +/// its payload is buffered through serde's private `Content` before being handed to the +/// variant. `Content` represents every map key as a STRING. +/// * `PlayerId` is `#[serde(transparent)]` over `u8`, so it asks for a `u8` and gets a +/// string ⇒ `invalid type: string "0", expected u8`. +/// * `PersistedGameState::deserialize` funnels EVERY persisted decode through +/// `serde_json::Value` and then `serde_json::from_value` — including the production +/// WASM restore at `crates/engine-wasm/src/lib.rs`'s `from_str::`. +/// So a saved game whose `RespondToShortcut` proposal carried a populated `per_cycle` +/// would fail to restore. +/// +/// MEASURED, all four combinations, on `serde_json` 1.0.149: bare `BTreeMap` +/// is `Ok` for `from_str`/`from_value` standalone and for `from_str` under an adjacently +/// tagged enum, and `Err("invalid type: string \"0\", expected u8")` for `from_value` under +/// one — the exact error text this repo had already recorded in +/// `tests/integration/loop_shortcut.rs`. With this adaptor all four are `Ok`. +/// +/// [`ResourceVector::generic_triggers`] deliberately keeps its bare map: `TriggerKind` is a +/// unit-variant enum, so its key is genuinely a string and it was measured `Ok` through the +/// same adjacently-tagged `from_value` path that breaks `PlayerId`. +mod map_key_pairs { + use serde::{Deserialize, Deserializer, Serialize, Serializer}; + use std::collections::BTreeMap; + + pub(super) fn serialize(map: &BTreeMap, serializer: S) -> Result + where + S: Serializer, + K: Serialize + Ord, + V: Serialize, + { + map.iter().collect::>().serialize(serializer) + } + + pub(super) fn deserialize<'de, D, K, V>(deserializer: D) -> Result, D::Error> + where + D: Deserializer<'de>, + K: Deserialize<'de> + Ord, + V: Deserialize<'de>, + { + Ok(Vec::<(K, V)>::deserialize(deserializer)? + .into_iter() + .collect()) + } +} + +/// CR 732.2a: the resource signature of ONE repetition of a certified loop — what the +/// offer publishes so a bounded drive can check that each committed cycle actually +/// conformed, and so the CR 704 count bound has a per-period magnitude to divide by. +/// +/// The `Vec` victim term (rather than a `BTreeMap` keyed by [`DecisionSlot`]) is +/// deliberate: a struct map key hits exactly the `serde_json` restriction +/// [`map_key_pairs`] exists for, and the single consumer +/// ([`ResourceVector::elimination_bounds`]) collects at its call site. +#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] +pub struct PeriodicDelta { + /// How many RETAINED RING FRAMES one repetition spans. DERIVED on both certification + /// bases — from the certifying prior's index in the ring for direct recurrence, and as + /// `k` for a signature derived by [`ring_delta_signature`]. It is NOT "1 for direct + /// recurrence": that was a hardcode until fix round 1, and it was measured wrong (the + /// `interactive_3p_subset_lethal_does_not_crown` fixture's repetition spans TWO frames, + /// a gain-life resolution then a lose-life one). + /// + /// CONSUMER: `game::engine::drive_one_shortcut_cycle` DELIMITS a committed cycle by this + /// count. It has to, for the class [`ring_delta_signature`] certifies: that basis proves + /// a periodic DELTA, not a recurring board, so the drive's board-recurrence predicates are + /// false at every settle beat and `Fixed(n)`'s `n` would otherwise be structurally inert. + /// The count is measured the same way it is minted — the engine's single + /// `record_loop_detect_sample` call site is inside `pass_priority_once_with_pipeline`, + /// which is the function the drive steps. + /// + /// Named for its unit on purpose: `game::engine::shortcut_drive_period` maps a + /// TEMPLATE to a repeat count, which is a different quantity in the same subsystem. + pub frames_per_period: u32, + /// The whole-game resource change across one repetition, measured from the very + /// frame pair that certified it. + pub delta: ResourceVector, + /// CR 704.5a: per published choice slot, the life magnitude one repetition charges + /// to whichever player that slot's pin names. EMPTY for the untargeted class, where + /// the victims are already visible in `delta.life`. + pub victim_slot: Vec<(DecisionSlot, i64)>, +} + impl ResourceVector { /// Snapshot the **state-readable** resource levels directly out of a /// `GameState`: floating mana, per-player life, per-player library size, and @@ -602,10 +1026,30 @@ impl ResourceVector { /// /// Clamped to `MAX_SHORTCUT_CYCLES`. A return of `0` means no legal repetition exists /// and the caller must not offer; callers require `N >= 1`. - // The first production consumer is the bounded offer, which lands in a later phase; the - // bound ships ahead of it so its conventions are pinned by a unit row before any producer - // depends on them. - #[allow(dead_code)] + /// CR 704.5a: the per-period life loss ONE published pin slot may charge to whichever + /// seat its declaration names — the `slot_magnitude` term + /// [`ResourceVector::elimination_bounds`] divides the headroom by. + /// + /// **MAX over seats, not SUM, and not the observed spread.** A pin is a + /// STATE-INDEPENDENT designation (CR 732.2a), so a declaration may aim *every* + /// iteration of a slot at *one* seat. Charging what the observed — unpinned — iteration + /// happened to spread around would UNDER-charge and overstate the bound, which fails + /// OPEN. Charging the sum over seats is not a loss any single seat can suffer from one + /// slot; it over-charges, which only SHRINKS the bound and is the fail-closed direction + /// this repo takes when the two disagree. + /// + /// Life GAINS contribute nothing (`(-n).max(0)`), so a proposer gaining 5 while three + /// opponents lose 1, 2 and 3 yields 3 — never 5, and never 6. + /// + /// Extracted from `game::engine::try_offer_bounded_cycle_shortcut` so the max-vs-sum + /// fork has a callable seam: `victim_slot` is empty on every trajectory that offers + /// today, so this expression's value is dropped in production and no fixture reaches + /// it. `worst_seat_life_loss_is_the_max_seat_never_the_sum` is its only discriminator. + pub(crate) fn worst_seat_life_loss(&self) -> i64 { + self.life.values().map(|&n| (-n).max(0)).max().unwrap_or(0) + } + + // The first production consumer is `game::engine::try_offer_bounded_cycle_shortcut`. pub(crate) fn elimination_bounds( &self, state: &GameState, @@ -824,6 +1268,121 @@ fn map_delta( out } +/// CR 732.2a: the per-period resource signature of the RETAINED RING, derived — the +/// second certification basis for a bounded cycle offer, and the one that consults no +/// **board** predicate (objects / zones / tap-state) at all. +/// +/// Searches `k` in `1..=(frames - 1) / 2`, smallest first, for a period whose consecutive +/// frame-deltas repeat, and certifies only a period it has observed **twice** (`2k` deltas +/// ⇒ `2k + 1` frames). `k` is an OUTPUT, never an input: no period constant exists in this +/// subsystem — `game::engine::shortcut_drive_period` derives its period from the template +/// schedule and `LOOP_DETECT_RING_CAP` merely CAPS how large a derivable `k` can be +/// (16 frames ⇒ `k <= 7`). +/// +/// Fail-closed in FOUR places. Fewer than `2k + 1` frames for every candidate `k` ⇒ `None` +/// (a period seen once is a coincidence, not a signature). A smallest repeating period whose +/// delta is the zero vector ⇒ `None`, because every multiple of it is zero too and a cycle +/// that moves no resource states no CR 704 threshold to bound. A certifying window that is +/// not TURN-POSITION invariant ⇒ `None` (the CR 703.1 conjunct below). Reading the RING only +/// — never the live `state` — keeps the compared frames homogeneous: every ring frame is a +/// `normalize_for_loop` snapshot taken at `WaitingFor::Priority{active_player}` +/// (`game::engine`'s sole `record_loop_detect_sample` call site), while the live state is not +/// normalized. It does not consult a board predicate, but it DOES require the frames it +/// compares to be homogeneous in turn position, which is what "homogeneous" above now means +/// in full. +pub(crate) fn ring_delta_signature(state: &GameState) -> Option<(u32, ResourceVector)> { + let frames = state.loop_detect_ring.len(); + // 2k + 1 with k >= 1. + if frames < 3 { + return None; + } + let snaps: Vec = state + .loop_detect_ring + .iter() + .map(|f| ResourceVector::snapshot(&f.normalized)) + .collect(); + let deltas: Vec = snaps + .windows(2) + .map(|w| ResourceVector::delta(&w[0], &w[1])) + .collect(); + for k in 1..=(frames - 1) / 2 { + // The MOST RECENT 2k deltas: a stale repeat in an older stretch of the ring says + // nothing about the period the loop is running now. + let recent = &deltas[deltas.len() - 2 * k..]; + if recent[..k] != recent[k..] { + continue; + } + let per_period = ResourceVector::delta(&snaps[frames - 1 - k], &snaps[frames - 1]); + // A cycle that moves no resource states no CR 704 threshold to bound, so it + // supplies no per-period magnitude and is refused. + // + // This is deliberately a WHOLE-SEARCH refusal, and the struck justification for + // it was WRONG. It read "smallest repeating period, so every longer one is a + // whole number of copies of this one — a zero here cannot become non-zero at a + // larger `k`". The repetition test above inspects only the most recent `2k` + // deltas, which does NOT establish that the whole ring is periodic with period + // `k`, so a larger `k'` need not be a multiple of `k` and its per-period delta + // can be non-zero. Counter-example over 8 frames (deltas `d1..d7`, oldest + // first): at `k = 1` the last two deltas are equal and zero, so this returns + // `None`; at `k' = 3` the test compares `[d1,d2,d3]` against `[d4,d5,d6]`, and + // `d5 = d6 = 0` forces `d2 = d3 = 0` while leaving `d4` unconstrained, so the + // `k' = 3` period is `d4 + d5 + d6 = d4`, which can be non-zero. + // + // The BEHAVIOUR is still the safe direction — refusing outright costs a missed + // offer, never a wrong one — so this is a comment defect, not a soundness + // defect. It is corrected rather than deleted because the false claim is the + // kind a later reader would lean on to justify widening the search while keeping + // the early return, or to replace the search with a single-`k` probe. If that + // missed class ever needs to certify, `continue` is sound here for the same + // reason the return is safe: each candidate `k` is validated independently. + if per_period == ResourceVector::default() { + return None; + } + // CR 703.1 + CR 703.3: turn-based actions "happen automatically when certain steps + // or phases begin, or when each step and phase ends", and CR 703.2 says they are + // "not controlled by any player". CR 732.2a licenses a shortcut only over "a + // sequence of game choices, for all players" — so a period whose repetition is paved + // by step/phase boundaries is not a sequence that rule can describe. A 2-player + // draw-go board is exactly periodic in `library_delta` and in an upkeep life ticker, + // and without this conjunct that turn structure certifies as a "loop". + // + // Basis A cannot make that mistake: `loop_states_equal` delegates to + // `impl PartialEq for GameState`, which compares `turn_number`, `active_player` and + // `phase`, and neither `normalize_for_loop` nor `project_out_resources` neutralizes + // any of the three — the deliberate, ratified design recorded at + // `types::game_state::WaitingFor::is_forced_cascade_window`'s doc. Basis B compares + // only resource deltas, so it escaped that discipline silently; this restores parity. + // It is NOT a new policy and NOT a claim that shortcuts may not cross turns — + // CR 732.2a says verbatim that a shortcut "may even cross multiple turns". What is + // refused is a cross-turn certification by the BOARD-BLIND basis. + // + // KNOWINGLY ACCEPTED FALSE NEGATIVE, and it is the price of reusing the shipped + // authority instead of forking a second turn-position predicate: + // `window_scope_from_cover_frames` requires `extra_phases.is_empty()` on BOTH frames + // (CR 500.8 — effects can add phases to a turn), not merely equal counts. So a + // legitimate WITHIN-turn loop running while an extra phase is queued (the + // extra-combat class) mints no basis-B offer. That is the fail-closed direction — a + // missed offer, never a wrong one. If that class ever needs to certify, widen + // `window_scope_from_cover_frames` ITSELF, where both suppressing firewall callers + // see the change too; do not add a second local test here. + let window: Vec<&GameState> = state + .loop_detect_ring + .iter() + .skip(frames - (2 * k + 1)) + .map(|f| &f.normalized) + .collect(); + if !window.windows(2).all(|w| { + window_scope_from_cover_frames(w[0], w[1], None, None) + .phase_invariant + .is_some() + }) { + return None; + } + return Some((k as u32, per_period)); + } + None +} + /// CR 732.2a vs CR 104.4b: the **complement** of the engine's strict loop /// equality (`types::game_state::loop_states_equal`). /// @@ -968,6 +1527,199 @@ pub fn board_delta(before: &GameState, after: &GameState) -> BoardDelta { BoardDelta { added, removed } } +/// CR 732.2a: WHICH certificate a window's touch is derived under. +/// +/// The frozen exemption's extrapolation limb needs BOTH a board-level premise +/// that the certified period cannot SHRINK the stack (P2) AND the Karp–Miller +/// read-surface guard that makes the fast-forward the repetition of the observed +/// period (P4). Exactly one certifying disjunct supplies both, so the exemption +/// is keyed to the DISJUNCT rather than to the basis — as a type rather than a +/// call-site convention, because a convention an executor drops compiles and is +/// fail-OPEN. +/// +/// Three variants, two of which behave identically today, and that is +/// deliberate: collapsing the equality disjunct onto [`PeriodCertification:: +/// ResourceSignatureOnly`] would make the type lie about provenance (equality +/// DOES consult a board predicate), and a mislabel is the fail-open re-entry +/// path — the obvious future "fix" for an equality pair tagged +/// `ResourceSignatureOnly` is to retag it `BoardCovered`. +/// `pub` rather than `pub(crate)` for ONE reason, named so a future reader does not +/// widen it further: it is the type of [`crate::game::engine::MintMeter`]'s +/// `certification` field, the only surface on which the certifying disjunct is +/// observable at all. It is not serialized, not a variant on any gated engine enum, +/// and no card-data export reads it. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum PeriodCertification { + /// Basis A, COVER disjunct — the pair passed + /// [`loop_states_cover_modulo_growth_pinned`]. P2: item (2)'s `stack_covers` + /// ⇒ strictly growing depth. P4: items (4)/(5) ⇒ no current-stack entry and + /// no live fire-time condition reads a still-projected axis. This is the + /// ONLY value under which `frozen_ids` is non-empty. + BoardCovered, + /// Basis A, EQUALITY disjunct — the pair passed + /// [`loop_states_equal_modulo_resources`]. P2 holds (the stack is compared + /// exactly ⇒ constant depth) but P4 does NOT: that predicate has no items + /// (4)/(5), and this crate says so in its own words — the Karp–Miller NOTE + /// above [`loop_states_cover_modulo_growth`] ("makes the SAME extrapolation + /// with NONE of these") and that predicate's own inherited-assumption + /// section. A replacement that arms mid-extrapolation is exactly the route + /// P4 forecloses, so `frozen_ids` is forced EMPTY here. The shipped + /// constant-depth 2p drain detection is unaffected: this value narrows only + /// the NEW subtraction. + BoardEqualOnly, + /// Basis B — [`ring_delta_signature`] only, which by its own doc "does not + /// consult a board predicate". Neither P2 nor P4 ⇒ `frozen_ids` is forced + /// EMPTY and the resolution gate scans every current-stack entry, exactly as + /// before this change. + ResourceSignatureOnly, +} + +/// CR 732.2a + CR 608.1: what ONE certified period actually announced, and which +/// current-stack entries the window proves it never touched. +/// +/// Derived from the retained ring window `[cert_prior .. current]` — never from +/// the offer-beat stack snapshot. Its frames and entries are the ring sample's +/// **LIVE** halves, never `normalize_for_loop()` products: normalization zeroes +/// `next_object_id` and strips trigger identity, so a normalized frame is a +/// CR 104.4b comparand and not an evaluation board. +/// +/// Fail-closed both ways: an id the window cannot prove frozen is TOUCHED +/// (scanned/refused as before), and an entry the window never shows announcing +/// is not enumerable for pins (the offer under-publishes ⇒ the choice gate +/// refuses ⇒ no offer). +#[derive(Debug)] +pub(crate) struct PeriodTouch<'a> { + /// `(carrying_frame, entry)` for every entry that ANNOUNCED inside the + /// window: present on frame `i`'s stack, absent from frame `i-1`'s (by + /// `StackEntry.id`). The carrying frame is the state the entry is evaluated + /// against — CR 603.3d announcement choices are a property of the board the + /// ability was put on the stack against. + pub(crate) announced: Vec<(&'a GameState, &'a StackEntry)>, + /// Entry ids of `current.stack` that the window proves FROZEN: the same id + /// at the same index in EVERY window frame AND in `current`. CR 608.1: only + /// the top of the stack resolves, so an entry that held its `(index, id)` + /// through the whole window neither announced nor resolved in it. + /// + /// NON-EMPTY ONLY UNDER [`PeriodCertification::BoardCovered`]: the + /// subtraction is the one fail-open half of this type, and the other two + /// certificates do not supply the premises it rests on. + pub(crate) frozen_ids: BTreeSet, +} + +/// CR 732.2a: derive one window's [`PeriodTouch`] under the certificate its +/// caller actually holds. +/// +/// `window` is `ring_live[cert_idx..]`, oldest first; the observed frame +/// sequence is `window ++ [current]`. `announced` is IDENTICAL on all three +/// certificate values — widening the announced set is the fail-CLOSED direction +/// — and only the frozen subtraction is keyed. +pub(crate) fn certified_period_touch<'a>( + window: &[&'a GameState], + current: &'a GameState, + cert: PeriodCertification, +) -> PeriodTouch<'a> { + if window.is_empty() { + // CR 608.1 + CR 732.2a: with NO window frame there is no transition to + // observe, so there is no frozen proof and no observed period; the + // honest degenerate reading is "every current entry may announce", + // which is exactly the snapshot mint this function's alias replaces. + return PeriodTouch { + announced: current.stack.iter().map(|e| (current, e)).collect(), + frozen_ids: BTreeSet::new(), + }; + } + + let mut announced: Vec<(&'a GameState, &'a StackEntry)> = Vec::new(); + let mut prev_ids: HashSet = window[0].stack.iter().map(|e| e.id).collect(); + for frame in window + .iter() + .skip(1) + .copied() + .chain(std::iter::once(current)) + { + for entry in &frame.stack { + if !prev_ids.contains(&entry.id) { + announced.push((frame, entry)); + } + } + prev_ids = frame.stack.iter().map(|e| e.id).collect(); + } + + // The fail-open subtraction, and the ONLY thing the certificate keys. Taken + // BEFORE the frozen walk, so a non-cover certificate never pays it either. + if !matches!(cert, PeriodCertification::BoardCovered) { + return PeriodTouch { + announced, + frozen_ids: BTreeSet::new(), + }; + } + + let frozen_ids = current + .stack + .iter() + .enumerate() + .filter(|(index, entry)| { + window + .iter() + .all(|frame| frame.stack.get(*index).map(|e| e.id) == Some(entry.id)) + }) + .map(|(_, entry)| entry.id) + .collect(); + PeriodTouch { + announced, + frozen_ids, + } +} + +/// CR 603.5 + CR 603.4 + CR 608.2k: re-classify ONE entry's ability with its +/// published "may" gate discharged, on the board `resolve_top` would hand the +/// resolver — this entry off the stack, resolution scope bound. +/// +/// The ONE classifier answers the counterfactual; this module never +/// re-implements the six independent reasons the classifier returns `MayPrompt` +/// for. `None` ⇒ not a triggered ability, or the resolution scope cannot bind, +/// both of which are refusals rather than relief. +fn optional_cleared_classification( + frame: &GameState, + entry: &StackEntry, + budget: &mut ProbeBudget, +) -> Option { + let StackEntryKind::TriggeredAbility { ability, .. } = &entry.kind else { + return None; + }; + let mut without_may_gate = (**ability).clone(); + without_may_gate.optional = false; + // CR 732.2a: the same cheap-precondition-before-the-clone rule the primary + // classifier follows. This is the SIBLING site, and it had the identical shape: + // `frame.clone()` is a whole `GameState` copy, and a `may` trigger whose ability is + // rejected on a pure AST gate (a non-allow-listed effect, an `UpTo` count, a modal + // header) used to buy that copy plus a scope binding to reach a verdict that never + // looks at the board — once per ring frame. + // + // EQUIVALENCE, verified rather than assumed. Hoisting changes exactly one case: + // an entry whose scope would have FAILED to bind AND whose chain is gated now + // returns `Some(MayPrompt)` where it previously returned `None`. `residual` has + // exactly one reader (`optional_relief_for`), and it opens + // `match cached.residual.as_ref()?` with a `MayPrompt => None` arm — so `None` and + // `Some(MayPrompt)` produce the identical downstream result. Re-derived here by + // grepping every `.residual` read in this file: one, plus one comment. + if crate::game::resolution_prompt::chain_offers_choice(&without_may_gate) { + return Some(crate::game::resolution_prompt::ResolutionChoiceFreedom::MayPrompt); + } + let mut board = frame.clone(); + board.stack.retain(|e| e.id != entry.id); + if !crate::game::stack::bind_resolution_scope(&mut board, entry, None) { + return None; + } + Some( + crate::game::resolution_prompt::ability_resolution_choice_freedom( + &board, + &without_may_gate, + budget, + ), + ) +} + /// CR 732.2a: the facts a CALLER has PROVED about the loop window it is asking a /// window predicate to certify. Every field is a *proof obligation discharged by the /// caller*, never a request: a caller that has proved nothing passes @@ -977,10 +1729,10 @@ pub fn board_delta(before: &GameState, after: &GameState) -> BoardDelta { /// /// The `_scoped` predicates below stay identity for [`LoopWindowScope::unproven`] /// (asserted by `scoped_wrappers_are_identity`) because every guard that reads a field -/// sits inside an `if let Some(..)` / `is_some_and`. `phase_invariant` and `sole_driver` -/// ARE now read — by the growing-class firewall's CR 510.2 / CR 506.1 and CR 117.1b -/// guards — and `cast_card_ids` by the projected firewall's CR 601.2f cost guard, so the -/// scope is no longer write-only; `pinned_slots` is the remaining unread field. +/// sits inside an `if let Some(..)` / `is_some_and`. EVERY field is now read: +/// `phase_invariant` and `sole_driver` by the growing-class firewall's CR 510.2 / CR 506.1 +/// and CR 117.1b guards, `cast_card_ids` by the projected firewall's CR 601.2f cost guard, +/// and `pinned` by [`loop_states_cover_modulo_growth_scoped`]'s CR 732.2a gates (3) and (6). #[derive(Debug, Clone, Copy)] pub(crate) struct LoopWindowScope<'a> { /// `Some(phase)` iff the caller proved both frames are equal on turn number AND @@ -993,15 +1745,40 @@ pub(crate) struct LoopWindowScope<'a> { /// activate an ability only with priority; CR 732.2c: the shortcut advances to /// the proposed ending point once every player has accepted). sole_driver: Option, - /// CR 732.2a: the per-iteration choice slots the OFFER publishes, which - /// `decision_template::predictability_gate` then FORCES the declaration to pin. - /// A slot listed here is a *specified* choice in CR 732.2a's sense, not a free one. - #[allow(dead_code)] // write-only until the phase that consumes pinned slots. - pinned_slots: &'a [DecisionSlot], + /// `Some(pins)` iff the caller proved an OFFER published exactly these per-iteration + /// choice slots. READ by [`loop_states_cover_modulo_growth_scoped`]'s gates (3)/(6). + pinned: Option>, /// CR 601.2f (cost determination reads static cost modifiers): `Some(ids)` iff the /// caller proved the EXACT set of card ids this window casts — `Some(&[])` for a /// window that provably casts nothing. `None` means NO PROOF, i.e. scan everything. cast_card_ids: Option<&'a [CardId]>, + /// CR 732.2a + CR 608.1: `Some(touch)` iff the caller proved WHICH pairs the + /// certified period announced and which current-stack entries it left + /// frozen. A Copy HANDLE, never the owned value — [`PeriodTouch`] owns a + /// `Vec` and a `BTreeSet`, so an owned field would be E0204 against this + /// struct's shipped `Copy` derive, while `Option<&T>` is `Copy` regardless + /// of `T`. `None` means NO PROOF: nothing is exempt and nothing is + /// enumerable, i.e. the pre-change width. + period: Option<&'a PeriodTouch<'a>>, +} + +/// CR 732.2a: the per-iteration choice slots ONE offer published, carried together with the +/// seat whose offer minted them. +/// +/// The proposer travels WITH the slots because the relief side re-runs the MINT's own +/// per-entry acceptance test (`game::engine::entry_publishes_pin_slots`), whose first +/// conjunct is `entry.controller == proposer` — the EXTENSION POINT's precondition (c), +/// "only the acting player's own choices are pinnable". A bare slot list cannot express +/// that conjunct, and a SECOND scope field could disagree with the first; one field +/// carrying both makes the pair unable to drift. +#[derive(Debug, Clone, Copy)] +pub(crate) struct PinnedChoices<'a> { + /// The offer's proposer. Every slot in `slots` was minted for this seat. + pub(crate) proposer: PlayerId, + /// The published slots, which `decision_template::predictability_gate` then FORCES the + /// declaration to pin. A slot listed here is a *specified* choice in CR 732.2a's sense, + /// not a free one. + pub(crate) slots: &'a [DecisionSlot], } impl LoopWindowScope<'static> { @@ -1011,8 +1788,13 @@ impl LoopWindowScope<'static> { Self { phase_invariant: None, sole_driver: None, - pinned_slots: &[], + pinned: None, cast_card_ids: None, + // DELIBERATE, and it is the whole meaning of this constructor: a + // caller that has proved nothing gets byte-identical pre-change + // behaviour. `Option<&PeriodTouch>` is const-constructible as + // `None`, so this stays a `const fn` on `LoopWindowScope<'static>`. + period: None, } } } @@ -1043,7 +1825,8 @@ impl LoopWindowScope<'static> { fn window_scope_from_cover_frames<'a>( pa: &GameState, pb: &GameState, - pinned_slots: &'a [DecisionSlot], + pinned: Option>, + period: Option<&'a PeriodTouch<'a>>, ) -> LoopWindowScope<'a> { // (p1) same turn, (p2) same step-granular phase, (p3) no pending extra phase in // either frame (CR 500.8). @@ -1073,9 +1856,134 @@ fn window_scope_from_cover_frames<'a>( LoopWindowScope { phase_invariant, sole_driver, - pinned_slots, + pinned, // 2b's axis (the PROJECTED covers), derived at its own call site. cast_card_ids: None, + // From the parameter: the SINGLE scope authority must be able to carry + // the period proof, or the cover disjunct's own caller would have to + // assemble a scope itself — which is exactly what the private fields + // exist to prevent. + period, + } +} + +/// CR 732.2a: is this stack entry's ANNOUNCEMENT-time target choice (gate (3)) already +/// SPECIFIED by a slot the offer published? +/// +/// The acceptance test is NOT re-derived here: it is the mint's own, +/// [`crate::game::engine::entry_publishes_pin_slots`], called for this one entry with the +/// pins' own proposer. That is what keeps the relief predicate from being coarser than the +/// mint predicate — controller (precondition (c)), entry kind, target shape and the +/// CR 400.7 incarnation binding are all one function, so a slot can never be *matched* +/// here on terms it was not *minted* on. +/// +/// SCOPE OF DISCHARGE. The caller's relief is a bare `continue`, so a `true` here skips +/// ALL FOUR facts [`stack_entry_has_no_ordering_input`] rejects on, while the pin answers +/// exactly one of them (the target). Three of the other three are ability facts the mint +/// itself now refuses to publish on (`multi_target` / `distribution` / +/// `target_constraints`). The fourth, `pending_trigger_entry` (CR 603.3c mid-construction), +/// is a property of THIS state rather than of the offer's schema, so it is enforced HERE — +/// the mint is documented a function of the BOARD, never of the PROMPT (it reads many +/// `GameState` fields; what it must never read is a prompt-coupled one), and +/// `pending_trigger_entry` is set exactly while a `TriggerTargetSelection` prompt is up. +/// That makes this predicate strictly NARROWER than the mint's, which +/// is the safe direction; the forbidden direction is coarser. +/// +/// Fail-closed in every branch: no published pins, a non-qualifying entry, a missing source +/// object, or a mid-construction entry ⇒ not pinned ⇒ the gate that called this keeps +/// rejecting. +/// THE BOARD IS THE PAIR'S CARRYING FRAME — the identical `&GameState` the caller +/// handed [`PeriodVerdicts::frame_ix`] to mint `f`, never a second board. That is +/// what makes the two halves agree by construction: the cached `published` is +/// `entry_publishes_pin_slots(frames[f], entry, proposer)`, so the mint half and +/// the CR 603.3c half read ONE board per key. Dropping the board (and with it the +/// CR 603.3c conjunct) would COMPILE and would be fail-OPEN, which is why it is a +/// parameter rather than something a `FrameIx` is expected to recover: +/// `PeriodVerdicts.frames` is private to `verdict_memo`. +fn entry_target_choice_is_pinned( + board: &GameState, + f: FrameIx, + entry: &StackEntry, + verdicts: &mut PeriodVerdicts<'_>, + scope: LoopWindowScope<'_>, +) -> bool { + let Some(pins) = scope.pinned else { + return false; + }; + // A container bound to one proposer can never relieve pins minted for + // another seat: the cached `published` IS the mint's answer for the + // container's own proposer, so consuming it under different pins would be + // reading a verdict minted for someone else. + if verdicts.proposer() != Some(pins.proposer) { + return false; + } + if board.pending_trigger_entry == Some(entry.id) { + return false; + } + // CR 601.2c: a may-only entry (shape (B)) publishes NO target slot, so it is not + // target-relieved here — its announcement freedom comes from + // `stack_entry_has_no_ordering_input`'s own `targets.is_empty()` arm instead. Requiring + // `Some` keeps this predicate strictly narrower than the mint, never coarser. + verdicts + .verdict(f, entry) + .published + .as_ref() + .and_then(|e| e.target.as_ref()) + .is_some_and(|target| pins.slots.contains(target)) +} + +/// CR 732.2a + CR 603.5: is this entry's RESOLUTION-time `MayPrompt` (gate (6)) fully +/// explained by an optional gate the offer published — and if so, what verdict does the +/// entry carry once that one axis is discharged? +/// +/// `Some(residual)` ⇒ relieved, and `residual` is the classification the entry would have +/// had WITHOUT its CR 603.5 gate, which the caller must go on to gate exactly like any +/// unpinned entry's (a pinned "may" says nothing about the CR 616.1 replacement surface +/// for whichever event classes the residual names). `None` ⇒ no relief. +/// +/// ATTRIBUTION is the load-bearing part. `ability_resolution_choice_freedom` returns +/// `MayPrompt` for SIX independent reasons (`game/ability_scan.rs:6534-6560` plus the +/// sub/else effect join), and the offer publishes a `MayChoice` point for exactly ONE of +/// them — `ability.optional`. So relief requires both published slots to be pinned AND the +/// same ability, re-classified with `optional` cleared, to come back choice-free: an +/// `unless_pay`, a resolution-time target chooser, a modal header, a controller-choice +/// repeat, or a CR 701.34a proliferate sub-ability keeps returning `MayPrompt` and gets no +/// relief, because no published pin specifies it. +/// It performs NO classification of its own and calls the mint not at all: both +/// the published slots and the optional-cleared residual are read through the ONE +/// door, which is what keeps the relief from being a second, drifting authority. +fn pinned_may_choice_relief( + f: FrameIx, + entry: &StackEntry, + verdicts: &mut PeriodVerdicts<'_>, + scope: LoopWindowScope<'_>, +) -> Option { + use crate::game::resolution_prompt::ResolutionChoiceFreedom; + let pins = scope.pinned?; + // Fail-closed agreement guard: relief may only consume a verdict minted for + // the seat whose offer published these pins. + if verdicts.proposer() != Some(pins.proposer) { + return None; + } + let cached = verdicts.verdict(f, entry); + let published = cached.published.as_ref()?; + let may = published.may.as_ref()?; + // Strictly the mint's own facts, never coarser (CR 603.5): the `may` slot must be + // pinned, and the target slot must be pinned WHEN THERE IS ONE. Shape (B) publishes + // `target: None` — an entry that announces no choice has none for a pin to leave + // unspecified — so demanding a pinned target there would refuse relief the mint's own + // schema fully describes. + if !pins.slots.contains(may) + || published + .target + .as_ref() + .is_some_and(|target| !pins.slots.contains(target)) + { + return None; + } + match cached.residual.as_ref()? { + ResolutionChoiceFreedom::MayPrompt => None, + residual @ ResolutionChoiceFreedom::FreeUnlessReplacements(_) => Some(residual.clone()), } } @@ -1112,7 +2020,209 @@ fn window_scope_from_cover_frames<'a>( /// choice — either intrinsically or through the life-event replacement /// environment (item 6, CR 732.2a + CR 608.2d). pub(crate) fn loop_states_cover_modulo_growth(prior: &GameState, current: &GameState) -> bool { - loop_states_cover_modulo_growth_scoped(prior, current, LoopWindowScope::unproven()) + // The zero-proof container: frames = `[current]`, no proposer ⇒ nothing published ⇒ no + // relief, which is byte-identically what an `unproven()` scope already meant. The four + // production callers of this 2-arg entry point are therefore untouched. + let mut verdicts = PeriodVerdicts::unproven(current); + loop_states_cover_modulo_growth_scoped( + prior, + current, + LoopWindowScope::unproven(), + &mut verdicts, + ) +} + +/// CR 732.2a "predictable results": is EVERY per-iteration choice this stack can open a +/// SPECIFIED one — published by the offer's pins, or absent altogether? +/// +/// The conjunct a BOUNDED offer needs, and the reason it is not +/// [`loop_states_cover_modulo_growth_scoped`]: that predicate answers whether one frame +/// COVERS another, and its item (1) additionally requires `object_resource_axes_match` +/// STRICTLY — an axis [`loop_states_equal_modulo_resources`] deliberately projects OUT. An +/// offer certified by exact recurrence would therefore be refused by an unrelated BOARD fact +/// while its choice surface was never examined. Cover is the authority for cover; this is the +/// authority for choices. +/// +/// SINGLE AUTHORITY nonetheless, shared verbatim with that predicate's gates (3) and (6) — +/// the same [`stack_entry_has_no_ordering_input`] (CR 601.2c announcement-time input, reached +/// for a triggered ability via CR 603.3d), the same +/// [`stack_entry_resolution_choice_freedom`] (CR 608.2d resolution-time prompts), the same +/// [`entry_target_choice_is_pinned`] / [`pinned_may_choice_relief`] pin relief, and the same +/// CR 616.1 [`proposed_event_prompt_cause`] environmental guard the +/// `FreeUnlessReplacements` verdict's own contract requires. Nothing is re-derived here. +/// +/// THE WIDTH IS THE CERTIFIED PERIOD'S, NOT THE OFFER-BEAT STACK'S. Both loops range over +/// `touch.announced` ∪ (`state.stack` \ `touch.frozen_ids`), each pair evaluated against its +/// own carrying frame. That is WIDER than the offer-beat stack on the announced half — the +/// majority population on both measured dumps, 157/161 (F4) and 19/23 (dellian) beats carry +/// off-stack announced pairs — and NARROWER only on the proven-frozen half. +/// +/// ⚠ THE JUSTIFICATION THIS DOC USED TO CARRY FOR SCANNING EVERY CURRENT-STACK ENTRY WAS +/// CORRECT FOR A FUNCTION WITH NO WINDOW, AND IS NOW SUPERSEDED BY ONE. It read: "a frozen +/// entry is one the window has NO evidence about, which is precisely the entry a grown-only +/// scan would skip. The width is right." Its PREMISE survives — without a window parameter +/// "no evidence" was all this predicate could say. With one, absence of evidence about +/// RESOLUTION becomes positive evidence about POSITION: a frozen id is PROVEN to hold the +/// same (index, id) in every certified frame and in `state`, under a certificate that forbids +/// the stack shrinking. Measured on the `dellian` 4p fixture, a growing cascade over a frozen +/// bottom prefix: up to 152 of 156 current-stack entries are exempt at the certified beat. +/// +/// WHAT LICENSES THE EXEMPTION HERE, since this function establishes none of the cover +/// predicate's premises itself (its whole body is the two loops plus the CR 616.1 tail): a +/// non-empty `frozen_ids` can only have been built under [`PeriodCertification::BoardCovered`] +/// ⟺ the offer's basis-A `else if` matched ⟺ [`loop_states_cover_modulo_growth_pinned`] +/// returned `true` ⇒ that predicate's items (2)/(4)/(5) all passed UNEXEMPTED, and those run +/// strictly before this conjunct. The premises are inherited as discharged facts about the +/// same `(prior, current)` pair, never assumed. When `frozen_ids` is empty — every basis-B +/// path, every equality-certified path, the degenerate alias — every current-stack entry is +/// scanned exactly as before this change. +pub(crate) fn stack_choices_are_all_specified<'a>( + state: &'a GameState, + proposer: PlayerId, + slots: &[DecisionSlot], + touch: Option<&PeriodTouch<'a>>, + verdicts: &mut PeriodVerdicts<'a>, +) -> bool { + // Only `pinned` and `period` are read below; the other three proofs belong to the cover + // axes and this predicate makes no claim about them. Written out in full so a future SIXTH + // field is a compile error that forces a decision rather than a silent default. + let scope = LoopWindowScope { + phase_invariant: None, + sole_driver: None, + pinned: Some(PinnedChoices { proposer, slots }), + cast_card_ids: None, + period: touch, + }; + // CR 732.2a: the described sequence is EVERY choice the shortcut makes, not the subset + // that happens to sit on the stack at the offer beat. The mint's own domain is + // `touch.announced`, so both loops range over the announced pairs UNION the current-stack + // entries the window did not prove frozen — each pair evaluated against ITS OWN carrying + // frame, never against the live board (a target legal on the frame but gone from `current` + // would collapse the assignment to "forced" and relieve a choice that is not forced). + let mut pairs: Vec<(&'a GameState, &'a StackEntry)> = Vec::new(); + if let Some(t) = touch { + pairs.extend(t.announced.iter().copied()); + } + for entry in &state.stack { + // CR 608.1: an entry the window proves held its (index, id) through every certified + // frame neither announced nor resolved in the described sequence. + if touch.is_some_and(|t| t.frozen_ids.contains(&entry.id)) { + verdicts.note_conjunct6_frozen_skip(); + continue; + } + pairs.push((state, entry)); + } + + // Announcement-time (gate (3)'s fact), CR 603.3d. + for (frame, entry) in &pairs { + // Fail-closed: a frame outside this container's period cannot be asked about. + let Some(f) = verdicts.frame_ix(frame) else { + return false; + }; + if !(entry_target_choice_is_pinned(frame, f, entry, verdicts, scope) + || stack_entry_has_no_ordering_input(frame, entry)) + { + return false; + } + } + // Resolution-time (gate (6)'s fact), including its paired CR 616.1 obligation. + // The obligation is discharged PER ENTRY against the pipeline's own candidate + // authority, on the same board the entry's events were derived on. + for (frame, entry) in &pairs { + let Some(f) = verdicts.frame_ix(frame) else { + return false; + }; + verdicts.note_conjunct6_ask(); + let primary = verdicts.verdict(f, entry).primary.clone(); + let verdict = match primary { + crate::game::resolution_prompt::ResolutionChoiceFreedom::MayPrompt => { + match pinned_may_choice_relief(f, entry, verdicts, scope) { + Some(residual) => residual, + None => return false, + } + } + free => free, + }; + if !resolution_events_are_discharged(frame, verdict) { + return false; + } + } + true +} + +/// CR 614.1 + CR 616.1: discharge one entry's resolution verdict against the +/// replacement pipeline's own candidate authority, on the board its events were +/// derived on. +/// +/// `board` is the frame carrying the resolution. BOTH halves of this discharge +/// are frame-sensitive: the events are the EVENT half and +/// `proposed_event_prompt_cause`'s first argument is the CANDIDATE-AUTHORITY +/// half — it runs `find_applicable_replacements` over that board's replacement +/// population, so handing it a different board would check one frame's events +/// against another frame's candidates. +fn resolution_events_are_discharged( + board: &GameState, + verdict: crate::game::resolution_prompt::ResolutionChoiceFreedom, +) -> bool { + use crate::game::resolution_prompt::ResolutionChoiceFreedom; + match verdict { + ResolutionChoiceFreedom::MayPrompt => false, + ResolutionChoiceFreedom::FreeUnlessReplacements(events) => { + // CR 616.1: FAIL CLOSED ON AN EMPTY DERIVATION, IN EVERY BUILD. + // + // This was a `debug_assert!(!events.is_empty(), ..)` resting on the contract + // that `probe_resolution` returns `Prompted` for an empty derivation. That + // contract is real but it lives in ANOTHER module and is not enforceable from + // here — and `debug_assert!` compiles out of release, where `any()` over an + // empty slice is `false`, so `!any(..)` would return `true` and discharge the + // obligation having inspected NOTHING. Fail-open is the single direction this + // predicate exists to prevent. + // + // A REFUSAL, not a panic, is the right shape: every other seam in this module + // answers an unclassifiable input with "no certificate, no offer", and the + // refusal is what a test can pin. A `debug_assert!` here could not be covered + // at all — it aborts the very build tests run in. + if events.is_empty() { + return false; + } + !events.iter().any(|ev| { + !crate::game::replacement::proposed_event_prompt_cause( + board, + ev, + crate::game::replacement::replacement_registry(), + ) + .is_empty() + }) + } + } +} + +/// CR 732.2a: [`loop_states_cover_modulo_growth`] with an OFFER's published pin slots in +/// scope — the entry point `game::engine`'s bounded-cycle offer uses for both its +/// certification disjunct and its pin-coverage conjunct. +/// +/// This wrapper exists so the pins reach the gates through the SINGLE AUTHORITY +/// [`window_scope_from_cover_frames`] rather than through a [`LoopWindowScope`] a caller +/// in another module assembled itself; the scope's fields are private for exactly that +/// reason. Passing `slots` empty is NOT the same as passing no proof: `Some(PinnedChoices +/// { slots: &[] })` still names a proposer whose entries the relief tests, and every such +/// test fails on an empty slot list, so an empty publication is byte-identically as strict +/// as [`LoopWindowScope::unproven`]. +pub(crate) fn loop_states_cover_modulo_growth_pinned<'a>( + prior: &GameState, + current: &'a GameState, + proposer: PlayerId, + slots: &[DecisionSlot], + touch: &PeriodTouch<'_>, + verdicts: &mut PeriodVerdicts<'a>, +) -> bool { + let scope = window_scope_from_cover_frames( + prior, + current, + Some(PinnedChoices { proposer, slots }), + Some(touch), + ); + loop_states_cover_modulo_growth_scoped(prior, current, scope, verdicts) } /// CR 601.2f + CR 601.2a: the set of card ids this loop window's recorded driving @@ -1140,15 +2250,27 @@ fn window_cast_card_ids(state: &GameState) -> Option> { } /// Scoped sibling of [`loop_states_cover_modulo_growth`] — see [`LoopWindowScope`]. -/// The `_scope` PARAMETER is still unread: this body's own axis is the PROJECTED -/// firewall, and the scope parameter is the seam for the SIBLING covers. The projected -/// scope conjunct (5) passes downstream is therefore derived LOCALLY, from `current`'s -/// own driving sequence ([`window_cast_card_ids`]) — so behaviour does move through -/// this body even though the parameter does not carry it. -pub(crate) fn loop_states_cover_modulo_growth_scoped( +/// The `scope` parameter now carries CR 732.2a pin proofs INTO this body: gate (3) +/// skips an entry whose published target [`DecisionSlot`] the offer pinned +/// ([`entry_target_choice_is_pinned`]) and gate (6) discharges a `MayPrompt` that is +/// wholly attributable to a published CR 603.5 gate ([`pinned_may_choice_relief`]), per +/// the EXTENSION POINT's three preconditions. That is this body's own use of the +/// parameter. +/// +/// The parameter is ALSO the seam for the SIBLING covers, which build their scope +/// through the single authority [`window_scope_from_cover_frames`] — its third +/// argument is `pinned`, passed `None` at both live sibling call sites today. +/// +/// Not carried by the parameter: the PROJECTED conjunct (5) this body passes +/// downstream is derived LOCALLY from `current`'s own driving sequence +/// ([`window_cast_card_ids`]), and the `projected_scope` built for that call +/// deliberately holds `pinned: None` — the projected firewall is a different +/// axis and must not inherit the caller's pins. +pub(crate) fn loop_states_cover_modulo_growth_scoped<'a>( prior: &GameState, - current: &GameState, - _scope: LoopWindowScope<'_>, + current: &'a GameState, + scope: LoopWindowScope<'_>, + verdicts: &mut PeriodVerdicts<'a>, ) -> bool { // (1) Board equal modulo the NARROWED projection AND modulo the stack, with the // object resource axes STRICT-COMPARED (R5-B1). Project both, clear both stacks @@ -1179,7 +2301,21 @@ pub(crate) fn loop_states_cover_modulo_growth_scoped( // (3) Every grown place is a mandatory, no-ordering-input triggered ability. // Iterate the ORIGINAL current-stack entries (so the mid-construction firewall // sees real stack-entry ids) and check each whose normalized kind strictly grew. + // Fail-closed: this predicate only answers about a `current` the container holds. + let Some(f_current) = verdicts.frame_ix(current) else { + return false; + }; for (orig, norm) in current.stack.iter().zip(cur_stack.iter()) { + // CR 732.2a EXTENSION POINT (see item 6's block): a slot the OFFER publishes is + // a SPECIFIED choice, not a free one, so its announcement-time target input is + // no longer player ordering input. + // + // Deliberately NOT frozen-filtered: the PLACEMENT RULE keeps the frozen skip in + // item (6) alone, because items (4)/(5) are what establish the premise that skip + // consumes — reading it here would consume a premise not yet proved. + if entry_target_choice_is_pinned(current, f_current, orig, verdicts, scope) { + continue; + } let cn = cur_stack.iter().filter(|e| *e == norm).count(); let pn = prior_stack.iter().filter(|e| *e == norm).count(); if cn > pn && !stack_entry_has_no_ordering_input(current, orig) { @@ -1190,11 +2326,14 @@ pub(crate) fn loop_states_cover_modulo_growth_scoped( // (4) On-stack fail-closed resource-read guard: NO entry on `current`'s stack may // carry an AST that reads a still-projected axis (player monotone resources + // journals). Object-axis readers pass — their drift breaks gate (1) instead. - if current - .stack - .iter() - .any(stack_entry_reads_projected_resource) - { + // The closure is the ONLY body change item (4) takes: it counts the scans so the + // PLACEMENT RULE ("the frozen skip lives in item (6) and nowhere earlier") has an + // assertable surface instead of an argued one. The population is the UNEXEMPTED + // current stack — `frozen_ids` is deliberately not read here. + if current.stack.iter().any(|e| { + verdicts.note_conjunct4_scan(); + stack_entry_reads_projected_resource(e) + }) { return false; } @@ -1210,8 +2349,11 @@ pub(crate) fn loop_states_cover_modulo_growth_scoped( let projected_scope = LoopWindowScope { phase_invariant: None, sole_driver: None, - pinned_slots: &[], + pinned: None, cast_card_ids: cast_ids.as_deref(), + // DELIBERATE, same rationale as the `pinned: None` above: the projected firewall is + // a different axis and must not inherit the caller's period proof. + period: None, }; if fire_time_conditions_read_projected_resource_scoped(current, projected_scope) { return false; @@ -1224,11 +2366,11 @@ pub(crate) fn loop_states_cover_modulo_growth_scoped( // eligibility over player counters, CR 701.34a) can open a prompt that the // AST-level item-4 scan cannot see. Verdicts come from the ability_scan // classifier (pure fact-producers — rejection is decided ONLY here); - // FreeUnlessLifeReplacements additionally requires the CR 616.1 environmental - // guard below. THIS block is the single gate seam for resolution-choice - // rejection (item 3 is untouched and gates a different fact — announcement-time - // ordering input). Perf: O(stack × AST) + O(objects × defs) via the guard — - // same order as items (4)/(5). + // FreeUnlessReplacements additionally requires the CR 616.1 environmental + // guard below, for exactly the event classes its payload names. THIS block is the + // single gate seam for resolution-choice rejection (item 3 is untouched and gates + // a different fact — announcement-time ordering input). Perf: O(stack × AST) + + // O(objects × defs) via the guard — same order as items (4)/(5). // // EXTENSION POINT — pinned fixed choices (CR 732.2a): a shortcut proposal MAY // pre-specify choices in advance ("always choose permanent P"); only @@ -1241,18 +2383,50 @@ pub(crate) fn loop_states_cover_modulo_growth_scoped( // option preserves the certificate (the win stays forced per the // CR 104.2a-grounded winner predicate). Plug pins in at THIS seam as an // additional input; do not rewire the classifiers or spread the decision. - let mut needs_life_guard = false; + // + // PINS ARE PLUGGED IN HERE (`scope.pinned`, minted by the single authority + // `game::engine::bounded_cycle_pin_slots`). Precondition (a) holds by construction: + // the pins that channel carries are `TargetPin::Player` / `MayChoice` designations, + // both state-independent (never "the newest copy"). Precondition (c) is NOT taken on + // trust from the mint site: [`pinned_may_choice_relief`] re-runs the mint's own + // per-entry acceptance test — controller conjunct included — for THIS entry, so the + // relief predicate is the mint predicate rather than a coarser sibling of it. + // Precondition (b) is why relief is not a `continue`: the entry's RESIDUAL verdict + // (its classification with the published CR 603.5 gate discharged) re-enters the same + // gating an unpinned entry gets, so `FreeUnlessReplacements` still arms the + // CR 616.1 environmental guard below for the classes it names — a pinned target/"may" + // says nothing about whose life- or draw-event replacements might prompt. + // + // CR 608.1 + CR 732.2a: an entry the certified window proves FROZEN — same id at the + // same index in every window frame and in `current` — neither announced nor resolved in + // the described sequence, so it makes no choice there. THE FROZEN SKIP LIVES HERE AND + // NOWHERE EARLIER: items (2)/(4)/(5) are what establish the premises it consumes, and + // each of them returns on failure strictly above this loop, so by the time control + // arrives the premises are discharged facts about `(prior, current)` rather than + // assumptions about this predicate's own eventual answer. for entry in ¤t.stack { - match stack_entry_resolution_choice_freedom(entry) { - crate::game::ability_scan::ResolutionChoiceFreedom::MayPrompt => return false, - crate::game::ability_scan::ResolutionChoiceFreedom::FreeUnlessLifeReplacements => { - needs_life_guard = true + if scope + .period + .is_some_and(|t| t.frozen_ids.contains(&entry.id)) + { + verdicts.note_conjunct6_frozen_skip(); + continue; + } + verdicts.note_conjunct6_ask(); + let primary = verdicts.verdict(f_current, entry).primary.clone(); + let verdict = match primary { + crate::game::resolution_prompt::ResolutionChoiceFreedom::MayPrompt => { + match pinned_may_choice_relief(f_current, entry, verdicts, scope) { + Some(residual) => residual, + None => return false, + } } + free => free, + }; + if !resolution_events_are_discharged(current, verdict) { + return false; } } - if needs_life_guard && life_event_replacements_may_prompt(current) { - return false; - } true } @@ -1381,7 +2555,7 @@ pub(crate) fn loop_states_cover_modulo_object_growth( if fire_time_conditions_read_growing_class_scoped( &cf, None, - window_scope_from_cover_frames(&pa, &pb, &[]), + window_scope_from_cover_frames(&pa, &pb, None, None), ) { return false; } @@ -1589,7 +2763,7 @@ pub(crate) fn loop_states_cover_modulo_fodder_growth( if fire_time_conditions_read_growing_class_scoped( &cf, Some(&class_members), - window_scope_from_cover_frames(&pa, &pb, &[]), + window_scope_from_cover_frames(&pa, &pb, None, None), ) { return false; } @@ -3036,8 +4210,14 @@ fn stack_entry_has_no_ordering_input(state: &GameState, entry: &StackEntry) -> b } // CR 603.3d + CR 608.2b + CR 732.2a: a non-empty target list is NOT player // ordering input when exactly one legal assignment exists — the choice is - // FORCED, so the shortcut stays deterministic. Re-derived per-iteration against - // the live state (the SOLE caller iterates the grown current-stack entries). + // FORCED, so the shortcut stays deterministic. Re-derived per call against the + // board the CALLER passes, and that board is load-bearing rather than incidental: + // there are THREE call sites and none of them is "the live state" by construction + // — the announced loop passes the pair's own CARRYING FRAME (a retained ring + // sample), the current-stack loops pass `current`. The verdict is a function of + // the board's legal-target population, so handing a retained pair the live board + // is fail-OPEN: a target legal on the frame but gone from `current` collapses the + // assignment to "forced" and relieves a choice that is not forced. forced_unique_targeting(state, ability) } @@ -3114,12 +4294,59 @@ fn stack_entry_reads_projected_resource(entry: &StackEntry) -> bool { /// a real fixture needs it.) The trigger-level `condition` (intervening-if /// re-check, CR 603.4) is pure evaluation and contributes no prompt. fn stack_entry_resolution_choice_freedom( + state: &GameState, entry: &StackEntry, -) -> crate::game::ability_scan::ResolutionChoiceFreedom { - use crate::game::ability_scan::ResolutionChoiceFreedom; + budget: &mut ProbeBudget, +) -> crate::game::resolution_prompt::ResolutionChoiceFreedom { + use crate::game::resolution_prompt::ResolutionChoiceFreedom; match &entry.kind { StackEntryKind::TriggeredAbility { ability, .. } => { - crate::game::ability_scan::ability_resolution_choice_freedom(ability) + // CR 603.4 + CR 608.2k: the classifier probes a RESOLUTION, so it + // must be handed the board `resolve_top` would hand + // `resolve_ability_chain` — this entry off the stack, with + // resolution scope bound. Handing it the raw pre-resolution board + // resolves every `EventContextAmount` / `Triggering*` reference + // against an absent context and is FAIL-OPEN for the `> 0`-gated + // virtual replacement arms. + // + // The entry is removed BY ID, never by `pop`: the callers walk the + // stack at arbitrary depth, so "pop the top" is wrong for every + // non-top entry, while "this entry is the one resolving" is the + // counterfactual being asked. The clone lands only on the probe — + // `resolve_top` calls the same shared binding on its own + // `&mut GameState` and pays nothing. + // CR 732.2a: THE CHEAP BINDING PRECONDITION RUNS BEFORE THE CLONE. + // + // The whole-`GameState` clone below is the dominant per-entry work, and it + // used to be paid unconditionally — including for entries the classifier was + // about to reject on a pure AST gate (`optional`, `unless_pay`, a modal + // header, an `UpTo` count, a non-allow-listed effect). Those entries bought + // a full board copy and a scope binding to reach a verdict that never looked + // at the board. + // + // `chain_offers_choice` is that verdict's AST half, so asking it here costs + // nothing and removes the clone entirely for every gated entry. + // + // DELIBERATELY NOT a `try_charge_one` in this position, which was the other + // remedy on offer: the meter's charge sits BELOW the `optional` gate by + // design, and `r16_the_f4_offering_beats_probe_demand_is_exactly_measured` + // pins `spent == conjunct6_asks` for exactly that reason — its own message + // predicts that hoisting the charge above the gate makes every optional ask + // charge twice. Measured: adding a charge here does make that row fail. The + // precondition form bounds the same dominant work without moving the meter. + if crate::game::resolution_prompt::chain_offers_choice(ability) { + return ResolutionChoiceFreedom::MayPrompt; + } + let mut board = state.clone(); + board.stack.retain(|e| e.id != entry.id); + if !crate::game::stack::bind_resolution_scope(&mut board, entry, None) { + // CR 603.4 false ⇒ the live resolution proposes nothing, and an + // empty derivation is never "safe". + return ResolutionChoiceFreedom::MayPrompt; + } + crate::game::resolution_prompt::ability_resolution_choice_freedom( + &board, ability, budget, + ) } StackEntryKind::Spell { .. } | StackEntryKind::ActivatedAbility { .. } @@ -3443,151 +4670,6 @@ pub(crate) fn life_growth_is_observed(state: &GameState) -> bool { ) } -/// The proposed-event class a life-affecting `ReplacementEvent` watches. CR 616.1 -/// material-ordering competition is counted PER proposed-event class, because a -/// single `ProposedEvent::LifeLoss` draws candidates from every LifeLoss-matching -/// registry key at once (`LoseLife` + `LifeReduced` + `PayLife`). -#[derive(Clone, Copy, PartialEq, Eq)] -enum LifeEventClass { - /// Matches `ProposedEvent::LifeGain`. - LifeGain, - /// Matches `ProposedEvent::LifeLoss`. - LifeLoss, -} - -/// CR 614.1a: is this replacement event in the LIFE class — i.e. does its -/// registry matcher match `ProposedEvent::LifeGain` or `ProposedEvent::LifeLoss`? -/// Compiler-exhaustive over ALL `ReplacementEvent` variants (no wildcard) so a -/// NEW variant fails to compile until classified against the coupling rule. -/// -/// COUPLING RULE (grep-enforced when the set is edited): life-class ⇔ the event's -/// registry matcher (`crate::game::replacement`) matches a life `ProposedEvent`. -/// Measured (`rg -n 'ProposedEvent::Life(Gain|Loss)'` over the matcher fns): -/// `gain_life_matcher` (GainLife → LifeGain), `lose_life_matcher` (LoseLife → -/// LifeLoss), `life_reduced_matcher` (LifeReduced → LifeLoss), `pay_life_matcher` -/// (PayLife → LifeLoss). Classify by the MATCHER, not the name — a hand-picked -/// set had already missed `PayLife` and `LifeReduced`. -fn replacement_event_matches_life(event: &ReplacementEvent) -> Option { - match event { - ReplacementEvent::GainLife => Some(LifeEventClass::LifeGain), - ReplacementEvent::LoseLife | ReplacementEvent::LifeReduced | ReplacementEvent::PayLife => { - Some(LifeEventClass::LifeLoss) - } - // Non-life events (explicitly listed ⇒ None, so a new variant must be - // classified against the coupling rule before it compiles). - ReplacementEvent::DamageDone - | ReplacementEvent::Destroy - | ReplacementEvent::Discard - | ReplacementEvent::Draw - | ReplacementEvent::TurnFaceUp - | ReplacementEvent::Counter - | ReplacementEvent::ChangeZone - | ReplacementEvent::Moved - | ReplacementEvent::AddCounter - | ReplacementEvent::RemoveCounter - | ReplacementEvent::CreateToken - | ReplacementEvent::Tap - | ReplacementEvent::Untap - | ReplacementEvent::DealtDamage - | ReplacementEvent::Mill - | ReplacementEvent::Attached - | ReplacementEvent::SearchFound - | ReplacementEvent::DrawCards - | ReplacementEvent::ProduceMana - | ReplacementEvent::Scry - | ReplacementEvent::CoinFlip - | ReplacementEvent::Transform - | ReplacementEvent::Explore - | ReplacementEvent::Connive - | ReplacementEvent::AssembleContraption - | ReplacementEvent::BeginPhase - | ReplacementEvent::BeginTurn - | ReplacementEvent::Cascade - | ReplacementEvent::CopySpell - | ReplacementEvent::DeclareBlocker - | ReplacementEvent::GameLoss - | ReplacementEvent::GameWin - | ReplacementEvent::Learn - | ReplacementEvent::LoseMana - | ReplacementEvent::PlanarDiceResult - | ReplacementEvent::Planeswalk - | ReplacementEvent::Proliferate - | ReplacementEvent::Other(_) => None, - } -} - -/// §2.2 item 6 environmental guard (CR 616.1 + CR 614.1a): can the current -/// life-event replacement environment open a resolution-time prompt on an -/// allow-listed `GainLife`/`LoseLife` resolution? Paired obligation of -/// `ResolutionChoiceFreedom::FreeUnlessLifeReplacements`. -/// -/// Over-approximates `find_applicable_replacements` fail-closed: conditions, -/// `valid_player` scopes, and amounts are deliberately ignored (over-count ⇒ -/// over-reject ⇒ fail-safe). Def sources = object-attached defs -/// (`active_replacements`, item 5's authority) CHAINED with the game-state-level -/// floating store `state.pending_damage_replacements` (sentinel `ObjectId(0)`, -/// scanned by `find_applicable_replacements` replacement.rs:4838-4862; skip -/// `is_consumed`, mirroring :4859-4861). `pending_step_end_mana_handlers` is a -/// different type gated behind `ProposedEvent::EmptyManaPool` -/// (replacement.rs:4971-4980) that structurally cannot produce a life-class -/// candidate ⇒ excluded. There are NO virtual life candidates in -/// `find_applicable_replacements` (measured — the only `ProposedEvent::LifeGain` -/// there is a `valid_player` filter, not a candidate creator, replacement.rs:4674). -/// -/// Rejects when a life-class def is: -/// (a) OPTIONAL — a single optional candidate prompts (replacement.rs:6221-6247); -/// (b) carries a body continuation (`execute`/`runtime_execute`) — a MANDATORY -/// body is stashed as `PostReplacementContinuation::Resolved` -/// (replacement.rs:5511-5524) and drained via -/// `apply_pending_post_replacement_effect` (engine_replacement.rs:1159), -/// which runs an arbitrary `ResolvedAbility` and can set a non-priority -/// `waiting_for` (e.g. a Sacrifice body ⇒ EffectZoneChoice). `execute` is -/// also rejected by item 5 (resource.rs:1058-1060); re-checked here so the -/// guard does not depend on item ordering, and `runtime_execute` is NOT -/// otherwise covered (item 5 scans it only for projected reads, -/// resource.rs:976-981); -/// (c) one of ≥2 defs competing for the SAME proposed-event class — CR 616.1 -/// material-ordering prompt (replacement.rs:6263-6279). A single mandatory -/// quantity-mod def with no body (Bloodletter / Rhox Faithmender class) -/// trips NONE of these and resolves deterministically (replacement.rs:6250-6261). -fn life_event_replacements_may_prompt(state: &GameState) -> bool { - // CR 614.1 / CR 113.6: `active_replacements` is all-zones (its callers restrict). - // `find_applicable_replacements` — the real pipeline this over-approximates — - // scans [Battlefield, Command] (plus the entering/discarded card, irrelevant to a - // life event). A life-class replacement on a card in the library / hand / - // graveyard cannot apply during the loop; scanning it is the same all-zones - // false-reject class as the observer firewalls, so match the pipeline's scope. - let object_defs = crate::game::functioning_abilities::active_replacements(state) - .filter(|(_, obj, _)| matches!(obj.zone, Zone::Battlefield | Zone::Command)) - .map(|(_, _, def)| def); - let floating_defs = state - .pending_damage_replacements - .iter() - .filter(|def| !def.is_consumed); - - let mut gain_defs = 0usize; - let mut loss_defs = 0usize; - for def in object_defs.chain(floating_defs) { - let Some(class) = replacement_event_matches_life(&def.event) else { - continue; - }; - // (a) single optional candidate prompts. - if crate::game::replacement::replacement_mode_is_optional(&def.mode) { - return true; - } - // (b) mandatory body-continuation drain is prompt-capable. - if def.execute.is_some() || def.runtime_execute.is_some() { - return true; - } - match class { - LifeEventClass::LifeGain => gain_defs += 1, - LifeEventClass::LifeLoss => loss_defs += 1, - } - } - // (c) ≥2 defs competing for one proposed-event class ⇒ CR 616.1 ordering prompt. - gain_defs >= 2 || loss_defs >= 2 -} - /// CR 614.1a: a replacement's BODY (not its `condition`) can read a projected /// player resource. `QuantityModification` variants are all fixed constants (no /// read). `DamageModification::LifeFloor` caps against a player's live life total @@ -4122,11 +5204,148 @@ mod tests { oid } - fn test_trigger_ref(state: &GameState, object_id: ObjectId) -> TriggerDefinitionRef { - let object = &state.objects[&object_id]; - TriggerDefinitionRef { - source: crate::types::identifiers::ObjectIncarnationRef::from_object(object), - occurrence: crate::types::ability::TriggerDefinitionOccurrenceRef::Printed { + /// Inflate one of the real 4p dumps through the PRODUCTION decoder — the same + /// chokepoint the server's `from_persisted` and WASM's `decode_restored_game_state` + /// funnel through, never a bare `GameState` decode. + fn dump_state(gz: &[u8]) -> GameState { + use std::io::Read; + let mut json = String::new(); + flate2::read::GzDecoder::new(gz) + .read_to_string(&mut json) + .expect("fixture .json.gz must inflate to UTF-8 JSON"); + let envelope: serde_json::Value = + serde_json::from_str(&json).expect("dump envelope parses as JSON"); + serde_json::from_value::( + envelope["gameState"].clone(), + ) + .expect("gameState deserializes through the production decoder") + .into_game_state() + } + + /// One beat of the shared dump drive policy (`tests/integration/loop_shortcut.rs`'s + /// `dump_drive_one_beat`): at `Priority` always pass — the mandatory triggers resolve + /// and re-trigger, which IS the loop when there is one — otherwise take the first + /// legal non-terminal action. Every beat crosses `apply()`. + fn dump_drive_one_beat(state: &mut GameState) -> Result<(), String> { + use crate::types::actions::GameAction; + use crate::types::game_state::WaitingFor; + + let actor = state + .waiting_for + .acting_player() + .into_iter() + .chain(state.players.iter().map(|p| p.id)) + .find_map(|p| { + let (actions, _costs, _grouped) = + crate::ai_support::legal_actions_for_viewer(state, p); + (!actions.is_empty()).then_some((p, actions)) + }); + let Some((who, actions)) = actor else { + return Err(format!("no legal actor at {:?}", state.waiting_for)); + }; + let forbidden = + |a: &GameAction| matches!(a, GameAction::Concede { .. } | GameAction::Debug(_)); + let chosen = if matches!(state.waiting_for, WaitingFor::Priority { .. }) { + actions + .iter() + .find(|a| matches!(a, GameAction::PassPriority)) + } else { + actions + .iter() + .find(|a| !matches!(a, GameAction::PassPriority) && !forbidden(a)) + .or_else(|| actions.iter().find(|a| !forbidden(a))) + }; + let Some(action) = chosen.cloned() else { + return Err(format!("empty action list at {:?}", state.waiting_for)); + }; + crate::game::engine::apply(state, who, action.clone()) + .map(|_| ()) + .map_err(|e| format!("apply err ({action:?}): {e:?}")) + } + + /// A frozen-set LOWER BOUND computed INDEPENDENTLY of the function under test: the + /// longest common prefix, by object id, of every window frame's stack and `current`'s. + /// + /// Sound because it is a strictly weaker computation than the predicate it bounds — + /// `certified_period_touch` freezes an id iff it sits at the SAME INDEX in every window + /// frame, and every position inside a common prefix satisfies that by construction. It + /// is a prefix scan that stops at the first disagreement, not a per-index filter over + /// the whole stack, so it cannot degenerate into `f(x) == f(x)` against the callee. + fn frozen_lower_bound(window: &[&GameState], current: &GameState) -> usize { + (0..current.stack.len()) + .take_while(|&i| { + let id = current.stack[i].id; + window + .iter() + .all(|f| f.stack.get(i).map(|e| e.id) == Some(id)) + }) + .count() + } + + /// The two 4p dumps every row in this module drives with the GENERIC policy + /// ([`dump_drive_one_beat`]: pass at `Priority`, else the first legal non-terminal action), + /// as `(name, gzip)` pairs. + /// + /// `fantastic_four_bounded_loop_4p.json.gz` is now tracked too (5d U5), and is deliberately + /// NOT listed here: MEASURED, the generic policy never reaches its loop at all — that + /// helper's victim preference matches `GameAction::SelectTargets` while the F4 dump raises + /// `GameAction::ChooseTarget`, and its fallback answers Invisible Woman's CR 603.5 "may" + /// with whichever `DecideOptionalEffect` is enumerated first, which breaks the chain to + /// Mister Fantastic. Adding it here would add a dump on which these rows measure nothing. + /// Its rows live in `tests/integration/fantastic_four_bounded_loop.rs`, with the drive + /// policy that dump requires. + const TRACKED_DUMPS: [(&str, &[u8]); 2] = [ + ( + "dina", + include_bytes!("../../tests/fixtures/dina_conqueror_4p.json.gz"), + ), + ( + "dellian", + include_bytes!("../../tests/fixtures/dellian_emblem_conqueror_4p.json.gz"), + ), + ]; + + /// Drive one dump through `apply()` until `pred` accepts the board, returning the beat + /// index and that board. + /// + /// The beat is SEARCHED by its construction requirements, never hardcoded — a hardcoded + /// index is a fixture that drifts silently when the drive policy moves. `None` ⇒ no beat + /// within `max_beats` satisfied them, which every caller turns into a loud failure rather + /// than a vacuous pass. + fn drive_dump_until( + gz: &[u8], + max_beats: usize, + pred: impl Fn(&GameState) -> bool, + ) -> Option<(usize, GameState)> { + let mut state = dump_state(gz); + for beat in 0..max_beats { + if pred(&state) { + return Some((beat, state)); + } + if dump_drive_one_beat(&mut state).is_err() { + return None; + } + } + None + } + + /// The construction requirement shared by every row that needs a REAL certified window + /// carrying a non-empty observed-frozen prefix: a usable ring AND a newest candidate pair + /// (`span == 1`, the shape §3 D2's walk reaches first) whose common prefix is + /// index-stable. + fn has_frozen_window(state: &GameState) -> bool { + if state.loop_detect_ring.len() < 2 { + return false; + } + let live: Vec<&GameState> = state.loop_detect_ring.iter().map(|f| &f.live).collect(); + frozen_lower_bound(&live[live.len() - 2..], state) > 0 + } + + fn test_trigger_ref(state: &GameState, object_id: ObjectId) -> TriggerDefinitionRef { + let object = &state.objects[&object_id]; + TriggerDefinitionRef { + source: crate::types::identifiers::ObjectIncarnationRef::from_object(object), + occurrence: crate::types::ability::TriggerDefinitionOccurrenceRef::Printed { base_set: object.trigger_base_set_instance, printed_index: 0, }, @@ -5098,7 +6317,13 @@ mod tests { trigger_event: None, description: None, source_name: String::new(), - subject_match_count: None, + // CR 603.2c: the batched-subject count these entries' `event_amount()` + // drains resolve "that many" against. `bind_resolution_scope` lifts it + // into resolution scope; with it absent the drain's amount resolves to + // ZERO, the resolver proposes nothing, and gate (6)'s probe is + // fail-closed on the EMPTY derivation — a different fact from the ones + // these rows test. + subject_match_count: Some(1), die_result: None, }, } @@ -5281,11 +6506,22 @@ mod tests { } fn bf_object(state: &mut GameState, id: u64) -> ObjectId { + bf_object_owned_by(state, id, PlayerId(1)) + } + + /// CR 614.1: a replacement definition's applicability is scoped to ITS + /// controller's events, so a fixture that installs a def to be DRAWN as a + /// candidate must put it on a permanent controlled by the player whose + /// event it is meant to replace. The event-derived discharge asks the + /// pipeline's own `find_applicable_replacements`, which honours that scope; + /// the def-scan it replaced deliberately ignored it (over-count ⇒ + /// over-reject), so a P1-controlled def used to reject a P0 life gain. + fn bf_object_owned_by(state: &mut GameState, id: u64, owner: PlayerId) -> ObjectId { let oid = ObjectId(id); let object = crate::game::game_object::GameObject::new( oid, CardId(7), - PlayerId(1), + owner, "Test Board Permanent".to_string(), Zone::Battlefield, ); @@ -5468,120 +6704,937 @@ mod tests { ); } - /// CONSTRAINT-3 ORTHOGONALITY: an item-3-passing, item-4-clean forced-unique - /// drain that ALSO carries a `Proliferate` sub_ability (CR 701.34a resolution - /// choice ⇒ `MayPrompt`) is vetoed by item-6. Revert-probe: dropping the - /// Proliferate sub (choice-free) flips this TRUE (= the positive fixture). + /// CR 601.2c (reached for a triggered ability via CR 603.3d): the mint must ask the + /// ANNOUNCEMENT authority how many choices announcing an entry requires — never a proxy + /// for it. `Effect::target_filter()` answers a DIFFERENT question ("is there a + /// player-target filter on the head effect?"); `ability_utils::build_target_slots` + /// answers this one, and is the same function the relief's own `forced_unique_targeting` + /// rebuilds slots with. Three rows, each a shape where the two answers DIVERGE, plus a + /// positive control so the conjunct cannot be constant-false. + /// + /// MEASURED REVERT-PROBE (delete the `build_target_slots` conjunct in + /// `entry_publishes_pin_slots`), on row (a)'s board: + /// `mint_publishes` false→TRUE, `bounded_cycle_pin_slots(..).len()` 0→1 (ONE point with + /// `min/max_targets: 1` for a TWO-choice announcement), and the pinned cover false→TRUE. + /// That last flip is the fail-open: gate (3)'s bare `continue` discharges a slot no pin + /// specifies. Rows (b) and (c) flip `mint_publishes` false→TRUE on the same probe. #[test] - fn item6_still_vetoes_under_forced_unique_targets() { - let drain_prolif = |id| { + fn bounded_cycle_pin_slots_requires_a_single_mandatory_announcement_slot() { + use crate::game::ability_utils::build_target_slots; + use crate::game::engine::{bounded_cycle_pin_slots, entry_publishes_pin_slots}; + + // ── (a) TWO announcement choices: a chained sub-ability that also drains + // `target opponent`. CR 601.2c: "if the spell uses the word `target` in multiple + // places, the same object or player can be chosen once for each instance." + let (prior, current) = grown_window(3, |id| { let mut ability = lose_life_targeting(event_amount(), opp_typed(vec![])); ability.targets = vec![TargetRef::Player(PlayerId(1))]; - ability.sub_ability = Some(Box::new(ResolvedAbility::new( - Effect::Proliferate, - vec![], - ObjectId(CHURN_SRC), - PlayerId(0), + ability.sub_ability = Some(Box::new(lose_life_targeting( + event_amount(), + opp_typed(vec![]), ))); churn_entry(id, 0, ability, None) - }; - let mut prior = drain_state(2); - prior.stack.push_back(drain_prolif(10)); - prior.stack.push_back(drain_prolif(11)); - let mut current = prior.clone(); - current.stack.clear(); - current.stack.push_back(drain_prolif(20)); - current.stack.push_back(drain_prolif(21)); - current.stack.push_back(drain_prolif(22)); - - // Reach-guard (mandate 4 anti-vacuity): item-3 AND item-4 PASS for this entry, - // so the FALSE below is ATTRIBUTABLE to item-6's Proliferate veto — not an - // upstream conjunct short-circuiting first. + }); let ability = current.stack[2].ability().unwrap(); + assert_eq!( + build_target_slots(¤t, ability).map(|s| s.len()).ok(), + Some(2), + "reach-guard: `collect_target_slots_inner` recurses into `sub_ability`, so the \ + runtime announcement carries two independent CR 601.2c choices" + ); assert!( - forced_unique_targeting(¤t, ability), - "item-3 passes (single forced-unique opponent) even with the Proliferate sub" + ability.effect.target_filter().is_some(), + "reach-guard: the PROXY still reports a single head-effect filter — that is the \ + whole divergence" + ); + // Reach-guards that gate (3) is the SOLE rejector here (gates (4)/(6) clean), so the + // cover assertions below are attributable to the pin relief and nothing else. + assert!( + !forced_unique_targeting(¤t, ability), + "reach-guard: three opponents ⇒ not forced-unique ⇒ gate (3) rejects" ); assert!( !crate::game::ability_scan::ability_reads_projected_resource(ability), - "item-4 passes (Proliferate sub scans NONE; pure-controller Typed target)" + "reach-guard: gate (4) passes" + ); + assert!( + entry_publishes_pin_slots(¤t, ¤t.stack[2], PlayerId(0)).is_none(), + "a published point says `min/max_targets: 1`; this announcement has TWO choices" + ); + assert!( + bounded_cycle_pin_slots(¤t, PlayerId(0)).is_empty(), + "and the mint therefore publishes nothing rather than under-describing it" ); + let slot = churn_src_slot(¤t, 0); + for pinned in [&[][..], std::slice::from_ref(&slot)] { + assert!( + !loop_states_cover_modulo_growth_scoped( + &prior, + ¤t, + pinned_scope(pinned), + &mut PeriodVerdicts::for_period(&[], ¤t, PlayerId(0)) + ), + "gate (3)'s relief is a bare `continue`: an unpublished second target choice \ + must keep rejecting ({} pinned slot(s))", + pinned.len() + ); + } + + // ── (b) ZERO announcement choices, two ways. `Effect::target_filter()` returns + // `Some` for both, but the SLOT BUILDER surfaces no stack slot: CR 701.21a + // `Sacrifice` is carved out of `triggers::extract_target_filter_from_effect` (the + // accessor the builder actually uses), and a CR 601.2c choice made at resolution + // (`TargetChoiceTiming::Resolution`) is not announced at all. + let zero_slot_cases: [(&str, ResolvedAbility); 2] = [ + ("CR 701.21a Sacrifice — not a target", { + ResolvedAbility::new( + Effect::Sacrifice { + target: opp_typed(vec![]), + count: QuantityExpr::Fixed { value: 1 }, + min_count: 0, + }, + vec![], + ObjectId(CHURN_SRC), + PlayerId(0), + ) + }), + ("CR 601.2c — chosen at resolution, not announcement", { + let mut a = lose_life_targeting(event_amount(), opp_typed(vec![])); + a.targets = vec![TargetRef::Player(PlayerId(1))]; + a.target_choice_timing = crate::types::ability::TargetChoiceTiming::Resolution; + a + }), + ]; + for (label, ability) in zero_slot_cases { + let (_p, c) = grown_window(3, |id| churn_entry(id, 0, ability.clone(), None)); + let live = c.stack[2].ability().unwrap(); + assert!( + live.effect.target_filter().is_some(), + "reach-guard: the PROXY says `Some` ({label})" + ); + assert_eq!( + build_target_slots(&c, live).map(|s| s.len()).ok(), + Some(0), + "reach-guard: the ANNOUNCEMENT authority says zero ({label})" + ); + assert!( + entry_publishes_pin_slots(&c, &c.stack[2], PlayerId(0)).is_none(), + "no announcement choice ⇒ no published point ({label})" + ); + } + // ── (c) an "up to one target" announcement: CR 601.2c makes the real minimum ZERO, + // and the slot may legally carry an EMPTY legal set, so `min_targets: 1` overstates + // it. One slot — the count half of the conjunct does NOT catch this; `!optional` does. + let (_p_opt, c_opt) = grown_window(3, |id| { + let mut ability = lose_life_targeting(event_amount(), opp_typed(vec![])); + ability.targets = vec![TargetRef::Player(PlayerId(1))]; + ability.optional_targeting = true; + churn_entry(id, 0, ability, None) + }); + assert_eq!( + build_target_slots(&c_opt, c_opt.stack[2].ability().unwrap()) + .map(|s| s.iter().map(|slot| slot.optional).collect::>()) + .ok(), + Some(vec![true]), + "reach-guard: exactly ONE slot, and it is OPTIONAL — so only the `!optional` \ + half of the conjunct can reject this row" + ); assert!( - !loop_states_cover_modulo_growth(&prior, ¤t), - "item-6 vetoes the resolution-choice-bearing drain even when item-3/4 pass" + entry_publishes_pin_slots(&c_opt, &c_opt.stack[2], PlayerId(0)).is_none(), + "CR 601.2c: an `up to one target` announcement's minimum is 0, not the \ + published 1" + ); + + // ── positive control: the shipped drain still publishes, so none of the above is a + // constant-false conjunct. Same board as arm 1 of + // `a_pinned_slot_skips_gate_three_and_six`. + let (_p_ok, c_ok) = grown_window(3, |id| drain_entry(id, vec![])); + assert_eq!( + build_target_slots(&c_ok, c_ok.stack[2].ability().unwrap()) + .map(|s| s.len()) + .ok(), + Some(1), + "control: one mandatory announcement choice" + ); + assert_eq!( + bounded_cycle_pin_slots(&c_ok, PlayerId(0)).len(), + 1, + "control: the instrument still returns a NON-zero point set" ); } - /// (c) the grown entry is a SPELL ⇒ false (not a mandatory trigger). Isolates - /// item 3's `TriggeredAbility`-only requirement. + /// CR 115.2 + CR 601.2c (via CR 603.3d): the mint must take *which* choice it publishes + /// from the ANNOUNCEMENT authority too — not just *how many*. + /// + /// The sibling row above closed the cardinality axis. This is the same divergence on the + /// legal-SET axis, and it is the shape the cardinality conjunct cannot see: the head + /// effect declares the CR 115.2 player filter but announces NOTHING + /// (`TargetChoiceTiming::Resolution` ⇒ 0 slots), while a chained sub-ability announces + /// the one mandatory slot — over CREATURES. `Effect::target_filter()` answers + /// `Typed{[], Opponent, []}`; `build_target_slots` answers "one mandatory slot, + /// `[Object(500), Object(901), Object(902)]`" (measured, both). + /// + /// MEASURED REVERT-PROBE (drop the all-`Player` conjunct in + /// `entry_publishes_pin_slots`): `entry_publishes_pin_slots(..).is_some()` false→TRUE and + /// `bounded_cycle_pin_slots(..)` 0→1 point, whose `legal_targets` before the fix was the + /// re-derived `[Player(1), Player(2)]` — a published point claiming a PLAYER set for a + /// three-OBJECT announcement, which no `TargetPin::Player` can specify and which gate + /// (3)'s bare `continue` would discharge anyway. + /// + /// The positive control asserts the published set EQUALS the builder's slot rather than + /// a literal, so it fails if the mint ever re-derives the set from the accessor again. #[test] - fn n1_c_grown_entry_spell_false() { - let spell = |id| StackEntry { - id: ObjectId(id), - source_id: ObjectId(CHURN_SRC), - controller: PlayerId(0), - kind: StackEntryKind::Spell { - card_id: CardId(1), - ability: None, - casting_variant: crate::types::game_state::CastingVariant::Normal, - actual_mana_spent: 0, + fn bounded_cycle_pin_slots_legal_set_comes_from_the_announcement_authority() { + use crate::game::ability_utils::build_target_slots; + use crate::game::engine::{bounded_cycle_pin_slots, entry_publishes_pin_slots}; + use crate::types::ability::{TargetChoiceTiming, TypeFilter}; + + // A chained sub-ability targeting CREATURES: the one slot the announcement really + // surfaces. `controller: None` so the set spans all three seats' creatures. + let creature_filter = TargetFilter::Typed(TypedFilter { + type_filters: vec![TypeFilter::Creature], + controller: None, + properties: vec![], + }); + let (mut prior, mut current) = grown_window(3, |id| { + let mut ability = lose_life_targeting(event_amount(), opp_typed(vec![])); + ability.targets = vec![TargetRef::Player(PlayerId(1))]; + // CR 601.2c: chosen at RESOLUTION ⇒ the head contributes no announcement slot. + ability.target_choice_timing = TargetChoiceTiming::Resolution; + ability.sub_ability = Some(Box::new(lose_life_targeting( + event_amount(), + creature_filter.clone(), + ))); + churn_entry(id, 0, ability, None) + }); + // Added to BOTH windows: the object axes are STRICT-compared, so a creature present + // only in `current` would make the cover false for an unrelated reason. + for state in [&mut prior, &mut current] { + for (id, controller) in [(901u64, 1u8), (902, 2)] { + let oid = ObjectId(id); + let mut obj = GameObject::new( + oid, + CardId(9), + PlayerId(controller), + format!("Bystander {id}"), + Zone::Battlefield, + ); + obj.card_types.core_types.push(CoreType::Creature); + state.objects.insert(oid, obj); + state.battlefield.push_back(oid); + } + } + + let ability = current.stack[2].ability().unwrap(); + assert!( + ability.effect.target_filter().is_some(), + "reach-guard: the PROXY still reports the head effect's player filter — that is \ + the whole divergence" + ); + let announced = build_target_slots(¤t, ability).expect("one announcement slot"); + assert_eq!( + announced + .iter() + .map(|slot| (slot.optional, slot.legal_targets.clone())) + .collect::>(), + vec![( + false, + vec![ + TargetRef::Object(ObjectId(CHURN_SRC)), + TargetRef::Object(ObjectId(901)), + TargetRef::Object(ObjectId(902)), + ] + )], + "reach-guard: the CARDINALITY conjunct passes here (exactly one MANDATORY slot), \ + so the all-`Player` conjunct is the sole rejector — and the announced set is \ + three OBJECTS, not the head filter's players" + ); + assert!( + !forced_unique_targeting(¤t, ability), + "reach-guard: three legal creatures ⇒ not forced-unique ⇒ gate (3) rejects" + ); + assert!( + !crate::game::ability_scan::ability_reads_projected_resource(ability), + "reach-guard: gate (4) passes, so the cover rows below are gate (3)'s" + ); + + assert!( + entry_publishes_pin_slots(¤t, ¤t.stack[2], PlayerId(0)).is_none(), + "the announced choice is among OBJECTS; a `TargetPin::Player` cannot specify it, \ + so nothing may be published" + ); + assert!( + bounded_cycle_pin_slots(¤t, PlayerId(0)).is_empty(), + "and the mint publishes no point rather than one describing a different choice" + ); + let slot = churn_src_slot(¤t, 0); + for pinned in [&[][..], std::slice::from_ref(&slot)] { + assert!( + !loop_states_cover_modulo_growth_scoped( + &prior, + ¤t, + pinned_scope(pinned), + &mut PeriodVerdicts::for_period(&[], ¤t, PlayerId(0)) + ), + "gate (3)'s relief is a bare `continue`: an object-valued announcement choice \ + must keep rejecting ({} pinned slot(s))", + pinned.len() + ); + } + + // ── the RESIDUAL divergence the all-`Player` conjunct alone does NOT close: a + // chained sub-ability that announces a choice among ALL players (CR 115.2 "target + // player") under the same "target opponent" head. Every conjunct passes — one + // mandatory slot, every candidate a player, head shape accepted — so the mint + // publishes, and the ONLY thing that keeps the point honest is that the set is + // carried through from the builder instead of re-derived from the head filter. + let (_p_any, any_player) = grown_window(3, |id| { + let mut ability = lose_life_targeting(event_amount(), opp_typed(vec![])); + ability.targets = vec![TargetRef::Player(PlayerId(1))]; + ability.target_choice_timing = TargetChoiceTiming::Resolution; + ability.sub_ability = Some(Box::new(lose_life_targeting( + event_amount(), + TargetFilter::Typed(TypedFilter { + type_filters: vec![], + controller: None, + properties: vec![], + }), + ))); + churn_entry(id, 0, ability, None) + }); + let all_seats = vec![ + TargetRef::Player(PlayerId(0)), + TargetRef::Player(PlayerId(1)), + TargetRef::Player(PlayerId(2)), + ]; + assert_eq!( + build_target_slots(&any_player, any_player.stack[2].ability().unwrap()) + .map(|slots| slots + .iter() + .map(|s| (s.optional, s.legal_targets.clone())) + .collect::>()) + .ok(), + Some(vec![(false, all_seats.clone())]), + "reach-guard: ONE mandatory slot whose candidates are all PLAYERS — so every \ + acceptance conjunct passes and only the publication path can still be wrong" + ); + let any_points = bounded_cycle_pin_slots(&any_player, PlayerId(0)); + assert_eq!( + any_points.len(), + 1, + "reach-guard: the mint accepts this entry" + ); + assert_eq!( + any_points[0].kind, + crate::analysis::decision_template::DecisionPointKind::Targets { + legal_targets: all_seats, + min_targets: 1, + max_targets: 1, + ordered: false, }, - }; - let mut prior = GameState::new_two_player(7); - prior.stack.push_back(spell(10)); - prior.stack.push_back(spell(11)); - let mut current = prior.clone(); - current.stack.clear(); - current.stack.push_back(spell(20)); - current.stack.push_back(spell(21)); - current.stack.push_back(spell(22)); - assert!(!loop_states_cover_modulo_growth(&prior, ¤t)); + "the point describes the choice the ANNOUNCEMENT offers (three seats); \ + re-deriving from the head filter would publish the two opponents" + ); + + // ── positive control + EQUIVALENCE: the shipped drain publishes, and the published + // legal set is the BUILDER's, asserted against it rather than against a literal. + let (_p_ok, c_ok) = grown_window(3, |id| drain_entry(id, vec![])); + let mut control_slots = + build_target_slots(&c_ok, c_ok.stack[2].ability().unwrap()).expect("control announces"); + assert_eq!(control_slots.len(), 1, "control: one announcement slot"); + let builder_set = control_slots.swap_remove(0).legal_targets; + assert_eq!( + builder_set, + vec![ + TargetRef::Player(PlayerId(1)), + TargetRef::Player(PlayerId(2)) + ], + "control: the builder enumerates the two opponents" + ); + let published = bounded_cycle_pin_slots(&c_ok, PlayerId(0)); + assert_eq!( + published.len(), + 1, + "control: the instrument returns non-zero" + ); + assert_eq!( + published[0].kind, + crate::analysis::decision_template::DecisionPointKind::Targets { + legal_targets: builder_set, + min_targets: 1, + max_targets: 1, + ordered: false, + }, + "the published legal set IS the announcement authority's slot" + ); } - /// (d) a prior entry-kind absent from `current` ⇒ false (embedding fails). - /// prior `[G, B]`, current `[G, G]` — B (controller 1) never matches. - #[test] - fn n1_d_embedding_missing_kind_false() { - let b = |id| churn_entry(id, 1, gain_ability(1), None); - let mut prior = GameState::new_two_player(7); - prior.stack.push_back(g(10)); - prior.stack.push_back(b(11)); - let mut current = GameState::new_two_player(7); - current.stack.push_back(g(20)); - current.stack.push_back(g(21)); - assert!(!loop_states_cover_modulo_growth(&prior, ¤t)); + /// A slot an OFFER would publish for `CHURN_SRC`'s entries — built through the same + /// authority the gates rebuild it with, so the rows prove the KEY matches rather than + /// asserting a hand-written literal. `index: 0` is the CR 115.2 target choice, + /// `index: 1` the CR 603.5 "may" gate. + fn churn_src_slot(state: &GameState, index: u8) -> DecisionSlot { + DecisionSlot { + source: crate::game::engine::object_decision_source(state, ObjectId(CHURN_SRC)) + .expect("fixture: the churn source is on the battlefield"), + index, + } } - /// (e) equal stacks, no strict growth ⇒ false (that is the equality case). - #[test] - fn n1_e_no_growth_false() { - let mut prior = GameState::new_two_player(7); - prior.stack.push_back(g(10)); - prior.stack.push_back(g(11)); - let current = prior.clone(); - assert!(!loop_states_cover_modulo_growth(&prior, ¤t)); + /// The published-pin channel as a P0 offer would carry it. + fn pinned_scope(slots: &[DecisionSlot]) -> LoopWindowScope<'_> { + LoopWindowScope { + phase_invariant: None, + sole_driver: None, + pinned: Some(PinnedChoices { + proposer: PlayerId(0), + slots, + }), + cast_card_ids: None, + period: None, + } } - /// (f) WIPE-PENDING (R1-B1): a distinct mandatory no-input trigger kind absent - /// from `prior` grows 0→1 at an UNOCCUPIED place ⇒ false. `W` reads no projected - /// resource, so removing the prior-occupancy guard (2b) flips this true — the - /// false win fires. - #[test] - fn n1_f_wipe_pending_unoccupied_growth_false() { - // W = a distinct-kind mandatory no-input trigger (GainLife 7, no read). - let w = |id| churn_entry(id, 0, gain_ability(7), None); - let (mut prior, mut current) = cover_base(); // [G,G] / [G,G,G] - // Rebuild current as [G,G,W]: G did not grow, W is the 0→1 new kind. - current.stack.clear(); - current.stack.push_back(g(20)); - current.stack.push_back(g(21)); - current.stack.push_back(w(22)); - let _ = &mut prior; - assert!(!loop_states_cover_modulo_growth(&prior, ¤t)); + /// An optional (CR 603.5 "may") forced-unique drain — `MayPrompt` at + /// `ability_scan.rs:6534` for exactly ONE reason, the one the offer publishes a + /// `MayChoice` point for. + fn optional_drain(id: u64) -> StackEntry { + let mut ability = lose_life_targeting(event_amount(), opp_typed(vec![])); + ability.targets = vec![TargetRef::Player(PlayerId(1))]; + ability.optional = true; + churn_entry(id, 0, ability, None) } - /// (g) PERMUTATION (R1-M3): prior `[B,A]`, current `[A,B,B]` ⇒ false (no + /// The same drain whose `MayPrompt` ALSO has a second, unpublished cause: a + /// CR 701.34a proliferate sub-ability. + fn proliferate_drain(id: u64, optional: bool) -> StackEntry { + let mut ability = lose_life_targeting(event_amount(), opp_typed(vec![])); + ability.targets = vec![TargetRef::Player(PlayerId(1))]; + ability.optional = optional; + ability.sub_ability = Some(Box::new(ResolvedAbility::new( + Effect::Proliferate, + vec![], + ObjectId(CHURN_SRC), + PlayerId(0), + ))); + churn_entry(id, 0, ability, None) + } + + /// Grow a 2-entry window to 3 of the same kind: `[e(10),e(11)] → [e(20),e(21),e(22)]`. + fn grown_window(players: u8, entry: impl Fn(u64) -> StackEntry) -> (GameState, GameState) { + let mut prior = drain_state(players); + prior.stack.push_back(entry(10)); + prior.stack.push_back(entry(11)); + let mut current = prior.clone(); + current.stack.clear(); + current.stack.push_back(entry(20)); + current.stack.push_back(entry(21)); + current.stack.push_back(entry(22)); + (prior, current) + } + + /// CR 732.2a EXTENSION POINT: a per-iteration choice the OFFER publishes is a + /// *specified* choice, not a free one, so gates (3) and (6) must stop rejecting on it — + /// and ONLY on it. Every relief runs the MINT's own per-entry acceptance test + /// (`game::engine::entry_publishes_pin_slots`), so the relief predicate cannot be + /// coarser than the mint predicate. + /// + /// SIX ARMS. Arms 1–2 are matched pairs whose only variable is `scope.pinned`; arms + /// 3–6 are the over-match controls that a coarser relief would fail. + /// * arm 1 — gate (3), 3p open targeting (two legal opponents ⇒ `auto_select => + /// Ok(None)` ⇒ NOT forced-unique). Same board as + /// `n1_open_target_growing_still_rejected`. + /// * arm 2 — gate (6), an OPTIONAL drain: `MayPrompt` caused solely by CR 603.5 + /// `optional`, the one axis the offer publishes a `MayChoice` point for. + /// * arm 3 — gate (6) NON-ATTRIBUTION: a CR 701.34a proliferate choice is NOT relieved, + /// with or without an optional gate pinned on top of it. The proliferate board is + /// `item6_still_vetoes_under_forced_unique_targets`' board. + /// * arm 4 — precondition (c): an entry the PROPOSER does not control is never relieved + /// by the proposer's pin, even when it shares the pinned source. + /// * arm 5 — gate (3) SCOPE: the relief is a `continue`, so it discharges the whole + /// item-3 predicate — but a slot answers ONE target. `multi_target` (CR 601.2c), + /// `distribution` (CR 601.2d) and `target_constraints` (CR 601.2c) are separate + /// announcement-time facts no published slot specifies, each isolated as the sole + /// rejector on a forced-unique board. Its tail row covers the fourth such fact, + /// `pending_trigger_entry` (CR 603.3c), through the cover as well, with its own + /// gate-(1) control (see there). + /// * arm 6 — gate (6) RESIDUAL: arm 2's relieved board plus an optional life + /// replacement still rejects, because a discharged CR 603.5 gate does not discharge + /// the CR 616.1 environmental surface. + /// + /// REVERT-PROBES (each measured; see the impl report): + /// * drop the `entry_target_choice_is_pinned` guard at gate (3) ⇒ arm 1's PINNED half + /// stays `false` ⇒ FAILS. + /// * drop the `pinned_may_choice_relief` arm at gate (6) ⇒ arm 2's PINNED half ⇒ FAILS. + /// * drop the residual re-classification in `pinned_may_choice_relief` (relieve whenever + /// the may slot is pinned) ⇒ arm 3's optional+proliferate half ⇒ FAILS. + /// * drop the `entry.controller != proposer` conjunct in `entry_publishes_pin_slots` + /// ⇒ arm 4 ⇒ FAILS. + /// * drop the ordering-input block in `entry_publishes_pin_slots` ⇒ arm 5's PINNED + /// half covers ⇒ FAILS (once per mutated field). + /// * turn gate (6)'s `needs_life_guard = true` re-arm back into a `continue` ⇒ arm 6 + /// covers ⇒ FAILS. + /// + /// Non-vacuity: every arm asserts BOTH directions (or pairs its negative with arm 1/2's + /// positive on the same predicate), so neither a constant-`true` nor a constant-`false` + /// relief survives. + #[test] + fn a_pinned_slot_skips_gate_three_and_six() { + // ── arm 1: gate (3), open (≥2-legal) targeting ── + let (prior, current) = grown_window(3, |id| drain_entry(id, vec![])); + + // Reach-guard: the rejector really is gate (3) on this board. + assert!( + !forced_unique_targeting(¤t, current.stack[2].ability().unwrap()), + "reach-guard: two opponents ⇒ not forced-unique ⇒ gate (3) is the rejector" + ); + assert!( + !loop_states_cover_modulo_growth_scoped( + &prior, + ¤t, + pinned_scope(&[]), + &mut PeriodVerdicts::for_period(&[], ¤t, PlayerId(0)) + ), + "UNPINNED: an open per-opponent target choice is a free choice ⇒ reject" + ); + let target_slot = churn_src_slot(¤t, 0); + assert!( + loop_states_cover_modulo_growth_scoped( + &prior, + ¤t, + pinned_scope(std::slice::from_ref(&target_slot)), + &mut PeriodVerdicts::for_period(&[], ¤t, PlayerId(0)) + ), + "PINNED: the offer published this slot ⇒ CR 732.2a specified choice ⇒ cover" + ); + + // ── arm 2: gate (6), a CR 603.5 "may" gate — the published resolution choice ── + let (p_may, c_may) = grown_window(2, optional_drain); + let may_ability = c_may.stack[2].ability().unwrap(); + // Reach-guards: gates (3) and (4) PASS here, so gate (6) is the rejector, and its + // MayPrompt is the `optional` one. + assert!( + forced_unique_targeting(&c_may, may_ability), + "reach-guard: the single opponent is forced-unique ⇒ gate (3) passes" + ); + assert!( + !crate::game::ability_scan::ability_reads_projected_resource(may_ability), + "reach-guard: gate (4) passes ⇒ gate (6) is the rejector" + ); + assert_eq!( + crate::game::resolution_prompt::ability_resolution_choice_freedom( + &c_may, + may_ability, + &mut ProbeBudget::for_test(PROBE_BUDGET) + ), + crate::game::resolution_prompt::ResolutionChoiceFreedom::MayPrompt, + "reach-guard: CR 603.5 `optional` is what makes this entry MayPrompt" + ); + assert!( + !loop_states_cover_modulo_growth_scoped( + &p_may, + &c_may, + pinned_scope(&[]), + &mut PeriodVerdicts::for_period(&[], &c_may, PlayerId(0)) + ), + "UNPINNED: an optional trigger's take/decline is a free choice ⇒ reject" + ); + let may_slots = [churn_src_slot(&c_may, 0), churn_src_slot(&c_may, 1)]; + assert!( + loop_states_cover_modulo_growth_scoped( + &p_may, + &c_may, + pinned_scope(&may_slots), + &mut PeriodVerdicts::for_period(&[], &c_may, PlayerId(0)) + ), + "PINNED: the published CR 603.5 gate specifies that choice ⇒ cover" + ); + // The MayChoice point is load-bearing on its own: pinning only the target slot + // leaves the resolution choice unspecified. + assert!( + !loop_states_cover_modulo_growth_scoped( + &p_may, + &c_may, + pinned_scope(&may_slots[..1]), + &mut PeriodVerdicts::for_period(&[], &c_may, PlayerId(0)) + ), + "a pinned TARGET does not specify the CR 603.5 take/decline choice" + ); + + // ── arm 3: gate (6) NON-ATTRIBUTION — CR 701.34a proliferate is never relieved ── + for optional in [false, true] { + let (p6, c6) = grown_window(2, |id| proliferate_drain(id, optional)); + let ability = c6.stack[2].ability().unwrap(); + assert!( + forced_unique_targeting(&c6, ability), + "reach-guard: gate (3) passes ⇒ gate (6) is the rejector (optional={optional})" + ); + assert!( + !crate::game::ability_scan::ability_reads_projected_resource(ability), + "reach-guard: gate (4) passes (optional={optional})" + ); + // Publish EVERYTHING this entry could publish — target slot and, when the + // ability is optional, its CR 603.5 gate. The proliferate choice still has no + // published pin, so no relief may be granted. + let slots = [churn_src_slot(&c6, 0), churn_src_slot(&c6, 1)]; + for pinned in [&slots[..0], &slots[..1], &slots[..]] { + assert!( + !loop_states_cover_modulo_growth_scoped( + &p6, + &c6, + pinned_scope(pinned), + &mut PeriodVerdicts::for_period(&[], &c6, PlayerId(0)) + ), + "CR 701.34a proliferate is a resolution-time choice NO published slot \ + specifies (optional={optional}, {} pinned slot(s))", + pinned.len() + ); + } + } + + // ── arm 4: precondition (c) — a non-proposer entry sharing the pinned source ── + let foreign_drain = |id| { + let mut ability = lose_life_targeting(event_amount(), opp_typed(vec![])); + ability.controller = PlayerId(1); + ability.targets = vec![TargetRef::Player(PlayerId(0))]; + churn_entry(id, 1, ability, None) + }; + let (p_foreign, c_foreign) = grown_window(3, foreign_drain); + assert!( + !forced_unique_targeting(&c_foreign, c_foreign.stack[2].ability().unwrap()), + "reach-guard: P1 has two opponents ⇒ not forced-unique ⇒ gate (3) rejects" + ); + assert_eq!( + churn_src_slot(&c_foreign, 0), + target_slot, + "the foreign entry's source is BYTE-IDENTICAL to arm 1's pinned slot — the pin \ + list cannot discriminate it, only the controller conjunct can" + ); + assert!( + !loop_states_cover_modulo_growth_scoped( + &p_foreign, + &c_foreign, + pinned_scope(std::slice::from_ref(&target_slot)), + &mut PeriodVerdicts::for_period(&[], &c_foreign, PlayerId(0)) + ), + "CR 732.2a precondition (c): P0's offer specifies none of P1's choices" + ); + + // ── arm 5: gate (3) SCOPE OF DISCHARGE ── + // The relief is a bare `continue`, so it skips the WHOLE item-3 predicate — but a + // published slot answers ONE target. Each row mutates exactly one of the other + // announcement-time facts `stack_entry_has_no_ordering_input` rejects on, on a 2p + // board where the target fact PASSES, so the mutated field is the sole rejector. + { + use crate::types::ability::MultiTargetSpec; + use crate::types::game_state::TargetSelectionConstraint; + type Mutate = fn(&mut ResolvedAbility); + let mutations: [(&str, Mutate); 3] = [ + ("multi_target — CR 601.2c variable target count", |a| { + a.multi_target = Some(MultiTargetSpec::fixed(1, 2)) + }), + ("distribution — CR 601.2d divide-among", |a| { + a.distribution = Some(vec![(TargetRef::Player(PlayerId(1)), 1)]) + }), + ("target_constraints — CR 601.2c cross-target", |a| { + a.target_constraints = vec![TargetSelectionConstraint::DifferentTargetPlayers] + }), + ]; + for (label, mutate) in mutations { + let (p5, c5) = grown_window(2, |id| { + let mut e = drain_entry(id, vec![]); + let StackEntryKind::TriggeredAbility { ability, .. } = &mut e.kind else { + unreachable!("drain_entry builds a TriggeredAbility") + }; + mutate(ability.as_mut()); + e + }); + assert!( + forced_unique_targeting(&c5, c5.stack[2].ability().unwrap()), + "reach-guard: the single opponent is forced-unique ⇒ the TARGET fact is \ + not what rejects ({label})" + ); + assert!( + !stack_entry_has_no_ordering_input(&c5, &c5.stack[2]), + "reach-guard: {label} is therefore item 3's SOLE rejector" + ); + let slot = churn_src_slot(&c5, 0); + for pinned in [&[][..], std::slice::from_ref(&slot)] { + assert!( + !loop_states_cover_modulo_growth_scoped( + &p5, + &c5, + pinned_scope(pinned), + &mut PeriodVerdicts::for_period(&[], &c5, PlayerId(0)) + ), + "a published slot specifies ONE target; {label} is announcement-time \ + ordering input no slot specifies ({} pinned)", + pinned.len() + ); + } + } + + // The FOURTH fact, `pending_trigger_entry` (CR 603.3c mid-construction), is + // state-dependent, so it lives on the relief predicate rather than in the pure + // mint — and it is REACHABLE through the cover, so the row is written there. + // Measured: `normalize_for_loop` leaves the field AS-IS, so a `current` carrying + // one that `prior` lacks does fail gate (1) — but when BOTH frames carry it, + // gate (1) passes and gate (3) is the sole rejector. Both controls below. + // (Both production call sites compare states at `WaitingFor::Priority`, where + // the field is `None`; that bounds the exposure, it does not make it + // unreachable.) + let (p_pend, c_pend) = grown_window(2, |id| drain_entry(id, vec![])); + let pend_slot = churn_src_slot(&c_pend, 0); + assert!( + loop_states_cover_modulo_growth_scoped( + &p_pend, + &c_pend, + pinned_scope(std::slice::from_ref(&pend_slot)), + &mut PeriodVerdicts::for_period(&[], &c_pend, PlayerId(0)) + ), + "positive control: this entry's published slot IS otherwise matched" + ); + let (mut p_mid, mut c_mid) = (p_pend.clone(), c_pend.clone()); + let mid = c_mid.stack[2].id; + for s in [&mut p_mid, &mut c_mid] { + s.pending_trigger_entry = Some(mid); + } + assert!( + !loop_states_cover_modulo_growth_scoped( + &p_mid, + &c_mid, + pinned_scope(std::slice::from_ref(&pend_slot)), + &mut PeriodVerdicts::for_period(&[], &c_mid, PlayerId(0)) + ), + "CR 603.3c: a mid-construction announcement is not specified by any \ + published slot — the relief must not discharge item 3's firewall" + ); + // The gate-(1) control for the row above: the SAME both-frames shape naming no + // live entry still covers, so the rejection there is gate (3), not the mere + // presence of a non-`None` field. + let (mut p_other, mut c_other) = (p_pend, c_pend); + for s in [&mut p_other, &mut c_other] { + s.pending_trigger_entry = Some(ObjectId(u64::MAX)); + } + assert!( + loop_states_cover_modulo_growth_scoped( + &p_other, + &c_other, + pinned_scope(std::slice::from_ref(&pend_slot)), + &mut PeriodVerdicts::for_period(&[], &c_other, PlayerId(0)) + ), + "gate-(1) control: a `pending_trigger_entry` naming no live entry is not \ + what rejects — CR 603.3c's firewall is entry-scoped" + ); + } + + // ── arm 6: gate (6) RESIDUAL re-arms the CR 616.1 environmental guard ── + // Arm 2's board (relief GRANTED there) plus one optional life replacement. A + // pinned CR 603.5 gate says nothing about whose life-event replacements prompt. + { + use crate::types::ability::ReplacementMode; + let (mut p_life, mut c_life) = grown_window(2, optional_drain); + let mut def = ReplacementDefinition::new(ReplacementEvent::LoseLife); + def.mode = ReplacementMode::Optional { decline: None }; + // CR 614.1a: a `valid_player`-less player-event replacement applies only + // to ITS controller's events (`replacement_source_player`). The residual + // this arm must re-arm is the drain's own `LifeLoss` on the OPPONENT + // (P1), so the def has to sit on a P1-controlled permanent to be drawn + // as a candidate at all. Measured: on a P0 permanent the same def draws + // ZERO candidates for `LifeLoss{P1}` and the arm would pass vacuously. + for state in [&mut p_life, &mut c_life] { + let oid = bf_object_owned_by(state, 812, PlayerId(1)); + state + .objects + .get_mut(&oid) + .unwrap() + .replacement_definitions + .push(def.clone()); + } + let life_loss = crate::types::proposed_event::ProposedEvent::LifeLoss { + player_id: PlayerId(1), + amount: 1, + applied: Default::default(), + }; + assert!( + crate::game::replacement::proposed_event_prompt_cause( + &c_life, + &life_loss, + crate::game::replacement::replacement_registry(), + ) + .contains(crate::game::replacement::ReplacementPromptCause::OptionalCandidate), + "reach-guard: the installed optional def makes the CR 614.1a surface \ + prompt-capable for a LifeLoss event (arm 2's bare board does not)" + ); + let slots = [churn_src_slot(&c_life, 0), churn_src_slot(&c_life, 1)]; + assert!( + !loop_states_cover_modulo_growth_scoped( + &p_life, + &c_life, + pinned_scope(&slots), + &mut PeriodVerdicts::for_period(&[], &c_life, PlayerId(0)) + ), + "the discharged `may` leaves a FreeUnlessReplacements(LIFE) RESIDUAL that must \ + re-arm the CR 616.1 guard — relief is not a `continue`" + ); + } + + // ── non-widening control: an unrelated slot relieves nothing ── + let unrelated = DecisionSlot { + source: crate::types::game_state::YieldTarget::ThisObject { + source_id: ObjectId(CHURN_SRC + 1), + incarnation: Some(0), + trigger_description: None, + }, + index: 0, + }; + for (p, c, label) in [(&prior, ¤t, "gate (3)"), (&p_may, &c_may, "gate (6)")] { + assert!( + !loop_states_cover_modulo_growth_scoped( + p, + c, + pinned_scope(std::slice::from_ref(&unrelated)), + &mut PeriodVerdicts::for_period(&[], c, PlayerId(0)) + ), + "{label}: a pin on a DIFFERENT source must not relieve this entry" + ); + } + + // ── CR 400.7 control: a stale incarnation is a different slot ── + let stale = DecisionSlot { + source: crate::types::game_state::YieldTarget::ThisObject { + source_id: ObjectId(CHURN_SRC), + incarnation: Some(u64::MAX), + trigger_description: None, + }, + index: 0, + }; + assert!( + !loop_states_cover_modulo_growth_scoped( + &prior, + ¤t, + pinned_scope(std::slice::from_ref(&stale)), + &mut PeriodVerdicts::for_period(&[], ¤t, PlayerId(0)) + ), + "CR 400.7: a pin latched to a stale incarnation does not match the live source" + ); + } + + /// CONSTRAINT-3 ORTHOGONALITY: an item-3-passing, item-4-clean forced-unique + /// drain that ALSO carries a `Proliferate` sub_ability (CR 701.34a resolution + /// choice ⇒ `MayPrompt`) is vetoed by item-6. Revert-probe: dropping the + /// Proliferate sub (choice-free) flips this TRUE (= the positive fixture). + #[test] + fn item6_still_vetoes_under_forced_unique_targets() { + let drain_prolif = |id| { + let mut ability = lose_life_targeting(event_amount(), opp_typed(vec![])); + ability.targets = vec![TargetRef::Player(PlayerId(1))]; + ability.sub_ability = Some(Box::new(ResolvedAbility::new( + Effect::Proliferate, + vec![], + ObjectId(CHURN_SRC), + PlayerId(0), + ))); + churn_entry(id, 0, ability, None) + }; + let mut prior = drain_state(2); + prior.stack.push_back(drain_prolif(10)); + prior.stack.push_back(drain_prolif(11)); + let mut current = prior.clone(); + current.stack.clear(); + current.stack.push_back(drain_prolif(20)); + current.stack.push_back(drain_prolif(21)); + current.stack.push_back(drain_prolif(22)); + + // Reach-guard (mandate 4 anti-vacuity): item-3 AND item-4 PASS for this entry, + // so the FALSE below is ATTRIBUTABLE to item-6's Proliferate veto — not an + // upstream conjunct short-circuiting first. + let ability = current.stack[2].ability().unwrap(); + assert!( + forced_unique_targeting(¤t, ability), + "item-3 passes (single forced-unique opponent) even with the Proliferate sub" + ); + assert!( + !crate::game::ability_scan::ability_reads_projected_resource(ability), + "item-4 passes (Proliferate sub scans NONE; pure-controller Typed target)" + ); + + assert!( + !loop_states_cover_modulo_growth(&prior, ¤t), + "item-6 vetoes the resolution-choice-bearing drain even when item-3/4 pass" + ); + } + + /// (c) the grown entry is a SPELL ⇒ false (not a mandatory trigger). Isolates + /// item 3's `TriggeredAbility`-only requirement. + #[test] + fn n1_c_grown_entry_spell_false() { + let spell = |id| StackEntry { + id: ObjectId(id), + source_id: ObjectId(CHURN_SRC), + controller: PlayerId(0), + kind: StackEntryKind::Spell { + card_id: CardId(1), + ability: None, + casting_variant: crate::types::game_state::CastingVariant::Normal, + actual_mana_spent: 0, + }, + }; + let mut prior = GameState::new_two_player(7); + prior.stack.push_back(spell(10)); + prior.stack.push_back(spell(11)); + let mut current = prior.clone(); + current.stack.clear(); + current.stack.push_back(spell(20)); + current.stack.push_back(spell(21)); + current.stack.push_back(spell(22)); + assert!(!loop_states_cover_modulo_growth(&prior, ¤t)); + } + + /// (d) a prior entry-kind absent from `current` ⇒ false (embedding fails). + /// prior `[G, B]`, current `[G, G]` — B (controller 1) never matches. + #[test] + fn n1_d_embedding_missing_kind_false() { + let b = |id| churn_entry(id, 1, gain_ability(1), None); + let mut prior = GameState::new_two_player(7); + prior.stack.push_back(g(10)); + prior.stack.push_back(b(11)); + let mut current = GameState::new_two_player(7); + current.stack.push_back(g(20)); + current.stack.push_back(g(21)); + assert!(!loop_states_cover_modulo_growth(&prior, ¤t)); + } + + /// (e) equal stacks, no strict growth ⇒ false (that is the equality case). + #[test] + fn n1_e_no_growth_false() { + let mut prior = GameState::new_two_player(7); + prior.stack.push_back(g(10)); + prior.stack.push_back(g(11)); + let current = prior.clone(); + assert!(!loop_states_cover_modulo_growth(&prior, ¤t)); + } + + /// (f) WIPE-PENDING (R1-B1): a distinct mandatory no-input trigger kind absent + /// from `prior` grows 0→1 at an UNOCCUPIED place ⇒ false. `W` reads no projected + /// resource, so removing the prior-occupancy guard (2b) flips this true — the + /// false win fires. + #[test] + fn n1_f_wipe_pending_unoccupied_growth_false() { + // W = a distinct-kind mandatory no-input trigger (GainLife 7, no read). + let w = |id| churn_entry(id, 0, gain_ability(7), None); + let (mut prior, mut current) = cover_base(); // [G,G] / [G,G,G] + // Rebuild current as [G,G,W]: G did not grow, W is the 0→1 new kind. + current.stack.clear(); + current.stack.push_back(g(20)); + current.stack.push_back(g(21)); + current.stack.push_back(w(22)); + let _ = &mut prior; + assert!(!loop_states_cover_modulo_growth(&prior, ¤t)); + } + + /// (g) PERMUTATION (R1-M3): prior `[B,A]`, current `[A,B,B]` ⇒ false (no /// bottom-up embedding: no A after the first B match). Revert-fail for replacing /// embedding with order-blind multiset containment. #[test] @@ -5861,7 +7914,7 @@ mod tests { } /// Fixed-amount `LoseLife` churner — allow-listed - /// (`FreeUnlessLifeReplacements`), reads no projected resource. Distinct + /// (`FreeUnlessReplacements(LIFE)`), reads no projected resource. Distinct /// normalized kind from `gain_ability`. fn lose_ability(amount: i32) -> ResolvedAbility { ResolvedAbility::new( @@ -5882,7 +7935,7 @@ mod tests { /// STRUCTURAL, not observational (the projected poison axis, CR 701.34a, can /// inhabit the option surface mid-extrapolation). Item 4 does NOT mask this: /// `scan_effect(Proliferate)` is `Axes::NONE`. Revert-fail: delete the item-6 - /// loop, or classify `Proliferate` ⇒ `FreeUnlessLifeReplacements`. + /// loop, or classify `Proliferate` ⇒ `FreeUnlessReplacements`. #[test] fn n1_o_grown_choice_opening_proliferate_false() { let p = |id| churn_entry(id, 0, proliferate_ability(), None); @@ -5953,7 +8006,8 @@ mod tests { fn with_object_def(def: ReplacementDefinition) -> (GameState, GameState) { let (mut prior, mut current) = cover_base(); for state in [&mut prior, &mut current] { - let oid = bf_object(state, 810); + // Owned by P0 — the player whose life gain these defs replace. + let oid = bf_object_owned_by(state, 810, PlayerId(0)); state .objects .get_mut(&oid) @@ -5979,12 +8033,21 @@ mod tests { { let (mut prior, mut current) = cover_base(); for state in [&mut prior, &mut current] { - let oid = bf_object(state, 811); + let oid = bf_object_owned_by(state, 811, PlayerId(0)); let obj = state.objects.get_mut(&oid).unwrap(); - obj.replacement_definitions - .push(ReplacementDefinition::new(ReplacementEvent::GainLife)); - obj.replacement_definitions - .push(ReplacementDefinition::new(ReplacementEvent::GainLife)); + // CR 616.1: ordering is a choice only when it is MATERIAL. Two + // no-op definitions COMMUTE, so the fixture must carry two + // modifications whose composition order changes the result — + // `+1` then `×2` is 4, `×2` then `+1` is 3. The def-scan this + // replaces counted definitions instead of asking the pipeline. + let mut plus = ReplacementDefinition::new(ReplacementEvent::GainLife); + plus.quantity_modification = + Some(crate::types::ability::QuantityModification::Plus { value: 1 }); + let mut times = ReplacementDefinition::new(ReplacementEvent::GainLife); + times.quantity_modification = + Some(crate::types::ability::QuantityModification::Times { factor: 2 }); + obj.replacement_definitions.push(plus); + obj.replacement_definitions.push(times); } assert!( !loop_states_cover_modulo_growth(&prior, ¤t), @@ -6007,7 +8070,7 @@ mod tests { current.stack.push_back(l(21)); current.stack.push_back(l(22)); for state in [&mut prior, &mut current] { - let oid = bf_object(state, 812); + let oid = bf_object_owned_by(state, 812, PlayerId(0)); let mut def = ReplacementDefinition::new(ReplacementEvent::PayLife); def.mode = ReplacementMode::Optional { decline: None }; state @@ -6882,8 +8945,9 @@ mod tests { let driver_scope = LoopWindowScope { phase_invariant: None, sole_driver: Some(PlayerId(0)), - pinned_slots: &[], + pinned: None, cast_card_ids: None, + period: None, }; let (subject, observer) = build(AbilityKind::Spell); @@ -6957,8 +9021,9 @@ mod tests { let driver_scope = LoopWindowScope { phase_invariant: None, sole_driver: Some(PlayerId(0)), - pinned_slots: &[], + pinned: None, cast_card_ids: None, + period: None, }; let (subject, observer) = build(Some(PlayerFilter::All)); @@ -7802,7 +9867,12 @@ mod tests { let plain = loop_states_cover_modulo_growth(prior, current); assert_eq!( plain, - loop_states_cover_modulo_growth_scoped(prior, current, LoopWindowScope::unproven()), + loop_states_cover_modulo_growth_scoped( + prior, + current, + LoopWindowScope::unproven(), + &mut PeriodVerdicts::unproven(current) + ), "loop_states_cover_modulo_growth must be its _scoped sibling at unproven()" ); plain @@ -8470,27 +10540,119 @@ mod tests { .collect() } - /// CR 704.5a / CR 704.5c / CR 104.3c + CR 121.4 + CR 732.2a: the bound's conventions, - /// case by case. Every case names the WRONG implementation it kills, so this row is a - /// battery of discriminators rather than one assertion repeated. + /// PR-7 Phase 5b (PA-2A(e)) — CR 704.5a: the MAX-vs-SUM fork in `victim_slot`'s magnitude + /// derivation, which is otherwise UNTESTED and whose wrong answer surfaces in playtesting + /// as a wrong elimination bound rather than as a failure. /// - /// P-A: the four real fixture bounds (dump B/C/D/F4) are deliberately NOT asserted here. - /// They are shipped-state values while a real `max_iterations` is computed at the OFFER - /// beat, dozens of beats later, where the lives differ — a literal measured in a - /// different state than the one under test. This row asserts the PURE FUNCTION against - /// hand-supplied lives, which is exactly what a unit row is for; every fixture row - /// computes its expectation in-test from the offer-beat state. + /// WHY IT NEEDS ITS OWN ROW: `victim_slot` is EMPTY on every trajectory that offers today + /// — dina, the ≥3p life drain and the F4 predicate all publish `points == 0` — so in + /// production `worst_seat_life_loss` is evaluated only where its value is collected into + /// an empty `Vec` and dropped. No fixture reaches the fork. Stated as a coverage hole in + /// the PR body; 5d's targeted class is its first production-path consumer. + /// + /// O4 DERIVE conformance — all THREE legs, not one: + /// 1. **DERIVED, never compared to a literal.** `m` is bound from the return value and + /// asserted only against structural invariants of the input map. No expected magnitude + /// is written in arm ⓐ, and the function is CALLED, never re-derived. + /// 2. **NON-ZERO POPULATION + a fork reach-guard.** `losses` must be non-empty (else every + /// ∀ below is vacuously true over an empty seat set) and must hold ≥2 STRICTLY POSITIVE + /// entries — which is what makes the sum strictly exceed every single seat's loss. A + /// single-seat fixture would make max and sum COINCIDE and the row would pass under + /// both derivations, i.e. the degenerate-fixture trap this leg exists to catch. + /// 3. **POSITIVE CONTROL on the same instrument.** Arms ⓑ and ⓒ assert the OPPOSITE + /// outcome (`0`) on the same function, so no constant implementation passes: ⓐ alone + /// would be satisfied by anything that always returns a large number, and ⓑ/ⓒ alone by + /// anything that always returns zero. + /// + /// MAX-vs-SUM DISCRIMINATION, structural rather than numeric. `m` is asserted to be + /// (i) an UPPER BOUND on every seat's clamped loss and (ii) ATTAINED by a seat that + /// actually LOST life. Together those two are the definition of `max` with no number + /// named. Switching the derivation to `sum` keeps (i) and breaks (ii) — no single seat + /// suffers the total of an asymmetric map (it reports 6; the seats lose 1, 2 and 3). + /// `first`/`last`/`min` break (i), because arm ⓐ's map is keyed so the first entry is the + /// proposer's GAIN and clamps to 0. `abs()` breaks (ii) in ⓐ (it reports the proposer's 5, + /// which no seat lost) and breaks ⓑ outright (it reports 7 where the contract says 0). + /// Arms ⓑ/ⓒ do NOT kill `sum` — a gain-only map sums to 0 either way; killing `sum` is + /// arm ⓐ's job alone, which is why ⓐ's asymmetry reach-guard is load-bearing. #[test] - fn elimination_bounds_conventions() { - let no_slots: BTreeMap = BTreeMap::new(); + fn worst_seat_life_loss_is_the_max_seat_never_the_sum() { + // ⓐ asymmetric multi-seat losses PLUS a proposer GAIN larger than any of them. + let mut v = life_loss_delta(&[(1, 1), (2, 3), (3, 2)]); + v.life.insert(pid(0), 5); - // (a) life 40, Δ2 ⇒ 19. Kills `floor(life / Δ)` (= 20): at 20 cycles the victim is - // at exactly 0 and CR 704.5a has already removed them mid-proposal. - // THE ONLY CASE THAT KILLS `floor(life/Δ)` — never drop it. - assert_eq!( - life_loss_delta(&[(1, 2)]).elimination_bounds(&bound_board(&[40, 40]), &[], &no_slots), - 19 - ); + let m = v.worst_seat_life_loss(); + + // O4(2): non-zero population, and the fixture really does separate max from sum. + let losses: Vec = v.life.values().map(|&n| (-n).max(0)).collect(); + assert!( + losses.iter().filter(|&&l| l > 0).count() >= 2, + "reach-guard: with fewer than two seats LOSING life the sum equals the max and \ + this row passes under either derivation, proving nothing; got {losses:?}" + ); + + // (i) UPPER BOUND — kills `first`, `last`, `min`, and any non-largest per-seat pick. + assert!( + v.life.values().all(|&n| (-n).max(0) <= m), + "CR 704.5a: a slot aimed at ANY one seat must be charged at least what that seat \ + loses per period, else the bound overstates the legal repetition count and the \ + drive can cross a threshold inside the proposal. m = {m}, losses = {losses:?}" + ); + // (ii) ATTAINED BY A LOSER — kills `sum` (no seat suffers the total) and kills + // `abs()`/gain-inclusive forms (the proposer's +5 is not a loss anyone suffers). + assert!( + v.life.iter().any(|(_, &n)| n < 0 && -n == m), + "the magnitude must be a loss some single seat actually took: `sum` reports a \ + total no seat suffers, and a gains-inclusive derivation reports the proposer's \ + own gain. m = {m}, life = {:?}", + v.life + ); + + // ⓑ POSITIVE CONTROL — the refusing value IS reachable on a NON-EMPTY map, which is + // what proves the `(-n).max(0)` clamp is doing the work rather than `unwrap_or(0)`. + let mut gains_only = ResourceVector::default(); + gains_only.life.insert(pid(0), 7); + gains_only.life.insert(pid(1), 2); + assert!( + !gains_only.life.is_empty(), + "reach-guard: an EMPTY map returns 0 through `unwrap_or`, a different arm; this \ + control is about the clamp" + ); + assert_eq!( + gains_only.worst_seat_life_loss(), + 0, + "a period in which nobody LOSES life charges nothing — 0 is the contract's \ + no-repetition sentinel, not a fixture number" + ); + + // ⓒ the empty arm, the other way to reach 0 (`max()` yields None). + assert_eq!( + ResourceVector::default().worst_seat_life_loss(), + 0, + "a delta with no life term charges nothing" + ); + } + + /// CR 704.5a / CR 704.5c / CR 104.3c + CR 121.4 + CR 732.2a: the bound's conventions, + /// case by case. Every case names the WRONG implementation it kills, so this row is a + /// battery of discriminators rather than one assertion repeated. + /// + /// P-A: the four real fixture bounds (dump B/C/D/F4) are deliberately NOT asserted here. + /// They are shipped-state values while a real `max_iterations` is computed at the OFFER + /// beat, dozens of beats later, where the lives differ — a literal measured in a + /// different state than the one under test. This row asserts the PURE FUNCTION against + /// hand-supplied lives, which is exactly what a unit row is for; every fixture row + /// computes its expectation in-test from the offer-beat state. + #[test] + fn elimination_bounds_conventions() { + let no_slots: BTreeMap = BTreeMap::new(); + + // (a) life 40, Δ2 ⇒ 19. Kills `floor(life / Δ)` (= 20): at 20 cycles the victim is + // at exactly 0 and CR 704.5a has already removed them mid-proposal. + // THE ONLY CASE THAT KILLS `floor(life/Δ)` — never drop it. + assert_eq!( + life_loss_delta(&[(1, 2)]).elimination_bounds(&bound_board(&[40, 40]), &[], &no_slots), + 19 + ); // (b) life 39, Δ2 ⇒ 19. Kills `ceil`: 38/2 = 19 exactly, so a ceiling would say 20. assert_eq!( life_loss_delta(&[(1, 2)]).elimination_bounds(&bound_board(&[40, 39]), &[], &no_slots), @@ -8804,8 +10966,9 @@ mod tests { let scope = LoopWindowScope { phase_invariant: None, sole_driver: None, - pinned_slots: &[], + pinned: None, cast_card_ids: Some(&never_cast), + period: None, }; assert!( !fire_time_conditions_read_projected_resource_scoped(&state, scope), @@ -8826,8 +10989,9 @@ mod tests { let scope = LoopWindowScope { phase_invariant: None, sole_driver: None, - pinned_slots: &[], + pinned: None, cast_card_ids: Some(&never_cast), + period: None, }; assert!( fire_time_conditions_read_projected_resource_scoped(¬_modify_cost, scope), @@ -8861,8 +11025,9 @@ mod tests { let scope = LoopWindowScope { phase_invariant: None, sole_driver: None, - pinned_slots: &[], + pinned: None, cast_card_ids: Some(&recast), + period: None, }; assert!( fire_time_conditions_read_projected_resource_scoped(&state, scope), @@ -8876,8 +11041,9 @@ mod tests { let relieved_scope = LoopWindowScope { phase_invariant: None, sole_driver: None, - pinned_slots: &[], + pinned: None, cast_card_ids: Some(&other), + period: None, }; assert!( !fire_time_conditions_read_projected_resource_scoped(&state, relieved_scope), @@ -9076,10 +11242,16 @@ mod tests { .expect("fixture .json.gz must inflate to UTF-8 JSON"); let envelope: serde_json::Value = serde_json::from_str(&json).expect("dump envelope parses as JSON"); + // Cross the dump through the PRODUCTION decoder rather than a bare `GameState` + // decode wrapped in `Raw`: `PersistedGameState`'s own `Deserialize` runs + // `reject_legacy_raw_prompt_authority` and `decode_persisted_resolution_state` + // first, so this row exercises the chokepoint the server's `from_persisted` and + // WASM's `decode_restored_game_state` actually funnel through. + // `.expect(..)`, not `?`: `into_game_state` returns `GameState`, not `Result`. let state = serde_json::from_value::( envelope["gameState"].clone(), ) - .expect("the real 4p gameState restores through the persisted ingress") + .expect("gameState deserializes through the production decoder") .into_game_state(); // ── reach-guards: the X4 subject really is present, in a never-cast-from zone ── @@ -9127,8 +11299,9 @@ mod tests { let scope = LoopWindowScope { phase_invariant: None, sole_driver: None, - pinned_slots: &[], + pinned: None, cast_card_ids: Some(&cast), + period: None, }; assert!( !fire_time_conditions_read_projected_resource_scoped(&state, scope), @@ -9145,8 +11318,9 @@ mod tests { let recast_scope = LoopWindowScope { phase_invariant: None, sole_driver: None, - pinned_slots: &[], + pinned: None, cast_card_ids: Some(&recast), + period: None, }; assert!( fire_time_conditions_read_projected_resource_scoped(&state, recast_scope), @@ -9833,7 +12007,7 @@ mod tests { // ── `sole_driver` — CR 117.1 ── let (pa, pb) = (base(), base()); assert_eq!( - window_scope_from_cover_frames(&pa, &pb, &[]).sole_driver, + window_scope_from_cover_frames(&pa, &pb, None, None).sole_driver, Some(PlayerId(0)), "PAIRED POSITIVE: a homogeneous single-driver window proves CR 117.1's premise" ); @@ -9843,7 +12017,7 @@ mod tests { let mut pb_other = base(); pb_other.last_loop_action_sequence = vec![ctx(1)]; assert_eq!( - window_scope_from_cover_frames(&pa, &pb_other, &[]).sole_driver, + window_scope_from_cover_frames(&pa, &pb_other, None, None).sole_driver, None, "(s2) a two-controller window proves nothing about who holds priority" ); @@ -9852,7 +12026,7 @@ mod tests { let mut pa_mixed = base(); pa_mixed.last_loop_action_sequence = vec![ctx(0), ctx(1)]; assert_eq!( - window_scope_from_cover_frames(&pa_mixed, &pb, &[]).sole_driver, + window_scope_from_cover_frames(&pa_mixed, &pb, None, None).sole_driver, None, "(s2) an interleaved sequence is fail-closed" ); @@ -9861,14 +12035,14 @@ mod tests { let mut pb_empty = base(); pb_empty.last_loop_action_sequence.clear(); assert_eq!( - window_scope_from_cover_frames(&pa, &pb_empty, &[]).sole_driver, + window_scope_from_cover_frames(&pa, &pb_empty, None, None).sole_driver, None, "(s1) an empty driving sequence is NO PROOF, so it cannot relieve anything" ); // ── `phase_invariant` — CR 500.1 / CR 506.1 / CR 500.8 ── assert_eq!( - window_scope_from_cover_frames(&pa, &pb, &[]).phase_invariant, + window_scope_from_cover_frames(&pa, &pb, None, None).phase_invariant, Some(Phase::PreCombatMain), "PAIRED POSITIVE: agreeing frames with no extra phase prove the window's phase" ); @@ -9885,7 +12059,7 @@ mod tests { attacker_restriction_source: None, }); assert_eq!( - window_scope_from_cover_frames(&pa, &pb_extra, &[]).phase_invariant, + window_scope_from_cover_frames(&pa, &pb_extra, None, None).phase_invariant, None, "(p3) CR 500.8: a pending extra phase breaks `equal phase ⇒ never left it`" ); @@ -9894,7 +12068,7 @@ mod tests { let mut pb_turn = base(); pb_turn.turn_number = 14; assert_eq!( - window_scope_from_cover_frames(&pa, &pb_turn, &[]).phase_invariant, + window_scope_from_cover_frames(&pa, &pb_turn, None, None).phase_invariant, None, "(p1) frames from different turns bound nothing about one window's phase" ); @@ -9903,9 +12077,4216 @@ mod tests { let mut pb_phase = base(); pb_phase.phase = Phase::PostCombatMain; assert_eq!( - window_scope_from_cover_frames(&pa, &pb_phase, &[]).phase_invariant, + window_scope_from_cover_frames(&pa, &pb_phase, None, None).phase_invariant, None, "(p2) a window that crosses a phase boundary is not phase-invariant" ); } + /// CR 732.2a — `ring_delta_signature`'s "seen TWICE" contract, at the building-block + /// level: five arms over synthetically-built rings, so every input shape the function can + /// meet is exercised rather than whichever one a fixture happens to produce. + /// + /// `k` is an OUTPUT here, exactly as O4 requires of production: no period constant exists + /// in the function, and the only numbers in this row are the periods THIS TEST + /// CONSTRUCTED. Comparing a derived period against a constructed one is the discriminator + /// for "smallest repeating period"; it is not fixture-brittleness, because the input is + /// built two lines above the assertion. + /// + /// PRODUCTION-PATH COMPANIONS, both in `tests/integration/loop_shortcut.rs`: + /// `bounded_offer_on_a_within_turn_draw_drain_is_basis_b`, where the ENGINE writes a + /// basis-B offer whose published `frames_per_period != 1` on a within-turn draw↔drain + /// cascade; and `dina_untargeted_drain_4p_offers_at_three_live_opponents`, measured to + /// certify through this function with a derived `k == 1` on a REAL 4-player dump (see that + /// row's doc for the two measurements, and for why a `k == 1` basis-B offer is + /// indistinguishable from a basis-A one in the published payload). + /// + /// RETRACTION, kept on the record: this doc previously named + /// `fantastic_four_bounded_loop_4p` as that companion, "a DERIVED `k == 2` and a bound of + /// 35". Both numbers reproduce, and the reading was wrong — measured, F4's δ carries + /// `library -1` for ALL FOUR players and its certifying frames sit at turns + /// `[5, 9, 9, 13, 13]`, so the "period" is one 4-player TURN CYCLE (CR 703.4d: only the + /// active player draws in a draw step) and the "35" is 35 turn cycles, not 35 loop + /// iterations. That certificate is the same artifact as the drawgo false positive, which + /// is why `ring_delta_signature` now refuses it outright. + /// + /// REVERT-PROBES, each flipping a DIFFERENT arm so none dominates another: + /// * accept a period seen ONCE (search `k` up to `frames - 1` and compare only one + /// window) ⇒ arm ⓐ's `None` at 2 frames becomes `Some` ⇒ FAILS. + /// * drop the zero-delta refusal ⇒ arm ⓓ returns `Some` ⇒ FAILS. + /// * scan the OLDEST `2k` deltas instead of the most recent ⇒ arm ⓔ (a ring whose old + /// stretch repeats and whose recent stretch does not) returns `Some` ⇒ FAILS. + /// * take the LARGEST repeating `k` instead of the smallest ⇒ arm ⓑ returns `k = 2` for a + /// constant-delta ring ⇒ FAILS. + /// * delete the CR 703.1 turn-position conjunct ⇒ arm ⓕ returns `Some` ⇒ FAILS. + #[test] + fn ring_delta_signature_certifies_only_a_period_seen_twice() { + /// A ring whose frames carry the given life totals for P1, in order. Everything else + /// is held identical, so the frame-deltas are exactly the successive differences. + fn ring_of(lives: &[i32]) -> GameState { + let mut state = GameState::new_two_player(0); + for &life in lives { + let mut frame = GameState::new_two_player(0); + frame.players[1].life = life; + // Both halves built exactly as `record_loop_detect_sample` builds them, so + // the fixture cannot diverge from production's construction. + state.loop_detect_ring.push_back(std::sync::Arc::new( + crate::types::LoopDetectSample { + normalized: frame.normalize_for_loop(), + live: frame.loop_detect_live_sample(), + }, + )); + } + state + } + + // ⓐ REFUSING: 2 frames is one delta — a period seen ONCE. `2k + 1 = 3` is the + // threshold at the smallest possible `k`, and it is an EXPRESSION, never a literal + // in the function. + let short = ring_of(&[40, 39]); + assert_eq!( + short.loop_detect_ring.len(), + 2, + "reach-guard on the built ring" + ); + assert_eq!( + ring_delta_signature(&short), + None, + "a period observed once is a coincidence; certifying it would let an offer be \ + minted off a single frame pair" + ); + + // ⓑ POSITIVE CONTROL, same shape one frame longer: the instrument provably returns + // `Some`, so ⓐ is not a function that always refuses. + let steady = ring_of(&[40, 39, 38]); + let (k, delta) = ring_delta_signature(&steady) + .expect("three frames observe a 1-frame period TWICE, which is the contract"); + assert_eq!( + k, 1, + "the SMALLEST repeating period, derived — a constant per-frame delta has period 1" + ); + // Bound to a local rather than inlined: `2k + 1` is the CONTRACT expression (2k deltas + // ⇒ the period was observed twice), and clippy's `int_plus_one` would otherwise push it + // to a `> 2k` that no longer reads as the rule. + let frames_needed = 2 * k as usize + 1; + assert!( + steady.loop_detect_ring.len() >= frames_needed, + "the structural invariant every certified period satisfies: 2k+1 frames" + ); + assert_ne!( + delta, + ResourceVector::default(), + "a certified period moves some resource" + ); + assert_eq!( + delta.life.get(&PlayerId(1)).copied(), + Some(-1), + "and the published delta is the one measured across ONE period" + ); + + // ⓒ a 2-frame period, seen twice: 5 frames. The derived `k` must be the constructed + // one, and the delta must span the WHOLE period, not one frame of it. + let period_two = ring_of(&[40, 39, 36, 35, 32]); + let (k2, delta2) = ring_delta_signature(&period_two) + .expect("(-1, -3) repeated twice over 5 frames is a period seen twice"); + assert_eq!( + k2, 2, + "derived from the ring, and equal to the period this test BUILT two lines above" + ); + assert_eq!( + delta2.life.get(&PlayerId(1)).copied(), + Some(-4), + "one whole period is -1 + -3, not either half" + ); + + // ⓓ a ring that repeats perfectly but moves NOTHING: no CR 704 threshold to bound, so + // no signature. Without this the offer's bound would be the safety cap. + let flat = ring_of(&[40, 40, 40, 40, 40]); + assert_eq!( + ring_delta_signature(&flat), + None, + "a zero-delta cycle states no threshold; every multiple of a zero period is zero \ + too, which is why this refuses outright rather than searching on" + ); + + // ⓕ the CR 703.1 turn-position conjunct, at the building-block level: the SAME ring as + // ⓑ, with only the newest frame's turn number moved on. Nothing about the deltas + // changes (`ResourceVector::snapshot` never reads `turn_number` or `phase`), so a + // `None` here is attributable to the conjunct alone. + let mut turn_crossing = ring_of(&[40, 39, 38]); + { + let last = turn_crossing + .loop_detect_ring + .back_mut() + .expect("the ring was just built with three frames"); + // `.normalized` is the half the subject reads (`ring_delta_signature` → + // `window_scope_from_cover_frames`). Retargeting this to `.live` makes the + // subject see no turn crossing ⇒ `Some` ⇒ the `assert_eq!(.., None, ..)` below + // FAILS LOUDLY. That is the arm working, not a reason to weaken the assertion. + std::sync::Arc::make_mut(last).normalized.turn_number += 1; + } + assert_eq!( + ring_delta_signature(&turn_crossing), + None, + "a period paved by a turn boundary is the game advancing, not a CR 732.2a loop — \ + the board-blind basis must refuse it (the ⓑ ring differs from this one in \ + `turn_number` and nothing else)" + ); + + // ⓔ the OLD stretch repeats, the RECENT one does not. A scan anchored at the oldest + // deltas would certify a period the loop is no longer running. + let stale = ring_of(&[40, 39, 38, 37, 30]); + assert_eq!( + ring_delta_signature(&stale), + None, + "the certified period must be the one the loop is running NOW: the most recent \ + 2k deltas are (-1, -7) at k=1 and (-1,-1),(-1,-7) at k=2, neither of which repeats" + ); + } + + /// CR 703.1 / CR 732.2a — the PRODUCTION-DRIVEN half of the turn-position conjunct: on a + /// board with NO loop at all, the game's own turn structure is exactly periodic in the + /// resource axes basis B reads, and this row asserts the board-blind basis derives no + /// signature from it at any beat. + /// + /// HOME. This lives in `resource.rs`'s unit module and NOT in + /// `tests/integration/loop_shortcut.rs` because `ring_delta_signature` is `pub(crate)`: + /// an integration test is a separate crate and cannot name it. The only alternative — a + /// re-derivation of the period search inside the test — is prohibited: it would be a + /// second copy of the very algorithm this row exists to pin, and it would stay green + /// while production drifted. What is copied here is a test HARNESS (the drawgo fixture + /// builder from `drawgo_ring_spans_turns_but_never_offers` and a beat driver), never the + /// thing under test, which is CALLED. + /// + /// FIXTURE, loop-free by construction: P0 has an upkeep ticker, a drain cleric and a + /// "may draw" scribe. Each of P0's upkeeps runs a FINITE 3-deep cascade — nothing + /// re-triggers the ticker — yet the per-turn shape is drain-like, which is exactly what a + /// board-blind periodicity test mistakes for a loop. MEASURED, on this tree: with the + /// conjunct absent the engine minted offers on this board (the sibling integration row + /// `drawgo_ring_spans_turns_but_never_offers` failed on its `offer_at.is_none()` + /// assertion); with it, that row is green and a seam probe over 400 beats counts ZERO + /// engine offers. + /// + /// THE FLATTEN ARM discharges two obligations at once, on the SAME trajectory and the + /// SAME ring, with exactly ONE axis neutralized: + /// * NON-ZERO POPULATION — a `∀ beats: is_none()` over an empty beat set is vacuously + /// true, so the row must prove its quantifier ranged over beats where a signature was + /// actually derivable. `flattened_some > 0` is that proof. + /// * SAME-TRAJECTORY POSITIVE CONTROL — the instrument is shown returning the + /// non-refusing value on drawgo's own data, so the `None`s above are a measured refusal + /// rather than an inert instrument. + /// * ATTRIBUTION — `ResourceVector::snapshot` reads life / library / poison / energy / + /// mana / battlefield counters / `combat_phases_started_this_turn` / `extra_phases`, and + /// never `turn_number` or `phase`, so δ and the derived `k` are unchanged by the + /// flattening and the `None` → `Some` flip is attributable to the turn-position + /// conjunct alone. + /// + /// MEASURED on this tree: 253 of the 300 driven beats hold >= 3 frames, and the flatten + /// arm derives a signature at **225** of them, over 22 turns. + /// + /// REVERT-PROBE (must FLIP): delete the CR 703.1 conjunct from `ring_delta_signature` ⇒ + /// the `is_none()` assertion fires on the first signature-bearing beat. + #[test] + fn drawgo_turn_structure_yields_no_basis_b_signature() { + use crate::game::scenario::GameScenario; + use crate::types::actions::GameAction; + use crate::types::game_state::{LoopDetectionMode, WaitingFor}; + + /// One beat of the shared dump drive policy (`tests/integration/loop_shortcut.rs`'s + /// `dump_drive_one_beat`): at `Priority` always pass — the mandatory triggers resolve + /// and re-trigger, which IS the loop when there is one — and otherwise take the first + /// legal non-terminal action. + fn drive_one_beat(state: &mut GameState) -> Result<(), String> { + let actor = state + .waiting_for + .acting_player() + .into_iter() + .chain(state.players.iter().map(|p| p.id)) + .find_map(|p| { + let (actions, _costs, _grouped) = + crate::ai_support::legal_actions_for_viewer(state, p); + (!actions.is_empty()).then_some((p, actions)) + }); + let Some((who, actions)) = actor else { + return Err(format!("no legal actor at {:?}", state.waiting_for)); + }; + let forbidden = + |a: &GameAction| matches!(a, GameAction::Concede { .. } | GameAction::Debug(_)); + let chosen = if matches!(state.waiting_for, WaitingFor::Priority { .. }) { + actions + .iter() + .find(|a| matches!(a, GameAction::PassPriority)) + } else { + actions + .iter() + .find(|a| !matches!(a, GameAction::PassPriority) && !forbidden(a)) + .or_else(|| actions.iter().find(|a| !forbidden(a))) + }; + let Some(action) = chosen.cloned() else { + return Err(format!("empty action list at {:?}", state.waiting_for)); + }; + crate::game::engine::apply(state, who, action.clone()) + .map(|_| ()) + .map_err(|e| format!("apply err ({action:?}): {e:?}")) + } + + let mut scenario = GameScenario::new_n_player(2, 7); + scenario.at_phase(Phase::PreCombatMain); + scenario.with_life(PlayerId(0), 20); + scenario.with_life(PlayerId(1), 20); + scenario.add_creature_from_oracle( + PlayerId(0), + "Test Upkeep Ticker", + 2, + 2, + "At the beginning of your upkeep, you gain 1 life.", + ); + scenario.add_creature_from_oracle( + PlayerId(0), + "Test Drain Cleric", + 2, + 2, + "Whenever you gain life, each opponent loses 1 life.", + ); + scenario.add_creature_from_oracle( + PlayerId(0), + "Test May Scribe", + 2, + 2, + "Whenever an opponent loses life, you may draw a card.", + ); + // CR 504.1: both players draw every turn, so the libraries must outlast the drive — a + // deck-out would end the game and silently truncate every assertion below. + let names: Vec = (0..60).map(|i| format!("Filler {i}")).collect(); + let refs: Vec<&str> = names.iter().map(|s| s.as_str()).collect(); + scenario.with_library_top(PlayerId(0), &refs); + scenario.with_library_top(PlayerId(1), &refs); + let mut runner = scenario.build(); + runner.state_mut().loop_detection = LoopDetectionMode::Interactive; + let mut state = runner.state().clone(); + + assert!( + state.loop_detection.samples(), + "reach-guard: a non-sampling mode never populates the ring, which would make the \ + per-beat `is_none()` below vacuous; got {:?}", + state.loop_detection + ); + assert_eq!( + state.loop_detect_ring.len(), + 0, + "reach-guard: every frame the assertions below read was accumulated by THIS drive" + ); + + let mut long_ring_beats = 0usize; + let mut flattened_some = 0usize; + let mut turns_seen: Vec = Vec::new(); + for beat in 0..300usize { + if !turns_seen.contains(&state.turn_number) { + turns_seen.push(state.turn_number); + } + // 2k + 1 at the smallest derivable k: below three frames the refusal is the + // short-ring one, which says nothing about turn position. + if state.loop_detect_ring.len() >= 3 { + long_ring_beats += 1; + assert_eq!( + ring_delta_signature(&state), + None, + "beat {beat} (turn {}, {} frames): this board has no loop — each upkeep \ + runs a FINITE cascade and nothing re-triggers the ticker — so the \ + board-blind basis must derive no period from the game's own turn \ + structure", + state.turn_number, + state.loop_detect_ring.len() + ); + + // Same trajectory, same ring, ONE axis neutralized. + let mut flat = state.clone(); + for frame in flat.loop_detect_ring.iter_mut() { + // `.normalized` is the half the subject reads. Writing `.live` instead + // leaves the axis un-flattened ⇒ `flattened_some == 0` ⇒ the shipped + // `assert!(flattened_some > 0, ..)` below FAILS LOUDLY. + let f = &mut std::sync::Arc::make_mut(frame).normalized; + f.turn_number = 1; + f.phase = Phase::Upkeep; + } + if ring_delta_signature(&flat).is_some() { + flattened_some += 1; + } + } + if drive_one_beat(&mut state).is_err() { + break; + } + } + + assert!( + turns_seen.len() >= 3, + "reach-guard: the drive must cross at least two full turn boundaries for a \ + turn-position claim to mean anything; saw turns {turns_seen:?}" + ); + assert!( + long_ring_beats > 0, + "reach-guard: the ∀ above ranged over ZERO beats holding 2k+1 frames, so it was \ + vacuously true" + ); + assert!( + flattened_some > 0, + "O4(2) + O4(3): with `turn_number` and `phase` flattened on a clone of THIS \ + trajectory's own ring — and nothing else changed — a signature must appear at \ + some beat. It appeared at {flattened_some} of {long_ring_beats} long-ring beats. \ + A zero here would mean the `None`s above are attributable to a short ring or a \ + non-repeating delta rather than to the CR 703.1 conjunct, and the row would not \ + be sound" + ); + } + + /// CR 732.2a — `PeriodicDelta` rides `WaitingFor::LoopShortcut` over the wire, so the + /// whole payload must survive `serde_json`. TWO map-key hazards, both real: a + /// `ResourceVector.counters` key is the `(CounterClass, ObjectClass)` TUPLE, and a + /// `BTreeMap` keyed by `DecisionSlot` (a struct) would be the same failure — which is + /// why `victim_slot` is a `Vec` of pairs and not a map at all. + /// + /// The runtime symptom of getting this wrong is NOT a soft failure: + /// `crates/engine-wasm/src/lib.rs`'s serializer `panic!`s on the error, i.e. a browser + /// crash. + /// + /// ARM (ii) ALONE WOULD PASS AGAINST A BROKEN MAP — an empty map serializes fine + /// whatever its key type. Arm (i) is what discriminates, and both are asserted here. + /// + /// ⚠ **THIS ROW IS NOT SUFFICIENT ON ITS OWN, and its green was once read as if it + /// were.** It uses `to_string`/`from_str` throughout, and that combination was measured + /// `Ok` even against an UNADAPTED `PlayerId`-keyed map. The production persistence path + /// degrades to `serde_json::Value` + `from_value` inside `PersistedGameState`, where + /// serde's `Content` buffering stringifies map keys and a `PlayerId` key breaks. + /// `a_populated_per_cycle_proposal_survives_the_production_persistence_boundary` is the + /// row that covers that; keep BOTH, they discriminate different failures. + /// + /// REVERT-PROBES: drop `#[serde(with = "map_key_pairs")]` from + /// `ResourceVector.counters` ⇒ arm (i) and the payload arm both fail with "key must be a + /// string"; change `PeriodicDelta.victim_slot` to a `BTreeMap` ⇒ same. + /// MUST-NOT-FLIP: a `LoopShortcut` payload with `per_cycle: None` stays byte-identical + /// (`skip_serializing_if`), asserted in the third block. + #[test] + fn periodic_delta_survives_the_serde_json_wire() { + use crate::analysis::decision_template::{DecisionSlot, ShortcutDecisionSchema}; + use crate::analysis::loop_check::{LoopCertificate, WinKind}; + use crate::types::game_state::{WaitingFor, YieldTarget}; + + let slot = DecisionSlot { + source: YieldTarget::ThisObject { + source_id: ObjectId(403), + incarnation: Some(7), + trigger_description: None, + }, + index: 0, + }; + + // (i) POPULATED — a non-empty tuple-keyed `counters` map is the discriminating input. + let mut delta = ResourceVector::default(); + delta.life.insert(PlayerId(1), -3); + delta.life.insert(PlayerId(0), 3); + delta + .counters + .insert((CounterClass::Plus1Plus1, ObjectClass::Creature), 2); + delta + .counters + .insert((CounterClass::Poison, ObjectClass::Player), 1); + delta.generic_triggers.insert(TriggerKind::Proliferate, 4); + assert!( + !delta.counters.is_empty() && !delta.life.is_empty(), + "reach-guard: arm (i) is only discriminating while `counters` is NON-EMPTY — an \ + empty map round-trips whatever the key type" + ); + let populated = PeriodicDelta { + frames_per_period: 2, + delta, + victim_slot: vec![(slot.clone(), 1)], + }; + let json = serde_json::to_string(&populated) + .expect("a populated PeriodicDelta must serialize (engine-wasm PANICS otherwise)"); + assert_eq!( + serde_json::from_str::(&json).expect("and round-trip"), + populated + ); + + // (ii) EMPTY — the degenerate arm, kept only so the pair is visible. + let empty = PeriodicDelta::default(); + let empty_json = serde_json::to_string(&empty).expect("an empty PeriodicDelta too"); + assert_eq!( + serde_json::from_str::(&empty_json).expect("and round-trip"), + empty + ); + + // The ACTUAL wire payload: the `WaitingFor` variant that carries it. + let cert = LoopCertificate { + unbounded: vec![], + win_kind: WinKind::LethalDamage, + mandatory: false, + residual_board_delta: BoardDelta::default(), + per_cycle: Some(populated), + }; + let offer = WaitingFor::LoopShortcut { + proposer: PlayerId(0), + predicted_winner: None, + certificate: cert.clone(), + schema: ShortcutDecisionSchema::default(), + }; + let offer_json = + serde_json::to_string(&offer).expect("the LoopShortcut payload carrying it must too"); + assert_eq!( + serde_json::from_str::(&offer_json).expect("and round-trip"), + offer + ); + + // MUST-NOT-FLIP: `skip_serializing_if` keeps the shipped payload byte-identical — + // `per_cycle` appears nowhere in the JSON of an offer that states none. + let shipped = WaitingFor::LoopShortcut { + proposer: PlayerId(0), + predicted_winner: None, + certificate: LoopCertificate { + per_cycle: None, + ..cert + }, + schema: ShortcutDecisionSchema::default(), + }; + let shipped_json = serde_json::to_string(&shipped).expect("serializes"); + assert!( + !shipped_json.contains("per_cycle"), + "an offer stating no per-period signature must be byte-identical to BASE; got \ + {shipped_json}" + ); + } + + /// CR 616.1 — an EMPTY derivation must not discharge the replacement obligation. + /// + /// `resolution_events_are_discharged` answers `FreeUnlessReplacements(events)` with + /// `!events.iter().any(..)`, and `any()` over an empty slice is `false`, so `!any(..)` + /// is `true`: an empty vector certified the entry having inspected NOTHING. The only + /// thing standing against that was a `debug_assert!`, which compiles out of release — + /// so the fail-open case was live in exactly the build that ships, and was untestable + /// besides (a `debug_assert!` aborts the build tests run in). + /// + /// MATCHED PAIR: + /// * EMPTY ⇒ `false` (refuse). This is the arm the fix adds. + /// * NON-EMPTY, no applicable replacement ⇒ `true` (discharge). Without it the row + /// would pass against a predicate that simply returned `false` always. + /// + /// `MayPrompt ⇒ false` is asserted alongside so all three arms of the match are pinned. + /// + /// REVERT-PROBE (run, recorded): delete the `if events.is_empty() { return false; }` + /// arm ⇒ the EMPTY case FLIPS TO `true` and this row FAILS, while the non-empty arms + /// stay green. + #[test] + fn an_empty_derivation_does_not_vacuously_discharge_the_cr_616_1_obligation() { + use crate::game::resolution_prompt::ResolutionChoiceFreedom; + + let board = GameState::new_two_player(7); + + assert!( + !resolution_events_are_discharged( + &board, + ResolutionChoiceFreedom::FreeUnlessReplacements(Vec::new()) + ), + "an EMPTY derivation proves nothing about CR 616.1 replacements and must \ + REFUSE — `!any()` over an empty slice is `true`, which is the fail-open \ + direction this predicate exists to prevent" + ); + + // POSITIVE CONTROL — a real event on a board with no applicable replacement still + // discharges, so the refusal above is about EMPTINESS and not a blanket `false`. + let non_empty = vec![crate::types::proposed_event::ProposedEvent::LifeLoss { + player_id: PlayerId(0), + amount: 1, + applied: Default::default(), + }]; + assert!( + crate::game::replacement::proposed_event_prompt_cause( + &board, + &non_empty[0], + crate::game::replacement::replacement_registry(), + ) + .is_empty(), + "reach-guard: the control event must have NO applicable replacement on this \ + board, or it would refuse for the wrong reason" + ); + assert!( + resolution_events_are_discharged( + &board, + ResolutionChoiceFreedom::FreeUnlessReplacements(non_empty) + ), + "a NON-EMPTY derivation with no applicable replacement must still discharge" + ); + + // The third arm, pinned so the match stays exhaustively covered. + assert!( + !resolution_events_are_discharged(&board, ResolutionChoiceFreedom::MayPrompt), + "MayPrompt is never discharged" + ); + } + + /// CR 732.2a — the PRODUCTION persistence path for a proposal that carries a per-cycle + /// signature. The row above is NOT a substitute and its green was FALSE CONFIDENCE: it + /// round-trips with `to_string`/`from_str`, and that combination was measured `Ok` even + /// against the unadapted map. The failure needs the enclosing shape: + /// + /// * `WaitingFor` is `#[serde(tag = "type", content = "data")]`, so serde buffers the + /// payload through its private `Content`, which stringifies every map KEY; + /// * `PlayerId` is `#[serde(transparent)]` over `u8`, so it then reads a string where it + /// wants an integer; + /// * `PersistedGameState::deserialize` routes EVERY decode through `serde_json::Value` + /// and `from_value` — including the production WASM restore, whose outer call is + /// `from_str::`. So `from_str` at the boundary does NOT save it. + /// + /// This row therefore drives `to_value`/`from_value` and the real + /// `PersistedGameState` boundary, with a POPULATED `PlayerId`-keyed map, which is the + /// only combination that discriminates. + /// + /// REVERT-PROBE (run, recorded): delete `#[serde(with = "map_key_pairs")]` from + /// `ResourceVector::life` ⇒ arms (i) and (ii) FAIL with + /// `invalid type: string "0", expected u8`, the exact text + /// `tests/integration/loop_shortcut.rs` had recorded as a standing limitation. + /// REACH-GUARD: the map is asserted non-empty before the round trip — an empty map + /// round-trips whatever its key type, so a populated one is what makes this row real. + #[test] + fn a_populated_per_cycle_proposal_survives_the_production_persistence_boundary() { + use crate::analysis::decision_template::IterationCount; + use crate::analysis::loop_check::{ShortcutProposal, WinKind}; + use crate::types::game_state::{PersistedGameState, WaitingFor}; + + let mut delta = ResourceVector::default(); + delta.life.insert(PlayerId(0), 3); + delta.life.insert(PlayerId(1), -3); + delta.damage_dealt.insert(PlayerId(1), 3); + delta.library_delta.insert(PlayerId(0), -1); + delta.poison.insert(PlayerId(1), 1); + delta + .counters + .insert((CounterClass::Plus1Plus1, ObjectClass::Creature), 2); + delta.generic_triggers.insert(TriggerKind::Proliferate, 4); + assert!( + !delta.life.is_empty() + && !delta.damage_dealt.is_empty() + && !delta.library_delta.is_empty() + && !delta.poison.is_empty(), + "reach-guard: all four `PlayerId`-keyed maps must be NON-EMPTY, or this row \ + passes against a broken key type" + ); + let proposal = ShortcutProposal { + proposer: PlayerId(0), + predicted_winner: Some(PlayerId(0)), + count: IterationCount::UntilLethal, + unbounded: vec![], + win_kind: WinKind::LethalDamage, + template: None, + per_cycle: Some(PeriodicDelta { + frames_per_period: 2, + delta, + victim_slot: vec![], + }), + }; + let wait = WaitingFor::RespondToShortcut { + player: PlayerId(1), + remaining_players: vec![], + proposal: proposal.clone(), + }; + + // (i) The precise mechanism: adjacently-tagged `WaitingFor` through `Value`. + let value = serde_json::to_value(&wait).expect("the wait serializes"); + assert_eq!( + serde_json::from_value::(value).expect( + "a populated per-cycle proposal must survive `from_value` — this is the \ + combination `Content` key-stringification breaks" + ), + wait + ); + + // (ii) The PRODUCTION boundary: whole state through `PersistedGameState`, both the + // outer API the WASM bridge uses (`from_str`) and the `Value` form it degrades to. + let mut state = GameState::new_two_player(7); + state.waiting_for = wait.clone(); + let raw = serde_json::to_value(&state).expect("the state serializes"); + let restored = serde_json::from_value::(raw.clone()) + .expect("decodes through the production persistence boundary") + .into_game_state(); + assert_eq!( + restored.waiting_for, wait, + "the restored wait must carry the SAME per-cycle signature, not a dropped or \ + emptied one" + ); + let text = serde_json::to_string(&raw).expect("serializes to text"); + let via_str = serde_json::from_str::(&text) + .expect("and through the WASM bridge's own `from_str::`") + .into_game_state(); + assert_eq!(via_str.waiting_for, wait); + + // (iii) MUST-NOT-FLIP: a proposal stating no signature stays absent from the wire. + let none = ShortcutProposal { + per_cycle: None, + ..proposal + }; + let none_json = serde_json::to_string(&none).expect("serializes"); + assert!( + !none_json.contains("per_cycle"), + "`skip_serializing_if` must keep a signature-free proposal byte-identical to \ + BASE; got {none_json}" + ); + } + + // ── PR-7 Phase 5c: the DRAW verdict's paired CR 616.1 obligation ── + + /// A mandatory, non-"up to" `Effect::Draw` trigger — the starved shape the + /// `FreeUnlessReplacements(DRAW)` arm claims. + fn draw_entry(id: u64) -> StackEntry { + churn_entry( + id, + 0, + ResolvedAbility::new( + Effect::Draw { + count: QuantityExpr::Fixed { value: 1 }, + target: TargetFilter::Controller, + }, + vec![], + ObjectId(CHURN_SRC), + PlayerId(0), + ), + None, + ) + } + + fn with_replacements(entry: StackEntry, defs: &[ReplacementDefinition]) -> GameState { + let mut state = GameState::new_two_player(7); + state.stack.push_back(entry); + // Owned by P0 — the player whose draw these defs are meant to replace + // (CR 614.1 scopes a def to its controller's events). + let oid = bf_object_owned_by(&mut state, 900, PlayerId(0)); + let object = state.objects.get_mut(&oid).expect("just inserted"); + for def in defs { + object.replacement_definitions.push(def.clone()); + } + state + } + + fn repl(event: ReplacementEvent, optional: bool) -> ReplacementDefinition { + let is_draw = matches!(event, ReplacementEvent::Draw); + let mut def = ReplacementDefinition::new(event); + if optional { + def.mode = crate::types::ability::ReplacementMode::Optional { decline: None }; + } + // CR 121.2: a Draw definition MUST declare whether it modifies the + // instruction's count or replaces one individual draw. The pipeline + // debug-asserts on a definition that declares neither; the def-scan this + // replaces never ran the pipeline, so the fixture could omit it. + if is_draw { + def.draw_scope = Some(crate::types::ability::DrawReplacementScope::IndividualDraw); + } + // CR 616.1: ordering is a player choice only when it is MATERIAL. Two + // no-op definitions commute, so a fixture built to exercise the ordering + // prompt must carry a modification whose composition order matters. The + // def-scan this replaces counted definitions instead of asking. + def.quantity_modification = + Some(crate::types::ability::QuantityModification::Plus { value: 1 }); + def + } + + /// The board is bound ONCE and handed to both the predicate and the container it is + /// asked through. That is not a style choice: `PeriodVerdicts::frame_ix` resolves a + /// frame by POINTER IDENTITY, so building the container from a second, equal-valued + /// `GameState` would be a frame the container does not hold and the predicate would + /// fail closed — which is exactly the production guard doing its job, and exactly the + /// vacuity a copy-pasted expression would introduce here. + fn specified_on(board: &GameState) -> bool { + stack_choices_are_all_specified( + board, + PlayerId(0), + &[], + None, + &mut PeriodVerdicts::for_period(&[], board, PlayerId(0)), + ) + } + + /// CR 616.1 + CR 121.1: the draw verdict's environmental obligation is REAL (it can + /// reject) and CLASS-SCOPED (it rejects only on its own event class). + /// + /// Every arm is paired with the control that makes it non-vacuous: the bare board + /// arm proves a mandatory draw entry reaches and PASSES step (6) at all — without it + /// the three `false` arms would be indistinguishable from "draws are still refused + /// upstream" — and the cross-class arms prove the parameterization is load-bearing + /// rather than a rename of a guard that scans everything. + #[test] + fn draw_verdict_obligation_is_real_and_class_scoped() { + // (i) REACH-GUARD: a bare board with a mandatory draw on the stack PASSES. This + // is the assertion that flips if `Effect::Draw` goes back to `MayPrompt`. + assert!( + specified_on(&with_replacements(draw_entry(10), &[])), + "a mandatory non-`up to` draw is starved: no replacement environment, no prompt" + ); + + // (ii) CR 702.52a dredge-class: a single OPTIONAL draw replacement prompts. + assert!( + !specified_on(&with_replacements( + draw_entry(10), + &[repl(ReplacementEvent::Draw, true)] + )), + "an optional draw replacement is a genuine CR 608.2d resolution-time choice" + ); + + // (iii) CR 616.1 material ordering: two MANDATORY draw replacements compete. + // The second one multiplies where the first adds — measured, `Plus` and + // `Times` are different `CommuteClass`es, so their composition order changes + // the drawn count and the affected player must order them. Two `Plus` defs + // COMMUTE and the pipeline correctly opens no prompt for them (measured + // `replacement_ordering_is_material == false`), which is why this arm cannot + // be built from two copies of `repl(..)`. + let material_pair = { + let mut doubler = repl(ReplacementEvent::Draw, false); + doubler.quantity_modification = + Some(crate::types::ability::QuantityModification::Times { factor: 2 }); + [repl(ReplacementEvent::Draw, false), doubler] + }; + { + let board = with_replacements(draw_entry(10), &material_pair); + let drawn_event = crate::types::proposed_event::ProposedEvent::Draw { + player_id: PlayerId(0), + count: 1, + applied: Default::default(), + }; + let candidates = crate::game::replacement::find_applicable_replacements( + &board, + &drawn_event, + crate::game::replacement::replacement_registry(), + ); + assert_eq!( + candidates.len(), + 2, + "reach-guard: the live candidate authority draws BOTH defs for the \ + event this entry's resolution proposes" + ); + assert!( + crate::game::replacement::replacement_ordering_is_material( + &board, + &candidates, + &drawn_event + ), + "reach-guard: those two candidates really are CR 616.1 order-material" + ); + } + assert!( + !specified_on(&with_replacements(draw_entry(10), &material_pair)), + "CR 616.1: the affected player orders two competing mandatory replacements" + ); + + // (iv) ACCEPT-SIDE control: ONE mandatory, body-less draw replacement (Teferi's + // Ageless Insight class) resolves deterministically — the guard is not a blanket + // "any draw replacement rejects". + assert!( + specified_on(&with_replacements( + draw_entry(10), + &[repl(ReplacementEvent::Draw, false)] + )), + "a lone mandatory quantity-mod replacement applies without a prompt" + ); + + // (v) CLASS SCOPING, both directions. A LIFE replacement says nothing about a + // DRAW-only stack and vice versa; an unparameterized guard would reject both. + assert!( + specified_on(&with_replacements( + draw_entry(10), + &[repl(ReplacementEvent::GainLife, true)] + )), + "an optional LIFE replacement cannot prompt on a draw-only stack" + ); + assert!( + specified_on(&with_replacements( + churn_entry(11, 0, lose_ability(1), None), + &[repl(ReplacementEvent::Draw, true)] + )), + "an optional DRAW replacement cannot prompt on a life-only stack" + ); + // …and the same optional LIFE replacement DOES reject a life stack, proving the + // arm above passes because of scoping and not because the def is inert. + assert!( + !specified_on(&with_replacements( + churn_entry(11, 0, lose_ability(1), None), + &[repl(ReplacementEvent::LoseLife, true)] + )), + "positive control: the life guard still rejects its own class" + ); + } + + // ── §6 R24: the probe resolves on `resolve_top`'s board ── + + /// A drain entry whose `EventContextAmount` resolves against a batched + /// subject count of `match_count` (CR 603.2c) rather than `churn_entry`'s + /// fixed `Some(1)` — a distinctive amount is what makes R24(a)'s equality + /// non-degenerate. + fn scoped_drain_entry( + id: u64, + match_count: Option, + condition: Option, + ) -> StackEntry { + let mut ability = lose_life_targeting(event_amount(), opp_typed(vec![])); + ability.targets = vec![TargetRef::Player(PlayerId(1))]; + StackEntry { + id: ObjectId(id), + source_id: ObjectId(CHURN_SRC), + controller: PlayerId(0), + kind: StackEntryKind::TriggeredAbility { + source_id: ObjectId(CHURN_SRC), + ability: Box::new(ability), + condition, + trigger_event: None, + description: None, + source_name: String::new(), + subject_match_count: match_count, + die_result: None, + }, + } + } + + /// **§6 R24 — THE PROBE RESOLVES ON `resolve_top`'s BOARD: SCOPE BOUND, + /// ENTRY OFF THE STACK, CR 603.4 RE-CHECKED.** + /// + /// Three arms, each keyed to one thing the classifier gets wrong when it is + /// handed the raw pre-resolution board instead of the one + /// `resolve_top` hands `resolve_ability_chain`. + /// + /// * **(a) THE EVENT-CONTEXT AXIS — the FAIL-OPEN closer.** A + /// `LoseLife { amount: Ref(EventContextAmount) }` drain (the Sanguine Bond + /// shape) resolves "that many" against the entry's batched subject count + /// (CR 603.2c), which only `bind_resolution_scope` lifts. The derived + /// `ProposedEvent::LifeLoss.amount` must equal the amount the LIVE + /// resolution proposes, and must be non-zero. Without the lift the derived + /// amount is 0 — a `> 0`-gated virtual candidate is then never drawn and + /// the probe certifies a resolution the live pipeline would prompt on. + /// REVERT-PROBE (RUN): hand `probe_resolution` the raw board (drop the + /// `bind_resolution_scope` call from `stack_entry_resolution_choice_freedom`) + /// ⇒ derived `0` vs live `7` ⇒ FLIPS. + /// * **(b) CR 603.4.** The same entry with a FALSE intervening-if ⇒ + /// `bind_resolution_scope` returns `false` ⇒ `MayPrompt`; matched against + /// the TRUE twin, which classifies. Direction note, so the arm is not + /// over-claimed: skipping the re-check is fail-CLOSED (a superset of + /// events draws a superset of candidates), so (b) is a FIDELITY arm — + /// (a) is the fail-open closer. + /// * **(c) AMOUNT-INSENSITIVITY, and the zero arm RE-KEYED ON A + /// MEASUREMENT.** On one board with a single in-class (Compleated, + /// CR 702.150a) virtual candidate, sweeping the ability's resolved count + /// over `{1, 2, 7, 99}` yields an IDENTICAL candidate set — candidate + /// selection is amount-insensitive ABOVE zero. The `0` arm does NOT reach + /// the zero-payload accounting guard the plan predicted: measured, a + /// zero-count resolution proposes no event at all (as do + /// `DealDamage { amount: 0 }` and `Draw { count: 0 }`), so the refusal is + /// the `is_empty` arm and the plan's stated revert-probe for this arm + /// cannot reproduce. Both facts are asserted in place, with the + /// guard's own classification pinned separately on the partition. See the + /// block comment at the arm. + /// + /// REACH-GUARDS on every arm: `bind_resolution_scope` is asserted to have + /// returned `true` and the probe to have returned `Events(..)` on each + /// positive arm, so a board that refuses for an unrelated reason fails + /// LOUDLY instead of passing a negative vacuously. + #[test] + fn the_probe_resolves_on_resolve_tops_board_with_scope_bound_and_603_4_rechecked() { + use crate::game::resolution_prompt::ResolutionChoiceFreedom; + use crate::types::proposed_event::ProposedEvent; + + // ── (a) the event-context axis ── + const MATCHES: u32 = 7; + let mut state = drain_state(2); + let entry = scoped_drain_entry(20, Some(MATCHES), None); + state.stack.push_back(entry.clone()); + + // Reach-guard: the binding this arm is about actually succeeds. + let mut board = state.clone(); + board.stack.retain(|e| e.id != entry.id); + assert!( + crate::game::stack::bind_resolution_scope(&mut board, &entry, None), + "reach-guard: no CR 603.4 condition on this entry ⇒ the scope binds" + ); + + let freedom = stack_entry_resolution_choice_freedom( + &state, + &entry, + &mut ProbeBudget::for_test(PROBE_BUDGET), + ); + let ResolutionChoiceFreedom::FreeUnlessReplacements(derived) = freedom else { + panic!("reach-guard: the probe must return Events(..) on this board, got {freedom:?}"); + }; + let derived_amount = derived + .iter() + .find_map(|event| match event { + ProposedEvent::LifeLoss { + player_id, amount, .. + } if *player_id == PlayerId(1) => Some(*amount), + _ => None, + }) + .unwrap_or_else(|| panic!("no LifeLoss on P1 in the derived set: {derived:?}")); + + let mut live = state.clone(); + let before = live.players[1].life; + let mut events = Vec::new(); + crate::game::stack::resolve_top(&mut live, &mut events); + let live_amount = before - live.players[1].life; + assert_eq!( + i64::from(derived_amount), + i64::from(live_amount), + "CR 603.2c + CR 608.2k: the derived amount must equal the one the LIVE \ + resolution proposes — an unbound scope resolves EventContextAmount \ + against an absent context" + ); + assert_eq!( + derived_amount, MATCHES, + "non-degeneracy: the amount is the lifted batched subject count, not zero \ + and not a coincidental 1" + ); + + // ── (b) CR 603.4 intervening-if re-check ── + // `drain_state` builds a standard-format board (20 starting life; the `7` + // it passes is the RNG seed), so `LifeTotalGE 6` is TRUE and `LifeTotalGE 30` + // FALSE for the entry's controller. + for (label, condition, binds) in [ + ("TRUE", TriggerCondition::LifeTotalGE { minimum: 6 }, true), + ( + "FALSE", + TriggerCondition::LifeTotalGE { minimum: 30 }, + false, + ), + ] { + let mut s = drain_state(2); + let e = scoped_drain_entry(21, Some(MATCHES), Some(condition)); + s.stack.push_back(e.clone()); + + let mut b = s.clone(); + b.stack.retain(|x| x.id != e.id); + assert_eq!( + crate::game::stack::bind_resolution_scope(&mut b, &e, None), + binds, + "reach-guard: the CR 603.4 re-check is what decides arm ({label})" + ); + + let verdict = stack_entry_resolution_choice_freedom( + &s, + &e, + &mut ProbeBudget::for_test(PROBE_BUDGET), + ); + if binds { + assert!( + matches!(verdict, ResolutionChoiceFreedom::FreeUnlessReplacements(_)), + "the condition-TRUE twin classifies ({label}); got {verdict:?}" + ); + } else { + assert_eq!( + verdict, + ResolutionChoiceFreedom::MayPrompt, + "CR 603.4: a FALSE intervening-if means the live resolution proposes \ + NOTHING, and an empty derivation is never safe ({label})" + ); + } + } + + // ── (c) amount-insensitivity above zero, and the zero-payload guard ── + let mut counter_state = drain_state(2); + { + // CR 702.150a: the Compleated virtual AddCounter candidate is drawn + // only for a loyalty placement on a source whose Phyrexian life was paid. + let src = counter_state + .objects + .get_mut(&ObjectId(CHURN_SRC)) + .expect("fixture: the churn source exists"); + src.phyrexian_life_paid = 2; + src.keywords + .push(crate::types::keywords::Keyword::Compleated); + } + let loyalty_ability = |count: i32| { + ResolvedAbility::new( + Effect::PutCounter { + target: TargetFilter::SelfRef, + counter_type: crate::types::counter::CounterType::Loyalty, + count: QuantityExpr::Fixed { value: count }, + }, + vec![], + ObjectId(CHURN_SRC), + PlayerId(0), + ) + }; + let counter_entry = |count: i32| { + let mut e = scoped_drain_entry(22, Some(MATCHES), None); + let StackEntryKind::TriggeredAbility { ability, .. } = &mut e.kind else { + unreachable!("scoped_drain_entry builds a TriggeredAbility") + }; + **ability = loyalty_ability(count); + e + }; + + let mut candidate_sets = Vec::new(); + for count in [1, 2, 7, 99] { + let e = counter_entry(count); + let mut s = counter_state.clone(); + s.stack.push_back(e.clone()); + let verdict = stack_entry_resolution_choice_freedom( + &s, + &e, + &mut ProbeBudget::for_test(PROBE_BUDGET), + ); + let ResolutionChoiceFreedom::FreeUnlessReplacements(events) = verdict else { + panic!("reach-guard: count {count} must probe to Events(..), got {verdict:?}"); + }; + let add = events + .iter() + .find(|event| matches!(event, ProposedEvent::AddCounter { .. })) + .unwrap_or_else(|| panic!("count {count} derived no AddCounter: {events:?}")); + candidate_sets.push(crate::game::replacement::find_applicable_replacements( + &s, + add, + crate::game::replacement::replacement_registry(), + )); + } + assert!( + !candidate_sets[0].is_empty(), + "reach-guard: the CR 702.150a Compleated virtual candidate IS drawn above \ + zero — without it the sweep would compare four empty sets" + ); + assert!( + candidate_sets.windows(2).all(|pair| pair[0] == pair[1]), + "CR 614.1a: candidate SELECTION is amount-insensitive above zero; got \ + {candidate_sets:?}" + ); + + // The `0` arm, RE-KEYED ON A MEASUREMENT that contradicts the plan's + // stated mechanism — recorded here rather than papered over. + // + // The plan expects a zero-count `PutCounter` to DERIVE an + // `AddCounter { count: 0 }` which the zero-payload guard then classifies + // Unaccounted (arm 4). Measured on this board: the zero-count resolution + // proposes NOTHING AT ALL — and so do `DealDamage { amount: 0 }` and + // `Draw { count: 0 }`, the other two zero-payload classes. Every counter/ + // damage/draw resolver short-circuits above the pipeline at zero. So no + // zero-payload `ProposedEvent` is reachable through the six allow-listed + // classes, the refusal below is arm 3 (`is_empty`), and the plan's + // (c) revert-probe (delete the `AddCounter { count: 0 }` guard ⇒ the + // derivation certifies) CANNOT REPRODUCE — there is no derivation to + // certify. DIRECTION: fail-CLOSED either way, so this is a coverage fact, + // not a hole. The guards remain correct defence-in-depth for events + // proposed by non-allow-listed routes and are pinned directly on the + // partition in BOTH directions by + // `resolution_prompt::tests::an_unaccounted_derived_event_is_prompted_in_the_resolver`. + let zero_entry = counter_entry(0); + let mut zero_state = counter_state.clone(); + zero_state.stack.push_back(zero_entry.clone()); + let mut zero_board = zero_state.clone(); + zero_board.stack.retain(|e| e.id != zero_entry.id); + assert!( + crate::game::stack::bind_resolution_scope(&mut zero_board, &zero_entry, None), + "reach-guard: the zero arm's refusal is not the CR 603.4 arm" + ); + let zero_events = crate::game::replacement::record_proposed_events(|| { + let mut work = zero_board.clone(); + let mut sink = Vec::new(); + let _ = crate::game::effects::resolve_ability_chain( + &mut work, + &loyalty_ability(0), + &mut sink, + 0, + ); + }); + assert!( + zero_events.is_empty(), + "MEASURED, and the reason the arm is re-keyed: a zero count proposes no \ + event at all; recorded {zero_events:?}. If this ever becomes non-empty the \ + accounting arm becomes the reachable one and this arm must be re-keyed \ + back onto it." + ); + assert!( + !crate::game::replacement::event_is_accounted(&ProposedEvent::AddCounter { + placement: crate::types::proposed_event::CounterPlacement::Object { + actor: PlayerId(0), + object_id: ObjectId(CHURN_SRC), + counter_type: crate::types::counter::CounterType::Loyalty, + }, + count: 0, + applied: Default::default(), + }), + "the CR 702.150a zero-payload guard still classifies the event Unaccounted \ + — it is simply not reachable from an allow-listed resolution" + ); + assert_eq!( + stack_entry_resolution_choice_freedom( + &zero_state, + &zero_entry, + &mut ProbeBudget::for_test(PROBE_BUDGET) + ), + ResolutionChoiceFreedom::MayPrompt, + "CR 732.2a: at zero the live pipeline draws no candidate (`count > 0`) and \ + the resolution proposes nothing, so the probe refuses fail-CLOSED rather \ + than certifying an empty derivation" + ); + } + + /// CR 732.2a: `BUDGET-EXCEEDED ⇒ Prompted` is what keeps the probe's cost a + /// COVERAGE knob rather than an unbounded player-facing stall, so the budget + /// must actually stop granting and must LATCH the denial (an exhaustion that + /// is only inferable from a zero remainder cannot be attributed). + /// + /// Both directions asserted so neither can go vacuous: exactly + /// [`PROBE_BUDGET`] charges are granted with `denied()` still `false`, and + /// only the charge AFTER that flips it. + #[test] + fn probe_budget_grants_exactly_its_cap_then_latches_the_denial() { + let mut budget = ProbeBudget::for_test(PROBE_BUDGET); + for i in 0..PROBE_BUDGET { + assert!( + budget.try_charge_one(), + "charge {i} of {PROBE_BUDGET} must be granted" + ); + assert!( + !budget.denied(), + "no denial may be latched while charges are still granted (after {i})" + ); + } + assert!( + !budget.try_charge_one(), + "the charge past the cap must be refused" + ); + assert!( + budget.denied(), + "the exhaustion fact must be latched, not inferred from the remainder" + ); + // A zero-cap budget denies its FIRST charge — the shape a lowered cap + // takes, and the reason exhaustion is fail-closed rather than silent. + let mut starved = ProbeBudget::for_test(0); + assert!(!starved.try_charge_one()); + assert!(starved.denied()); + } + // ───────────────── 5d U2 — the shape-(B) mint's relief-side rows ───────────────── + + /// A 3-seat board with one battlefield source, shared by the two U2 relief rows. + fn u2_relief_board() -> (GameState, ObjectId) { + use crate::game::scenario::GameScenario; + let mut state = GameScenario::new_n_player(3, 7).build().state().clone(); + let src = ObjectId(970); + let mut obj = crate::game::game_object::GameObject::new( + src, + crate::types::identifiers::CardId(0), + PlayerId(0), + "U2 Source".to_string(), + crate::types::zones::Zone::Battlefield, + ); + obj.incarnation = 3; + state.objects.insert(src, obj); + (state, src) + } + + /// Shape (B): a proposer-controlled OPTIONAL, NO-TARGET triggered ability. + /// + /// Shape (B) is reached whenever `build_target_slots` yields ZERO slots. There are two + /// routes to that, and the difference matters HERE and not at the mint: an effect whose + /// head filter announces nothing (`Draw { target: Controller }`) leaves the residual + /// classification choice-FREE, while `TargetChoiceTiming::Resolution` (the Braids + /// per-player-upkeep shape the mint rows use) is itself one of the six `MayPrompt` + /// reasons — such an entry mints but can never be RELIEVED, so its offer is refused at + /// conjunct (6). That is the fail-closed direction, and it is why the relief rows below + /// take the announce-nothing route rather than the resolution-timing one. + fn u2_shape_b_entry( + src: ObjectId, + id: u64, + effect: crate::types::ability::Effect, + mutate: impl FnOnce(&mut crate::types::ability::ResolvedAbility), + ) -> StackEntry { + let mut ability = + crate::types::ability::ResolvedAbility::new(effect, vec![], src, PlayerId(0)); + ability.optional = true; + mutate(&mut ability); + StackEntry { + id: ObjectId(id), + source_id: src, + controller: PlayerId(0), + kind: StackEntryKind::TriggeredAbility { + source_id: src, + ability: Box::new(ability), + condition: None, + trigger_event: None, + description: None, + source_name: String::new(), + subject_match_count: None, + die_result: None, + }, + } + } + + fn u2_draw_effect() -> crate::types::ability::Effect { + crate::types::ability::Effect::Draw { + count: crate::types::ability::QuantityExpr::Fixed { value: 1 }, + target: crate::types::ability::TargetFilter::Controller, + } + } + + /// [`u2_scope`] with the proposer as a PARAMETER — the seat whose offer published the pins, + /// which is not always the seat the consuming container is bound to (R22 conjunct (4)). + fn u3_scope_for(proposer: PlayerId, slots: &[DecisionSlot]) -> LoopWindowScope<'_> { + LoopWindowScope { + phase_invariant: None, + sole_driver: None, + pinned: Some(PinnedChoices { proposer, slots }), + cast_card_ids: None, + period: None, + } + } + + /// The `LoopWindowScope` an offer that published exactly `slots` hands the relief. + fn u2_scope(slots: &[DecisionSlot]) -> LoopWindowScope<'_> { + LoopWindowScope { + phase_invariant: None, + sole_driver: None, + pinned: Some(PinnedChoices { + proposer: PlayerId(0), + slots, + }), + cast_card_ids: None, + period: None, + } + } + + /// R6 — **an optional trigger carrying an additional unpublishable axis still refuses, + /// and the RELIEF is the layer that refuses it.** + /// + /// `ability_resolution_choice_freedom` returns `MayPrompt` for six independent reasons and + /// the offer publishes a `MayChoice` point for exactly ONE of them (`ability.optional`). + /// `pinned_may_choice_relief` therefore re-classifies the ability with `optional` cleared: + /// an `unless_pay` (CR 118.12) keeps coming back `MayPrompt` and gets no relief, because + /// no published pin specifies it. + /// + /// **(a′) THE MATCHED POSITIVE (ROUND-42 M15), byte-identical except the axis.** Without + /// it this row is a dominated negative: `entry_publishes_pin_slots` returns `None` from + /// four conjuncts that all sit ABOVE R6's axis (`entry.controller != proposer`, the + /// `TriggeredAbility` let-else, and the `multi_target`/`distribution`/`target_constraints` + /// block), so a fixture tripping any of them would refuse for a reason that has nothing to + /// do with the residual re-classification. The positive proves the fixture is + /// proposer-controlled, is a triggered ability, carries none of those three, and reaches + /// the mint — and this row additionally asserts the negative fixture MINTS, so the refusal + /// is attributable to the relief and to nothing upstream of it. + /// + /// SCOPE, so this row is not read as covering the cardinality axis: `unless_pay` and a + /// modal header are axes the relief catches. A `repeat_for`-driven multi-prompt ability + /// does NOT fail that way — it can re-classify choice-free while the resolution still + /// opens N prompts — so it is caught one layer earlier, at the mint, by + /// `one_published_may_slot_stands_for_exactly_one_cr_603_5_prompt`. + /// + /// REVERT-PROBE: make `pinned_may_choice_relief` return the residual without + /// re-classifying (drop the `without_may_gate` round-trip and return + /// `FreeUnlessReplacements` unconditionally) ⇒ the `unless_pay` arm is relieved ⇒ FLIPS. + #[test] + fn an_unpublishable_residual_axis_is_refused_by_the_relief_not_by_the_mint() { + use crate::game::engine::entry_publishes_pin_slots; + use crate::game::resolution_prompt::ResolutionChoiceFreedom; + + let (state, src) = u2_relief_board(); + + // ── (a′) matched positive: no residual axis ── + let clean = u2_shape_b_entry(src, 980, u2_draw_effect(), |_| {}); + let published = entry_publishes_pin_slots(&state, &clean, PlayerId(0)) + .expect("(a′) reach-guard: the clean fixture must reach the mint"); + let may = published + .may + .expect("(a′) the clean fixture publishes its CR 603.5 gate"); + assert!( + published.target.is_none(), + "(a′) shape (B): no announcement choice, so no target slot" + ); + let slots = vec![may.clone()]; + // The relief reads the mint and the residual through the ONE door, so the row drives + // a real container bound to the same proposer the pins carry; `frame_ix` is the only + // `FrameIx` mint and its `None` would be a refusal, so the `expect` is a reach-guard. + let mut verdicts = PeriodVerdicts::for_period(&[], &state, PlayerId(0)); + let f = verdicts + .frame_ix(&state) + .expect("(a′) reach-guard: the container holds the board the relief is asked about"); + assert!( + matches!( + pinned_may_choice_relief(f, &clean, &mut verdicts, u2_scope(&slots)), + Some(ResolutionChoiceFreedom::FreeUnlessReplacements(_)) + ), + "(a′) with the may pinned and no other axis, the residual classification is \ + choice-free and the entry is relieved" + ); + + // ── (a) the negative: one CR 118.12 `unless_pay` axis, nothing else changed ── + let gated = u2_shape_b_entry(src, 981, u2_draw_effect(), |ability| { + ability.unless_pay = Some(crate::types::ability::UnlessPayModifier { + cost: crate::types::ability::AbilityCost::Mana { + cost: crate::types::mana::ManaCost::Cost { + shards: vec![], + generic: 2, + }, + }, + payer: crate::types::ability::TargetFilter::Controller, + }); + }); + let gated_published = entry_publishes_pin_slots(&state, &gated, PlayerId(0)) + .expect("(a) reach-guard: the MINT still publishes — it does not read `unless_pay`"); + assert_eq!( + gated_published.may.as_ref(), + Some(&may), + "(a) reach-guard: the same slot is published, so the two arms differ ONLY in the \ + residual axis and the refusal below cannot come from the mint" + ); + assert!( + pinned_may_choice_relief(f, &gated, &mut verdicts, u2_scope(&slots)).is_none(), + "(a) CR 118.12: an `unless_pay` is a SECOND resolution-time choice no published \ + pin specifies, so the residual re-classification still returns `MayPrompt` and \ + the entry gets no relief" + ); + } + + /// R31 — **the `may` mint's recipient conjunct may read the board, but it can never move + /// a published offer.** + /// + /// Conjunct (a) calls `optional_prompt_player`, whose sole state-touching callee is + /// `targeting::resolve_effect_player_ref`, reaching eleven distinct `GameState` fields + /// (`players`, `seat_order`, `format_config`, `objects`, `lki_cache`, `stack`, + /// `current_trigger_event`, `last_created_token_ids`, `last_revealed_ids`, + /// `last_zone_changed_ids`, `resolution_stack`). Every one of the three branches that + /// reach it is gated on an `Effect` that `effect_resolution_choice_freedom` puts in its + /// fail-closed grouped arm — so conjunct (6) refuses any offer carrying such an entry. + /// The reads happen; they cannot bear on a published result. + /// + /// NO PRODUCTION DELTA: this row pins an ARGUMENT, which is why it needs a revert-probe + /// that edits code rather than deletes a guard. + /// + /// THREE ARMS, and the first two exist so the third cannot pass vacuously: + /// * **(a) the branch is REACHED** — `Effect::PayCost { payer: Controller }` routes + /// through `resolve_effect_player_ref`'s `Controller` arm and returns the proposer ⇒ a + /// `may` slot IS published. + /// * **(a′) matched negative, differing in exactly the payer filter** — `payer: Opponent` + /// resolves through `players::is_opponent`/`opponents` to a seat ≠ proposer ⇒ no slot. + /// The pair proves the verdict is decided BY the callee's return value, which is why no + /// function-level inertness is claimed anywhere. + /// * **(b) the closure** — the offer is refused anyway, repeated for all three + /// state-reading branches (`PayCost`, `Sacrifice`, `SearchLibrary`) so the arm covers + /// the closure's whole population rather than one member of it. + /// + /// REVERT-PROBE (symbol-anchored, so it survives file moves): in + /// `game/resolution_prompt.rs`, move `Effect::PayCost { .. }` out of + /// `effect_resolution_choice_freedom`'s fail-closed grouped arm into a + /// `FreeUnlessReplacements(vec![])` arm ⇒ **(b) FLIPS to `true`** for the `PayCost` case + /// while (a)/(a′) stay green — proving the closure rests on the scope filter and not on + /// the fixture. + /// + /// The COMPLETENESS arm ("every minted pair is scanned") ships in U3: its probe names + /// `touch.announced`, which does not exist until the announcement loop gains its window. + #[test] + fn the_recipient_conjunct_reads_the_board_but_can_never_move_a_published_offer() { + use crate::game::engine::entry_publishes_pin_slots; + use crate::types::ability::{AbilityCost, Effect, QuantityExpr, TargetFilter}; + + let (state, src) = u2_relief_board(); + let mana = || AbilityCost::Mana { + cost: crate::types::mana::ManaCost::Cost { + shards: vec![], + generic: 1, + }, + }; + let pay_cost = |payer: TargetFilter| Effect::PayCost { + cost: mana(), + scale: None, + payer, + }; + + // ── (a) the state-reading branch is REACHED and returns the proposer ── + let reached = u2_shape_b_entry(src, 990, pay_cost(TargetFilter::Controller), |_| {}); + let StackEntryKind::TriggeredAbility { ability, .. } = &reached.kind else { + panic!("the fixture is a triggered ability"); + }; + assert_eq!( + crate::game::effects::optional_prompt_player(&state, ability), + PlayerId(0), + "(a) reach-guard: the `PayCost` branch really routes through \ + `resolve_effect_player_ref`'s `Controller` arm and returns the proposer" + ); + let published = entry_publishes_pin_slots(&state, &reached, PlayerId(0)) + .expect("(a) the state-reading branch publishes"); + let may = published + .may + .expect("(a) a `may` slot IS minted through the state-reading branch"); + + // ── (a′) matched negative: exactly the payer filter differs ── + let opposed = u2_shape_b_entry(src, 991, pay_cost(TargetFilter::Opponent), |_| {}); + let StackEntryKind::TriggeredAbility { ability, .. } = &opposed.kind else { + panic!("the fixture is a triggered ability"); + }; + assert_ne!( + crate::game::effects::optional_prompt_player(&state, ability), + PlayerId(0), + "(a′) reach-guard: the `Opponent` arm resolves to a seat that is NOT the proposer" + ); + assert!( + entry_publishes_pin_slots(&state, &opposed, PlayerId(0)).is_none(), + "(a′) the mint's verdict is decided by `resolve_effect_player_ref`'s RETURN value, \ + not by the effect's shape — so the state reads really are result-bearing" + ); + + // ── (b) the closure: the offer is refused anyway, on all three branches ── + let branches: Vec<(&str, Effect)> = vec![ + ("PayCost", pay_cost(TargetFilter::Controller)), + ( + "Sacrifice", + Effect::Sacrifice { + target: TargetFilter::ParentTargetController, + count: QuantityExpr::Fixed { value: 1 }, + min_count: 1, + }, + ), + ( + "SearchLibrary", + Effect::SearchLibrary { + source_zones: vec![crate::types::zones::Zone::Library], + filter: TargetFilter::Controller, + count: QuantityExpr::Fixed { value: 1 }, + reveal: false, + target_player: Some(TargetFilter::ParentTargetController), + selection_constraint: Default::default(), + split: None, + }, + ), + ]; + for (label, effect) in branches { + let mut board = state.clone(); + let entry = u2_shape_b_entry(src, 992, effect, |_| {}); + // Reach-guard for the ANNOUNCEMENT loop: without this, a `false` below could come + // from gate (3) instead of from gate (6) and the closure claim would be vacuous. + assert!( + stack_entry_has_no_ordering_input(&board, &entry), + "{label}: reach-guard — shape (B) announces no choice, so the announcement \ + loop must PASS and the refusal below is attributable to gate (6)" + ); + board.stack.push_back(entry); + assert!( + !stack_choices_are_all_specified( + &board, + PlayerId(0), + std::slice::from_ref(&may), + None, + &mut PeriodVerdicts::for_period(&[], &board, PlayerId(0)) + ), + "{label}: CR 732.2a conjunct (6) refuses the offer — the effect sits in \ + `effect_resolution_choice_freedom`'s fail-closed grouped arm, so a `may` \ + slot minted through a state-reading branch can never reach a published offer" + ); + } + } + + /// R33 arms (a) / (b) / (a′1) / (c) — THE FROZEN EXEMPTION IS KEYED TO THE CERTIFYING + /// DISJUNCT, AT THE CONSTRUCTOR **AND** AT THE CONSUMER, ON A REAL DRIVEN WINDOW. + /// + /// CR 732.2a + CR 608.1. The exemption's limb (*observed-frozen ⇒ frozen across the + /// fast-forward*) needs P2 (the period cannot SHRINK the stack) and P4 (the fast-forward + /// IS the repetition of the observed period). Exactly one certifying disjunct supplies + /// both, so `frozen_ids` is non-empty under `BoardCovered` and EMPTY under the other two. + /// + /// The board is the dellian dump DRIVEN through `apply()` — the dump ships with an empty + /// ring, so every frame the window is built from was accumulated by this drive. The beat + /// is SEARCHED FOR by its construction requirements rather than hardcoded, because a + /// hardcoded beat index is a fixture that drifts silently when the drive policy moves. + /// + /// (a) the window really freezes something — asserted against an INDEPENDENT lower bound + /// ([`frozen_lower_bound`]), never against the callee's own answer. (b)/(a′1) the two + /// matched negatives, differing from (a) in EXACTLY ONE ARGUMENT. (c) the consumer half: + /// the same two touches through `stack_choices_are_all_specified`, where the boolean flip + /// is the load-bearing assertion and the counters are its attribution. + /// + /// REVERT-PROBE 1: delete `certified_period_touch`'s pre-walk early return so `frozen_ids` + /// is computed unconditionally ⇒ (b) and (a′1) FLIP from empty to the full set and (c)'s + /// two arms collapse to equal populations. + #[test] + fn r33_frozen_exemption_is_keyed_to_the_certificate_on_the_real_dellian_window() { + let mut state = dump_state(include_bytes!( + "../../tests/fixtures/dellian_emblem_conqueror_4p.json.gz" + )); + assert_eq!( + state.loop_detect_ring.len(), + 0, + "reach-guard: the dump must ship with an EMPTY ring — every frame the window \ + below is built from is accumulated by THIS drive, not restored" + ); + + // Drive until a beat satisfies the row's construction requirements: a usable ring + // AND a window that genuinely freezes something. Both are checked BEFORE the board + // is captured, so the arms below cannot run on a beat that does not carry them. + let mut hit: Option<(usize, GameState)> = None; + for beat in 0..80usize { + if state.loop_detect_ring.len() >= 2 { + let live: Vec<&GameState> = + state.loop_detect_ring.iter().map(|f| &f.live).collect(); + let window = &live[live.len() - 2..]; + if frozen_lower_bound(window, &state) > 0 { + drop(live); + hit = Some((beat, state.clone())); + break; + } + } + if dump_drive_one_beat(&mut state).is_err() { + break; + } + } + let (beat, board) = hit.expect( + "REACH-GUARD: no driven beat carried a ring >= 2 frames AND a window with a \ + non-empty observed-frozen prefix. Every arm below would be vacuous on such a \ + beat, so the row FAILS rather than passing over a window that freezes nothing", + ); + + let live: Vec<&GameState> = board.loop_detect_ring.iter().map(|f| &f.live).collect(); + // The newest candidate pair, i.e. `span == 1` — the shape §3 D2's walk reaches first. + let window = &live[live.len() - 2..]; + let bound = frozen_lower_bound(window, &board); + let proposer = board.active_player; + + // ── (a) the exemption is genuinely AVAILABLE on this window ────────────────────── + let cover = certified_period_touch(window, &board, PeriodCertification::BoardCovered); + assert!( + cover.frozen_ids.len() >= bound && bound > 0, + "(a) beat {beat}: the cover certificate must freeze at least the {bound} entries \ + the independent common-prefix bound proves are index-stable across every window \ + frame; got {}", + cover.frozen_ids.len() + ); + + // ── (b) / (a′1) the two matched negatives, ONE argument different ──────────────── + let sig = + certified_period_touch(window, &board, PeriodCertification::ResourceSignatureOnly); + assert!( + sig.frozen_ids.is_empty(), + "(b) beat {beat}: basis B consults no board predicate, so it supplies neither P2 \ + nor P4 and the subtraction is withdrawn; got {} frozen", + sig.frozen_ids.len() + ); + let eq = certified_period_touch(window, &board, PeriodCertification::BoardEqualOnly); + assert!( + eq.frozen_ids.is_empty(), + "(a′1) beat {beat}: the equality disjunct supplies P2 but NOT P4 — it has no \ + items (4)/(5) — so it is as fail-closed as basis B; got {} frozen", + eq.frozen_ids.len() + ); + + // ANTI-OVER-NARROWING: only the SUBTRACTION is keyed. A certificate change must not + // zero the whole touch — that would under-publish the mint instead of un-exempting. + let ids = |t: &PeriodTouch<'_>| -> Vec { + t.announced.iter().map(|(_, e)| e.id).collect() + }; + assert_eq!( + ids(&sig), + ids(&cover), + "the certificate keys the frozen subtraction ONLY: `announced` must be \ + element-for-element identical under every value" + ); + assert_eq!(ids(&eq), ids(&cover), "same, for the equality value"); + + // ── (c) THE CONSUMER HALF: the same two touches, through conjunct (6) ──────────── + // Fresh containers per arm — a shared one would carry a warm memo and a part-spent + // budget into the second arm, making the counters incomparable. + let mut v_cover = PeriodVerdicts::for_period(&live, &board, proposer); + let c1 = stack_choices_are_all_specified(&board, proposer, &[], Some(&cover), &mut v_cover); + let mut v_sig = PeriodVerdicts::for_period(&live, &board, proposer); + let c2 = stack_choices_are_all_specified(&board, proposer, &[], Some(&sig), &mut v_sig); + + // The BOOLEAN FLIP is the load-bearing assertion; the counters are its attribution. + assert!( + c1 && !c2, + "(c) beat {beat}: conjunct (6) must ACCEPT under the exempting certificate and \ + REFUSE under the non-exempting one. Measured c1={c1} (asks={}, skips={}, \ + spent={}, denied={}) c2={c2} (asks={}, skips={}, spent={}, denied={}), stack={}", + v_cover.conjunct6_asks(), + v_cover.conjunct6_frozen_skips(), + v_cover.spent(), + v_cover.denied(), + v_sig.conjunct6_asks(), + v_sig.conjunct6_frozen_skips(), + v_sig.spent(), + v_sig.denied(), + board.stack.len() + ); + assert!( + v_cover.conjunct6_frozen_skips() as usize >= bound, + "(c1) the accepted arm must have SKIPPED the frozen ids rather than classified \ + them; skips={} bound={bound}", + v_cover.conjunct6_frozen_skips() + ); + assert!( + !v_cover.denied() && v_cover.spent() <= PROBE_BUDGET, + "(c1) the exempted classification must fit the cap: spent={} denied={}", + v_cover.spent(), + v_cover.denied() + ); + assert_eq!( + v_sig.conjunct6_frozen_skips(), + 0, + "(c2) the non-exempting certificate must skip NOTHING" + ); + assert!( + v_sig.denied() && v_sig.spent() == PROBE_BUDGET, + "(c2) the unexempted sweep must exhaust the cap and refuse fail-closed — its \ + measured demand is far above it. spent={} denied={} cap={PROBE_BUDGET}", + v_sig.spent(), + v_sig.denied() + ); + } + + /// R21 (b) + (b-unproven) — THE EXEMPTION NARROWS CONJUNCT (6)'s POPULATION BY EXACTLY + /// THE FROZEN SET, AND "NO PROOF" NARROWS IT BY NOTHING. + /// + /// CR 732.2a + CR 608.1. Both TRACKED dumps, driven through `apply()` to the first beat + /// carrying a real certified window with a non-empty observed-frozen prefix. + /// + /// ⚠ THE PLAN'S FIGURES FOR THIS ROW ARE HEAD-ERA AND ARE RE-MEASURED HERE, NOT COPIED. + /// It expects *"`conjunct6_asks()` = 2–4, `conjunct6_frozen_skips()` = 152, their sum = + /// `current.stack.len()` = 154–156"*. Measured on the driven tree (`dellian` beat 14, + /// `ring=2 stack=154 announced=2 frozen=152`): `asks=4`, `skips=152`, **sum = 156**, and + /// `156 = announced + stack`, NOT `stack` — post-U3 the predicate's domain is + /// `touch.announced ∪ (stack \ frozen)`, so the announced pairs are asks the HEAD-era + /// figure could not include. The SUM IDENTITY is asserted in the corrected form; it is + /// what fails if a future edit exempts an entry without counting it, which a bare + /// `asks == 2..4` would not see. (`dina` beat 10: `stack=8 announced=3 frozen=5`, + /// `asks=6 skips=5`, sum `11 = 3 + 8`.) + /// + /// (b-unproven): the shipped meaning of NO PROOF is `touch == None`, and it must exempt + /// NOTHING — `skips == 0` on both dumps, and where the sweep completes, the ask count is + /// the UNCONDITIONED `current.stack`. Without this arm the exemption could be made + /// unconditional and nothing would fail. + /// + /// REVERT-PROBE: delete the `frozen_ids` skip from `stack_choices_are_all_specified`'s + /// current-stack loop ⇒ `skips` drops to 0 while `frozen_ids` stays non-empty ⇒ the + /// `skips == frozen_ids.len()` arm FLIPS on both dumps. + #[test] + fn r21_b_the_exemption_narrows_conjunct_six_by_exactly_the_frozen_set() { + // Set by whichever dump's UNPROVEN sweep runs to completion, so the population claim + // below is asserted against a COMPLETE count and never against a truncated one. + let mut unproven_population_witness: Option<(&str, usize, usize)> = None; + + for (name, gz) in TRACKED_DUMPS { + let (beat, board) = drive_dump_until(gz, 80, has_frozen_window).unwrap_or_else(|| { + panic!( + "REACH-GUARD [{name}]: no driven beat carried a ring >= 2 frames AND a \ + window with a non-empty observed-frozen prefix; every arm below would be \ + vacuous on such a beat" + ) + }); + let live: Vec<&GameState> = board.loop_detect_ring.iter().map(|f| &f.live).collect(); + let window = &live[live.len() - 2..]; + let proposer = board.active_player; + let cover = certified_period_touch(window, &board, PeriodCertification::BoardCovered); + + // ── reach-guards: neither half of the domain may be empty ──────────────────── + assert!( + !cover.frozen_ids.is_empty(), + "[{name}] beat {beat}: the exemption must have something to remove" + ); + assert!( + !cover.announced.is_empty(), + "[{name}] beat {beat}: the announced half must be non-empty, else the sum \ + identity below degenerates into a statement about `current.stack` alone" + ); + assert!( + cover.frozen_ids.len() < board.stack.len(), + "[{name}] beat {beat}: a fully-frozen stack would make `asks` zero and the \ + narrowing unobservable; frozen {} of {}", + cover.frozen_ids.len(), + board.stack.len() + ); + + let measure = |touch: Option<&PeriodTouch<'_>>| { + let mut v = PeriodVerdicts::for_period(&live, &board, proposer); + let r = stack_choices_are_all_specified(&board, proposer, &[], touch, &mut v); + ( + r, + v.conjunct6_asks() as usize, + v.conjunct6_frozen_skips() as usize, + v.spent(), + v.denied(), + ) + }; + + // ── (b) the exempting certificate ──────────────────────────────────────────── + let (r_cov, asks_cov, skips_cov, spent_cov, denied_cov) = measure(Some(&cover)); + assert!( + r_cov, + "[{name}] beat {beat}: the exempted sweep must RUN TO COMPLETION, else every \ + count below is a truncation rather than a population. asks={asks_cov} \ + skips={skips_cov} spent={spent_cov} denied={denied_cov}" + ); + assert_eq!( + skips_cov, + cover.frozen_ids.len(), + "[{name}] beat {beat}: conjunct (6) must skip EXACTLY the proven-frozen ids — \ + no more (an over-skip is the fail-open direction) and no fewer" + ); + assert_eq!( + asks_cov + skips_cov, + cover.announced.len() + board.stack.len(), + "[{name}] beat {beat}: THE SUM IDENTITY. Every member of the derived domain \ + `announced ∪ current.stack` is either ASKED or COUNTED as exempt; an entry \ + exempted without being counted would land here. asks={asks_cov} \ + skips={skips_cov} announced={} stack={}", + cover.announced.len(), + board.stack.len() + ); + + // ── (b-unproven) NO PROOF exempts NOTHING ──────────────────────────────────── + let (r_none, asks_none, skips_none, spent_none, denied_none) = measure(None); + assert_eq!( + skips_none, 0, + "[{name}] beat {beat}: (b-unproven) a caller that proved no period gets \ + byte-identical pre-change behaviour — the subtraction is not merely smaller, \ + it is WITHDRAWN. asks={asks_none} spent={spent_none} denied={denied_none}" + ); + if r_none { + unproven_population_witness = Some((name, asks_none, board.stack.len())); + } + assert!( + skips_cov > 0, + "[{name}] beat {beat}: the two arms must actually DIFFER on this board" + ); + } + + let (name, asks_none, stack_len) = unproven_population_witness.expect( + "REACH-GUARD: neither dump's UNPROVEN sweep ran to completion, so the population \ + claim below would be asserted against a budget-truncated count. The row FAILS \ + rather than silently weakening to `skips == 0`", + ); + assert_eq!( + asks_none, stack_len, + "[{name}] (b-unproven) POPULATION: with no period proof the resolution gate scans \ + the UNCONDITIONED `current.stack`, element for element" + ); + } + + /// R21 (b-placement-S) — THE FROZEN SKIP IS READ AT EXACTLY ONE SITE, AND THAT SITE IS + /// BELOW ITEM (6)'s LOOP HEAD. + /// + /// CR 732.2a. §3 D2 step 3's replacement argument for the exemption is an ITEM-ORDERING + /// argument: items (2)/(4)/(5) are what establish the premises the skip consumes, and each + /// of them `return false`s strictly before it. Its sole precondition is that the skip lives + /// in item (6) and nowhere earlier — a source-level fact, asserted here rather than argued. + /// + /// This arm covers item (5) as well, and better than a scan count would: item (5) is inside + /// the extent, so a skip placed there raises the count to 2. + /// + /// COMMENT LINES ARE EXCLUDED, per R8's own ruling: a comment reads nothing, and counting + /// one would make the tripwire fire on prose. (The extent carries exactly one such line — + /// item (4)'s "`frozen_ids` is deliberately not read here".) + /// + /// REVERT-PROBE: add a `frozen_ids.contains(&e.id)` skip to item (4)'s closure ⇒ the read + /// count goes 1 → 2 ⇒ FLIPS. + #[test] + fn r21_b_placement_s_the_frozen_skip_is_read_once_and_only_below_item_six() { + let src = include_str!("resource.rs"); + let lines: Vec<&str> = src.lines().collect(); + + // Symbol-anchored extent, the §6 R8 self-census discipline: column-0 signature line + // to the first column-0 `}`. + let extent = |signature: &str| -> (usize, usize) { + let head = lines + .iter() + .position(|l| l.starts_with(signature)) + .unwrap_or_else(|| panic!("extractor found no column-0 `{signature}`")); + let end = lines[head..] + .iter() + .position(|l| *l == "}") + .map(|i| head + i) + .unwrap_or_else(|| panic!("`{signature}` has no column-0 closing brace")); + (head, end) + }; + // Needles ASSEMBLED at runtime so this test's own source cannot be counted by its own + // instrument (R13's hardening, applied here by construction). + let frozen_token = format!("frozen{}ids", '_'); + let scan_token = format!("note{}conjunct4{}scan", '_', '_'); + + let (head, end) = extent("pub(crate) fn loop_states_cover_modulo_growth_scoped"); + assert!( + end - head > 100, + "the extractor must return the whole predicate, not a truncated span; got \ + {head}-{end}" + ); + let code: Vec<(usize, &str)> = (head..=end) + .map(|i| (i, lines[i])) + .filter(|(_, l)| !l.trim_start().starts_with("//")) + .collect(); + + let item6_head = code + .iter() + .find(|(_, l)| l.contains("for entry in ¤t.stack")) + .map(|(i, _)| *i) + .expect("item (6)'s loop head must be inside the extent"); + let reads: Vec = code + .iter() + .filter(|(_, l)| l.contains(&frozen_token)) + .map(|(i, _)| *i) + .collect(); + + assert_eq!( + reads.len(), + 1, + "R21(b-placement-S): the frozen subtraction must be read at EXACTLY ONE site in \ + {head}-{end}; a second read is a premise consumed before it is proved. Found at \ + lines {:?} (1-based)", + reads.iter().map(|i| i + 1).collect::>() + ); + assert!( + reads[0] > item6_head, + "R21(b-placement-S): the one read (line {}) must sit BELOW item (6)'s loop head \ + (line {}) — items (2)/(4)/(5) establish the premises it consumes and each \ + returns strictly above it", + reads[0] + 1, + item6_head + 1 + ); + + // POSITIVE CONTROL AGAINST A DEAD GREP, same extractor and same filter: a token known + // to be present in the SAME extent must be found, and one known to be absent must not. + // One instrument, two values, one input. + assert_eq!( + code.iter().filter(|(_, l)| l.contains(&scan_token)).count(), + 1, + "the instrument must be able to find a token that IS there — item (4)'s scan \ + notifier lives inside {head}-{end}" + ); + assert_eq!( + code.iter() + .filter(|(_, l)| l.contains("ring_delta_signature")) + .count(), + 0, + "…and must not find one that is not" + ); + } + + /// R21 (b-placement-B) — THE BEHAVIOURAL HALF, ON THE REAL DELLIAN WINDOW: ITEM (4) SCANS + /// THE UNEXEMPTED STACK WHILE CONJUNCT (6) SKIPS IT. + /// + /// CR 732.2a. The matched pair is on ONE board and ONE touch, one predicate apart, so the + /// difference is attributable to the placement and to nothing else. + /// + /// ⚠ THE PLAN'S STATED PAIR IS FALSIFIED BY MEASUREMENT AND IS RE-KEYED. It asks for + /// *"the mutated board is REFUSED … the unmutated board still OFFERS (B-pos, row D1's + /// beat)"*. Measured on the driven tree, the unmutated dellian beat-14 board does NOT + /// offer — the mint returns `NoCertification` (`spent=26 scans=36 cert=None`), because + /// item (4) already trips on a projected-resource reader at stack index 35 and basis B's + /// `ring_delta_signature` finds no signature at `ring=2`. A pair whose two arms both + /// refuse discriminates nothing. And no mutation is needed to make the point: the entry + /// item (4) trips on IS ITSELF a frozen one, so the unmutated board already witnesses + /// that item (4) does not consult the exemption. + /// + /// REVERT-PROBE: add a `frozen_ids` skip to item (4)'s closure ⇒ the scan can no longer + /// reach index 35 and `conjunct4_scans` collapses to at most the non-exempt population + /// (2 on this board) ⇒ FLIPS. + #[test] + fn r21_b_placement_b_item_four_scans_frozen_entries_that_conjunct_six_skips() { + let (beat, board) = drive_dump_until(TRACKED_DUMPS[1].1, 80, has_frozen_window) + .expect("REACH-GUARD: the dellian drive must reach a window with a frozen prefix"); + let live: Vec<&GameState> = board.loop_detect_ring.iter().map(|f| &f.live).collect(); + let window = &live[live.len() - 2..]; + let prior = window[0]; + let proposer = board.active_player; + let cover = certified_period_touch(window, &board, PeriodCertification::BoardCovered); + let non_exempt = board.stack.len() - cover.frozen_ids.len(); + assert!( + cover.frozen_ids.len() > non_exempt, + "REACH-GUARD beat {beat}: the frozen prefix must DOMINATE the stack, else \ + `scans > non_exempt` is satisfiable without ever touching a frozen entry; \ + frozen {} non-exempt {non_exempt}", + cover.frozen_ids.len() + ); + + // ── ITEM (4): the scan population is the UNEXEMPTED current stack ──────────────── + let mut v4 = PeriodVerdicts::for_period(&live, &board, proposer); + let covered = + loop_states_cover_modulo_growth_pinned(prior, &board, proposer, &[], &cover, &mut v4); + let scans = v4.conjunct4_scans() as usize; + assert!( + scans > non_exempt, + "R21(b-placement-B) beat {beat}: item (4) scanned {scans} entries, which must \ + EXCEED the {non_exempt} non-exempt ones — a scan that consulted `frozen_ids` \ + could never get past them" + ); + assert!( + scans > 0 && scans < board.stack.len(), + "attribution: item (4)'s `.any()` must have SHORT-CIRCUITED inside the stack \ + ({scans} of {}), which is what makes it the refuser rather than a later item", + board.stack.len() + ); + assert!( + cover.frozen_ids.contains(&board.stack[scans - 1].id), + "R21(b-placement-B): the entry item (4) refused on (stack index {}) must itself \ + be PROVEN FROZEN — that is the whole content of `the skip lives in item (6) and \ + nowhere earlier`", + scans - 1 + ); + assert!( + !covered, + "attribution: with a projected-resource reader inside the scanned population the \ + cover disjunct must fail; a `true` here would mean the scan found nothing and \ + the index assertion above was about the wrong entry" + ); + assert_eq!( + v4.conjunct6_frozen_skips(), + 0, + "the cover predicate returned at item (4), so item (6) never ran and can have \ + taken no exemption — the two counters below come from the OTHER arm" + ); + + // ── MATCHED PAIR: the SAME touch, at the gate the skip actually lives in ───────── + let mut v6 = PeriodVerdicts::for_period(&live, &board, proposer); + let specified = + stack_choices_are_all_specified(&board, proposer, &[], Some(&cover), &mut v6); + assert!( + specified, + "REACH-GUARD: the resolution gate must run to completion under the exempting \ + certificate, else its skip count is a truncation" + ); + assert_eq!( + v6.conjunct6_frozen_skips() as usize, + cover.frozen_ids.len(), + "R21(b-placement-B) matched pair: the SAME {} proven-frozen ids item (4) scanned \ + are the ones the resolution gate exempts", + cover.frozen_ids.len() + ); + } + + /// R17 — ID FRESHNESS ON THE DRIVEN DUMPS, AND `normalize_for_loop` PRESERVES EVERY + /// `StackEntry.id`. + /// + /// CR 608.1 + CR 104.4b. The frozen-prefix exemption is the ONE place 5d makes the + /// resolution gate strictly NARROWER than HEAD, and its soundness rests on a fixture that + /// is structurally unconstructible: *a window whose prefix is identity-stable across every + /// sampled frame while an exempted entry DOES announce or resolve in the driven period*. + /// Both disjuncts die on one fact — an entry that RESOLVED inside the window has RETIRED + /// its `StackEntry.id` (ids come from the monotone `next_object_id`), and an entry that + /// ANNOUNCED inside the window was absent from the oldest window frame, which the + /// exemption requires presence in. The second is definitional; the first is the invariant + /// this row asserts, since a fixture cannot. + /// + /// ARM 3 is the cross-frame comparison's unstated dependency, stated: `certified_period_touch` + /// compares `StackEntry.id` across frames, and `normalize_for_loop`'s products still feed + /// `loop_states_equal` / `loop_states_cover_modulo_growth*` (CR 104.4b equality), so an id + /// rewrite inside a function whose stated job is zeroing volatile monotone fields is + /// exactly the plausible future regression. + /// + /// REVERT-PROBE (arm 3, EXECUTED IN-TEST as an instrument-liveness control): zero one id in + /// a constructed normalized clone ⇒ the comparison must report a mismatch. REVERT-PROBE + /// (arms 1/2): inject a synthetic re-push of a retired id into the observed sequence ⇒ the + /// revival assertion FLIPS. + /// + /// ⚠ SCOPE: "both dumps" is the two TRACKED dumps. F4 is untracked until §5 U5. + #[test] + fn r17_a_retired_stack_entry_id_never_returns_and_normalization_preserves_it() { + use std::collections::HashSet; + + for (name, gz) in TRACKED_DUMPS { + let mut state = dump_state(gz); + let mut retired: HashSet = HashSet::new(); + let mut prev: HashSet = HashSet::new(); + let mut announcements = 0usize; + let mut resolutions = 0usize; + let mut revivals: Vec<(usize, ObjectId)> = Vec::new(); + let mut normalization_checks = 0usize; + let mut beats = 0usize; + + for beat in 0..40usize { + beats = beat; + let cur: HashSet = state.stack.iter().map(|e| e.id).collect(); + for id in cur.difference(&prev) { + announcements += 1; + if retired.contains(id) { + revivals.push((beat, *id)); + } + } + for id in prev.difference(&cur) { + resolutions += 1; + retired.insert(*id); + } + prev = cur; + + // ── ARM 3, on every beat carrying a stack ──────────────────────────────── + if !state.stack.is_empty() { + let ids = + |s: &GameState| -> Vec { s.stack.iter().map(|e| e.id).collect() }; + let before = ids(&state); + let normalized = state.normalize_for_loop(); + assert_eq!( + ids(&normalized), + before, + "[{name}] beat {beat}: ARM 3 — `normalize_for_loop` zeroes \ + `next_object_id` and clears trigger identity; rewriting a \ + `StackEntry.id` would break both `certified_period_touch`'s \ + cross-frame comparison and CR 104.4b equality" + ); + // INSTRUMENT-LIVENESS CONTROL: the comparison must be able to SEE a + // rewrite. Without it, `ids(..) == before` proves nothing about the + // detector, only about this board. + let mut rewritten = normalized; + rewritten.stack[0].id = ObjectId(u64::MAX); + assert_ne!( + ids(&rewritten), + before, + "[{name}] beat {beat}: the arm-3 comparison must FLIP on a rewritten id" + ); + normalization_checks += 1; + } + + if announcements >= 3 && resolutions >= 3 && normalization_checks >= 3 { + break; + } + if dump_drive_one_beat(&mut state).is_err() { + break; + } + } + + // ── PAIRED POSITIVE REACH-GUARD: the population is non-empty in BOTH directions + assert!( + announcements >= 3 && resolutions >= 3, + "[{name}] REACH-GUARD: the invariant must be checked over a population that \ + really announces AND really resolves, else it passes over nothing. \ + {announcements} announcements / {resolutions} resolutions in {beats} beats" + ); + assert!( + normalization_checks >= 3, + "[{name}] REACH-GUARD: arm 3 must have run against a NON-EMPTY stack; \ + {normalization_checks} checks" + ); + assert!( + revivals.is_empty(), + "[{name}] ARMS 1/2 — CR 608.1: an id that left the stack must never reappear \ + on it. `StackEntry.id` is drawn from the monotone `next_object_id`, whose \ + only two plain (non-`+= 1`) production assignments write THROWAWAY CLONES \ + (`effects/prepare.rs`'s simulated clone and `normalize_for_loop`'s comparand). \ + Revived: {revivals:?}" + ); + } + } + + /// R27 (a2) — THE SEAM: EVERY BOARD `certified_period_touch` HANDS THE CLASSIFIER IS AN + /// UN-NORMALIZED EVALUATION BOARD. + /// + /// CR 732.2a + CR 104.4b. Announcement and resolution are evaluated against the frame that + /// CARRIES the pair; a `normalize_for_loop` product zeroes `next_object_id`, so a + /// resolution evaluated against one allocates `ObjectId(0)` over a live object. The window + /// carrier is therefore the sample's `live` half, never its `normalized` half. + /// + /// The matched pair is the two halves of the SAME ring, one argument apart — the + /// `.normalized` arm is rounds 13–33's carrier, executed here as an instrument-liveness + /// control, so the `!= 0` assertion cannot be true for want of a board that could fail it. + /// + /// ⚠ WHAT THIS ARM DOES NOT COVER: the mint's own carrier CHOICE (`ring_live` in + /// `game::engine::bounded_cycle_offer`) is pinned structurally by + /// `game::engine`'s `the_period_touch_window_is_carried_by_the_live_half`, because a test + /// that builds its own window cannot flip on an edit to the mint's. + #[test] + fn r27_a2_every_announced_pair_carries_an_unnormalized_evaluation_board() { + for (name, gz) in TRACKED_DUMPS { + let (beat, board) = drive_dump_until(gz, 80, has_frozen_window).unwrap_or_else(|| { + panic!("REACH-GUARD [{name}]: no driven beat carried a usable window") + }); + assert_ne!( + board.next_object_id, 0, + "[{name}] beat {beat}: the LIVE board's allocator cursor must be non-zero, \ + else the axis this row is keyed to cannot discriminate" + ); + + let live: Vec<&GameState> = board.loop_detect_ring.iter().map(|f| &f.live).collect(); + let norm: Vec<&GameState> = board + .loop_detect_ring + .iter() + .map(|f| &f.normalized) + .collect(); + let touch = certified_period_touch( + &live[live.len() - 2..], + &board, + PeriodCertification::BoardCovered, + ); + assert!( + !touch.announced.is_empty(), + "[{name}] beat {beat}: REACH-GUARD — the announced half must be non-empty, \ + else the universal below quantifies over nothing" + ); + assert!( + touch + .announced + .iter() + .all(|(frame, _)| frame.next_object_id != 0), + "[{name}] beat {beat}: (a2) every carrying frame must be an EVALUATION board. \ + {} of {} announced pairs carry a zeroed allocator cursor", + touch + .announced + .iter() + .filter(|(f, _)| f.next_object_id == 0) + .count(), + touch.announced.len() + ); + + // ── INSTRUMENT-LIVENESS CONTROL: rounds 13–33's carrier, one argument apart ── + let control = certified_period_touch( + &norm[norm.len() - 2..], + &board, + PeriodCertification::BoardCovered, + ); + assert_eq!( + control.announced.len(), + touch.announced.len(), + "[{name}] the control must observe the SAME announcements — normalization \ + preserves every `StackEntry.id` (R17 arm 3), so only the CARRIER differs" + ); + assert!( + control + .announced + .iter() + .filter(|(_, e)| board.stack.iter().all(|s| s.id != e.id)) + .all(|(frame, _)| frame.next_object_id == 0), + "[{name}] the control arm must really carry ZEROED boards for the pairs whose \ + carrying frame is a RING frame; if it did not, the (a2) assertion above \ + would be true of any board and would prove nothing" + ); + } + } + + /// R16 (ii-b) — THE MAX SPEND ACROSS MINTABLE BEATS SATURATES THE CAP, AND IT DOES SO + /// AWAY FROM THE BEAT THE CORPUS OFFERS ON. + /// + /// CR 732.2a. (ii-a)'s companion, and the reason the two are SPLIT: exhaustion at a + /// non-offering beat is a fail-closed refusal on a beat that was refusing anyway — the + /// budget's stall-bounding job — while exhaustion at an OFFERING beat is a starved + /// acceptance and a defect. This arm records the first half on a real driven board. + /// + /// MEASURED, not predicted: at dellian beat 14 (`ring=2 stack=154 frozen=152`) the mint + /// spends the FULL cap and refuses `NoCertification`; the corpus's one offering beat + /// (dina, integration row `r16_the_offering_beats_probe_demand_is_exactly_measured`) + /// spends 13 and is NOT denied. Same seam, same cap, opposite sides of the budget. + /// + /// REVERT-PROBE: raise `PROBE_BUDGET` above dellian's unexempted demand (measured 96–107 + /// at these beats) ⇒ `denied` goes false ⇒ FLIPS. Lowering it cannot flip this arm, which + /// is exactly why the offering-beat row is a separate one. + #[test] + fn r16_ii_b_a_non_offering_mintable_beat_saturates_the_probe_budget() { + use crate::game::engine::{try_offer_bounded_cycle_shortcut_metered, ProbeCap}; + use crate::types::game_state::WaitingFor; + + let (beat, board) = drive_dump_until(TRACKED_DUMPS[1].1, 80, has_frozen_window) + .expect("REACH-GUARD: the dellian drive must reach a mintable beat"); + let proposer = board.active_player; + let mut at_priority = board.clone(); + at_priority.waiting_for = WaitingFor::Priority { player: proposer }; + assert!( + at_priority.last_loop_action_sequence.is_empty() + && at_priority.loop_detect_ring.len() >= 2, + "REACH-GUARD beat {beat}: steps (1)/(1b)/(2)/(2b) must all pass, else the mint \ + refuses above the classifier and spends nothing for a reason unrelated to cost" + ); + assert!( + at_priority.stack.len() > PROBE_BUDGET as usize, + "REACH-GUARD beat {beat}: the beat must carry more entries than the cap can pay \ + for, else saturation is not reachable at all; stack {} cap {PROBE_BUDGET}", + at_priority.stack.len() + ); + + let (outcome, meter) = + try_offer_bounded_cycle_shortcut_metered(&at_priority, false, ProbeCap::Shipped); + assert!( + outcome.is_err(), + "R16(ii-b): this beat must NOT offer — the whole point of the split is that \ + saturation here is a refusal on a beat that was refusing anyway. Got {outcome:?}" + ); + assert_eq!( + (meter.spent, meter.denied), + (PROBE_BUDGET, true), + "R16(ii-b) beat {beat}: the max observable spend at the shipped cap IS the cap, \ + and the exhaustion is LATCHED so it can be attributed rather than inferred. \ + meter {meter:?}, stack {}", + at_priority.stack.len() + ); + } + + // ─────────────────────────────────────────────────────────────────────────────────── + // §6 U3 ROWS — R14 / R19 / R29 / R31(completeness) / R32 + // ─────────────────────────────────────────────────────────────────────────────────── + + /// Shape (A): a proposer-controlled triggered ability declaring exactly ONE mandatory + /// PLAYER target (CR 115.2 "target opponent"), with the announcement ALREADY MADE. + /// + /// The announcement is load-bearing, not decoration: `optional_cleared_classification` + /// resolves the ability on the board `resolve_top` would hand it, and an UNANNOUNCED + /// target derives no events at all, which `probe_resolution` classifies `Prompted` + /// (§6 R11). A shape-(A) fixture without announced targets therefore has residual + /// `MayPrompt` for every slot vector and R19's transition could never fire. + fn u3_shape_a_entry(src: ObjectId, id: u64) -> StackEntry { + use crate::types::ability::{ + ControllerRef, Effect, QuantityExpr, ResolvedAbility, TargetFilter, TargetRef, + TypedFilter, + }; + let mut ability = ResolvedAbility::new( + Effect::LoseLife { + amount: QuantityExpr::Fixed { value: 1 }, + target: Some(TargetFilter::Typed(TypedFilter { + type_filters: vec![], + controller: Some(ControllerRef::Opponent), + properties: vec![], + })), + }, + vec![TargetRef::Player(PlayerId(1))], + src, + PlayerId(0), + ); + ability.optional = true; + StackEntry { + id: ObjectId(id), + source_id: src, + controller: PlayerId(0), + kind: StackEntryKind::TriggeredAbility { + source_id: src, + ability: Box::new(ability), + condition: None, + trigger_event: None, + description: None, + source_name: String::new(), + subject_match_count: None, + die_result: None, + }, + } + } + + /// §6 R7 — THE FROZEN PREFIX IS AN `(index, id)` IDENTITY, NOT A PRESENCE COUNT. + /// + /// CR 732.2a: `certified_period_touch` may exempt a `current.stack` entry from conjunct (6) + /// only when that entry sits at the SAME INDEX carrying the SAME `ObjectId` in every window + /// frame — i.e. it demonstrably did not participate in the observed period. A weaker test + /// ("something is at that index") would exempt an entry the period shifted underneath, and + /// a shifted entry is exactly one that DID move. + /// + /// This is the constructed unit R33/R21 do not cover: those rows measure the exemption on + /// the real dellian window, where every frame's prefix happens to be identity-stable, so + /// neither of them can separate the identity conjunct from a presence check. + /// + /// Arms, on ONE constructed 3-frame window (`[f0, f1, f2]` + `current`): + /// * **(a)** a stable `(index, id)` prefix of length 2 ⇒ `frozen_ids` contains exactly it; + /// * **(a′)** the reach-guard that makes (a) non-trivial: the stack's TAIL entry differs + /// across the frames, so `frozen_ids` is a PROPER subset and "freeze everything" fails; + /// * **(b)** one frame's stack shifted by a single index (an extra entry pushed at the + /// front) ⇒ the prefix ids are no longer at their own indices ⇒ NOTHING is frozen, even + /// though every id is still PRESENT in that frame. + /// + /// REVERT-PROBE (RUN, see the journal): weaken the identity conjunct to a presence check + /// (`frame.stack.get(*index).is_some()`) ⇒ (b)'s frozen set becomes the whole prefix again + /// ⇒ (b) FAILS. (a)/(a′) stay green under that probe, which is what makes (b) the arm the + /// identity conjunct is answerable to. + #[test] + fn r7_the_frozen_prefix_is_an_index_id_identity_never_a_presence_count() { + let entry = |id: u64| churn_entry(id, 0, lose_ability(1), None); + // ids 7001/7002 are the STABLE prefix; the tail differs per frame so the frozen set is + // a proper subset and this row cannot be satisfied by "freeze the whole stack". + let frame_with_tail = |tail: u64| { + let mut s = GameState::new_two_player(20); + s.stack.push_back(entry(7001)); + s.stack.push_back(entry(7002)); + s.stack.push_back(entry(tail)); + s + }; + let (f0, f1, f2) = ( + frame_with_tail(7010), + frame_with_tail(7011), + frame_with_tail(7012), + ); + let current = frame_with_tail(7013); + + // ── (a) + (a′) ── + let touch = certified_period_touch( + &[&f0, &f1, &f2], + ¤t, + PeriodCertification::BoardCovered, + ); + let frozen: Vec = touch.frozen_ids.iter().copied().collect(); + assert_eq!( + frozen, + vec![ObjectId(7001), ObjectId(7002)], + "(a) CR 732.2a: exactly the entries holding the SAME id at the SAME index in every \ + window frame are provably outside the observed period" + ); + assert!( + frozen.len() < current.stack.len(), + "(a′) reach-guard: the frozen set must be a PROPER subset — a fixture whose whole \ + stack froze could not tell the identity conjunct from `freeze everything`; \ + stack {} vs frozen {}", + current.stack.len(), + frozen.len() + ); + + // ── (b) one frame shifted by a single index; every id is still PRESENT in it ── + let shifted = { + let mut s = f1.clone(); + s.stack.push_front(entry(7099)); + s + }; + let shifted_ids: std::collections::BTreeSet = + shifted.stack.iter().map(|e| e.id).collect(); + assert!( + shifted_ids.contains(&ObjectId(7001)) && shifted_ids.contains(&ObjectId(7002)), + "(b) reach-guard: the shift must PRESERVE both prefix ids in that frame, otherwise \ + a presence check would reject them too and the arms would not separate" + ); + let shifted_touch = certified_period_touch( + &[&f0, &shifted, &f2], + ¤t, + PeriodCertification::BoardCovered, + ); + assert!( + shifted_touch.frozen_ids.is_empty(), + "(b) CR 732.2a: a single index shift means the entry moved WITHIN the observed \ + period, so no exemption is provable — presence at some index is not the property. \ + got {:?}", + shifted_touch.frozen_ids + ); + } + + /// R14 — THE DEGENERATE WINDOW ANNOUNCES `current.stack`, ELEMENT FOR ELEMENT. + /// + /// CR 732.2a + CR 608.1. With NO window frame there is no transition to observe, so the + /// honest degenerate reading is *"every current entry may announce"* — which is exactly + /// what makes `bounded_cycle_pin_slots` a thin alias of the window enumerator rather + /// than a second authority. + /// + /// ⚠ THE COMPARISON IS AGAINST THE TEST'S OWN INPUT DATA, NEVER AGAINST A SECOND CALL OF + /// THE FUNCTION UNDER TEST. Rounds 5/6 wrote this row as + /// `bounded_cycle_pin_slots_for_window(&certified_period_touch(&[], state, ..), p)` vs + /// `bounded_cycle_pin_slots(state, p)` — post-U3 the same function body on both sides, so + /// the equality held by construction AND the stated revert-probe edited a dependency BOTH + /// sides call. Round 7's replacement (a HEAD-captured frozen point sequence) was struck in + /// turn: U2's shape-(B) mint publishes on beats HEAD refuses, and a per-beat sequence + /// embeds `ObjectId` literals that a fixture re-dump renumbers. The PROPERTY against a + /// CONSTRUCTED frame has neither failure mode. + /// + /// REVERT-PROBE that actually flips: restore round 4's `window.len() < 2 ⇒ announced` + /// EMPTY branch ⇒ `announced.len() == 0` while the constructed stack is non-empty ⇒ the + /// element-for-element equality fails on the LENGTH assertion alone, and the ≥1-point + /// reach-guard fails with it. + #[test] + fn r14_the_degenerate_window_announces_the_current_stack_element_for_element() { + use crate::game::engine::{bounded_cycle_pin_slots_for_window, entry_publishes_pin_slots}; + + let (mut state, src) = u2_relief_board(); + // ≥2 entries, deliberately HETEROGENEOUS: the first publishes for P0, the second is + // controlled by P1 and the mint refuses it. `announced` must carry BOTH — the touch + // enumerates the period, the mint filters it — so an `announced` accidentally built + // from the mint's accepted set would fail the element-for-element equality. + let publishing = u2_shape_b_entry(src, 9140, u2_draw_effect(), |_| {}); + let mut foreign = u2_shape_b_entry(src, 9141, u2_draw_effect(), |_| {}); + foreign.controller = PlayerId(1); + state.stack.push_back(publishing); + state.stack.push_back(foreign); + assert!( + state.stack.len() >= 2, + "NON-DEGENERACY: a one-entry stack would make the ordering half of the claim \ + untestable and an empty one would make the whole property vacuous" + ); + + let expected: Vec<(usize, ObjectId)> = state + .stack + .iter() + .enumerate() + .map(|(i, e)| (i, e.id)) + .collect(); + + for cert in [ + PeriodCertification::BoardCovered, + PeriodCertification::BoardEqualOnly, + PeriodCertification::ResourceSignatureOnly, + ] { + let touch = certified_period_touch(&[], &state, cert); + let observed: Vec<(usize, ObjectId)> = touch + .announced + .iter() + .enumerate() + .map(|(i, (_, e))| (i, e.id)) + .collect(); + assert_eq!( + observed, expected, + "{cert:?}: the degenerate window's announced pairs are `current.stack` \ + element for element, IN ORDER" + ); + assert!( + touch + .announced + .iter() + .all(|(frame, _)| std::ptr::eq(*frame, &state)), + "{cert:?}: every degenerate pair's carrying frame IS `current` — there is no \ + other frame for it to be" + ); + assert!( + touch.frozen_ids.is_empty(), + "{cert:?}: with no window frame nothing is PROVEN frozen, on ANY certificate \ + value — the empty-window branch returns before the frozen walk" + ); + } + + // PAIRED POSITIVE REACH-GUARD, and it is what stops the property collapsing into a + // vacuous truth about a stack nothing publishes on. + let touch = certified_period_touch(&[], &state, PeriodCertification::ResourceSignatureOnly); + let points = bounded_cycle_pin_slots_for_window(&touch, PlayerId(0)); + assert!( + !points.is_empty(), + "reach-guard: at least one constructed entry must be ACCEPTED by the mint, or the \ + equality above would hold over a period the enumerator never publishes from" + ); + assert!( + entry_publishes_pin_slots(&state, &state.stack[1], PlayerId(0)).is_none(), + "reach-guard, other direction: the P1-controlled entry is REFUSED by the mint yet \ + still appears in `announced` — proof the touch is the period's enumeration and \ + not the mint's accepted set" + ); + } + + /// R19 — THE CACHED VERDICT HOLDS NOTHING SLOTS-DERIVED. + /// + /// The named regression row for the branch NOT taken (key the memo on + /// `(StackEntry.id, slots)`). If that option's risk returns one layer over, this is what + /// loses. + /// + /// **(a) BEHAVIOURAL.** `state` and `entry` are held FIXED and only `slots` varies, over + /// FOUR cases — `{}`, `{target}`, `{may}`, `{target, may}`. The vector is SHAPE-DEPENDENT + /// and both shapes are asserted, because D3 re-expressed the gate as *"`may` pinned AND + /// (`target.is_none()` OR target pinned)"*: + /// * **(a-A) shape (A)** — targeted AND optional ⇒ `[None, None, None, Some(residual)]`. + /// * **(a-B) shape (B)** — may-only ⇒ `[None, None, Some(residual), Some(residual)]`. + /// + /// The `{may}` case is the one that DIFFERS between the shapes, and asserting BOTH is what + /// makes D3's `target.is_none()` disjunct load-bearing: with (a-A) alone, deleting that + /// disjunct changes nothing and the row cannot see it. The two SINGLETON cases are what + /// make both disjuncts load-bearing, which a 0/1/2-slot sweep could not do. + /// + /// **(b) STRUCTURAL.** `EntryVerdict` destructures EXHAUSTIVELY into + /// `{ published, primary, residual }`, all three produced by functions whose signatures + /// take NO slots, so a future slots-derived field is a COMPILE ERROR rather than a review + /// miss. ⚠ `..` IS FORBIDDEN ON THAT DESTRUCTURE. Adding e.g. `pub slots_digest: u64` to + /// `EntryVerdict` makes the line below **E0027**; rustc's own `help:` then suggests adding + /// `..`, which silently disarms the guard. THE E0027 IS THIS GUARD FIRING, NOT A COMPILE + /// ERROR TO FIX. + /// + /// REVERT-PROBE (a): collapse the design to an id-keyed cache of the RELIEF verdict — + /// i.e. adopt option 1's shape with an incomplete key — ⇒ every case returns the `{}` + /// verdict `None` ⇒ the fourth arm's `Some(residual)` assertion FLIPS TO FAIL. The paired + /// positive reach-guard is mandatory and is asserted: the last case must return `Some` on + /// the unmutated design, otherwise the leading `None`s pass over a relief that never + /// relieves anything. + #[test] + fn r19_the_relief_vector_varies_only_with_slots_and_the_cached_value_is_slots_free() { + use crate::game::engine::entry_publishes_pin_slots; + use crate::game::resolution_prompt::ResolutionChoiceFreedom; + + let (mut state, src) = u2_relief_board(); + // Two live opponents, so the shape-(A) announcement is a REAL choice rather than a + // forced one — the mint's own acceptance is what this row rides, not target scarcity. + let shape_a = u3_shape_a_entry(src, 9190); + let shape_b = u2_shape_b_entry(src, 9191, u2_draw_effect(), |_| {}); + state.stack.push_back(shape_a.clone()); + state.stack.push_back(shape_b.clone()); + + let pub_a = entry_publishes_pin_slots(&state, &shape_a, PlayerId(0)) + .expect("(a-A) reach-guard: the shape-(A) fixture must reach the mint"); + let target = pub_a + .target + .clone() + .expect("(a-A) reach-guard: shape (A) publishes its CR 601.2c announcement slot"); + let may_a = pub_a + .may + .clone() + .expect("(a-A) reach-guard: shape (A) is optional, so it publishes its CR 603.5 gate"); + let pub_b = entry_publishes_pin_slots(&state, &shape_b, PlayerId(0)) + .expect("(a-B) reach-guard: the shape-(B) fixture must reach the mint"); + assert!( + pub_b.target.is_none(), + "(a-B) reach-guard: shape (B) announces NOTHING, so it publishes no target slot — \ + that `None` is exactly what the `{{may}}` case discriminates" + ); + let may_b = pub_b + .may + .clone() + .expect("(a-B) reach-guard: shape (B) publishes its CR 603.5 gate"); + + let mut verdicts = PeriodVerdicts::for_period(&[], &state, PlayerId(0)); + let f = verdicts + .frame_ix(&state) + .expect("reach-guard: the container holds the board the relief is asked about"); + + let relieved = |verdicts: &mut PeriodVerdicts<'_>, + entry: &StackEntry, + slots: &[DecisionSlot]| + -> bool { + matches!( + pinned_may_choice_relief(f, entry, verdicts, u2_scope(slots)), + Some(ResolutionChoiceFreedom::FreeUnlessReplacements(_)) + ) + }; + + // ── (a-A) shape (A): the gate needs BOTH slots ────────────────────────────────── + let vector_a = [ + relieved(&mut verdicts, &shape_a, &[]), + relieved(&mut verdicts, &shape_a, std::slice::from_ref(&target)), + relieved(&mut verdicts, &shape_a, std::slice::from_ref(&may_a)), + relieved(&mut verdicts, &shape_a, &[target.clone(), may_a.clone()]), + ]; + assert_eq!( + vector_a, + [false, false, false, true], + "(a-A) CR 603.5 + CR 601.2c: a targeted optional entry is relieved ONLY when both \ + published slots are pinned. The two SINGLETON cases are what make both disjuncts \ + of `may pinned AND (target.is_none() OR target pinned)` load-bearing" + ); + + // ── (a-B) shape (B): `target.is_none()` discharges the second conjunct outright ── + let vector_b = [ + relieved(&mut verdicts, &shape_b, &[]), + relieved(&mut verdicts, &shape_b, std::slice::from_ref(&target)), + relieved(&mut verdicts, &shape_b, std::slice::from_ref(&may_b)), + relieved(&mut verdicts, &shape_b, &[target.clone(), may_b.clone()]), + ]; + assert_eq!( + vector_b, + [false, false, true, true], + "(a-B) CR 601.2c: a may-only entry surfaces no announcement choice, so demanding a \ + pinned target would refuse relief the mint's own schema fully describes. The \ + `{{may}}` case is where the two shapes DIFFER — that difference is the whole \ + reason D3's `target.is_none()` disjunct exists" + ); + + // ── (b) STRUCTURAL: the cached value is slots-free BY DESTRUCTURE ─────────────── + // ⚠ NO `..`. A fourth field here is E0027 and the E0027 IS THIS GUARD FIRING. + let super::verdict_memo::EntryVerdict { + published, + primary, + residual, + } = verdicts.verdict(f, &shape_a); + assert!( + published.is_some() && matches!(primary, ResolutionChoiceFreedom::MayPrompt), + "(b) reach-guard: the destructured value must be the LIVE one this row's (a) arm \ + consumed — a mint answer plus the CR 603.5 `MayPrompt` that makes relief the \ + deciding layer" + ); + assert!( + residual.is_some(), + "(b) reach-guard: the optional-cleared residual is computed BECAUSE a `may` slot \ + is published — the field is not decorative" + ); + } + + /// R29 — THE CR 603.3c MID-CONSTRUCTION GUARD SURVIVES THE `FrameIx` REWRITE, AND IT + /// ANSWERS FROM THE CARRYING FRAME. + /// + /// Asserted AT THE RELIEF SEAM deliberately: an offer-level negative on this axis is + /// DOMINATED by conjunct (6)'s own refusals, and the relief has no upstream that can + /// satisfy it. + /// + /// * **(a) THE GUARD** — an entry the mint publishes a `target` slot for, that slot + /// PINNED (so the mint half alone answers `true`), with the frame's + /// `pending_trigger_entry = Some(entry.id)` ⇒ `false`. + /// * **(a′) MATCHED POSITIVE, byte-identical except the cursor** — `None` ⇒ `true`. This + /// is the reach-guard: without it, (a) passes over a mint that published nothing. + /// * **(b) THE EQUALITY, NOT THE PRESENCE** — a cursor naming NO live entry + /// (`ObjectId(u64::MAX)`) ⇒ still `true`, so the row pins `== Some(entry.id)` rather + /// than "any cursor refuses". In-tree precedent for exactly this control on the sibling + /// gate: `a_pinned_slot_skips_gate_three_and_six`'s gate-(1) control. + /// * **(c) WHICH BOARD** — the conjunct the 4-arg signature could not even express. The + /// pair is driven from a RETAINED frame, then the two boards are CROSSED: (c1) carrying + /// frame's cursor set, `current`'s clear ⇒ `false` (the carrying frame decides); (c2) + /// carrying frame's cursor clear, `current`'s set ⇒ `true` (the live board does NOT + /// decide for a retained pair). Byte-identical except which board holds the cursor. + /// + /// REVERT-PROBE (a)/(a′)/(b): delete + /// `if board.pending_trigger_entry == Some(entry.id) { return false; }` from + /// `entry_target_choice_is_pinned` — i.e. ship the round-35 4-arg signature, which makes + /// the statement unwritable — ⇒ (a) answers `true` ⇒ FLIPS, while (a′)/(b) stay green. + /// ⚠ That revert COMPILES, which is the whole reason this row exists: the fail-open + /// direction leaves no type error behind and `PeriodVerdicts.frames` is private, so an + /// executor who drops the board has no way to notice. + /// + /// REVERT-PROBE (c): pass the live `current` instead of the pair's carrying frame ⇒ (c1) + /// and (c2) BOTH FLIP, while (a)/(a′)/(b) stay green on the degenerate current-stack pair + /// where the two boards coincide. + #[test] + fn r29_the_cr_603_3c_cursor_is_read_from_the_pairs_carrying_frame() { + use crate::game::engine::entry_publishes_pin_slots; + + let (mut frame, src) = u2_relief_board(); + let entry = u3_shape_a_entry(src, 9290); + frame.stack.push_back(entry.clone()); + let published = entry_publishes_pin_slots(&frame, &entry, PlayerId(0)) + .expect("reach-guard: the fixture must reach the mint"); + let target = published.target.clone().expect( + "reach-guard: the mint must publish a TARGET slot, or the guard below \ + would be refused by the `target.is_some()` conjunct instead", + ); + let slots = vec![target]; + + // ── (a′) matched positive: no cursor ──────────────────────────────────────────── + let mut clear = frame.clone(); + clear.pending_trigger_entry = None; + { + let mut verdicts = PeriodVerdicts::for_period(&[], &clear, PlayerId(0)); + let f = verdicts + .frame_ix(&clear) + .expect("container holds the board"); + assert!( + entry_target_choice_is_pinned(&clear, f, &entry, &mut verdicts, u2_scope(&slots)), + "(a′) with the published slot pinned and no mid-construction cursor, the \ + announcement choice IS specified" + ); + } + + // ── (a) the guard: the cursor names THIS entry ────────────────────────────────── + let mut cursored = frame.clone(); + cursored.pending_trigger_entry = Some(entry.id); + { + let mut verdicts = PeriodVerdicts::for_period(&[], &cursored, PlayerId(0)); + let f = verdicts + .frame_ix(&cursored) + .expect("container holds the board"); + assert!( + !entry_target_choice_is_pinned( + &cursored, + f, + &entry, + &mut verdicts, + u2_scope(&slots) + ), + "(a) CR 603.3c: a mid-construction entry's announcement is not yet complete, \ + so no published slot can specify it — and `pending_trigger_entry` is set \ + exactly while a prompt is up, which is why the mint (a function of the \ + BOARD, never of the PROMPT) cannot carry it and the relief must" + ); + } + + // ── (b) EQUALITY, not presence ───────────────────────────────────────────────── + let mut foreign_cursor = frame.clone(); + foreign_cursor.pending_trigger_entry = Some(ObjectId(u64::MAX)); + { + let mut verdicts = PeriodVerdicts::for_period(&[], &foreign_cursor, PlayerId(0)); + let f = verdicts + .frame_ix(&foreign_cursor) + .expect("container holds the board"); + assert!( + entry_target_choice_is_pinned( + &foreign_cursor, + f, + &entry, + &mut verdicts, + u2_scope(&slots) + ), + "(b) the guard is `== Some(entry.id)`, not `is_some()` — a cursor naming no \ + live entry refuses nothing" + ); + } + + // ── (c) WHICH BOARD, on a RETAINED pair ──────────────────────────────────────── + // The container's frames are `[carrying, current]`, and `carrying` is NOT `current`, + // so the two boards can disagree — which is exactly the shape the degenerate + // current-stack pair cannot express. + let mut carrying = frame.clone(); + let mut current = frame.clone(); + current.stack.clear(); + + carrying.pending_trigger_entry = Some(entry.id); + current.pending_trigger_entry = None; + { + let ring = [&carrying]; + let mut verdicts = PeriodVerdicts::for_period(&ring, ¤t, PlayerId(0)); + let f = verdicts + .frame_ix(&carrying) + .expect("(c) reach-guard: the CARRYING frame is in the period"); + assert_ne!( + verdicts.frame_ix(&carrying), + verdicts.frame_ix(¤t), + "(c) reach-guard: the two boards must be DISTINCT frames, or (c1)/(c2) are \ + the same assertion twice" + ); + assert!( + !entry_target_choice_is_pinned( + &carrying, + f, + &entry, + &mut verdicts, + u2_scope(&slots) + ), + "(c1) the CARRYING frame decides: its cursor names this entry, so the \ + announcement is mid-construction on the board the announcement was made \ + against — regardless of what the live board says" + ); + } + + carrying.pending_trigger_entry = None; + current.pending_trigger_entry = Some(entry.id); + { + let ring = [&carrying]; + let mut verdicts = PeriodVerdicts::for_period(&ring, ¤t, PlayerId(0)); + let f = verdicts + .frame_ix(&carrying) + .expect("(c) reach-guard: the CARRYING frame is in the period"); + assert!( + entry_target_choice_is_pinned( + &carrying, + f, + &entry, + &mut verdicts, + u2_scope(&slots) + ), + "(c2) the LIVE board does not decide for a retained pair — byte-identical to \ + (c1) except which board holds the cursor" + ); + } + + // ── (c3) THE SAME CROSSING, AT THE PRODUCTION SEAM THAT WRITES THE ARGUMENT ───── + // (c1)/(c2) pin the PREDICATE's board-sensitivity, which is where the plan sites this + // row (an offer-level negative on this axis is dominated by conjunct (6)'s own + // refusals). But the argument the row is about is written in + // `stack_choices_are_all_specified`'s announcement loop, so the plan's stated + // revert-probe — "pass the live `current` instead of the pair's carrying frame" — + // needs a site that FLIPS. This arm is that site: the (c2) crossing driven end to + // end, where the correct argument CERTIFIES and the reverted one REFUSES. + // + // Both published slots are pinned here (the `may` too), so the entry also clears + // conjunct (6) and the `true` below is the whole predicate's answer, not one gate's. + { + let may = published + .may + .clone() + .expect("(c3) reach-guard: the fixture is optional, so it publishes a may gate"); + let both = vec![slots[0].clone(), may]; + let mut oldest = carrying.clone(); + oldest.stack.clear(); + let ring = [&oldest, &carrying]; + let touch = + certified_period_touch(&ring, ¤t, PeriodCertification::ResourceSignatureOnly); + assert!( + touch + .announced + .iter() + .any(|(frame, e)| std::ptr::eq(*frame, &carrying) && e.id == entry.id), + "(c3) reach-guard: the pair must arrive from the RETAINED frame — on a \ + current-stack pair the two boards coincide and the argument is untestable" + ); + assert!( + current.pending_trigger_entry == Some(entry.id) + && carrying.pending_trigger_entry.is_none(), + "(c3) reach-guard: the crossing must still be in place — `current` holds the \ + CR 603.3c cursor and the carrying frame does not" + ); + let mut verdicts = PeriodVerdicts::for_period(&ring, ¤t, PlayerId(0)); + assert!( + stack_choices_are_all_specified( + ¤t, + PlayerId(0), + &both, + Some(&touch), + &mut verdicts + ), + "(c3) with both published slots pinned and the mid-construction cursor sitting \ + only on the LIVE board, the announcement loop must certify — because it asks \ + the CARRYING frame. Passing `current` there makes the cursor bite, the `||`'s \ + other disjunct is also false (two legal assignments on the frame), and this \ + assertion FLIPS" + ); + } + } + + /// R32 — THE ANNOUNCEMENT LOOP'S OR-DISJUNCT READS THE PAIR'S CARRYING FRAME, NEVER + /// `current`. Paired with R29, which pins the same discipline for the other disjunct: + /// the two halves of one `||` must not read two boards. + /// + /// `stack_entry_has_no_ordering_input`'s arity does NOT change under 5d, which is why + /// only a row can pin the decision — §7 held it under *"Reused verbatim"*. It is + /// board-sensitive: `state.pending_trigger_entry`, then `forced_unique_targeting` → + /// `build_target_slots` + `auto_select_targets_for_ability`, i.e. the verdict is a + /// function of the board's legal-target POPULATION. + /// + /// THE PAIR. A two-frame window whose announced entry declares a target with **two** + /// legal assignments on its CARRYING FRAME and **one** on `current` (a creature that left + /// the battlefield after the announcement). + /// * **(a) CORRECT BOARD** ⇒ `false` (two assignments ⇒ not forced), and with no pin + /// published for that entry, `stack_choices_are_all_specified` ⇒ `false` — the + /// fail-closed answer. + /// * **(b) THE FAIL-OPEN TWIN** ⇒ passing `current` sees ONE legal assignment ⇒ `true` ⇒ + /// the entry is RELIEVED and the offer can certify over an announcement choice that is + /// not forced on the board where it is actually made. + /// * **(c) POSITIVE CONTROL that the instrument is keyed** — same window, an entry with + /// one legal assignment on BOTH boards ⇒ both arms agree on `true`, so (a)/(b) differ + /// BECAUSE OF THE BOARD and not because the fixture always disagrees. + /// + /// REVERT-PROBE: change `stack_entry_has_no_ordering_input(announced[i].0, entry)` to + /// `(state, entry)` in `stack_choices_are_all_specified`'s announcement loop ⇒ (b) is + /// what you get and (a)'s offer-level assertion FLIPS. + #[test] + fn r32_the_announcement_disjunct_reads_the_carrying_frame_not_the_live_board() { + use crate::game::scenario::GameScenario; + use crate::types::ability::{ + Effect, QuantityExpr, ResolvedAbility, TargetFilter, TargetRef, TypeFilter, TypedFilter, + }; + + // One creature the announcement can still reach on `current`, one that leaves. + let mut carrying = GameScenario::new_n_player(2, 7).build().state().clone(); + let stays = battlefield_creature(&mut carrying, 9320, 1); + let leaves = battlefield_creature(&mut carrying, 9321, 1); + + let creature_entry = |id: u64, announced: Vec| { + let ability = ResolvedAbility::new( + Effect::DealDamage { + amount: QuantityExpr::Fixed { value: 1 }, + target: TargetFilter::Typed(TypedFilter { + type_filters: vec![TypeFilter::Creature], + controller: None, + properties: vec![], + }), + damage_source: None, + excess: None, + }, + announced, + ObjectId(9320), + PlayerId(0), + ); + StackEntry { + id: ObjectId(id), + source_id: ObjectId(9320), + controller: PlayerId(0), + kind: StackEntryKind::TriggeredAbility { + source_id: ObjectId(9320), + ability: Box::new(ability), + condition: None, + trigger_event: None, + description: None, + source_name: String::new(), + subject_match_count: None, + die_result: None, + }, + } + }; + + let two_ways = creature_entry(9330, vec![TargetRef::Object(leaves)]); + carrying.stack.push_back(two_ways.clone()); + + // The window's oldest frame carries NO stack, so the entry ANNOUNCED inside it. + let mut oldest = carrying.clone(); + oldest.stack.clear(); + // `current`: the entry has resolved off the stack AND one legal target is gone. + let mut current = carrying.clone(); + current.stack.clear(); + current.objects.remove(&leaves); + current.battlefield.retain(|o| *o != leaves); + + // ── reach-guards: the two boards really carry DIFFERENT legal populations ─────── + assert_eq!( + carrying + .battlefield + .iter() + .filter(|o| carrying.objects.contains_key(o)) + .count(), + 2, + "reach-guard: the carrying frame must offer TWO legal assignments" + ); + assert!( + current.objects.contains_key(&stays) && !current.objects.contains_key(&leaves), + "reach-guard: `current` must offer exactly ONE — the fail-open direction needs a \ + target that is legal on the frame and gone from the live board" + ); + + // ── (a) / (b) THE MATCHED PAIR, one variable: which board ────────────────────── + assert!( + !stack_entry_has_no_ordering_input(&carrying, &two_ways), + "(a) CORRECT BOARD: two legal assignments on the carrying frame ⇒ the \ + announcement choice is NOT forced ⇒ fail-closed" + ); + assert!( + stack_entry_has_no_ordering_input(¤t, &two_ways), + "(b) THE FAIL-OPEN TWIN: on the live board one target has gone, so the assignment \ + LOOKS forced and the entry would be relieved — an offer certified over a choice \ + that is not forced where it is actually made" + ); + + // ── (a) at the OFFER-LEVEL seam, which is where the argument is actually written ─ + let ring = [&oldest, &carrying]; + let touch = + certified_period_touch(&ring, ¤t, PeriodCertification::ResourceSignatureOnly); + assert!( + touch + .announced + .iter() + .any(|(frame, e)| std::ptr::eq(*frame, &carrying) && e.id == two_ways.id), + "reach-guard: the pair must arrive from the RETAINED frame, not from \ + `current.stack` — on the degenerate pair the two boards coincide and the row \ + would be untestable" + ); + let mut verdicts = PeriodVerdicts::for_period(&ring, ¤t, PlayerId(0)); + assert!( + !stack_choices_are_all_specified( + ¤t, + PlayerId(0), + &[], + Some(&touch), + &mut verdicts + ), + "(a) offer level: with no pin published for the entry, the announcement loop's \ + `||` must refuse — and it can only refuse if its second disjunct read the \ + CARRYING frame. Passing `current` there yields (b) and this assertion flips" + ); + + // ── (c) POSITIVE CONTROL: one legal assignment on BOTH boards ────────────────── + let mut solo_carrying = carrying.clone(); + solo_carrying.objects.remove(&leaves); + solo_carrying.battlefield.retain(|o| *o != leaves); + let solo = creature_entry(9331, vec![TargetRef::Object(stays)]); + assert!( + stack_entry_has_no_ordering_input(&solo_carrying, &solo) + && stack_entry_has_no_ordering_input(¤t, &solo), + "(c) the instrument is KEYED, not always-disagreeing: an entry with one legal \ + assignment on both boards is answered identically on both" + ); + } + + /// R31 COMPLETENESS ARM (the U3 half of a row whose arms (a)/(a′)/(b) shipped in U2). + /// + /// U2's arms proved the closure on entries sitting on `current.stack`. This arm proves + /// the premise those arms silently rest on — *every minted pair is SCANNED* — for the + /// population U2 could not reach: a pair that ANNOUNCED inside the certified period and + /// has since left the stack. It ships here and not in U2 because its revert-probe names + /// `touch.announced`, which U3 creates: at U2 `stack_choices_are_all_specified` still + /// carried HEAD's 3-argument shape, so there was no `touch` to drop. + /// + /// Off-stack announced pairs are the MAJORITY population on both measured dumps + /// (`beats_offstack_nonzero` 157/161 F4, 19/23 dellian), so this is the common case, not + /// an edge one. + /// + /// THE BOARD: the entry carries `Effect::PayCost { payer: Controller }` — a member of + /// `effect_resolution_choice_freedom`'s fail-closed grouped arm, i.e. exactly U2 arm + /// (b)'s subject — announced on the retained carrying frame and ABSENT from + /// `current.stack`. Conjunct (6) must still refuse it. + /// + /// REVERT-PROBE: narrow the RESOLUTION loop back to `current.stack` only (drop the + /// `touch.announced` half of `pairs`) ⇒ the pair is never classified ⇒ the predicate + /// returns `true` ⇒ FLIPS. That is what makes "every minted pair is scanned" a MEASURED + /// premise rather than a stated one. + #[test] + fn r31_completeness_an_announced_off_stack_pair_is_still_scanned_by_conjunct_six() { + use crate::game::engine::entry_publishes_pin_slots; + use crate::types::ability::{AbilityCost, Effect, TargetFilter}; + + let (frame, src) = u2_relief_board(); + let entry = u2_shape_b_entry( + src, + 9310, + Effect::PayCost { + cost: AbilityCost::Mana { + cost: crate::types::mana::ManaCost::Cost { + shards: vec![], + generic: 1, + }, + }, + scale: None, + payer: TargetFilter::Controller, + }, + |_| {}, + ); + let may = entry_publishes_pin_slots(&frame, &entry, PlayerId(0)) + .expect("reach-guard: the fixture must reach the mint") + .may + .expect( + "reach-guard: it publishes its CR 603.5 gate, so the refusal below is the \ + RESIDUAL's and not the mint's", + ); + + // oldest ⇒ carrying ⇒ current: the entry announces on `carrying` and has RESOLVED + // OFF the stack by `current`. + let oldest = frame.clone(); + let mut carrying = frame.clone(); + carrying.stack.push_back(entry.clone()); + let current = frame.clone(); + + let ring = [&oldest, &carrying]; + let touch = + certified_period_touch(&ring, ¤t, PeriodCertification::ResourceSignatureOnly); + + // ── reach-guards: the pair is reachable ONLY through `announced` ──────────────── + assert!( + current.stack.is_empty(), + "reach-guard: with the entry still on `current.stack` this arm would be U2's \ + arm (b) again and the completeness premise would go untested" + ); + assert!( + touch + .announced + .iter() + .any(|(f, e)| std::ptr::eq(*f, &carrying) && e.id == entry.id), + "reach-guard: the window must actually MINT the pair, or the refusal below would \ + be a refusal over an empty population" + ); + assert!( + stack_entry_has_no_ordering_input(&carrying, &entry), + "reach-guard: shape (B) announces no choice, so the ANNOUNCEMENT loop passes and \ + the refusal below is attributable to conjunct (6)" + ); + + let mut verdicts = PeriodVerdicts::for_period(&ring, ¤t, PlayerId(0)); + assert!( + !stack_choices_are_all_specified( + ¤t, + PlayerId(0), + std::slice::from_ref(&may), + Some(&touch), + &mut verdicts + ), + "CR 732.2a: the described sequence is EVERY choice the shortcut makes, not the \ + subset that happens to sit on the stack at the offer beat. A `PayCost` residual \ + sits in the fail-closed grouped arm, so an announced-then-resolved pair must \ + still refuse the offer" + ); + assert!( + verdicts.conjunct6_asks() >= 1, + "attribution: conjunct (6) must have ASKED about the off-stack pair — a `false` \ + with zero asks would be some other gate's refusal. asks={}", + verdicts.conjunct6_asks() + ); + } + + /// R22's own NEGATIVE CONTROL — the VACUITY BOUNDARY, never coverage. + /// + /// At window offset zero the window-relative position EQUALS the absolute one + /// (`w_pos == abs ⟺ idx == 0`) and an id-only memo key serves the same frame it would + /// have computed anyway, so the shipped mint and BOTH reverts AGREE. Round 15's re-key + /// from two ring frames to three reproduced the diagnosed defect one parameter over + /// precisely because a "three-frame period" taken as the WHOLE ring plus `current` is + /// still `idx == 0`. + /// + /// This test is GREEN under every probe R22 runs. That measured agreement is the whole + /// point: it is what a fixture at this offset can prove, which is nothing. + #[test] + fn r22_control_at_window_offset_zero_the_two_key_arithmetics_agree() { + let (base, src) = u2_relief_board(); + let entry = u2_shape_b_entry(src, 9221, u2_draw_effect(), |_| {}); + let f1 = base.clone(); + let mut f2 = base.clone(); + f2.stack.push_back(entry.clone()); + let mut current = base.clone(); + current.stack.push_back(entry.clone()); + + let ring = [&f1, &f2]; + let mut flat = PeriodVerdicts::for_period(&ring, ¤t, PlayerId(0)); + let f = flat + .frame_ix(&f1) + .expect("the control's carrying frame is the FIRST — that is the whole defect"); + // `FrameIx`'s field is private outside its module — deliberately, it is a token and not + // a number — so offset zero is asserted by ORDER: nothing in the table precedes it. + let ix2 = flat.frame_ix(&f2).expect("f2 is in the period"); + let ixc = flat.frame_ix(¤t).expect("current is in the period"); + assert!( + f < ix2 && ix2 < ixc, + "the control is only a control AT offset zero: if the carrying frame stopped being \ + the FIRST, the fixture drifted into the discriminating shape and this test would \ + start claiming coverage it cannot support" + ); + assert!( + flat.verdict(f, &entry).published.is_some(), + "at idx == 0 every key arithmetic agrees — measured, and reported as a boundary \ + rather than as evidence" + ); + } + + /// R22 — THE VERDICT DOOR IS TOTAL, FRAME-CORRECT AND PROPOSER-CORRECT. + /// + /// The class row for the derived cache, and the ONLY row that can lose if a key-component + /// error returns. FIVE conjuncts. + /// + /// **(1) TOTALITY, STRUCTURAL.** `PeriodVerdicts::verdict(&mut self, f: FrameIx, + /// entry: &StackEntry) -> &EntryVerdict`. ⚠ AN `Option` RETURN, AN INDEXING OPERATOR, OR + /// ANY SIBLING `get(..)` ACCESSOR IS FORBIDDEN — a partial container has a MISS CONTRACT, + /// and a row asserting how a miss behaves asserts an unreachable state. Totality is scoped + /// honestly: it is total over every `FrameIx` THIS container minted, and MINTING + /// (`frame_ix`) is the membership question — conjunct (2′) is that half. + /// + /// **(2) FRAME-CORRECTNESS — THE PIN IS THE WINDOW OFFSET, NOT THE FRAME COUNT.** Round 15 + /// re-keyed this two frames → three and reproduced the diagnosed defect one parameter over: + /// `w_pos == abs ⟺ idx == 0`, so a "three-frame period" built as the WHOLE ring plus + /// `current` is exactly as vacuous as the two-frame form it replaced. The construction + /// requirement is therefore `ring.len() >= 3` **AND** the candidate window starting at + /// `idx >= 1` — a STRICT SUFFIX of the ring plus `current` — and BOTH are carried as + /// EXECUTABLE reach-guards, not prose. The period is built so the SAME entry id classifies + /// DIFFERENTLY per frame (the source object is absent from the older frame, so the mint + /// answers `None` there and `Some` on the carrying frame), and the consumed verdict must be + /// the CARRYING frame's, never the window-relative position's. + /// + /// The `idx == 0` shape is RETAINED as this conjunct's own NEGATIVE CONTROL: there the + /// shipped mint and the window-relative revert AGREE, and that measured agreement is the + /// VACUITY BOUNDARY — it must never be reported as coverage. + /// + /// **(2′) MINT-IDENTITY.** Every announced pair of a real window resolves through + /// `frame_ix`, and a FOREIGN frame — a fresh clone, byte-equal in CONTENT — resolves to + /// `None` and the consumer REFUSES. Correctness by IDENTITY, which index arithmetic cannot + /// satisfy on any `idx > 0` candidate. + /// + /// **(3) CONTAINER/CURRENT AGREEMENT — a PRODUCTION guard, not a `debug_assert`.** + /// Consumers resolve their own `current` through `frame_ix`; a memo built over a DIFFERENT + /// frame set yields `None` ⇒ certification refuses. + /// + /// **(4) PROPOSER COMPLETENESS.** The effective key is `(proposer, FrameIx, ObjectId)` with + /// the first component constant per container: a `for_period(A)` container publishes for A + /// while an `unproven` container publishes NOTHING for the SAME (frame, entry) — and each + /// resolves that frame through its OWN `frame_ix`, because a `FrameIx` never crosses the + /// container that minted it. The relief's agreement guard is the second half: pins minted + /// for A consumed under a container bound to B get `None`. + /// + /// REVERT-PROBES (all three RUN, see the journal): + /// * **(1)/(2)** key the memo by `ObjectId` ALONE (drop the `FrameIx` component) ⇒ the + /// id-keyed blindness returns, one entry gets ONE verdict across frames ⇒ (2) FLIPS while + /// the `idx == 0` control stays green — which is exactly the vacuity boundary. + /// * **(2′)/(3)** make the `current` resolution UNCHECKED (return the last index without + /// the `ptr::eq` test) ⇒ the foreign clone resolves and the mismatched memo certifies + /// against the wrong frame set ⇒ (2′) and (3) FLIP. + /// * **(4)** hard-code the container's proposer ⇒ the `for_period(A)`-vs-`unproven` pair + /// collapses to one answer ⇒ FLIPS. + #[test] + fn r22_the_verdict_door_is_total_frame_correct_and_proposer_correct() { + use crate::game::engine::entry_publishes_pin_slots; + + let (base, src) = u2_relief_board(); + let entry = u2_shape_b_entry(src, 9220, u2_draw_effect(), |_| {}); + + // The per-frame difference: the source object is GONE from the oldest frame, so the + // mint's `object_decision_source` conjunct answers `None` there and `Some` elsewhere. + // One entry id, two different verdicts — which is what an id-only key cannot express. + let mut f0 = base.clone(); + f0.objects.remove(&src); + let f1 = base.clone(); + // The entry ANNOUNCES at f2 — absent from the window's first frame, present after — + // which is what gives conjunct (2′) a real announced pair to quantify over. + let mut f2 = base.clone(); + f2.stack.push_back(entry.clone()); + let mut current = base.clone(); + current.stack.push_back(entry.clone()); + + assert!( + entry_publishes_pin_slots(&f1, &entry, PlayerId(0)).is_some() + && entry_publishes_pin_slots(&f0, &entry, PlayerId(0)).is_none(), + "(2) reach-guard: the two frames must give the SAME entry id DIFFERENT mint \ + answers, or the frame component of the key is unobservable and every assertion \ + below is vacuous" + ); + + // ── (2) THE OPERATING POINT: ring >= 3 AND the window a STRICT suffix (idx >= 1) ──── + let ring = [&f0, &f1, &f2]; + let idx = 1usize; + assert!( + ring.len() >= 3, + "(2) construction requirement: fewer than three ring frames cannot carry a strict \ + suffix, and the round-14 two-frame form was measured vacuous" + ); + assert!( + idx >= 1, + "(2) construction requirement: at idx == 0 the window-relative position EQUALS the \ + absolute one (`w_pos == abs ⟺ idx == 0`) and the revert cannot flip" + ); + let window = &ring[idx..]; + + let mut verdicts = PeriodVerdicts::for_period(&ring, ¤t, PlayerId(0)); + let ix0 = verdicts.frame_ix(&f0).expect("f0 is in the period"); + let ix1 = verdicts.frame_ix(&f1).expect("f1 is in the period"); + let ix2 = verdicts.frame_ix(&f2).expect("f2 is in the period"); + let ixc = verdicts + .frame_ix(¤t) + .expect("current is in the period"); + assert!( + ix0 < ix1 && ix1 < ix2 && ix2 < ixc, + "(2) the frames table is ordered by IDENTITY, ring-then-current: {ix0:?} {ix1:?} \ + {ix2:?} {ixc:?}" + ); + assert_ne!( + ix1, ix0, + "(2) reach-guard `abs != w_pos`: the CARRYING frame f1 sits at absolute index 1 \ + while window-relative arithmetic would place it at 0 (= f0). Equal indices here \ + would mean the fixture drifted back to the vacuous idx == 0 shape" + ); + + // (1) TOTALITY + (2) FRAME-CORRECTNESS on one run: a pair that was never pre-computed + // returns a REAL verdict (the signature returns `&EntryVerdict`, never an `Option`), + // and the two frames answer DIFFERENTLY for one entry id. + assert!( + verdicts.verdict(ix1, &entry).published.is_some(), + "(2) the consumed verdict is the CARRYING frame's — f1 holds the source object, so \ + the mint publishes" + ); + assert!( + verdicts.verdict(ix0, &entry).published.is_none(), + "(2) …and the OLDER frame's answer is its own. Under window-relative arithmetic \ + (or an id-only key) the carrying frame's cached `Some` would be served here" + ); + + // The idx == 0 negative control lives in its own test — see + // `r22_control_at_window_offset_zero_the_two_key_arithmetics_agree`, which must stay + // GREEN under this row's probes and must never be reported as coverage. + + // ── (2′) MINT-IDENTITY: every announced pair resolves; a foreign CLONE does not ───── + let touch = + certified_period_touch(window, ¤t, PeriodCertification::ResourceSignatureOnly); + assert!( + !touch.announced.is_empty(), + "(2′) reach-guard: the window must actually announce something, or the loop below \ + quantifies over nothing" + ); + for (frame, pair_entry) in &touch.announced { + assert!( + verdicts.frame_ix(frame).is_some(), + "(2′) every announced pair's carrying frame is minted by `frame_ix` — entry {:?}", + pair_entry.id + ); + } + let foreign = current.clone(); + assert!( + verdicts.frame_ix(&foreign).is_none(), + "(2′) POINTER IDENTITY, NOT EQUALITY: a fresh clone is byte-equal in content and \ + still outside the period, so it must not resolve. Index arithmetic cannot make \ + this distinction at all" + ); + // …and the CONSUMER refuses on it, fail-closed. + let foreign_touch = PeriodTouch { + announced: vec![(&foreign, &entry)], + frozen_ids: BTreeSet::new(), + }; + let mut v_foreign = PeriodVerdicts::for_period(&ring, ¤t, PlayerId(0)); + assert!( + !stack_choices_are_all_specified( + ¤t, + PlayerId(0), + &[], + Some(&foreign_touch), + &mut v_foreign + ), + "(2′) a frame outside this container's period costs a CERTIFICATE, never a wrong \ + one — the consumer's let-else on `frame_ix(..)` returns `false` and that is the \ + fail-closed arm" + ); + + // Conjuncts (3) and (4) are separate tests below, so each one's revert-probe is + // measured on its own assertion rather than shadowed by an earlier panic. + } + + /// R22 conjunct (3) — CONTAINER/CURRENT AGREEMENT IS A **PRODUCTION** GUARD. + /// + /// A `debug_assert` here would be compiled out of release and the mismatch would then be + /// silent in exactly the build that ships. Asserted as a MATCHED PAIR: the positive proves + /// the board certifies at all (without it the negative passes over a board that refuses for + /// unrelated reasons), the negative differs ONLY in which frame set the memo was built over. + /// + /// REVERT-PROBE (RUN): make `frame_ix` resolve unchecked — fall back to the last index + /// instead of returning `None` — and the mismatched container certifies against the wrong + /// frame set ⇒ the negative FLIPS. + #[test] + fn r22_conjunct3_a_memo_over_a_different_frame_set_refuses_certification() { + use crate::game::engine::entry_publishes_pin_slots; + + let (base, src) = u2_relief_board(); + let entry = u2_shape_b_entry(src, 9222, u2_draw_effect(), |_| {}); + let mut relieved_board = base.clone(); + relieved_board.stack.push_back(entry.clone()); + let may = entry_publishes_pin_slots(&relieved_board, &entry, PlayerId(0)) + .expect("(3) reach-guard: the fixture reaches the mint") + .may + .expect("(3) reach-guard: it publishes its CR 603.5 gate"); + let mut matched = PeriodVerdicts::for_period(&[], &relieved_board, PlayerId(0)); + assert!( + stack_choices_are_all_specified( + &relieved_board, + PlayerId(0), + std::slice::from_ref(&may), + None, + &mut matched + ), + "(3) POSITIVE: a container that holds the caller's `current` certifies this board — \ + without it the negative below would pass over a board that refuses anyway" + ); + let other_current = base.clone(); + let mut mismatched = PeriodVerdicts::for_period(&[], &other_current, PlayerId(0)); + assert!( + !stack_choices_are_all_specified( + &relieved_board, + PlayerId(0), + std::slice::from_ref(&may), + None, + &mut mismatched + ), + "(3) NEGATIVE: a memo built over a DIFFERENT frame set yields `None` for the \ + caller's `current`, so certification refuses. This is a PRODUCTION guard, not a \ + `debug_assert` compiled out of release" + ); + } + + /// R22 conjunct (4) — THE EFFECTIVE KEY CARRIES THE CONTAINER'S PROPOSER. + /// + /// `(proposer, FrameIx, ObjectId)`, with the first component constant per container and + /// therefore held by the container rather than by the memo key. Both halves are asserted: + /// a `for_period(A)` container publishes where an `unproven` one publishes NOTHING for the + /// SAME (frame, entry) — each resolving that frame through its OWN `frame_ix`, because a + /// `FrameIx` never crosses the container that minted it — and the relief refuses pins + /// minted for A when the container is bound to B (CR 603.5: the cached `published` IS the + /// mint's answer for the CONTAINER's proposer). + /// + /// REVERT-PROBES (both RUN): hard-code the proposer inside `verdict` ⇒ the + /// `for_period(A)`-vs-`unproven` pair collapses to one answer ⇒ FLIPS. Delete + /// `pinned_may_choice_relief`'s agreement guard ⇒ B's container relieves A's pins ⇒ FLIPS. + #[test] + fn r22_conjunct4_the_effective_key_carries_the_containers_proposer() { + use crate::game::engine::entry_publishes_pin_slots; + + let (base, src) = u2_relief_board(); + let entry = u2_shape_b_entry(src, 9223, u2_draw_effect(), |_| {}); + let mut relieved_board = base.clone(); + relieved_board.stack.push_back(entry.clone()); + let mut bound_to_a = PeriodVerdicts::for_period(&[], &relieved_board, PlayerId(0)); + let fa = bound_to_a + .frame_ix(&relieved_board) + .expect("(4) the container holds the board"); + assert!( + bound_to_a.verdict(fa, &entry).published.is_some(), + "(4) reach-guard, MANDATORY: the `Some` arm must fire, or the `None` below is \ + satisfied by a board that publishes nothing to anyone" + ); + let mut unproven_c = PeriodVerdicts::unproven(&relieved_board); + let fu = unproven_c.frame_ix(&relieved_board).expect( + "(4) each container resolves the frame through its OWN `frame_ix` — a \ + `FrameIx` never crosses the container that minted it", + ); + assert!( + unproven_c.verdict(fu, &entry).published.is_none(), + "(4) an `unproven` container binds NO proposer, so nothing is published: that is \ + the mint's own answer for 'no offer binds a proposer', not an invented one" + ); + // ── The relief half: pins minted for A, container bound to B ──────────────────────── + // + // ⚠ THE VACUITY THIS ARM HAD TO ESCAPE. Run against the P0-controlled `entry` above, + // this arm passes with the agreement guard DELETED — measured: probe P4 left it green. + // The mint's own `entry.controller != proposer` conjunct already answers `None` for B, + // so the negative was satisfied upstream of the guard it claimed to cover. The entry + // below is controlled by B, so B's container genuinely publishes and the guard is the + // ONLY thing left standing between A's pins and a relief minted for another seat. + let mut b_entry = u2_shape_b_entry(src, 9224, u2_draw_effect(), |a| { + a.controller = PlayerId(1); + }); + b_entry.controller = PlayerId(1); + let mut b_board = base.clone(); + b_board.stack.push_back(b_entry.clone()); + let b_may = entry_publishes_pin_slots(&b_board, &b_entry, PlayerId(1)) + .expect("(4) reach-guard: B's OWN entry reaches the mint under B") + .may + .expect("(4) reach-guard: and publishes its CR 603.5 gate under B"); + let b_slots = std::slice::from_ref(&b_may); + + let mut bound_to_b = PeriodVerdicts::for_period(&[], &b_board, PlayerId(1)); + let fb = bound_to_b + .frame_ix(&b_board) + .expect("(4) B's container holds the board"); + assert!( + pinned_may_choice_relief( + fb, + &b_entry, + &mut bound_to_b, + u3_scope_for(PlayerId(1), b_slots) + ) + .is_some(), + "(4) POSITIVE REACH-GUARD: under B's OWN pins this entry IS relieved. Without this \ + the negative below would be satisfied by an entry nobody can relieve" + ); + let mut bound_to_b2 = PeriodVerdicts::for_period(&[], &b_board, PlayerId(1)); + let fb2 = bound_to_b2 + .frame_ix(&b_board) + .expect("(4) same board, fresh container so the memo cannot carry B's answer over"); + assert!( + pinned_may_choice_relief( + fb2, + &b_entry, + &mut bound_to_b2, + u3_scope_for(PlayerId(0), b_slots) + ) + .is_none(), + "(4) CR 603.5: pins minted by A's offer may never be spent against a verdict this \ + container minted for B — the cached `published` IS the mint's answer for the \ + CONTAINER's proposer, so consuming it under another seat's pins would relieve a \ + choice that seat never described" + ); + } + + // ─────────────────────────────────────────────────────────────────────────────────── + // §6 R27 — THE `.live`-READER CONJUNCTS (a3) / (b) / (c) / (e) + // + // All four need what (a1)/(a2) did not: an announced pair whose CARRYING FRAME is a + // RETAINED SAMPLE rather than `current`. The shared fixture below is the only thing that + // makes them differ from the shipped `.normalized`-blind rows — and, measured, it is what + // lets (b) and (c) flip BEHAVIOURALLY on the mint's own carrier line, which round 7's + // self-built-window rows structurally could not (probe P6). + // ─────────────────────────────────────────────────────────────────────────────────── + + /// A retained ring whose NEWEST sample carries stack entries neither the older samples nor + /// the live board hold. + /// + /// CR 732.2a + CR 608.1: [`certified_period_touch`] announces an entry at the FIRST window + /// frame it appears on, so an entry seeded only into the newest retained sample is + /// announced with THAT SAMPLE as its carrying frame — the `frame != current` population + /// every `.live` reader is about, and the one a fixture assembled from `current.stack` + /// can never reach. `state.stack` is deliberately left EMPTY: with no live entry at all, + /// an arm that passed by reading the live board would have nothing to read. + /// + /// Certification is basis A's EQUALITY disjunct, and that is a construction property + /// rather than a hope: `setup` runs BEFORE any frame is snapshotted, so `ring[1]` + /// (the certifying prior at `span == 1`) and `current` agree on everything, and only + /// `ring[2]` — which the equality disjunct never compares — is widened. Both halves of + /// every sample are built exactly as `record_loop_detect_sample` builds them, so the + /// fixture cannot diverge from production's construction; in particular the `.normalized` + /// half really is `normalize_for_loop`d, which is what the instrument-liveness controls + /// below depend on. + /// + /// The per-frame life step is `game::engine`'s `drain_ring` orientation — frame `i` sits + /// `FRAMES - i` life above the live board — so the certified period moves a real CR 704.5a + /// resource and step (7) publishes a bound instead of refusing at `NoNarrowedLegalCount`. + fn ring_announcing_on_its_newest_sample( + setup: impl Fn(&mut GameState), + newest_sample: impl Fn(&mut GameState), + ) -> GameState { + use crate::game::scenario::GameScenario; + use crate::types::game_state::{LoopDetectionMode, WaitingFor}; + use crate::types::LoopDetectSample; + + const FRAMES: usize = 3; + let mut scenario = GameScenario::new_n_player(2, 7); + // Stocked libraries are load-bearing for the arms whose announced entry DRAWS: an + // empty library derives no `ZoneChange`, which moves the classification for a reason + // that has nothing to do with the carrier axis. + let names: Vec = (0..40).map(|i| format!("Filler {i}")).collect(); + let refs: Vec<&str> = names.iter().map(String::as_str).collect(); + scenario.with_library_top(PlayerId(0), &refs); + scenario.with_library_top(PlayerId(1), &refs); + let mut state = scenario.build().state().clone(); + state.loop_detection = LoopDetectionMode::Interactive; + state.waiting_for = WaitingFor::Priority { + player: PlayerId(0), + }; + state.active_player = PlayerId(0); + state.last_loop_action_sequence.clear(); + setup(&mut state); + for i in 0..FRAMES { + let mut frame = state.clone(); + frame + .players + .iter_mut() + .find(|p| p.id == PlayerId(1)) + .expect("the two-seat scenario always has P1") + .life += (FRAMES - i) as i32; + if i + 1 == FRAMES { + newest_sample(&mut frame); + } + state + .loop_detect_ring + .push_back(std::sync::Arc::new(LoopDetectSample { + normalized: frame.normalize_for_loop(), + live: frame.loop_detect_live_sample(), + })); + } + state + } + + /// The battlefield source every announced entry names. `entered_battlefield_turn` is set + /// to the live turn because R27 (c)'s intervening-if reads exactly that through its + /// `TriggerSourceContext` (CR 603.4); the other three arms are indifferent to it. + fn announcing_ring_source(state: &mut GameState, id: u64) -> ObjectId { + let oid = ObjectId(id); + let mut object = GameObject::new( + oid, + CardId(77), + PlayerId(0), + "Retained Sample Source".to_string(), + Zone::Battlefield, + ); + object.card_types.core_types = vec![CoreType::Creature]; + object.incarnation = 3; + object.entered_battlefield_turn = Some(state.turn_number); + state.objects.insert(oid, object); + state.battlefield.push_back(oid); + oid + } + + /// One proposer-controlled triggered-ability entry for the newest sample's stack. + fn announced_trigger_entry( + id: u64, + src: ObjectId, + ability: crate::types::ability::ResolvedAbility, + condition: Option, + ) -> StackEntry { + StackEntry { + id: ObjectId(id), + source_id: src, + controller: PlayerId(0), + kind: StackEntryKind::TriggeredAbility { + source_id: src, + ability: Box::new(ability), + condition, + trigger_event: None, + description: None, + source_name: String::new(), + subject_match_count: None, + die_result: None, + }, + } + } + + /// The ONE reach-guard every R27 `.live` arm runs before it asserts anything: the fixture + /// really announces from a retained sample, the live board carries no entry at all, and + /// the pair the production enumerator hands its consumers is that sample's — not + /// `current`'s. Returns the announced pair's carrying frame. + fn announced_from_retained_sample(state: &GameState, entry_id: u64) -> &GameState { + assert!( + state.stack.is_empty(), + "REACH-GUARD: `current.stack` must be EMPTY, else an arm could be satisfied by the \ + live board and the `.live`-reader claim would not be under test" + ); + let retained: Vec<&GameState> = state.loop_detect_ring.iter().map(|f| &f.live).collect(); + assert!( + retained.len() >= 3, + "REACH-GUARD: the walk needs `span >= 1` at `idx = len - 2`; got {} frames", + retained.len() + ); + let touch = certified_period_touch( + &retained[retained.len() - 2..], + state, + PeriodCertification::BoardEqualOnly, + ); + let (frame, entry) = *touch + .announced + .first() + .expect("REACH-GUARD: the newest sample's extra entry must ANNOUNCE in the window"); + assert_eq!( + (touch.announced.len(), entry.id), + (1, ObjectId(entry_id)), + "REACH-GUARD: exactly the constructed entry announces, so every assertion below is \ + about it and not about an incidental second pair" + ); + assert!( + !std::ptr::eq(frame, state), + "REACH-GUARD (the R27 precondition, executable rather than prose): the pair's \ + carrying frame must NOT be `current`. A fixture drift that collapsed the pair onto \ + the live board would leave every arm below passing for the degenerate reason" + ); + frame + } + + /// R27 (a3) — THE BEHAVIOUR: A RETAINED SAMPLE DERIVES THE SAME EVENT SET THE LIVE BOARD + /// DOES, AND THE NORMALIZED HALF DOES NOT. + /// + /// CR 732.2a + CR 104.4b + CR 111.1. (a2) pinned that every carrying frame is an + /// un-normalized board by reading `next_object_id`; this arm pins the CONSEQUENCE — that + /// the classification a `.live` carrier produces for an `Effect::Token` announcement is + /// the classification the live board produces, event for event. + /// + /// THE INSTRUMENT-LIVENESS CONTROL IS THE ARM THAT MAKES THE EQUALITY MEAN ANYTHING, and + /// it is MEASURED rather than predicted. The plan forecast the divergence at the + /// ALLOCATOR (`create_object` handing out `ObjectId(0)` over a live object); measured, the + /// derivation diverges one field earlier and more directly — `normalize_for_loop` runs + /// `clear_trigger_identity_recursive`, which sets `ability.source_id = ObjectId(0)`, and + /// the resolver carries that straight into `TokenSpec.source_id`. So a normalized carrier + /// proposes a token whose CR 111.1 source is the null object, and the two sets differ. + /// + /// ⚠ SCOPE, stated because a reader will ask why this arm is not an offer-level one: + /// BOTH derivations are `event_is_accounted`, so the mint OFFERS on either carrier and + /// (a3) alone has NO behavioural flip at the seam. The carrier axis IS flipped + /// behaviourally, on exactly the shared revert the plan names, by + /// `r27_b_a_stored_may_auto_choice_survives_the_ring` and + /// `r27_c_an_intervening_if_binds_with_the_retained_samples_trigger_source` below, and + /// structurally by `game::engine`'s `the_period_touch_window_is_carried_by_the_live_half`. + /// This arm's own flipping site is the control's: delete + /// `ResolvedAbility::clear_trigger_identity_recursive`'s `self.source_id = ObjectId(0)` + /// ⇒ the two halves stop differing ⇒ the control FAILS. + #[test] + fn r27_a3_a_retained_sample_derives_the_live_boards_event_set() { + use crate::game::engine::{try_offer_bounded_cycle_shortcut_metered, ProbeCap}; + use crate::game::resolution_prompt::ResolutionChoiceFreedom; + use crate::types::ability::{Effect, PtValue, QuantityExpr, ResolvedAbility, TargetFilter}; + use crate::types::proposed_event::ProposedEvent; + + const SRC: ObjectId = ObjectId(940); + const ENTRY: u64 = 954; + let state = ring_announcing_on_its_newest_sample( + |s| { + announcing_ring_source(s, SRC.0); + }, + |frame| { + let ability = ResolvedAbility::new( + Effect::Token { + name: "Servo".to_string(), + power: PtValue::Fixed(1), + toughness: PtValue::Fixed(1), + types: vec!["Artifact".to_string(), "Creature".to_string()], + colors: vec![], + keywords: vec![], + tapped: false, + count: QuantityExpr::Fixed { value: 1 }, + owner: TargetFilter::Controller, + attach_to: None, + enters_attacking: false, + supertypes: vec![], + static_abilities: vec![], + enter_with_counters: vec![], + }, + vec![], + SRC, + PlayerId(0), + ); + frame + .stack + .push_back(announced_trigger_entry(ENTRY, SRC, ability, None)); + }, + ); + let frame = announced_from_retained_sample(&state, ENTRY); + let entry = frame.stack.back().expect("the announced entry").clone(); + + // ── the two derivations, each on its own budget so neither starves the other ── + let mut on_frame_budget = ProbeBudget::for_test(1_000); + let mut on_live_budget = ProbeBudget::for_test(1_000); + let from_sample = + stack_entry_resolution_choice_freedom(frame, &entry, &mut on_frame_budget); + let from_live = stack_entry_resolution_choice_freedom(&state, &entry, &mut on_live_budget); + + // ── REACH-GUARD: both sides must be non-empty `FreeUnlessReplacements`, so the + // equality below cannot be two refusals or two empties matching ── + let derived = |freedom: &ResolutionChoiceFreedom| -> Vec { + match freedom { + ResolutionChoiceFreedom::FreeUnlessReplacements(events) => events.clone(), + ResolutionChoiceFreedom::MayPrompt => panic!( + "REACH-GUARD: an `Effect::Token` announcement must classify as a derived \ + event set on BOTH boards; a refusal here means the fixture never reached \ + the derivation and the equality would be vacuous" + ), + } + }; + let sample_events = derived(&from_sample); + let live_events = derived(&from_live); + assert!( + !sample_events.is_empty() && !live_events.is_empty(), + "REACH-GUARD: `probe_resolution` classifies an EMPTY derivation `Prompted`, so a \ + non-empty set is what proves the resolution really ran" + ); + + // ── (a3): the retained sample's derivation IS the live board's ── + assert_eq!( + from_sample, from_live, + "(a3) CR 732.2a: an announcement carried by a retained sample must classify exactly \ + as the same entry classified against the live board. Sequence equality is STRICTER \ + than the set equality the row claims, which is the safe direction — both sides come \ + from one deterministic `resolve_ability_chain`" + ); + + // ── INSTRUMENT-LIVENESS CONTROL: the OTHER half of the same sample, one field apart ── + let normalized_half = &state.loop_detect_ring[state.loop_detect_ring.len() - 1].normalized; + let normalized_entry = normalized_half + .stack + .back() + .expect("normalization preserves every `StackEntry.id` (R17 arm 3)") + .clone(); + let mut control_budget = ProbeBudget::for_test(1_000); + let from_normalized = stack_entry_resolution_choice_freedom( + normalized_half, + &normalized_entry, + &mut control_budget, + ); + let token_source = |freedom: &ResolutionChoiceFreedom| -> Option { + match freedom { + ResolutionChoiceFreedom::FreeUnlessReplacements(events) => { + events.iter().find_map(|event| match event { + ProposedEvent::CreateToken { spec, .. } => Some(spec.source_id), + _ => None, + }) + } + ResolutionChoiceFreedom::MayPrompt => None, + } + }; + assert_eq!( + (token_source(&from_sample), token_source(&from_normalized)), + (Some(SRC), Some(ObjectId(0))), + "(a3) CONTROL — CR 400.7 + CR 111.1: `normalize_for_loop` runs \ + `clear_trigger_identity_recursive`, which zeroes `ability.source_id`, and the \ + resolver carries that into `TokenSpec.source_id`. The normalized half therefore \ + proposes a token whose source is the NULL object. Without this arm the equality \ + above would be true of any two boards and would prove nothing" + ); + assert_ne!( + from_sample, from_normalized, + "(a3) CONTROL: and the two halves' derivations must genuinely DIFFER, so the \ + carrier is a choice with a consequence rather than a label" + ); + + // ── the seam companion: conjunct (6) really consumed THIS pair on the real mint ── + let (outcome, meter) = + try_offer_bounded_cycle_shortcut_metered(&state, false, ProbeCap::Shipped); + assert!( + outcome.is_ok() && meter.conjunct6_asks == 1, + "(a3) the board the equality is asserted on must be one the SEAM evaluates: the \ + mint offers and asks conjunct (6) exactly once — about the announced pair, since \ + `current.stack` is empty. Got {outcome:?}, meter {meter:?}" + ); + } + + /// R27 (b) — THE ENTRY-IDENTITY AXIS: A STORED CR 603.5 AUTO-CHOICE STILL REFUSES THE MINT + /// WHEN THE PAIR ARRIVES FROM THE RING. + /// + /// CR 603.5 + CR 732.2a. R25 pinned the mint's second-authority conjunct on a board whose + /// entry sits on `current.stack`; this is its missing production twin — the same board + /// driven THROUGH the ring, so the mint is asked about a retained sample. The refusal has + /// to survive that, because the announced population is where the mint's domain actually + /// lives (`bounded_cycle_pin_slots_for_window` maps over `touch.announced`). + /// + /// MATCHED PAIR, differing ONLY in the seeded record, so no upstream conjunct can dominate: + /// without it the board OFFERS and publishes exactly one CR 603.5 `MayChoice` point; with + /// it the mint publishes nothing, the relief has no `may` to spend, and step (6) refuses + /// `UnspecifiedChoiceWindow`. + /// + /// REVERT-PROBE (the plan's shared carrier revert, and it FLIPS — measured): point + /// `game::engine::bounded_cycle_offer`'s `ring_live` at `&f.normalized` ⇒ the carrying + /// frame becomes a comparand whose `ability.source_id` is `ObjectId(0)` + /// (`clear_trigger_identity_recursive`) ⇒ the `MayTriggerAutoChoiceKey` misses ⇒ the `may` + /// slot IS minted ⇒ the negative arm OFFERS. This is the flip round 7 could not obtain: + /// a row that builds its own window is blind to the mint's carrier, a row driven through + /// the mint is not. + #[test] + fn r27_b_a_stored_may_auto_choice_survives_the_ring() { + use crate::game::engine::{ + try_offer_bounded_cycle_shortcut_metered, BoundedOfferRefusal, ProbeCap, + }; + use crate::types::ability::{ + Effect, QuantityExpr, ResolvedAbility, TargetFilter, TriggerBaseSetInstanceRef, + TriggerDefinitionOccurrenceRef, TriggerDefinitionRef, + }; + use crate::types::game_state::{AutoMayChoice, MayTriggerAutoChoiceKey, MayTriggerOrigin}; + use crate::types::identifiers::ObjectIncarnationRef; + + const SRC: ObjectId = ObjectId(940); + const ENTRY: u64 = 952; + // The production shape: `triggers.rs` mints `Definition { definition_ref }` from the + // source's own incarnation plus the printed occurrence — built here identically. + let origin = MayTriggerOrigin::Definition { + definition_ref: TriggerDefinitionRef { + source: ObjectIncarnationRef::of(SRC, 3), + occurrence: TriggerDefinitionOccurrenceRef::Printed { + base_set: TriggerBaseSetInstanceRef::INITIAL, + printed_index: 0, + }, + }, + }; + let key = |origin: MayTriggerOrigin| MayTriggerAutoChoiceKey { + player: PlayerId(0), + source_id: SRC, + origin, + }; + let announce = |origin: MayTriggerOrigin| { + move |frame: &mut GameState| { + // Shape (B): OPTIONAL, declaring no target, so the mint publishes its CR 603.5 + // gate alone and the relief's residual is the same draw with `optional` cleared. + let mut ability = ResolvedAbility::new( + Effect::Draw { + count: QuantityExpr::Fixed { value: 1 }, + target: TargetFilter::Controller, + }, + vec![], + SRC, + PlayerId(0), + ); + ability.optional = true; + ability.may_trigger_origin = Some(origin.clone()); + frame + .stack + .push_back(announced_trigger_entry(ENTRY, SRC, ability, None)); + } + }; + + // ── MATCHED POSITIVE: no stored record ⇒ the CR 603.5 gate really asks ⇒ pin spendable + let open = ring_announcing_on_its_newest_sample( + |s| { + announcing_ring_source(s, SRC.0); + }, + announce(origin.clone()), + ); + announced_from_retained_sample(&open, ENTRY); + let (open_outcome, open_meter) = + try_offer_bounded_cycle_shortcut_metered(&open, false, ProbeCap::Shipped); + let published_may_points = match &open_outcome { + Ok(crate::types::game_state::WaitingFor::LoopShortcut { schema, .. }) => schema + .points + .iter() + .filter(|p| { + matches!( + p.kind, + crate::analysis::decision_template::DecisionPointKind::MayChoice + ) + }) + .count(), + other => panic!( + "MATCHED POSITIVE: the un-seeded board must OFFER, else the negative below is \ + a dominated refusal. Got {other:?}, meter {open_meter:?}" + ), + }; + assert_eq!( + published_may_points, 1, + "CR 603.5: the announced pair publishes exactly ONE `MayChoice` point, so the \ + negative's refusal is the loss of THAT point and not of an unrelated slot" + ); + + // ── NEGATIVE: the same board with one record seeded before the frames are snapshotted + let seeded_origin = origin.clone(); + let sealed = ring_announcing_on_its_newest_sample( + move |s| { + announcing_ring_source(s, SRC.0); + s.set_may_trigger_auto_choice(key(seeded_origin.clone()), AutoMayChoice::Decline); + }, + announce(origin.clone()), + ); + let sealed_frame = announced_from_retained_sample(&sealed, ENTRY); + assert_eq!( + sealed_frame.may_trigger_auto_choice(&key(origin.clone())), + Some(AutoMayChoice::Decline), + "REACH-GUARD: the record must be readable ON THE CARRYING FRAME under the key the \ + mint builds. Seeding it only on `current` would make the negative pass for the \ + wrong reason — and would be exactly the defect this row exists to catch" + ); + let (sealed_outcome, sealed_meter) = + try_offer_bounded_cycle_shortcut_metered(&sealed, false, ProbeCap::Shipped); + assert_eq!( + sealed_outcome, + Err(BoundedOfferRefusal::UnspecifiedChoiceWindow), + "(b) CR 603.5: a stored 'don't ask again' answer is a SECOND authority on the same \ + gate, and the gate returns before setting any prompt — so a pin minted for it \ + would be silently unused. The refusal must survive the pair arriving from a \ + retained sample. meter {sealed_meter:?}" + ); + assert_eq!( + (sealed_meter.conjunct6_asks, sealed_meter.certification), + (1, Some(PeriodCertification::BoardEqualOnly)), + "(b) ATTRIBUTION: the refusal is step (6)'s on the announced pair — certification \ + matched and conjunct (6) ran exactly once — not an earlier conjunct's" + ); + } + + /// R27 (c) — THE SCOPE-BINDING AXIS: A CR 603.4 INTERVENING-IF ON A RETAINED SAMPLE BINDS + /// WITH ITS TRIGGER SOURCE. + /// + /// CR 603.4 + CR 732.2a. `bind_resolution_scope` rechecks the intervening-if as the + /// ability resolves, reading `ability.trigger_source`; `normalize_for_loop` sets that to + /// `None`. A `TriggerCondition::SourceEnteredThisTurn` is TRUE only when the context is + /// present, so classifying such an entry against a normalized carrier takes the + /// absent-context path, the recheck fails, and `stack_entry_resolution_choice_freedom` + /// returns `MayPrompt` — a mandatory entry the mint publishes no `may` for, hence a + /// refusal the live board would never make. + /// + /// THE MATCHED PAIR IS THE CONTEXT ITSELF, byte-identical otherwise, so the offer's + /// existence is attributable to `trigger_source` and to nothing else on the board. The + /// plan's "must classify identically to the same entry classified against `current`" ships + /// as its own conjunct alongside. + /// + /// REVERT-PROBE (the shared carrier revert, and it FLIPS — measured): point + /// `bounded_cycle_offer`'s `ring_live` at `&f.normalized` ⇒ the POSITIVE arm stops + /// offering and returns `UnspecifiedChoiceWindow`. + #[test] + fn r27_c_an_intervening_if_binds_with_the_retained_samples_trigger_source() { + use crate::game::engine::{ + try_offer_bounded_cycle_shortcut_metered, BoundedOfferRefusal, ProbeCap, + }; + use crate::game::resolution_prompt::ResolutionChoiceFreedom; + use crate::types::ability::{Effect, QuantityExpr, ResolvedAbility, TriggerCondition}; + + const SRC: ObjectId = ObjectId(940); + const ENTRY: u64 = 953; + let announce = |with_context: bool| { + move |frame: &mut GameState| { + // MANDATORY: an optional entry would be relieved through the CR 603.5 pin and + // the refusal below would be about the wrong gate. + let mut ability = ResolvedAbility::new( + Effect::LoseLife { + amount: QuantityExpr::Fixed { value: 1 }, + target: None, + }, + vec![], + SRC, + PlayerId(0), + ); + if with_context { + let source = frame.objects[&SRC].clone(); + ability.trigger_source = Some( + crate::game::triggers::trigger_source_context_for_latch(frame, &source), + ); + } + frame.stack.push_back(announced_trigger_entry( + ENTRY, + SRC, + ability, + Some(TriggerCondition::SourceEnteredThisTurn), + )); + } + }; + + // ── POSITIVE: the context is present, the CR 603.4 recheck passes, the mint offers ── + let bound = ring_announcing_on_its_newest_sample( + |s| { + announcing_ring_source(s, SRC.0); + }, + announce(true), + ); + let bound_frame = announced_from_retained_sample(&bound, ENTRY); + let entry = bound_frame + .stack + .back() + .expect("the announced entry") + .clone(); + + // (c)'s own claim, at the predicate: the retained sample classifies the intervening-if + // exactly as the live board would. + let mut sample_budget = ProbeBudget::for_test(1_000); + let mut live_budget = ProbeBudget::for_test(1_000); + let from_sample = + stack_entry_resolution_choice_freedom(bound_frame, &entry, &mut sample_budget); + let from_live = stack_entry_resolution_choice_freedom(&bound, &entry, &mut live_budget); + assert!( + matches!( + from_sample, + ResolutionChoiceFreedom::FreeUnlessReplacements(_) + ), + "REACH-GUARD: the recheck must PASS on the carrying frame, else the equality below \ + is two refusals agreeing. Got {from_sample:?}" + ); + assert_eq!( + from_sample, from_live, + "(c) CR 603.4: the intervening-if recheck reads `ability.trigger_source`, and a \ + retained sample carries it, so the pair classifies exactly as the live board does" + ); + + // INSTRUMENT-LIVENESS CONTROL: the same sample's NORMALIZED half, one field apart. + let normalized_half = &bound.loop_detect_ring[bound.loop_detect_ring.len() - 1].normalized; + let normalized_entry = normalized_half + .stack + .back() + .expect("normalization preserves every `StackEntry.id`") + .clone(); + let mut control_budget = ProbeBudget::for_test(1_000); + assert_eq!( + stack_entry_resolution_choice_freedom( + normalized_half, + &normalized_entry, + &mut control_budget + ), + ResolutionChoiceFreedom::MayPrompt, + "(c) CONTROL — CR 603.4 + CR 400.7: `clear_trigger_identity_recursive` sets \ + `trigger_source = None`, so `check_trigger_condition_with_source` takes the \ + absent-context path, `bind_resolution_scope` returns false and the classifier is \ + fail-closed `MayPrompt`. Without this the equality above would hold on any board" + ); + + let (bound_outcome, bound_meter) = + try_offer_bounded_cycle_shortcut_metered(&bound, false, ProbeCap::Shipped); + assert!( + bound_outcome.is_ok(), + "(c) MATCHED POSITIVE: with the context present the mint OFFERS, so the negative \ + below is attributable to the context. Got {bound_outcome:?}, {bound_meter:?}" + ); + + // ── NEGATIVE: byte-identical except that the entry carries no `TriggerSourceContext` ── + let unbound = ring_announcing_on_its_newest_sample( + |s| { + announcing_ring_source(s, SRC.0); + }, + announce(false), + ); + announced_from_retained_sample(&unbound, ENTRY); + let (unbound_outcome, unbound_meter) = + try_offer_bounded_cycle_shortcut_metered(&unbound, false, ProbeCap::Shipped); + assert_eq!( + unbound_outcome, + Err(BoundedOfferRefusal::UnspecifiedChoiceWindow), + "(c) CR 603.4: with no trigger source the recheck cannot pass, the resolution scope \ + does not bind, and the fail-closed classifier refuses — which is exactly the \ + verdict a normalized carrier would force on the POSITIVE board. meter \ + {unbound_meter:?}" + ); + } + + /// R27 (e) — THE CANDIDATE-AUTHORITY HALF IS FRAME-SENSITIVE TOO. + /// + /// CR 614.1 + CR 616.1 + CR 732.2a. (a3) pins the EVENT half of the discharge against the + /// pair's carrying frame and says nothing about the half that CONSUMES it: + /// `resolution_events_are_discharged` hands `proposed_event_prompt_cause` a board, and + /// that board runs `find_applicable_replacements` over its OWN replacement population. A + /// wrong board there checks one frame's events against another frame's candidates, and + /// (a3) stays green while it does — both its sides are event sets. + /// + /// FOUR BOARDS, byte-identical except which one carries the definition and whether that + /// definition draws a PROMPT CAUSE (CR 614.1a: a mandatory replacement's own body is + /// stashed as a continuation and drained through an arbitrary `ResolvedAbility`, which can + /// set a non-priority `waiting_for` — the cause this fixture uses. CR 616.1's ORDERING + /// cause needs two competing candidates and is a different shape): + /// * **frame only** — the constructible direction (the sample holds the permanent, the + /// live board no longer does) ⇒ conjunct (6) REFUSES. + /// * **both** ⇒ also refuses, so the arm is not passing because the def is unreachable. + /// * **neither** ⇒ certifies, the reach-guard proving the fixture reaches the discharge. + /// * **frame, but causeless** — the same permanent, a MANDATORY definition with no body, + /// which is drawn as a candidate and yields NO cause ⇒ certifies. This is the control + /// that keeps the first arm from being "an extra object on the frame refuses". + /// + /// THE DEFINITION SHAPE IS MEASURED, NOT CHOSEN. An OPTIONAL draw replacement makes + /// `probe_resolution` itself prompt (the resolution raises a choice), so the entry is + /// already `MayPrompt` at the PRIMARY classification and the discharge is never reached — + /// the refusal would be real but would key on the wrong seam. A MANDATORY definition with + /// a `runtime_execute` body classifies as a derived event set and still yields + /// `ReplacementPromptCause::MandatoryBodyContinuation`, which is the shape that reaches + /// the CR 614.1 + CR 616.1 discharge tail. + /// + /// REVERT-PROBE (the plan's own, and it FLIPS — measured): pass the live `state` instead + /// of `frame` to `resolution_events_are_discharged` in `stack_choices_are_all_specified` + /// ⇒ the frame-only definition is invisible to `find_applicable_replacements` ⇒ the pair + /// CERTIFIES and the first arm FLIPS TO FAIL, while the both-boards and neither-board arms + /// stay green — so the pair discriminates the BOARD ARGUMENT and not the fixture. + #[test] + fn r27_e_the_discharge_reads_the_pairs_carrying_frame_not_the_live_board() { + use crate::game::engine::{ + try_offer_bounded_cycle_shortcut_metered, BoundedOfferRefusal, ProbeCap, + }; + use crate::types::ability::{ + DrawReplacementScope, Effect, QuantityExpr, ReplacementDefinition, ResolvedAbility, + TargetFilter, + }; + use crate::types::replacements::ReplacementEvent; + + const SRC: ObjectId = ObjectId(940); + const DEF_SRC: ObjectId = ObjectId(941); + const ENTRY: u64 = 955; + + // CR 614.1 scopes a definition to its controller's events, so the definition sits on a + // P0-controlled permanent and replaces P0's own draw. + let install = |with_body: bool| { + move |board: &mut GameState| { + let mut definition = ReplacementDefinition::new(ReplacementEvent::Draw); + // CR 121.2: a Draw definition must declare which stage it watches; the + // pipeline debug-asserts on one that declares neither. + definition.draw_scope = Some(DrawReplacementScope::IndividualDraw); + if with_body { + definition.runtime_execute = Some(Box::new(ResolvedAbility::new( + Effect::LoseLife { + amount: QuantityExpr::Fixed { value: 1 }, + target: None, + }, + vec![], + DEF_SRC, + PlayerId(0), + ))); + } + let mut object = GameObject::new( + DEF_SRC, + CardId(78), + PlayerId(0), + "Frame-Only Watcher".to_string(), + Zone::Battlefield, + ); + object.replacement_definitions.push(definition); + board.objects.insert(DEF_SRC, object); + board.battlefield.push_back(DEF_SRC); + } + }; + let announce = |board: &mut GameState| { + let ability = ResolvedAbility::new( + Effect::Draw { + count: QuantityExpr::Fixed { value: 1 }, + target: TargetFilter::Controller, + }, + vec![], + SRC, + PlayerId(0), + ); + board + .stack + .push_back(announced_trigger_entry(ENTRY, SRC, ability, None)); + }; + let seed_source = |s: &mut GameState| { + announcing_ring_source(s, SRC.0); + }; + + let neither = ring_announcing_on_its_newest_sample(seed_source, announce); + let frame_only = ring_announcing_on_its_newest_sample(seed_source, |board| { + install(true)(board); + announce(board); + }); + let both = ring_announcing_on_its_newest_sample( + |s| { + seed_source(s); + install(true)(s); + }, + announce, + ); + let causeless = ring_announcing_on_its_newest_sample(seed_source, |board| { + install(false)(board); + announce(board); + }); + + // ── the structural conjunct: ONE board carries both halves of the discharge ── + let frame = announced_from_retained_sample(&frame_only, ENTRY); + let verdicts = PeriodVerdicts::for_period( + &frame_only + .loop_detect_ring + .iter() + .map(|f| &f.live) + .collect::>(), + &frame_only, + PlayerId(0), + ); + let carried = verdicts + .frame_ix(frame) + .expect("the carrying frame is one this container holds"); + let live_ix = verdicts + .frame_ix(&frame_only) + .expect("`current` is the container's last frame"); + assert_ne!( + carried, live_ix, + "(e) STRUCTURAL: `PeriodVerdicts::frame_ix` mints by POINTER IDENTITY, so the pair's \ + board and the live board must resolve to DIFFERENT indices. A future refactor that \ + re-derived the discharge board from `current` would collapse them here rather than \ + silently cross-check one frame's events against another frame's candidates" + ); + + // ── REACH-GUARD: without a definition anywhere the pair certifies ── + let (neither_outcome, neither_meter) = + try_offer_bounded_cycle_shortcut_metered(&neither, false, ProbeCap::Shipped); + assert!( + neither_outcome.is_ok() && neither_meter.conjunct6_asks == 1, + "(e) REACH-GUARD: the fixture must reach and PASS the CR 616.1 tail when nothing \ + competes, else the three refusals below prove nothing about the board argument. \ + Got {neither_outcome:?}, meter {neither_meter:?}" + ); + + // ── the CONTROL: the same permanent on the frame, drawing a candidate with NO cause ── + let (causeless_outcome, causeless_meter) = + try_offer_bounded_cycle_shortcut_metered(&causeless, false, ProbeCap::Shipped); + assert!( + causeless_outcome.is_ok(), + "(e) CONTROL: a MANDATORY, bodyless definition on the carrying frame is a candidate \ + with NO prompt cause at all and must still certify. This is what makes the \ + frame-only refusal attributable to the CAUSE rather than to the extra permanent. \ + Got \ + {causeless_outcome:?}, meter {causeless_meter:?}" + ); + + // ── the both-boards arm, ASSERTED FIRST so the stated revert-probe demonstrates in ONE + // run that this arm is unaffected while the frame-only arm below flips ── + let (both_outcome, both_meter) = + try_offer_bounded_cycle_shortcut_metered(&both, false, ProbeCap::Shipped); + assert_eq!( + both_outcome, + Err(BoundedOfferRefusal::UnspecifiedChoiceWindow), + "(e) MATCHED POSITIVE: with the definition on BOTH boards the refusal also holds, \ + so the frame-only arm below is keyed to WHICH board carries it and not to the \ + definition being invisible to the pipeline. meter {both_meter:?}" + ); + + // ── (e): the definition the CARRYING FRAME holds refuses, even though `current` has none + let (frame_only_outcome, frame_only_meter) = + try_offer_bounded_cycle_shortcut_metered(&frame_only, false, ProbeCap::Shipped); + assert_eq!( + frame_only_outcome, + Err(BoundedOfferRefusal::UnspecifiedChoiceWindow), + "(e) CR 614.1 + CR 616.1: the candidate authority runs over the board the events \ + were DERIVED on. A definition applicable on the pair's carrying frame and absent \ + from the live board must still refuse — handing the discharge `current` would \ + check one frame's events against another frame's candidates. meter \ + {frame_only_meter:?}" + ); + } } diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index 35501d4e1e..b9a9381c27 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -1323,7 +1323,7 @@ fn reconcile_terminal_result(state: &mut GameState, result: &mut ActionResult) { LoopDetectionMode::On => { // Clone the Arc handles (cheap refcount bumps) to release the borrow on the // ring before the GameOver mutation below. - let priors: Vec> = + let priors: Vec> = state.loop_detect_ring.iter().cloned().collect(); let cur = crate::analysis::resource::ResourceVector::snapshot(state); // Carry the matching cycle's `delta` out of the scan alongside the winner so @@ -1334,17 +1334,19 @@ fn reconcile_terminal_result(state: &mut GameState, result: &mut ActionResult) { // fails either seam gate, continue scanning older priors (fail-safe). if let Some((winner, delta)) = priors.iter().enumerate().find_map(|(k, prior)| { let delta = crate::analysis::resource::ResourceVector::delta( - &crate::analysis::resource::ResourceVector::snapshot(prior), + &crate::analysis::resource::ResourceVector::snapshot(&prior.normalized), &cur, ); let winner = crate::analysis::loop_check::live_mandatory_loop_winner( - prior, state, &delta, + &prior.normalized, + state, + &delta, )?; // The matched window: the prior frame at `k`, every subsequent ring frame, // then the live state — all per-resolution, no gaps (a non-sampling beat // clears the ring, so a confirmed window is gap-free). let mut frames: Vec<&GameState> = - priors[k..].iter().map(|p| p.as_ref()).collect(); + priors[k..].iter().map(|p| &p.normalized).collect(); frames.push(state); // CR 704.5a + CR 104.4a (m9): the winner (sole non-faller) must never dip // across the window — a transient intra-cycle dip a net-delta check cannot @@ -1480,7 +1482,9 @@ fn interactive_loop_bridge(state: &mut GameState, result: &mut ActionResult) { // CR 732.2a: OPTIONAL winning drain — only the player with priority may propose // the shortcut. Keep that proposer distinct from the already-measured winner; a // loop can be detected during a different player's priority window. - let certificate = build_cert(prior.as_ref(), state, &delta, winner); + // `build_cert`'s only use of the frame is `board_delta(prior, state)`, a + // comparand read ⇒ the CR 104.4b `.normalized` half. + let certificate = build_cert(&prior.normalized, state, &delta, winner); // CR 732.2a: a non-targeted drain reifies no per-iteration player choice ⇒ carry an // empty pin list; only the `iteration_count` (from `win_kind`) is populated. let WaitingFor::Priority { player: proposer } = state.waiting_for else { @@ -1506,14 +1510,33 @@ fn interactive_loop_bridge(state: &mut GameState, result: &mut ActionResult) { return; } + // Path D: CR 732.2a BOUNDED cycle fast-forward. Only reached when Path A found no + // determinate winner — a drain lethal to SOME opponents leaves a second non-faller, so + // CR 104.2a's determinacy requirement (`loop_check`'s crown gate) refuses to crown and + // Path A returns `None`. This seam routes AROUND that gate rather than weakening it: it + // never calls `live_mandatory_loop_winner` and writes `predicted_winner: None`. + // Placed before Path B because Path B's CR 732.4 verdict is TERMINAL (it writes + // `GameOver` and returns), so a seam ordered after it could never be reached on a state + // Path B accepts. The two are disjoint anyway and the ordering does not paper over an + // overlap: Path B requires `has_no_loss_axis(&delta)`, while this seam only offers when + // `elimination_bounds` NARROWED below `MAX_SHORTCUT_CYCLES`, which happens only when the + // cycle drives some living seat toward a CR 704.5a / CR 704.5c / CR 104.3c threshold — + // i.e. exactly a loss axis. + if let Ok(offer) = try_offer_bounded_cycle_shortcut(state, mandatory) { + state.waiting_for = offer; + result.waiting_for = state.waiting_for.clone(); + return; + } + // Path B: CR 732.4 all-mandatory, net-progress, no-loss draw. Only reached when Path A // found no determinate winner. `mandatory` gates it (CR 732.5); a loss axis or an // optional loop falls through to the pre-feature halt. if mandatory { - let priors: Vec> = + let priors: Vec> = state.loop_detect_ring.iter().cloned().collect(); let cur = crate::analysis::resource::ResourceVector::snapshot(state); for prior in &priors { + let prior = &prior.normalized; let delta = crate::analysis::resource::ResourceVector::delta( &crate::analysis::resource::ResourceVector::snapshot(prior), &cur, @@ -1552,10 +1575,11 @@ fn interactive_loop_bridge(state: &mut GameState, result: &mut ActionResult) { // under their own control", the closest live realization of CR 104.4b's grant. if !mandatory { let controller = state.active_player; // sampler gate is Priority{active_player}: the driver - let priors: Vec> = + let priors: Vec> = state.loop_detect_ring.iter().cloned().collect(); let cur = crate::analysis::resource::ResourceVector::snapshot(state); for prior in &priors { + let prior = &prior.normalized; let delta = crate::analysis::resource::ResourceVector::delta( &crate::analysis::resource::ResourceVector::snapshot(prior), &cur, @@ -1649,17 +1673,22 @@ fn find_live_loop_winner( ) -> Option<( PlayerId, crate::analysis::resource::ResourceVector, - std::sync::Arc, + std::sync::Arc, )> { - let priors: Vec> = state.loop_detect_ring.iter().cloned().collect(); + let priors: Vec> = + state.loop_detect_ring.iter().cloned().collect(); let cur = crate::analysis::resource::ResourceVector::snapshot(state); priors.iter().enumerate().find_map(|(k, prior)| { let delta = crate::analysis::resource::ResourceVector::delta( - &crate::analysis::resource::ResourceVector::snapshot(prior), + &crate::analysis::resource::ResourceVector::snapshot(&prior.normalized), &cur, ); - let winner = crate::analysis::loop_check::live_mandatory_loop_winner(prior, state, &delta)?; - let mut frames: Vec<&GameState> = priors[k..].iter().map(|p| p.as_ref()).collect(); + let winner = crate::analysis::loop_check::live_mandatory_loop_winner( + &prior.normalized, + state, + &delta, + )?; + let mut frames: Vec<&GameState> = priors[k..].iter().map(|p| &p.normalized).collect(); frames.push(state); if !crate::analysis::loop_check::winner_life_never_dips(&frames, winner) { return None; @@ -1696,7 +1725,573 @@ fn build_cert( // The offer is only reached for an OPTIONAL loop. mandatory: false, residual_board_delta: crate::analysis::resource::board_delta(prior, state), + // CR 732.2a: only a producer that NARROWED the repetition bound states a per-period + // signature. The bounded-cycle offer overrides this field with functional-update + // syntax at its own call site; every other producer publishes none. + per_cycle: None, + } +} + +/// CR 732.2a: which conjunct of [`try_offer_bounded_cycle_shortcut`] refused to offer. +/// +/// Exhaustive and typed, in the order the conjuncts run. Production ignores the value (a +/// refusal is a refusal), but a negative test row must be able to say WHICH conjunct it is +/// about: an assertion that merely observes "no offer" silently stops testing its own +/// conjunct the moment an earlier one starts refusing first. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum BoundedOfferRefusal { + /// (1) Not a `WaitingFor::Priority` beat, so nobody may suggest a shortcut. + NotAtPriority, + /// (1b) A non-empty `last_loop_action_sequence` routes an accepted proposal to the + /// object-growth materializer, which commits zero bounded cycles. + DrivingSequenceNotEmpty, + /// (2) The priority holder is not the active player the ring sampler gates on. + ProposerIsNotActivePlayer, + /// (4) Neither certification basis matched. + NoCertification, + /// (5) `WinKind::Advantage` — no CR 704 threshold, so this is Path C's class. + AdvantageOnlyCycle, + /// (6) A per-iteration choice the cycle opens is not specified by a published slot. + UnspecifiedChoiceWindow, + /// (7) `elimination_bounds` produced no count in `1..MAX_SHORTCUT_CYCLES`. + NoNarrowedLegalCount, +} + +/// CR 732.2a: the THIRD entry predicate into the loop-shortcut pipeline — a BOUNDED cycle +/// fast-forward for a loop that is lethal to SOME opponents but crowns nobody. +/// +/// Path A ([`find_live_loop_winner`]) needs a determinate single winner, which CR 104.2a +/// makes impossible while two non-fallers live; Path B needs an all-mandatory no-loss draw. +/// A 4-player drain that kills two seats and leaves two is neither, so both fall through +/// and the loop grinds by hand. CR 732.2a still licenses a shortcut for it, PROVIDED the +/// proposal names a repetition count whose results are *predictable* — which is exactly what +/// this predicate establishes and refuses to offer without. +/// +/// Everything downstream of the `WaitingFor::LoopShortcut` this returns is shipped and +/// unchanged: the same offer shape Path A writes, the same declare handler, the same APNAP +/// window, the same materializer. Two field values keep the classes apart BY CONSTRUCTION +/// rather than by review vigilance: +/// * `predicted_winner: None` — this seam never calls `live_mandatory_loop_winner`, so it +/// neither consults nor weakens the CR 104.2a crown gate (`loop_check.rs`'s +/// `nonfallers.len() != 1`); it routes around it. +/// * an EMPTY `last_loop_action_sequence` (step 1b) — the object-growth producer's class is +/// the complement, and `materialize_fixed_shortcut` dispatches on that same discriminant. +/// +/// Returns the offer to write, or the FIRST conjunct that refused. Pure: it reads `state` and +/// writes nothing. The refusal is typed rather than a bare `None` because nine fail-closed +/// conjuncts that all collapse to "no offer" are neither diagnosable nor testable: a negative +/// row asserting only the absence of an offer passes for the wrong reason as soon as an +/// upstream conjunct starts refusing first (domination), and `BoundedOfferRefusal` is what +/// lets such a row name the conjunct it is actually about. +/// CR 732.2a: the capability token that gates the cap-parameterised +/// [`crate::analysis::resource::PeriodVerdicts`] constructor. +/// +/// The unit field is PRIVATE, so the tuple constructor is nameable only inside +/// `game::engine` — the metered seam's own module. Any other site that tried to +/// build a fresh arbitrary-cap verdict container, whose spend the mint's meter +/// would never see, is E0603. Derive list pinned to `#[derive(Debug)]`: a derived +/// constructor would re-open arbitrary caps crate-wide, which is the same +/// strength as the defect this token closes. +#[derive(Debug)] +pub(crate) struct CapAuthority(()); + +/// CR 732.2a: the CLOSED cap domain the metered seam accepts. +/// +/// The seam is `pub` because rows outside this crate ride it, and it mints its +/// own [`CapAuthority`] for whoever calls it — so no token mechanism can gate +/// this route. It is gated at the VALUE instead: an arbitrary raise is +/// unrepresentable, and every image is fail-closed. Resolution is the SEAM's, +/// never the caller's. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum ProbeCap { + /// The shipped budget. + Shipped, + /// `min(n, PROBE_BUDGET)` — expresses every starvation arm and can never raise. + Lowered(u32), + /// Twice the board's own link count, derived from the `state` the seam + /// probes rather than chosen by the caller. At the seam no window has been + /// selected yet, so nothing is exempt and the whole current stack IS the + /// non-exempt population; the work is therefore proportional to the input + /// the caller itself supplied. + RaisedTwiceLinks, +} + +/// CR 732.2a: the mint's meter SNAPSHOT, taken at seam exit. +/// +/// `spent`/`denied` are the probe budget's; the three `conjunct*` counters are +/// the verdict door's own, so an iteration claim has a surface to be asserted on +/// rather than being inferred from charges (which are measurably not a proxy for +/// iterations). +#[derive(Debug, Clone, Copy)] +pub struct MintMeter { + pub spent: u32, + pub denied: bool, + pub conjunct6_asks: u32, + pub conjunct6_frozen_skips: u32, + pub conjunct4_scans: u32, + /// CR 732.2a: WHICH certificate step 4/4b selected — `None` when the mint refused + /// before certification (steps 1/1b/2/2b, or no basis matched at all). + /// + /// It exists because the axis has NO other surface. Both bases now MEASURE + /// `frames_per_period`, so the published [`crate::analysis::loop_check::LoopCertificate`] + /// discriminates in neither direction (see `certified_bounded_cycle_offer`'s + /// attribution note), and the disjunct within basis A is invisible there entirely. + /// A row that must prove a real beat certified through a particular disjunct — the + /// frozen exemption is keyed to exactly one — would otherwise have no assert site. + pub certification: Option, +} + +/// The production entry point: delegates at the shipped cap and drops the meter, +/// so the refusal contract and every existing caller are untouched. +pub fn try_offer_bounded_cycle_shortcut( + state: &GameState, + mandatory: bool, +) -> Result { + try_offer_bounded_cycle_shortcut_metered(state, mandatory, ProbeCap::Shipped).0 +} + +/// CR 732.2a: the OBSERVATION-AND-CAP seam — the same mint, with the per-mint +/// probe cap supplied from the closed [`ProbeCap`] domain and the meter returned +/// instead of dropped. +/// +/// This is the only channel by which a cap other than the shipped one enters, and +/// the only surface on which `spent` / `denied` / the conjunct counters are +/// readable at all: the verdict container never escapes this function. +pub fn try_offer_bounded_cycle_shortcut_metered( + state: &GameState, + mandatory: bool, + cap: ProbeCap, +) -> (Result, MintMeter) { + let mut meter = MintMeter { + spent: 0, + denied: false, + conjunct6_asks: 0, + conjunct6_frozen_skips: 0, + conjunct4_scans: 0, + certification: None, + }; + let outcome = bounded_cycle_offer(state, mandatory, cap, &mut meter); + (outcome, meter) +} + +fn bounded_cycle_offer( + state: &GameState, + mandatory: bool, + cap: ProbeCap, + meter: &mut MintMeter, +) -> Result { + use crate::analysis::resource::{PeriodVerdicts, PROBE_BUDGET}; + + // (1) CR 732.2a: "the player with priority may suggest a shortcut." + let WaitingFor::Priority { player: proposer } = state.waiting_for else { + return Err(BoundedOfferRefusal::NotAtPriority); + }; + // (1b) The bounded drain mints nothing, so it is reachable in `materialize_fixed_shortcut` + // ONLY below that function's object-growth dispatch — and that dispatch is an EARLY + // RETURN gated on `!state.last_loop_action_sequence.is_empty()`. An offer minted with a + // non-empty sequence would be accepted and routed to the object-growth materializer, + // committing ZERO bounded cycles and making this whole path silently dead. The two + // conjuncts are not disjoint — a mana activation arms a period and a same-controller + // on-stack activation both appends to it and leaves the stack non-empty, which is the + // bridge's own entry condition — so this guard is load-bearing, not a restatement of an + // invariant. It converts a silent misroute into an observable refusal. + if !state.last_loop_action_sequence.is_empty() { + return Err(BoundedOfferRefusal::DrivingSequenceNotEmpty); + } + // (2) The ring sampler gates on `Priority{active_player}`, so requiring the proposer to + // BE the active player is what establishes they held priority at every sampled frame. + // It deliberately does NOT claim the proposer benefits from or controls the loop: + // CR 732.2a is explicit that the ending point "need not be the player proposing the + // shortcut" and that the described sequence is "for all players" (both verbatim). That a + // non-benefiting BYSTANDER may therefore propose is an inference from those clauses, not + // a quotation of them; its in-tree precedent is `analysis::loop_check::ShortcutProposal`'s + // own doc — "a player may propose a shortcut whose deterministic outcome wins the game + // for another player." (CR 732.3's fragmented-loop rule is a CONTRAST, not support.) + if proposer != state.active_player { + return Err(BoundedOfferRefusal::ProposerIsNotActivePlayer); + } + // (2b) CR 732.2a: with fewer than two retained frames there is no window, hence no + // certificate is reachable at all — basis A needs `span >= 1` and basis B needs three + // frames. Refusing HERE, before anything is materialized or classified, is what makes + // "nothing spends before the ring gate" structural: the verdict container does not yet + // exist for a consumer to ask. + if state.loop_detect_ring.len() < 2 { + return Err(BoundedOfferRefusal::NoCertification); + } + + // (4) CERTIFICATION — two bases, first match wins, NEVER combined. + // + // Basis A is a fifth copy of the ring `find_map` scan (`:481` the `On` reconcile, `:668` + // Path B, `:710` Path C, `:808` `find_live_loop_winner`). Recorded, not hidden: the repo + // already made this call at `find_live_loop_winner`'s own doc — "a deliberate, isolated + // copy … the `On` arm stays VERBATIM (byte-identity gate)" — and retargeting the four + // shipped walks would edit byte-identity-gated paths inside a feature commit. Newest + // prior first: the most recent recurrence is the least extrapolation. + // + // TWO PARALLEL VECS OVER ONE INDEX SPACE. They are built from the same `VecDeque` in the + // same order, so `ring.len() == ring_live.len()` by construction and `span`, `[idx..]` + // and basis B's `n - 1 - k` are unchanged expressions on both. + // CR 104.4b comparand half — every certification reader, unchanged in value. + let ring: Vec<&GameState> = state + .loop_detect_ring + .iter() + .map(|f| &f.normalized) + .collect(); + // CR 732.2a evaluable half — the period-touch domain. A normalized frame zeroes + // `next_object_id` and strips trigger identity, so it is a comparand and never a board to + // evaluate an announcement or a resolution against. + let ring_live: Vec<&GameState> = state.loop_detect_ring.iter().map(|f| &f.live).collect(); + + // The per-mint verdict door, constructed immediately after the ring materialization and + // before anything asks it. It allocates an empty memo and a `u32` budget and classifies + // NOTHING; the seam mints its own capability token because it, not its caller, resolves + // the cap. + let cap_value = match cap { + ProbeCap::Shipped => PROBE_BUDGET, + ProbeCap::Lowered(n) => n.min(PROBE_BUDGET), + ProbeCap::RaisedTwiceLinks => 2 * state.stack.len() as u32, + }; + let mut verdicts = PeriodVerdicts::for_period_with_cap( + &ring_live, + state, + proposer, + cap_value, + CapAuthority(()), + ); + + // ONE exit for the meter: everything that can ask the door lives below, and the snapshot + // is taken here rather than at each refusal so a future refusal arm cannot forget it. + // `certification` is the exception BY NECESSITY — it is not a counter the container + // accumulates but a choice made mid-walk, so it is written where it is decided and read + // back here through the same one exit. + let outcome = certified_bounded_cycle_offer( + state, + mandatory, + proposer, + &ring, + &ring_live, + &mut verdicts, + &mut meter.certification, + ); + meter.spent = verdicts.spent(); + meter.denied = verdicts.denied(); + meter.conjunct6_asks = verdicts.conjunct6_asks(); + meter.conjunct6_frozen_skips = verdicts.conjunct6_frozen_skips(); + meter.conjunct4_scans = verdicts.conjunct4_scans(); + outcome +} + +/// CR 732.2a: certification (step 4/4b), the choice gate and the bound — everything that can +/// ask the verdict door, split out so its caller owns exactly one meter snapshot. +#[allow(clippy::too_many_arguments)] +fn certified_bounded_cycle_offer<'a>( + state: &'a GameState, + mandatory: bool, + proposer: PlayerId, + ring: &[&'a GameState], + ring_live: &[&'a GameState], + verdicts: &mut crate::analysis::resource::PeriodVerdicts<'a>, + cert_out: &mut Option, +) -> Result { + use crate::analysis::decision_template::{ + DecisionPoint, DecisionPointKind, DecisionSlot, IterationCount, + }; + use crate::analysis::resource::{ + certified_period_touch, PeriodCertification, PeriodTouch, PeriodicDelta, ResourceVector, + }; + use crate::types::ability::TargetRef; + + let cur = ResourceVector::snapshot(state); + // Written as an explicit newest-first walk rather than `find_map` because the candidate + // body now threads `&mut verdicts` and carries an owned per-candidate `PeriodTouch` out. + let mut basis_a: Option<( + &GameState, + Vec, + PeriodTouch<'_>, + PeriodicDelta, + )> = None; + for idx in (0..ring.len()).rev() { + // The span, in RETAINED RING FRAMES, that this candidate pair covers. + // `ring.last()` is the sample `pass_priority_once_with_pipeline` recorded at THIS + // beat, before the bridge ran, so the newest frame is the current state and the + // span from `ring[idx]` is `len - 1 - idx`. + // + // A span of 0 is the pair `state` against its own snapshot. It is already refused + // by `net_progress_for` on the resulting zero delta in every production + // trajectory, but it is refused HERE too, explicitly: `materialize_fixed_shortcut` + // now DELIMITS a committed cycle by this count, and a published `0` would mean + // "one repetition spans no frames", which no drive can honour. Fail closed on the + // degenerate pair rather than rely on a downstream conjunct to catch it. + // + // EVALUATED FIRST, before the window is built, touched or minted from — `span >= 1` + // is `window.len() >= 2` identically, so this guard is also what keeps a degenerate + // window out of the touch and the mint. + let span = ring.len() - 1 - idx; + if span < 1 { + continue; + } + let prior = ring[idx]; + let window = &ring_live[idx..]; + // Built under `BoardCovered` unconditionally, because step 4 does not yet know which + // disjunct will match; step 4b keeps it or rebuilds it. + let touch_cover = certified_period_touch(window, state, PeriodCertification::BoardCovered); + // (3) The published per-iteration choices (5a's single authority), now enumerated + // over the CERTIFIED PERIOD's announced pairs rather than over the offer-beat stack. + let points = bounded_cycle_pin_slots_for_window(&touch_cover, proposer); + let slots: Vec = points.iter().map(|p| p.slot.clone()).collect(); + let delta = ResourceVector::delta(&ResourceVector::snapshot(prior), &cur); + // The existing disjunction, written as an `if / else if` that RECORDS the matching + // disjunct instead of discarding it. Semantics are byte-for-byte the `||` it + // replaces: the equality arm is still evaluated first and `_pinned` still runs only + // when it fails. The two disjuncts are mutually exclusive — equality compares the + // stack exactly (constant depth) while cover's item (2) forces strictly growing depth + // — so "which disjunct" is a total function with no both-matched case. + let cert = if crate::analysis::resource::loop_states_equal_modulo_resources(prior, state) { + Some(PeriodCertification::BoardEqualOnly) + } else if crate::analysis::resource::loop_states_cover_modulo_growth_pinned( + prior, + state, + proposer, + &slots, + &touch_cover, + verdicts, + ) { + Some(PeriodCertification::BoardCovered) + } else { + None + }; + let Some(cert) = cert else { + continue; + }; + if !delta.net_progress_for(proposer) { + continue; + } + // (4b) THE CERTIFIED TOUCH, keyed to the disjunct that actually matched. The cover + // disjunct supplies both premises the frozen subtraction rests on; the equality + // disjunct supplies only the depth one, so its period is rebuilt with the exemption + // withdrawn. `announced` is identical on both, so the mint is not re-derived. + let touch = match cert { + PeriodCertification::BoardCovered => touch_cover, + c => certified_period_touch(window, state, c), + }; + // Recorded HERE and not at the `if / else if`: a candidate that certifies and then + // dies on `net_progress_for` is not the certificate the mint carries forward, and a + // meter that named it would attribute the offer to a pair the walk discarded. + *cert_out = Some(cert); + basis_a = Some(( + prior, + points, + touch, + PeriodicDelta { + // MEASURED span, not the former hardcoded `1`. The walk is `.rev()`, so + // `idx` is usually `len - 2` and the span is 1 — but it is 1 by + // MEASUREMENT, not by assumption, and it is NOT always 1: the + // `interactive_3p_subset_lethal_does_not_crown` fixture's repetition + // spans TWO frames (a gain-life resolution then a lose-life one), and + // under the old hardcode its accepted drive committed nothing at all. + frames_per_period: span as u32, + delta, + victim_slot: Vec::new(), + }, + )); + break; + } + // Basis B consults NO board predicate: a period whose frame-deltas repeated twice in the + // retained ring is a signature on its own. Its certifying pair is the ring frame one + // period back and the ring's newest frame — the very pair `ring_delta_signature` + // measured, so the certificate's residual is derived from the same window as the delta. + // + // ⚠ WHAT ACTUALLY DECIDES A vs B ON A GROWING CASCADE — measured, because the intuitive + // answer is wrong and cost this lane a mislabelled row. It is NOT "resource-purity": a + // pure life↔life drain does not take basis A by recurring. BOTH known life-drain + // fixtures GROW their stack every period, so `loop_states_equal_modulo_resources` is + // FALSE on the certifying pair of each, and NEITHER certifies through the equal disjunct: + // + // * the basis-A fixture (`multiplayer_pure_life_drain_offers_at_three_and_four_players`, + // Blight-Priest + Exquisite Blood) certifies through + // `loop_states_cover_modulo_growth_pinned` at `ring[1]` — `stack[2->3]` at 3 players, + // `stack[3->5]` at 4. The one `eq == true` pair on its ring carries a zero δ and dies on + // `net_progress_for`, not on the board predicate. + // * the basis-B fixture (`dina_untargeted_drain_4p_offers_at_three_live_opponents`) has + // that SAME disjunct vetoed at cover **gate (5)** — the off-stack fire-time condition + // guard — by a `ModifyCost { Reduce, {2} }` static on a library card, gated on + // `LifeGainedThisTurn { Controller } >= 1`: a projected axis read at fire time. + // + // So the discriminant is a FIRE-TIME CONDITION READING A PROJECTED AXIS, not the shape of + // the resources the loop moves. And the composition worth remembering: gate (5)'s + // `scope.cast_card_ids` relief — which exists precisely to excuse a self-cost modifier on + // a card the window provably never casts — CANNOT fire for this class, because step (1b) + // requires `last_loop_action_sequence` to be EMPTY, so `window_cast_card_ids` returns + // `None` (no proof ⇒ scan everything). The requirement that DEFINES the bounded class is + // exactly what disables the relief that would otherwise let cover succeed. Two + // individually-correct constraints composing into a refusal neither intended. + // + // ⚠ NEVER attribute the basis from `frames_per_period`. BOTH bases now MEASURE it — basis A + // from the certifying prior's ring index above, basis B from `ring_delta_signature`'s + // derived `k` — so the two publish overlapping value ranges and NO value discriminates in + // either direction. (Before fix round 1 basis A published a hardcoded `1`, which made + // `!= 1` sufficient-but-not-necessary for "not basis A"; that inference is now dead too, + // since a basis-A span of 2 is exactly what the `interactive_3p_subset_lethal_does_not_crown` + // fixture publishes.) The only sound attribution is a discriminating probe: force + // `ring_delta_signature` to return `None` (basis B's sole entry point is the `None =>` + // arm below) — the rows that survive are basis A, the rows that fail are basis B. + let (cert_prior, points, touch, mut periodic) = match basis_a { + Some(hit) => hit, + None => { + let (k, delta) = crate::analysis::resource::ring_delta_signature(state) + .ok_or(BoundedOfferRefusal::NoCertification)?; + let n = ring.len(); + let start = n + .checked_sub(1 + k as usize) + .ok_or(BoundedOfferRefusal::NoCertification)?; + let cert_prior = *ring + .get(start) + .ok_or(BoundedOfferRefusal::NoCertification)?; + // Basis B EXEMPTS NOTHING, and that is derived rather than cautious: its + // certificate consults no board predicate, so it supplies no premise that the + // period cannot SHRINK the stack — a stack draining from the top under a ticking + // monotone resource satisfies the delta signature and leaves a large frozen + // bottom prefix the drain will reach. `announced` is unchanged; only the + // subtraction is withdrawn. + let window = ring_live + .get(start..) + .ok_or(BoundedOfferRefusal::NoCertification)?; + let touch = + certified_period_touch(window, state, PeriodCertification::ResourceSignatureOnly); + *cert_out = Some(PeriodCertification::ResourceSignatureOnly); + let points = bounded_cycle_pin_slots_for_window(&touch, proposer); + ( + cert_prior, + points, + touch, + PeriodicDelta { + frames_per_period: k, + delta, + victim_slot: Vec::new(), + }, + ) + } + }; + + // (5) CR 732.2a: the conjunct that proves this class is DISJOINT from Path C's + // revocable-∞ advantage mark. An `Advantage` cycle drives nobody toward a CR 704 + // threshold, so it has no bound to state and belongs to the other seam. + if crate::analysis::loop_check::classify_win_kind(proposer, &periodic.delta) + == crate::analysis::loop_check::WinKind::Advantage + { + return Err(BoundedOfferRefusal::AdvantageOnlyCycle); + } + + // (6) CR 732.2a "predictable results": every per-iteration choice the cycle opens must be + // a SPECIFIED one. `stack_choices_are_all_specified` is that question's authority — it + // shares gates (3)/(6)'s own predicates and pin relief verbatim, so the relief here can + // never be coarser than the mint that published the slots. + // + // Its own conjunct, not folded into step 4: basis A's disjunction may have matched on + // exact recurrence (which says nothing about choices) and basis B consults no board + // predicate at all. And deliberately NOT a second `loop_states_cover_modulo_growth_pinned` + // call: on the dina 4p drain that predicate refuses 66 of the beats this seam reaches, + // on a BOARD fact, without ever examining a choice. + // + // ⚠ ATTRIBUTION CORRECTED, and deliberately scoped to what was RE-MEASURED. An earlier + // revision named the refuser as the cover predicate's item (1) `object_resource_axes_match` + // STRICT compare. At the MINT/OFFER beat that is FALSE: instrumenting the cover gates on + // dina's offer beat shows `object_resource_axes_match == true` at every gate-(1) refusal + // observed (187 of 187 across the dina and the ≥3p life-drain drives); the actual refusals + // are gate (5) (an off-stack fire-time condition reading a projected axis) and, on older + // ring pairs, gate (1)'s `loop_states_equal` on the stack-cleared projected board. The 66 + // NON-OFFERING beats the original count came from were NOT re-measured in that round, so + // the item-(1) attribution may still hold for them — it is left standing for that + // population rather than overwritten with an unmeasured claim. Either way the conjunct's + // JUSTIFICATION is unchanged: cover refuses on board facts, and this seam asks about + // choices. + let slots: Vec = points.iter().map(|p| p.slot.clone()).collect(); + if !crate::analysis::resource::stack_choices_are_all_specified( + state, + proposer, + &slots, + Some(&touch), + verdicts, + ) { + return Err(BoundedOfferRefusal::UnspecifiedChoiceWindow); } + + // (7) THE BOUND. `declarable_victims` is the union of the published slots' legal targets + // — EMPTY for the untargeted class, where the victims are already in `delta.life`. + let declarable_victims: Vec = { + let mut v: Vec = points + .iter() + .filter_map(|p| match &p.kind { + DecisionPointKind::Targets { legal_targets, .. } => Some(legal_targets), + _ => None, + }) + .flatten() + .filter_map(|t| match t { + TargetRef::Player(p) => Some(*p), + _ => None, + }) + .collect(); + v.sort_unstable(); + v.dedup(); + v + }; + // CR 704.5a: what ONE repetition charges to whichever seat a slot's pin names. The + // max-vs-sum reasoning, the gain clamp and the fail-closed direction live on the + // function; `elimination_bounds` then sums the published slots per declarable victim. + // Extracted rather than inlined so the fork has a callable seam — `victim_slot` is empty + // on every trajectory that offers today, so this value is dropped in production and only + // `worst_seat_life_loss_is_the_max_seat_never_the_sum` discriminates max from sum. + let worst_seat_life_loss: i64 = periodic.delta.worst_seat_life_loss(); + periodic.victim_slot = points + .iter() + .filter(|p| matches!(p.kind, DecisionPointKind::Targets { .. })) + .map(|p| (p.slot.clone(), worst_seat_life_loss)) + .collect(); + // `.cloned()`, not `.copied()`: `(DecisionSlot, i64)` is not `Copy`. + let slot_magnitude: std::collections::BTreeMap = + periodic.victim_slot.iter().cloned().collect(); + let max_iterations = + periodic + .delta + .elimination_bounds(state, &declarable_victims, &slot_magnitude); + // A bound of 0 states no legal repetition. A bound AT the cap states no narrowing at all + // — this producer's whole claim is that it measured a CR 704.5a / CR 704.5c / CR 104.3c + // threshold inside the loop, so an unnarrowed result belongs to another seam. Checking + // the closed range here makes `schema.is_bounded()` true BY CONSTRUCTION for every offer + // this function mints, instead of an inference from step 5's `Advantage` rejection. + if !(1..MAX_SHORTCUT_CYCLES).contains(&max_iterations) { + return Err(BoundedOfferRefusal::NoNarrowedLegalCount); + } + + // (8) The certificate, with the two fields the bounded class states differently from + // Path A's spelled out at the site rather than mutated after the fact. + // `cert_current` is the live `state` on both bases, exactly as before: `build_cert`'s only + // use of the pair is `board_delta`, a comparand read. + let base = build_cert(cert_prior, state, &periodic.delta, proposer); + let certificate = crate::analysis::loop_check::LoopCertificate { + per_cycle: Some(periodic), + // CR 732.5: honest, and currently read by nothing in production — a loop nobody can + // break is still not forced to end, so this records the fact without acting on it. + mandatory, + ..base + }; + + // (9) The schema. `Fixed(max_iterations)` is the SUGGESTION and `max_iterations` the + // CEILING; the declare handler rejects any `Fixed(n)` above it and rejects `UntilLethal` + // outright, both already shipped. The pre-built `points` go in directly — the bounded + // path never calls `pinned_decisions_to_points`, whose legal sets are derived FROM the + // declared pins and would let a declaration ratify itself. + let schema = build_shortcut_schema( + points, + IterationCount::Fixed(max_iterations), + max_iterations, + ); + Ok(WaitingFor::LoopShortcut { + proposer, + predicted_winner: None, + certificate, + schema, + }) } /// CR 704.5a / CR 704.5c: a determinate lethal drain (0-or-less life / 10-poison) repeats @@ -1724,12 +2319,13 @@ fn pinned_decisions_to_points( pins: &[crate::analysis::decision_template::PinnedDecision], state: &GameState, controller: PlayerId, -) -> Vec { +) -> Option> { use crate::analysis::decision_template::{DecisionPoint, DecisionPointKind, PinnedDecision}; - pins.iter() - .filter_map(|pin| match pin { + let mut points = Vec::with_capacity(pins.len()); + for pin in pins { + let point = match pin { // CR 603.3b: trigger ordering is not a loop-declaration choice — no read-side peer. - PinnedDecision::Order { .. } => None, + PinnedDecision::Order { .. } => continue, // CR 702.51a: the untapped creatures the controller may tap for convoke. Sorted by // the public inner id: `im::HashMap::values()` order is nondeterministic and this Vec // serializes to the wire (cf. `resolve_source`'s `min_by_key` for the same reason). @@ -1741,10 +2337,10 @@ fn pinned_decisions_to_points( .map(|o| o.id) .collect(); tappable.sort_by_key(|id| id.0); - Some(DecisionPoint { + DecisionPoint { slot: slot.clone(), kind: DecisionPointKind::ConvokeTaps { tappable }, - }) + } } // FIX-1 (B1): reify the recorded fixed in-cycle choices. The drive replays these SAME // pins via `decision_template::resolve` (CR 608.2b ByIdentity live re-binding), so the @@ -1752,14 +2348,23 @@ fn pinned_decisions_to_points( // CR 608.2b: resolve each pinned target to its live legal `TargetRef` — the pinned // identity IS the singleton legal set (a fixed declinable ∞ offer, no FE re-selection). PinnedDecision::Targets { slot, targets } => { + // CR 732.2a: a proposal must describe a sequence "that may be legally taken + // based on the current game state". If ANY pinned target no longer resolves, + // the offer must be WITHDRAWN, not published — the `?` below is that + // withdrawal. `filter_map`ping the failure away instead would publish a point + // with a short `legal_targets` under `min_targets = targets.len()`: a + // self-inconsistent, UNDECLARABLE point that fails downstream as + // `IllegalPinValue`/`UnknownChoice` rather than as "there is no offer". + // Dropping the point entirely is also wrong — it would let + // `predictability_gate`'s coverage check pass trivially. let legal_targets: Vec = targets .iter() - .filter_map(|t| { + .map(|t| { crate::analysis::decision_template::resolve_target_ref(t, slot, 0, state) }) - .collect(); + .collect::>>()?; let count = targets.len().min(u32::MAX as usize) as u32; - Some(DecisionPoint { + DecisionPoint { slot: slot.clone(), kind: DecisionPointKind::Targets { legal_targets, @@ -1767,19 +2372,19 @@ fn pinned_decisions_to_points( max_targets: count, ordered: true, }, - }) + } } // CR 608.2d: the latched mana color — a read-only fixed point (no legal set to bound). - PinnedDecision::ManaColor { slot, color } => Some(DecisionPoint { + PinnedDecision::ManaColor { slot, color } => DecisionPoint { slot: slot.clone(), kind: DecisionPointKind::ManaColor { color: *color }, - }), + }, PinnedDecision::Mode { slot, indices } => { let mut available_modes = indices.clone(); available_modes.sort_unstable(); available_modes.dedup(); let count = indices.len().min(u32::MAX as usize) as u32; - Some(DecisionPoint { + DecisionPoint { slot: slot.clone(), kind: DecisionPointKind::Mode { available_modes, @@ -1791,18 +2396,431 @@ fn pinned_decisions_to_points( .collect::>() .len(), }, - }) + } } - PinnedDecision::MayChoice { slot, .. } => Some(DecisionPoint { + PinnedDecision::MayChoice { slot, .. } => DecisionPoint { slot: slot.clone(), kind: DecisionPointKind::MayChoice, - }), - PinnedDecision::UnlessBreak { slot, .. } => Some(DecisionPoint { + }, + PinnedDecision::UnlessBreak { slot, .. } => DecisionPoint { slot: slot.clone(), kind: DecisionPointKind::UnlessBreak, - }), - }) - .collect() + }, + }; + points.push(point); + } + Some(points) +} + +/// CR 115.2 + CR 732.2a: does the ability's HEAD effect declare the "target opponent" PLAYER +/// filter — a `Typed` filter with no type constraints, no object properties, and +/// `controller: Opponent`, the shape `game::targeting::find_legal_targets` collapses to +/// players-only (`crates/engine/src/game/targeting.rs:192-193`)? +/// +/// SHAPE ACCEPTANCE ONLY, and the `bool` return is what enforces it: the published legal +/// set must come from the announcement authority (`ability_utils::build_target_slots`), never +/// from here, because this predicate reads the HEAD effect's filter while the choice being +/// announced can belong to a CHAINED sub-ability (CR 601.2c reached via CR 603.3d). Handing +/// the filter back would re-open exactly that divergence, so it is not handed back. +/// +/// What the `controller` conjunct contributes, and nothing else does: `controller: You` / +/// `None` ALSO collapses to players, so an all-`Player` legal set alone would admit a single +/// forced seat, which is not the per-opponent choice a bounded drain cycle pins. Measured on +/// the 3p drain board: `Typed{[], You, []}` builds ONE mandatory slot whose legal set is +/// `[Player(0)]`, and only this conjunct rejects it. +/// +/// What the `type_filters` / `properties` conjuncts contribute (issue #2004 — "target token +/// you control" must not collapse to a player) is the MIRROR of that chained-slot +/// divergence: an object-shaped HEAD effect whose single announced slot is nonetheless a +/// player choice. When the head announces its own slot, an object-shaped filter is already +/// rejected upstream — it either enumerates OBJECTS (the caller's all-`Player` conjunct) or +/// enumerates nothing, making `build_target_slots` return `Err` (the caller's cardinality +/// conjunct). It is only when the head announces NOTHING +/// (`TargetChoiceTiming::Resolution`) and a chained `target opponent` sub-ability supplies +/// the one slot that these two conjuncts become the sole rejector — which is the board +/// `bounded_cycle_pin_slots_conjuncts_are_each_load_bearing` measures them on. +fn declares_opponent_player_target(ability: &crate::types::ability::ResolvedAbility) -> bool { + use crate::types::ability::{ControllerRef, TargetFilter}; + let Some(TargetFilter::Typed(tf)) = ability.effect.target_filter() else { + return false; + }; + tf.type_filters.is_empty() + && tf.properties.is_empty() + && tf.controller == Some(ControllerRef::Opponent) +} + +/// What ONE accepted stack entry publishes: the slot keys, plus the legal set the +/// ANNOUNCEMENT authority itself built for the target slot. +pub(crate) struct EntryPinSlots { + /// CR 115.2 target choice — `index: 0`. `None` for shape (B), the may-only entry: + /// announcing it surfaces NO choice at all (`targets.is_empty()` and zero built slots), + /// so there is no CR 601.2c announcement choice for a pin to specify. + pub(crate) target: Option, + /// CR 603.5 "may" gate — `index: 1`, `Some` only if `ability.optional` — the mint + /// additionally refuses on recipient, stored auto-choice and prompt-cardinality grounds + /// (see the `may` mint below), so `None` here does NOT imply the ability is mandatory. + /// `DecisionSlot`'s sub-index disambiguates two choices of ONE ability instance (target + /// vs. may gate). + pub(crate) may: Option, + /// The legal set of the ONE announcement slot, taken VERBATIM from + /// `ability_utils::build_target_slots` — the same authority that decided there is + /// exactly one mandatory choice. Deriving it a second time from the head effect's + /// filter would let the two disagree about WHICH choice is being published, which is + /// the same class of divergence the cardinality conjunct closes about HOW MANY. + /// Empty for shape (B), which publishes no target slot to carry a legal set for. + pub(crate) legal_targets: Vec, +} + +/// CR 732.2a: the per-iteration choice slots ONE stack entry publishes for `proposer`, or +/// `None` when it publishes none. +/// +/// SINGLE AUTHORITY, and that is the whole point of its existence: the MINT +/// ([`bounded_cycle_pin_slots_for_window`]) maps it over the certified period's announced +/// pairs, of which `state.stack` is the zero-window degenerate case, and the RELIEF +/// (`analysis::resource`'s CR 732.2a gate-(3)/(6) pin skip) calls it for one entry. Because +/// both sides ask the same function, the relief predicate cannot be COARSER than the mint +/// predicate — relieving a verdict the published pin does not specify is impossible by +/// construction rather than by convention. +/// +/// The acceptance conjuncts, in the order the EXTENSION POINT's preconditions name them: +/// (c) `entry.controller == proposer` — CR 732.2a leaves every OTHER player owning their own +/// choices, so an opponent-controlled entry is never pinnable; the entry is a triggered +/// ability (a spell / activated ability re-announces from scratch); ANNOUNCING it requires +/// either exactly one mandatory choice over players whose head effect declares the +/// player-target shape (shape (A): asked of the announcement authority itself, +/// `ability_utils::build_target_slots` — the function the relief's own +/// `forced_unique_targeting` rebuilds slots with — rather than of a proxy, plus +/// [`declares_opponent_player_target`]), or NO announcement choice at all (shape (B): +/// `targets.is_empty()` and zero built slots); and its source object still exists, so the +/// slot can re-bind (CR 400.7 incarnation, fail-closed on absence). +/// +/// SCOPE OF THE ANSWER: because the relief is a `continue` at gate (3), the relief +/// predicate must be no coarser than EVERY fact `stack_entry_has_no_ordering_input` +/// rejects on — not just the target one. Correspondence, in that function's own order: +/// entry kind (the destructure below), `pending_trigger_entry` (the ONE state-dependent +/// fact, enforced at the relief so this enumerator stays pure — see the block below), +/// `multi_target` / `distribution` / `target_constraints` (the block below), and the +/// target choice itself, which is the one fact the published slot actually answers. +pub(crate) fn entry_publishes_pin_slots( + state: &GameState, + entry: &StackEntry, + proposer: PlayerId, +) -> Option { + use crate::analysis::decision_template::DecisionSlot; + if entry.controller != proposer { + return None; + } + let StackEntryKind::TriggeredAbility { ability, .. } = &entry.kind else { + return None; + }; + // The published slot answers ONE target (`min_targets: 1, max_targets: 1` below). A + // variable-count choice (CR 601.2c "if the spell has a variable number of targets, the + // player announces how many"), a divide/distribute assignment (CR 601.2d), or a + // cross-target constraint (CR 601.2c "the same target can't be chosen multiple times" / + // "must be chosen") — all reached for a triggered ability via CR 603.3d — is + // announcement-time ordering input NO published slot specifies. These are the ABILITY's + // own facts, so they live here, where mint and relief share them: the gate-(3) relief + // is a `continue` that discharges the whole of `stack_entry_has_no_ordering_input`, + // which rejects on each of them independently of its target check. + // + // The fourth fact that function rejects on — `pending_trigger_entry == entry.id`, + // CR 603.3c mid-construction — is deliberately NOT here: it is a property of the + // COMPARED STATE, not of the offer's schema, and reading it would break this + // enumerator's PROMPT-state independence (see [`bounded_cycle_pin_slots`]: it never + // reads `waiting_for`, nor `pending_trigger_entry`, which is set exactly while a prompt + // is up). NOT a claim of purity over a three-field surface: the CR 603.5 recipient + // conjunct below resolves a player through `optional_prompt_player` → + // `resolve_effect_player_ref`, which reaches ELEVEN distinct `GameState` fields — + // `state.players`, `state.seat_order`, `state.format_config`, `state.objects`, + // `state.lki_cache`, `state.stack`, `state.current_trigger_event`, + // `state.last_created_token_ids`, `state.last_revealed_ids`, + // `state.last_zone_changed_ids` and `state.resolution_stack`. The contract is narrower + // and exact — the mint is a function of the BOARD, never of the PROMPT — and it is what + // keeps the mint's verdict stable across a prompted and an unprompted beat. + // It is set exactly + // while a `TriggerTargetSelection` prompt is up, so a mint that read it would publish + // nothing on a prompted board — measured on dump B, where it zeroes the emblem slot. + // It is enforced at the relief instead (`analysis::resource::entry_target_choice_is_pinned`), + // which makes the relief strictly NARROWER than the mint — never coarser. + if ability.multi_target.is_some() + || ability.distribution.is_some() + || !ability.target_constraints.is_empty() + { + return None; + } + // THE ANNOUNCEMENT AUTHORITY, not a proxy for it. Everything above is an ability FACT; + // this is the only conjunct that asks the questions the published point actually + // answers — "how many choices does announcing this entry require, is each one + // mandatory, and WHICH objects or players may be chosen?" `Effect::target_filter()` + // (below) cannot answer any of them: it reports the head effect's filter, while + // CR 601.2c ("if the spell uses the word 'target' in multiple places, the same object + // or player can be chosen once for each instance") — reached for a triggered ability + // via CR 603.3d — makes a CHAINED sub-ability's own target a SECOND independent choice, + // with its OWN legal set. `build_target_slots` is the function + // `stack_entry_has_no_ordering_input` itself rebuilds slots with (via + // `forced_unique_targeting`), so mint and relief now measure the same quantities. + // + // Exactly one MANDATORY slot over PLAYERS, and each of the three parts is load-bearing + // — the first two discriminated by + // `bounded_cycle_pin_slots_requires_a_single_mandatory_announcement_slot`, the third by + // `bounded_cycle_pin_slots_legal_set_comes_from_the_announcement_authority`: + // * `len() == 1` — a chained second "target" (2 slots) or an effect whose filter the + // SLOT BUILDER declines (0 slots: `triggers::extract_target_filter_from_effect` + // carves out `Sacrifice`/`UnattachAll`/… for which `Effect::target_filter()` still + // returns `Some`, and `target_choice_timing == Resolution` surfaces no stack slot at + // all) would leave the published `min/max_targets: 1` contradicting the announcement. + // * `!optional` — `ability.optional_targeting` ("up to one target") makes the real + // minimum ZERO (CR 601.2c), and its slot may legally carry an EMPTY legal set, so a + // `min_targets: 1` point would over-state the choice the offer specifies. + // * every legal target is a PLAYER (CR 115.2) — the head effect can declare the + // player shape while the ONE slot the announcement actually surfaces belongs to a + // chained sub-ability targeting OBJECTS (measured: head `LoseLife` at + // `TargetChoiceTiming::Resolution` contributing 0 slots + a chained + // `LoseLife{Typed{[Creature]}}` contributing 1, legal set three objects). A + // `TargetPin::Player` cannot specify such a choice, so publishing it would hand + // gate (3)'s `continue` a slot no pin can answer. + // + // `Err` (no legal target, CR 603.3d) also yields `None` — fail-closed, matching this + // function's contract that the schema can only ever UNDER-publish. Purity survives: + // `build_target_slots` never reads `state.waiting_for` (its only hit in + // `ability_utils.rs` is a test at `:7722`). + let source = object_decision_source(state, entry.source_id)?; + // CR 603.5 + CR 732.2a: `entry.controller == proposer` above bounds who OWNS the entry; + // it does NOT bound who the resolver ASKS, nor WHETHER it asks, nor HOW MANY TIMES. + // Three mint-time conjunct groups, all FAIL-CLOSED pre-filters on the ONE gate a + // `MayChoice` pin is for — the CR 603.5 gate inside `resolve_chain_body` + // (`effects/mod.rs`, the `if ability.optional && !has_kind_driven_repeat(..)` block). + // THIS IS THE ONE PLACE `may` IS MINTED, so the guards cover shape (A) and shape (B) + // together rather than being restated per shape. Soundness over the OTHER FOUR + // production producers of `WaitingFor::OptionalEffectChoice` is NOT claimed here; it is + // discharged at the consumption point, where the instrument is total. + // + // (a) RECIPIENT. `optional_prompt_player` is THIS gate's own recipient authority — + // five of its branches route to a NON-controller and the last is EFFECT-AGNOSTIC + // (CR 503.1a + CR 608.2d, the `scoped_player` class whose printed member is Braids, + // Conjurer Adept — "At the beginning of each player's upkeep, that player may put an + // artifact, creature, or land card from their hand onto the battlefield."), so + // asking the same function the gate asks keeps THIS pair from drifting. Without + // it a proposer's pin can be spent as another seat's CR 603.5 choice. + // (b) SECOND AUTHORITY. A stored "don't ask again" auto-choice ALREADY ANSWERS this + // may and the gate returns BEFORE setting any prompt, so a pin minted here would + // be silently unused — invisible even to a fail-closed inject arm. The key is + // built exactly as the gate builds it; `player` is `proposer` only because `&&` + // short-circuits left to right and (a) has already proved them equal. Present ⇒ + // refuse; `may_trigger_origin: None` ⇒ no key exists ⇒ nothing to refuse. + // (c) CARDINALITY. CR 732.2a: the shortcut describes THE sequence of choices, so one + // published slot may stand for exactly ONE CR 603.5 prompt. Production suppresses + // the single up-front gate for three `repeat_for` shapes and re-fires optionality + // PER ITERATION (CR 608.2c + CR 608.2d) instead. `has_kind_driven_repeat` keys on + // `repeat_for` ALONE — no `Effect` restriction — so an optional `PutCounter` / + // `Draw` / `Token` of that shape would otherwise mint ONE slot for N prompts. Ask + // production's own three predicates rather than re-deriving them here, which is + // the same authority-sharing rule (a) follows. + let may = (ability.optional + && crate::game::effects::optional_prompt_player(state, ability) == proposer + && !crate::game::effects::has_kind_driven_repeat(ability) + && !crate::game::effects::has_member_driven_repeat_after_hydration(state, ability) + && !crate::game::effects::is_repeated_optional_payment(ability) + && ability.may_trigger_origin.as_ref().is_none_or(|origin| { + state + .may_trigger_auto_choice(&crate::types::game_state::MayTriggerAutoChoiceKey { + player: proposer, + source_id: ability.source_id, + origin: origin.clone(), + }) + .is_none() + })) + .then(|| DecisionSlot { + source: source.clone(), + index: 1, + }); + let mut slots = super::ability_utils::build_target_slots(state, ability).ok()?; + // SHAPE (B) — may-only. The announcement authority surfaced NO choice, so there is no + // CR 601.2c target for a pin to specify and the entry publishes its CR 603.5 gate + // alone. `ability.targets.is_empty()` is what makes "zero built slots" mean "declares + // nothing" rather than "declared something the builder declined"; `optional` is + // inherited from the `may` expression, which is `None` without it. A `may` the three + // conjunct groups above suppressed leaves shape (B) with NO slot at all, so the whole + // entry publishes `None` — the fail-closed direction. + if slots.is_empty() { + if !ability.targets.is_empty() { + return None; + } + return Some(EntryPinSlots { + target: None, + may: Some(may?), + legal_targets: vec![], + }); + } + if slots.len() != 1 { + return None; + } + let slot = slots.swap_remove(0); + if slot.optional + || !slot + .legal_targets + .iter() + .all(|target| matches!(target, crate::types::ability::TargetRef::Player(_))) + { + return None; + } + // SHAPE conjunct only — the legal set above is already the announcement authority's, and + // the predicate's `bool` return makes re-deriving one from the head filter impossible + // rather than merely discouraged. This rejects a head effect that is not the CR 115.2 + // "target opponent" declaration, which an all-`Player` legal set alone does not + // (`controller: You` builds exactly one mandatory slot whose legal set is the + // controller — measured). + if !declares_opponent_player_target(ability) { + return None; + } + // Shape (A) — targeted. Index 1 is kept for the may slot in BOTH shapes, so slot + // identity is stable across them. + Some(EntryPinSlots { + target: Some(DecisionSlot { source, index: 0 }), + may, + legal_targets: slot.legal_targets, + }) +} + +/// CR 732.2a: the per-iteration decision points a BOUNDED cycle shortcut must publish for +/// `proposer` — one `Targets` point per proposer-controlled triggered-ability SOURCE that +/// declares a single *player* target (CR 115.2), plus a `MayChoice` point (CR 603.5) when +/// that ability is optional. +/// +/// Only a *published* slot is a "specified choice" in CR 732.2a's sense; an unpublished +/// per-opponent choice would make the proposal a conditional action. This is the SINGLE +/// authority for that slot set — the offer's cover call, its schema, the drive's cover call +/// and the per-cycle `predictability_gate` all read the same list. +/// +/// A function of the BOARD, never of the PROMPT. NOT a purity claim over a three-field +/// `(state.stack, state.objects, proposer)` surface — that would be false: the CR 603.5 +/// recipient conjunct in the body resolves a player through `optional_prompt_player` → +/// `resolve_effect_player_ref`, which reaches ELEVEN distinct `GameState` fields (enumerated +/// at that conjunct). What actually holds, and what the callers rely on, is the narrower +/// PROMPT-independence: it deliberately does **not** +/// read `state.waiting_for`, and it cannot: both production call sites run at +/// `WaitingFor::Priority` (`interactive_loop_bridge`'s destructure, and the drive's +/// `Priority{active}` settle arm), where no prompt and no materialized `legal_targets` +/// exist. The legal set is the one `ability_utils::build_target_slots` built for the +/// accepted announcement slot, carried through verbatim — so the SAME authority answers +/// how many choices exist and which targets each admits. That builder routes this filter +/// shape to the native authority [`crate::game::targeting::find_legal_targets`] (via +/// `ability_utils::legal_targets_for_ability_filter_uncapped`'s `relative_kind.is_none()` +/// / `!needs_ability_context` arm), whose empty-`Typed` players branch already excludes +/// departed seats — CR 800.4 (multiplayer games continue after players leave) + CR 102.1 +/// (a player is one of the people in the game): a seat that has left the game is no longer +/// one of them, so it is not choosable by anything; player phasing per the CR 702.26b +/// MIRROR (permanent-phasing text, NEVER authority for players). NOT CR 800.4a, which +/// governs a departed player's objects, control effects and priority — not the legality of +/// a choice. Never a declaration, so the offer still cannot ratify its own pin. Note the +/// enumeration context +/// shifts with the authority: it is now the ABILITY's own `controller`/`source_id` +/// (CR 601.2c — the ability's controller announces its targets) rather than the offer's +/// `proposer` and the stack entry's `source_id`. +/// +/// Fail-closed: an entry whose source object is gone yields NO point (rather than a point +/// with an unbindable slot), so the schema can only ever under-publish. +/// +/// Class served: every proposer-controlled triggered ability on the stack whose declared +/// target is a player — never a named card. Command-zone sources (CR 114.2 emblems) are +/// included; [`slot_source_prompted`] is the matching half at replay time. +/// +/// PER SOURCE, NOT PER ENTRY: N stack entries from ONE source mint N byte-identical +/// `DecisionSlot`s (real boards reach 35 entries on one source), and the sub-index +/// disambiguates choices WITHIN an ability instance, not instances of it +/// ([`crate::analysis::decision_template::DecisionSlot`]'s own doc). Publishing the same +/// slot N times would make the frontend render N identical pickers and +/// `predictability_gate` demand N pins for a choice [`inject_pinned_answer`] answers ONCE +/// per source (its `find_map` matches on the slot's SOURCE and is index-blind). So the +/// offer publishes the SET of open choices; one state-independent pin ("always target +/// P1") specifies every instance of it. +/// +/// VISIBILITY: the `#[cfg(any(test, feature = "test-support"))]` gate this shipped behind +/// has LIFTED, exactly as its own note said it would — [`try_offer_bounded_cycle_shortcut`] +/// is the production caller the gate was waiting for. It stays `pub` because the +/// integration suite that pins its behaviour links the library. +pub fn bounded_cycle_pin_slots( + state: &GameState, + proposer: PlayerId, +) -> Vec { + // The DEGENERATE one-frame case of the window enumerator: with no window frame there is + // no transition to observe, so `certified_period_touch`'s `window.is_empty()` branch seeds + // `announced` from `state.stack` — same authority, same set, same order, same dedup, hence + // byte-identical to the snapshot mint this used to be. The alias holds NO certificate, so + // it passes `ResourceSignatureOnly`: the type is never allowed to claim one its caller + // does not hold (and the empty-window branch yields `frozen_ids: ∅` on any value). + bounded_cycle_pin_slots_for_window( + &crate::analysis::resource::certified_period_touch( + &[], + state, + crate::analysis::resource::PeriodCertification::ResourceSignatureOnly, + ), + proposer, + ) +} + +/// CR 732.2a: the per-iteration choice slots ONE CERTIFIED PERIOD publishes for `proposer`. +/// +/// Maps the single authority [`entry_publishes_pin_slots`] over `touch.announced`, with the +/// same per-slot dedup [`bounded_cycle_pin_slots`] applies — each pair evaluated against ITS +/// OWN carrying frame, which is the ring sample's LIVE half and never a `normalize_for_loop` +/// product: a normalized frame would key the stored-auto-choice refusal on `ObjectId(0)` and +/// would make `build_target_slots` take its `trigger_source: None` fall-through and publish a +/// WIDER legal set than the live board admits. +/// +/// It calls the RAW mint rather than the verdict door on purpose: routing it through the door +/// would eagerly classify (and charge for) every announced pair at slot-enumeration time, +/// which is exactly the pre-population pass this design removes. The relief side reads the +/// CACHED mint through the door instead. +pub(crate) fn bounded_cycle_pin_slots_for_window( + touch: &crate::analysis::resource::PeriodTouch<'_>, + proposer: PlayerId, +) -> Vec { + use crate::analysis::decision_template::{DecisionPoint, DecisionPointKind}; + let mut points: Vec = Vec::new(); + for (frame, entry) in &touch.announced { + let Some(pins) = entry_publishes_pin_slots(frame, entry, proposer) else { + continue; + }; + // CR 601.2c: a `Targets` point only when the entry actually announces a choice. + // Shape (B) publishes `target: None` — announcing it surfaces no target at all — + // so a `min_targets: 1` point would over-state the sequence CR 732.2a describes. + if let Some(target) = pins.target.filter(|t| !points.iter().any(|p| &p.slot == t)) { + points.push(DecisionPoint { + slot: target, + kind: DecisionPointKind::Targets { + // VERBATIM the slot `ability_utils::build_target_slots` built for this + // announcement — not a second derivation. That is what makes WHICH + // choice is published and HOW MANY choices are published the same + // authority's answers, so they cannot disagree. + legal_targets: pins.legal_targets, + // Exactly one, and that cannot contradict the ANNOUNCEMENT: the + // acceptance test admits an entry only when + // `ability_utils::build_target_slots` — the authority that decides how + // many choices announcing it actually requires (CR 601.2c via + // CR 603.3d) — yields exactly one MANDATORY slot. An ability-fact + // check alone (`multi_target` / CR 601.2d division) does NOT bound + // the slot count: a chained sub-ability's own "target" is a second + // instance of the word and a second slot. + min_targets: 1, + max_targets: 1, + ordered: false, + }, + }); + } + // CR 603.5: "the choice is made when the ability resolves" — a "may" gate on the + // same source is a SECOND per-iteration choice, published so the declaration must + // pin it too. + if let Some(may) = pins.may { + if !points.iter().any(|p| p.slot == may) { + points.push(DecisionPoint { + slot: may, + kind: DecisionPointKind::MayChoice, + }); + } + } + } + points } /// CR 732.2a: assemble a loop-shortcut offer's READ-side schema from its already-reified @@ -1811,8 +2829,8 @@ fn pinned_decisions_to_points( /// `iteration_count` and `max_iterations` are separate inputs on purpose: the first is the /// SUGGESTION the frontend seeds its picker with, the second is the LEGAL CEILING the /// declared-count check enforces. A producer that cannot compute a real bound passes -/// `MAX_SHORTCUT_CYCLES`, which is what every offer built today does — so the ceiling is -/// inert until a producer narrows it. +/// `MAX_SHORTCUT_CYCLES`. The bounded-cycle producer narrows it; the drain and object-growth +/// producers do not — so the ceiling is live for bounded offers only. fn build_shortcut_schema( points: Vec, iteration_count: crate::analysis::decision_template::IterationCount, @@ -1896,6 +2914,19 @@ fn apply_confirmed_shortcut( || proposal .predicted_winner .is_some_and(|winner| !crate::game::players::is_alive(state, winner)) + // CR 732.2a + CR 603.5: `template.owner` decides WHOSE CR 603.5 choice a pin may + // answer (the drive's seat guard in `inject_pinned_answer`). The two live ingresses + // bind it at declare; a RESTORED `WaitingFor::RespondToShortcut` is plain serde and + // the untrusted-restore scrubber rewrites only the two PRE-CAST waits, so it never + // ran that firewall. Re-validate the SAME invariant at the one point every drive + // passes through, so the seat guard is meaningful on every ingress and not only the + // two live ones. Refusing (rather than forcing `owner = proposer`) keeps the + // fail-closed direction every other conjunct at this seam uses: forcing would make a + // tampered proposal runnable under a rewritten owner. + || proposal + .template + .as_ref() + .is_some_and(|t| t.owner != proposal.proposer) { priority::reset_priority(state); // CR 800.4a: priority passes to the next player in turn order still in the game. @@ -1989,8 +3020,19 @@ fn apply_until_lethal_shortcut( let cap = auto_pass_loop_max_iterations(&committed); let mut running = committed.clone(); for i in 0..period { - match drive_one_shortcut_cycle(&running, &boundary, proposal.template.as_ref(), i, cap) - { + // The SAME single authority the `Fixed(N)` drive reads. Unreachably `Some` today — + // `handle_declare_shortcut` rejects `UntilLethal` against a bounded offer, and the + // bounded producer is the only one that publishes a signature — so this is + // behaviour-identical to the former no-delimiter call; it is threaded so the two + // drives cannot drift apart on what delimits a cycle. + match drive_one_shortcut_cycle( + &running, + &boundary, + proposal.template.as_ref(), + i, + cap, + proposal.per_cycle.as_ref().map(|pd| pd.frames_per_period), + ) { CycleOutcome::Recurred { state: s, .. } => running = *s, CycleOutcome::CrossLethal { state: s, @@ -2169,6 +3211,42 @@ fn shortcut_drive_period( .clamp(1, MAX_SHORTCUT_CYCLES) } +/// CR 732.2a: the index range the declare-time firewall must validate a pin over — the range +/// the ACCEPTED COUNT will actually drive, read off the two drive loops themselves: +/// `materialize_fixed_shortcut` drives `for i in 0..n` for a `Fixed(n)`, and +/// `apply_until_lethal_shortcut` drives whole periods for `UntilLethal`, whose length is +/// [`shortcut_drive_period`]. +/// +/// THIS IS NOT `shortcut_drive_period`, and the difference is the whole point of the fix. +/// That helper answers "how many cycles must one measurement aggregate" — a schedule property +/// with nothing to do with the declared count. Validating over it both ACCEPTED a pin whose +/// driven image leaves the offer's PUBLISHED legal set at an index the count reaches, and +/// REFUSED conforming declarations whose count is shorter than the schedule. +/// +/// NO CONSERVATIVE PADDING. Widening the range with `.max(shortcut_drive_period(..))` is +/// bug-preserving — it re-imports the schedule-derived period the invariant exists to remove, +/// and at a count of 1 over a length-2 rotation `Ok` is the CORRECT answer. Do not re-derive +/// and re-add that term. +/// +/// PRECONDITION, discharged at its call site: the count is already cap-checked, because +/// `handle_declare_shortcut` runs the `MAX_SHORTCUT_CYCLES` / `max_iterations` match ABOVE +/// the pin-validation block. Without that ordering a hostile `Fixed(4e9)` would become a +/// four-billion-iteration validation loop. Exactly ONE call site consumes this helper. +/// +/// Exhaustive over `IterationCount` with no wildcard, so a future variant build-breaks here +/// and forces a range decision instead of silently inheriting one. +fn shortcut_validated_range( + count: &crate::analysis::decision_template::IterationCount, + template: Option<&crate::analysis::decision_template::DecisionTemplate>, +) -> crate::analysis::decision_template::IterationIndex { + match count { + crate::analysis::decision_template::IterationCount::Fixed(n) => *n, + crate::analysis::decision_template::IterationCount::UntilLethal => { + shortcut_drive_period(template) + } + } +} + /// PR-7 Combo-UI Stage 2: the typed result of driving ONE whole loop-shortcut cycle on a /// clone. Exhaustive at both call sites (`materialize_fixed_shortcut`, `apply_until_lethal_ /// shortcut`) — no silent `_` that could crown or roll back on an unhandled outcome. @@ -2199,12 +3277,35 @@ enum CycleOutcome { /// Uses the INTERNAL `apply_action` path throughout (via `pass_priority_once_with_pipeline` /// and the injector), never the top-level reconcile boundary, so the detection hook cannot /// recurse mid-drive. +/// +/// # Two cycle delimiters, and why the second one exists +/// +/// `frames_per_period` is the published [`crate::analysis::resource::PeriodicDelta`] span, or +/// `None` for every offer whose producer states no per-period signature. When it is `Some(k)`, +/// a cycle ALSO completes once `k` retained ring frames have been recorded since the cycle +/// began. +/// +/// Board recurrence alone is not a delimiter for the class +/// [`try_offer_bounded_cycle_shortcut`] mints on certification basis **B**: that basis consults +/// no board predicate at all — it certifies a periodic *delta* over a ring window — so +/// `loop_states_equal_modulo_resources` and `loop_states_cover_modulo_growth` are both FALSE at +/// every settle beat by construction. Without the frame delimiter such a drive can only end at +/// the beat cap (`Abort`, committing zero cycles) or by crossing lethal, and the declared `n` +/// is inert: `Fixed(1)` and `Fixed(3)` produce byte-identical boards. +/// +/// The frame count is the same quantity `frames_per_period` names, measured the same way: the +/// single `record_loop_detect_sample` call site lives in `pass_priority_once_with_pipeline`, +/// which is the very function this loop steps, so a driven beat samples the ring under exactly +/// the gates an observed beat does. A new frame is detected by `Arc` identity of the ring's +/// back rather than by length, because the ring evicts at `LOOP_DETECT_RING_CAP` and a length +/// delta reads 0 once it is full. fn drive_one_shortcut_cycle( committed: &GameState, boundary: &GameState, template: Option<&crate::analysis::decision_template::DecisionTemplate>, iteration: crate::analysis::decision_template::IterationIndex, cycle_beat_cap: usize, + frames_per_period: Option, ) -> CycleOutcome { let mut work = committed.clone(); priority::reset_priority(&mut work); @@ -2213,12 +3314,14 @@ fn drive_one_shortcut_cycle( }; let mut ev: Vec = Vec::new(); let mut beat = 0usize; + let mut frames_this_cycle = 0u32; loop { beat += 1; if beat > cycle_beat_cap { return CycleOutcome::Abort; // runaway backstop } + let ring_back_before = work.loop_detect_ring.back().map(std::sync::Arc::as_ptr); // A FRESH per-beat buffer (see the former inline note): reusing one growing buffer // would make `run_post_action_pipeline` re-scan prior beats' events and re-fire // already-consumed triggers. @@ -2235,12 +3338,20 @@ fn drive_one_shortcut_cycle( }; } // Active-player settle beat: cycle complete iff the board recurred (constant-depth - // equal-modulo-resources OR ω-covering growth). + // equal-modulo-resources OR ω-covering growth) or the published period's worth of + // ring frames has elapsed. This is the ONLY beat kind the ring samples at (the + // sampler's own gate is `Priority{player == active_player}`), so the frame counter + // is advanced here and nowhere else. Ok(WaitingFor::Priority { player }) if player == work.active_player => { ev.append(&mut beat_events); + let ring_back_after = work.loop_detect_ring.back().map(std::sync::Arc::as_ptr); + if ring_back_after.is_some() && ring_back_after != ring_back_before { + frames_this_cycle += 1; + } let norm = work.normalize_for_loop(); if crate::analysis::resource::loop_states_equal_modulo_resources(boundary, &norm) || crate::analysis::resource::loop_states_cover_modulo_growth(boundary, &norm) + || frames_per_period.is_some_and(|k| frames_this_cycle >= k) { return CycleOutcome::Recurred { state: Box::new(work), @@ -2276,15 +3387,17 @@ fn drive_one_shortcut_cycle( /// There is deliberately NO top-level `template.ok_or(...)` guard: the `OrderTriggers` arm is /// TEMPLATE-INDEPENDENT (the real 2p Vito drive raises OrderTriggers with a `template = None` /// declaration, and the forced-unique target auto-selects at dispatch), so a top guard would -/// wrongly abort it. The template guard lives INSIDE the `TriggerTargetSelection` arm, the only -/// arm that consumes pins. +/// wrongly abort it. Each pin-consuming arm therefore carries its own guard: the +/// `TriggerTargetSelection` arm is the only arm that consumes a CR 608.2b `Targets` pin, and the +/// `OptionalEffectChoice` arm consumes the CR 603.5 `MayChoice` pin and carries its own seat + +/// beat guards on top of the same `template.ok_or(..)`. fn inject_pinned_answer( work: &mut GameState, template: Option<&crate::analysis::decision_template::DecisionTemplate>, iteration: crate::analysis::decision_template::IterationIndex, prompt: &WaitingFor, ) -> Result<(), RecastAbort> { - use crate::analysis::decision_template::{ConcreteDecision, ConcreteTarget}; + use crate::analysis::decision_template::{ConcreteDecision, ConcreteTarget, MayChoiceOption}; match prompt { // CR 603.3b / CR 732.2a: auto-order the confirmed shortcut's simultaneous // same-controller triggers by identity order (0..len). Template-INDEPENDENT and @@ -2314,10 +3427,7 @@ fn inject_pinned_answer( .into_iter() .find_map(|d| match d { ConcreteDecision::Targets { slot, targets } - if crate::analysis::decision_template::resolve_source( - &slot.source, - work, - ) == Some(source_id) => + if slot_source_prompted(work, &slot.source, source_id) => { Some(targets) } @@ -2340,15 +3450,111 @@ fn inject_pinned_answer( .map_err(|_| RecastAbort)?; Ok(()) } - // CR 732.2a "no conditional actions": any other prompt (mode / may / unless / X) has - // no Stage-2 pin producer ⇒ fail-closed. + // CR 603.5 + CR 732.2a: answer an in-cycle "may" from the pin its owner declared. + // + // The recipient is read OFF THE PROMPT, which is the only TOTAL instrument: + // `WaitingFor::OptionalEffectChoice` has five production producers and exactly one + // consults `effects::optional_prompt_player`, so the mint's recipient conjunct is a + // PREDICTION over one of five producers while this comparison is an OBSERVATION of + // the prompt in hand. Precondition (c) of the pin extension point — "only the acting + // player's own choices are pinnable" (`analysis::resource`) — is what it enforces. + // + // `template.owner` is only a legitimate comparand because `handle_declare_shortcut` + // firewalls it to the engine-issued `LoopShortcutOffer.proposer` at declare (and + // `apply_confirmed_shortcut` re-validates the same invariant for the restore ingress, + // which never runs the declare handler). Without those two, this test compares an + // attacker-chosen value against itself. + WaitingFor::OptionalEffectChoice { + player, source_id, .. + } => { + let template = template.ok_or(RecastAbort)?; + if *player != template.owner { + return Err(RecastAbort); + } + // CR 603.5 vs CR 603.3c + CR 700.2b: pin the BEAT as well as the seat. A + // `MayChoice` pin binds the RESOLUTION-time question (CR 603.5). While a trigger + // is still mid-construction the engine asks a same-`source_id` + // ANNOUNCEMENT-time one instead — the optional-modal gate raised out of + // `begin_pending_trigger_target_selection`, which runs with the construction + // cursor (`pending_trigger`) still live. `slot_source_prompted` cannot separate + // them: it matches the SOURCE OBJECT and both prompts carry it. So a live cursor + // means the prompt in hand may be the announcement-time question the pin does not + // answer ⇒ fail-closed. + if work.pending_trigger.is_some() { + return Err(RecastAbort); + } + let decisions = crate::analysis::decision_template::resolve(template, iteration, work) + .map_err(|_| RecastAbort)?; + let take = decisions + .into_iter() + .find_map(|d| match d { + ConcreteDecision::MayChoice { slot, take } + if slot_source_prompted(work, &slot.source, *source_id) => + { + Some(take) + } + _ => None, + }) + .ok_or(RecastAbort)?; + apply_action( + work, + *player, + GameAction::DecideOptionalEffect { + accept: take == MayChoiceOption::Take, + }, + None, + ) + .map_err(|_| RecastAbort)?; + Ok(()) + } + // CR 732.2a "no conditional actions": any other prompt (mode / unless / X) has no + // Stage-2 pin producer ⇒ fail-closed. `may` left this list when the mint gained its + // `EntryPinSlots.may` producer and the arm above; the remainder is still unpinnable. _ => Err(RecastAbort), } } -/// PR-7 Phase 4b: CR 732.2a finite materialization of a confirmed `Fixed(N)` loop -/// shortcut. Drives `n` whole cycles of the constant-depth (or ω-covering) loop, -/// committing atomically per cycle. If a cycle crosses lethal, the win arrives +/// CR 608.2b + CR 114.2: does this SLOT's source identify the ability instance that raised +/// the prompt carrying `source_id`? +/// +/// [`crate::analysis::decision_template::resolve_source`] is deliberately BATTLEFIELD-ONLY, +/// and that filter IS the CR 608.2b (`docs/MagicCompRules.txt:2789`) legality re-check for +/// `ByIdentity` **target** pins — a pinned target that left the battlefield must stop +/// matching. It must not be widened. But a SLOT's source only identifies WHICH ability +/// instance prompts, and CR 114.2 (`:828`) puts a planeswalker EMBLEM — "both owned and +/// controlled by that player" — in the **command zone**, where it stays for the whole game +/// and raises its triggers from. So the command-zone disjunct lives HERE, at the caller, +/// scoped to object identity + the pinned CR 400.7 incarnation. +/// +/// Graveyard / exile / hand sources still fail ⇒ the caller aborts to manual play. +fn slot_source_prompted( + state: &GameState, + src: &crate::analysis::decision_template::DecisionSource, + source_id: ObjectId, +) -> bool { + if crate::analysis::decision_template::resolve_source(src, state) == Some(source_id) { + return true; + } + // CR 114.2: the command-zone arm. `AllCopies` is card-identity matching and an emblem + // has no card, so only `ThisObject` participates. + let crate::types::game_state::YieldTarget::ThisObject { + source_id: pinned_id, + incarnation, + .. + } = src + else { + return false; + }; + *pinned_id == source_id + && state.objects.get(pinned_id).is_some_and(|o| { + o.zone == crate::types::zones::Zone::Command + && (incarnation.is_none() || *incarnation == Some(o.incarnation)) + }) +} + +/// PR-7 Phase 4b: CR 732.2a finite materialization of a confirmed `Fixed(N)` loop +/// shortcut. Drives `n` whole cycles of the constant-depth (or ω-covering) loop, +/// committing atomically per cycle. If a cycle crosses lethal, the win arrives /// mid-drive already applied to `work` (CR 704.5a via `run_post_action_pipeline`'s /// SBA pass) ⇒ COMMIT + STOP, un-clamped — `n` may be ≥ the true cycles-to-lethal /// (CR 732.2a "a specified number of times" places no upper bound relative to the @@ -2429,6 +3635,11 @@ fn materialize_fixed_shortcut( } let template = proposal.template.clone(); + // CR 732.2a: the per-period signature the offer published, carried verbatim onto the + // proposal. `None` for every producer that states none, and that `None` is what keeps + // every pre-bounded offer's drive byte-identical: no frame delimiter, no conformance + // check, board recurrence alone — exactly the shipped behavior. + let per_cycle = proposal.per_cycle.as_ref(); // Last fully-completed cycle (clean owned O(1) rollback); starts at the offer state — // `apply_confirmed_shortcut`'s doc comment establishes the board is unchanged since the @@ -2480,12 +3691,35 @@ fn materialize_fixed_shortcut( // inline beat loop for a non-targeted `Fixed(N)` drain (which raises no mid-cycle // prompt, so the injector is inert); a targeted drive additionally answers each // OrderTriggers / target prompt from the pins. - match drive_one_shortcut_cycle(&committed, &boundary, template.as_ref(), i, cycle_beat_cap) - { + match drive_one_shortcut_cycle( + &committed, + &boundary, + template.as_ref(), + i, + cycle_beat_cap, + per_cycle.map(|pd| pd.frames_per_period), + ) { CycleOutcome::Recurred { state: s, mut events, } => { + // CR 732.2a "predictable results" + CR 704.5a: the CONFORMANCE CHECK the + // published signature exists for. `elimination_bounds` divided the CR 704 + // headroom by `per_cycle.delta`, so a committed cycle that moved a + // DIFFERENT amount invalidates the very bound the table agreed to — the + // remaining repetitions could carry a seat past a threshold inside the + // proposal. Measured before commit, on the same axes the bound reads, and + // fail-closed: a divergent cycle is dropped whole and the drive hands back + // to manual play with the last conforming cycle intact. + if let Some(pd) = per_cycle { + let actual = crate::analysis::resource::ResourceVector::delta( + &crate::analysis::resource::ResourceVector::snapshot(&committed), + &crate::analysis::resource::ResourceVector::snapshot(&s), + ); + if actual != pd.delta { + break 'cycles; + } + } committed = *s; // ATOMIC: commit state ... result.events.append(&mut events); // ... with its events together continue 'cycles; @@ -2505,6 +3739,25 @@ fn materialize_fixed_shortcut( } // Runaway cap / unpinned prompt / engine error ⇒ abort to manual. The aborting // cycle's events were already dropped (no partial-cycle event leak). + // + // ⚠ THE TWO LETHAL ARMS ARE ASYMMETRIC, and a future drive must learn that here + // rather than by accident. A cycle that takes EVERY remaining opponent to 0 at once + // reaches `WaitingFor::GameOver` and lands in the `CrossLethal` arm above: it + // COMMITS and the game ends. A cycle that takes ONE seat to 0 while >= 2 players + // survive raises no `GameOver` (CR 104.2a crowns nobody), the loop's shape changes + // under it as the drained seat leaves, no settle beat recurs, and it arrives HERE — + // THAT CYCLE rolls back whole while every PRIOR conforming cycle stays committed, + // `eliminated` is empty, priority is handed back. (It is not a whole-drive rollback: + // the `break` below falls through to `*state = committed`, which is the last WHOLE + // cycle, not the offer state.) Both are out of contract for a legitimately-derived + // bound (`elimination_bounds` reserves `life - 1` of CR 704.5a headroom, so a + // within-bound count crosses no threshold), so either arm means the published bound + // was wrong. The atomic per-cycle refusal is the designed property — NO HALF-APPLIED + // PERIOD, EVER — and it is why the out-of-contract cycle is dropped rather than + // materialized: its remaining repetitions were bounded by a delta the board stops + // moving the moment a drain target leaves the game. Rows: + // `bounded_fixed_drive_stops_at_the_first_lethal_cycle` (total wipe) and + // `bounded_fixed_drive_rolls_back_a_partial_crossing_cycle` (partial). CycleOutcome::Abort => break 'cycles, } } @@ -2661,7 +3914,7 @@ fn pinnable_mana_color( /// FIX-1 (CR 400.7): a live-object identity source for a pin — `ThisObject` bound to the object's /// CURRENT incarnation, so a re-entered permanent (new incarnation) stops matching and the loop is /// correctly re-detected rather than falsely replayed. `None` if the object is absent. -fn object_decision_source( +pub(crate) fn object_decision_source( state: &GameState, id: ObjectId, ) -> Option { @@ -3430,7 +4683,9 @@ fn try_offer_object_growth_shortcut( // times — it is materialized once as an unbounded axis — so it states no narrowed count // bound and keeps the global safety limit. let schema = build_shortcut_schema( - pinned_decisions_to_points(&schema_template.decisions, state, caster), + // CR 732.2a: an unresolvable pin WITHDRAWS the offer rather than publishing an + // undeclarable point — see `pinned_decisions_to_points`. + pinned_decisions_to_points(&schema_template.decisions, state, caster)?, shortcut_iteration_count(certificate.win_kind), MAX_SHORTCUT_CYCLES, ); @@ -3752,42 +5007,21 @@ fn handle_declare_shortcut( // any template the caller supplies is inert for the drive (the loop raises no target // prompt). This preserves the established `Fixed(N)` drain behavior (the resolve-firewall // materialize tests drive a synthetic pin against the empty drain schema). - if !offer.schema.points.is_empty() { - match &template { - Some(t) => { - let required: Vec = - offer.schema.points.iter().map(|p| p.slot.clone()).collect(); - let period = shortcut_drive_period(Some(t)); - if crate::analysis::decision_template::predictability_gate(t, &required).is_err() - || crate::analysis::decision_template::validate_pins( - offer.schema, - t, - period, - state, - ) - .is_err() - { - reject_shortcut_declaration(state, &mut result); - return Ok(result); - } - } - // CR 732.2a: a `template: None` declaration against a NON-EMPTY schema skips the - // validation above entirely — the pins the offer published are never checked. That - // is legitimate for exactly one drive shape: the object-growth route, which - // re-derives its template from `state.last_loop_action_sequence` (the same routing - // discriminant `materialize` dispatches on) and never reads `proposal.template`. - // With an EMPTY sequence there is nothing to re-derive from, so a pin-consuming - // drive would run with no pins at all — fail closed into the same manual-play - // handback the validation failure above uses. Both conjuncts are required: keying - // on `template.is_none()` alone breaks the shipped object-growth declarations. - None if state.last_loop_action_sequence.is_empty() => { - reject_shortcut_declaration(state, &mut result); - return Ok(result); - } - None => {} - } - } - // CR 732.2a SAFETY LIMIT (see MAX_SHORTCUT_CYCLES): reject an over-cap Fixed count at + // ⚠ ORDER IS LOAD-BEARING: the count cap runs BEFORE the pin validation below, because + // `shortcut_validated_range` derives the validated range FROM the declared count and so + // must not be handed an unchecked one — a `Fixed(4_000_000_000)` would otherwise become + // a four-billion-iteration validation loop. Observation-equivalence of the reorder is + // structural: all six refusal arms across the three blocks (this match, the CR 732.2a + + // CR 603.5 `template.owner` firewall between them, and the pin-validation block) land on + // the same single authority (`reject_shortcut_declaration`), and + // `handle_declare_shortcut` pushes NO events at all, so no row can observe which block + // refused first. + // IMPLEMENTATION BUDGET BOUND (see MAX_SHORTCUT_CYCLES) — deliberately NOT labelled as a + // CR 732.2a constraint: the rules place no ceiling on how many times a shortcut may be + // repeated (CR 732.2a's own example runs to a million), so this ceiling is ours, not the + // game's. The label matters because a maintainer applying the CR 732.2a iff to a branch + // that wears a CR number will either trust it wrongly or delete it wrongly. Reject an + // over-cap Fixed count at // the single authority — BEFORE the proposal is built — into the same fail-closed // manual-play handback the pin validation above uses. This is THE catastrophic remote // vector: `Fixed(u32)` scalar-encodes up to ~4.3e9 cycles in ~10 bytes, sailing through @@ -3821,7 +5055,7 @@ fn handle_declare_shortcut( // producer measured a CR 704 threshold inside the loop; running it "until lethal" // would run past that threshold. crate::analysis::decision_template::IterationCount::UntilLethal - if offer.schema.max_iterations < MAX_SHORTCUT_CYCLES => + if offer.schema.is_bounded() => { reject_shortcut_declaration(state, &mut result); return Ok(result); @@ -3831,6 +5065,67 @@ fn handle_declare_shortcut( crate::analysis::decision_template::IterationCount::Fixed(_) | crate::analysis::decision_template::IterationCount::UntilLethal => {} } + // CR 732.2a + CR 603.5: the declared template's `owner` is CLIENT-SUPPLIED — the + // `GameAction::DeclareShortcut { template }` payload arrives here verbatim — and it is + // the comparand `inject_pinned_answer` uses to decide WHOSE CR 603.5 choice a pin may + // answer. Bind it to the engine-issued seat here, at declare, or that seat guard + // compares an attacker-chosen value against itself. `offer.proposer` is engine state, + // copied from `WaitingFor::LoopShortcut { proposer }`. + // + // PLACEMENT IS LOAD-BEARING: this sits OUTSIDE the `!offer.schema.points.is_empty()` + // block below, so it is reached for every declaration regardless of schema emptiness — + // an empty-schema offer skips `predictability_gate` / `validate_pins` entirely and would + // otherwise reach the proposal with an unvalidated owner. It is the SIXTH sibling of the + // five refusal arms and lands on their single authority (`reject_shortcut_declaration`), + // so no row can observe which refusal fired first — the "sixth reject path added later" + // that authority's doc anticipates. Defence in depth for the RESTORE ingress (a persisted + // `WaitingFor::RespondToShortcut` never runs this handler) lives on + // `apply_confirmed_shortcut`'s consumption guard. + if template.as_ref().is_some_and(|t| t.owner != offer.proposer) { + reject_shortcut_declaration(state, &mut result); + return Ok(result); + } + if !offer.schema.points.is_empty() { + match &template { + Some(t) => { + let required: Vec = + offer.schema.points.iter().map(|p| p.slot.clone()).collect(); + // CR 732.2a: validate over the range the ACCEPTED COUNT will drive, not + // over the schedule's own period. `shortcut_drive_period` answers a + // different question (how many cycles one measurement must aggregate), and + // using it here both ACCEPTED a pin whose driven image leaves the published + // set at an index the count reaches, and REFUSED conforming declarations + // whose count is shorter than the schedule. + let validated_range = shortcut_validated_range(&count, Some(t)); + if crate::analysis::decision_template::predictability_gate(t, &required).is_err() + || crate::analysis::decision_template::validate_pins( + offer.schema, + t, + validated_range, + state, + ) + .is_err() + { + reject_shortcut_declaration(state, &mut result); + return Ok(result); + } + } + // CR 732.2a: a `template: None` declaration against a NON-EMPTY schema skips the + // validation above entirely — the pins the offer published are never checked. That + // is legitimate for exactly one drive shape: the object-growth route, which + // re-derives its template from `state.last_loop_action_sequence` (the same routing + // discriminant `materialize` dispatches on) and never reads `proposal.template`. + // With an EMPTY sequence there is nothing to re-derive from, so a pin-consuming + // drive would run with no pins at all — fail closed into the same manual-play + // handback the validation failure above uses. Both conjuncts are required: keying + // on `template.is_none()` alone breaks the shipped object-growth declarations. + None if state.last_loop_action_sequence.is_empty() => { + reject_shortcut_declaration(state, &mut result); + return Ok(result); + } + None => {} + } + } let proposal = crate::analysis::loop_check::ShortcutProposal { proposer: offer.proposer, predicted_winner: offer.predicted_winner, @@ -3838,6 +5133,9 @@ fn handle_declare_shortcut( unbounded: offer.certificate.unbounded.clone(), win_kind: offer.certificate.win_kind, template, + // CR 732.2a: the drive reads ONE authority for what a conformant cycle looks like — + // the confirmed certificate's own signature, copied, never re-derived. + per_cycle: offer.certificate.per_cycle.clone(), }; // CR 732.2b: living opponents in APNAP turn order, starting after the proposer. let opps: Vec = crate::game::players::apnap_order_from( @@ -12841,7 +14139,9 @@ mod stage2_injector_tests { let template = two_drainer_template(drainer_a, P1, drainer_b, P2); let cap = auto_pass_loop_max_iterations(&committed); - match drive_one_shortcut_cycle(&committed, &boundary, Some(&template), 0, cap) { + // `None`: this row is about the injector arm on a board-recurring targeted loop, so + // it drives under the same no-signature delimiter every pre-bounded offer uses. + match drive_one_shortcut_cycle(&committed, &boundary, Some(&template), 0, cap, None) { CycleOutcome::CrossLethal { winner, state, .. } => { assert_eq!( winner, @@ -12914,72 +14214,1780 @@ mod stage2_injector_tests { "RoundRobin(MAX+5) clamps to MAX_SHORTCUT_CYCLES" ); } -} -/// FIX-1 interruptibility (memory: combo-interruptibility-acceptance-criterion) — the Kilo loop's -/// CR 732.2a offer must FLIP off when the loop is defused. Driven from the REAL 4p dump through the -/// public `apply()` boundary (recording live), then the offer is re-derived at the private -/// `try_offer_object_growth_shortcut` seam (the plan's sanctioned private-fn revert-probe form). -#[cfg(test)] -mod kilo_interruptibility_tests { - use super::*; - use crate::analysis::decision_template::{PinnedDecision, TargetPin}; - use crate::types::ability::TargetRef; - use crate::types::game_state::{ManaChoice, PayCostKind, YieldTarget}; - use crate::types::mana::{ManaColor, ManaType}; + /// Place a bare object in `zone` without touching the zone vectors — enough for the + /// identity/zone predicates under test, which read `state.objects` only. + fn place(state: &mut GameState, id: u64, zone: crate::types::zones::Zone) -> ObjectId { + let oid = ObjectId(id); + let mut o = crate::game::game_object::GameObject::new( + oid, + CardId(0), + P0, + "Emblem".to_string(), + zone, + ); + o.incarnation = 3; + state.objects.insert(oid, o); + oid + } - const P0: PlayerId = PlayerId(0); - const KILO: ObjectId = ObjectId(402); - const FREED: ObjectId = ObjectId(403); - const RELIC: ObjectId = ObjectId(404); - const PENTAD: ObjectId = ObjectId(405); - const RELIC_TAP_MANA: usize = 1; - const FREED_UNTAP: usize = 1; + /// CR 114.2 + CR 608.2b: a pinned SLOT whose source is a command-zone emblem must match + /// the prompt that emblem raised; a graveyard or exile source must NOT. + /// + /// This is the zone predicate `inject_pinned_answer`'s `TriggerTargetSelection` arm + /// dispatches on. Its production drive lands with the bounded offer in a later commit, + /// so it is pinned here at the seam — the shipped BATTLEFIELD arm is exercised + /// end-to-end by `injector_routes_pinned_targets_per_source` above and by the + /// `kilo_live_offer_from_real_dump` rows, and this row asserts that arm is unchanged. + /// + /// REVERT-PROBES: (a) delete the command-zone disjunct in `slot_source_prompted` ⇒ the + /// Command assertion FAILS (and `inject_pinned_answer` would `RecastAbort` on an + /// emblem-pinned drive); (b) widen the disjunct to accept any zone ⇒ the graveyard and + /// exile assertions FAIL; (c) drop the incarnation conjunct ⇒ the CR 400.7 assertion + /// FAILS. + #[test] + fn command_zone_sourced_slot_matches_and_graveyard_still_aborts() { + use crate::types::zones::Zone; + let mut state = GameScenario::new_n_player(2, 7).build().state().clone(); + let battlefield = place(&mut state, 900, Zone::Battlefield); + let emblem = place(&mut state, 901, Zone::Command); + let graveyard = place(&mut state, 902, Zone::Graveyard); + let exiled = place(&mut state, 903, Zone::Exile); + + let pin = |id: ObjectId, inc: Option| YieldTarget::ThisObject { + source_id: id, + incarnation: inc, + trigger_description: None, + }; - fn load_migrated_dump() -> GameState { + // Shipped behaviour, unchanged: the battlefield arm still matches. + assert!( + slot_source_prompted(&state, &pin(battlefield, Some(3)), battlefield), + "the shipped CR 608.2b battlefield arm must be untouched" + ); + // NEW: CR 114.2 — an emblem lives in the command zone and prompts from there. + assert!( + slot_source_prompted(&state, &pin(emblem, Some(3)), emblem), + "CR 114.2: a command-zone emblem's slot must match the prompt it raised" + ); + // Fail-closed: every other off-battlefield zone still misses ⇒ `RecastAbort`. + assert!( + !slot_source_prompted(&state, &pin(graveyard, Some(3)), graveyard), + "a graveyard-sourced slot must NOT match — the drive aborts to manual" + ); + assert!( + !slot_source_prompted(&state, &pin(exiled, Some(3)), exiled), + "an exile-sourced slot must NOT match" + ); + // CR 400.7: the command arm re-binds ONE incarnation, exactly like the + // battlefield arm — a re-created emblem does not answer the old pin. + assert!( + !slot_source_prompted(&state, &pin(emblem, Some(2)), emblem), + "CR 400.7: a stale incarnation must not match even in the command zone" + ); + // A pin naming a DIFFERENT object never answers this prompt. + assert!( + !slot_source_prompted(&state, &pin(emblem, Some(3)), battlefield), + "the matcher is keyed on identity, not merely on zone" + ); + } + + /// CR 732.2a + CR 603.5: `bounded_cycle_pin_slots` publishes the per-iteration TARGET + /// choice for a proposer-controlled player-targeting trigger, plus a second `MayChoice` + /// point (disambiguated by `slot.index`) when that trigger is optional. + /// + /// MATCHED PAIRS, one variable each: + /// * `optional` false ⇒ 1 point; true ⇒ 2 points. REVERT-PROBE: delete the `optional` + /// branch ⇒ the 2-point assertion FAILS. + /// * controller == proposer ⇒ published; a bystander proposer gets nothing. + /// REVERT-PROBE: delete the `entry.controller != proposer` filter ⇒ the bystander + /// assertion FAILS. + #[test] + fn bounded_cycle_pin_slots_publishes_the_may_gate_of_an_optional_trigger() { + use crate::analysis::decision_template::{DecisionPointKind, DecisionSlot}; + use crate::types::ability::{ + ControllerRef, Effect, QuantityExpr, ResolvedAbility, TargetFilter, TypedFilter, + }; + + let mut state = GameScenario::new_n_player(3, 7).build().state().clone(); + let src = place(&mut state, 910, crate::types::zones::Zone::Battlefield); + + let entry = |id: u64, controller: PlayerId, optional: bool| { + let mut ability = ResolvedAbility::new( + Effect::LoseLife { + amount: QuantityExpr::Fixed { value: 1 }, + target: Some(TargetFilter::Typed(TypedFilter { + type_filters: vec![], + controller: Some(ControllerRef::Opponent), + properties: vec![], + })), + }, + vec![], + src, + controller, + ); + ability.optional = optional; + StackEntry { + id: ObjectId(id), + source_id: src, + controller, + kind: StackEntryKind::TriggeredAbility { + source_id: src, + ability: Box::new(ability), + condition: None, + trigger_event: None, + description: None, + source_name: String::new(), + subject_match_count: None, + die_result: None, + }, + } + }; + let live_source = + object_decision_source(&state, src).expect("the source is on the battlefield"); + let expected_slot = |index: u8| DecisionSlot { + source: live_source.clone(), + index, + }; + + // Mandatory: exactly one point, the target choice. + state.stack.push_back(entry(920, P0, false)); + let mandatory = bounded_cycle_pin_slots(&state, P0); + assert_eq!( + mandatory.len(), + 1, + "a mandatory trigger publishes one point" + ); + assert_eq!(mandatory[0].slot, expected_slot(0)); + assert!( + matches!( + &mandatory[0].kind, + DecisionPointKind::Targets { legal_targets, .. } + if *legal_targets == vec![TargetRef::Player(P1), TargetRef::Player(P2)] + ), + "the legal set comes from `find_legal_targets`, not from a declaration: {:?}", + mandatory[0].kind + ); + + // Bystander proposer: the same board publishes nothing for a seat that controls + // none of the entries (CR 732.2a — the proposer specifies their OWN choices). + assert!( + bounded_cycle_pin_slots(&state, P1).is_empty(), + "a bystander proposer controls none of these choices" + ); + + // Optional: the SAME entry with one field flipped publishes the CR 603.5 gate too. + state.stack.clear(); + state.stack.push_back(entry(921, P0, true)); + let optional = bounded_cycle_pin_slots(&state, P0); + assert_eq!( + optional.len(), + 2, + "an optional trigger publishes two points" + ); + assert_eq!( + optional[1].slot, + expected_slot(1), + "`slot.index` disambiguates" + ); + assert_eq!(optional[1].kind, DecisionPointKind::MayChoice); + + // Fail-closed: no source object ⇒ no point (never a slot that cannot re-bind). + state.objects.remove(&src); + assert!( + bounded_cycle_pin_slots(&state, P0).is_empty(), + "an absent source emits nothing rather than an unbindable slot" + ); + } + + /// Each of [`declares_opponent_player_target`]'s three conjuncts, discriminated + /// SEPARATELY. The gross "accept any `Typed`" widening is caught by the row above; this + /// row is what fails when ONE conjunct is dropped. + /// + /// Why each matters: `find_legal_targets` collapses a `Typed` filter to PLAYERS ONLY + /// when both `type_filters` and `properties` are empty (`targeting.rs:192-193`, issue + /// #2004). A type- or property-bearing filter therefore falls through to OBJECT + /// enumeration — publishing it would put a point whose legal set is object refs into + /// player-pin machinery. `controller: You` does collapse to players, but to exactly ONE + /// (the controller), which is not the per-opponent choice a bounded drain cycle pins. + /// + /// THE BOARD IS LOAD-BEARING, and picking the wrong one is what hollows this row out. + /// On a head-announced board an object-shaped filter enumerates NOTHING, so + /// `build_target_slots` returns `Err` and the caller's CARDINALITY conjunct rejects + /// first — measured: with both arms on that board, dropping `type_filters.is_empty()` or + /// `properties.is_empty()` left the row GREEN. Those two arms therefore run on the + /// MIRROR shape, the one thing they alone reject: an object-shaped head at + /// `TargetChoiceTiming::Resolution` (announces nothing) chained to a `target opponent` + /// sub-ability (announces the one slot). Cardinality and all-`Player` both pass there. + /// The per-arm reach-guard asserts that announced slot verbatim, so a future change that + /// re-hollows an arm fails the reach-guard instead of passing silently. + /// + /// REVERT-PROBES (each measured on the boards below): drop `type_filters.is_empty()` ⇒ + /// ONLY the Creature arm publishes; drop `properties.is_empty()` ⇒ ONLY the Token arm; + /// drop `controller == Some(Opponent)` ⇒ ONLY the `You` arm. The accepted shape is + /// asserted to publish in the SAME row, so a constant-`false` predicate cannot pass. + #[test] + fn bounded_cycle_pin_slots_conjuncts_are_each_load_bearing() { + use crate::types::ability::{ + ControllerRef, Effect, FilterProp, QuantityExpr, ResolvedAbility, TargetChoiceTiming, + TargetFilter, TargetRef, TypeFilter, TypedFilter, + }; + + let mut base = GameScenario::new_n_player(3, 7).build().state().clone(); + let src = place(&mut base, 940, crate::types::zones::Zone::Battlefield); + + let board = |ability: ResolvedAbility| { + let mut state = base.clone(); + state.stack.push_back(StackEntry { + id: ObjectId(950), + source_id: src, + controller: P0, + kind: StackEntryKind::TriggeredAbility { + source_id: src, + ability: Box::new(ability), + condition: None, + trigger_event: None, + description: None, + source_name: String::new(), + subject_match_count: None, + die_result: None, + }, + }); + state + }; + let accepted = TypedFilter { + type_filters: vec![], + controller: Some(ControllerRef::Opponent), + properties: vec![], + }; + let head_only = |tf: TypedFilter| { + ResolvedAbility::new( + Effect::LoseLife { + amount: QuantityExpr::Fixed { value: 1 }, + target: Some(TargetFilter::Typed(tf)), + }, + vec![], + src, + P0, + ) + }; + // The head's own choice is made on resolution, so CR 601.2c is never reached for it + // and it announces no slot; the ONE announced slot is the chained sub-ability's + // `target opponent` player choice (CR 603.3d). Cardinality and all-`Player` pass + // whatever shape the head declares — which is what leaves the head-shape conjunct + // alone to reject. + let chained = |head: TypedFilter| { + let mut ability = head_only(head); + ability.target_choice_timing = TargetChoiceTiming::Resolution; + ability.sub_ability = Some(Box::new(head_only(accepted.clone()))); + ability + }; + + // POSITIVE CONTROL, same row: the accepted "target opponent" shape publishes. + assert_eq!( + bounded_cycle_pin_slots(&board(head_only(accepted.clone())), P0).len(), + 1, + "the accepted CR 115.2 player shape must publish — otherwise the three zeros \ + below are vacuous" + ); + + let opponents = vec![TargetRef::Player(P1), TargetRef::Player(P2)]; + // Collected, not asserted per-arm: a revert-probe must show which arms flipped, and + // a bare `assert!` in the loop would abort at the first and hide the rest. + let mut still_published: Vec<&str> = Vec::new(); + for (label, ability, announced) in [ + ( + "type_filters: a creature filter enumerates OBJECTS, not players", + chained(TypedFilter { + type_filters: vec![TypeFilter::Creature], + ..accepted.clone() + }), + opponents.clone(), + ), + ( + "properties: issue #2004 — `token` is an object characteristic", + chained(TypedFilter { + properties: vec![FilterProp::Token], + ..accepted.clone() + }), + opponents.clone(), + ), + ( + "controller: `You` is a single forced seat, not a per-opponent choice", + head_only(TypedFilter { + controller: Some(ControllerRef::You), + ..accepted.clone() + }), + vec![TargetRef::Player(P0)], + ), + ] { + let state = board(ability); + let announcement = crate::game::ability_utils::build_target_slots( + &state, + state.stack[0] + .ability() + .expect("the board pushes a trigger"), + ) + .map(|slots| { + slots + .iter() + .map(|slot| (slot.optional, slot.legal_targets.clone())) + .collect::>() + }) + .ok(); + assert_eq!( + announcement, + Some(vec![(false, announced)]), + "reach-guard [{label}]: exactly ONE mandatory slot and every candidate a \ + PLAYER — so the cardinality and all-`Player` conjuncts both PASS on this \ + board and the head-shape conjunct under test is the SOLE rejector" + ); + if !bounded_cycle_pin_slots(&state, P0).is_empty() { + still_published.push(label); + } + } + assert!( + still_published.is_empty(), + "each conjunct must reject its own arm ALONE; these arms published anyway: \ + {still_published:?}" + ); + + // ORDERING-INPUT CONJUNCTS. The published point declares `min/max_targets: 1`, and + // the gate-(3) relief is a bare `continue` that discharges the WHOLE of + // `stack_entry_has_no_ordering_input` (analysis/resource.rs) — which rejects on + // four facts, only one of which a slot answers. The three ABILITY facts must block + // publication outright (the state-dependent fourth, `pending_trigger_entry`, is the + // relief's, pinned by `a_pinned_slot_skips_gate_three_and_six`'s arm 5). Shares the + // positive control above. + { + use crate::types::ability::MultiTargetSpec; + use crate::types::game_state::TargetSelectionConstraint; + + fn ability_of(state: &mut GameState) -> &mut ResolvedAbility { + let StackEntryKind::TriggeredAbility { ability, .. } = &mut state.stack[0].kind + else { + unreachable!("the fixture board pushes a TriggeredAbility") + }; + ability.as_mut() + } + + type Mutate = fn(&mut GameState); + let ordering_input: [(&str, Mutate); 3] = [ + ("multi_target — CR 601.2c variable target count", |s| { + ability_of(s).multi_target = Some(MultiTargetSpec::fixed(1, 2)) + }), + ("distribution — CR 601.2d divide-among", |s| { + ability_of(s).distribution = Some(vec![(TargetRef::Player(P1), 1)]) + }), + ("target_constraints — CR 601.2c cross-target", |s| { + ability_of(s).target_constraints = + vec![TargetSelectionConstraint::DifferentTargetPlayers] + }), + ]; + for (label, mutate) in ordering_input { + let mut state = board(head_only(accepted.clone())); + mutate(&mut state); + assert!( + bounded_cycle_pin_slots(&state, P0).is_empty(), + "{label}: announcement-time ordering input NO published slot specifies \ + ⇒ the mint must not publish" + ); + } + } + } + + /// The real 4p acceptance board (dump B): a CR 114.2 emblem in the COMMAND zone + /// (obj 541, incarnation 0) whose triggered ability drains `target opponent`. + fn load_dellian_dump() -> GameState { use crate::types::game_state::PersistedGameState; use std::io::Read; - let gz: &[u8] = include_bytes!("../../tests/fixtures/kilo_freed_relic_pentad_4p.json.gz"); + let gz: &[u8] = include_bytes!("../../tests/fixtures/dellian_emblem_conqueror_4p.json.gz"); let mut json = String::new(); flate2::read::GzDecoder::new(gz) .read_to_string(&mut json) .expect("fixture inflates"); let envelope: serde_json::Value = serde_json::from_str(&json).expect("envelope parses"); - // Route through the REAL production restore chokepoint so the FIX-3 migration hook - // (`migrate_transient_loop_sequence`) drops the dump's 6 stale pinless steps on load — - // exactly as the integration helper does. Deserializing directly would bypass the hook, - // leaving the stale prefix so the live drive yields an 8-step (not 2-step) sequence. + // Cross the dump through the PRODUCTION decoder rather than a bare `GameState` + // decode wrapped in `Raw`: `PersistedGameState`'s own `Deserialize` runs + // `reject_legacy_raw_prompt_authority` and `decode_persisted_resolution_state` + // first, so this helper exercises the chokepoint the server's `from_persisted` + // and WASM's `decode_restored_game_state` actually funnel through — including + // the CR 732.2a load-seam bound invariant. + // `.expect(..)`, not `?`: `into_game_state` returns `GameState`, not `Result`. serde_json::from_value::(envelope["gameState"].clone()) - .expect("gameState restores through the persisted ingress") + .expect("gameState deserializes through the production decoder") .into_game_state() } - fn beat_actor(state: &GameState) -> PlayerId { - match &state.waiting_for { - WaitingFor::Priority { player } - | WaitingFor::PayCost { player, .. } - | WaitingFor::ChooseManaColor { player, .. } - | WaitingFor::ProliferateChoice { player, .. } => *player, - WaitingFor::LoopShortcut { proposer, .. } => *proposer, - other => panic!("unexpected beat: {other:?}"), - } + const EMBLEM: ObjectId = ObjectId(541); + + /// CR 601.2c + CR 115.1: the migrated fixture's `effect_kind` is not an assertion of + /// taste — it is exactly what the ANNOUNCEMENT AUTHORITY builds for this ability on + /// this board. `scripts/migrate-dump-fixture.sh` takes the value as an explicit + /// argument precisely so the engine, and never a jq name→variant table, stays the + /// authority for it; this row is what holds the script's operator to that. + /// + /// It is also the row that would have caught upstream #6718 (`0468df1f4`, which added + /// `TargetSelectionSlot::effect_kind` with no `#[serde(default)]`) the day it landed: + /// `TargetSelectionSlot` derives `PartialEq`/`Eq`, so this compares ALL five fields, + /// not just the migrated one. + /// + /// REVERT-PROBE: re-run the migration script with `--effect-kind NoOp` ⇒ the stamped + /// slot stops matching what `build_target_slots` derives ⇒ FAILS. This assertion is + /// the SOLE guard on the migrated value — nothing on the drive path reads the field + /// (its only production readers are the two `target_intent` calls in the interaction + /// DTO projection), so a wrong value cannot move the game and must be caught by a + /// reading test instead of by a behavioural one. + #[test] + fn dellian_dump_slots_are_what_the_announcement_authority_builds() { + let state = load_dellian_dump(); + let pt = state + .pending_trigger + .as_ref() + .expect("dellian dump pauses on a pending trigger"); + // `let … else` rather than `if let`: it fails LOUDLY if the dump ever restores + // into some other prompt, which would otherwise make the assertion unreachable + // rather than false. + let WaitingFor::TriggerTargetSelection { target_slots, .. } = &state.waiting_for else { + panic!( + "dellian dump must restore into TriggerTargetSelection, got {:?}", + state.waiting_for + ); + }; + // Reach-guard: an empty slot vector would satisfy a total-equality assertion + // vacuously on both sides. + assert_eq!( + target_slots.len(), + 1, + "the dellian dump publishes exactly one target slot" + ); + assert_eq!( + &crate::game::ability_utils::build_target_slots(&state, &pt.ability) + .expect("the emblem's drain ability builds its announcement slots"), + target_slots, + "the restored dump's slots must equal what the announcement authority builds" + ); } - /// Drive ONE full live cycle via the public boundary, recording the pinned period. - fn drive_one_live_cycle(state: &mut GameState) { - apply( - state, - P0, - GameAction::ActivateAbility { - source_id: RELIC, - ability_index: RELIC_TAP_MANA, - }, - ) - .expect("activate Relic mana ability"); - let mut freed_activated = false; - for _ in 0..200 { - let actor = beat_actor(state); - match state.waiting_for.clone() { + /// CR 732.2a: the offer publishes the SET of open per-iteration choices — one point per + /// SOURCE, not one per stack ENTRY. + /// + /// `DecisionSlot`'s sub-index disambiguates two choices of ONE ability instance, so N + /// entries from one source would mint N byte-identical slots: N identical frontend + /// pickers, and `predictability_gate` demanding N pins for a choice + /// `inject_pinned_answer` answers ONCE per source (its `find_map` matches on the slot's + /// SOURCE and is index-blind). Real boards reach this shape — this very dump carries 35 + /// entries on source 25, 34 on 126 and 34 on 208. + /// + /// Built on the LOADED 4p board plus ONE measured mutation: a byte-copy of the real + /// emblem entry under a fresh stack-entry id, which is exactly what a second loop + /// iteration puts there. + /// + /// REVERT-PROBE: drop either `points.iter().any(|p| p.slot == ..)` dedupe guard ⇒ the + /// two-entry board publishes 2 points ⇒ FAILS. + #[test] + fn bounded_cycle_pin_slots_publishes_one_point_per_source_not_per_entry() { + let mut state = load_dellian_dump(); + let emblem_entry = state + .stack + .iter() + .find(|e| e.source_id == EMBLEM) + .expect("reach-guard: the dump carries the emblem's trigger") + .clone(); + let single = bounded_cycle_pin_slots(&state, P0); + // Reach-guard, re-derived from the loaded board rather than from a literal: the + // mint qualifies FOUR sources here — the CR 115.2 emblem target (541) plus three + // shape-(B) CR 603.5 may-only sources (126, 208, 274). 126 and 208 carry 34 stack + // entries apiece, so the shipped board ALREADY exercises the dedupe: without it + // this count would be 69, not 4. + assert_eq!( + single.len(), + 4, + "reach-guard: the shipped board qualifies exactly four sources" + ); + assert_eq!( + single + .iter() + .filter(|p| matches!( + p.kind, + crate::analysis::decision_template::DecisionPointKind::Targets { .. } + )) + .count(), + 1, + "reach-guard: exactly one of them is the emblem's TARGETS point" + ); + + let mut second = emblem_entry; + second.id = ObjectId(9_001); + state.stack.push_back(second); + assert_eq!( + state.stack.iter().filter(|e| e.source_id == EMBLEM).count(), + 2, + "reach-guard: two live entries now share one source" + ); + + assert_eq!( + bounded_cycle_pin_slots(&state, P0), + single, + "a second entry from the SAME source is the same open choice — one published \ + point, byte-identical to the one-entry board's" + ); + } + + /// CR 114.2 + CR 608.2b, on a REAL restored 4p board: `inject_pinned_answer` accepts a + /// pin whose slot source is the COMMAND-zone emblem (obj 541) that raised the prompt. + /// + /// This is the production-path row for [`slot_source_prompted`]. The seam is live + /// TODAY: `inject_pinned_answer` calls it, and every pin-recording site builds its slot + /// source with the zone-agnostic `object_decision_source`, so a command-zone-sourced pin + /// already flips from `RecastAbort` (safe handback) to accepted injection. + /// + /// The dump ships AT that prompt (`TriggerTargetSelection { source_id: 541 }`), so no + /// synthetic placement is involved. + /// + /// REVERT-PROBES (each measured): delete the command-zone disjunct ⇒ the accept arm + /// raises `RecastAbort` ⇒ FAILS; drop the incarnation conjunct ⇒ the stale-pin arm is + /// accepted ⇒ FAILS. The negative arms are paired with a positive on the SAME board, so + /// neither an always-accept nor an always-abort matcher survives. + /// + /// R3 — CR 608.2b + CR 113.7a: this row is ALSO the witness that a pin's SEAT legality + /// does not depend on recovering the SOURCE's characteristics. The choice authority + /// `game::players::player_exists_for_choice` takes no source parameter at all, by + /// design: a command-zone emblem has no battlefield LKI to recover, and if seat + /// legality consulted the source, a pin raised by such a source would be invalidated + /// for a reason the rules do not state. The claim is STRUCTURAL — there is no source + /// parameter to revert — so what makes it checkable is the PAIR: this row proves a + /// source with no recoverable LKI still answers its prompt, and + /// `analysis::decision_template::tests::a_dead_player_pin_is_illegal`'s LIVE half + /// proves the seat check is nonetheless doing work on that same pin kind. (Contrast + /// `targeting::player_is_legal_target`, which DOES take a source — because targeting + /// exclusions are source-relative, CR 702.11c, and choice legality is not.) + #[test] + fn a_command_zone_pin_answers_a_real_restored_boards_prompt() { + let state = load_dellian_dump(); + + // ── reach guards, all read off the loaded board ── + let emblem = state + .objects + .get(&EMBLEM) + .expect("reach-guard: dump B carries the emblem object"); + assert_eq!( + emblem.zone, + crate::types::zones::Zone::Command, + "reach-guard: CR 114.2 puts the emblem in the command zone" + ); + let emblem_incarnation = emblem.incarnation; + let WaitingFor::TriggerTargetSelection { + source_id: Some(prompt_source), + .. + } = &state.waiting_for + else { + panic!( + "reach-guard: the dump ships at the emblem's target prompt; got {:?}", + state.waiting_for + ); + }; + assert_eq!( + *prompt_source, EMBLEM, + "reach-guard: it is the EMBLEM's prompt that is up" + ); + + let src = object_decision_source(&state, EMBLEM).expect("the emblem object exists"); + // The control that makes this row non-vacuous: the shipped battlefield-only + // `resolve_source` does NOT match this source, so an accept can only come from the + // CR 114.2 disjunct. + assert_eq!( + crate::analysis::decision_template::resolve_source(&src, &state), + None, + "CR 608.2b: `resolve_source` is battlefield-only and must stay so" + ); + + let template = |source: YieldTarget| DecisionTemplate { + owner: P0, + decisions: vec![PinnedDecision::Targets { + slot: DecisionSlot { + source: source.clone(), + index: 0, + }, + targets: vec![TargetPin::Player(P1)], + }], + replay: ReplayMode::Scheduled { + count: IterationCount::UntilLethal, + }, + key: DecisionGroupKey::from_sources(&[source], DecisionKind::LoopChoice), + }; + let prompt = state.waiting_for.clone(); + + // ── ACCEPT: the command-zone pin answers the prompt on the real board ── + let mut work = state.clone(); + inject_pinned_answer(&mut work, Some(&template(src.clone())), 0, &prompt) + .expect("CR 114.2: the emblem's own pin must answer the prompt it raised"); + assert_ne!( + work.waiting_for, prompt, + "the prompt was actually consumed, not silently skipped" + ); + assert!( + !matches!( + &work.waiting_for, + WaitingFor::TriggerTargetSelection { + source_id: Some(id), + .. + } if *id == EMBLEM + ), + "the emblem's target prompt is answered; got {:?}", + work.waiting_for + ); + + // ── CR 400.7: a pin latched to a stale incarnation must NOT answer it ── + let stale = YieldTarget::ThisObject { + source_id: EMBLEM, + incarnation: Some(emblem_incarnation + 1), + trigger_description: None, + }; + let mut stale_work = state.clone(); + assert!( + inject_pinned_answer(&mut stale_work, Some(&template(stale)), 0, &prompt).is_err(), + "CR 400.7: a stale-incarnation pin hands back to manual play" + ); + + // ── fail-closed: a pin naming a DIFFERENT object never answers this prompt ── + let other = state + .stack + .iter() + .map(|e| e.source_id) + .find(|id| *id != EMBLEM) + .expect("the 152-deep stack carries other sources"); + let other_src = object_decision_source(&state, other).expect("that source exists"); + let mut other_work = state.clone(); + assert!( + inject_pinned_answer(&mut other_work, Some(&template(other_src)), 0, &prompt).is_err(), + "a pin for another source does not answer the emblem's prompt" + ); + } + + // ───────────────────────── 5d U2 — the shape-(B) mint ───────────────────────── + + use crate::types::ability::ResolvedAbility; + + /// A 3-seat board plus one battlefield source object, shared by every U2 mint row so a + /// row's verdict cannot come from board differences. + fn u2_board() -> (GameState, ObjectId) { + let mut state = GameScenario::new_n_player(3, 7).build().state().clone(); + let src = place(&mut state, 930, crate::types::zones::Zone::Battlefield); + (state, src) + } + + /// A proposer-controlled OPTIONAL, NO-TARGET triggered ability — shape (B)'s own shape. + /// + /// `target_choice_timing: Resolution` is what makes it shape (B), and it is the class's + /// real rules shape rather than a test convenience: CR 601.2c announces only DECLARED + /// targets, so Braids, Conjurer Adept — "At the beginning of each player's upkeep, that + /// player may put an artifact, creature, or land card from their hand onto the + /// battlefield." (CR 503.1a + CR 608.2d; text verified against Scryfall) — chooses its + /// subject AT RESOLUTION and surfaces zero announcement slots. + /// + /// The `Effect::PutCounter` fixtures below are a SYNTHETIC STAND-IN, never Braids' + /// printed effect: they exercise the same CLASS (per-player-upkeep optional, + /// resolution-time subject, zero announcement slots) on an effect this mint's + /// allow-list admits. The recipient branch they ride is EFFECT-AGNOSTIC (see + /// `a_may_slot_is_minted_only_for_the_seat_the_cr_603_5_gate_will_ask`), which is what + /// makes the substitution sound rather than a convenience. Measured on `u2_board`: + /// `build_target_slots` returns `Ok(0)` for every fixture below (each row asserts the + /// consequence through its own matched positive), so each really reaches the shape-(B) + /// arm rather than falling out at an upstream conjunct. + fn shape_b(src: ObjectId, effect: crate::types::ability::Effect) -> ResolvedAbility { + let mut ability = ResolvedAbility::new(effect, vec![], src, P0); + ability.optional = true; + ability.target_choice_timing = crate::types::ability::TargetChoiceTiming::Resolution; + ability + } + + fn shape_b_entry(id: u64, src: ObjectId, ability: ResolvedAbility) -> StackEntry { + StackEntry { + id: ObjectId(id), + source_id: src, + controller: P0, + kind: StackEntryKind::TriggeredAbility { + source_id: src, + ability: Box::new(ability), + condition: None, + trigger_event: None, + description: None, + source_name: String::new(), + subject_match_count: None, + die_result: None, + }, + } + } + + /// `Effect::PutCounter` on a `ScopedPlayer`-scoped creature filter — inside D4.3's + /// six-arm scope filter, and the exact filter shape + /// `filter_uses_relative_controller_scoped` keys on. + fn scoped_put_counter() -> crate::types::ability::Effect { + use crate::types::ability::{ + ControllerRef, Effect, QuantityExpr, TargetFilter, TypedFilter, + }; + Effect::PutCounter { + target: TargetFilter::Typed(TypedFilter { + type_filters: vec![crate::types::ability::TypeFilter::Creature], + controller: Some(ControllerRef::ScopedPlayer), + properties: vec![], + }), + counter_type: crate::types::counter::CounterType::Plus1Plus1, + count: QuantityExpr::Fixed { value: 1 }, + } + } + + /// R23, conjuncts 1–2 — **CR 603.5: the `may` pin binds the prompt's RECIPIENT, not only + /// the entry's OWNER.** + /// + /// Asserted AT THE MINT SEAM, deliberately: an offer-level negative would be satisfied by + /// D4.3's scope filter on many boards regardless of this guard (the + /// upstream-conjunct-dominates trap). The mint has no such upstream. + /// + /// `entry.controller == proposer` bounds who OWNS the entry; it does not bound who the + /// resolver ASKS. `optional_prompt_player`'s last branch is EFFECT-AGNOSTIC — it fires on + /// `ability.scoped_player` plus a `ScopedPlayer`-scoped `target_filter()` (CR 503.1a + + /// CR 608.2d, the Braids, Conjurer Adept class — whose printed effect puts an artifact, + /// creature, or land card from hand onto the battlefield, NOT a counter; `PutCounter` + /// here is a synthetic stand-in for the class, which that branch admits precisely + /// BECAUSE it is effect-agnostic) — so an allow-listed `PutCounter` reaches + /// it. Without the conjunct, P0's pin would be spendable as P1's CR 603.5 choice. + /// + /// MATCHED POSITIVE, on the same instrument and differing in exactly `scoped_player`: it + /// proves the fixture reaches the mint at all, so the negative is keyed to the recipient + /// axis and not to one of the four upstream conjuncts. + /// + /// REVERT-PROBE: delete `&& effects::optional_prompt_player(state, ability) == proposer` + /// from the `may` mint ⇒ the scoped-player entry publishes a `MayChoice` slot ⇒ the + /// negative arm FLIPS TO FAIL. + #[test] + fn a_may_slot_is_minted_only_for_the_seat_the_cr_603_5_gate_will_ask() { + let (mut state, src) = u2_board(); + + // ── negative: the gate will ask P1, not the proposer ── + let mut scoped = shape_b(src, scoped_put_counter()); + scoped.scoped_player = Some(P1); + assert_eq!( + crate::game::effects::optional_prompt_player(&state, &scoped), + P1, + "reach-guard: the recipient authority must really route this entry to the OTHER \ + seat, or the negative below is about nothing" + ); + let negative = shape_b_entry(940, src, scoped); + assert!( + entry_publishes_pin_slots(&state, &negative, P0).is_none(), + "CR 603.5: a `may` the resolver will ask ANOTHER seat publishes no pin slot" + ); + + // ── matched positive: byte-identical except `scoped_player` ── + let unscoped = shape_b(src, scoped_put_counter()); + assert_eq!( + crate::game::effects::optional_prompt_player(&state, &unscoped), + P0, + "reach-guard: with no scoped player the gate asks the controller = proposer" + ); + let positive = shape_b_entry(941, src, unscoped); + let published = entry_publishes_pin_slots(&state, &positive, P0) + .expect("the matched positive must reach the mint and publish"); + assert!( + published.may.is_some(), + "the matched positive publishes the CR 603.5 gate" + ); + assert!( + published.target.is_none(), + "shape (B): announcing it surfaces no CR 601.2c choice, so no target slot" + ); + assert!( + published.legal_targets.is_empty(), + "no target slot carries no legal set" + ); + + // The published pair also reaches the point mint as ONE `MayChoice` point. + state.stack.push_back(positive); + let points = bounded_cycle_pin_slots(&state, P0); + assert_eq!( + points.len(), + 1, + "shape (B) publishes exactly the may point: {points:?}" + ); + assert_eq!( + points[0].kind, + crate::analysis::decision_template::DecisionPointKind::MayChoice + ); + assert_eq!( + points[0].slot.index, 1, + "index 1 is the may slot in BOTH shapes" + ); + } + + /// R23, conjunct 3 — **the PRODUCER census, so a new producer is a COUNTED event.** + /// + /// The struck form of this conjunct pinned `optional_prompt_player`'s own call-site count, + /// which is trivially stable at 2 and moves neither when the guard is deleted nor when an + /// unguarded producer is added — this plan's own "verify the seam, not the line" defect, + /// committed. What actually bounds the mint conjunct's reach is how many things PRODUCE + /// `WaitingFor::OptionalEffectChoice`: the conjunct is a fail-closed pre-filter on ONE of + /// them, and soundness over the others is discharged at the consumption point. + /// + /// The five production producers are named individually, and exactly one of them is inside + /// the CR 603.5 gate that consults the recipient authority. If a sixth appears, this row + /// fails and whoever added it must decide where its recipient is bound. + /// + /// ⚠ **ADJUDICATED IN U4, NOT RELAXED.** The census moved `34 ⇒ 37`. The PRODUCER half is + /// unchanged at **5** and its per-file list is byte-identical (only one line NUMBER moved, + /// `game/engine.rs:10433 ⇒ :10493`, because U4's arm sits above it) — that half is what this + /// row's claim is about, and it did not move. The `+1` READER is `game/engine.rs`'s new + /// `OptionalEffectChoice` arm in `inject_pinned_answer`, i.e. the CONSUMPTION point this + /// doc already names as where soundness over the other four producers is discharged; the + /// `+2` are U4's own `#[cfg(test)]` fixtures. A new READER is the benign case — adjudicate + /// it, do not relax the assert. + /// + /// ⚠ **RE-ADJUDICATED IN THE 5d LOW-FIX, NOT RELAXED.** One line NUMBER moved again, + /// `game/engine.rs:10493 ⇒ :10500`, on the same terms as U4's shift above. Cause: the + /// LOW-fix added a net **+7 DOC lines** above that producer (the mint's corrected + /// board-not-prompt contract, and the Braids, Conjurer Adept Oracle-text correction) — + /// comments only, not one executable line. The producer itself is BYTE-IDENTICAL (the + /// `return Ok(Some(WaitingFor::OptionalEffectChoice` head, diffed against `HEAD`), the + /// total stays **37** and the partition stays **5/7/25**, and the other four entries are + /// unchanged. The two companion asserts above run FIRST and both fired GREEN on the run + /// that caught this — which is the evidence that the SET did not move and only this + /// entry's coordinate did. A line-number-only shift is the benign case; a changed + /// producer set is not, and stays a counted event. + /// + /// ⚠ **RE-ADJUDICATED ON THE REBASE ONTO UPSTREAM #6842 (`8121fd1c6`), NOT RELAXED.** + /// The row fired again; the PRODUCER COUNT IS STILL **5** and no sixth producer exists. + /// Four of five coordinates shifted and one did not: + /// `game/effects/mod.rs:5896/5973/8927 ⇒ :5918/5995/8949` (uniform **+22**, lines that + /// commit adds above them in that file), `game/engine.rs:10500 ⇒ :10589` (**+89**, same + /// cause), and `game/effects/scoped_library_search.rs:452` **UNMOVED**. + /// Evidence this is a coordinate shift and not a set change: each of the five was re-read + /// at its new coordinate and diffed against the pre-rebase tree (`chain3-prefold-backup`) + /// at its old one — all five are BYTE-IDENTICAL, same files, same order, and the one + /// entry at an unchanged coordinate is byte-identical in place, which a gained-or-lost + /// producer could not produce. Same set, new line numbers ⇒ benign, re-baselined here. + /// NOTE for the record: this rebase did NOT add a CR 603.5 producer. An earlier report of + /// mine said upstream had added one; that was wrong — the row fired on coordinates. + /// + /// ⚠ **RE-ADJUDICATED ON THE REBASE ONTO UPSTREAM #6851 (`96e41b3ab`), NOT RELAXED.** + /// The row fired in CI but not locally, because CI builds the MERGE ref (branch + main) + /// while the branch was still based on `e12447f4f`. The PRODUCER COUNT IS STILL **5**, no + /// sixth producer exists, and this time only ONE coordinate moved: + /// `game/engine.rs:10589 ⇒ :10640` (**+51**), with `game/effects/mod.rs:5918/5995/8949` + /// and `game/effects/scoped_library_search.rs:452` all **UNMOVED**. + /// Evidence this is a coordinate shift and not a set change, three independent ways: + /// (1) all five producers were re-read at their new coordinates and diffed against the + /// pre-rebase tree at their old ones — **byte-identical**, same files, same order, with a + /// negative control confirming the diff instrument discriminates (the new tree at the OLD + /// coordinate `:10589` is a bare `}`, not the producer); (2) the +51 is fully accounted + /// for by #6851's own insertions ABOVE this producer in the same file — measured net + /// `+51` from `git diff -U0 e12447f4f 96e41b3ab`, so predicted `10589+51 = 10640` equals + /// the observed coordinate exactly, and #6851's whole-file delta is also `+51`, i.e. it + /// adds nothing below; (3) the total stays **37** and the partition stays **5/7/25**, so + /// neither a producer nor a reader was gained or lost. Same set, one new line number ⇒ + /// benign, re-baselined here. + #[test] + fn the_cr_603_5_prompt_census_is_pinned_so_a_sixth_producer_is_a_counted_event() { + /// Every `.rs` under the crate's `src`, and the `#[cfg(test)]`-attributed + /// column-0 `mod … {` … column-0 `}` spans inside it. A whole file whose stem + /// ends `_tests` is test-only (its parent declares it under `#[cfg(test)]`). + fn rs_files(dir: &std::path::Path, out: &mut Vec) { + for entry in std::fs::read_dir(dir).expect("readable source dir") { + let path = entry.expect("readable dir entry").path(); + if path.is_dir() { + rs_files(&path, out); + } else if path.extension().is_some_and(|e| e == "rs") { + out.push(path); + } + } + } + fn cfg_test_spans(lines: &[&str]) -> Vec<(usize, usize)> { + let mut spans = Vec::new(); + let mut i = 0; + while i < lines.len() { + if lines[i].trim() == "#[cfg(test)]" { + let mut j = i + 1; + while j < lines.len() + && (lines[j].trim_start().starts_with("#[") || lines[j].trim().is_empty()) + { + j += 1; + } + let is_mod = j < lines.len() + && lines[j].starts_with(['m', 'p']) + && lines[j].contains("mod ") + && lines[j].trim_end().ends_with('{'); + if is_mod { + let mut k = j + 1; + while k < lines.len() && lines[k] != "}" { + k += 1; + } + spans.push((j, k)); + i = k; + } + } + i += 1; + } + spans + } + + let root = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("src"); + let mut files = Vec::new(); + rs_files(&root, &mut files); + files.sort(); + assert!(files.len() > 100, "reach-guard: the walker found the crate"); + + // The needle is ASSEMBLED so this row's own source cannot be counted by its own + // instrument. `..` excludes multi-line READ destructures whose rest-pattern sits on + // a later line — the inflation the raw grep suffers from. + let needle = format!("WaitingFor::{}Choice {{", "OptionalEffect"); + let (mut producers, mut readers, mut in_test) = (Vec::new(), Vec::new(), 0usize); + for path in &files { + let text = std::fs::read_to_string(path).expect("readable source file"); + let lines: Vec<&str> = text.lines().collect(); + let spans = cfg_test_spans(&lines); + let rel = path + .strip_prefix(&root) + .expect("under src") + .display() + .to_string(); + let test_file = rel.trim_end_matches(".rs").ends_with("_tests"); + for (n, line) in lines.iter().enumerate() { + if !line.contains(&needle) || line.contains("..") { + continue; + } + if test_file || spans.iter().any(|(a, b)| (*a..=*b).contains(&n)) { + in_test += 1; + } else if line.contains("waiting_for = ") || line.contains("Ok(Some(") { + producers.push(format!("{rel}:{}", n + 1)); + } else { + readers.push(format!("{rel}:{}", n + 1)); + } + } + } + + assert_eq!( + producers.len() + readers.len() + in_test, + 37, + "CR 603.5 prompt census drifted. A new PRODUCER must have its recipient bound \ + somewhere — the mint's conjunct (a) covers exactly ONE of them. A new READER is \ + the benign case (U4's own consumption arm was one): adjudicate it in this doc and \ + name the site, do not merely move the number.\n\ + producers={producers:#?}\nreaders={readers:#?}" + ); + assert_eq!( + (producers.len(), readers.len(), in_test), + (5, 7, 25), + "the partition, not just the total: five PRODUCTION producers, seven PRODUCTION \ + readers (they read `state.waiting_for` and never write it — the seventh is U4's \ + `inject_pinned_answer` arm), 25 `#[cfg(test)]` lines.\nproducers={producers:#?}\n\ + readers={readers:#?}" + ); + assert_eq!( + producers, + vec![ + // Rebase onto upstream #6842 (8121fd1c6): `:5896/:5973/:8927 ⇒ + // :5918/:5995/:8949`, a uniform +22 shift from lines that commit adds ABOVE + // these three in the same file. Each producer re-read at its new coordinate + // and diffed against the pre-rebase tree: byte-identical. + "game/effects/mod.rs:5918".to_string(), + "game/effects/mod.rs:5995".to_string(), + "game/effects/mod.rs:8949".to_string(), + // UNMOVED across the rebase, and that is itself evidence the SET did not + // move: a census that had gained or lost a producer would not leave this + // entry both byte-identical AND at the same coordinate. + "game/effects/scoped_library_search.rs:452".to_string(), + // 5d LOW-fix: `:10493 ⇒ :10500`, a doc-only line shift (+7 comment lines + // above); producer byte-identical, total 37 and partition 5/7/25 untouched. + // Rebase onto #6842: `:10500 ⇒ :10589`, on the same terms — that commit adds + // lines above this producer too. Producer byte-identical. + // Rebase onto #6851 (96e41b3ab): `:10589 ⇒ :10640`, again on the same terms. + // The +51 is exactly #6851's measured net insertion above this line (and its + // whole-file delta is also +51, so it adds nothing below). The OTHER FOUR + // entries did not move at all this time — a census that had gained or lost a + // producer could not leave four entries byte-identical AND in place. + "game/engine.rs:10640".to_string(), + ], + "the five production producers, NAMED: the CR 603.5 gate in `resolve_chain_body` \ + plus the two repeated-optional-payment drivers, the per-player acceptance cursor \ + in `scoped_library_search`, and `begin_pending_trigger_target_selection`'s \ + ANNOUNCEMENT-time modal prompt. Four of the five choose `player` WITHOUT \ + consulting the recipient authority, which is exactly why the mint conjunct is a \ + fail-closed pre-filter and not a soundness proof" + ); + + // Exactly ONE of them routes through the recipient authority: the CR 603.5 gate. + let effects_src = std::fs::read_to_string(root.join("game/effects/mod.rs")) + .expect("readable effects module"); + let authority = format!("{}_prompt_player", "optional"); + assert_eq!( + effects_src.matches(&authority).count(), + 2, + "one definition + exactly one call — the CR 603.5 gate's `let prompt_player = ..`. \ + A second call inside `effects/mod.rs` means a second producer started consulting \ + the authority and this row's partition needs re-deriving" + ); + } + + /// R25 — **a stored `may` auto-choice is a SECOND authority on the same CR 603.5 + /// question, and the mint must refuse to it.** + /// + /// Without the conjunct the pin is minted, then the gate consumes the stored choice and + /// **returns before setting any prompt** — so `inject_pinned_answer` is never entered and + /// the fail-closed `_ => Err(RecastAbort)` arm the design leans on cannot fire on a prompt + /// that is never raised. The declared `Take` would be silently replaced by the stored + /// `Decline`. `MayTriggerAutoChoiceKey`/`Record` are `Serialize + Deserialize`, so a real + /// dump can carry one. + /// + /// MATCHED POSITIVE, differing ONLY in the seeded record, so no upstream conjunct can + /// dominate. + /// + /// REVERT-PROBE: delete the `ability.may_trigger_origin.as_ref().is_none_or(…is_none())` + /// conjunct from the `may` mint ⇒ the seeded entry publishes a `MayChoice` slot ⇒ the + /// negative arm FLIPS TO FAIL. + #[test] + fn a_stored_may_auto_choice_is_a_second_authority_the_mint_refuses_to() { + use crate::types::ability::{ + Effect, QuantityExpr, TargetFilter, TriggerBaseSetInstanceRef, + TriggerDefinitionOccurrenceRef, TriggerDefinitionRef, + }; + use crate::types::game_state::{AutoMayChoice, MayTriggerAutoChoiceKey, MayTriggerOrigin}; + use crate::types::identifiers::ObjectIncarnationRef; + + let (mut state, src) = u2_board(); + // The production shape: `triggers.rs` mints `Definition { definition_ref }` from the + // source's own incarnation plus the printed occurrence — built here identically. + let origin = MayTriggerOrigin::Definition { + definition_ref: TriggerDefinitionRef { + source: ObjectIncarnationRef::of(src, 3), + occurrence: TriggerDefinitionOccurrenceRef::Printed { + base_set: TriggerBaseSetInstanceRef::INITIAL, + printed_index: 0, + }, + }, + }; + let with_origin = |src: ObjectId| { + let mut ability = shape_b( + src, + Effect::Draw { + count: QuantityExpr::Fixed { value: 1 }, + target: TargetFilter::Controller, + }, + ); + ability.may_trigger_origin = Some(origin.clone()); + ability + }; + + // ── matched positive: no stored record ⇒ the gate WILL prompt ⇒ mint publishes ── + let entry = shape_b_entry(950, src, with_origin(src)); + assert!( + state.may_trigger_auto_choices.is_empty(), + "reach-guard: the positive arm runs with NO stored record" + ); + assert!( + entry_publishes_pin_slots(&state, &entry, P0) + .expect("the positive arm publishes") + .may + .is_some(), + "with no stored answer the CR 603.5 gate really asks, so the pin is spendable" + ); + + // ── negative: the SAME board with one record seeded ── + state.set_may_trigger_auto_choice( + MayTriggerAutoChoiceKey { + player: P0, + source_id: src, + origin: origin.clone(), + }, + AutoMayChoice::Decline, + ); + assert_eq!( + state.may_trigger_auto_choice(&MayTriggerAutoChoiceKey { + player: P0, + source_id: src, + origin, + }), + Some(AutoMayChoice::Decline), + "reach-guard: the mint's key must be the key the seed stored, or the negative \ + passes for the wrong reason" + ); + assert!( + entry_publishes_pin_slots(&state, &entry, P0).is_none(), + "CR 603.5: a stored auto-choice already answers this may, so a minted pin would \ + be silently unused — refuse it at the mint. Shape (B) has no other slot, so the \ + whole entry publishes nothing" + ); + } + + /// R30 — **one published `MayChoice` slot stands for exactly ONE CR 603.5 prompt.** + /// + /// CR 732.2a requires the shortcut to describe *the* sequence of choices; a schema point + /// is a choice SURFACE, so a slot that answers one prompt while the resolution opens N is + /// a schema that under-describes its own sequence. Production suppresses the single + /// up-front CR 603.5 gate for three `repeat_for` shapes and re-fires optionality PER + /// ITERATION (CR 608.2c + CR 608.2d) instead. The mint asks production's own three + /// predicates rather than re-deriving them — re-deriving is the drift defect one symbol + /// over. + /// + /// THREE ARMS, one per predicate, each with its matched positive on the same instrument: + /// * **(a) kind-driven — the reachable one.** `has_kind_driven_repeat` matches on + /// `repeat_for` and on NOTHING else (no `Effect` restriction), so an allow-listed + /// optional `PutCounter` of that shape reaches it. **(a′)** differs only in + /// `repeat_for: None`. + /// * **(b) member-driven — live for an allow-listed effect.** `Effect::Token` with + /// `attach_to: Some(ParentTarget)` (Asinine Antics' shape, named in + /// `effect_parent_ref_slots`' own doc) is inside the allow list and reaches + /// `effect_iterates_over_parent_target`. **(b′)** differs in exactly the predicate's + /// own deciding leaf: `attach_to: Some(LastCreated)` is ALSO a context ref, so the head + /// filter is still `owner`, the shape is still (B) and the `repeat_for` is still + /// `ObjectCount` — only `filter_refs_parent_target` flips. Without (b′) a blanket + /// "refuse every `ObjectCount`" would pass, which is coarser than production and a mint + /// cost. + /// * **(c) repeated optional payment — DISCLOSED as not independently reachable.** It + /// requires `Effect::PayCost`, which D4.3's scope filter refuses at conjunct (6), so no + /// certifiable offer carries such an entry. The arm asserts the mint's refusal only and + /// claims NO closed hole; it ships so the mint asks the same three questions production + /// asks. + /// + /// REVERT-PROBE: delete the three sub-conjuncts from the `may` mint ⇒ (a) and (b) FLIP TO + /// FAIL while (a′)/(b′) stay green — the pairs discriminate the conjunct, not the fixture. + #[test] + fn one_published_may_slot_stands_for_exactly_one_cr_603_5_prompt() { + use crate::types::ability::{ + AbilityCondition, AbilityCost, Effect, PtValue, QuantityExpr, QuantityRef, TargetFilter, + }; + + let (state, src) = u2_board(); + let publishes_may = |ability: ResolvedAbility, id: u64| -> bool { + let entry = shape_b_entry(id, src, ability); + entry_publishes_pin_slots(&state, &entry, P0) + .and_then(|p| p.may) + .is_some() + }; + + // ── (a) kind-driven, and (a′) its matched positive ── + let kind_driven = || { + let mut a = shape_b(src, scoped_put_counter()); + a.repeat_for = Some(QuantityExpr::Ref { + qty: QuantityRef::DistinctCounterKindsAmong { + filter: TargetFilter::Controller, + }, + }); + a + }; + assert!( + crate::game::effects::has_kind_driven_repeat(&kind_driven()), + "reach-guard: production's own predicate must say TRUE for arm (a)'s fixture" + ); + assert!( + !publishes_may(kind_driven(), 960), + "(a) CR 608.2c/608.2d: a `DistinctCounterKindsAmong` repeat fires ONE prompt PER \ + ITERATION, so a single slot would under-describe the CR 732.2a sequence" + ); + let mut kind_positive = kind_driven(); + kind_positive.repeat_for = None; + assert!( + publishes_may(kind_positive, 961), + "(a′) byte-identical except `repeat_for: None` ⇒ published, so (a) keys on the \ + repeat axis and not on `optional`, the recipient or the auto-choice conjunct" + ); + + // ── (b) member-driven, and (b′) the one-leaf matched positive ── + let token_attached = |attach: TargetFilter| { + let mut a = shape_b( + src, + Effect::Token { + name: "Cursed Role".to_string(), + power: PtValue::Fixed(1), + toughness: PtValue::Fixed(1), + types: vec!["Enchantment".to_string()], + colors: vec![], + keywords: vec![], + tapped: false, + count: QuantityExpr::Fixed { value: 1 }, + owner: TargetFilter::Controller, + attach_to: Some(attach), + enters_attacking: false, + supertypes: vec![], + static_abilities: vec![], + enter_with_counters: vec![], + }, + ); + a.repeat_for = Some(QuantityExpr::Ref { + qty: QuantityRef::ObjectCount { + filter: TargetFilter::Controller, + }, + }); + a + }; + assert!( + crate::game::effects::has_member_driven_repeat_after_hydration( + &state, + &token_attached(TargetFilter::ParentTarget) + ), + "reach-guard: the `ParentTarget` fixture must really reach \ + `effect_iterates_over_parent_target`" + ); + assert!( + !publishes_may(token_attached(TargetFilter::ParentTarget), 962), + "(b) CR 608.2c/608.2d: an `ObjectCount` repeat over a parent-target ref fires one \ + prompt per iterated member" + ); + assert!( + !crate::game::effects::has_member_driven_repeat_after_hydration( + &state, + &token_attached(TargetFilter::LastCreated) + ), + "reach-guard: `LastCreated` is also a context ref, so (b′) differs from (b) in \ + the predicate's own deciding leaf and in nothing else" + ); + assert!( + publishes_may(token_attached(TargetFilter::LastCreated), 963), + "(b′) a blanket `refuse every ObjectCount` would be coarser than production and \ + would fail here" + ); + + // ── (c) repeated optional payment — refusal asserted, reach DISCLOSED as closed ── + let repeated_payment = || { + let mut a = shape_b( + src, + Effect::PayCost { + cost: AbilityCost::Mana { + cost: crate::types::mana::ManaCost::Cost { + shards: vec![], + generic: 1, + }, + }, + scale: None, + payer: TargetFilter::Controller, + }, + ); + a.repeat_for = Some(QuantityExpr::Fixed { value: 2 }); + let mut sub = ResolvedAbility::new( + Effect::Draw { + count: QuantityExpr::Fixed { value: 1 }, + target: TargetFilter::Controller, + }, + vec![], + src, + P0, + ); + sub.condition = Some(AbilityCondition::WhenYouDo); + a.sub_ability = Some(Box::new(sub)); + a + }; + assert!( + crate::game::effects::is_repeated_optional_payment(&repeated_payment()), + "reach-guard: production's own predicate must say TRUE for arm (c)'s fixture" + ); + assert!( + !publishes_may(repeated_payment(), 964), + "(c) CR 603.12a: the payment process offers its `may` PER iteration. This arm \ + asserts the mint's refusal only — `Effect::PayCost` is outside D4.3's six-arm \ + allow list, so no certifiable offer carries such an entry and NO closed hole is \ + claimed here" + ); + } + + // ────────── 5d U4 — the `OptionalEffectChoice` arm and its two TOTAL head guards ────────── + + /// Life the shared U4 fixture's suspended optional ability gains when its CR 603.5 choice + /// is TAKEN. Named rather than inlined so every "the pin was APPLIED" assertion below is + /// keyed to the fixture instead of to a literal. + const U4_MAY_LIFE: i32 = 5; + + /// A board parked on a REAL CR 603.5 resolution-time prompt. `asked` is the seat the + /// resolver is asking, and the suspended optional ability is THAT seat's, so taking the + /// choice gains `asked` exactly `U4_MAY_LIFE` life. + /// + /// The life delta is the observable that separates "the pinned `DecideOptionalEffect` was + /// dispatched" from "the injector returned `Ok(())` having done nothing": an empty board + /// would answer `Ok(())` just as happily. + /// + /// The pinned source is a BATTLEFIELD object because `resolve_source` is battlefield-only + /// (CR 400.7 incarnation binding) — on any other zone `slot_source_prompted` would refuse + /// every arm below for a reason none of them is about. + fn u4_may_board(asked: PlayerId) -> (GameState, ObjectId) { + use crate::types::ability::{Effect, QuantityExpr, TargetFilter}; + let mut state = GameScenario::new_n_player(3, 7).build().state().clone(); + let src = place(&mut state, 970, Zone::Battlefield); + let mut optional = ResolvedAbility::new( + Effect::GainLife { + amount: QuantityExpr::Fixed { value: U4_MAY_LIFE }, + player: TargetFilter::Controller, + }, + vec![], + src, + asked, + ); + optional.optional = true; + state.push_optional_effect_frame(crate::types::resolution::OptionalEffectFrame { + ability: Box::new(optional), + trigger_event: None, + trigger_match_count: None, + }); + state.waiting_for = WaitingFor::OptionalEffectChoice { + player: asked, + source_id: src, + description: None, + may_trigger_key: None, + }; + (state, src) + } + + /// A template carrying exactly one CR 603.5 `MayChoice` pin for `src` (slot index 1 — the + /// may slot in both mint shapes), declared by `owner`. + fn u4_may_template( + src: ObjectId, + owner: PlayerId, + take: crate::analysis::decision_template::MayChoiceOption, + ) -> DecisionTemplate { + let source = this_object(src); + DecisionTemplate { + owner, + decisions: vec![PinnedDecision::MayChoice { + slot: DecisionSlot { + source: source.clone(), + index: 1, + }, + take, + }], + replay: ReplayMode::Scheduled { + count: IterationCount::Fixed(1), + }, + key: DecisionGroupKey::from_sources(&[source], DecisionKind::LoopChoice), + } + } + + /// R23, conjunct 4 — **CR 603.5 + CR 732.2a: a `may` pin answers only the seat the PROMPT + /// names.** + /// + /// The mint's recipient conjunct (U2) is a PREDICTION over one of five + /// `WaitingFor::OptionalEffectChoice` producers — only one of them consults + /// `optional_prompt_player` — so it is partial by construction. This guard reads the + /// recipient OFF THE PROMPT, which is total over all five and over any sixth. + /// + /// MATCHED POSITIVE, same instrument, same template, differing in exactly one fixture + /// parameter (the seat the prompt names — and, coherently, the controller of the suspended + /// optional ability, since the resolver asks that ability's controller): the pinned + /// `DecideOptionalEffect` is dispatched and `U4_MAY_LIFE` life is gained. + /// + /// Two reach-guards keep the negative off the arm's other refusals: the pin's slot really + /// does match the prompted source on the NEGATIVE's own board (so the `find_map` is not the + /// refuser), and the beat guard's cursor is absent on both boards. + /// + /// The POSITIVE is asserted FIRST, deliberately: under the revert-probe below one run then + /// shows the positive PASSING and the negative FAILING, which is what proves the pair + /// discriminates the SEAT rather than the fixture. + /// + /// REVERT-PROBE: delete `if *player != template.owner { return Err(RecastAbort); }` ⇒ the + /// negative arm FLIPS TO FAIL (it returns `Ok(())` and P1 gains the life P0's pin bought). + #[test] + fn a_may_pin_answers_only_the_seat_the_prompt_names() { + use crate::analysis::decision_template::MayChoiceOption; + + // ── MATCHED POSITIVE: the template against ITS OWNER's own prompt ── + let (mut asks_owner, src) = u4_may_board(P0); + let template = u4_may_template(src, P0, MayChoiceOption::Take); + let own_prompt = asks_owner.waiting_for.clone(); + let p0_before = life(&asks_owner, P0); + inject_pinned_answer(&mut asks_owner, Some(&template), 0, &own_prompt) + .expect("CR 603.5: the owner's own pin answers the owner's own choice"); + assert_eq!( + life(&asks_owner, P0), + p0_before + U4_MAY_LIFE, + "the pinned `DecideOptionalEffect {{ accept: true }}` was really APPLIED — an \ + `Ok(())` that dispatched nothing would leave this unchanged" + ); + assert_ne!( + asks_owner.waiting_for, own_prompt, + "the prompt was consumed, not silently skipped" + ); + + // ── NEGATIVE: same template (owner P0), but the prompt asks P1 ── + let (mut asks_other, other_src) = u4_may_board(P1); + assert_eq!( + other_src, src, + "both boards mint the same pinned source object" + ); + let prompt = asks_other.waiting_for.clone(); + assert!( + slot_source_prompted(&asks_other, &this_object(src), src), + "reach-guard: the pin's slot MATCHES the prompted source on this very board, so a \ + refusal below cannot be the `find_map`'s" + ); + assert!( + asks_other.pending_trigger.is_none(), + "reach-guard: no construction cursor, so the BEAT guard cannot be the refuser" + ); + let p1_before = life(&asks_other, P1); + assert!( + inject_pinned_answer(&mut asks_other, Some(&template), 0, &prompt).is_err(), + "CR 603.5: a pin owned by the proposer must not answer ANOTHER seat's choice" + ); + assert_eq!( + life(&asks_other, P1), + p1_before, + "the refusal is fail-closed: nothing was dispatched as P1" + ); + assert_eq!( + asks_other.waiting_for, prompt, + "the other seat's prompt is still standing, for a human to answer" + ); + } + + /// R23, conjunct 5 — **CR 603.5 vs CR 603.3c + CR 700.2b: the pin binds the BEAT as well as + /// the seat.** + /// + /// A `MayChoice` pin answers the RESOLUTION-time question (CR 603.5). The engine also asks a + /// same-`source_id` ANNOUNCEMENT-time question while a trigger is still mid-construction + /// (the optional-modal gate, CR 603.3c / CR 700.2b), and `slot_source_prompted` cannot + /// separate the two: it matches the SOURCE OBJECT and both prompts carry it. That is why the + /// pair below uses the SAME `source_id` in the cursor as in the prompt — a differing-source + /// fixture would be refused by the slot lookup instead and the row would report the wrong + /// guard. + /// + /// Both arms hold the seat guard SATISFIED (`player == template.owner == P0`), asserted + /// below, so conjunct 4's guard cannot be what decides either arm. + /// + /// (5-pos) is asserted FIRST so that under the revert-probe ONE run shows the positive + /// passing and the negative failing — the evidence that the pair discriminates the CURSOR + /// and not the fixture. + /// + /// REVERT-PROBE: delete `if work.pending_trigger.is_some() { return Err(RecastAbort); }` ⇒ + /// (5-neg) FLIPS TO FAIL while (5-pos) and conjuncts 1–4 stay green. + #[test] + fn a_may_pin_never_answers_the_announcement_time_question() { + use crate::analysis::decision_template::MayChoiceOption; + + let template = |src: ObjectId| u4_may_template(src, P0, MayChoiceOption::Take); + + // ── (5-pos): the same board with NO construction cursor ── + let (mut cursor_clear, src) = u4_may_board(P0); + assert!(cursor_clear.pending_trigger.is_none()); + let pos_prompt = cursor_clear.waiting_for.clone(); + let pos_before = life(&cursor_clear, P0); + inject_pinned_answer(&mut cursor_clear, Some(&template(src)), 0, &pos_prompt).expect( + "(5-pos) CR 603.5: with no cursor the pin answers its own resolution-time question", + ); + assert_eq!( + life(&cursor_clear, P0), + pos_before + U4_MAY_LIFE, + "(5-pos) the pinned choice was applied" + ); + + // ── (5-neg): a LIVE construction cursor on the SAME source ── + let (mut cursor_live, neg_src) = u4_may_board(P0); + assert_eq!(neg_src, src, "the pair is built from one fixture"); + let mut mid_construction = ResolvedAbility::new( + crate::types::ability::Effect::GainLife { + amount: crate::types::ability::QuantityExpr::Fixed { value: 1 }, + player: crate::types::ability::TargetFilter::Controller, + }, + vec![], + src, + P0, + ); + // The production shape that raises a same-source ANNOUNCEMENT-time prompt: an optional + // modal trigger, asked before its modes are chosen (CR 603.3c / CR 700.2b). + mid_construction.optional = true; + cursor_live.pending_trigger = Some(Box::new(super::triggers::PendingTrigger { + source_id: src, + controller: P0, + condition: None, + ability: Box::new(mid_construction), + timestamp: 0, + target_constraints: vec![], + distribute: None, + trigger_event: None, + modal: None, + mode_abilities: vec![], + description: None, + may_trigger_origin: None, + subject_match_count: None, + die_result: None, + })); + let prompt = cursor_live.waiting_for.clone(); + assert_eq!( + prompt, pos_prompt, + "(5-neg) differs from (5-pos) in `work.pending_trigger` and in NOTHING else the \ + injector reads — the prompts are equal" + ); + let WaitingFor::OptionalEffectChoice { + player: asked, + source_id: prompt_source, + .. + } = &prompt + else { + panic!("the fixture parks on a CR 603.5 prompt; got {prompt:?}"); + }; + assert_eq!( + *asked, + template(src).owner, + "reach-guard: the SEAT guard is satisfied on both arms, so conjunct 4 cannot be \ + what decides this pair" + ); + assert_eq!( + cursor_live + .pending_trigger + .as_ref() + .map(|t| t.source_id) + .expect("(5-neg) carries a cursor"), + *prompt_source, + "the cursor names the SAME source as the prompt — that identity is what makes this \ + arm non-vacuous, because `slot_source_prompted` matches on exactly that object" + ); + let before = life(&cursor_live, P0); + assert!( + inject_pinned_answer(&mut cursor_live, Some(&template(src)), 0, &prompt).is_err(), + "CR 603.5 vs CR 603.3c: with a live construction cursor the prompt in hand may be \ + the ANNOUNCEMENT-time question the pin does not answer ⇒ fail-closed" + ); + assert_eq!( + life(&cursor_live, P0), + before, + "(5-neg) fail-closed: no `DecideOptionalEffect` was dispatched" + ); + assert_eq!( + cursor_live.waiting_for, prompt, + "(5-neg) the prompt still stands" + ); + } + + /// The arm's own leaf, covered in BOTH directions — **CR 603.5: a "may" is binary, and the + /// pin says WHICH.** + /// + /// The injector's `accept` flag is one equality test against `MayChoiceOption`'s take + /// variant — the single place the typed pin becomes the engine's boolean. A + /// single-direction row would pass just as happily against the INVERTED mapping, which is + /// why both options are driven on one fixture. (That comparison is deliberately NOT quoted + /// verbatim here: a textual revert-probe whose needle also matched this doc line would + /// silently no-op — the tripwire this row's own probe hit on its first run.) + /// + /// `Decline` is separated from "nothing was dispatched" by the prompt: a declined optional + /// effect CONSUMES the prompt (the frame resolves its decline branch) while a refusal leaves + /// it standing. Both facts are asserted, so neither arm can pass by inaction. + #[test] + fn a_may_pin_dispatches_the_option_it_names_in_both_directions() { + use crate::analysis::decision_template::MayChoiceOption; + + for take in [MayChoiceOption::Take, MayChoiceOption::Decline] { + let (mut board, src) = u4_may_board(P0); + let prompt = board.waiting_for.clone(); + let before = life(&board, P0); + inject_pinned_answer( + &mut board, + Some(&u4_may_template(src, P0, take)), + 0, + &prompt, + ) + .expect("both options are legal answers to a CR 603.5 prompt"); + assert_ne!( + board.waiting_for, prompt, + "{take:?}: the prompt is ANSWERED either way — that is what separates a \ + `Decline` from a fail-closed refusal" + ); + assert_eq!( + life(&board, P0) - before, + match take { + MayChoiceOption::Take => U4_MAY_LIFE, + MayChoiceOption::Decline => 0, + }, + "{take:?}: the pin's own option decides `accept`, so an inverted mapping fails \ + on one of these two arms" + ); + } + } + + /// A live `LoopShortcut` offer with an EMPTY schema, proposed by P0 on `state`. + fn u4_park_on_offer(state: &mut GameState) { + use crate::analysis::decision_template::ShortcutDecisionSchema; + use crate::analysis::loop_check::{LoopCertificate, WinKind}; + use crate::analysis::resource::BoardDelta; + state.waiting_for = WaitingFor::LoopShortcut { + proposer: P0, + predicted_winner: None, + certificate: LoopCertificate { + unbounded: vec![], + win_kind: WinKind::LethalDamage, + mandatory: false, + residual_board_delta: BoardDelta::default(), + per_cycle: None, + }, + schema: ShortcutDecisionSchema::default(), + }; + } + + /// R28 arm (b) — **the DRIVE seam cannot see a `template.owner` the engine never bound; the + /// DECLARE firewall is what makes the drive's seat guard meaningful.** + /// + /// ⚠ **(b1) ASSERTS A MEASURED BREACH, NOT A DESIRED BEHAVIOUR.** `template.owner` arrives + /// verbatim from the client, and `inject_pinned_answer` holds the template but not the + /// offer — so when an attacker sets `owner` to the seat the prompt names, the seat guard + /// compares that value against itself and passes. Measured on this tree: the injector + /// returns `Ok(())` and dispatches the PROPOSER's pinned choice as the OTHER seat's + /// `GameAction::DecideOptionalEffect` (P1 gains `U4_MAY_LIFE`). That is the whole reason the + /// binding lives at declare (`handle_declare_shortcut`) and at consumption + /// (`apply_confirmed_shortcut`), one layer above this one. + /// + /// ⚠ **PLAN DEVIATION, DISCLOSED:** §6 R28(b) predicts the drive seam refuses this pair + /// (*"must still `RecastAbort`"*). It does not, and cannot — the same cell's own analysis + /// says so two sentences later (*"under the round-33 design alone it returns `Ok(())`"*). + /// The arm ships keyed to the measurement, with (b2) supplying the refusal the row is + /// really about. If a future change closes the drive seam (e.g. by threading the + /// engine-issued proposer into the injector), (b1) FLIPS and must be re-keyed onto the new + /// refusal rather than deleted. + /// + /// **(b2) THE REFUSAL, AT THE SEAM THAT HAS THE ENGINE-ISSUED COMPARAND.** The identical + /// hostile template declared against a live `LoopShortcut { proposer: P0 }` is refused into + /// the manual handback — no `ShortcutProposal` is built — so the (b1) configuration is + /// unreachable in production. **MATCHED POSITIVE:** byte-identical except `owner`, which + /// opens APNAP; without it, "refused" would be indistinguishable from "this constructed + /// offer refuses everything". + /// + /// REVERT-PROBE: delete `if template.as_ref().is_some_and(|t| t.owner != offer.proposer)` + /// from `handle_declare_shortcut` ⇒ **(b2) FLIPS TO FAIL** (the hostile declaration builds a + /// proposal and APNAP opens), while **(b1) MUST NOT FLIP** — the injector reads no firewall. + /// The pair therefore proves the two halves measure two different seams rather than one + /// seam asserted twice. Arm (b) and arm (c) (`apply_confirmed_shortcut`, U2, integration) + /// take OPPOSITE reverts by design: (b) is about the drive-side comparand, (c) about the + /// restore ingress that never reaches declare. + #[test] + fn r28_b_the_drive_seat_guard_compares_a_client_supplied_owner_against_itself() { + use crate::analysis::decision_template::{IterationCount, MayChoiceOption}; + + // ── (b1) DRIVE seam: prompt player P1, template owner P1 (the attacker's choice) ── + let (mut board, src) = u4_may_board(P1); + let hostile = u4_may_template(src, P1, MayChoiceOption::Take); + let prompt = board.waiting_for.clone(); + let p1_before = life(&board, P1); + let outcome = inject_pinned_answer(&mut board, Some(&hostile), 0, &prompt); + assert!( + outcome.is_ok(), + "(b1) MEASURED: with `owner` set to the prompt's own seat the drive guard has \ + nothing to compare — it passes. Got {outcome:?}" + ); + assert_eq!( + life(&board, P1), + p1_before + U4_MAY_LIFE, + "(b1) and the proposer's pinned value was really dispatched AS P1 — this is the \ + breach the declare-time binding closes, measured rather than argued" + ); + + // ── (b2) DECLARE seam: the same template, refused by the engine-issued comparand ── + for owner in [P1, P0] { + let (mut state, offer_src) = u4_may_board(P0); + assert_eq!(offer_src, src, "one fixture feeds both halves"); + u4_park_on_offer(&mut state); + apply_action( + &mut state, + P0, + GameAction::DeclareShortcut { + count: IterationCount::Fixed(1), + template: Some(u4_may_template(src, owner, MayChoiceOption::Take)), + }, + None, + ) + .expect("the declaration is dispatched either way — refusal is a HANDBACK"); + + if owner == P1 { + assert!( + matches!(state.waiting_for, WaitingFor::Priority { .. }), + "(b2) CR 732.2a + CR 603.5 + CR 800.4a: a declaration whose `owner` is not \ + the engine-issued proposer hands priority back; got {:?}", + state.waiting_for + ); + assert!( + !matches!(state.waiting_for, WaitingFor::RespondToShortcut { .. }), + "(b2) no `ShortcutProposal` carrying the hostile owner may exist — that is \ + what makes (b1)'s configuration production-unreachable" + ); + } else { + let WaitingFor::RespondToShortcut { proposal, .. } = &state.waiting_for else { + panic!( + "(b2) matched positive: the honest declaration must open APNAP, so the \ + refusal above is keyed to `owner` and not to this constructed offer \ + refusing everything; got {:?}", + state.waiting_for + ); + }; + assert_eq!( + proposal.template.as_ref().map(|t| t.owner), + Some(P0), + "(b2) the proposal that IS built carries the engine-bound owner" + ); + } + } + } +} + +/// FIX-1 interruptibility (memory: combo-interruptibility-acceptance-criterion) — the Kilo loop's +/// CR 732.2a offer must FLIP off when the loop is defused. Driven from the REAL 4p dump through the +/// public `apply()` boundary (recording live), then the offer is re-derived at the private +/// `try_offer_object_growth_shortcut` seam (the plan's sanctioned private-fn revert-probe form). +#[cfg(test)] +mod kilo_interruptibility_tests { + use super::*; + use crate::analysis::decision_template::{PinnedDecision, TargetPin}; + use crate::types::ability::TargetRef; + use crate::types::game_state::{ManaChoice, PayCostKind, YieldTarget}; + use crate::types::mana::{ManaColor, ManaType}; + + const P0: PlayerId = PlayerId(0); + const KILO: ObjectId = ObjectId(402); + const FREED: ObjectId = ObjectId(403); + const RELIC: ObjectId = ObjectId(404); + const PENTAD: ObjectId = ObjectId(405); + const RELIC_TAP_MANA: usize = 1; + const FREED_UNTAP: usize = 1; + + fn load_migrated_dump() -> GameState { + use crate::types::game_state::PersistedGameState; + use std::io::Read; + let gz: &[u8] = include_bytes!("../../tests/fixtures/kilo_freed_relic_pentad_4p.json.gz"); + let mut json = String::new(); + flate2::read::GzDecoder::new(gz) + .read_to_string(&mut json) + .expect("fixture inflates"); + let envelope: serde_json::Value = serde_json::from_str(&json).expect("envelope parses"); + // Route through the REAL production restore chokepoint so the FIX-3 migration hook + // (`migrate_transient_loop_sequence`) drops the dump's 6 stale pinless steps on load — + // exactly as the integration helper does. Deserializing directly would bypass the hook, + // leaving the stale prefix so the live drive yields an 8-step (not 2-step) sequence. + // Decoding AS `PersistedGameState` (rather than decoding a bare `GameState` and + // wrapping it) additionally routes the dump through + // `reject_legacy_raw_prompt_authority` + `decode_persisted_resolution_state`. + // `.expect(..)`, not `?`: `into_game_state` returns `GameState`, not `Result`. + serde_json::from_value::(envelope["gameState"].clone()) + .expect("gameState deserializes through the production decoder") + .into_game_state() + } + + fn beat_actor(state: &GameState) -> PlayerId { + match &state.waiting_for { + WaitingFor::Priority { player } + | WaitingFor::PayCost { player, .. } + | WaitingFor::ChooseManaColor { player, .. } + | WaitingFor::ProliferateChoice { player, .. } => *player, + WaitingFor::LoopShortcut { proposer, .. } => *proposer, + other => panic!("unexpected beat: {other:?}"), + } + } + + /// Drive ONE full live cycle via the public boundary, recording the pinned period. + fn drive_one_live_cycle(state: &mut GameState) { + apply( + state, + P0, + GameAction::ActivateAbility { + source_id: RELIC, + ability_index: RELIC_TAP_MANA, + }, + ) + .expect("activate Relic mana ability"); + let mut freed_activated = false; + for _ in 0..200 { + let actor = beat_actor(state); + match state.waiting_for.clone() { WaitingFor::LoopShortcut { .. } => return, WaitingFor::PayCost { kind: PayCostKind::TapCreatures { .. }, @@ -13028,263 +16036,1240 @@ mod kilo_interruptibility_tests { apply(state, actor, GameAction::PassPriority).expect("pass priority"); } } - other => panic!("unexpected beat: {other:?}"), + other => panic!("unexpected beat: {other:?}"), + } + } + panic!("drive did not settle"); + } + + /// Matched pair: with the loop intact the offer re-derives (`Some`); removing Freed (Kilo can + /// no longer untap, the cycle is no longer mana-neutral) means the recorded `Activate 403#1` + /// step's ability definition can no longer be resolved (its object is gone), so `try_offer` + /// aborts at the pre-drive ability-def resolution ⇒ `None`. Pass-vs-defuse FLIPS the outcome. + #[test] + fn freed_removed_defuses_the_offer() { + let mut driven = load_migrated_dump(); + drive_one_live_cycle(&mut driven); + assert_eq!( + driven.last_loop_action_sequence.len(), + 2, + "the live cycle recorded the clean 2-step pinned period" + ); + + // Re-derive the empty-stack priority window the offer fires from (the recorded period is + // intact; the board is a valid loop state — Kilo untapped, mana-neutral). + let mut intact = driven.clone(); + intact.waiting_for = WaitingFor::Priority { player: P0 }; + assert!(intact.stack.is_empty(), "settled to an empty stack"); + assert!( + try_offer_object_growth_shortcut(&intact).is_some(), + "undefused: the intact loop re-derives the CR 732.2a offer" + ); + + // Defuse: remove Freed AFTER recording. The re-drive can no longer re-find/re-activate it. + let mut defused = intact.clone(); + defused.objects.remove(&FREED); + defused.battlefield.retain(|id| *id != FREED); + assert!( + try_offer_object_growth_shortcut(&defused).is_none(), + "defused (Freed removed): the re-drive aborts ⇒ NO offer — the outcome flips" + ); + } + + /// Reset a driven state (which settles at `LoopShortcut`) back to the empty-stack priority + /// window the offer re-derives from, so `try_offer_object_growth_shortcut` can be probed + /// directly (the plan's sanctioned private-fn revert-probe form). The board is the valid + /// post-cycle loop state (Kilo untapped, mana-neutral). + fn at_priority_window(mut state: GameState) -> GameState { + state.waiting_for = WaitingFor::Priority { player: P0 }; + assert!( + state.stack.is_empty(), + "the driven cycle settled to an empty stack" + ); + state + } + + /// Hostile fixture — two-legendary identity binding (memory: verify-the-seam-not-the-line). + /// The tap-cost pin stores the EXACT tapped `ObjectId` (`TargetPin::ByIdentity`), so with two + /// legal untapped legendary creatures on the board the detection re-drive must re-bind to the + /// RECORDED Kilo (402), NOT the decoy. Positive: record tapping Kilo ⇒ offer. Revert-probe + /// (FLIP, run in-test): repoint ONLY the tap-cost pin's identity to the decoy (an equally-legal + /// legendary) on the SAME board + recording ⇒ the re-drive taps the decoy, whose becomes-tapped + /// proliferate trigger (source = decoy) has NO matching pin (the proliferate pin is keyed to + /// Kilo 402) ⇒ `RecastAbort` ⇒ NO offer. If replay ignored the pin identity (re-bound to "any + /// legal legendary" or always Kilo) this mutation would NOT change the outcome — so the flip + /// proves the recorded identity is load-bearing. + #[test] + fn tap_pin_rebinds_to_recorded_legendary_not_a_decoy() { + let mut state = load_migrated_dump(); + + // Add a SECOND untapped legendary creature P0 controls (a Kilo clone with a fresh id) so + // the Relic tap cost has two legal choices the identity binding must disambiguate. + let decoy_id = ObjectId(state.next_object_id); + state.next_object_id += 1; + let mut decoy = state.objects[&KILO].clone(); + decoy.id = decoy_id; + // Distinct name: CR 704.5j (the legend rule) would otherwise force a ChooseLegend SBA + // between two same-named legends — we want two co-existing legal legendary tap targets. + decoy.name = "Decoy Legend".to_string(); + decoy.base_name = "Decoy Legend".to_string(); + decoy.attachments = Vec::new(); // the clone is NOT the Freed-enchanted creature + decoy.tapped = false; + state.objects.insert(decoy_id, decoy); + state.battlefield.push_back(decoy_id); + + drive_one_live_cycle(&mut state); + assert_eq!( + state.last_loop_action_sequence.len(), + 2, + "reach-guard: the live cycle recorded the clean 2-step pinned period" + ); + + // Positive: the recorded ByIdentity(Kilo 402) tap pin re-binds to Kilo on replay ⇒ offer. + let intact = at_priority_window(state.clone()); + assert!( + try_offer_object_growth_shortcut(&intact).is_some(), + "two legal legendaries present + recorded Kilo ⇒ the offer fires" + ); + + // Revert-probe (FLIP): repoint ONLY the tap-cost pin (its slot source resolves to Relic + // 404) to the decoy. Board, recording, and the proliferate pin (keyed to Kilo 402) are all + // unchanged. + let mut repointed = intact.clone(); + let mut mutated = false; + for step in repointed.last_loop_action_sequence.iter_mut() { + for pin in step.pins.iter_mut() { + if let PinnedDecision::Targets { slot, targets } = pin { + if matches!(&slot.source, YieldTarget::ThisObject { source_id, .. } if *source_id == RELIC) + { + *targets = vec![TargetPin::ByIdentity(YieldTarget::ThisObject { + source_id: decoy_id, + incarnation: None, + trigger_description: None, + })]; + mutated = true; + } + } + } + } + assert!( + mutated, + "reach-guard: the tap-cost pin (slot source Relic) was found + repointed" + ); + assert!( + try_offer_object_growth_shortcut(&repointed).is_none(), + "repointing the tap pin to the decoy FLIPS the offer OFF ⇒ recorded identity is load-bearing" + ); + } + + /// Hostile fixture — wrong-color drive. The `ManaColor` pin latches the color the player + /// produced (Blue, to pay Freed's `{U}`, CR 608.2d). Positive: Blue ⇒ mana-neutral cycle ⇒ + /// offer. Revert-probe (FLIP, run in-test): relatch the color to Red on the SAME recording ⇒ + /// the re-drive produces Red, Freed's `{U}` untap is unpayable ⇒ the second step aborts ⇒ NO + /// offer. The latched color value is load-bearing. + #[test] + fn mana_color_pin_replays_recorded_color() { + let mut state = load_migrated_dump(); + drive_one_live_cycle(&mut state); + let state = at_priority_window(state); + + // Positive: the latched Blue color pays Freed's {U} ⇒ offer. + assert!( + try_offer_object_growth_shortcut(&state).is_some(), + "the recorded Blue mana-color pin completes the mana-neutral cycle ⇒ offer" + ); + + // Revert-probe (FLIP): relatch the color to Red. + let mut wrong = state.clone(); + let mut mutated = false; + for step in wrong.last_loop_action_sequence.iter_mut() { + for pin in step.pins.iter_mut() { + if let PinnedDecision::ManaColor { color, .. } = pin { + *color = ManaColor::Red; + mutated = true; + } } } - panic!("drive did not settle"); + assert!( + mutated, + "reach-guard: the ManaColor pin was found + relatched" + ); + assert!( + try_offer_object_growth_shortcut(&wrong).is_none(), + "a Red mana-color pin cannot pay Freed's {{U}} ⇒ the drive aborts ⇒ NO offer" + ); } - /// Matched pair: with the loop intact the offer re-derives (`Some`); removing Freed (Kilo can - /// no longer untap, the cycle is no longer mana-neutral) means the recorded `Activate 403#1` - /// step's ability definition can no longer be resolved (its object is gone), so `try_offer` - /// aborts at the pre-drive ability-def resolution ⇒ `None`. Pass-vs-defuse FLIPS the outcome. + /// Synthetic positive/negative drive-replay reach-guard (plan §7 unit c). The SAME recorded + /// 2-step period is driven WITH pins (offer) and WITHOUT (abort). The `len()==2` anchor holds + /// in BOTH variants, so the negative's None is a drive-abort at the unpinned + /// `PayCost{TapCreatures}`, NOT a vacuous "no sequence to drive" upstream short-circuit + /// (memory: discriminator-vacuous-if-upstream-conjunct-dominates). #[test] - fn freed_removed_defuses_the_offer() { + fn drive_replay_requires_the_recorded_pins() { + let mut state = load_migrated_dump(); + drive_one_live_cycle(&mut state); + let state = at_priority_window(state); + + // Anchor (holds in BOTH variants): the recorded 2-step period is present. + assert_eq!( + state.last_loop_action_sequence.len(), + 2, + "reach-guard anchor: the recorded period exists ⇒ any None is a drive-abort, not a missing seq" + ); + + // Positive: the recorded pins drive the replay to completion ⇒ offer. + assert!( + try_offer_object_growth_shortcut(&state).is_some(), + "with the recorded pins the replay completes ⇒ offer" + ); + + // Negative: strip the pins from the SAME period ⇒ the replay hits the unpinned tap cost ⇒ + // abort ⇒ NO offer. The anchor proves the None is the drive-abort, not an empty sequence. + let mut unpinned = state.clone(); + for step in unpinned.last_loop_action_sequence.iter_mut() { + step.pins.clear(); + } + assert_eq!( + unpinned.last_loop_action_sequence.len(), + 2, + "reach-guard anchor: the period is still present in the negative variant" + ); + assert!( + try_offer_object_growth_shortcut(&unpinned).is_none(), + "without the pins the drive aborts at the unpinned tap cost ⇒ NO offer" + ); + } + + /// [LOW-1] declined-axis ∞ lifecycle — characterization/regression guard (memory: + /// combo-interruptibility-acceptance-criterion). A declined `Counters`/`Life` axis leaves its + /// ∞ capability marker in `unbounded_resources` intentionally (CR 732.2b never forces a + /// shortcut). This test guards the MEASURED retirement path (a) documented at the boundary + /// seam: the empty-stack offer hook `try_offer_object_growth_shortcut` (engine.rs:472) is NOT + /// gated by existing ∞ marks, so a later genuine re-detection RE-OFFERS the loop and can + /// re-collapse the declined axis once the observer is gone. + /// + /// DISCRIMINATING LEG (the re-offer assertion): with a pre-existing declined ∞ mark injected + /// for P0, the offer STILL fires. If a future regression ∞-gated the offer hook (e.g. to + /// suppress re-offering a declined axis), this flips to `None`. Positive control / reach-guard: + /// the SAME state WITHOUT the mark also offers (proving the mark is what the assertion isolates, + /// and the recorded 2-step period is intact — a `None` would be a drive-abort, not a missing + /// sequence). + #[test] + fn declined_infinity_mark_does_not_suppress_reoffer() { + use crate::analysis::resource::ResourceAxis; + let mut driven = load_migrated_dump(); drive_one_live_cycle(&mut driven); + let base = at_priority_window(driven); + + // Reach-guard anchor: the recorded period is present (a `None` below is a real gating + // decision, never an empty-sequence artifact). assert_eq!( - driven.last_loop_action_sequence.len(), + base.last_loop_action_sequence.len(), 2, - "the live cycle recorded the clean 2-step pinned period" + "reach-guard: the live cycle recorded the clean 2-step pinned period" + ); + // Positive control: without any ∞ mark the intact loop re-derives the offer. + assert!( + try_offer_object_growth_shortcut(&base).is_some(), + "positive control: the intact loop offers when no ∞ mark is present" ); - // Re-derive the empty-stack priority window the offer fires from (the recorded period is - // intact; the board is a valid loop state — Kilo untapped, mana-neutral). - let mut intact = driven.clone(); - intact.waiting_for = WaitingFor::Priority { player: P0 }; - assert!(intact.stack.is_empty(), "settled to an empty stack"); + // Inject a pre-existing DECLINED ∞ axis for P0 (as if an earlier boundary declined the life + // axis and left it ∞-marked for manual play). The offer hook reads `waiting_for` + stack + + // `samples()` + `last_loop_action_sequence` — never `unbounded_resources` — so the mark + // must NOT suppress the re-offer. + let mut marked = base.clone(); + marked.mark_unbounded_loop(P0, &[ResourceAxis::Life(P0)]); assert!( - try_offer_object_growth_shortcut(&intact).is_some(), - "undefused: the intact loop re-derives the CR 732.2a offer" + marked + .unbounded_resources + .get(&P0) + .is_some_and(|axes| axes.contains(&ResourceAxis::Life(P0))), + "reach-guard: the declined ∞ Life mark is present on the probed state" + ); + assert!( + try_offer_object_growth_shortcut(&marked).is_some(), + "the empty-stack offer hook is NOT ∞-gated: a persisted declined ∞ axis does not \ + suppress a genuine re-detection re-offering the loop (CR 732.2a / CR 732.2b)" ); + } - // Defuse: remove Freed AFTER recording. The re-drive can no longer re-find/re-activate it. - let mut defused = intact.clone(); - defused.objects.remove(&FREED); - defused.battlefield.retain(|id| *id != FREED); + /// Plant ONE extra `Targets` pin into the recorded period's first step, on a slot that + /// no prompt in the replay answers. That is what makes these three rows isolate the + /// OFFER-BUILDER: the drive never consults the planted pin, while + /// `pinned_decisions_to_points` — which builds its points from exactly + /// `build_recast_template(&seq[0]).decisions` — always does. + fn plant_offer_pin(state: &mut GameState, pin: TargetPin) -> GameState { + let mut planted = state.clone(); + let step = planted + .last_loop_action_sequence + .first_mut() + .expect("reach-guard: the recorded period has a first step to plant into"); + step.pins.push(PinnedDecision::Targets { + slot: crate::analysis::decision_template::DecisionSlot { + source: YieldTarget::ThisObject { + source_id: KILO, + incarnation: None, + trigger_description: None, + }, + // An index no live prompt publishes, so only the point-builder reads it. + index: 99, + }, + targets: vec![pin], + }); + planted + } + + /// R4b — CR 732.2a: *"a sequence of game choices ... that may be legally taken based on + /// the current game state"*. If a pinned target no longer resolves, there IS no such + /// sequence, so the offer must be WITHDRAWN — not published with a short legal set. + /// + /// Before the fix, `pinned_decisions_to_points` `filter_map`ped the unresolvable pin out + /// of `legal_targets` while keeping `min_targets = targets.len()`, publishing a point + /// that no legal declaration could satisfy: the player is offered a shortcut they cannot + /// take, and the failure surfaces later as `IllegalPinValue` instead of as "no offer". + /// + /// MATCHED PAIR on one board, one variable — the planted pin's identity: + /// * live object ⇒ the point resolves ⇒ the offer FIRES (the reach-guard: it proves + /// the plant itself does not break the drive, so the negative arm's `None` is the + /// withdrawal and not a broken fixture); + /// * absent object ⇒ the offer is WITHDRAWN. + /// + /// REVERT-PROBE: restore the `filter_map` (drop the `?`) ⇒ the negative arm publishes an + /// undeclarable point instead of withdrawing ⇒ FAILS. Reachable TODAY and independent of + /// item 1: this arm's pin is `ByIdentity`, and no player legality is involved. + #[test] + fn an_unresolvable_identity_pin_withdraws_the_offer() { + let mut driven = load_migrated_dump(); + drive_one_live_cycle(&mut driven); + let base = at_priority_window(driven); + + let live = plant_offer_pin( + &mut base.clone(), + TargetPin::ByIdentity(YieldTarget::ThisObject { + source_id: KILO, + incarnation: None, + trigger_description: None, + }), + ); assert!( - try_offer_object_growth_shortcut(&defused).is_none(), - "defused (Freed removed): the re-drive aborts ⇒ NO offer — the outcome flips" + try_offer_object_growth_shortcut(&live).is_some(), + "reach-guard: a planted pin that RESOLVES leaves the offer intact, so the \ + negative arm below is the withdrawal and not the plant" + ); + + let mut dangling = plant_offer_pin( + &mut base.clone(), + TargetPin::ByIdentity(YieldTarget::ThisObject { + source_id: ObjectId(999_999), + incarnation: None, + trigger_description: None, + }), + ); + assert!( + !dangling.objects.contains_key(&ObjectId(999_999)), + "setup: the planted identity must genuinely be absent from the board" + ); + assert!( + try_offer_object_growth_shortcut(&dangling).is_none(), + "CR 732.2a: a pin that cannot resolve withdraws the offer" ); + // The withdrawal is the whole point: nothing was published to be declared. + assert!(matches!(dangling.waiting_for, WaitingFor::Priority { .. })); + dangling.last_loop_action_sequence.clear(); } - /// Reset a driven state (which settles at `LoopShortcut`) back to the empty-stack priority - /// window the offer re-derives from, so `try_offer_object_growth_shortcut` can be probed - /// directly (the plan's sanctioned private-fn revert-probe form). The board is the valid - /// post-cycle loop state (Kilo untapped, mana-neutral). - fn at_priority_window(mut state: GameState) -> GameState { - state.waiting_for = WaitingFor::Priority { player: P0 }; + /// R4d — the same withdrawal, on the OTHER end of the invariant: a `TargetPin::Player` + /// aimed at a seat that has left the game (CR 800.4 + CR 102.1) no longer resolves, so + /// the offer is withdrawn rather than ratifying its own pin. + /// + /// This is the offer-builder half of the pair whose MINT half is + /// `effects::proliferate`'s R4a row: the two ends of the invariant that a Player pin + /// must never reach materialization validated only against a legal set derived from the + /// pins themselves. `pinned_decisions_to_points` derives its legal sets FROM the pins, + /// so on this route the seat's existence check inside `resolve_target` is the only + /// authority there is. + /// + /// MATCHED PAIR, one variable (`is_eliminated`): live seat ⇒ offer fires; departed seat + /// ⇒ offer withdrawn. REVERT-PROBE: drop the existence conjunct in + /// `players::player_exists_for_choice` ⇒ the departed seat resolves ⇒ the offer is + /// published ⇒ FAILS. + #[test] + fn a_departed_player_pin_withdraws_the_offer() { + let mut driven = load_migrated_dump(); + drive_one_live_cycle(&mut driven); + let base = at_priority_window(driven); + let victim = PlayerId(1); + + let live = plant_offer_pin(&mut base.clone(), TargetPin::Player(victim)); assert!( - state.stack.is_empty(), - "the driven cycle settled to an empty stack" + !live.players[1].is_eliminated, + "reach-guard: the seat starts in the game" + ); + assert!( + try_offer_object_growth_shortcut(&live).is_some(), + "reach-guard: a Player pin on a LIVE seat leaves the offer intact" + ); + + let mut departed = live.clone(); + departed.players[1].is_eliminated = true; + assert!( + try_offer_object_growth_shortcut(&departed).is_none(), + "a Player pin aimed at a departed seat withdraws the offer (CR 732.2a)" + ); + } + + /// R2b — the CR 115.10a boundary, enforced at the OFFER level rather than explained in a + /// comment. A shrouded seat (CR 702.18a) is un-TARGETable, and this row proves the + /// offer-builder still publishes it as a CHOICE: the point carries it in + /// `legal_targets`, and the offer FIRES. + /// + /// This is the enforcement half of the pair whose explanation half is the site-4 comment + /// and whose seam-level half is + /// `analysis::decision_template::tests::a_shrouded_seat_is_untargetable_yet_still_ + /// choosable_at_the_pin_recheck`. Without it, re-introducing target-scoped conjuncts at + /// site 4 would silently restore the over-veto at the one seam that publishes an offer. + /// + /// REVERT-PROBE: route `resolve_target`'s `TargetPin::Player` arm through + /// `targeting::player_is_legal_target` ⇒ the shrouded seat stops resolving ⇒ the offer is + /// WITHDRAWN ⇒ both assertions FAIL. The paired positive that keeps this from passing on + /// an un-shrouded board is the shroud reach-guard asserted first. + #[test] + fn a_shrouded_player_pin_is_still_published_by_the_offer_builder() { + use crate::types::statics::StaticMode; + + let mut driven = load_migrated_dump(); + drive_one_live_cycle(&mut driven); + let mut base = at_priority_window(driven); + let victim = PlayerId(1); + + // P1 gains shroud, through the single TCE construction authority — the same route + // a resolved "target player gains shroud until end of turn" effect takes. + base.add_transient_continuous_effect( + KILO, + P0, + crate::types::ability::Duration::UntilEndOfTurn, + crate::types::ability::TargetFilter::SpecificPlayer { id: victim }, + vec![ + crate::types::ability::ContinuousModification::AddStaticMode { + mode: StaticMode::Shroud, + }, + ], + None, + ); + crate::game::layers::flush_layers(&mut base); + + // Reach-guard, and the paired positive: the shroud actually bites at the TARGET + // seam. Without this the row would pass on a board with no shroud at all. + assert!( + crate::game::static_abilities::player_cannot_be_targeted_by(&base, victim, KILO, P0), + "CR 702.18a: the planted shroud must make the seat un-targetable" + ); + + let planted = plant_offer_pin(&mut base, TargetPin::Player(victim)); + let (_, schema) = try_offer_object_growth_shortcut(&planted) + .expect("CR 115.10a: a shrouded seat is still CHOOSABLE, so the offer fires"); + assert!( + schema.points.iter().any(|point| matches!( + &point.kind, + crate::analysis::decision_template::DecisionPointKind::Targets { legal_targets, .. } + if legal_targets.contains(&TargetRef::Player(victim)) + )), + "the published point carries the shrouded seat: exclusion belongs to the TARGET \ + seam, not to this one" ); + } +} + +/// FIX ROUND 1 (MED-2) — a named negative row per [`try_offer_bounded_cycle_shortcut`] conjunct +/// that no tracked test was exercising. +/// +/// The reviewer measured all three by disabling them on the PRE-ROW tree: step (2) +/// `ProposerIsNotActivePlayer` and step (5) `AdvantageOnlyCycle` could each be deleted with the +/// whole suite still green, and only `DrivingSequenceNotEmpty` was asserted by name anywhere. +/// A conjunct no row can name is a conjunct nobody notices losing. +/// +/// ⚠ The pass COUNT that used to appear here ("4167 passed / 0 failed") is deleted rather than +/// re-dressed, because it shipped with no runner and no filter recorded beside it and a bare +/// count means nothing without both (fix round 2, LOW-2: a count in this file named a shape it +/// did not have). It is also not reproducible on this tree BY DESIGN — the rows below now exist, +/// so deleting either conjunct today flips its named row, which is the entire point. Each row's +/// own REVERT-PROBE line is the reproducible claim; run it with +/// `cargo test -p phase-engine --lib -- game::engine::bounded_offer_conjunct_tests::` (module filter on +/// the `engine` lib target). +/// +/// # Why these are UNIT rows on a synthetic ring +/// +/// Each row must reach ONE conjunct and refuse there, which means holding every earlier conjunct +/// satisfied on purpose. A ring is the input the certification step reads, and +/// `GameState::normalize_for_loop` is `pub(crate)`, so an integration test cannot build one. The +/// refusal is asserted BY REASON (`BoundedOfferRefusal`), never as a bare "no offer": a row that +/// only observes absence silently stops testing its own conjunct the moment an EARLIER one +/// starts refusing first, which is the domination trap the enum exists to close. +#[cfg(test)] +mod bounded_offer_conjunct_tests { + use super::{try_offer_bounded_cycle_shortcut, BoundedOfferRefusal}; + use crate::game::scenario::GameScenario; + use crate::types::game_state::{GameState, LoopDetectionMode, WaitingFor}; + use crate::types::player::PlayerId; + + const P0: PlayerId = PlayerId(0); + const P1: PlayerId = PlayerId(1); + + /// A 2-player board parked at `Priority{P0}` (P0 active) whose retained ring encodes a + /// period seen twice: `frames` successive normalized snapshots, each mutated by `shape`. + /// + /// `2k + 1 = 3` frames at `k = 1` is the smallest ring `ring_delta_signature` will certify, + /// and every frame shares `turn_number` / `phase` / `extra_phases`, so the CR 703.1 + /// turn-position conjunct passes and this fixture is not silently testing that instead. + fn ring_state(frames: usize, shape: impl Fn(&mut GameState, usize)) -> GameState { + let mut scenario = GameScenario::new_n_player(2, 7); + // A stocked library is load-bearing, not scenery: the period this fixture encodes IS a + // library delta, and an empty library makes every frame identical ⇒ a zero per-period + // vector ⇒ `ring_delta_signature` returns `None` and every row below refuses at + // `NoCertification` instead of at the conjunct it is about. + let names: Vec = (0..40).map(|i| format!("Filler {i}")).collect(); + let refs: Vec<&str> = names.iter().map(String::as_str).collect(); + scenario.with_library_top(P0, &refs); + scenario.with_library_top(P1, &refs); + let mut runner = scenario.build(); + let mut state = runner.state_mut().clone(); + state.loop_detection = LoopDetectionMode::Interactive; + state.waiting_for = WaitingFor::Priority { player: P0 }; + state.active_player = P0; + state.last_loop_action_sequence.clear(); + for i in 0..frames { + let mut frame = state.clone(); + shape(&mut frame, i); + // Both halves built exactly as `record_loop_detect_sample` builds them. + state + .loop_detect_ring + .push_back(std::sync::Arc::new(crate::types::LoopDetectSample { + normalized: frame.normalize_for_loop(), + live: frame.loop_detect_live_sample(), + })); + } state } - /// Hostile fixture — two-legendary identity binding (memory: verify-the-seam-not-the-line). - /// The tap-cost pin stores the EXACT tapped `ObjectId` (`TargetPin::ByIdentity`), so with two - /// legal untapped legendary creatures on the board the detection re-drive must re-bind to the - /// RECORDED Kilo (402), NOT the decoy. Positive: record tapping Kilo ⇒ offer. Revert-probe - /// (FLIP, run in-test): repoint ONLY the tap-cost pin's identity to the decoy (an equally-legal - /// legendary) on the SAME board + recording ⇒ the re-drive taps the decoy, whose becomes-tapped - /// proliferate trigger (source = decoy) has NO matching pin (the proliferate pin is keyed to - /// Kilo 402) ⇒ `RecastAbort` ⇒ NO offer. If replay ignored the pin identity (re-bound to "any - /// legal legendary" or always Kilo) this mutation would NOT change the outcome — so the flip - /// proves the recorded identity is load-bearing. + /// R20 — RELIEF-PATH BUDGET STARVATION IS COVERAGE, NEVER SOUNDNESS. + /// + /// CR 732.2a. The named regression row for the branch NOT taken (hoist only the primary + /// and let the budget absorb the relief path). A board whose non-exempt stack carries more + /// in-scope chain LINKS than the cap can pay for must REFUSE — no certificate consumed, no + /// offer, no `WaitingFor::LoopShortcut` write — and the refusal must be attributable to + /// the budget rather than to any upstream conjunct. + /// + /// THE BOUND IS PER-LINK, NOT PER-ENTRY, which is why the last entry is CHAINED: the + /// classifier recurses into `sub_ability`, so an N-link chain charges up to N. A per-entry + /// regression passes a per-entry row and fails this one. + /// + /// THREE CONJUNCTS, because `spent == cap` alone proves consumption, not BINDINGNESS: + /// (i) the SAME board offers once the budget stops binding (`ProbeCap::RaisedTwiceLinks`, + /// board-derived so no arbitrary raise is representable) — a matched positive on the + /// constructed board, not on a proxy; (ii) at the shipped cap the refusal is + /// `UnspecifiedChoiceWindow` with `denied == true` at `spent == PROBE_BUDGET`; (iii) a + /// PRE-CHARGE refusal on the same board reads a clean meter, which is the control that + /// keeps `denied` meaningful. + /// + /// (ii)'s VARIANT is reachable only because this board's basis-A match comes from the + /// EQUALITY disjunct: the `||` short-circuits, the charging cover call never runs, and + /// exhaustion lands one gate later in `stack_choices_are_all_specified`. That precondition + /// is carried as an EXECUTABLE reach-guard, not as prose, so a fixture drift to the cover + /// path fails loudly instead of silently flipping the variant. + /// + /// REVERT-PROBE: delete `probe_resolution`'s `try_charge_one` arm ⇒ the exhausted budget + /// falls through to the clone-and-resolve ⇒ the over-budget board OFFERS ⇒ FLIPS. #[test] - fn tap_pin_rebinds_to_recorded_legendary_not_a_decoy() { - let mut state = load_migrated_dump(); + fn r20_an_over_budget_relief_path_refuses_instead_of_certifying() { + use crate::analysis::resource::{loop_states_equal_modulo_resources, PROBE_BUDGET}; + use crate::game::engine::{try_offer_bounded_cycle_shortcut_metered, ProbeCap}; - // Add a SECOND untapped legendary creature P0 controls (a Kilo clone with a fresh id) so - // the Relic tap cost has two legal choices the identity binding must disambiguate. - let decoy_id = ObjectId(state.next_object_id); - state.next_object_id += 1; - let mut decoy = state.objects[&KILO].clone(); - decoy.id = decoy_id; - // Distinct name: CR 704.5j (the legend rule) would otherwise force a ChooseLegend SBA - // between two same-named legends — we want two co-existing legal legendary tap targets. - decoy.name = "Decoy Legend".to_string(); - decoy.base_name = "Decoy Legend".to_string(); - decoy.attachments = Vec::new(); // the clone is NOT the Freed-enchanted creature - decoy.tapped = false; - state.objects.insert(decoy_id, decoy); - state.battlefield.push_back(decoy_id); + // One more entry than the cap can pay for, with the last one CHAINED so the population + // is links rather than entries. + let entries = PROBE_BUDGET as usize + 1; + let state = equality_ring_with_stack(entries, true); - drive_one_live_cycle(&mut state); + // ── reach-guards, all three before any verdict ────────────────────────────────── + assert!( + state.loop_detect_ring.len() >= 2, + "REACH-GUARD: a ring-starved board refuses at the ring gate with a clean meter and \ + this row would pass for the wrong reason" + ); assert_eq!( - state.last_loop_action_sequence.len(), - 2, - "reach-guard: the live cycle recorded the clean 2-step pinned period" + state.stack.len(), + entries, + "REACH-GUARD: the non-exempt population must exceed the cap ({PROBE_BUDGET})" + ); + let prior = &state.loop_detect_ring[state.loop_detect_ring.len() - 2].normalized; + assert!( + loop_states_equal_modulo_resources(prior, &state), + "REACH-GUARD (the (ii) precondition, executable rather than prose): this board must \ + match basis A through the EQUALITY disjunct. On a cover-matched board the charging \ + cover call exhausts FIRST and the refusal is `NoCertification` with the same meter" ); - // Positive: the recorded ByIdentity(Kilo 402) tap pin re-binds to Kilo on replay ⇒ offer. - let intact = at_priority_window(state.clone()); + // ── (i) THE SAME BOARD OFFERS once the budget stops binding ───────────────────── + let (raised, raised_meter) = + try_offer_bounded_cycle_shortcut_metered(&state, false, ProbeCap::RaisedTwiceLinks); assert!( - try_offer_object_growth_shortcut(&intact).is_some(), - "two legal legendaries present + recorded Kilo ⇒ the offer fires" + raised.is_ok(), + "(i) with the cap raised to 2x the board's own link count the SAME board must \ + certify and offer — this is what pins the budget as the binding refusal below, \ + rather than some upstream conjunct. Got {raised:?}, meter {raised_meter:?}" + ); + // Keyed to the POPULATION counter, not to `spent`, and deliberately: `spent` measures + // CHARGING, so a revert-probe that deletes the charge arm would abort this conjunct + // first and mask the flip belonging to (ii). `conjunct6_asks` measures what the gate + // actually examined, which is the evidence (i) is here to give. + assert!( + !raised_meter.denied && raised_meter.conjunct6_asks >= entries as u32, + "(i) the raised arm must have examined the whole non-exempt population without \ + denial; meter {raised_meter:?}" ); - // Revert-probe (FLIP): repoint ONLY the tap-cost pin (its slot source resolves to Relic - // 404) to the decoy. Board, recording, and the proliferate pin (keyed to Kilo 402) are all - // unchanged. - let mut repointed = intact.clone(); - let mut mutated = false; - for step in repointed.last_loop_action_sequence.iter_mut() { - for pin in step.pins.iter_mut() { - if let PinnedDecision::Targets { slot, targets } = pin { - if matches!(&slot.source, YieldTarget::ThisObject { source_id, .. } if *source_id == RELIC) - { - *targets = vec![TargetPin::ByIdentity(YieldTarget::ThisObject { - source_id: decoy_id, - incarnation: None, - trigger_description: None, - })]; - mutated = true; - } - } - } - } + // ── (ii) AT THE SHIPPED CAP: refuse, exhausted, and no offer ──────────────────── + let (refused, meter) = + try_offer_bounded_cycle_shortcut_metered(&state, false, ProbeCap::Shipped); assert!( - mutated, - "reach-guard: the tap-cost pin (slot source Relic) was found + repointed" + matches!(refused, Err(BoundedOfferRefusal::UnspecifiedChoiceWindow)), + "(ii) exhaustion reads `Prompted`, so the step-6 predicate goes false and the \ + refusal is an unspecified window. Got {refused:?}, meter {meter:?}" ); assert!( - try_offer_object_growth_shortcut(&repointed).is_none(), - "repointing the tap pin to the decoy FLIPS the offer OFF ⇒ recorded identity is load-bearing" + meter.denied && meter.spent == PROBE_BUDGET, + "(ii) the cap must be CONSUMED and the denial latched — that pair is the \ + exhaustion witness the refusal variant alone cannot carry. meter {meter:?}" + ); + + // ── (iii) THE CLEAN-METER CONTROL, keyed to a PRE-CHARGE refusal on the SAME board ─ + let mut not_at_priority = state.clone(); + not_at_priority.waiting_for = WaitingFor::DiscardToHandSize { + player: P0, + count: 1, + cards: Vec::new(), + }; + let (control, control_meter) = + try_offer_bounded_cycle_shortcut_metered(¬_at_priority, false, ProbeCap::Shipped); + assert!( + matches!(control, Err(BoundedOfferRefusal::NotAtPriority)), + "(iii) the control arm must refuse UPSTREAM of the first charge; got {control:?}" + ); + assert!( + !control_meter.denied && control_meter.spent == 0, + "(iii) a pre-charge refusal reads a clean meter BY CONTROL-FLOW POSITION — without \ + this control, `denied` would look like a property of refusals in general \ + rather than of exhaustion. meter {control_meter:?}" ); } - /// Hostile fixture — wrong-color drive. The `ManaColor` pin latches the color the player - /// produced (Blue, to pay Freed's `{U}`, CR 608.2d). Positive: Blue ⇒ mana-neutral cycle ⇒ - /// offer. Revert-probe (FLIP, run in-test): relatch the color to Red on the SAME recording ⇒ - /// the re-drive produces Red, Freed's `{U}` untap is unpayable ⇒ the second step aborts ⇒ NO - /// offer. The latched color value is load-bearing. + /// R33 arm (a′2) — THE SELECTION SITE: AN EQUALITY-CERTIFIED CANDIDATE CARRIES NO FROZEN + /// EXEMPTION, EVEN THOUGH ITS WINDOW HAS ONE AVAILABLE. + /// + /// CR 732.2a + CR 608.1. Arms (a)/(b)/(a′1) prove the CONSTRUCTOR keys the subtraction to + /// the certificate value. This arm proves §3 D2's step 4b actually SELECTS the right + /// value: it is the only arm that fails on the round-39 shape (one `BoardCovered` + /// certificate for the whole `equality || cover` disjunction), which every other arm in + /// the row passes unchanged. + /// + /// The fixture is CONSTRUCTED, not fixture-mined: `drain_ring`'s frames are board-equal at + /// every index, so `loop_states_equal_modulo_resources` matches and — by the mutual + /// exclusivity of the two disjuncts (equality = constant depth, cover = strictly growing + /// depth) — `stack_covers` cannot. One stack entry is seeded IDENTICALLY into `current` + /// and into both halves of every retained frame, which is what makes the window carry a + /// non-empty observed-frozen set: the exemption is genuinely AVAILABLE here, and the row + /// is about it being genuinely WITHDRAWN. + /// + /// REVERT-PROBE 3 (the round's signature probe): delete step 4b and let conjunct (6) + /// consume step 3's `touch_cover` directly ⇒ this row FLIPS while (a)/(b)/(a′1)/(c) all + /// still pass — which is exactly why the arm exists. #[test] - fn mana_color_pin_replays_recorded_color() { - let mut state = load_migrated_dump(); - drive_one_live_cycle(&mut state); - let state = at_priority_window(state); + fn r33_equality_certified_candidate_carries_no_frozen_exemption() { + use crate::analysis::resource::{certified_period_touch, PeriodCertification}; + use crate::game::engine::{try_offer_bounded_cycle_shortcut_metered, ProbeCap}; - // Positive: the latched Blue color pays Freed's {U} ⇒ offer. + let state = equality_ring_with_stack(1, false); + + // REACH-GUARD 1: the exemption is genuinely AVAILABLE on this candidate's window — + // otherwise "withdrawn" is indistinguishable from "there was nothing to withdraw". + let live: Vec<&GameState> = state.loop_detect_ring.iter().map(|f| &f.live).collect(); + let window = &live[live.len() - 2..]; + let available = certified_period_touch(window, &state, PeriodCertification::BoardCovered); assert!( - try_offer_object_growth_shortcut(&state).is_some(), - "the recorded Blue mana-color pin completes the mana-neutral cycle ⇒ offer" + !available.frozen_ids.is_empty(), + "REACH-GUARD: the constructed window must carry a non-empty observed-frozen set" ); - // Revert-probe (FLIP): relatch the color to Red. - let mut wrong = state.clone(); - let mut mutated = false; - for step in wrong.last_loop_action_sequence.iter_mut() { - for pin in step.pins.iter_mut() { - if let PinnedDecision::ManaColor { color, .. } = pin { - *color = ManaColor::Red; - mutated = true; + let (outcome, meter) = + try_offer_bounded_cycle_shortcut_metered(&state, false, ProbeCap::Shipped); + + // REACH-GUARD 2: the EQUALITY arm is the one that matched. Without this the row could + // pass on a candidate that never certified, or one that took the cover disjunct. + assert_eq!( + meter.certification, + Some(PeriodCertification::BoardEqualOnly), + "REACH-GUARD: the constructed pair must certify through the EQUALITY disjunct, \ + which is the case this arm is about; outcome {outcome:?}" + ); + + // THE RULING: equality supplies P2 but not P4, so the period carried forward exempts + // NOTHING — observable as conjunct (6) skipping nothing while it really does run. + assert_eq!( + meter.conjunct6_frozen_skips, 0, + "(a′2) step 4b must REBUILD the equality candidate's period with the subtraction \ + withdrawn; a non-zero skip count means the `BoardCovered` touch from step 3 was \ + carried into conjunct (6). meter {meter:?}" + ); + assert!( + meter.conjunct6_asks > 0, + "REACH-GUARD against a vacuous skip count: conjunct (6) must actually have RUN, \ + else `skips == 0` is trivially true. meter {meter:?}" + ); + } + + /// Mill `victim` by one card per retained frame — a constant per-frame library delta, which + /// is a period observed twice at `frames >= 3`. + fn mill_ring(victim: PlayerId, frames: usize) -> GameState { + ring_state(frames, move |frame, i| { + let player = frame + .players + .iter_mut() + .find(|p| p.id == victim) + .expect("seat exists"); + for _ in 0..i { + player.library.pop_back(); + } + }) + } + + /// Drain `victim` by one life per retained frame — a constant per-frame LIFE delta. + /// + /// The counterpart to [`mill_ring`], and the difference is exactly the one basis A turns on: + /// library size is BOARD (`loop_states_equal_modulo_resources` compares it), while life is a + /// PROJECTED resource (`project_out_resources` removes it). So a mill ring can only certify + /// through basis B's `ring_delta_signature`, whereas a drain ring's frames are board-EQUAL + /// at every index and certify through basis A's first disjunct. + /// + /// ⚠ The REASON basis A refuses a mill ring is not uniform across the ring, and an earlier + /// revision of this doc claimed it was ("a mill ring's frames are board-UNEQUAL"). MEASURED + /// in fix round 3 (LOW-5) and recorded at + /// [`a_zero_span_certifying_pair_never_publishes_a_zero_width_period`]: `mill_ring`'s frames + /// are board-unequal at every index EXCEPT the OLDEST, which pops zero cards and IS + /// board-equal (`span = 2`, `eq = true`) — that one is refused by `net_progress_for` on its + /// zero δ instead. Basis A still certifies nothing on a mill ring; only the per-index reason + /// differs. + /// + /// Frame `i` sits `frames - i` life ABOVE the live state, so the newest frame is exactly one + /// period ahead of it and every older frame one more — i.e. the live state is the far end of + /// the period, which is the orientation `ResourceVector::delta(prior, current)` reads. + fn drain_ring(victim: PlayerId, frames: usize) -> GameState { + ring_state(frames, move |frame, i| { + let player = frame + .players + .iter_mut() + .find(|p| p.id == victim) + .expect("seat exists"); + player.life += (frames - i) as i32; + }) + } + + /// A [`drain_ring`] whose stack carries `links` in-scope chain links, seeded IDENTICALLY + /// into `current` and into both halves of every retained frame. + /// + /// Two properties come out of that one construction, which is why both rows share it: + /// board equality survives (so basis A matches on its FIRST disjunct), and every entry + /// sits at the SAME INDEX in every window frame (so the window carries a non-empty + /// observed-frozen set — the thing the certificate is allowed to subtract, or not). + /// + /// Each entry is a MANDATORY, choice-free `LoseLife`, so conjunct (6) can accept it and a + /// refusal is never attributable to an unspecified choice. `chained` gives the LAST entry + /// a `sub_ability`, which the classifier recurses into: that is what makes the budget a + /// per-LINK bound rather than a per-ENTRY one, and what a per-entry regression would miss. + fn equality_ring_with_stack(entries: usize, chained: bool) -> GameState { + use crate::types::ability::{Effect, QuantityExpr, ResolvedAbility}; + use crate::types::game_state::{StackEntry, StackEntryKind}; + use crate::types::identifiers::{CardId, ObjectId}; + use crate::types::LoopDetectSample; + use std::sync::Arc; + + let mut state = drain_ring(P1, 3); + let src = ObjectId(941); + let mut source = crate::game::game_object::GameObject::new( + src, + CardId(0), + P0, + "Frozen Ticker".to_string(), + crate::types::zones::Zone::Battlefield, + ); + source.incarnation = 3; + let lose_one = || { + ResolvedAbility::new( + Effect::LoseLife { + amount: QuantityExpr::Fixed { value: 1 }, + target: None, + }, + vec![], + src, + P0, + ) + }; + let built: Vec = (0..entries) + .map(|i| { + let mut ability = lose_one(); + if chained && i + 1 == entries { + ability.sub_ability = Some(Box::new(lose_one())); + } + StackEntry { + id: ObjectId(951 + i as u64), + source_id: src, + controller: P0, + kind: StackEntryKind::TriggeredAbility { + source_id: src, + ability: Box::new(ability), + condition: None, + trigger_event: None, + description: None, + source_name: String::new(), + subject_match_count: None, + die_result: None, + }, } + }) + .collect(); + let inject = |g: &mut GameState| { + g.objects.insert(src, source.clone()); + g.battlefield.push_back(src); + for e in &built { + g.stack.push_back(e.clone()); } - } - assert!( - mutated, - "reach-guard: the ManaColor pin was found + relatched" + }; + inject(&mut state); + let frames: std::collections::VecDeque> = state + .loop_detect_ring + .iter() + .map(|s| { + let mut normalized = s.normalized.clone(); + let mut live = s.live.clone(); + inject(&mut normalized); + inject(&mut live); + Arc::new(LoopDetectSample { normalized, live }) + }) + .collect(); + state.loop_detect_ring = frames; + state + } + + /// STEP (2) `ProposerIsNotActivePlayer`. CR 732.2a lets the player with priority propose; + /// this conjunct additionally requires that player to be the ACTIVE one, because the ring + /// sampler only samples at `Priority{active_player}` — which is what establishes the + /// proposer held priority at every certified frame. + /// + /// REVERT-PROBE: delete the conjunct ⇒ arm ⓑ stops returning `ProposerIsNotActivePlayer` + /// and falls through to a later conjunct (or an offer) ⇒ FAILS. + #[test] + fn a_non_active_priority_holder_mints_no_bounded_offer() { + let mut state = mill_ring(P1, 3); + + // ⓐ REACH-GUARD / positive control: the SAME ring certifies for the active player, so + // ⓑ's refusal is attributable to the seat and not to an unsatisfied earlier conjunct. + let armed = try_offer_bounded_cycle_shortcut(&state, false); + assert_ne!( + armed, + Err(BoundedOfferRefusal::ProposerIsNotActivePlayer), + "the active player must NOT be refused by step (2); got {armed:?}" ); - assert!( - try_offer_object_growth_shortcut(&wrong).is_none(), - "a Red mana-color pin cannot pay Freed's {{U}} ⇒ the drive aborts ⇒ NO offer" + assert_ne!( + armed, + Err(BoundedOfferRefusal::NoCertification), + "REACH-GUARD: the ring must actually certify, else ⓑ never reaches step (2); \ + got {armed:?}" + ); + + // ⓑ one field reassigned: priority moves to the non-active seat. + state.waiting_for = WaitingFor::Priority { player: P1 }; + assert_eq!( + try_offer_bounded_cycle_shortcut(&state, false), + Err(BoundedOfferRefusal::ProposerIsNotActivePlayer), + "CR 732.2a: the ring sampler gates on `Priority{{active_player}}`, so a proposer \ + who is not the active player did not hold priority at the certified frames" ); } - /// Synthetic positive/negative drive-replay reach-guard (plan §7 unit c). The SAME recorded - /// 2-step period is driven WITH pins (offer) and WITHOUT (abort). The `len()==2` anchor holds - /// in BOTH variants, so the negative's None is a drive-abort at the unpinned - /// `PayCost{TapCreatures}`, NOT a vacuous "no sequence to drive" upstream short-circuit - /// (memory: discriminator-vacuous-if-upstream-conjunct-dominates). + /// STEP (5) `AdvantageOnlyCycle`. CR 732.2a: this producer's whole claim is that it measured + /// a CR 704 threshold INSIDE the loop and divided the headroom by the per-period magnitude. + /// An `Advantage` cycle drives nobody toward such a threshold, so it has no bound to state + /// and belongs to Path C's revocable-infinity mark instead. + /// + /// The pair is a SELF-mill against an OPPONENT-mill, which is exactly the discrimination + /// `classify_win_kind` makes: `Decking` requires "an unbounded downward library delta on a + /// player other than the loop's controller", so a controller milling themselves falls + /// through to `Advantage`. Without this conjunct that self-mill takes Path D and is offered + /// a bound — `elimination_bounds` narrows on `narrow(p.library.len(), -library_delta[p])` + /// for the PROPOSER too, so it happily produces one. + /// + /// REVERT-PROBE: delete the conjunct ⇒ arm ⓑ stops returning `AdvantageOnlyCycle` ⇒ FAILS. #[test] - fn drive_replay_requires_the_recorded_pins() { - let mut state = load_migrated_dump(); - drive_one_live_cycle(&mut state); - let state = at_priority_window(state); + fn a_self_mill_advantage_cycle_mints_no_bounded_offer() { + // ⓐ POSITIVE CONTROL: the SAME shape aimed at the OPPONENT is `Decking`, not + // `Advantage`, so step (5) must let it through. Without this arm ⓑ would pass for a + // fixture that simply never certifies. + let opponent_mill = try_offer_bounded_cycle_shortcut(&mill_ring(P1, 3), false); + assert_ne!( + opponent_mill, + Err(BoundedOfferRefusal::AdvantageOnlyCycle), + "CR 104.3c: milling an OPPONENT is a win kind, not an advantage engine; got \ + {opponent_mill:?}" + ); + assert_ne!( + opponent_mill, + Err(BoundedOfferRefusal::NoCertification), + "REACH-GUARD: the mill ring must certify, else neither arm reaches step (5); got \ + {opponent_mill:?}" + ); - // Anchor (holds in BOTH variants): the recorded 2-step period is present. + // ⓑ the same period, victim = the proposer. assert_eq!( - state.last_loop_action_sequence.len(), - 2, - "reach-guard anchor: the recorded period exists ⇒ any None is a drive-abort, not a missing seq" + try_offer_bounded_cycle_shortcut(&mill_ring(P0, 3), false), + Err(BoundedOfferRefusal::AdvantageOnlyCycle), + "CR 732.2a: a cycle that drives nobody toward a CR 704 threshold has no bound to \ + state, so it belongs to Path C's revocable-infinity mark, not to this seam" ); + } - // Positive: the recorded pins drive the replay to completion ⇒ offer. + /// STEP (7) `NoNarrowedLegalCount`, LOWER end. `elimination_bounds` returning 0 states that + /// no repetition is legal at all — a seat is already AT the CR 704 threshold's last legal + /// step — and `1..MAX_SHORTCUT_CYCLES` refuses it rather than minting a `Fixed(0)` offer + /// whose acceptance would commit nothing while spending the CR 732.2b window. + /// + /// ⚠ SCOPE, stated because the reviewer's probe targeted the OTHER end. Widening the check + /// to `1..=MAX_SHORTCUT_CYCLES` flips nothing in the tracked suite, and that is not an + /// oversight: the upper end is DOMINATED by step (5). A bound of exactly + /// `MAX_SHORTCUT_CYCLES` means no axis narrowed, i.e. the period drives no living seat + /// toward any CR 704 threshold, which is precisely what `classify_win_kind` reports as + /// `Advantage` — so such a cycle has already been refused two conjuncts earlier. This row + /// therefore covers the reachable end and names the reason the other is unreachable rather + /// than leaving it as an untested branch of unknown status. + /// + /// REVERT-PROBE: change the range to `0..MAX_SHORTCUT_CYCLES` ⇒ arm ⓑ mints an offer ⇒ FAILS. + #[test] + fn a_bound_of_zero_mints_no_bounded_offer() { + // ⓐ POSITIVE CONTROL: a full library certifies and narrows to a legal count. + let healthy = try_offer_bounded_cycle_shortcut(&mill_ring(P1, 3), false); assert!( - try_offer_object_growth_shortcut(&state).is_some(), - "with the recorded pins the replay completes ⇒ offer" + healthy.is_ok(), + "REACH-GUARD: the un-narrowed fixture must OFFER, else ⓑ's refusal could come from \ + any earlier conjunct; got {healthy:?}" ); - // Negative: strip the pins from the SAME period ⇒ the replay hits the unpinned tap cost ⇒ - // abort ⇒ NO offer. The anchor proves the None is the drive-abort, not an empty sequence. - let mut unpinned = state.clone(); - for step in unpinned.last_loop_action_sequence.iter_mut() { - step.pins.clear(); - } + // ⓑ the same ring, with the victim's library already empty at the offer beat: CR 104.3c + // headroom 0 ⇒ `0 / 1 == 0` ⇒ no legal repetition count. + let mut state = mill_ring(P1, 3); + state + .players + .iter_mut() + .find(|p| p.id == P1) + .expect("seat exists") + .library + .clear(); assert_eq!( - unpinned.last_loop_action_sequence.len(), - 2, - "reach-guard anchor: the period is still present in the negative variant" + try_offer_bounded_cycle_shortcut(&state, false), + Err(BoundedOfferRefusal::NoNarrowedLegalCount), + "CR 104.3c: with zero cards left there is no legal repetition, and a `Fixed(0)` \ + offer would spend the CR 732.2b response window to commit nothing" + ); + } + + /// FIX ROUND 2 — basis A's `span >= 1` fail-closed guard, which shipped in fix round 1 with + /// no row of its own. + /// + /// The basis-A walk is `.rev()`, so the FIRST candidate it tries is `ring.last()` — the + /// sample `pass_priority_once_with_pipeline` recorded at this very beat, whose span from the + /// current state is 0. In a production trajectory that pair carries a zero δ and dies on + /// `net_progress_for`, but nothing structural forces that: this fixture's newest retained + /// frame is board-equal to the live state and its δ IS net progress (the reach-guards below + /// assert exactly that, so the guard is provably reached rather than assumed to be). + /// + /// The fixture is a [`drain_ring`], NOT a [`mill_ring`], and the difference is load-bearing: + /// library size is BOARD, so basis A certifies NOTHING on a mill ring, every mill-ring row in + /// this module is really exercising basis B, and a guard inside the basis-A walk is + /// unreachable from that fixture. + /// + /// ⚠ Basis A is a DISJUNCTION, and the board-equality reach-guard below — which does FAIL on + /// `mill_ring(P1, 3)` — measures only its FIRST half. Fix round 3 (LOW-5) MEASURED the second, + /// `loop_states_cover_modulo_growth_pinned`, rather than leaving the wider claim resting on + /// the narrower evidence: a probe evaluating both disjuncts plus `net_progress_for` at every + /// `(prior, live)` pair of `mill_ring(P1, 3)` (temporary `#[test]` in this module, run with + /// `cargo test -p phase-engine --lib -- game::engine::bounded_offer_conjunct_tests:: --nocapture`, + /// then reverted) reports `cover = false` at ALL THREE ring indices. Both halves refuse, so + /// the conclusion holds. + /// + /// The probe also corrects the REASON at one index, which the board-inequality phrasing had + /// wrong: `mill_ring`'s OLDEST frame pops zero cards, so it IS board-equal to the live state + /// (`span = 2`, `eq = true`) and is refused by `net_progress_for` on its zero δ, not by board + /// inequality. Newest-first, the `.rev()` walk therefore refuses `span = 0` at `span >= 1`, + /// `span = 1` on `eq`/`cover` both false, and `span = 2` on net progress. (`drain_ring(P1, 3)` + /// under the same probe: `eq = true` and `net = true` at every index, `cover = false` + /// throughout — so it certifies through the FIRST disjunct at `span = 1`, which is the pair + /// this row's guard is about.) + /// + /// A published `frames_per_period: 0` would mean "one repetition spans no retained frames", + /// which `drive_one_shortcut_cycle`'s delimiter cannot honour — `frames_this_cycle >= 0` + /// holds before a single beat is driven, so the first settle beat would complete a "cycle" + /// that moved nothing, and `materialize_fixed_shortcut`'s conformance check would then drop + /// every one of them. The bounded offer would be minted, accepted, and commit nothing. + /// + /// REVERT-PROBE: delete `span >= 1 &&` from the basis-A closure ⇒ the span-0 pair certifies + /// first and the published `frames_per_period` is 0 ⇒ this row FAILS. + #[test] + fn a_zero_span_certifying_pair_never_publishes_a_zero_width_period() { + use crate::analysis::resource::{loop_states_equal_modulo_resources, ResourceVector}; + + let state = drain_ring(P1, 3); + + // ── REACH-GUARDS: the span-0 pair really is a certifying candidate on this fixture, so + // the guard is what refuses it. Both halves of basis A's first disjunct, asserted on + // the exact pair the `.rev()` walk reaches first. + let newest = state + .loop_detect_ring + .back() + .expect("the fixture builds a ring") + .normalized + .clone(); + assert!( + loop_states_equal_modulo_resources(&newest, &state), + "REACH-GUARD: the newest retained frame must be board-equal to the live state, else \ + the span-0 pair fails the board predicate and the guard is never the refuser" + ); + let span_zero_delta = ResourceVector::delta( + &ResourceVector::snapshot(&newest), + &ResourceVector::snapshot(&state), ); assert!( - try_offer_object_growth_shortcut(&unpinned).is_none(), - "without the pins the drive aborts at the unpinned tap cost ⇒ NO offer" + span_zero_delta.net_progress_for(P0), + "REACH-GUARD: the span-0 pair must carry net progress, else `net_progress_for` \ + refuses it first and this row would pass without the guard existing; δ \ + {span_zero_delta:?}" + ); + + let offer = try_offer_bounded_cycle_shortcut(&state, false) + .expect("REACH-GUARD: the fixture must OFFER, else nothing publishes a period"); + let WaitingFor::LoopShortcut { certificate, .. } = &offer else { + panic!("a bounded offer is a LoopShortcut window; got {offer:?}") + }; + let per_cycle = certificate + .per_cycle + .as_ref() + .expect("a bounded offer publishes its per-period signature"); + assert!( + per_cycle.frames_per_period >= 1, + "CR 732.2a: a repetition spans at least one retained ring frame — a published 0 is a \ + delimiter no drive can honour; got {}", + per_cycle.frames_per_period ); } - /// [LOW-1] declined-axis ∞ lifecycle — characterization/regression guard (memory: - /// combo-interruptibility-acceptance-criterion). A declined `Counters`/`Life` axis leaves its - /// ∞ capability marker in `unbounded_resources` intentionally (CR 732.2b never forces a - /// shortcut). This test guards the MEASURED retirement path (a) documented at the boundary - /// seam: the empty-stack offer hook `try_offer_object_growth_shortcut` (engine.rs:472) is NOT - /// gated by existing ∞ marks, so a later genuine re-detection RE-OFFERS the loop and can - /// re-collapse the declined axis once the observer is gone. + // ─────────────────────────────────────────────────────────────────────────────────── + // The two CARRIER rows. Both are about WHICH object identifies a retained beat, an axis + // that has exactly one behavioural surface (`PeriodVerdicts::frame_ix`) and one source + // surface (this file), so each ships with one arm on each. + // ─────────────────────────────────────────────────────────────────────────────────── + + /// Symbol-anchored extent of a column-0 `fn` in THIS file, as `(head, end)` line indices — + /// the §6 R8 self-census extractor: signature line to the first column-0 `}`. + #[cfg(test)] + fn engine_fn_extent(lines: &[&str], signature: &str) -> (usize, usize) { + let head = lines + .iter() + .position(|l| l.starts_with(signature)) + .unwrap_or_else(|| panic!("extractor found no column-0 `{signature}`")); + let end = lines[head..] + .iter() + .position(|l| *l == "}") + .map(|i| head + i) + .unwrap_or_else(|| panic!("`{signature}` has no column-0 closing brace")); + assert!( + end - head > 5, + "`{signature}` extent {head}-{end} is degenerate — the extractor is not keyed" + ); + (head, end) + } + + /// Code lines (comments excluded, per R8's ruling: a comment reads nothing) of an extent + /// that contain `needle`, as absolute line indices. + #[cfg(test)] + fn engine_code_hits(lines: &[&str], extent: (usize, usize), needle: &str) -> Vec { + (extent.0..=extent.1) + .filter(|i| !lines[*i].trim_start().starts_with("//")) + .filter(|i| lines[*i].contains(needle)) + .collect() + } + + /// `Arc::as_ptr` BEAT IDENTITY IS THE SAMPLE, NOT ONE OF ITS HALVES — the U0 ruling that + /// had no falsifier until `FrameIx` existed. /// - /// DISCRIMINATING LEG (the re-offer assertion): with a pre-existing declined ∞ mark injected - /// for P0, the offer STILL fires. If a future regression ∞-gated the offer hook (e.g. to - /// suppress re-offering a declined axis), this flips to `None`. Positive control / reach-guard: - /// the SAME state WITHOUT the mark also offers (proving the mark is what the assertion isolates, - /// and the recorded 2-step period is intact — a `None` would be a drive-abort, not a missing - /// sequence). + /// CR 732.2a. U0 split each retained ring element into a CR 104.4b comparand + /// (`normalized`) and a CR 732.2a evaluable (`live`), and left `drive_one_shortcut_cycle`'s + /// ring-advance detector on `Arc::as_ptr` — the SAMPLE's allocation — with the ruling that + /// it must never be re-based onto a field address. U0 could not assert that: nothing at + /// that step distinguished the two halves as identities. U3's verdict door does. + /// + /// ARM 1, BEHAVIOURAL — the door's identity domain is the LIVE half and ONLY it. + /// [`crate::analysis::resource::PeriodVerdicts::frame_ix`] resolves by `std::ptr::eq` + /// against the very table `verdict` indexes, so a beat identified by the `normalized` + /// half is a DIFFERENT identity from the one every period-touch consumer keys on. The two + /// field addresses are asserted distinct first, which is what makes the choice load-bearing + /// rather than a distinction without a difference. + /// + /// ARM 2, STRUCTURAL — the detector still reads the sample. Two sites, both + /// `loop_detect_ring.back().map(std::sync::Arc::as_ptr)`, and NO raw-pointer field + /// address anywhere in the extent. + /// + /// REVERT-PROBE: re-base either site to `.map(|s| &s.normalized as *const _)` ⇒ arm 2's + /// site count goes 2 → 1 AND its `as *const` count goes 0 → 1 ⇒ FLIPS. (Arm 1 is + /// deliberately NOT reachable by that edit — it pins the property the edit would violate, + /// so the two arms partition "is the rule still true" from "is the code still obeying it".) #[test] - fn declined_infinity_mark_does_not_suppress_reoffer() { - use crate::analysis::resource::ResourceAxis; + fn arc_as_ptr_beat_identity_is_the_sample_not_one_of_its_halves() { + use crate::analysis::resource::PeriodVerdicts; - let mut driven = load_migrated_dump(); - drive_one_live_cycle(&mut driven); - let base = at_priority_window(driven); + // ── ARM 1: behavioural ─────────────────────────────────────────────────────────── + let state = ring_state(3, |frame, i| { + frame.turn_number += i as u32; + }); + assert_eq!( + state.loop_detect_ring.len(), + 3, + "REACH-GUARD: the ring must carry samples, else the universals below are vacuous" + ); + // Built exactly as `bounded_cycle_offer` builds its `ring_live` — the CR 732.2a + // evaluable half. The binding is named differently ON PURPOSE: a verbatim copy of the + // production line makes the carrier revert-probe (a whole-line replace of that line) + // match twice and silently no-op, which is how the probe for the sibling row below + // failed to apply on its first run. + let evaluable: Vec<&GameState> = state.loop_detect_ring.iter().map(|f| &f.live).collect(); + let verdicts = + PeriodVerdicts::for_period_with_cap(&evaluable, &state, P0, 0, super::CapAuthority(())); + for (i, sample) in state.loop_detect_ring.iter().enumerate() { + assert!( + !std::ptr::eq(&sample.live, &sample.normalized), + "sample {i}: the two halves must be DISTINCT addresses, else `beat identity \ + is the sample, not a half` is a distinction without a difference" + ); + assert!( + verdicts.frame_ix(&sample.live).is_some(), + "sample {i}: the verdict door's frame table IS the live half — this is the \ + identity every period-touch consumer keys on" + ); + assert!( + verdicts.frame_ix(&sample.normalized).is_none(), + "sample {i}: the comparand half is NOT in the door's domain. A beat identity \ + based on `&s.normalized` would therefore name an object no `FrameIx` can \ + ever resolve — that is the concrete harm the U0 ruling forbids" + ); + } - // Reach-guard anchor: the recorded period is present (a `None` below is a real gating - // decision, never an empty-sequence artifact). + // ── ARM 2: structural ──────────────────────────────────────────────────────────── + let src = include_str!("engine.rs"); + let lines: Vec<&str> = src.lines().collect(); + let extent = engine_fn_extent(&lines, "fn drive_one_shortcut_cycle("); + // Needles ASSEMBLED at runtime so this test's own source cannot be counted by its own + // instrument. + let sample_identity = format!("loop_detect_ring.back().map(std::sync::Arc::{}ptr)", "as_"); + let field_address = format!("as {}const", '*'); assert_eq!( - base.last_loop_action_sequence.len(), + engine_code_hits(&lines, extent, &sample_identity).len(), 2, - "reach-guard: the live cycle recorded the clean 2-step pinned period" + "the ring-advance detector must read the SAMPLE's allocation at both its before \ + and after sites, in {}-{}", + extent.0 + 1, + extent.1 + 1 ); - // Positive control: without any ∞ mark the intact loop re-derives the offer. + assert_eq!( + engine_code_hits(&lines, extent, &field_address).len(), + 0, + "no raw-pointer FIELD address may appear in the detector's extent — that is the \ + re-basing the U0 ruling forbids" + ); + // POSITIVE CONTROL against a dead grep, same extractor and same filter. assert!( - try_offer_object_growth_shortcut(&base).is_some(), - "positive control: the intact loop offers when no ∞ mark is present" + !engine_code_hits(&lines, extent, "frames_this_cycle").is_empty(), + "the instrument must be able to find a token that IS there" ); + assert!( + engine_code_hits(&lines, extent, "certified_period_touch").is_empty(), + "…and must not find one that is not" + ); + } - // Inject a pre-existing DECLINED ∞ axis for P0 (as if an earlier boundary declined the life - // axis and left it ∞-marked for manual play). The offer hook reads `waiting_for` + stack + - // `samples()` + `last_loop_action_sequence` — never `unbounded_resources` — so the mark - // must NOT suppress the re-offer. - let mut marked = base.clone(); - marked.mark_unbounded_loop(P0, &[ResourceAxis::Life(P0)]); + /// R27 (a2), STRUCTURAL HALF — THE PERIOD-TOUCH WINDOW IS CARRIED BY THE `live` HALF. + /// + /// CR 732.2a + CR 104.4b. The behavioural half + /// (`analysis::resource::tests::r27_a2_every_announced_pair_carries_an_unnormalized_evaluation_board`) + /// builds its own window, so it cannot flip on an edit to the MINT's carrier. This arm is + /// that edit's detector: `bounded_cycle_offer` builds exactly two ring vecs — the CR 104.4b + /// comparand from `&f.normalized` and the CR 732.2a evaluable from `&f.live` — and every + /// `certified_period_touch` window inside `certified_bounded_cycle_offer` is sliced from + /// the evaluable one. + /// + /// REVERT-PROBE: point `ring_live` at `&f.normalized` (rounds 13–33's carrier) ⇒ the + /// `&f.live` count goes 1 → 0 ⇒ FLIPS. + #[test] + fn the_period_touch_window_is_carried_by_the_live_half() { + let src = include_str!("engine.rs"); + let lines: Vec<&str> = src.lines().collect(); + let mint = engine_fn_extent(&lines, "fn bounded_cycle_offer("); + let live_needle = format!("&f.{}", "live"); + let norm_needle = format!("&f.{}", "normalized"); + + let live_hits = engine_code_hits(&lines, mint, &live_needle); + let norm_hits = engine_code_hits(&lines, mint, &norm_needle); + assert_eq!( + live_hits.len(), + 1, + "exactly ONE evaluable ring vec is built, in {}-{}", + mint.0 + 1, + mint.1 + 1 + ); + assert_eq!(norm_hits.len(), 1, "…and exactly one comparand ring vec"); assert!( - marked - .unbounded_resources - .get(&P0) - .is_some_and(|axes| axes.contains(&ResourceAxis::Life(P0))), - "reach-guard: the declined ∞ Life mark is present on the probed state" + lines[live_hits[0]].contains("ring_live"), + "the evaluable half must be the one bound to `ring_live`; line {} reads `{}`", + live_hits[0] + 1, + lines[live_hits[0]].trim() ); + + let certified = engine_fn_extent(&lines, "fn certified_bounded_cycle_offer<'a>("); + let touch_needle = format!("certified_period{}touch(", '_'); + let touch_sites = engine_code_hits(&lines, certified, &touch_needle); assert!( - try_offer_object_growth_shortcut(&marked).is_some(), - "the empty-stack offer hook is NOT ∞-gated: a persisted declined ∞ axis does not \ - suppress a genuine re-detection re-offering the loop (CR 732.2a / CR 732.2b)" + touch_sites.len() >= 2, + "REACH-GUARD: the certification step must actually call the period touch; found \ + {} sites", + touch_sites.len() ); + for site in &touch_sites { + assert!( + lines[*site].contains("window"), + "every period-touch call must be handed a WINDOW, never a raw ring; line {} \ + reads `{}`", + site + 1, + lines[*site].trim() + ); + } + let window_bindings = engine_code_hits(&lines, certified, "let window"); + assert!( + !window_bindings.is_empty(), + "REACH-GUARD: the windows must be bound inside this extent" + ); + for binding in &window_bindings { + assert!( + lines[*binding].contains("ring_live"), + "every window is sliced from the EVALUABLE ring; line {} reads `{}`", + binding + 1, + lines[*binding].trim() + ); + } } } diff --git a/crates/engine/tests/integration/kilo_live_offer_from_real_dump.rs b/crates/engine/tests/integration/kilo_live_offer_from_real_dump.rs index e23e4d0b3a..5a812e05e2 100644 --- a/crates/engine/tests/integration/kilo_live_offer_from_real_dump.rs +++ b/crates/engine/tests/integration/kilo_live_offer_from_real_dump.rs @@ -62,8 +62,12 @@ fn load_migrated_dump() -> GameState { )); let envelope: serde_json::Value = serde_json::from_str(&json).expect("dump envelope parses as JSON"); + // Decode AS `PersistedGameState` rather than decoding a bare `GameState` and wrapping + // it in `Raw`: only the former runs `reject_legacy_raw_prompt_authority` and + // `decode_persisted_resolution_state`, which is the rest of the production chokepoint. + // `.expect(..)`, not `?`: `into_game_state` returns `GameState`, not `Result`. serde_json::from_value::(envelope["gameState"].clone()) - .expect("the real 4p gameState restores through the persisted ingress") + .expect("gameState deserializes through the production decoder") .into_game_state() } @@ -165,6 +169,20 @@ fn drive_one_live_cycle(state: &mut GameState) { /// unreplayable. /// - FIX-2 (counter-growth cover disjunct) — the completed drive's +1-charge frames fail /// `loop_states_equal_modulo_resources`. +/// +/// R4c — NAMED ACCEPTANCE ARM for the player-choice legality authority (CR 115.10a). Routing +/// `resolve_target`'s `TargetPin::Player` arm through the CHOICE authority +/// (`players::player_exists_for_choice`) rather than the TARGET one must not suppress a +/// shipped offer on a REAL dump, and this row is what says so: if a later change routes that +/// arm through `targeting::player_is_legal_target`, the over-veto class returns and this row +/// must still pass — so it is the acceptance side of the pair whose refusal side is +/// `analysis::decision_template::tests::a_shrouded_seat_is_untargetable_yet_still_choosable_ +/// at_the_pin_recheck`. +/// +/// ⚠ WHAT THIS ROW DOES NOT WITNESS, stated so nobody credits it with more than it covers: +/// this dump's pins are `ByIdentity` and `ManaColor`, NOT `TargetPin::Player`, so the Player +/// arm is not on its path at all. It is an acceptance arm for the offer PIPELINE, not a +/// witness for the Player-pin seam; that witness is R2b. #[test] fn kilo_migrated_dump_fires_object_growth_offer() { let mut state = load_migrated_dump(); diff --git a/crates/engine/tests/integration/loop_shortcut.rs b/crates/engine/tests/integration/loop_shortcut.rs index b570eba2a0..5230ca4205 100644 --- a/crates/engine/tests/integration/loop_shortcut.rs +++ b/crates/engine/tests/integration/loop_shortcut.rs @@ -190,7 +190,9 @@ fn setup_3p_draw(mode: LoopDetectionMode) -> (GameRunner, ObjectId) { /// 3-player SUBSET-LETHAL loop: the SAME proven-detected constant-depth mutual drain as /// `setup_2p_drain` (P0's `DRAIN_CLERIC` + `BLOOD_SIPPER`), embedded in a 3p pod where P2 is -/// IMMUNE to life loss (CR 119.8 "you can't lose life"). So the cycle drains ONLY P1 (sole +/// IMMUNE to life loss (CR 101.2 — a "can't" effect takes precedence over the trigger's +/// life-loss instruction; cf. CR 119.8, which governs only life EXCHANGES, life +/// REDISTRIBUTION and pay-life COSTS, none of which happens here). So the cycle drains ONLY P1 (sole /// faller); P2 is a bystander with per-cycle life delta 0 (a second non-faller). Living /// partition each cycle: fallers = {P1}, non-fallers = {P0, P2} — so `live_mandatory_loop_winner` /// refuses to name a winner (CR 104.2a). P1 starts very high so it never dies inside the drive @@ -220,7 +222,8 @@ fn setup_3p_subset_lethal(mode: LoopDetectionMode) -> (GameRunner, ObjectId) { /// (EQUAL — required by `live_mandatory_loop_winner`'s CR 704.3 simultaneity floor: fallers die in /// ONE SBA event, so unequal lives are not a determinate single-winner shape), P2 = 0 /// (life-loss-immune: CR 101.2 — a "can't" effect takes precedence over the trigger's life-loss -/// instruction; cf. CR 119.8 for the same const elsewhere in this file). Living partition each +/// instruction; cf. CR 119.8, which governs only life EXCHANGES, life REDISTRIBUTION and +/// pay-life COSTS, none of which happens here). Living partition each /// cycle: fallers = {P0, P1}, nonfallers = {P2} ⇒ len == 1 ⇒ the engine NATURALLY latches /// `predicted_winner = Some(P2)` — a winner who controls no loop enabler and is not the proposer. /// No injection. @@ -304,10 +307,42 @@ fn drive_collect(runner: &mut GameRunner, cap: usize) -> (Vec, Waitin /// {1, 2, 3, 4, 8, 24} it holds at 2 and 8 and not at 1/3/4/24 (period 6), so inspecting only /// the terminal state would report `false` on a perfectly primed loop. The scan short-circuits /// at the first hit — measured 5.6–17.5 ms per drive, priming at beat 2. -fn drive_collect_primed(runner: &mut GameRunner, cap: usize) -> (Vec, WaitingFor, bool) { +/// +/// # PR-7 Phase 5b — the DECLINE arm, and why the guard would otherwise hollow out +/// +/// These boards now raise a natural bounded CR 732.2a offer. A `WaitingFor::LoopShortcut` is +/// neither `Priority` nor `OrderTriggers`, so without the arm below the break test fires at +/// the offer and the drive ends BEFORE recurrence can be witnessed — every caller's `primed` +/// reach-guard would then report `false` on a perfectly primed loop, i.e. the guard fails for +/// a reason that has nothing to do with what it guards. +/// +/// The remedy re-grounds each guard THROUGH the offer rather than around it: decline and keep +/// driving. Declining is a PASS-THROUGH, not an assertion — these rows' claims are about the +/// CROWN, not about the offer — and the declined offers are returned so a caller that wants to +/// assert on one can (`.first()`), and so the number of declines is reportable (`.len()`). +/// +/// MEASURED CONSEQUENCE: `DeclineShortcut` is a deliberate action and invalidates the ring +/// (`apply_action`'s deliberate-action ring invalidation), so the recurrence witness must be +/// re-accumulated after each decline and the caps tuned against an un-cleared ring no longer +/// hold. See `PRIMED_LOOP_BEATS`. +fn drive_collect_primed( + runner: &mut GameRunner, + cap: usize, +) -> (Vec, WaitingFor, bool, Vec) { let mut all: Vec = Vec::new(); let mut primed = false; + let mut declined: Vec = Vec::new(); for _ in 0..cap { + // Two separate `matches!` guards, not one `match`: the first borrow ends before + // `act` needs `&mut`. + if matches!(runner.state().waiting_for, WaitingFor::LoopShortcut { .. }) { + declined.push(runner.state().waiting_for.clone()); + let result = runner + .act(GameAction::DeclineShortcut) + .expect("DeclineShortcut is legal at a LoopShortcut window"); + all.extend(result.events); + continue; + } if !matches!( runner.state().waiting_for, WaitingFor::Priority { .. } | WaitingFor::OrderTriggers { .. } @@ -321,10 +356,10 @@ fn drive_collect_primed(runner: &mut GameRunner, cap: usize) -> (Vec, primed = state .loop_detect_ring .iter() - .any(|prior| loop_states_equal_modulo_resources(prior, state)); + .any(|prior| loop_states_equal_modulo_resources(&prior.normalized, state)); } } - (all, runner.state().waiting_for.clone(), primed) + (all, runner.state().waiting_for.clone(), primed, declined) } // ────────────────────────────── T-OFF ────────────────────────────── @@ -913,6 +948,7 @@ fn loop_shortcut_acting_player_reads_proposer() { win_kind: WinKind::LethalDamage, mandatory: false, residual_board_delta: BoardDelta::default(), + per_cycle: None, }; let wf_a = WaitingFor::LoopShortcut { proposer: P1, @@ -937,6 +973,7 @@ fn loop_shortcut_acting_player_reads_proposer() { unbounded: vec![], win_kind: WinKind::LethalDamage, template: None, + per_cycle: None, }; let wf_r = WaitingFor::RespondToShortcut { player: P2, @@ -1192,6 +1229,13 @@ fn interactive_queued_opponent_concede_no_deadlock() { /// suppression does not touch, so the ring still fills and this guard still reports primed. /// A negative "did not crown" test cannot distinguish a refused classification from a disabled /// one; the positive-side tests named above are what cover it. +/// +/// PR-7 Phase 5b — the cap was RE-MEASURED, not re-derived. `DeclineShortcut` is a deliberate +/// action and invalidates the ring, so the decline arm [`drive_collect_primed`] gained could in +/// principle have pushed the recurrence witness past this cap. Measured on this tree: it does +/// not — all three rows below still witness recurrence at 24 with the arm live, so the swept +/// value stands unchanged. The arm's liveness is not assumed either: deleting it drops all +/// three to `primed == false` / "0 bounded offers declined". const PRIMED_LOOP_BEATS: usize = 24; /// D2: a 3p loop that drains ONLY P1 (P2 a bystander, life delta 0) must NOT crown. @@ -1207,11 +1251,20 @@ const PRIMED_LOOP_BEATS: usize = 24; /// no-crown assertion below, which is the sole discriminator here: under that mutation the /// event-scan assertion measurably stays TRUE (no `GameOver{Some}` lands in the collected /// events) at every cap from 4 to 100. (Passes today, proving the gate holds.) +/// +/// PR-7 Phase 5b: this class now also raises a bounded CR 732.2a offer, so the row's former +/// "must NOT raise a LoopShortcut offer" clause is superseded and replaced by a positive +/// discriminator on `predicted_winner`. See the comment at that assertion. Two further +/// revert-probes, each flipping a DIFFERENT assertion so neither dominates the other: +/// * make `try_offer_bounded_cycle_shortcut` refuse unconditionally ⇒ `declined` is empty ⇒ +/// the `offered` `let-else` panics, while both no-CROWN assertions stay green. +/// * delete the `DeclineShortcut` arm from [`drive_collect_primed`] ⇒ the drive breaks at the +/// offer ⇒ `primed == false` ⇒ the trailing reach-guard FAILS. #[test] fn interactive_3p_subset_lethal_does_not_crown() { let (mut runner, kickoff) = setup_3p_subset_lethal(LoopDetectionMode::Interactive); let _ = runner.cast(kickoff).resolve(); - let (events, wf, primed) = drive_collect_primed(&mut runner, PRIMED_LOOP_BEATS); + let (events, wf, primed, declined) = drive_collect_primed(&mut runner, PRIMED_LOOP_BEATS); // Positive reach-guard: the drain loop genuinely ran on P1 while P2 stayed untouched — we // are in the subset-lethal regime the gate must refuse, not an unrelated upstream no-op. @@ -1237,10 +1290,89 @@ fn interactive_3p_subset_lethal_does_not_crown() { .any(|e| matches!(e, GameEvent::GameOver { winner: Some(_) })), "no GameOver{{Some}} event may be emitted for a subset-lethal loop" ); - // No offer either: the bridge does not OFFER a shortcut for a non-winner loop. - assert!( - !matches!(wf, WaitingFor::LoopShortcut { .. }), - "subset-lethal loop must NOT raise a LoopShortcut offer, got {wf:?}" + // PR-7 Phase 5b — the SUPERSEDED clause, replaced by its positive discriminator. + // + // This row used to assert `!matches!(wf, WaitingFor::LoopShortcut { .. })`. That + // expectation is superseded, not violated: a subset-lethal drain that crowns nobody is + // the exact class the bounded CR 732.2a offer exists to serve, so the class now OFFERS. + // The no-CROWN claims above are unchanged and are still the row's soundness content. + // + // Deleting a negative assertion silently would leave the row weaker than it was, so it is + // replaced by a POSITIVE assertion on the field that separates the two classes: a bounded + // offer must carry `predicted_winner: None`. A `Some(winner)` here would mean the offer + // came from Path A — i.e. something DID crown after all — which is exactly what the two + // assertions above forbid. + let offered = declined.first(); + let Some(WaitingFor::LoopShortcut { + predicted_winner, + certificate, + .. + }) = offered + else { + panic!( + "PR-7 5b: this class now OFFERS the bounded shortcut, and the drive above declined \ + every offer it saw; got {} declined offers, terminal {wf:?}", + declined.len() + ); + }; + assert_eq!( + *predicted_winner, None, + "the offer must carry predicted_winner: None — a Some(winner) here would mean Path A \ + crowned after all, contradicting the CR 104.2a assertions above" + ); + // BASIS: measured **A** (direct recurrence) — instrumenting the `basis_a` match in + // `try_offer_bounded_cycle_shortcut` prints `BASIS=A turn=2 phase=PreCombatMain ring=3` at + // this row's offer beat, which is consistent with `primed` below witnessing exactly basis + // A's first disjunct. `ring_delta_signature` — the only function the CR 703.1 + // turn-position conjunct modifies — is reached ONLY from the `None =>` arm, so this row is + // orthogonal to that conjunct in both directions. + // + // HONEST SCOPE OF THE ASSERTION BELOW: `frames_per_period` is a TRIPWIRE on the period's + // WIDTH, not a proof of basis. Basis B derives `k` from 1 upward, so a k==1 basis-B offer + // publishes the same value as a 1-frame basis-A one (the + // `dina_untargeted_drain_4p_offers_at_three_live_opponents` row is exactly that case). + // + // ⚠ VALUE CORRECTED 1 → 2. The NUMBER is the small half of the correction; the MECHANISM + // is the half worth carrying forward, because it names a class of defect rather than one + // fixture's constant. + // + // THIS ASSERTION WAS A SELF-RATIFYING ORACLE. Basis A published a HARDCODED + // `frames_per_period: 1` regardless of how far back its certifying prior actually sat. So + // the assertion compared a literal `1` against a constant `1` that no game state could + // influence: it could not fail for ANY fixture, ANY period width, or ANY future change to + // how the ring is sampled. It read the implementation's constant back to itself and + // reported that as agreement. Its stated premise — "this class certifies on a single-frame + // period" — was therefore never measured; it was inferred from the very line it was + // supposedly checking. + // + // That is the same family as this lane's other "guard that passes while proving nothing" + // findings: a check whose subject cannot vary is not a check. The tell is available + // WITHOUT running anything — trace the asserted expression back to its producer and ask + // whether any input can move it. If nothing can, the row's green is a tautology. + // + // The mint now DERIVES the span from the prior's ring index, so the expression varies with + // the fixture. For this one it is 2: the DRAIN_CLERIC / BLOOD_SIPPER pairing alternates a + // gain-life resolution and a lose-life resolution, so one whole repetition spans two + // retained ring frames and the pair one frame back does not recur. + // + // MEASURED through the production accept path on this same fixture (declare `Fixed(n)` + + // APNAP accepts), which is what makes 2 the RIGHT value rather than merely a different one: + // derived k = 2 ⇒ n=1 → δ{P0:+1,P1:-1}; n=2 → +2/-2; n=3 → +3/-3 (exactly n × δ) + // hardcoded 1 ⇒ n=1, 2, 3 → ZERO committed, every time + // That zero is `materialize_fixed_shortcut`'s conformance check doing its job: a cycle cut + // at one frame delivers half a period, which does not equal the published δ, so the drive + // drops it and hands back. A wrong period is therefore never a silent half-commit — but it + // does make the offer unusable, which is why the span has to be measured and not assumed. + assert_eq!( + certificate + .per_cycle + .as_ref() + .expect("a bounded offer publishes its per-period signature") + .frames_per_period, + 2, + "this class's repetition spans two retained ring frames (a gain-life resolution, then a \ + lose-life resolution); a drift in that width silently changes what one committed cycle \ + means" ); // Reach-guard on the regime itself (see `drive_collect_primed`): the drive really did reach @@ -1250,10 +1382,16 @@ fn interactive_3p_subset_lethal_does_not_crown() { // mode live in the same drive, so under the weakened-gate defect the crown must report as a // crown (the `wf` assertion above) — measured, a guard placed first steals that panic (M1 // crowns at beat ~1, before recurrence) and reports the wrong cause. + // + // RE-GROUNDED THROUGH the offer, not around it: `DeclineShortcut` invalidates the ring, so + // the witness must be re-accumulated after each decline, which is why the decline count is + // reported here. assert!( primed, - "the loop never reached a board-recurrent state within {PRIMED_LOOP_BEATS} beats — this \ - is not the primed-loop regime the assertions above assume, so they passed vacuously" + "the loop never reached a board-recurrent state within {PRIMED_LOOP_BEATS} beats \ + ({} bounded offers declined en route) — this is not the primed-loop regime the \ + assertions above assume, so they passed vacuously", + declined.len() ); } @@ -1321,6 +1459,7 @@ fn synthetic_lethal_cert() -> LoopCertificate { win_kind: WinKind::LethalDamage, mandatory: false, residual_board_delta: BoardDelta::default(), + per_cycle: None, } } @@ -1383,20 +1522,30 @@ fn vito_2p_optional_offer_declare_crowns() { /// `live_mandatory_loop_winner` returns None (CR 104.2a) and the shortcut falls back to manual /// play. REVERT-PROBE: making the crown unconditional (deleting the `live_mandatory_loop_winner` /// gate) wrongly crowns P0 here. +/// +/// PR-7 Phase 5b: the leading reach-guard is re-grounded THROUGH the bounded offers this class +/// now raises (see [`drive_collect_primed`]). REVERT-PROBE (MEASURED, not predicted): delete +/// that decline arm ⇒ `primed == false` ⇒ this row FAILS with "0 bounded offers declined". #[test] fn injected_3p_one_faller_no_crown() { let (mut runner, kickoff) = setup_3p_subset_lethal(LoopDetectionMode::Interactive); let _ = runner.cast(kickoff).resolve(); - let (_events, _wf, primed) = drive_collect_primed(&mut runner, PRIMED_LOOP_BEATS); + let (_events, _wf, primed, declined) = drive_collect_primed(&mut runner, PRIMED_LOOP_BEATS); // Reach-guard on the regime (see `drive_collect_primed`): the board reached a genuine // recurrence, so the E1 clone-drive below has a real cycle to measure rather than an // un-primed board. (It witnesses the live bridge's frame pair, not the E1 measure's own // boundary/work pair — those are different frames.) + // + // PR-7 Phase 5b: RE-GROUNDED THROUGH the bounded offers this class now raises — the driver + // declines each one and keeps driving, so the witness still ranges over a non-empty beat + // set. `DeclineShortcut` invalidates the ring, hence the decline count in the message. assert!( primed, - "the loop never reached a board-recurrent state within {PRIMED_LOOP_BEATS} beats — the \ - E1 measure below would have no primed cycle, so its no-crown assertion is vacuous" + "the loop never reached a board-recurrent state within {PRIMED_LOOP_BEATS} beats \ + ({} bounded offers declined en route) — the E1 measure below would have no primed \ + cycle, so its no-crown assertion is vacuous", + declined.len() ); // Reach-guard: the drain loop genuinely ran (P1 bled, alive) and P2 is untouched — this @@ -1408,7 +1557,11 @@ fn injected_3p_one_faller_no_crown() { ); assert_eq!(life(&runner, P2), 20, "P2 untouched (second non-faller)"); - // Inject the offer this subset-lethal loop never raises naturally, then confirm it. + // Inject the offer, then confirm it. PR-7 Phase 5b: this board is now ALSO reachable + // naturally (the drive above declined its natural bounded offers), but the injection stays + // — the injected `predicted_winner: Some(P0)` + `UntilLethal` certificate is what pins the + // E1 declare path this row is about, and the natural offer is a `None`/`Fixed` one that + // would route somewhere else entirely. runner.state_mut().waiting_for = WaitingFor::LoopShortcut { proposer: P0, predicted_winner: Some(P0), @@ -1431,6 +1584,11 @@ fn injected_3p_one_faller_no_crown() { "subset-lethal loop must NOT crown (CR 104.2a), got {:?}", runner.state().waiting_for ); + // MEASURED, not assumed (PA-2B.0b was a HYPOTHESIS that the materialized settle would now + // raise a natural bounded offer here and turn this green assertion red): on this tree the + // post-settle state IS `Priority`, so the assertion stands VERBATIM and needs no + // decline-and-re-read pass-through. Do not relax it to an `||` over two `WaitingFor` + // variants — that would make it pass on a state this row exists to exclude. assert!( matches!(runner.state().waiting_for, WaitingFor::Priority { .. }), "the E1 measure hands back to manual play, got {:?}", @@ -1515,7 +1673,7 @@ fn declare_illegal_pin_falls_back_legal_ingests() { }; let schema = ShortcutDecisionSchema { iteration_count: IterationCount::UntilLethal, - // No narrowed CR 732.2a bound — the global cap, as every offer states today. + // No narrowed CR 732.2a bound — `Default` carries the global cap. max_iterations: ShortcutDecisionSchema::default().max_iterations, points: vec![DecisionPoint { slot: slot.clone(), @@ -1593,15 +1751,23 @@ fn declare_illegal_pin_falls_back_legal_ingests() { /// (staggered CR 704.3 lethal). The EQUAL-life sibling DOES crown (reach-guard proving the /// check is not always-reject). REVERT-PROBE: removing the F2 check wrongly crowns the /// unequal-life half. +/// +/// PR-7 Phase 5b: this class now raises a natural bounded CR 732.2a offer mid-drive, which +/// would end the drive before the recurrence witness accumulates. [`drive_collect_primed`] +/// declines it and keeps driving, so the reach-guard is grounded THROUGH the offer. +/// REVERT-PROBE (MEASURED, not predicted): delete that decline arm ⇒ the UNEQUAL half's +/// `primed` goes false and this row FAILS, while the equal half is untouched (it consumes 0 +/// beats) — so the probe flips exactly one half, which is the proof the two halves are +/// independently grounded. #[test] fn injected_3p_unequal_life_pin_all_no_crown() { // Drive one primed cycle of a confirmed 3p both-fall drain and report the terminal // waiting_for. - fn drive_confirmed(p1_life: i32, p2_life: i32) -> (WaitingFor, bool) { + fn drive_confirmed(p1_life: i32, p2_life: i32) -> (WaitingFor, bool, usize) { let (mut runner, kickoff) = setup_3p_both_fall(LoopDetectionMode::Interactive, p1_life, p2_life); let _ = runner.cast(kickoff).resolve(); - let (_events, _wf, primed) = drive_collect_primed(&mut runner, PRIMED_LOOP_BEATS); + let (_events, _wf, primed, declined) = drive_collect_primed(&mut runner, PRIMED_LOOP_BEATS); // Reach-guard: both opponents bled equally (loop primed, both are fallers) and stay // pairwise-offset by the initial gap (equal deltas preserve the difference). assert!( @@ -1626,31 +1792,40 @@ fn injected_3p_unequal_life_pin_all_no_crown() { }) .expect("P0 declares UntilLethal"); accept_all_opponents(&mut runner); - (runner.state().waiting_for.clone(), primed) + (runner.state().waiting_for.clone(), primed, declined.len()) } // UNEQUAL absolute life (gap 50) ⇒ NO crown (F2 staggered-death veto). - let (unequal, unequal_primed) = drive_confirmed(1000, 1050); + let (unequal, unequal_primed, unequal_declines) = drive_confirmed(1000, 1050); // Reach-guard on the regime (see `drive_collect_primed`) — asserted on THIS half only: the // equal-life half below is measured to consume 0 beats (already crowned as the kick-off // resolved), so it has no drive in which to recur. This is the half the F2 revert-probe // flips, so the whole discriminator lives on the guarded side. + // + // PR-7 Phase 5b: RE-GROUNDED THROUGH the bounded offers this class now raises — declined, + // not avoided. Only the unequal half is re-grounded, for the reason above. assert!( unequal_primed, - "the loop never reached a board-recurrent state within {PRIMED_LOOP_BEATS} beats — this \ - is not the ≥2-faller primed regime the assertions below assume" + "the loop never reached a board-recurrent state within {PRIMED_LOOP_BEATS} beats \ + ({unequal_declines} bounded offers declined en route) — this is not the ≥2-faller \ + primed regime the assertions below assume" ); assert!( !matches!(unequal, WaitingFor::GameOver { winner: Some(_) }), "unequal-life ≥2-faller drain must NOT crown (CR 704.3 simultaneity), got {unequal:?}" ); + // MEASURED, not assumed (PA-2B.0b was a HYPOTHESIS that the materialized settle would now + // raise a natural bounded offer here and turn this green assertion red): on this tree the + // post-settle state IS `Priority`, so the assertion stands VERBATIM and needs no + // decline-and-re-read pass-through. Do not relax it to an `||` over two `WaitingFor` + // variants — that would make it pass on a state this row exists to exclude. assert!( matches!(unequal, WaitingFor::Priority { .. }), "the F2 veto hands back to manual play, got {unequal:?}" ); // EQUAL absolute life ⇒ CROWN (reach-guard: the F2 check is not always-reject). - let (equal, _) = drive_confirmed(1000, 1000); + let (equal, _, _) = drive_confirmed(1000, 1000); assert_eq!( equal, WaitingFor::GameOver { winner: Some(P0) }, @@ -3958,7 +4133,7 @@ fn loop_shortcut_schema_redacts_hidden_targets_for_non_controller() { }; let schema = ShortcutDecisionSchema { iteration_count: IterationCount::UntilLethal, - // No narrowed CR 732.2a bound — the global cap, as every offer states today. + // No narrowed CR 732.2a bound — `Default` carries the global cap. max_iterations: ShortcutDecisionSchema::default().max_iterations, points: vec![DecisionPoint { slot, @@ -3980,6 +4155,7 @@ fn loop_shortcut_schema_redacts_hidden_targets_for_non_controller() { win_kind: WinKind::LethalDamage, mandatory: false, residual_board_delta: BoardDelta::default(), + per_cycle: None, }; runner.state_mut().waiting_for = WaitingFor::LoopShortcut { proposer: P0, @@ -4923,9 +5099,327 @@ fn gunzip_dump(gz: &[u8]) -> String { fn restore_dump(json: &str) -> GameState { let envelope: serde_json::Value = serde_json::from_str(json).expect("dump envelope parses as JSON"); - serde_json::from_value::(envelope["gameState"].clone()) - .expect("the real 4p gameState must restore through the persisted-state boundary") - .into_game_state() + // Decode AS `PersistedGameState` rather than decoding a bare `GameState` and wrapping + // it in `Raw`: only the former runs `reject_legacy_raw_prompt_authority` and + // `decode_persisted_resolution_state`, which is the rest of the production chokepoint + // — including the CR 732.2a load-seam bound invariant `w15_*` below pins. + // `.expect(..)`, not `?`: `into_game_state` returns `GameState`, not `Result`. + serde_json::from_value::( + envelope["gameState"].clone(), + ) + .expect("gameState deserializes through the production decoder") + .into_game_state() +} + +/// The migrated dellian dump's `gameState`, as a raw `serde_json::Value`. +fn dellian_game_state_value() -> serde_json::Value { + let json = gunzip_dump(include_bytes!( + "../fixtures/dellian_emblem_conqueror_4p.json.gz" + )); + let envelope: serde_json::Value = + serde_json::from_str(&json).expect("dump envelope parses as JSON"); + envelope["gameState"].clone() +} + +/// R0c — the migrated fixture decodes through BOTH decoders, and an un-migrated one +/// through NEITHER. +/// +/// This is the row that converts the next upstream save-compat break into a named +/// regression instead of four unrelated-looking red rows. Upstream #6718 (`0468df1f4`) +/// added `TargetSelectionSlot::effect_kind` with no `#[serde(default)]`; every dump +/// fixture captured before it became undecodable, and nothing said so in one place. +/// +/// The negative arm IS the positive arm's anti-vacuity control: without it, an +/// `assert!(ok)` pair would pass on any value at all, including one where the field was +/// never consulted. Both arms operate on the SAME value, differing only by the presence +/// of `effect_kind`, so the verdict is attributable to that field and nothing else. +#[test] +fn migrated_dump_decodes_through_both_decoders_and_unmigrated_through_neither() { + let migrated = dellian_game_state_value(); + + // Reach-guard: prove the mutation below has something to remove. A value with no + // `effect_kind` key would make the negative arm's `Err` unattributable. + let slots = migrated["waiting_for"]["data"]["target_slots"] + .as_array() + .expect("the dellian dump publishes a target_slots array"); + assert_eq!( + slots.len(), + 1, + "the dellian dump publishes exactly one slot" + ); + assert!( + slots[0].get("effect_kind").is_some(), + "the MIGRATED fixture must carry effect_kind — if this fails, the migration script \ + was not run, and the negative arm below would pass for the wrong reason" + ); + + // POSITIVE: both the direct `GameState` decode and the production `PersistedGameState` + // decode accept the migrated value. + assert!( + serde_json::from_value::(migrated.clone()).is_ok(), + "migrated fixture must decode as a bare GameState" + ); + assert!( + serde_json::from_value::(migrated.clone()) + .is_ok(), + "migrated fixture must decode through the PRODUCTION decoder" + ); + + // R8 — THE ROUTING IS STATE-NEUTRAL. The six loaders stopped decoding a bare + // `GameState` and wrapping it in `PersistedGameState::Raw`, and started decoding AS + // `PersistedGameState`: a different type, a different `Deserialize`, and a different + // conversion (`decode_persisted_resolution_state`, which injects + // `resolution_state_version` and decodes the resolution state as `ResolutionStateWire`). + // That is a real change to how six fixtures restore, and the two arms above cannot + // witness it — they assert only that a decode succeeds or fails. + // + // `GameState` has NO `PartialEq`, so this compares the SERIALIZED forms — key by key, + // recursively. Several fields are `HashSet`-backed and therefore have NO canonical array + // order (two sets built in one process do not even share a hasher seed), so a difference + // that is order-only under one of THOSE keys is accepted as a set difference and every + // other difference FAILS, naming its own key path. A blanket "sort every array" would + // have hidden a real reordering of the stack, a library or a seat order; a hand-picked + // single-field normalization would have flaked the first time a different set field + // happened to serialize in a different order — which is exactly what it did. + // + // The allowlist is DERIVED, not remembered: + // grep -rhoE 'pub [a-z_0-9]+: (std::collections::)?HashSet<' \ + // crates/engine/src/types/*.rs crates/engine/src/analysis/*.rs | sort -u + // An unlisted key that differs only by order still FAILS and names itself, so drift is + // loud rather than silent. + const SET_BACKED_FIELDS: &[&str] = &[ + "alt_cost_grant_permissions_used", + "applied", + "assassin_or_commander_dealt_combat_damage_this_turn", + "batched_zone_change_trigger_fired", + "bending_types_this_turn", + "city_blessing", + "commander_declined_zone_return", + "creatures_attacked_this_turn", + "creatures_blocked_this_turn", + "crew_activated_this_turn", + "dirty_objects", + "dirty_players", + "exerted_this_turn", + "exile_cast_permissions_used", + "exile_play_permissions_used", + "exile_play_single_use_consumed", + "graveyard_cast_permissions_used", + "graveyard_cast_permissions_used_per_type", + "hand_cast_free_permissions_used", + "modal_modes_chosen_this_game", + "modal_modes_chosen_this_turn", + "objects_that_dealt_damage", + "player_actions_this_way", + "players_attacked_this_step", + "players_attacked_this_turn", + "players_who_created_token_this_turn", + "players_who_discarded_card_this_turn", + "players_who_sacrificed_artifact_this_turn", + "players_who_searched_library_this_turn", + "public_revealed_cards", + "replacement_applied", + "revealed_cards", + "top_of_library_cast_permissions_used", + "triggers_fired_this_game", + "triggers_fired_this_turn", + "triggers_fired_this_turn_per_opponent", + ]; + + /// Collect every path at which `a` and `b` differ in a way that set-ordering cannot + /// explain. Returns an empty vec iff the two states are equal modulo set order. + fn differences( + a: &serde_json::Value, + b: &serde_json::Value, + path: &str, + out: &mut Vec, + ) { + use serde_json::Value; + match (a, b) { + (Value::Object(x), Value::Object(y)) => { + let mut keys: Vec<&String> = x.keys().chain(y.keys()).collect(); + keys.sort(); + keys.dedup(); + for key in keys { + match (x.get(key), y.get(key)) { + (Some(l), Some(r)) => differences(l, r, &format!("{path}.{key}"), out), + _ => out.push(format!("{path}.{key} (present on one side only)")), + } + } + } + (Value::Array(x), Value::Array(y)) if x == y => {} + (Value::Array(x), Value::Array(y)) => { + let leaf = path.rsplit('.').next().unwrap_or(path); + let (mut xs, mut ys) = (x.clone(), y.clone()); + let key = |v: &Value| v.to_string(); + xs.sort_by_key(key); + ys.sort_by_key(key); + if xs == ys && SET_BACKED_FIELDS.contains(&leaf) { + // Order-only difference under a `HashSet`-backed field: not a state + // difference at all, because that field HAS no canonical order. + } else if xs == ys { + out.push(format!( + "{path} (REORDERED, and it is not a set-backed field)" + )); + } else { + out.push(format!("{path} (different elements)")); + } + } + _ if a == b => {} + _ => out.push(path.to_string()), + } + } + + let serialized = |state: &GameState| serde_json::to_value(state).expect("GameState serializes"); + let legacy_restored = { + let raw: GameState = serde_json::from_value(migrated.clone()) + .expect("the pre-routing loader form: a bare GameState decode"); + engine::types::game_state::PersistedGameState::Raw(Box::new(raw)).into_game_state() + }; + let routed_restored = + serde_json::from_value::(migrated.clone()) + .expect("the routed loader form: decode AS PersistedGameState") + .into_game_state(); + let routed_value = serialized(&routed_restored); + let mut diffs = Vec::new(); + differences( + &serialized(&legacy_restored), + &routed_value, + "state", + &mut diffs, + ); + assert!( + diffs.is_empty(), + "routing the six dump loaders through the production decoder must restore the SAME \ + state they restored before; differing paths: {diffs:?}" + ); + + // The perturbation IS that assertion's reach-guard: without it, a comparison that + // compared a value to itself — or explained every difference away as set order — would + // pass on any two states at all. Perturb ONE scalar; the comparison must SEE it, and + // must name the field it saw. + let mut perturbed = legacy_restored; + perturbed.turn_number += 1; + let mut perturbed_diffs = Vec::new(); + differences( + &serialized(&perturbed), + &routed_value, + "state", + &mut perturbed_diffs, + ); + assert_eq!( + perturbed_diffs, + vec!["state.turn_number".to_string()], + "the comparison must see a one-scalar difference AND name it; if it cannot, the \ + equality above proves nothing" + ); + + // NEGATIVE (the anti-vacuity control): strip the field back out and both must reject. + let mut unmigrated = migrated; + unmigrated["waiting_for"]["data"]["target_slots"] + .as_array_mut() + .expect("target_slots is an array") + .iter_mut() + .for_each(|slot| { + slot.as_object_mut() + .expect("each slot is an object") + .remove("effect_kind") + .expect("each slot carried effect_kind before removal"); + }); + assert!( + serde_json::from_value::(unmigrated.clone()).is_err(), + "an un-migrated save must NOT decode as a bare GameState" + ); + assert!( + serde_json::from_value::(unmigrated) + .is_err(), + "an un-migrated save must NOT decode through the production decoder — the strict \ + decoder is the point; a #[serde(default)] shim would silently accept it" + ); +} + +/// R0d — CR 732.2a: a persisted `LoopShortcut` offer whose WIRE bound is `0` must fail the +/// load, and one whose bound is `5` must not. +/// +/// The defect this pins (W15) is real and was measured before the fix: a wire +/// `max_iterations: 0` deserialized clean, satisfied `is_bounded()`, and reached +/// `ai_support/candidates.rs`, which echoed it as a declared `IterationCount::Fixed(0)` — +/// so the engine opened the CR 732.2b response window for an offer that admits no legally +/// takeable sequence. The offer was corrupt one beat BEFORE any count was declared. +/// +/// ⚠ THE FIXTURE CHOICE IS LOAD-BEARING — this row uses TENACITY, not the dellian dump the +/// dual-decode row uses. The dellian value is `TriggerTargetSelection` and carries no +/// `schema` object at all, so `…schema.max_iterations` cannot even be written onto it: both +/// arms would decode identically, for a reason having nothing to do with the invariant. +/// The tenacity dump is the only in-tree `LoopShortcut` capture. +/// +/// The key is ABSENT in the fixture, so the mutation CREATES it — asserted below, because a +/// mutation that silently failed to apply would make the `0` arm's verdict meaningless. +/// +/// ⚠ NON-VACUITY DEPENDS ON THE ROUTED LOADER. This row decodes AS `PersistedGameState`; +/// the pre-5c loader form (`PersistedGameState::Raw(Box::new(bare_decode))`) bypasses +/// `PersistedGameState`'s own `Deserialize` and therefore never runs +/// `decode_persisted_resolution_state` at all, so the same assertions written against that +/// form could not fail. REVERT-PROBE: delete `reject_zero_bound_shortcut_offer`'s body (or +/// its call) ⇒ the `0` arm decodes `Ok` ⇒ FAILS. The wire-`5` arm is the anti-vacuity half: +/// it proves the mutation instrument reaches the field and that the invariant refuses `0` +/// specifically rather than refusing every mutated save. +#[test] +fn a_wire_zero_shortcut_bound_fails_the_load_and_a_wire_five_does_not() { + let json = gunzip_dump(include_bytes!( + "../fixtures/tenacity_exquisite_blood_4p.json.gz" + )); + let envelope: serde_json::Value = + serde_json::from_str(&json).expect("dump envelope parses as JSON"); + let base = envelope["gameState"].clone(); + + // Reach-guards on the fixture itself. + assert_eq!( + base["waiting_for"]["type"].as_str(), + Some("LoopShortcut"), + "R0d must run on a LoopShortcut capture — the invariant is scoped to that variant" + ); + assert!( + base["waiting_for"]["data"]["schema"].is_object(), + "the tenacity offer carries a schema object for the bound to live on" + ); + assert!( + base["waiting_for"]["data"]["schema"] + .get("max_iterations") + .is_none(), + "the fixture predates the field, so the mutation below CREATES the key" + ); + + let with_bound = |n: u64| { + let mut v = base.clone(); + v["waiting_for"]["data"]["schema"]["max_iterations"] = serde_json::json!(n); + // Anti-vacuity: prove the write landed before drawing any conclusion from it. + assert_eq!( + v["waiting_for"]["data"]["schema"]["max_iterations"].as_u64(), + Some(n), + "the mutation must reach schema.max_iterations" + ); + v + }; + + // CR 732.2a: a proposal must describe "a sequence of game choices ... that may be + // legally taken based on the current game state". A bound of 0 admits none. + let zero = + serde_json::from_value::(with_bound(0)); + let message = zero + .expect_err("a wire max_iterations of 0 must fail the load, not revive a corrupt offer") + .to_string(); + assert!( + message.contains("max_iterations 0"), + "the rejection must NAME the invariant it enforces, got: {message}" + ); + + // The control: same fixture, same instrument, same mutated key, a legal bound. + assert!( + serde_json::from_value::(with_bound(5)) + .is_ok(), + "a wire max_iterations of 5 is a legal bound and must still load" + ); } /// Opponents the ENGINE considers living. `Player::is_eliminated` is the authority the @@ -5156,6 +5650,182 @@ fn two_site_retention_survives_a_prompt_and_its_answer() { ); } +/// PR-7 Phase 5a — CR 732.2a per-iteration pin enumeration, on a REAL 4p board. +/// +/// `bounded_cycle_pin_slots` is the single authority for the choice slots a bounded cycle +/// offer must publish. Dump B is the acceptance population: obj **541** is a CR 114.2 +/// emblem (command zone, "both owned and controlled by that player") whose triggered +/// ability drains `target opponent`, i.e. the +/// `Typed{type_filters: [], controller: Opponent, properties: []}` player shape. +/// +/// **TWO ARMS, and the pairing is the whole point.** The dump ships with the prompt UP +/// (`TriggerTargetSelection` carrying already-materialized `legal_targets`), so arm ⓐ alone +/// would pass against a prompt-READING implementation — which returns ZERO slots at the +/// real offer beat, where `waiting_for` is `Priority`. Arm ⓑ is the identical state with +/// exactly one field reassigned. +/// +/// REVERT-PROBES (both must flip): +/// * ⓘ narrow the AST predicate so `Typed{[], Opponent, []}` is rejected ⇒ BOTH arms return +/// zero ⇒ FAILS. +/// * ⓙ re-implement the enumerator to read `state.waiting_for`'s +/// `target_slots[..].legal_targets` ⇒ arm ⓐ still passes, arm ⓑ returns zero ⇒ FAILS. +/// * ⓐ' delete the `entry.controller != proposer` filter ⇒ the bystander-proposer +/// assertion FAILS. (On THIS board every one of the 152 stack entries is P0-controlled — +/// measured — so the honest form of that probe is a bystander proposer, not a rising +/// count for P0.) +/// +/// MUST-NOT-FLIP: `bounded_cycle_pin_slots(..).is_empty()` on the shipped +/// `b3_materialize_stop_short` offer board — asserted, not assumed. That zero is the +/// byte-identity pin for every shipped `Fixed(N)` drive, and pairing it with dump B's +/// non-zero in the SAME row proves the instrument returns both values. +#[test] +fn bounded_cycle_pin_slots_enumerates_the_emblem_slot() { + use engine::game::engine::bounded_cycle_pin_slots; + use engine::types::zones::Zone; + + const EMBLEM: ObjectId = ObjectId(541); + const P3: PlayerId = PlayerId(3); + + let mut state = restore_dump(&gunzip_dump(include_bytes!( + "../fixtures/dellian_emblem_conqueror_4p.json.gz" + ))); + + // ── reach guards, all derived from the loaded board, none from the predicate ── + let emblem = state + .objects + .get(&EMBLEM) + .expect("reach-guard: dump B carries the emblem object"); + assert_eq!( + emblem.zone, + Zone::Command, + "reach-guard: CR 114.2 puts the emblem in the command zone — the whole reason this \ + row exists (a battlefield-only slot builder would be untested by it)" + ); + let emblem_incarnation = emblem.incarnation; + let emblem_entries = state.stack.iter().filter(|e| e.source_id == EMBLEM).count(); + assert_eq!( + emblem_entries, 1, + "reach-guard, measured off the loaded 152-deep stack: the emblem has exactly one \ + live entry here, so this row's COUNT carries no claim about the per-SOURCE dedupe \ + — that is \ + `bounded_cycle_pin_slots_publishes_one_point_per_source_not_per_entry`'s job" + ); + assert_eq!( + engine_live_opponents(&state, P0), + vec![P1, P2, P3], + "reach-guard: three living opponents, so the per-iteration choice is REAL" + ); + + let expected_slot = DecisionSlot { + source: YieldTarget::ThisObject { + source_id: EMBLEM, + incarnation: Some(emblem_incarnation), + trigger_description: None, + }, + index: 0, + }; + let expected_legal = vec![ + TargetRef::Player(P1), + TargetRef::Player(P2), + TargetRef::Player(P3), + ]; + + // ── arm ⓐ: the shipped board, prompt UP ── + assert!( + matches!(state.waiting_for, WaitingFor::TriggerTargetSelection { .. }), + "arm ⓐ precondition: the dump ships AT the prompt; got {:?}", + state.waiting_for + ); + let with_prompt = bounded_cycle_pin_slots(&state, P0); + // The CR 115.2 TARGETS half — this row's subject. Filtered rather than counted whole + // because the mint also admits shape (B) (may-only, no announcement choice), whose + // points are asserted separately below; before shape (B) existed the two coincided. + let targets: Vec<_> = with_prompt + .iter() + .filter(|p| matches!(p.kind, DecisionPointKind::Targets { .. })) + .collect(); + assert_eq!( + targets.len(), + emblem_entries, + "one TARGETS point per qualifying SOURCE; on this board that count coincides with \ + the emblem's single entry, which is asserted above rather than assumed" + ); + for point in &targets { + assert_eq!( + point.slot, expected_slot, + "the slot names the CR 114.2 command-zone emblem at its CR 400.7 incarnation" + ); + assert_eq!( + point.kind, + DecisionPointKind::Targets { + legal_targets: expected_legal.clone(), + min_targets: 1, + max_targets: 1, + ordered: false, + }, + "the legal set is `find_legal_targets`' native output (CR 115.2), not a \ + declaration echo" + ); + } + // ── the shape-(B) half, measured on the SAME board rather than asserted elsewhere ── + // CR 603.5: three P0-controlled optional no-target triggers (sources 126, 208, 274) + // publish a `MayChoice` gate each. 126 and 208 carry 34 stack entries apiece here, so + // this count is ALSO the per-source dedupe on a real board: without it the shipped + // dump would publish 69 may points, not 3. + let may_sources: Vec<_> = with_prompt + .iter() + .filter(|p| p.kind == DecisionPointKind::MayChoice) + .map(|p| match &p.slot.source { + YieldTarget::ThisObject { source_id, .. } => *source_id, + other => panic!("a mint slot names an object source; got {other:?}"), + }) + .collect(); + assert_eq!( + may_sources, + vec![ObjectId(126), ObjectId(208), ObjectId(274)], + "CR 603.5: the may-only (shape (B)) sources this board publishes, deduped per \ + SOURCE across their 34/34/1 stack entries" + ); + for src in [ObjectId(126), ObjectId(208)] { + assert!( + state.stack.iter().filter(|e| e.source_id == src).count() > 1, + "reach-guard: {src:?} must carry MORE than one entry, or the dedupe assertion \ + above is vacuous" + ); + } + + // ── arm ⓑ: the SAME state at the real offer beat — one field reassigned ── + state.waiting_for = WaitingFor::Priority { player: P0 }; + assert_eq!( + bounded_cycle_pin_slots(&state, P0), + with_prompt, + "arm ⓑ: byte-for-byte the same slot set with NO prompt to read. Both production \ + call sites run at `WaitingFor::Priority`, so an implementation that reads \ + `target_slots[..].legal_targets` publishes nothing when it matters" + ); + + // ── ⓐ': a bystander proposer specifies none of these choices (CR 732.2a) ── + assert!( + state.stack.iter().all(|e| e.controller == P0), + "measured: every dump-B stack entry is P0-controlled, so the controller filter is \ + probed from the PROPOSER side" + ); + for bystander in [P1, P2, P3] { + assert!( + bounded_cycle_pin_slots(&state, bystander).is_empty(), + "a bystander ({bystander:?}) controls none of these entries" + ); + } + + // ── must-NOT-flip: the shipped Fixed(N) drive board publishes NOTHING ── + let (shipped, _l0, _cleric) = reach_2p_optional_drain_offer(); + assert!( + bounded_cycle_pin_slots(shipped.state(), P0).is_empty(), + "the untargeted `each opponent loses 1 life` drain reifies no per-iteration player \ + choice — every shipped Fixed(N) drive must stay byte-identical" + ); +} + /// Phase 1b crown-safety row. Retention only ADDS older frames to the ring, and /// `find_live_loop_winner` scans every suffix, so a window that crowns today must still /// crown after the exemption. Dump C is the population where that is measurable: it ships @@ -5469,8 +6139,10 @@ fn drawgo_ring_spans_turns_but_never_offers() { let before = state.loop_detect_ring.len(); let pair = (witness.is_none() && turn_based && before >= 4) .then(|| { - let front = state.loop_detect_ring.front()?.clone(); - let back = state.loop_detect_ring.back()?.clone(); + // The witness reports on the basis-B turn conjunct, which reads the + // CR 104.4b comparand half. + let front = state.loop_detect_ring.front()?.normalized.clone(); + let back = state.loop_detect_ring.back()?.normalized.clone(); (front.turn_number < state.turn_number).then_some((front, back)) }) .flatten(); @@ -5485,8 +6157,8 @@ fn drawgo_ring_spans_turns_but_never_offers() { front.turn_number, before, state.loop_detect_ring.len(), - (*front).clone(), - (*back).clone(), + front.clone(), + back.clone(), )); } } @@ -6822,3 +7494,3415 @@ fn ai_collapse_candidate_is_clamped_to_the_accepted_bound() { apply(&mut state, P0, candidates[0].clone()) .expect("the AI's generated candidate must be accepted by the reducer"); } + +// =========================================================================== +// PR-7 Phase 5b — CR 732.2a BOUNDED cycle fast-forward, on a REAL 4p dump. +// +// The class Path A and Path B both refuse: a drain lethal to SOME opponents leaves a +// second non-faller, so CR 104.2a determinacy (`loop_check`'s crown gate) will not crown, +// and a life-loss axis is not a CR 732.4 no-loss draw. Every row below LOADS +// `dina_conqueror_4p.json.gz` through the production restore chokepoint and DRIVES real +// beats through `apply()` — the offer is an accumulation across dozens of them, which no +// synthetic `GameScenario` reproduces. +// =========================================================================== + +/// Drive the loaded dump until the ENGINE ITSELF writes a bounded offer, and return the +/// state at that beat. Reads `state.waiting_for` — i.e. the production Path D write inside +/// `interactive_loop_bridge` — NEVER an out-of-band call to the offer predicate, which +/// would prove only that the predicate agrees with itself. +fn drive_to_bounded_offer(state: &mut GameState, cap: usize) -> Option { + let pin = engine_live_opponents(state, P0).first().copied(); + for beat in 0..cap { + if matches!( + state.waiting_for, + WaitingFor::LoopShortcut { + predicted_winner: None, + .. + } + ) { + return Some(beat); + } + if dump_drive_one_beat(state, pin).is_err() { + return None; + } + } + None +} + +fn bounded_offer_parts( + state: &GameState, +) -> ( + PlayerId, + &engine::analysis::loop_check::LoopCertificate, + &engine::analysis::decision_template::ShortcutDecisionSchema, +) { + match &state.waiting_for { + WaitingFor::LoopShortcut { + proposer, + predicted_winner: None, + certificate, + schema, + } => (*proposer, certificate, schema), + other => panic!("expected a bounded LoopShortcut offer, got {other:?}"), + } +} + +/// PR-7 Phase 5b acceptance — the bounded offer FIRES on the real 4-player Dina/Conqueror +/// drain, at three living opponents, with a bound computed from the offer-beat board. +/// +/// ⚠ CERTIFICATION BASIS — **B**, with a derived `frames_per_period == 1`. An earlier revision +/// of this doc said basis **A** ("direct recurrence"); that was WRONG and the correction is +/// load-bearing, so it is recorded rather than swapped. MEASURED two independent ways: +/// (i) instrumenting the `basis_a` match in `try_offer_bounded_cycle_shortcut` prints +/// `BASIS=B k=1 turn=5 phase=CombatDamage ring=3` at this row's offer beat; (ii) making +/// `ring_delta_signature` return `None` unconditionally removes this row's offer entirely +/// (the drive runs its full 400-beat cap and the `expect` below fires) — which could not +/// happen if basis A were certifying, because `ring_delta_signature` is reached only from the +/// `None =>` arm. +/// +/// ⚠ WHY BASIS A REFUSED — the MECHANISM, measured at this row's own offer beat by +/// instrumenting the `basis_a` walk (ring length 3, walked newest-first). Both disjuncts fail, +/// for two DIFFERENT reasons, and neither is the one a reader would guess: +/// * the **equal** disjunct is refused by stack growth. `ring[1] -> current` is +/// `stack[8 -> 10]`: **two more `ObjectId(401)` "Bloodthirsty Conqueror" `GainLife` +/// triggered-ability entries per period** (7 -> 9, alongside one steady `ObjectId(71)` +/// "Dina, Soul Steeper" `LoseLife` entry) — a super-critical mu > 1 cascade, so the board +/// provably never recurs. The single pair that IS `eq == true` (`ring[2]`, `stack[10 -> 10]`) +/// carries a ZERO delta, so `net_progress_for(proposer)` is false and it is discarded. +/// * the **cover** disjunct clears gates (1)-(4) on that same pair and is then vetoed at +/// **gate (5)** — the off-stack fire-time condition guard — by `ObjectId(90)` +/// **"Mortality Spear"** sitting in the **Library**, carrying +/// `ModifyCost { Reduce, {2} }` / `affected: SelfRef` gated on +/// `LifeGainedThisTurn { Controller } >= 1`: a PROJECTED axis read at fire time. +/// The `scope.cast_card_ids` relief that exists for exactly this def shape cannot apply, +/// because step (1b) of the bounded class REQUIRES an empty `last_loop_action_sequence`, +/// so `window_cast_card_ids` returns `None` and gate (5) scans everything. Two +/// individually-correct constraints composing into a refusal neither intended. +/// (On the older `ring[0]` pair cover instead fails at **gate (1)**, on `loop_states_equal` +/// of the stack-cleared projected board — `object_resource_axes_match` was `true` at every +/// gate-(1) refusal measured in this run, so it is NOT the refuser here.) +/// +/// THE PUBLISHED PAYLOAD CANNOT DISTINGUISH THE TWO HERE, and that is why the row asserts a +/// structural `frames_per_period >= 1` and not a basis. ⚠ RE-DERIVED IN FIX ROUND 2, because +/// fix round 1 moved the ground under the older wording: basis A no longer publishes a hardcoded +/// `1`, it MEASURES the span from the certifying prior's ring index, and basis B *derives* `k` +/// from `1` upward. Both therefore range over the same values and **NO published value +/// discriminates in either direction** — not `== 1`, and no longer `!= 1` either (a basis-A span +/// of 2 is exactly what `interactive_3p_subset_lethal_does_not_crown` publishes). Any row still +/// reading a basis off this field is stating a necessary-not-sufficient condition at best. No +/// `pub` predicate closes the gap either: basis A's certifying condition is a DISJUNCTION whose +/// second half, `loop_states_cover_modulo_growth_pinned`, is `pub(crate)` and unnameable from +/// an integration test — so the sound attribution stays the discriminating probe (force +/// `ring_delta_signature` to return `None`; basis-B rows lose their offer, basis-A rows keep it). +/// +/// CONSEQUENCE, and it is the good one: this row is a basis-B positive control on a REAL 4p +/// dump. It is also therefore SUBJECT TO the CR 703.1 turn-position conjunct rather than +/// bypassing it — the conjunct is evaluated here and PASSES, because the certifying window is +/// `turns[5,5,5] phases[CombatDamage x3] extra[0x3]`. It is a must-NOT-flip in both +/// directions, MEASURED: deleting the conjunct leaves this row green, and keeping it leaves +/// this row green. It is therefore NOT a discriminating control for that conjunct — the rows +/// that carry that discrimination are `analysis::resource`'s +/// `drawgo_turn_structure_yields_no_basis_b_signature` and +/// `ring_delta_signature_certifies_only_a_period_seen_twice` arm ⓕ (refusing side), and +/// `bounded_offer_on_a_within_turn_draw_drain_is_basis_b` (positive side). +/// +/// EVERY NUMBER IS COMPUTED IN-TEST from the offer-beat state. The chain's reported "32" +/// is not a fixture fact: it drifts with how many beats the drive takes to accumulate, and +/// this row recomputes `min over living opponents of (life - 1) / per-cycle loss` at the +/// beat the offer actually appeared. +/// +/// NON-VACUITY: BASE is a measured NO-OFFER trajectory. Before Path D existed the same +/// drive ran 326 beats on this dump and reached `WaitingFor::LoopShortcut` zero times, so +/// the offer cannot appear here vacuously. The two field-value discriminators are asserted +/// rather than a code location: `predicted_winner == None` (this seam never calls +/// `live_mandatory_loop_winner`, so it cannot have inherited Path A's crown) and +/// `last_loop_action_sequence` EMPTY (the object-growth producer's class is the complement). +/// +/// REVERT-PROBES (each must FLIP to FAIL): +/// * delete the Path D block in `interactive_loop_bridge` ⇒ no offer ⇒ the +/// `drive_to_bounded_offer` expect FAILS. +/// * make step (7)'s range check `1..=MAX_SHORTCUT_CYCLES` ⇒ NOTHING flips, anywhere. The +/// claim this bullet used to make — that the `schema.is_bounded()` assertion below "is the +/// one that flips" — was FALSE, and is corrected rather than quietly deleted. RE-MEASURED +/// under that exact mutation, with the runner and the filter both named because the earlier +/// revision quoted a count whose shape did not match the filter beside it (fix round 2, +/// LOW-2): `cargo test -p phase-engine --test integration -- loop_shortcut::` (module filter on the +/// `integration` binary) ⇒ **85 passed / 0 failed, 4090 filtered out**. `schema.is_bounded()` +/// included, because on every fixture the bound really IS narrowed and that assertion holds +/// independently of the range check. A SUBSTRING filter is a different question with a +/// different answer — `cargo test -p phase-engine loop_shortcut` sweeps every target and additionally +/// matches `loop_shortcut_activation` / `loop_shortcut_mana_engine`; do not quote one shape's +/// number beside the other's filter. +/// No single-conjunct revert of step (7) flips a row on THIS fixture, and that is a property +/// of the mutation rather than a gap: it widens only the range's UPPER end, and a bound of +/// exactly `MAX_SHORTCUT_CYCLES` means no axis narrowed — which `classify_win_kind` already +/// reports as `Advantage`, so step (5) refuses two conjuncts earlier. The REACHABLE end is +/// the lower one, and its named row is +/// `game::engine::bounded_offer_conjunct_tests::a_bound_of_zero_mints_no_bounded_offer` +/// (revert-probe: `0..MAX_SHORTCUT_CYCLES` ⇒ that row FAILS; measured). +/// * remove `elimination_bounds`' `p.life as i64 - 1` headroom term ⇒ the recomputed bound +/// and the published one diverge ⇒ FAILS. +#[test] +fn dina_untargeted_drain_4p_offers_at_three_live_opponents() { + let mut state = restore_dump(&gunzip_dump(include_bytes!( + "../fixtures/dina_conqueror_4p.json.gz" + ))); + + // ── reach-guards on the loaded board; every assertion below is meaningless without them + assert!( + state.loop_detection.samples(), + "reach-guard: a non-sampling mode never populates the ring, so no offer could ever \ + be raised and this row would be vacuous; got {:?}", + state.loop_detection + ); + assert_eq!( + state.loop_detect_ring.len(), + 0, + "reach-guard: the dump ships with an EMPTY ring — every frame the offer certifies \ + against was accumulated by THIS drive, not restored" + ); + assert_eq!( + engine_live_opponents(&state, P0).len(), + 3, + "reach-guard: the whole point of this class is that Path A cannot crown, which needs \ + >= 2 non-fallers, i.e. three living opponents here" + ); + assert!( + !matches!(state.waiting_for, WaitingFor::LoopShortcut { .. }), + "reach-guard: the dump must NOT ship at a saved offer — the offer is this row's \ + deliverable, not its input" + ); + + let beat = drive_to_bounded_offer(&mut state, 400).expect( + "CR 732.2a: the bounded offer must FIRE on this real 4p drain. BASE (no Path D) drove \ + 326 beats on this same dump and reached zero LoopShortcut beats, so a failure here is \ + the offer never being raised, not a fixture accident.", + ); + + let (proposer, certificate, schema) = bounded_offer_parts(&state); + + // ── the two binding field-value discriminators ── + assert_eq!( + proposer, state.active_player, + "CR 732.2a: the proposer is the priority holder, and step (2) requires that to be the \ + active player the ring sampler gates on" + ); + assert!( + state.last_loop_action_sequence.is_empty(), + "the bounded class's entry must NOT require a driving sequence — a non-empty one \ + routes an accepted proposal to the object-growth materializer, which commits zero \ + bounded cycles (beat {beat})" + ); + assert!( + schema.points.is_empty(), + "the UNTARGETED class publishes no per-iteration choice, so the schema exposes no \ + decision points; got {:?}", + schema.points + ); + + // ── the per-period signature, bound FROM the value ── + let per_cycle = certificate + .per_cycle + .as_ref() + .expect("a bounded offer publishes the per-period signature its bound was divided by"); + assert!( + per_cycle.frames_per_period >= 1, + "a period spans at least one retained frame; got {}", + per_cycle.frames_per_period + ); + assert!( + per_cycle.victim_slot.is_empty(), + "no slot is published, so nothing is charged to a declared victim — the victims are \ + already visible in `delta.life`; got {:?}", + per_cycle.victim_slot + ); + assert!( + per_cycle.delta != engine::analysis::resource::ResourceVector::default(), + "a zero-delta cycle states no CR 704 threshold and must never be offered" + ); + + // ── the bound, RECOMPUTED from the offer-beat board ── + let living_opponents: Vec = engine_live_opponents(&state, proposer); + assert_eq!( + living_opponents.len(), + 3, + "three living opponents must still be the population AT THE OFFER BEAT ({beat}), not \ + only at load — otherwise the bound below is computed over the wrong seats" + ); + let mut losses: Vec<(PlayerId, i64, i64)> = vec![]; + for p in state.players.iter().filter(|p| !p.is_eliminated) { + let loss = -per_cycle.delta.life.get(&p.id).copied().unwrap_or(0); + losses.push((p.id, p.life as i64, loss)); + } + let opponent_losses: Vec = losses + .iter() + .filter(|(id, _, _)| *id != proposer) + .map(|(_, _, loss)| *loss) + .collect(); + assert!( + opponent_losses.iter().all(|&l| l > 0), + "REACH-GUARD against a degenerate fixture: every living opponent must actually be \ + LOSING life per cycle, else the CR 704.5a headroom term never narrows and the bound \ + below would be the safety cap for the wrong reason; measured {losses:?}" + ); + let expected_bound = losses + .iter() + .filter(|(_, _, loss)| *loss > 0) + .map(|(_, life, loss)| (life - 1) / loss) + .min() + .expect("at least one seat is losing life, asserted above"); + assert_eq!( + i64::from(schema.max_iterations), + expected_bound, + "CR 704.5a: the published bound must equal `min over living seats of (life - 1) / \ + per-cycle loss`, recomputed here from the offer-beat board {losses:?} at beat {beat}" + ); + assert_eq!( + schema.iteration_count, + engine::analysis::decision_template::IterationCount::Fixed(schema.max_iterations), + "CR 732.1b: the SUGGESTION seeded into the picker is the bound itself" + ); + assert!( + schema.is_bounded(), + "the whole claim of this producer is that it NARROWED the repetition bound; \ + max_iterations = {}", + schema.max_iterations + ); + + // ── siblings: nothing terminal happened, and no revocable-infinity was marked ── + assert_eq!( + certificate.win_kind, + engine::analysis::loop_check::WinKind::LethalDamage, + "CR 704.5a: a life drain is not `Advantage`, which is the conjunct that keeps this \ + seam disjoint from the Path C revocable-infinity mark" + ); + assert!( + state.unbounded_resources.is_empty(), + "an OFFER is not a grant: CR 104.4b's revocable-infinity mark belongs to Path C and \ + must not be written by raising a bounded offer; got {:?}", + state.unbounded_resources + ); +} + +/// The dina 4p drain DRIVEN through `apply()` to the beat the engine itself raises the +/// bounded offer on, with that beat's index. Shared by every row that has to observe the +/// mint at the ONE beat this corpus offers on. +fn dina_driven_to_bounded_offer() -> (GameState, usize) { + let mut state = restore_dump(&gunzip_dump(include_bytes!( + "../fixtures/dina_conqueror_4p.json.gz" + ))); + let beat = drive_to_bounded_offer(&mut state, 400).expect( + "CR 732.2a: the bounded offer must FIRE on this real 4p drain. BASE (no Path D) drove \ + 326 beats on this same dump and reached zero LoopShortcut beats, so a failure here is \ + the offer never being raised, not a fixture accident.", + ); + (state, beat) +} + +/// Restore the `Priority` window the bridge consumed when it raised the offer, so the mint can +/// be re-run on the offer beat's own board. Everything else the mint reads — the ring, the +/// stack, the resources, `last_loop_action_sequence` — is untouched, and each caller proves +/// the reconstruction faithful by requiring the SAME outcome the production path produced. +fn replay_at_priority(state: &GameState, proposer: PlayerId) -> GameState { + let mut replay = state.clone(); + replay.waiting_for = WaitingFor::Priority { player: proposer }; + replay +} + +/// R16 (v) — THE SEQUENCING PIN: NOTHING SPENDS BEFORE THE RING GATE, BECAUSE NOTHING ASKS. +/// +/// CR 732.2a. At a ring-WARM-UP beat (`loop_detect_ring.len() < 2`) there is no window, hence +/// no reachable certificate, so the mint must refuse at the ring-usability gate BEFORE the +/// verdict door is asked anything. This is the property that keeps the frozen exemption's +/// cost argument honest: at these beats the frozen set is empty and dellian's non-exempt +/// population is 152–153 entries, i.e. exactly the unexempted full sweep the ring gate exists +/// to keep off the critical path. +/// +/// The property is STRUCTURAL, not an ordering the executor had to remember: the verdict +/// container is constructed BELOW the gate, so at this beat there is nothing to ask. +/// +/// ⚠ WHAT THIS ROW DOES **NOT** CATCH, stated because the plan's proposed revert-probe was +/// analysed NOT to flip through this instrument. `MintMeter` is populated from the container +/// AFTER `certified_bounded_cycle_offer` returns, and the ring gate is an EARLY RETURN above +/// that snapshot — so an eager pass hoisted above the gate would spend a budget this meter +/// never reads, and the all-zero reading below would survive it. The row therefore pins the +/// OBSERVABLE part (the gate refuses with `NoCertification`, on a beat carrying a stack an +/// eager pass would really pay for) while the structural part rests on the construction order +/// in `bounded_cycle_offer`. Disclosed as a stop-and-return item rather than papered over with +/// a probe that cannot fire. +#[test] +fn r16v_a_ring_warmup_beat_spends_nothing() { + use engine::game::engine::{ + try_offer_bounded_cycle_shortcut_metered, BoundedOfferRefusal, ProbeCap, + }; + + let mut state = restore_dump(&gunzip_dump(include_bytes!( + "../fixtures/dellian_emblem_conqueror_4p.json.gz" + ))); + // Find a beat that is AT PRIORITY (so steps 1/1b/2 pass and the ring gate is the first + // thing that can refuse) and still ring-starved. The dump ships with an empty ring, so + // this is reachable by construction; the search makes the row robust to drive drift. + let mut found = None; + for beat in 0..40usize { + if state.loop_detect_ring.len() < 2 { + if let WaitingFor::Priority { player } = state.waiting_for { + if player == state.active_player && state.last_loop_action_sequence.is_empty() { + found = Some((beat, state.clone())); + break; + } + } + } + if dump_drive_one_beat(&mut state, None).is_err() { + break; + } + } + let (beat, board) = found.expect( + "REACH-GUARD: no ring-starved beat at priority was reached, so this row would be \ + asserting about a gate it never arrived at", + ); + assert!( + board.stack.len() > 2, + "REACH-GUARD: the beat must carry a stack an eager pass would actually PAY for, else \ + `spent == 0` is true for want of anything to classify; got {} entries at beat {beat}", + board.stack.len() + ); + + let (outcome, meter) = + try_offer_bounded_cycle_shortcut_metered(&board, false, ProbeCap::Shipped); + assert!( + matches!(outcome, Err(BoundedOfferRefusal::NoCertification)), + "a ring of {} frames reaches no window, so the refusal is the ring-usability gate's; \ + got {outcome:?}", + board.loop_detect_ring.len() + ); + assert_eq!( + ( + meter.spent, + meter.denied, + meter.conjunct6_asks, + meter.conjunct4_scans + ), + (0, false, 0, 0), + "R16(v): the gate refuses BEFORE the verdict container can be asked anything — a \ + non-zero counter here is an eager classification pass reintroduced above the ring \ + gate. beat {beat}, meter {meter:?}" + ); + assert!( + meter.certification.is_none(), + "no certificate is reachable at a ring-starved beat; meter {meter:?}" + ); +} + +/// R15 — A BUDGET-EXCEEDED MINT IS A REFUSAL, NEVER A STALL AND NEVER A CERTIFICATE. +/// +/// CR 732.2a. This is the row that makes *"cost is a coverage knob, never a soundness knob"* a +/// measurement instead of a sentence: with the per-mint cap forced to zero, the classifier can +/// afford nothing, `probe_resolution` returns `Prompted`, and the offer is REFUSED — the mint +/// does not fall through to a clone-and-resolve, and it does not hang. +/// +/// The two arms are the SAME BOARD one argument apart — the real dina offer beat, replayed +/// through the only cap channel the seam admits. The `Shipped` arm is the matched positive +/// reach-guard: without it a starved refusal proves nothing, because a board that never offers +/// refuses at zero budget too. +/// +/// REVERT-PROBE: delete `probe_resolution`'s `try_charge_one` arm (`resolution_prompt.rs`) ⇒ +/// the exhausted budget falls through to the clone-and-resolve ⇒ the starved arm OFFERS ⇒ +/// FLIPS. +#[test] +fn r15_a_zero_probe_budget_refuses_the_bounded_offer() { + use engine::game::engine::{try_offer_bounded_cycle_shortcut_metered, ProbeCap}; + + let (state, beat) = dina_driven_to_bounded_offer(); + let (proposer, _, _) = bounded_offer_parts(&state); + let replay = replay_at_priority(&state, proposer); + + // MATCHED POSITIVE, first so a starved refusal below can never pass vacuously. + let (healthy, healthy_meter) = + try_offer_bounded_cycle_shortcut_metered(&replay, false, ProbeCap::Shipped); + assert!( + healthy.is_ok(), + "REACH-GUARD: at the shipped cap this beat must OFFER, else the starved arm is not \ + keyed to the budget. beat {beat}, meter {healthy_meter:?}" + ); + assert!( + !healthy_meter.denied, + "REACH-GUARD: the positive arm must not itself be exhausted; meter {healthy_meter:?}" + ); + + // THE ROW: the same board, the same beat, the cap forced to zero. + let (starved, meter) = + try_offer_bounded_cycle_shortcut_metered(&replay, false, ProbeCap::Lowered(0)); + assert!( + starved.is_err(), + "CR 732.2a: an unaffordable probe degrades to honest-red — no certificate and no \ + offer. Got {starved:?}, meter {meter:?}" + ); + assert!( + meter.denied && meter.spent == 0, + "the refusal must be the BUDGET's: a zero cap denies the very first charge, so \ + nothing is spent and the denial flag is what carries the cause. meter {meter:?}" + ); + // WHERE the denial lands, MEASURED rather than assumed — and it is not the intuitive + // answer. Basis B consults NO board predicate, so it certifies for FREE even at a zero cap + // (`certification == Some(ResourceSignatureOnly)` at `spent == 0`); the first gate that + // must actually PAY is conjunct (6), which asks the door, is denied, and therefore reads + // `Prompted`. Exhaustion surfaces as an UNSPECIFIED WINDOW, not as a missing certificate. + assert!( + meter.conjunct6_asks > 0, + "REACH-GUARD: the starved mint must have REACHED the paying gate, else `denied` is \ + about a charge nobody ever attempted. meter {meter:?}" + ); + assert!( + matches!( + starved, + Err(engine::game::engine::BoundedOfferRefusal::UnspecifiedChoiceWindow) + ), + "an exhausted classifier reads `Prompted`, so the step-6 predicate goes false and the \ + mint REFUSES — never a stall, never a certified offer. Got {starved:?}, \ + meter {meter:?}" + ); +} + +/// R33 arm (d) — THE CORPUS'S ONE OFFERING BEAT CERTIFIES THROUGH BASIS B, AND THE FROZEN +/// EXEMPTION IS THEREFORE WITHDRAWN THERE. +/// +/// CR 732.2a. The row R33 (a)/(b)/(a′) prove at the constructor and the selection site; this +/// arm proves it on the REAL board the engine actually offers on, because the plan's cost +/// argument (the frozen subtraction, and the speed-up that rests on it) was measured at +/// *dellian-shaped* beats and this is the beat the corpus *offers* at. Escalated to the lead +/// and ruled on before this test was written; the figures are in the commit message. +/// +/// MEASUREMENT, not re-assertion of a design: the certifying disjunct has no other surface. +/// Both bases publish `frames_per_period`, so `LoopCertificate` discriminates in NEITHER +/// direction — hence [`MintMeter::certification`]. +/// +/// FIDELITY OF THE OBSERVATION, which is this row's real risk. The production mint runs +/// INSIDE the offering beat's `apply()`, from a `Priority` window the bridge has already +/// consumed by the time the drive returns, so the beat's own meter is unreachable from a +/// test. The mint is re-run here on the offer beat's state with that window restored, and +/// the reconstruction is PROVEN faithful rather than assumed: it must (1) offer at all and +/// (2) publish a `per_cycle` EQUAL to the one the production path wrote into `waiting_for`. +/// A reconstruction that drifted would fail (1) or (2) before the basis assertion is reached. +#[test] +fn dina_offering_beat_certifies_through_basis_b_and_exempts_nothing() { + use engine::analysis::resource::PeriodCertification; + use engine::game::engine::{try_offer_bounded_cycle_shortcut_metered, ProbeCap}; + + let (state, beat) = dina_driven_to_bounded_offer(); + let (proposer, certificate, _) = bounded_offer_parts(&state); + let published = certificate + .per_cycle + .clone() + .expect("the bounded offer publishes a per-cycle signature"); + + let replay = replay_at_priority(&state, proposer); + let (outcome, meter) = + try_offer_bounded_cycle_shortcut_metered(&replay, false, ProbeCap::Shipped); + + // (1) reconstruction fidelity, part one + assert!( + outcome.is_ok(), + "REACH-GUARD: the replayed mint must reach the same OFFER the production path raised \ + at beat {beat}; a refusal here means this row measures a different board than the \ + engine did, and the basis assertion below would be about nothing. Got {outcome:?}, \ + meter {meter:?}" + ); + // (1) reconstruction fidelity, part two — the same certificate, not merely some offer + let WaitingFor::LoopShortcut { + certificate: replayed, + .. + } = outcome.expect("asserted Ok above") + else { + panic!("the bounded offer is a LoopShortcut window"); + }; + assert_eq!( + replayed.per_cycle.as_ref(), + Some(&published), + "REACH-GUARD: the replayed mint must publish the SAME per-cycle signature as the \ + production offer at beat {beat}" + ); + + // (2) THE MEASURED AXIS. Basis A certified NOTHING corpus-wide (0 of 129 certifications + // across the three 4p dumps); this beat takes `ring_delta_signature`, which by its own + // doc consults no board predicate. + assert_eq!( + meter.certification, + Some(PeriodCertification::ResourceSignatureOnly), + "R33: the corpus's one offering beat (beat {beat}) certifies through BASIS B. If this \ + ever reads `BoardCovered`, the frozen exemption became available at an offering beat \ + and the plan's exempted-cost row must be re-derived before that is relied on" + ); + + // (3) THE CONSEQUENCE, which is the half that makes this arm about the exemption rather + // than about a label: under a non-`BoardCovered` certificate `frozen_ids` is empty, so + // conjunct (6) skips NOTHING and scans every non-exempt entry it is handed. + assert_eq!( + meter.conjunct6_frozen_skips, 0, + "R33: `ResourceSignatureOnly` supplies neither P2 nor P4, so the subtraction is \ + withdrawn and conjunct (6) exempts nothing at this beat" + ); + assert!( + meter.conjunct6_asks > 0, + "REACH-GUARD against a vacuous skip count: conjunct (6) must actually have RUN at \ + this beat, else `frozen_skips == 0` is trivially true; meter {meter:?}" + ); + + // (4) THE BUDGET, re-derived from this very beat (R16(ii-a)). The offer fires WITH the + // cap binding, not because the cap stopped mattering. + assert!( + !meter.denied, + "R16(ii-a): the shipped cap must not starve the corpus's acceptance offer; measured \ + demand at this beat is 13 charges. meter {meter:?}" + ); +} + +/// R16 (i) + (ii-a) + (iv) — THE BUDGET DOES NOT STARVE THE CORPUS'S ACCEPTANCE BEAT, ITS +/// DEMAND THERE IS EXACTLY MEASURED, AND THE MINT DOES NOT STALL. +/// +/// CR 732.2a. Without this row the per-mint probe cap is a number nobody checked against the +/// fixture it has to serve — which is exactly how the shipped `12` came to starve this beat by +/// one charge. +/// +/// (i) the offer still fires at the shipped cap. (ii-a) the cap does NOT bind there +/// (`denied == false`) — note that `spent <= cap` is true by construction of the budget, so +/// the non-vacuous form of (ii-a) is the denial flag, not the inequality. +/// +/// THE EXACT-DEMAND PIN is what makes (ii-a) discriminating rather than a restatement. The +/// demand `D` is SEARCHED through the seam's own closed cap domain, from zero upward, so it +/// is measured on this run instead of copied from a log: every cap below `D` must REFUSE and +/// `D` itself must OFFER. A budget re-derivation that drifts the true demand fails here with +/// the new number in the message. +/// +/// (iv) THE WALL-CLOCK. The whole mint — memo construction, the D2 window work +/// (`certified_period_touch` + `bounded_cycle_pin_slots_for_window` over up to +/// `LOOP_DETECT_RING_CAP` windows) and the budgeted classification — is timed end to end. +/// ⚠ THE CEILING IS DEBUG-SCALED AND SAYS SO: the plan's ~1 s figure is a player-facing +/// RELEASE budget, and this binary is `-C opt-level=0`. The measured figure is carried in the +/// message so the release claim is derived from a number rather than asserted. +/// +/// REVERT-PROBE: lower `PROBE_BUDGET` below the measured `D` ⇒ (i) fails +/// (`dina_driven_to_bounded_offer` cannot reach an offer) ⇒ FLIPS. Round 2 measured exactly +/// that: at `12` this row and six shipped siblings go red together. +#[test] +fn r16_the_offering_beats_probe_demand_is_exactly_measured() { + use engine::game::engine::{ + try_offer_bounded_cycle_shortcut_metered, BoundedOfferRefusal, ProbeCap, + }; + + let (state, beat) = dina_driven_to_bounded_offer(); + let (proposer, _, _) = bounded_offer_parts(&state); + let replay = replay_at_priority(&state, proposer); + + // ── (i) + (iv): the shipped cap, timed ─────────────────────────────────────────────── + let started = std::time::Instant::now(); + let (shipped, meter) = + try_offer_bounded_cycle_shortcut_metered(&replay, false, ProbeCap::Shipped); + let elapsed = started.elapsed(); + assert!( + shipped.is_ok(), + "R16(i) beat {beat}: the corpus's acceptance offer must FIRE at the shipped cap. \ + Got {shipped:?}, meter {meter:?}" + ); + assert!( + !meter.denied, + "R16(ii-a) beat {beat}: the cap must not BIND at the beat that offers — `spent <= cap` \ + is true of every mint by construction, so the denial flag is the only non-vacuous \ + form of this claim. meter {meter:?}" + ); + assert!( + meter.spent > 0, + "REACH-GUARD: the mint must have CLASSIFIED something, else `!denied` is true for \ + want of anything to charge. meter {meter:?}" + ); + assert!( + elapsed < std::time::Duration::from_secs(10), + "R16(iv) beat {beat}: the whole mint took {elapsed:?}, which is past even the \ + debug-scaled stall ceiling. Measured at the time of writing: ~12 ms for this beat's \ + `ring=3 stack=10` mint in an unoptimized build. meter {meter:?}" + ); + + // ── THE EXACT-DEMAND PIN ───────────────────────────────────────────────────────────── + let demand = meter.spent; + let (at_demand, demand_meter) = + try_offer_bounded_cycle_shortcut_metered(&replay, false, ProbeCap::Lowered(demand)); + assert!( + at_demand.is_ok() && !demand_meter.denied, + "R16: a cap of exactly the measured demand ({demand}) must still OFFER — that is what \ + makes {demand} the DEMAND rather than an upper bound. Got {at_demand:?}, \ + meter {demand_meter:?}" + ); + for lowered in 0..demand { + let (starved, starved_meter) = + try_offer_bounded_cycle_shortcut_metered(&replay, false, ProbeCap::Lowered(lowered)); + assert!( + matches!(starved, Err(BoundedOfferRefusal::UnspecifiedChoiceWindow)), + "R16: every cap below the measured demand must refuse fail-CLOSED at the choice \ + gate. cap {lowered} of {demand} gave {starved:?}, meter {starved_meter:?}" + ); + assert!( + starved_meter.denied, + "R16: …and the refusal must be attributable to the BUDGET, not to an unrelated \ + conjunct. cap {lowered}, meter {starved_meter:?}" + ); + } + assert!( + demand > 1, + "REACH-GUARD: a demand of 0 or 1 would make the starvation sweep above empty or \ + trivial; measured {demand} at beat {beat}" + ); +} + +/// Drive a `GameScenario`-built board until the ENGINE writes a bounded offer, declining +/// nothing and injecting nothing. Returns the beat, or `None` if the cap ran out. Reads +/// `state.waiting_for` — the production Path D write — never an out-of-band predicate call. +fn drive_scenario_to_bounded_offer(runner: &mut GameRunner, cap: usize) -> Option { + for beat in 0..cap { + if matches!( + runner.state().waiting_for, + WaitingFor::LoopShortcut { + predicted_winner: None, + .. + } + ) { + return Some(beat); + } + if dump_drive_one_beat(runner.state_mut(), None).is_err() { + return None; + } + } + None +} + +/// PR-7 Phase 5b — THE BASIS-B POSITIVE CONTROL, at the offer level. +/// +/// This is the row whose WHOLE PURPOSE is detecting a back-door deletion of certification +/// basis B. It is **not** the only row that detects one — an earlier revision of this doc said +/// it was ("every other bounded-offer row in this file certifies on basis A") and that was +/// MEASURABLY FALSE, and it licenses exactly the overread that the ⚠ SCOPE note on +/// [`basis_a_bounded_fixed_count_commits_exactly_n_periods`] exists to prevent — which a reader +/// reaches much later in this file than this sentence. +/// +/// RE-MEASURED in fix round 4 at `025015135`, using this file's own prescribed attribution +/// probe (force `ring_delta_signature` to return `None` unconditionally — basis-B rows lose +/// their offer, basis-A rows keep it), runner +/// `cargo test -p phase-engine --test integration -- loop_shortcut::` (module filter on the +/// `integration` binary): **74 passed / 11 failed / 4090 filtered out**, against a clean +/// **85 passed / 0 failed / 4090 filtered out**. ELEVEN rows flip. This one, plus these ten: +/// `dina_untargeted_drain_4p_offers_at_three_live_opponents`, +/// `bloodloop_mandatory_draw_cascade_offers_at_2p_3p_and_4p`, +/// `ai_bounded_declare_candidate_is_generated_legal_and_drives`, +/// `bounded_fixed_count_commits_exactly_n_periods`, +/// `bounded_fixed_drive_stops_at_the_first_lethal_cycle`, +/// `bounded_fixed_drive_rolls_back_a_partial_crossing_cycle`, +/// `a_cycle_that_does_not_match_the_published_period_is_dropped`, +/// `declared_count_above_the_offered_bound_is_handed_back`, +/// `until_lethal_against_a_bounded_offer_is_rejected`, +/// `a_nonempty_action_sequence_mints_no_bounded_offer`. +/// +/// FIXTURE PROVENANCE of those eleven, RE-COUNTED in fix round 5 over the whole set rather +/// than asserted of one row (an earlier revision annotated dina alone as "the real 4p dump", +/// which reads as an exclusivity it does not have). SIX load the real `dina_conqueror_4p` +/// 4-player capture from `tests/fixtures`, through the same gunzip → restore loader: +/// `dina_untargeted_drain_4p_offers_at_three_live_opponents`, +/// `a_nonempty_action_sequence_mints_no_bounded_offer`, +/// `declared_count_above_the_offered_bound_is_handed_back`, +/// `until_lethal_against_a_bounded_offer_is_rejected`, +/// `bounded_fixed_count_commits_exactly_n_periods` (which loops that dump AND two +/// `bloodloop_state` boards, so it is the one MIXED row), and +/// `bounded_fixed_drive_rolls_back_a_partial_crossing_cycle`. The remaining five are +/// `GameScenario` builds only — this row inline, the other four via `bloodloop_state`. Counted +/// by resolving every fixture-loading call site in this file to its enclosing test fn, NOT by +/// grep hit count: these very sentences add doc-comment hits for the names they list. +/// Consistent with the plural "the file's real 4p dumps" at the ⚠ SCOPE note on +/// [`basis_a_bounded_fixed_count_commits_exactly_n_periods`]. +/// +/// What is distinctive here is INTENT and DIAGNOSIS, not exclusivity: NINE of those ten fail +/// for a reason their own docs do not name, whereas this row says so in the failure text +/// ("A failure here means basis B minted nothing"). The tenth, +/// `dina_untargeted_drain_4p_offers_at_three_live_opponents`, is the EXCEPTION and was +/// mis-covered by an earlier "each of those ten" — its ⚠ CERTIFICATION BASIS note documents +/// this very probe as measurement (ii), down to the drive running its full 400-beat cap and +/// its `expect` firing. Checked against all ten doc blocks in fix round 5: no other one +/// mentions `ring_delta_signature` or basis B at all. Nor is the list a basis census: it is the +/// set of rows that cannot reach their assertions once basis B stops minting, which includes +/// rows whose subject is the DRIVE rather than the basis. +/// +/// FIXTURE — a fully mandatory two-card draw↔drain cascade. What it shares with the class +/// basis B exists for is the one property that matters: **it draws a card every cycle**, so a +/// card moves library→hand each period, the board never recurs, and basis A's +/// `loop_states_equal_modulo_resources` (library and hand are board, not projected resources) +/// and its cover disjunct must BOTH refuse. The `None =>` arm is then the only way an offer +/// can be minted here. +/// +/// ORACLE-TEXT PROVENANCE, verified against the Scryfall API, and deliberately honest: +/// * *"Whenever you draw a card, each opponent loses 1 life."* is **real** — Psychosis +/// Crawler's second ability, verbatim. +/// * *"Whenever an opponent loses life, draw a card."* matches **no printing**. The two +/// nearest real cards are both GATED — Kefka, Ruler of Ruin (*"…during your turn"*) and +/// Valgavoth, Harrower of Souls (*"…for the first time during each of their turns"*) — and +/// that gating is precisely what would stop the cascade. This fixture is therefore +/// SYNTHETIC and deliberately stronger than any printed card. It must not be described as a +/// real-card loop. Its matched negative control +/// (`drawgo_ring_spans_turns_but_never_offers`) is a `GameScenario` too, which is the +/// precedent for a synthetic matched control pair for one predicate. +/// +/// MEASURED at the seam (not from an out-of-band predicate call): the engine writes the offer +/// at beat 31, turn 4, `Draw`, with a derived `frames_per_period == 2`, δ = +/// `life{P1:-1} lib{P0:-1}` and a bound of 16; the whole ring sits at `turns[4×6]` +/// `phases[Draw×6]` `extra[0×6]`, so every consecutive pair is turn-position invariant and the +/// CR 703.1 conjunct passes. Note δ carries `lib{P0:-1}` ONLY — P1's library is untouched, so +/// no second draw step is inside the period. Contrast drawgo (`lib{P0:-1,P1:-1}`), whose +/// "period" is one 2-player turn cycle. +/// +/// REVERT-PROBE ⓐ (MEASURED, not predicted): make `ring_delta_signature` return `None` +/// unconditionally ⇒ the `None =>` arm converts that into `Err(NoCertification)` ⇒ no offer is +/// written ⇒ the `expect` below FAILS. +/// +/// ⚠ SCOPE, stated so it is not overread: this SYNTHETIC control fires at TWO players. The +/// same cascade built at 3 and 4 players certifies but mints zero offers (they refuse +/// downstream, at step (6) `stack_choices_are_all_specified`, because `Effect::Draw` is +/// outside that gate's allow-list). `multiplayer_pure_life_drain_offers_at_three_and_four_players` +/// is NOT a substitute — it is measured basis A. The ≥3-player basis-B coverage this file DOES +/// carry is `dina_untargeted_drain_4p_offers_at_three_live_opponents`, which is measured basis +/// B (k == 1) on a real 4p dump; see that row's doc for the measurement and for why its +/// published payload cannot assert the basis on its own. +#[test] +fn bounded_offer_on_a_within_turn_draw_drain_is_basis_b() { + let mut scenario = GameScenario::new_n_player(2, 7); + scenario.at_phase(Phase::PreCombatMain); + scenario.with_life(P0, 20); + scenario.with_life(P1, 20); + scenario.add_creature_from_oracle( + P0, + "Test Bleeder", + 2, + 2, + "Whenever you draw a card, each opponent loses 1 life.", + ); + scenario.add_creature_from_oracle( + P0, + "Test Chronicler", + 2, + 2, + "Whenever an opponent loses life, draw a card.", + ); + // CR 504.1: the libraries must outlast the drive — a deck-out would end the game and + // silently truncate every assertion below. + let names: Vec = (0..60).map(|i| format!("Filler {i}")).collect(); + let refs: Vec<&str> = names.iter().map(|s| s.as_str()).collect(); + scenario.with_library_top(P0, &refs); + scenario.with_library_top(P1, &refs); + let mut runner = scenario.build(); + runner.state_mut().loop_detection = LoopDetectionMode::Interactive; + + assert!( + runner.state().loop_detection.samples(), + "reach-guard: a non-sampling mode never populates the ring, so no offer could ever be \ + raised and this row would be vacuous" + ); + assert_eq!( + runner.state().loop_detect_ring.len(), + 0, + "reach-guard: every frame the offer certifies against is accumulated by THIS drive" + ); + + let beat = drive_scenario_to_bounded_offer(&mut runner, 200).expect( + "CR 732.2a: the within-turn mandatory draw↔drain cascade must raise a bounded offer. \ + A failure here means basis B minted nothing — which is exactly what revert-probe ⓐ \ + (make `ring_delta_signature` return None) produces.", + ); + + let state = runner.state(); + let (proposer, certificate, schema) = bounded_offer_parts(state); + + // (i) the binding field-value discriminator. + assert_eq!( + proposer, state.active_player, + "CR 732.2a: the proposer is the priority holder, and step (2) requires that to be the \ + active player the ring sampler gates on" + ); + + // (ii) the period, bound FROM the returned value — no literal `2` appears in this row. + let per_cycle = certificate + .per_cycle + .as_ref() + .expect("a bounded offer publishes the per-period signature its bound was divided by"); + let k = per_cycle.frames_per_period; + assert!( + k >= 1, + "a period spans at least one retained frame; got {k}" + ); + // Bound to a local rather than inlined: `2k + 1` is the CONTRACT expression (2k deltas ⇒ + // the period was observed twice), and clippy's `int_plus_one` would otherwise push it to a + // `> 2k` that no longer reads as the rule. + let frames_needed = 2 * k as usize + 1; + assert!( + state.loop_detect_ring.len() >= frames_needed, + "the structural invariant every certified period satisfies: a period seen TWICE needs \ + 2k+1 frames. k = {k}, ring = {} (beat {beat})", + state.loop_detect_ring.len() + ); + assert!( + per_cycle.delta != engine::analysis::resource::ResourceVector::default(), + "a zero-delta cycle states no CR 704 threshold and must never be offered" + ); + + // (iii) A PERIOD-WIDTH TRIPWIRE — no longer a basis attribution (fix round 2). The older + // wording read `!= 1` as sufficient for "not basis A" on the premise that basis A published + // a hardcoded `1`. Fix round 1 replaced that hardcode with a MEASURED span, so basis A now + // publishes 2 on at least one shipped fixture + // (`interactive_3p_subset_lethal_does_not_crown`) and the inference is dead in both + // directions. The basis attribution this row actually stands on is its named revert-probe ⓐ + // — force `ring_delta_signature` to return `None` and this row loses its offer entirely, + // which no basis-A row does. The assertion is KEPT as a width tripwire: this cascade draws a + // card every cycle, so its period genuinely spans more than one retained frame, and a drift + // to 1 means the fixture stopped being what the row describes. + assert_ne!( + k, 1, + "this cascade draws a card every cycle, so one repetition spans more than one retained \ + ring frame; a k of 1 means the fixture no longer has the shape this row asserts" + ); + + // (iv) the bound is narrowed, asked of the single authority. `MAX_SHORTCUT_CYCLES` is + // `pub(crate)` and unnameable from an integration test; `is_bounded()` is the shipped + // `pub` predicate for exactly this question. + assert!( + schema.max_iterations >= 1, + "a bound of 0 states no repetition and must not be offered" + ); + assert!( + schema.is_bounded(), + "the whole claim of this producer is that it NARROWED the repetition bound below the \ + engine-wide safety cap; max_iterations = {}", + schema.max_iterations + ); + + // (v) the untargeted class publishes no per-iteration choice. + assert!( + schema.points.is_empty(), + "the UNTARGETED class exposes no decision points; got {:?}", + schema.points + ); +} + +/// PR-7 Phase 5b — the MULTIPLAYER offer control: the untargeted every-opponent drain raises a +/// bounded offer at THREE and at FOUR players, not only at two. +/// +/// FIXTURE — the pure life↔life cascade, both halves verbatim real-card Oracle text verified +/// against the Scryfall API: Marauding Blight-Priest (*"Whenever you gain life, each opponent +/// loses 1 life."*) plus Exquisite Blood (*"Whenever an opponent loses life, you gain that much +/// life."*). Untargeted and every-opponent, which is the true full-multiplayer drain and the +/// same class as the real 4p `dina_conqueror_4p` dump. +/// +/// WHY THIS SHAPE: its stack holds only `GainLife` / `LoseLife`, so it clears step (6) +/// `stack_choices_are_all_specified` and is DECOUPLED from the separate `Effect::Draw` +/// allow-list hole that silences the 2-player basis-B control at ≥3 players. A control that +/// steered around that hole would guard nothing about it; this one does not touch it. +/// +/// UNEQUAL OPPONENT LIFE IS LOAD-BEARING, not decoration. With every opponent falling, the +/// living partition is `nonfallers == {P0}`, and at EQUAL life `live_mandatory_loop_winner`'s +/// CR 704.3 simultaneity floor passes and Path A crowns P0 while the kick-off is still +/// resolving — measured, at 2, 3 and 4 players. Staggering the totals fails +/// `fallers_lives_pairwise_equal`, which is what leaves the board in the "lethal to some, +/// crowns nobody" regime the bounded offer exists to serve. +/// +/// ⚠ BASIS: **A** — established by DISCRIMINATING PROBE, never from `frames_per_period`. +/// The probe: force `ring_delta_signature` to return `None` unconditionally (basis B's only +/// entry point, reached solely from the `basis_a` match's `None =>` arm). This row stays +/// GREEN at both player counts while `dina_untargeted_drain_4p_offers_at_three_live_opponents` +/// and `bounded_offer_on_a_within_turn_draw_drain_is_basis_b` both FAIL. Surviving that +/// mutation is what proves basis A certified here. **`frames_per_period == 1` proves NOTHING +/// about the basis** — basis B *derives* `k` from `1` upward, so a k==1 basis-B offer is +/// byte-identical in the payload, and since fix round 1 basis A MEASURES its span too (2 on +/// `interactive_3p_subset_lethal_does_not_crown`), so a `!= 1` reading is dead as well. The +/// `== 1` assertion below is a structural consistency check on THIS fixture's period width, +/// necessary but never sufficient; treating it as a basis attribution is the exact +/// non-discriminating inference that mislabelled the dina row. +/// +/// ⚠ MECHANISM — CORRECTED, and the correction is load-bearing. An earlier revision of this +/// doc said *"a pure life↔life loop moves only axes `loop_states_equal_modulo_resources` +/// projects out, so the board DOES recur and basis A always matches."* That is MEASURABLY +/// FALSE on this very fixture: the loop moves the STACK, which is not a projected axis. +/// Instrumenting the `basis_a` walk at the offer beat (ring length 3, walked newest-first): +/// * `ring[2]` — the only pair with `eq == true` (stack unchanged) — carries a ZERO δ, so +/// `net_progress_for(proposer)` is **false** and the pair is discarded. +/// * `ring[1]` — `eq == FALSE`, and this is the pair that certifies, through the +/// **`loop_states_cover_modulo_growth_pinned` disjunct**, never through the equal one. +/// The stack grows one period's worth of `Test Exquisite Blood` triggered abilities: +/// **3p `stack[2 -> 3]` (+1), 4p `stack[3 -> 5]` (+2)**. Cover exists for exactly this — +/// growth confined to places `prior` already occupied, by mandatory no-ordering-input +/// triggers. +/// +/// So the real reason basis A wins here is not resource-purity: it is that nothing on this +/// board trips a cover gate. Contrast dina, whose identical-in-kind stack growth also clears +/// cover's gates (1)-(4) and is then vetoed at **gate (5)** by an off-stack `ModifyCost` +/// static whose fire-time condition reads a projected axis. The shared write-up lives at the +/// `basis_a` dispatch site in `game::engine::try_offer_bounded_cycle_shortcut`. +/// +/// ⚠ CONSEQUENCE for "no basis-B control at ≥3 players from this shape": still true AS BUILT, +/// but for the corrected reason — cover SUCCEEDS here, so the `None =>` arm is never reached. +/// That is a property of this board, not a resource-purity invariant: adding a gate-(5) +/// refuser to the same two cards would flip it to basis B. The ≥3p basis-B coverage this file +/// carries is `dina_untargeted_drain_4p_offers_at_three_live_opponents` (basis B, k == 1, on a +/// real 4p dump). +/// +/// REVERT-PROBE (must FLIP): delete the Path D block in `interactive_loop_bridge` ⇒ no offer +/// at either player count ⇒ the `expect` FAILS. +#[test] +fn multiplayer_pure_life_drain_offers_at_three_and_four_players() { + /// Marauding Blight-Priest, verbatim (Scryfall). + const BLIGHT_PRIEST: &str = "Whenever you gain life, each opponent loses 1 life."; + /// Exquisite Blood, verbatim (Scryfall). + const EXQUISITE_BLOOD: &str = "Whenever an opponent loses life, you gain that much life."; + + /// Build the cascade at `seats` players with staggered opponent life, cast the kick-off, + /// and return the runner plus the seats the engine considers living opponents of P0. + fn cascade(seats: u8) -> GameRunner { + let mut scenario = GameScenario::new_n_player(seats, 7); + scenario.at_phase(Phase::PreCombatMain); + scenario.with_life(P0, 20); + for (i, seat) in (1..seats).map(PlayerId).enumerate() { + // Staggered: pairwise-UNEQUAL absolute life, equal per-cycle delta. + scenario.with_life(seat, 1000 + 50 * i as i32); + } + scenario.add_creature_from_oracle(P0, "Test Blight Priest", 2, 2, BLIGHT_PRIEST); + scenario.add_creature_from_oracle(P0, "Test Exquisite Blood", 2, 2, EXQUISITE_BLOOD); + let kickoff = scenario + .add_spell_to_hand_from_oracle(P0, "Test Lifegain Kickoff", false, KICKOFF) + .id(); + let mut runner = scenario.build(); + runner.state_mut().loop_detection = LoopDetectionMode::Interactive; + let _ = runner.cast(kickoff).resolve(); + runner + } + + for seats in [3u8, 4] { + let mut runner = cascade(seats); + let opponents = engine_live_opponents(runner.state(), P0); + assert_eq!( + opponents.len(), + usize::from(seats) - 1, + "reach-guard at {seats} players: every opponent must still be living at the offer \ + beat, else the bound below is computed over the wrong seats" + ); + assert!( + !matches!(runner.state().waiting_for, WaitingFor::GameOver { .. }), + "reach-guard at {seats} players: the staggered life totals must keep Path A from \ + crowning while the kick-off resolves — at EQUAL life it does, and then there is \ + no board left to offer on; got {:?}", + runner.state().waiting_for + ); + + let beat = drive_scenario_to_bounded_offer(&mut runner, 200).unwrap_or_else(|| { + panic!( + "CR 732.2a: the untargeted every-opponent drain must raise a bounded offer at \ + {seats} players. This is the multiplayer half of the claim — a 2-player-only \ + detector is not what this lane ships." + ) + }); + + let state = runner.state(); + let (proposer, certificate, schema) = bounded_offer_parts(state); + assert_eq!( + proposer, state.active_player, + "{seats}p: CR 732.2a step (2) — the proposer is the active priority holder" + ); + assert!( + schema.points.is_empty(), + "{seats}p: the UNTARGETED class exposes no decision points; got {:?}", + schema.points + ); + + let per_cycle = certificate + .per_cycle + .as_ref() + .expect("a bounded offer publishes its per-period signature"); + assert_eq!( + per_cycle.frames_per_period, 1, + "{seats}p: a PERIOD-WIDTH tripwire, not a basis attribution. This cascade's \ + certifying prior sits one retained frame back, so its MEASURED span is 1 — a drift \ + means the fixture changed shape and the row must be re-derived, not relaxed. It \ + establishes nothing about the basis in either direction: basis B derives k from 1 \ + upward, and since fix round 1 basis A measures its span too (2 on \ + `interactive_3p_subset_lethal_does_not_crown`). The label is carried by the \ + `ring_delta_signature -> None` probe named in this row's doc, not by this number" + ); + + // EVERY living opponent loses life every cycle — the multiplayer content of the claim. + // A 2-player-shaped detector that only ever charges one seat fails here. + let losses: Vec<(PlayerId, i64)> = opponents + .iter() + .map(|p| (*p, -per_cycle.delta.life.get(p).copied().unwrap_or(0))) + .collect(); + assert!( + losses.iter().all(|(_, loss)| *loss > 0), + "{seats}p: the published per-cycle δ must charge EVERY living opponent, which is \ + what makes this the untargeted multiplayer class; measured {losses:?} at beat \ + {beat}" + ); + + // The bound, RECOMPUTED from the offer-beat board. + let expected_bound = state + .players + .iter() + .filter(|p| !p.is_eliminated) + .filter_map(|p| { + let loss = -per_cycle.delta.life.get(&p.id).copied().unwrap_or(0); + (loss > 0).then(|| (p.life as i64 - 1) / loss) + }) + .min() + .expect("at least one seat is losing life, asserted above"); + assert_eq!( + i64::from(schema.max_iterations), + expected_bound, + "{seats}p: CR 704.5a — the published bound must equal `min over living seats of \ + (life - 1) / per-cycle loss`, recomputed here from the offer-beat board" + ); + assert!( + schema.is_bounded(), + "{seats}p: this producer's whole claim is that it NARROWED the bound; \ + max_iterations = {}", + schema.max_iterations + ); + } +} + +/// PR-7 Phase 5b (G1) — the bounded offer must FORBID a non-empty `last_loop_action_sequence`. +/// +/// PAIRED ARMS ON ONE CERTIFYING STATE, differing in exactly one field, asserting opposite +/// outcomes — so no constant implementation passes. +/// +/// WHY THE GUARD IS LOAD-BEARING (measured, not hypothetical): `materialize_fixed_shortcut` +/// EARLY-RETURNS into `materialize_object_growth_shortcut` when the sequence is non-empty, +/// and the bounded drain path begins strictly below that return. An offer minted with a +/// non-empty sequence would be accepted and routed to the object-growth materializer, +/// committing ZERO bounded cycles — the guard converts that silent misroute into an +/// observable refusal. The two conjuncts are NOT disjoint in the tree: the bridge's own gate +/// needs a non-empty STACK, and an on-stack `ActivateAbility` appends to the sequence once a +/// mana activation has armed a period. +/// +/// REVERT-PROBE: delete step (1b) ⇒ arm ⓑ returns `Ok(..)` ⇒ FAILS. The refusal is asserted +/// BY REASON (`DrivingSequenceNotEmpty`), not merely as "no offer": an assertion that only +/// observed absence would keep passing if some EARLIER conjunct started refusing first, which +/// is the domination trap. +#[test] +fn a_nonempty_action_sequence_mints_no_bounded_offer() { + use engine::game::engine::{try_offer_bounded_cycle_shortcut, BoundedOfferRefusal}; + use engine::types::game_state::{BuybackUsage, LoopAction, LoopActionContext}; + + let mut state = restore_dump(&gunzip_dump(include_bytes!( + "../fixtures/dina_conqueror_4p.json.gz" + ))); + drive_to_bounded_offer(&mut state, 400) + .expect("the paired arms need a state that PROVABLY certifies; see the acceptance row"); + + // The offer beat's `waiting_for` is the offer itself, so rewind that one field to the + // Priority beat the offer was raised AT — the bridge's own entry condition. + let (proposer, _, _) = bounded_offer_parts(&state); + state.waiting_for = WaitingFor::Priority { player: proposer }; + + // ⓐ the state certifies. + let armed = try_offer_bounded_cycle_shortcut(&state, false); + assert!( + armed.is_ok(), + "REACH-GUARD: arm ⓑ is vacuous unless the SAME state certifies with an empty \ + sequence; got {armed:?}" + ); + + // ⓑ one field reassigned. + state.last_loop_action_sequence = vec![LoopActionContext { + card_id: state + .objects + .values() + .next() + .map(|o| o.card_id) + .expect("the dump has objects"), + controller: proposer, + action: LoopAction::Recast { + from_zone: engine::types::zones::Zone::Hand, + uses_buyback: BuybackUsage::NotUsed, + }, + convoke: None, + pins: vec![], + }]; + assert_eq!( + try_offer_bounded_cycle_shortcut(&state, false), + Err(BoundedOfferRefusal::DrivingSequenceNotEmpty), + "CR 732.2a: a bounded offer minted with a driving sequence would be routed to the \ + object-growth materializer and commit zero bounded cycles" + ); +} + +/// PR-7 Phase 5b — a declared count ABOVE the offered bound is handed back fail-closed. +/// +/// **TEST-ONLY ROW, ZERO NEW PRODUCTION CODE.** The guard already ships +/// (`handle_declare_shortcut`'s `Fixed(n) if *n > offer.schema.max_iterations` arm). It was +/// unbuildable before this phase because no producer narrowed the bound below +/// `MAX_SHORTCUT_CYCLES`, so the comparison was inert; the bounded offer is the first +/// producer that can exercise it. Do not read this row as new mechanism. +/// +/// REVERT-PROBE: delete that arm ⇒ the over-bound count is accepted, APNAP opens, and the +/// proposal drives past a CR 704.5a threshold INSIDE the proposal ⇒ the zero-elimination +/// assertion FAILS. +/// MUST-NOT-FLIP: `over_cap_fixed_count_hands_back_with_no_drive` (the global-cap arm) and +/// every unbounded offer's acceptance of any `Fixed(n <= MAX)`. +/// +/// ⚠ WHAT SEPARATES THE ARMS, and why this row was NON-DISCRIMINATING until fix round 1. +/// `lives_after == lives_before` + zero eliminations is the handback observation — but at +/// `c6d834040` the ACCEPTED, within-bound path produced the identical observation on this same +/// dump, because `materialize_fixed_shortcut` aborted at cycle 0 and committed nothing. The row +/// therefore could not tell "handed back" from "accepted and driven", and would have stayed +/// green with the guard deleted. It discriminates now because the accepted path MOVES LIFE: +/// `bounded_fixed_count_commits_exactly_n_periods` measures `n × δ` committed on this exact +/// dump (`n=1` → `[50,34,30,35]`, `n=3` → `[52,32,28,33]` from `[49,35,31,36]`). That row is +/// this one's positive control; the `WaitingFor::Priority` + no-`RespondToShortcut` assertions +/// below are what separate a handback from a completed drive, since both end at priority. +#[test] +fn declared_count_above_the_offered_bound_is_handed_back() { + use engine::analysis::decision_template::IterationCount; + + let mut state = restore_dump(&gunzip_dump(include_bytes!( + "../fixtures/dina_conqueror_4p.json.gz" + ))); + drive_to_bounded_offer(&mut state, 400) + .expect("the bounded offer must fire; see the acceptance row"); + let (proposer, _, schema) = bounded_offer_parts(&state); + let bound = schema.max_iterations; + assert!( + schema.is_bounded(), + "REACH-GUARD: this row is about the PER-OFFER bound, so the offer must have narrowed \ + one — at `MAX_SHORTCUT_CYCLES` the global-cap arm would answer instead and the row \ + would test the wrong guard; got {bound}" + ); + let lives_before: Vec = state.players.iter().map(|p| p.life).collect(); + let eliminated_before = state.players.iter().filter(|p| p.is_eliminated).count(); + + let result = apply( + &mut state, + proposer, + GameAction::DeclareShortcut { + count: IterationCount::Fixed(bound + 1), + template: None, + }, + ) + .expect("the declare is a legal action; it is REFUSED by being handed back, not by Err"); + + assert!( + matches!(result.waiting_for, WaitingFor::Priority { .. }), + "CR 732.2a: an over-bound count contains a conditional action, so it is handed back to \ + ordinary priority — no APNAP window, no drive; got {:?}", + result.waiting_for + ); + assert!( + !matches!(state.waiting_for, WaitingFor::RespondToShortcut { .. }), + "the CR 732.2b response window must never open for a rejected declaration" + ); + assert_eq!( + state.players.iter().filter(|p| p.is_eliminated).count(), + eliminated_before, + "ZERO eliminations: the whole reason the bound exists is that a count above it crosses \ + a CR 704.5a threshold inside the proposal" + ); + assert_eq!( + state.players.iter().map(|p| p.life).collect::>(), + lives_before, + "zero committed cycles ⇒ no life moved" + ); +} + +/// PR-7 Phase 5b — `UntilLethal` against a BOUNDED offer is rejected. +/// +/// **TEST-ONLY ROW** for the same reason as the row above: the guard ships already. It is +/// also the D-1 rider — the ONLY test that exercises `handle_declare_shortcut`'s +/// `UntilLethal if offer.schema.is_bounded()` arm, so it is the behavioural proof that +/// swapping the inline `max_iterations < MAX_SHORTCUT_CYCLES` for the shared predicate is +/// semantics-preserving. +/// +/// REVERT-PROBES: delete that arm ⇒ an unbounded drive runs past the measured threshold. +/// Invert `ShortcutDecisionSchema::is_bounded()` to `>=` ⇒ THIS row flips too, together with +/// both `phase-ai` rows — one edit to one predicate measurable at every caller. If that +/// inversion leaves this row green, the engine kept a private copy of the comparison. +/// MUST-NOT-FLIP: the whole shipped suite's unbounded offers still accept `UntilLethal`. +/// +/// ⚠ SAME NON-DISCRIMINATION CORRECTION as the row above. `lives_after == lives_before` was +/// satisfied by BOTH arms at `c6d834040` (the accepted path committed nothing), so it did not +/// separate "rejected" from "accepted and driven". `bounded_fixed_count_commits_exactly_n_periods` +/// is now the positive control that makes the accepted path observably move life on this dump; +/// the discriminating assertions here are the `Priority` handback plus the absence of a +/// `RespondToShortcut` window, which no accepted declaration produces. +#[test] +fn until_lethal_against_a_bounded_offer_is_rejected() { + use engine::analysis::decision_template::IterationCount; + + let mut state = restore_dump(&gunzip_dump(include_bytes!( + "../fixtures/dina_conqueror_4p.json.gz" + ))); + drive_to_bounded_offer(&mut state, 400) + .expect("the bounded offer must fire; see the acceptance row"); + let (proposer, _, schema) = bounded_offer_parts(&state); + assert!( + schema.is_bounded(), + "REACH-GUARD: the guard under test is keyed on `is_bounded()`, so an unnarrowed offer \ + would take a different arm and the row would be vacuous" + ); + let lives_before: Vec = state.players.iter().map(|p| p.life).collect(); + + let result = apply( + &mut state, + proposer, + GameAction::DeclareShortcut { + count: IterationCount::UntilLethal, + template: None, + }, + ) + .expect("the declare is a legal action; it is REFUSED by being handed back"); + + assert!( + matches!(result.waiting_for, WaitingFor::Priority { .. }), + "CR 732.2a: `UntilLethal` names no count at all, so it cannot be legal against an \ + offer whose producer measured a CR 704 threshold inside the loop; got {:?}", + result.waiting_for + ); + assert!( + !matches!(state.waiting_for, WaitingFor::RespondToShortcut { .. }), + "no CR 732.2b window for a rejected declaration" + ); + assert_eq!( + state.players.iter().map(|p| p.life).collect::>(), + lives_before, + "zero committed cycles" + ); +} + +// ─────────────── PR-7 Phase 5c — the MANDATORY-DRAW cascade, ≥3 players ─────────────── + +/// Real card (Psychosis Crawler is the printed member of this class); the synthetic name +/// keeps the fixture off the card database. +const BLEEDER: &str = "Whenever you draw a card, each opponent loses 1 life."; +/// Synthetic mandatory payoff. Deliberately NOT "you may draw a card" — the "may" is a +/// genuine CR 603.5 resolution-time choice that step (6) must keep refusing, and this +/// fixture's whole job is to exercise the MANDATORY arm. +const CHRONICLER: &str = "Whenever an opponent loses life, draw a card."; + +/// `bloodloop` at N players: a WITHIN-TURN MANDATORY drain cascade whose every cycle also +/// DRAWS, so the board never recurs (a card moves library→hand each cycle) and the offer +/// must come from the growth-cover basis rather than exact recurrence. +/// +/// The draw payload is the POINT of the fixture, not an incidental detail. Before this +/// commit, `Effect::Draw` was fail-closed `MayPrompt`, so step (6) +/// `stack_choices_are_all_specified` refused every beat whose stack held one of these +/// triggers and the multiplayer cascade could never be offered. Do NOT "simplify" this to +/// a pure life loop to make it pass — a control that steers around the hole guards nothing +/// about the hole. +fn bloodloop_state(players: u8) -> GameState { + let mut scenario = GameScenario::new_n_player(players, 7); + scenario.at_phase(Phase::PreCombatMain); + for i in 0..players { + scenario.with_life(PlayerId(i), 20); + } + scenario.add_creature_from_oracle(P0, "Test Bleeder", 2, 2, BLEEDER); + scenario.add_creature_from_oracle(P0, "Test Chronicler", 2, 2, CHRONICLER); + let names: Vec = (0..60).map(|i| format!("Filler {i}")).collect(); + let refs: Vec<&str> = names.iter().map(String::as_str).collect(); + for i in 0..players { + scenario.with_library_top(PlayerId(i), &refs); + } + let mut runner = scenario.build(); + runner.state_mut().loop_detection = LoopDetectionMode::Interactive; + runner.state().clone() +} + +/// PR-7 Phase 5c ACCEPTANCE — the bounded CR 732.2a offer fires on a MANDATORY-DRAW +/// cascade at 2, 3 and 4 players. +/// +/// # What flips when the widening is reverted +/// +/// Measured at HEAD `ea6000b5c` with the same fixture and the same driver: 3p and 4p mint +/// **`ENGINE_OFFERS = 0`**, every candidate beat refused `UnspecifiedChoiceWindow` (34 +/// bridge-moment refusals on each), while certification itself succeeded. Classify +/// `Effect::Draw` back to `MayPrompt` and `drive_to_bounded_offer` returns `None` for +/// `players >= 3` — `expect` panics and this test is RED. The 2p row discriminates too, on +/// the beat: the offer moves 29 → 31 under the revert, because step (6) starts passing one +/// full drain cycle earlier once the draw entries stop refusing. +/// +/// # Why the beats are pinned literals +/// +/// The drive is deterministic — fixed scenario seed, `dump_drive_one_beat`'s policy is +/// total (always pass at `Priority`, first legal answer otherwise), and no RNG is on the +/// path. Re-run identical across runs. An offer beat is observable behaviour that this +/// commit CHANGED; pinning it is what stops a later change from moving it silently. +#[test] +fn bloodloop_mandatory_draw_cascade_offers_at_2p_3p_and_4p() { + for (players, expected_beat, expected_turn) in [(2u8, 29usize, 4u32), (3, 58, 5), (4, 97, 6)] { + let mut state = bloodloop_state(players); + let beat = drive_to_bounded_offer(&mut state, 400).unwrap_or_else(|| { + panic!( + "{players}p mandatory-draw cascade must raise a bounded offer; a `None` here is \ + the pre-widening behaviour (step (6) refusing every draw-bearing stack)" + ) + }); + assert_eq!(beat, expected_beat, "{players}p offer beat"); + assert_eq!(state.turn_number, expected_turn, "{players}p offer turn"); + + let (proposer, certificate, schema) = bounded_offer_parts(&state); + assert_eq!( + proposer, P0, + "{players}p: the cascade's controller proposes" + ); + assert!( + schema.is_bounded(), + "{players}p: an unbounded schema would take a different declare arm" + ); + let per_cycle = certificate + .per_cycle + .as_ref() + .expect("a bounded offer states its per-period signature"); + assert_eq!( + per_cycle.frames_per_period, 2, + "{players}p: this cascade's derived period spans two retained ring frames. A WIDTH \ + tripwire only — since fix round 1 both bases measure the span, so no value \ + attributes a basis (see `bounded_offer_on_a_within_turn_draw_drain_is_basis_b`)" + ); + + // The multiplayer property the ≥3p rows exist for: ONE cycle charges EVERY + // opponent, not just the first. A 2p-only guard could not see this. + let opponents: Vec = state + .players + .iter() + .map(|p| p.id) + .filter(|p| *p != P0) + .collect(); + assert_eq!(opponents.len(), usize::from(players) - 1); + for opponent in &opponents { + assert_eq!( + per_cycle.delta.life.get(opponent).copied(), + Some(-1), + "{players}p: one cycle drains {opponent:?}" + ); + } + assert_eq!( + per_cycle.delta.life.get(&P0).copied().unwrap_or(0), + 0, + "{players}p: the cascade's controller loses no life" + ); + } +} + +// ═══════════════ FIX ROUND 1 — the declared count is CONSUMABLE ═══════════════ +// +// Before this round `materialize_fixed_shortcut`'s `'cycles: for i in 0..n` advanced only on +// `CycleOutcome::Recurred`, which needs board RECURRENCE. A basis-B certificate — what +// `ring_delta_signature` mints, and the whole class `try_offer_bounded_cycle_shortcut` widened +// offers to — certifies a periodic DELTA, not a recurring board, so neither recurrence +// predicate can ever fire and `n` was structurally inert. MEASURED at `c6d834040` with the same +// fixtures and the same production entry (`apply` → declare → APNAP accepts): +// +// bloodloop3 n=1 → [20,0,0] GameOver{P0} elim=2 │ n=3 → [20,0,0] GameOver{P0} elim=2 +// bloodloop4 n=1 → [20,0,0,0] elim=3 │ n=3 → [20,0,0,0] elim=3 +// dina 4p n=1 → [49,35,31,36] (unchanged) │ n=3 → [49,35,31,36] (unchanged) +// +// `Fixed(1)` and `Fixed(3)` byte-identical — either the table dies or nothing commits. The +// rows below are the antidote: the same trajectories, with `n` bound to the OBSERVED board +// delta and to the OFFER's own published signature, never to a literal. + +/// Declare `Fixed(n)` on the bounded offer `state` is parked at, accept with every living +/// opponent through `apply()`, and return the per-seat life delta the drive COMMITTED +/// alongside the signature and bound the offer published. +/// +/// Everything is read off the production state: the signature comes from the offer the ENGINE +/// wrote, the delta from `Player::life` before and after. Nothing is recomputed by the test. +fn accept_bounded_fixed( + state: &mut GameState, + n: u32, +) -> ( + Vec<(PlayerId, i64)>, + engine::analysis::resource::PeriodicDelta, + u32, +) { + let (proposer, certificate, schema) = bounded_offer_parts(state); + let per_cycle = certificate + .per_cycle + .clone() + .expect("a bounded offer publishes the per-period signature its bound was divided by"); + let bound = schema.max_iterations; + let before: Vec<(PlayerId, i64)> = state + .players + .iter() + .map(|p| (p.id, p.life as i64)) + .collect(); + r6a_declare_and_accept_all(state, proposer, n); + let committed: Vec<(PlayerId, i64)> = state + .players + .iter() + .zip(&before) + .map(|(p, (id, l0))| { + assert_eq!( + p.id, *id, + "the seat vector is positional and never reordered" + ); + (p.id, p.life as i64 - l0) + }) + .collect(); + (committed, per_cycle, bound) +} + +/// FIX ROUND 1 PRIMARY (HIGH-1/HIGH-2/HIGH-3) — an accepted `Fixed(n)` within the offered +/// bound commits **exactly `n` copies of the published per-period delta**, on the real 4p +/// Dina/Conqueror dump and on the synthetic mandatory-draw cascade at 3 and 4 players. +/// +/// # What the assertion is bound to +/// +/// `n * per_cycle.delta.life[seat]`, derived from the certificate the ENGINE published at the +/// offer beat. No literal life total appears in an equality. A fixture whose drain rate drifts +/// moves both sides together; a drive that commits the wrong NUMBER of periods moves only one. +/// +/// # Why this is not vacuous +/// +/// * Reach-guards below establish that the published δ is non-zero, that at least two seats +/// carry a non-zero term (so a 2-player-shaped bug cannot hide), and that the bound leaves +/// room for `n = 3` — without which the `n`-scaling is untestable. +/// * The `n = 1` vs `n = 3` boards are asserted DIFFERENT on the same fixture. That single +/// assertion is the direct antidote to the defect: at `c6d834040` they were byte-identical. +/// +/// # REVERT-PROBES (each RUN, each FLIPPED) +/// +/// * ⓐ delete `|| frames_per_period.is_some_and(|k| frames_this_cycle >= k)` from +/// `drive_one_shortcut_cycle` ⇒ HEAD behaviour returns: dina commits ZERO (`Abort` at cycle +/// 0, delta `[0,0,0,0]`) and bloodloop cross-lethals the whole table. Every `assert_eq!` on +/// the committed delta FAILS, and so does `no seat is eliminated`. +/// * ⓑ replace the delimiter's `k` with a hardcoded `1` ⇒ bloodloop (whose derived period is +/// `k == 2` ring frames) commits HALF-periods: `n` cycles deliver `n/2` copies of δ. The +/// 3p/4p `assert_eq!` FAILS while the `k == 1` dina row stays green — which is what proves +/// the row reads the VALUE of `frames_per_period` and not merely its presence. +#[test] +fn bounded_fixed_count_commits_exactly_n_periods() { + /// Rebuilt from scratch per `n` — a driven trajectory is not replayable from a used state. + fn build(name: &str) -> GameState { + match name { + "dina_conqueror_4p" => restore_dump(&gunzip_dump(include_bytes!( + "../fixtures/dina_conqueror_4p.json.gz" + ))), + "bloodloop3" => bloodloop_state(3), + "bloodloop4" => bloodloop_state(4), + other => panic!("unknown fixture {other}"), + } + } + + for name in ["dina_conqueror_4p", "bloodloop3", "bloodloop4"] { + let mut boards: Vec> = vec![]; + for n in [1u32, 3] { + let mut state = build(name); + drive_to_bounded_offer(&mut state, 400).unwrap_or_else(|| { + panic!("{name}: the bounded offer must fire; see the acceptance row") + }); + + let (committed, per_cycle, bound) = accept_bounded_fixed(&mut state, n); + + // ── reach-guards: without these the equality below can pass degenerately ── + assert!( + per_cycle.delta != engine::analysis::resource::ResourceVector::default(), + "{name}: a zero-delta period makes `n * δ` zero for every `n`, so the scaling \ + assertion would hold for a drive that committed nothing" + ); + assert!( + per_cycle.delta.life.values().filter(|v| **v != 0).count() >= 2, + "{name}: fewer than two seats with a non-zero life term is a 2-player shape; \ + the whole class exists because a MULTIPLAYER drain crowns nobody. got {:?}", + per_cycle.delta.life + ); + assert!( + bound >= 3, + "{name}: `n = 3` must be WITHIN the offered bound, else the declaration is \ + handed back and this row silently tests the rejection arm; bound = {bound}" + ); + assert!( + per_cycle.frames_per_period >= 1, + "{name}: a period spans at least one retained ring frame; got {}", + per_cycle.frames_per_period + ); + + // ── THE PROPERTY: committed delta == n × published per-period delta ── + for (seat, delta) in &committed { + assert_eq!( + *delta, + i64::from(n) * per_cycle.delta.life.get(seat).copied().unwrap_or(0), + "{name} n={n}: {seat:?}'s committed life delta must be exactly `n` copies \ + of the period the offer published ({:?}); committed {committed:?}", + per_cycle.delta.life + ); + } + + // ── the bound's own contract: CR 704.5a headroom is `life - 1`, so no seat may + // be eliminated by a within-bound count ── + assert_eq!( + state.players.iter().filter(|p| p.is_eliminated).count(), + 0, + "{name} n={n}: CR 704.5a — `min over living seats of (life - 1) / loss` \ + reserves one point of headroom, so a within-bound drive eliminates nobody" + ); + assert!( + state.players.iter().all(|p| p.life > 0), + "{name} n={n}: every seat is above the CR 704.5a threshold; lives {:?}", + state.players.iter().map(|p| p.life).collect::>() + ); + assert!( + matches!(state.waiting_for, WaitingFor::Priority { .. }), + "{name} n={n}: a completed finite drive hands back to ordinary priority \ + (CR 800.4a living seat), not a terminal state; got {:?}", + state.waiting_for + ); + + boards.push(committed); + } + + // ── THE DISCRIMINATOR. At `c6d834040` these two were identical for every fixture. + assert_ne!( + boards[0], boards[1], + "{name}: `Fixed(1)` and `Fixed(3)` must produce MEASURABLY different boards — \ + identical outcomes are exactly the defect this round fixes" + ); + } +} + +/// FIX ROUND 2 (MED-2) — the same `n × δ` property on a certification-basis **A** offer, at +/// DRIVE level. The row above covers basis **B** on all three of its fixtures; every basis-A +/// claim in this lane rested on ONE published-number assertion until this row. +/// +/// # Why the basis matters, and what was uncovered +/// +/// `frames_per_period` reaches the drive from two different producers. +/// Basis B derives it from `ring_delta_signature` (the ring window's own period `k`); basis A +/// derives it from the certifying prior's ring index. Fix round 1 changed ONLY the basis-A +/// producer — a hardcoded `1` became the measured span — and MEASURED, reverting that hardcode +/// flips exactly one of the **83** rows that existed in this file's `loop_shortcut::` module +/// BEFORE this row: [`interactive_3p_subset_lethal_does_not_crown`]. ⚠ On THIS tree the count is +/// **2 of 85** — the second being this row, by design (its probe ⓐ below IS that revert). Fix +/// round 3 (LOW-1) corrected the earlier wording "one row of the 85", which took its numerator +/// from the pre-commit tree and its denominator from the post-commit one — two epochs in one +/// sentence. Runner and filter for the flip claim: +/// `cargo test -p phase-engine --test integration -- loop_shortcut::` (module filter on the +/// `integration` binary) — and that runner is also the AUTHORITY for the denominator: it +/// reports **85 passed / 0 failed / 4090 filtered out** on this tree, re-run in fix round 4 at +/// `025015135`. The 83 is the same module at `bc20d4ff4`. +/// +/// ⚠ The denominator is anchored to the RUNNER and not, as fix round 3 wrote it, to a grep of +/// the test-attribute literal over this file (fix round 4, LOW-4). That grep is contaminable by +/// this very doc: round 3's own correction quoted the literal inside this comment, so at +/// `025015135` the grep returned **86** while the runner still reported 85, and a reader +/// applying the stated method would have concluded the doc was stale. This round dropped the +/// quoted literal, so the two agree again — but the runner counts ROWS and the grep counts +/// MENTIONS, and only one of those is what "of 85" means. That row asserts the PUBLISHED VALUE and +/// nothing else; it never declares a count, so nothing in the tree observed what a basis-A +/// offer's drive actually commits. The claim "under the hardcode that fixture's accepted drive +/// committed nothing at all" was true and untracked. This row tracks it. +/// +/// # The fixture, and why it is the right one +/// +/// `setup_3p_subset_lethal` is the ONE basis-A fixture whose published span is not 1: the +/// `DRAIN_CLERIC` / `BLOOD_SIPPER` pairing alternates a gain-life resolution and a lose-life +/// resolution, so one whole repetition spans TWO retained ring frames (`frames_per_period == 2`, +/// asserted below as a reach-guard). A fixture with `k == 1` could not tell a drive that reads +/// the VALUE from one that reads any positive constant. +/// +/// ⚠ SCOPE (fix round 3, LOW-4): this coverage is **synthetic-only**. All three basis-A rows in +/// this file are `GameScenario` builds; **no real dump certifies on basis A** — the file's real +/// 4p dumps are basis B, `dina_untargeted_drain_4p_offers_at_three_live_opponents` measured so +/// two ways in its own doc. This repo's standing lesson is real-dump-over-synthetic, so the row +/// says which it is rather than letting a reader take it for real-game evidence. Building a real +/// basis-A dump is its own round, not this one. +/// +/// # MEASURED, through the production accept path (`apply` → declare → APNAP accepts) +/// +/// derived `k = 2` ⇒ `n=1` commits `{P0:+1, P1:-1, P2:0}`, `n=2` `{+2,-2,0}`, `n=3` `{+3,-3,0}` +/// — exactly `n × δ`. P2 is the life-loss-immune bystander and is untouched at every `n`, which +/// is the multiplayer half: one cycle charges the seats the certificate names and only those. +/// The governing rule is **CR 101.2** — `LIFE_LOSS_IMMUNE` is "Your life total can't change.", +/// a "can't" effect, which takes precedence over the trigger's life-loss instruction. (Fix +/// round 3, LOW-2: this line cited CR 119.8, which governs life EXCHANGES, life REDISTRIBUTION, +/// and pay-life COSTS — none of which happens here. `setup_3p_bystander_winner` above already +/// names 101.2 as governing, with 119.8 only as a `cf.`, and 101.2 is the engine's own +/// convention for "can't" overrides.) +/// +/// # REVERT-PROBES — both RUN, and the second one does NOT flip +/// +/// * ⓐ **FLIPS.** Restore basis A's hardcoded `frames_per_period: 1` ⇒ every `n` commits +/// `{P0: 0, P1: 0, P2: 0}`, and the row reports it at the non-zero-commit guard. The +/// mechanism: `frames_per_period` is an OR-ed delimiter, so a `k` SMALLER than the true span +/// cuts the cycle early — here at one frame, half a period — and +/// `materialize_fixed_shortcut`'s conformance check then drops every one of them. +/// * ⓑ **DOES NOT FLIP**, measured, and it is recorded rather than quietly dropped. Deleting +/// `|| frames_per_period.is_some_and(|k| frames_this_cycle >= k)` from +/// `drive_one_shortcut_cycle` leaves this row GREEN, because this is a basis-**A** fixture: +/// its board genuinely RECURS, so `loop_states_equal_modulo_resources(boundary, &norm)` is a +/// working delimiter on its own and lands on the same two-frame cycle. (The same probe flips +/// five other rows in this module, including +/// `bounded_fixed_drive_rolls_back_a_partial_crossing_cycle` — the basis-B fixtures, whose +/// boards never recur, are the ones that need the delimiter to exist at all.) +/// +/// So this row's discrimination rests ENTIRELY on ⓐ — which is the point: ⓐ is the only edit +/// that distinguishes a measured span from a hardcoded one, and before this row nothing in the +/// tree observed its drive-level consequence. +#[test] +fn basis_a_bounded_fixed_count_commits_exactly_n_periods() { + let mut boards: Vec> = vec![]; + for n in [1u32, 2, 3] { + // Rebuilt per `n`: a driven trajectory is not replayable from a used state. + let (mut runner, kickoff) = setup_3p_subset_lethal(LoopDetectionMode::Interactive); + let _ = runner.cast(kickoff).resolve(); + drive_scenario_to_bounded_offer(&mut runner, PRIMED_LOOP_BEATS).unwrap_or_else(|| { + panic!( + "the subset-lethal class raises a bounded offer (see \ + `interactive_3p_subset_lethal_does_not_crown`); got {:?}", + runner.state().waiting_for + ) + }); + let mut state = runner.state().clone(); + + let (committed, per_cycle, bound) = accept_bounded_fixed(&mut state, n); + + // ── reach-guards: without these the `n × δ` equality can pass degenerately ── + assert!( + per_cycle.delta.life.values().filter(|v| **v != 0).count() >= 2, + "a zero-or-single-term δ makes `n × δ` trivially satisfiable; got {:?}", + per_cycle.delta.life + ); + assert!( + bound >= 3, + "`n = 3` must be WITHIN the offered bound, else the declaration is handed back and \ + this row silently tests the rejection arm; bound = {bound}" + ); + // THE ANTIDOTE TO THE HARDCODE: the drive must commit something. Under + // `frames_per_period: 1` on this fixture the conformance check drops every half-period + // and this is `{0,0,0}` — a state in which the `n × δ` equality below still holds for + // the zero-δ seats and would not, on its own, notice. + assert!( + committed.iter().any(|(_, delta)| *delta != 0), + "n={n}: a basis-A drive that commits nothing is the hardcoded-span defect; \ + committed {committed:?}" + ); + + // ── THE PROPERTY: committed delta == n × published per-period delta ── + for (seat, delta) in &committed { + assert_eq!( + *delta, + i64::from(n) * per_cycle.delta.life.get(seat).copied().unwrap_or(0), + "n={n}: {seat:?}'s committed life delta must be exactly `n` copies of the \ + period the offer published ({:?}); committed {committed:?}", + per_cycle.delta.life + ); + } + + assert_eq!( + state.players.iter().filter(|p| p.is_eliminated).count(), + 0, + "n={n}: CR 704.5a — a within-bound drive eliminates nobody" + ); + assert!( + matches!(state.waiting_for, WaitingFor::Priority { .. }), + "n={n}: a completed finite drive hands back to ordinary priority; got {:?}", + state.waiting_for + ); + + // ── WIDTH TRIPWIRE, deliberately LAST. It is the same published-number observation + // `interactive_3p_subset_lethal_does_not_crown` already carries, and MED-2's whole + // finding is that a published number is not a drive-level fact. Placed after the + // assertions above so that under the hardcoded-span revert the failure this row + // REPORTS is "the drive committed nothing", not "the offer published 1" — measured: + // with it placed first, the hardcode probe failed here and the drive assertions were + // never reached, which would have made this row a second copy of the existing one. + assert_eq!( + per_cycle.frames_per_period, 2, + "n={n}: this fixture's repetition spans two retained ring frames; a drift changes \ + what one committed cycle means and every equality above with it" + ); + boards.push(committed); + } + + // Three DISTINCT boards. Under the hardcoded span all three are `{0,0,0}`. + assert_ne!(boards[0], boards[1], "`Fixed(1)` vs `Fixed(2)`"); + assert_ne!(boards[1], boards[2], "`Fixed(2)` vs `Fixed(3)`"); +} + +/// FIX ROUND 1 MIRROR (A1.2) — the drive STOPS AT the first lethal cycle. It does not commit +/// `n` cycles blindly and reconcile the deaths afterwards. +/// +/// # Why the offer has to be doctored, and why that is the honest construction +/// +/// A within-bound count can NEVER cross a CR 704.5a threshold: `elimination_bounds` narrows to +/// `min over living seats of (life - 1) / per-cycle loss` with FLOOR division, so `n * loss <= +/// life - 1` for every seat and every legal `n`. MEASURED at the bound on both fixtures after +/// this round's fix — bloodloop3 `n = 16` lands `[20, 1, 1]`, dina `n = 30` lands +/// `[79, 5, 1, 6]`, zero eliminations in both. The bounded class therefore cannot reach its +/// own cross-lethal arm through an undoctored offer, and a mirror row built on one would be +/// unbuildable rather than merely weak. +/// +/// So this row is a HOSTILE fixture: it widens `schema.max_iterations` on the offer the engine +/// wrote — simulating a producer whose bound is WRONG — and then declares a count that arithmetic +/// says must kill. Everything downstream is production: `apply()`'s declare handler, the APNAP +/// window, `apply_confirmed_shortcut`, `materialize_fixed_shortcut`. The question it answers is +/// the one that matters when a certificate is unsound: does the drive stop at the boundary, or +/// does it drive through it? +/// +/// CR 704.3: state-based actions are checked whenever a player would get priority, and the +/// drive's every beat goes through `pass_priority_once_with_pipeline`, so CR 704.5a ("if a +/// player has 0 or less life, that player loses the game") is applied INSIDE the drive. +/// +/// # SCOPE — this row covers the TOTAL-WIPE arm ONLY (fix round 2, MED-1) +/// +/// bloodloop3 seats its two opponents at EQUAL life (17/17 at the offer beat, measured), so they +/// cross 0 on the SAME cycle, CR 104.2a crowns, and the drive takes `CycleOutcome::CrossLethal`. +/// The fixture is structurally incapable of a partial wipe: a symmetric fixture collapses every +/// partial case into a total case. The other arm — one seat crosses while ≥2 players survive, no +/// `GameOver`, `CycleOutcome::Abort`, the crossing cycle rolling back whole while prior +/// conforming cycles stay committed — behaves DIFFERENTLY +/// and has its own row, [`bounded_fixed_drive_rolls_back_a_partial_crossing_cycle`], which +/// carries the arm-asymmetry table. Both arms are out of contract for any legitimately-derived +/// bound; each is reachable only under a doctored one. +/// +/// # The MATCHED PAIR, on the same doctored offer +/// +/// * ⓐ `n = cycles_to_lethal - 1` — the drive runs to completion, every seat survives at +/// exactly one point of life, nobody is eliminated. +/// * ⓑ `n = 2 * cycles_to_lethal` — the drive stops at the FIRST crossing cycle. +/// +/// Without ⓐ, ⓑ alone is satisfied by a materializer that ignores `n` entirely and simply runs +/// the loop until something dies — which is exactly what `c6d834040` did. ⓐ is what forces the +/// stop point to be `n`-sensitive. +/// +/// ⚠ ⓐ's DOCTORING IS A NO-OP ON THIS FIXTURE, and that is stated rather than dressed up (fix +/// round 2, LOW-1). bloodloop3's honest bound is 16 and `cycles_to_lethal - 1 = 17 - 1 = 16`, so +/// `schema.max_iterations = survivor_n` writes back the value already present — asserted below, +/// so a fixture drift cannot silently turn it into a real widening. ⓐ is therefore an +/// AT-THE-BOUND instance of [`bounded_fixed_count_commits_exactly_n_periods`], not an +/// independent stop-short observation. The pair's stop-short content rests entirely on ⓑ's +/// clause (b). +/// +/// # What flips +/// +/// * delete the frame delimiter from `drive_one_shortcut_cycle` ⇒ arm ⓐ runs to lethal instead +/// of stopping at 16 periods ⇒ its zero-elimination assertion FAILS. (Arm ⓑ does NOT flip: +/// the unbounded HEAD drive coincidentally halts at the same lethal board. Stated so the +/// pair's discrimination is not overclaimed — ⓐ carries it.) +/// * a blind implementation that ran all `2 * cycles_to_lethal` periods and reconciled the +/// deaths afterwards would leave the opponents at `17 - 34 = -17`; ⓑ's (b) pins the stop +/// point to `ceil(life / loss)` periods, derived from the published δ, so an overshoot of +/// even one cycle FAILS. +#[test] +fn bounded_fixed_drive_stops_at_the_first_lethal_cycle() { + let mut state = bloodloop_state(3); + drive_to_bounded_offer(&mut state, 400).expect("the bounded offer must fire at 3 players"); + + let (proposer, certificate, schema) = bounded_offer_parts(&state); + let per_cycle = certificate + .per_cycle + .clone() + .expect("a bounded offer publishes its per-period signature"); + let bound = schema.max_iterations; + let lives_before: Vec<(PlayerId, i64)> = state + .players + .iter() + .map(|p| (p.id, p.life as i64)) + .collect(); + + // Per-seat loss the offer published; the stop point is derived from it, never from a literal. + let loss = |seat: &PlayerId| -per_cycle.delta.life.get(seat).copied().unwrap_or(0); + let victims: Vec = lives_before + .iter() + .map(|(id, _)| *id) + .filter(|id| loss(id) > 0) + .collect(); + assert_eq!( + victims.len(), + 2, + "REACH-GUARD: this row is about a MULTI-seat partial wipe, so both opponents must be \ + losing life per period; published δ {:?}", + per_cycle.delta.life + ); + + // The smallest count that drives some living seat to 0 or less: `ceil(life / loss)`. + let cycles_to_lethal = lives_before + .iter() + .filter(|(id, _)| loss(id) > 0) + .map(|(id, l0)| l0.div_euclid(loss(id)) + i64::from(l0.rem_euclid(loss(id)) != 0)) + .min() + .expect("at least one seat is losing life, asserted above"); + let n = u32::try_from(cycles_to_lethal).expect("fits") * 2; + assert!( + i64::from(n) > cycles_to_lethal, + "REACH-GUARD: `n` must be COMFORTABLY past the first lethal cycle, else 'stops at the \ + boundary' and 'ran to completion' are the same observation" + ); + assert!( + n > bound, + "REACH-GUARD: a lethal `n` is by construction above the honest bound ({bound}) — that \ + is the contract this row is deliberately violating to test the drive's own behaviour" + ); + + // ⓐ SURVIVING ARM — one period short of the first crossing. Same doctored offer, so the + // only difference between the arms is `n` itself. + { + let mut survive = state.clone(); + let survivor_n = u32::try_from(cycles_to_lethal - 1).expect("fits"); + let WaitingFor::LoopShortcut { schema, .. } = &mut survive.waiting_for else { + unreachable!("bounded_offer_parts already matched the offer") + }; + // The no-op recorded in this row's doc, pinned so it cannot drift unnoticed: on THIS + // fixture the honest bound already equals `cycles_to_lethal - 1`, so the line below + // rewrites the value in place. If a fixture change ever makes them differ, ⓐ becomes a + // genuine doctored widening and its doc must be re-derived rather than re-read. + assert_eq!( + schema.max_iterations, survivor_n, + "ⓐ's assignment is a NO-OP on this fixture (honest bound == cycles_to_lethal - 1); \ + a divergence means ⓐ is no longer an at-the-bound instance" + ); + schema.max_iterations = survivor_n; + r6a_declare_and_accept_all(&mut survive, proposer, survivor_n); + assert_eq!( + survive.players.iter().filter(|p| p.is_eliminated).count(), + 0, + "ⓐ CR 704.5a: one period short of the crossing, every seat is still above 0; \ + lives {:?}", + survive.players.iter().map(|p| p.life).collect::>() + ); + for (seat, l0) in &lives_before { + let life_now = survive.players.iter().find(|p| p.id == *seat).unwrap().life as i64; + assert_eq!( + l0 - life_now, + i64::from(survivor_n) * loss(seat), + "ⓐ {seat:?}: exactly `n` periods committed, no more — the drive must stop \ + because `n` ran out, not because something died" + ); + } + assert!( + matches!(survive.waiting_for, WaitingFor::Priority { .. }), + "ⓐ a completed finite drive hands back to priority; got {:?}", + survive.waiting_for + ); + } + + // ⓑ the doctoring, and ONLY this ── + let WaitingFor::LoopShortcut { schema, .. } = &mut state.waiting_for else { + unreachable!("bounded_offer_parts already matched the offer") + }; + schema.max_iterations = n; + + r6a_declare_and_accept_all(&mut state, proposer, n); + + // (a) CR 704.3 + CR 704.5a: the drive stopped at a terminal state applied INSIDE it. + assert_eq!( + state.waiting_for, + WaitingFor::GameOver { + winner: Some(proposer) + }, + "CR 704.5a: with every opponent at 0 or less life, CR 104.2a crowns the last player \ + standing, and the drive commits + stops there" + ); + let eliminated: Vec = state + .players + .iter() + .filter(|p| p.is_eliminated) + .map(|p| p.id) + .collect(); + + // (c) EXACTLY the seats the published period drains — never a full-`n` overshoot that takes + // the proposer down too, and never a subset that leaves a drained seat alive. + // + // ⚠ THIS CLAIM IS PER-ARM (fix round 2, MED-1). It holds on the `CycleOutcome:: + // CrossLethal` arm, which is the only arm this symmetric fixture can reach: the crossing + // cycle COMMITS and the eliminated set is exactly the victims. On the `Abort` arm — one + // seat crosses while ≥2 survive — the eliminated set is EMPTY, and empty because the + // crossing cycle was rolled back whole, not because nobody crossed. Same surface + // reading, two different facts; conflating them is what let this doc ship a claim + // measurement contradicts. The Abort arm's own row is + // `bounded_fixed_drive_rolls_back_a_partial_crossing_cycle`. + assert_eq!( + eliminated, + victims, + "CR 704.5a: on the total-wipe (GameOver) arm the eliminated set is exactly the seats the \ + published period drains; lives {:?}", + state.players.iter().map(|p| p.life).collect::>() + ); + + // (b) STRICTLY LESS than `n` periods committed, and pinned to the FIRST crossing cycle. + for (seat, l0) in &lives_before { + let committed = l0 - state.players.iter().find(|p| p.id == *seat).unwrap().life as i64; + let full_n = i64::from(n) * loss(seat); + if loss(seat) > 0 { + assert!( + committed < full_n, + "{seat:?}: a drive that ran all {n} periods would have committed {full_n}; it \ + must stop at the CR 704.5a boundary instead, got {committed}" + ); + assert_eq!( + committed, + cycles_to_lethal * loss(seat), + "{seat:?}: the drive stops at the FIRST cycle that crosses the threshold — \ + `ceil(life / loss)` periods, derived from the published δ, not one more" + ); + } + } +} + +/// FIX ROUND 2 (MED-1) — THE OTHER LETHAL ARM. A crossing that eliminates ONE seat while +/// **≥2 players survive** raises no `GameOver`, so the drive does not cross-lethal: it ABORTS. +/// The crossing cycle rolls back whole, the cycles before it stay committed, and every seat is +/// still alive at handback. +/// +/// # The arm asymmetry, stated so a future drive learns it from the doc and not by accident +/// +/// | arm | trigger | outcome | +/// |---|---|---| +/// | **total wipe** | every remaining opponent crosses 0 on the same cycle ⇒ `WaitingFor::GameOver` | `CycleOutcome::CrossLethal` — **the crossing cycle COMMITS**, the game ends | +/// | **partial crossing** | one seat crosses 0 while **≥2** players survive ⇒ no `GameOver` | `CycleOutcome::Abort` — **the crossing cycle rolls back WHOLE; prior conforming cycles STAY COMMITTED**; priority handback | +/// +/// Both arms are **out of contract for any legitimately-derived bound**. `elimination_bounds` +/// narrows to `min over living seats of (life - 1) / per-cycle loss` with FLOOR division, so +/// `n * loss <= life - 1` for every seat at every legal `n` and a within-bound drive can never +/// reach either arm. Each is therefore reachable only under a **doctored** bound — which is what +/// both this row and [`bounded_fixed_drive_stops_at_the_first_lethal_cycle`] construct. +/// +/// The `Abort` is the DESIGNED behaviour and this row asserts it rather than a wish. The property +/// it buys is **no half-applied period, ever**: the out-of-contract cycle is refused ATOMICALLY, +/// while conforming work already done is NOT discarded. That is strictly better than a +/// whole-drive rollback — materializing a partial elimination would leave the remaining +/// repetitions bounded by a δ the board stops moving (the surviving seats' per-cycle drain +/// changes the moment a drain target leaves the game), and discarding the conforming prefix +/// would throw away cycles the table's own agreed bound covers. See +/// `materialize_fixed_shortcut`'s `CycleOutcome::Abort` arm. +/// +/// MEASURED SHAPE of that split on this fixture: honest bound 30, doctored `n` at or past the +/// first crossing (31) ⇒ **30 periods committed**, cycle 30 refused, nobody eliminated. The +/// assertions below bind to exactly that: `first_crossing - 1` periods, not zero and not `n`. +/// +/// # Why this row had to exist separately — the fixture-symmetry trap +/// +/// [`bounded_fixed_drive_stops_at_the_first_lethal_cycle`] is the mirror for the same +/// stop-short property, but its bloodloop3 fixture seats **two opponents at equal life** (17/17, +/// measured), so they cross on the SAME cycle and it can only ever exhibit the total-wipe arm. +/// A symmetric fixture collapses every partial case into a total case; the partial arm — the one +/// real multiplayer boards take, since equal life totals are the exception — had no fixture at +/// all. This row's dina 4p dump is ASYMMETRIC by measurement (opponents at 35/31/36, all draining +/// 1 per period ⇒ first crossings 35/31/36), and the reach-guards below FAIL if that ever drifts +/// into symmetry, which is what stops this row from silently becoming a second copy of the mirror. +/// +/// # What is asserted, and what is deliberately NOT +/// +/// Every quantity is derived from the certificate the ENGINE published and the offer-beat board. +/// The row asserts the OBSERVABLE outcome: exactly `first_crossing - 1` periods committed, zero +/// eliminations, every seat above 0, handback to ordinary priority. +/// +/// It does NOT assert "the conformance check never fired", because a conformance drop at the same +/// cycle index and an `Abort` at that index leave IDENTICAL final states — both `break 'cycles` +/// onto the same rollback. That distinction was settled by a REVERT-PROBE instead: deleting the +/// conformance check from `materialize_fixed_shortcut` leaves this row GREEN and unchanged, so +/// the stop is the `Abort`, not the conformance drop. Asserting it from the state would have been +/// an unfalsifiable claim. +/// +/// # REVERT-PROBES +/// +/// * delete `|| frames_per_period.is_some_and(|k| frames_this_cycle >= k)` from +/// `drive_one_shortcut_cycle` ⇒ the dina drive commits ZERO (`Abort` at cycle 0) ⇒ the +/// committed-delta `assert_eq!` FAILS. +/// * MUST-NOT-FLIP: deleting the conformance check leaves this row green (measured) — it is the +/// `Abort` arm, not the conformance arm. +#[test] +fn bounded_fixed_drive_rolls_back_a_partial_crossing_cycle() { + let mut state = restore_dump(&gunzip_dump(include_bytes!( + "../fixtures/dina_conqueror_4p.json.gz" + ))); + drive_to_bounded_offer(&mut state, 400).expect("the bounded offer must fire on the 4p dump"); + + let (proposer, certificate, schema) = bounded_offer_parts(&state); + let per_cycle = certificate + .per_cycle + .clone() + .expect("a bounded offer publishes its per-period signature"); + let honest_bound = schema.max_iterations; + let lives_before: Vec<(PlayerId, i64)> = state + .players + .iter() + .map(|p| (p.id, p.life as i64)) + .collect(); + let loss = |seat: &PlayerId| -per_cycle.delta.life.get(seat).copied().unwrap_or(0); + + // `ceil(life / loss)` — the first cycle index at which each drained seat crosses 0. + let crossings: Vec<(PlayerId, i64)> = lives_before + .iter() + .filter(|(id, _)| loss(id) > 0) + .map(|(id, l0)| { + ( + *id, + l0.div_euclid(loss(id)) + i64::from(l0.rem_euclid(loss(id)) != 0), + ) + }) + .collect(); + assert!( + crossings.len() >= 2, + "REACH-GUARD: a PARTIAL wipe needs at least two drained seats, else 'one crosses while \ + others survive' is unconstructible; published δ {:?}", + per_cycle.delta.life + ); + let first_crossing = crossings + .iter() + .map(|(_, c)| *c) + .min() + .expect("at least two drained seats, asserted above"); + + // ── THE ASYMMETRY REACH-GUARD. This is the guard the mirror row could not have had. + let first_victims: Vec = crossings + .iter() + .filter(|(_, c)| *c == first_crossing) + .map(|(id, _)| *id) + .collect(); + assert_eq!( + first_victims.len(), + 1, + "REACH-GUARD: this row is about the PARTIAL arm, so exactly ONE seat may cross first. \ + Equal crossings would make the whole table die together, take `CycleOutcome::CrossLethal` \ + and silently re-test the mirror row's total-wipe arm instead; crossings {crossings:?}" + ); + let survivors = state.players.iter().filter(|p| !p.is_eliminated).count() - first_victims.len(); + assert!( + survivors >= 2, + "REACH-GUARD: with fewer than two survivors CR 104.2a crowns and `WaitingFor::GameOver` \ + routes the drive to the CrossLethal arm; got {survivors} survivors at the first crossing" + ); + + // The honest bound is exactly one period short of that crossing — the CR 704.5a headroom + // term (`life - 1`) with floor division. Asserted, not assumed: it is what makes the + // doctoring below a REAL widening rather than a re-write of the value already present. + assert_eq!( + i64::from(honest_bound), + first_crossing - 1, + "`elimination_bounds` reserves one point of headroom, so the honest bound sits one \ + period below the first crossing; bound {honest_bound}, crossings {crossings:?}" + ); + + // Three doctored bounds: at the crossing, and comfortably past it. All three must stop at + // the same place — a drive that stopped `n`-relative rather than at the boundary would not. + for over in [0u32, 3, 9] { + let mut doctored = state.clone(); + let n = u32::try_from(first_crossing).expect("fits") + over; + let WaitingFor::LoopShortcut { schema, .. } = &mut doctored.waiting_for else { + unreachable!("bounded_offer_parts already matched the offer") + }; + schema.max_iterations = n; + + r6a_declare_and_accept_all(&mut doctored, proposer, n); + + // (a) NOBODY is eliminated — by ROLLBACK, not because nobody crossed. `n >= first + // crossing` means the arithmetic says a seat must die; the drive refuses the cycle. + assert_eq!( + doctored + .players + .iter() + .filter(|p| p.is_eliminated) + .map(|p| p.id) + .collect::>(), + Vec::::new(), + "n={n}: the crossing cycle is rolled back whole, so the eliminated set is EMPTY — \ + which is a different fact from 'nobody crossed'; lives {:?}", + doctored.players.iter().map(|p| p.life).collect::>() + ); + assert!( + doctored.players.iter().all(|p| p.life > 0), + "n={n}: every seat is above the CR 704.5a threshold; lives {:?}", + doctored.players.iter().map(|p| p.life).collect::>() + ); + + // (b) EXACTLY `first_crossing - 1` periods committed: every cycle before the crossing + // one, and none of it. Derived from the published δ, never from a literal. + for (seat, l0) in &lives_before { + let committed = l0 + - doctored + .players + .iter() + .find(|p| p.id == *seat) + .unwrap() + .life as i64; + assert_eq!( + committed, + (first_crossing - 1) * -per_cycle.delta.life.get(seat).copied().unwrap_or(0), + "n={n} {seat:?}: the drive commits every period up to the crossing cycle and \ + rolls that one back; lives {:?}", + doctored.players.iter().map(|p| p.life).collect::>() + ); + } + + // (c) NOT the CrossLethal arm. `GameOver` here would mean the partial crossing crowned + // someone, which is the confusion this row exists to keep separate. + assert_eq!( + doctored.waiting_for, + WaitingFor::Priority { player: proposer }, + "n={n}: CR 104.2a — a player wins only once ALL their opponents have left, and this \ + crossing eliminates at most one of three, so there is no winner to crown and the \ + aborted drive hands back ordinary priority rather than ending the game" + ); + } +} + +/// FIX ROUND 1 (HIGH-3) — the conformance check `PeriodicDelta`'s doc has always specified +/// ("so a bounded drive can check that each committed cycle actually conformed") and which +/// nothing implemented. A committed cycle whose measured resource delta differs from the +/// published signature is DROPPED WHOLE and the drive hands back to manual play. +/// +/// # Why it is load-bearing rather than belt-and-braces +/// +/// `elimination_bounds` divided the CR 704.5a headroom (`life - 1`) by `per_cycle.delta` to +/// produce the count the table agreed to. If a committed cycle moves a different amount, that +/// division no longer describes the drive, and the remaining repetitions can carry a seat past +/// the threshold INSIDE the proposal — the exact conditional action CR 732.2a forbids. +/// +/// # The hostile fixture +/// +/// The offer is real (the engine wrote it after 400 driven beats); ONE field is then doctored — +/// the published `per_cycle.delta` gains a life term for a seat the loop does not touch, which +/// no cycle can ever produce. Everything downstream is production: `apply()`'s declare handler, +/// the APNAP window, `apply_confirmed_shortcut`, `materialize_fixed_shortcut`. +/// +/// # Non-vacuity — the paired positive control is arm ⓐ +/// +/// ⓐ runs the SAME trajectory with the signature untouched and commits `n × δ`. Without it, ⓑ's +/// zero-delta observation would be indistinguishable from "the offer never fired" or "the drive +/// aborts on this fixture anyway" — which is precisely the shape the HEAD defect had. +/// +/// REVERT-PROBE: delete the `if actual != pd.delta { break 'cycles; }` block in +/// `materialize_fixed_shortcut` ⇒ ⓑ commits `n × (real δ)` like ⓐ ⇒ ⓑ's zero-delta assertion +/// FAILS while ⓐ stays green. +#[test] +fn a_cycle_that_does_not_match_the_published_period_is_dropped() { + let n: u32 = 2; + + // ⓐ POSITIVE CONTROL — untouched signature, same trajectory. + let mut control = bloodloop_state(3); + drive_to_bounded_offer(&mut control, 400).expect("the bounded offer must fire"); + let (committed_ok, per_cycle, _) = accept_bounded_fixed(&mut control, n); + assert!( + committed_ok.iter().any(|(_, d)| *d != 0), + "REACH-GUARD: the undoctored drive must COMMIT something, else ⓑ's zero proves nothing \ + about the conformance check; got {committed_ok:?}" + ); + + // ⓑ the same offer with the published period made unproducible. + let mut state = bloodloop_state(3); + drive_to_bounded_offer(&mut state, 400).expect("the bounded offer must fire"); + let (proposer, _, _) = bounded_offer_parts(&state); + let stowaway = state + .players + .iter() + .map(|p| p.id) + .find(|id| per_cycle.delta.life.get(id).copied().unwrap_or(0) == 0) + .expect("the cascade's own controller loses no life, so a zero-term seat exists"); + let WaitingFor::LoopShortcut { certificate, .. } = &mut state.waiting_for else { + unreachable!("bounded_offer_parts already matched the offer") + }; + certificate + .per_cycle + .as_mut() + .expect("a bounded offer publishes its signature") + .delta + .life + .insert(stowaway, -7); + + let lives_before: Vec = state.players.iter().map(|p| p.life).collect(); + r6a_declare_and_accept_all(&mut state, proposer, n); + + assert_eq!( + state.players.iter().map(|p| p.life).collect::>(), + lives_before, + "CR 732.2a: no cycle can produce the doctored period, so the FIRST one is dropped whole \ + and ZERO life moves — a partial commit would mean the drive kept a cycle whose \ + magnitude the agreed bound was not computed from" + ); + assert!( + matches!(state.waiting_for, WaitingFor::Priority { .. }), + "a non-conforming drive falls closed to manual play (CR 800.4a living seat), it does \ + not crown and does not wedge; got {:?}", + state.waiting_for + ); + assert_eq!( + state.players.iter().filter(|p| p.is_eliminated).count(), + 0, + "nothing was committed, so nothing crossed a CR 704.5a threshold" + ); +} + +/// FIX ROUND 1 (MED-4) — the AI's bounded-declare candidate is GENERATED, LEGAL, and DRIVES. +/// +/// The `if schema.points.is_empty() && schema.is_bounded()` block in +/// `ai_support::candidates` shipped with zero coverage: deleting it left the engine suite and +/// every `phase-ai` suite green. (Fix round 3, LOW-3: a bare "(4167)" stood here with neither a +/// runner nor a filter recorded beside it, so it named a shape nobody could reproduce; it is +/// deleted rather than re-dressed, exactly as the same count was at +/// `bounded_offer_conjunct_tests`' module doc. The reproducible claim is this row's own +/// REVERT-PROBE line below.) Its sibling one screen away +/// (`ai_collapse_candidate_is_clamped_to_the_accepted_bound`) sets the standard this row +/// mirrors — generate the candidate through the production generator, then `apply()` it. +/// +/// Without that candidate an AI proposer at a bounded offer has exactly two options: +/// `UntilLethal`, which `handle_declare_shortcut` refuses outright against a bounded offer, and +/// `DeclineShortcut`. The block is the difference between an AI that can take this shortcut and +/// one that structurally cannot. +/// +/// ⚠ RECORDED, NOT FIXED (a scope note, measured here): the block is gated on +/// `schema.points.is_empty()`. A TARGETED bounded offer publishes pins, so the AI gets no +/// accept candidate at all — `UntilLethal` is refused for bounded and the `Fixed` candidate +/// carries `template: None`, which fail-closes on published pins. A targeted bounded offer is +/// therefore AI-undeclarable today. That is a coverage gap in the candidate generator, not a +/// soundness bug (the AI declines, which is always legal), and it is left for its own round. +/// +/// REVERT-PROBE: delete the `schema.points.is_empty() && schema.is_bounded()` block ⇒ +/// assertion (2) FAILS (`Fixed(bound)` absent from the generated candidates). +#[test] +fn ai_bounded_declare_candidate_is_generated_legal_and_drives() { + use engine::analysis::decision_template::IterationCount; + + let mut state = bloodloop_state(3); + drive_to_bounded_offer(&mut state, 400).expect("the bounded offer must fire at 3 players"); + let (proposer, certificate, schema) = bounded_offer_parts(&state); + let per_cycle = certificate + .per_cycle + .clone() + .expect("a bounded offer publishes its per-period signature"); + let bound = schema.max_iterations; + + // (1) reach-guards: this row is about the BOUNDED, UNTARGETED shape the block gates on. + assert!( + schema.is_bounded(), + "REACH-GUARD: an unbounded offer takes a different generator arm; bound = {bound}" + ); + assert!( + schema.points.is_empty(), + "REACH-GUARD: the block is gated on an empty pin set; got {:?}", + schema.points + ); + + // (2) the production generator offers it. + let expected = GameAction::DeclareShortcut { + count: IterationCount::Fixed(bound), + template: None, + }; + let candidates = engine::ai_support::legal_actions(&state); + assert!( + candidates.contains(&expected), + "the AI must be able to declare the bounded offer's own count; got {candidates:?}" + ); + + // (3) ...and the reducer ACCEPTS it — which is what makes (2) load-bearing rather than a + // restatement of the generator. A refused declaration hands straight back to priority. + let lives_before: Vec = state.players.iter().map(|p| p.life as i64).collect(); + apply(&mut state, proposer, expected) + .expect("the AI's generated candidate must be accepted by the reducer"); + assert!( + matches!(state.waiting_for, WaitingFor::RespondToShortcut { .. }), + "CR 732.2b: an accepted declaration opens the APNAP response window; a handback to \ + Priority would mean the generator produced a count the engine refuses. got {:?}", + state.waiting_for + ); + + // (4) ...and the accepted count DRIVES. Bound to the published period, never a literal. + while let WaitingFor::RespondToShortcut { player, .. } = state.waiting_for.clone() { + apply( + &mut state, + player, + GameAction::RespondToShortcut { + response: ShortcutResponse::Accept, + }, + ) + .expect("each living opponent accepts"); + } + for (seat, l0) in state + .players + .iter() + .map(|p| p.id) + .zip(&lives_before) + .collect::>() + { + let now = state.players.iter().find(|p| p.id == seat).unwrap().life as i64; + assert_eq!( + now - l0, + i64::from(bound) * per_cycle.delta.life.get(&seat).copied().unwrap_or(0), + "{seat:?}: the AI-declared count commits exactly `max_iterations` copies of the \ + published period" + ); + } + assert_eq!( + state.players.iter().filter(|p| p.is_eliminated).count(), + 0, + "CR 704.5a: the offered bound reserves `life - 1` of headroom, so the AI's own \ + maximal legal declaration still eliminates nobody" + ); +} + +// --------------------------------------------------------------------------- +// G1 — THE VALIDATED RANGE MUST COVER THE DRIVEN RANGE (rows R6 / R7 / R9). +// +// INVARIANT: at declare time the firewall must validate the image of the selection function +// over the range the ACCEPTED COUNT will actually drive (`0..n`), against the offer's +// PUBLISHED `legal_targets`. Before this fix it validated `0..shortcut_drive_period(..)` — a +// range derived from the SCHEDULE's own length, which answers a different question — so it +// both ACCEPTED a pin whose driven image leaves the published set at an index the count +// reaches (arm A), and REFUSED conforming declarations whose count is shorter than the +// schedule (arms D1 and E). +// +// Every arm drives the PRODUCTION entry `apply_action(GameAction::DeclareShortcut { .. })` +// and asserts on the published `waiting_for`: `RespondToShortcut` = ingested (CR 732.2b's +// response window opened), `Priority` = refused into the manual-play handback. +// --------------------------------------------------------------------------- + +/// Two objects on a 3p board, and the declare-time verdict for one (published set, count, +/// schedule) triple. The board is real and the offer is planted, exactly as +/// `declare_illegal_pin_falls_back_legal_ingests` plants it — what is under test is the +/// declare firewall, not the detector that would otherwise mint the offer. +/// +/// `max_iterations` is 1_000 (the un-narrowed global cap), so no arm below is refused by the +/// count cap instead of by the range: the cap and the bound are upstream conjuncts that would +/// otherwise dominate every verdict in the table. +fn g1_declare_verdict( + publish_b: bool, + count: IterationCount, + schedule_of: &dyn Fn(&YieldTarget, &YieldTarget) -> TargetSchedule, + pin_twice: bool, +) -> WaitingFor { + let mut scenario = GameScenario::new_n_player(3, 7); + scenario.at_phase(Phase::PreCombatMain); + scenario.with_life(P0, 20); + scenario.with_life(P1, 20); + scenario.with_life(P2, 20); + let obj_a = scenario.add_creature(P0, "Schedule Target A", 1, 1).id(); + let obj_b = scenario.add_creature(P0, "Schedule Target B", 1, 1).id(); + let mut runner = scenario.build(); + runner.state_mut().loop_detection = LoopDetectionMode::Interactive; + + let source_of = |id: ObjectId| YieldTarget::ThisObject { + source_id: id, + incarnation: None, + trigger_description: None, + }; + let (a, b) = (source_of(obj_a), source_of(obj_b)); + let slot = DecisionSlot { + source: a.clone(), + index: 0, + }; + let mut legal_targets = vec![TargetRef::Object(obj_a)]; + if publish_b { + legal_targets.push(TargetRef::Object(obj_b)); + } + let schema = ShortcutDecisionSchema { + iteration_count: count.clone(), + // No narrowed CR 732.2a bound — `Default` carries the global cap. + max_iterations: ShortcutDecisionSchema::default().max_iterations, + points: vec![DecisionPoint { + slot: slot.clone(), + kind: DecisionPointKind::Targets { + legal_targets, + min_targets: 1, + max_targets: 1, + ordered: true, + }, + }], + convoke_tappable_count: 0, + }; + let mut targets = vec![TargetPin::Scheduled(schedule_of(&a, &b))]; + if pin_twice { + // E-neg: two pins against a `min_targets == max_targets == 1` point. The cardinality + // check sits OUTSIDE the per-index loop, so it must still refuse at count 0. + targets.push(TargetPin::Scheduled(TargetSchedule::Constant(a.clone()))); + } + let template = DecisionTemplate { + owner: P0, + decisions: vec![PinnedDecision::Targets { slot, targets }], + replay: ReplayMode::Scheduled { + count: count.clone(), + }, + key: DecisionGroupKey::from_sources(std::slice::from_ref(&a), DecisionKind::LoopChoice), + }; + + runner.state_mut().waiting_for = WaitingFor::LoopShortcut { + proposer: P0, + predicted_winner: Some(P0), + certificate: synthetic_lethal_cert(), + schema, + }; + runner + .act(GameAction::DeclareShortcut { + count, + template: Some(template), + }) + .expect("declare dispatch succeeds (a refusal is a manual handback, not an error)"); + runner.state().waiting_for.clone() +} + +fn piecewise_a_then_b(a: &YieldTarget, b: &YieldTarget) -> TargetSchedule { + TargetSchedule::Piecewise(vec![(0, a.clone()), (5, b.clone())]) +} + +fn piecewise_b_then_a(a: &YieldTarget, b: &YieldTarget) -> TargetSchedule { + TargetSchedule::Piecewise(vec![(0, b.clone()), (5, a.clone())]) +} + +fn round_robin_a_b(a: &YieldTarget, b: &YieldTarget) -> TargetSchedule { + TargetSchedule::RoundRobin(vec![a.clone(), b.clone()]) +} + +/// R6 arms A / B / C — the validated range must COVER the driven range. +/// +/// * **A (the fix's positive, ⚠ behaviour change).** Publishes only A; the schedule switches +/// to the UNPUBLISHED B at index 5; the declared count is 8, so the drive reaches index 5. +/// Post-fix this is REFUSED. Pre-fix the validated range was the schedule length (2), so +/// indices 5..8 were never checked and the declaration was INGESTED — the soundness hole. +/// * **B (reach-guard).** The identical schedule at count 5 never reaches the switch, so it +/// is ingested. Without B, arm A would also pass under a firewall that rejected everything. +/// * **C (attribution control).** The identical count-8 declaration with B ALSO published is +/// ingested — so A's refusal is attributable to the PUBLISHED SET and not to the count, the +/// schedule, or the harness. +/// +/// REVERT-PROBE: pass `shortcut_drive_period(Some(t))` again in place of +/// `shortcut_validated_range(&count, Some(t))` ⇒ arm A is ingested ⇒ FAILS (and D1 below +/// FAILS with it), while B and C do not move. +#[test] +fn declared_count_beyond_the_published_schedule_window_is_refused() { + // A — the driven range reaches the unpublished arm. + assert!( + matches!( + g1_declare_verdict(false, IterationCount::Fixed(8), &piecewise_a_then_b, false), + WaitingFor::Priority { .. } + ), + "CR 732.2a: a count that drives into an UNPUBLISHED schedule arm is not a sequence \ + that may be legally taken — refuse to manual play" + ); + // B — reach-guard: the same schedule inside the published window is ingested. + assert!( + matches!( + g1_declare_verdict(false, IterationCount::Fixed(5), &piecewise_a_then_b, false), + WaitingFor::RespondToShortcut { .. } + ), + "reach-guard: a count that never reaches the switch is a conforming declaration" + ); + // C — attribution: publish the second arm and the count-8 declaration is fine. + assert!( + matches!( + g1_declare_verdict(true, IterationCount::Fixed(8), &piecewise_a_then_b, false), + WaitingFor::RespondToShortcut { .. } + ), + "attribution control: with BOTH arms published, count 8 is conforming — so A's \ + refusal is the published set and not the count" + ); +} + +/// R7 arms D1 / D2 / D3 — the range is EXACTLY the driven range, not a padded one. +/// +/// * **D1 (over-refusal fix, ⚠ behaviour change).** A `RoundRobin[A,B]` rotation with only A +/// published, declared at count 1: the drive touches index 0 only, which selects A. Post-fix +/// INGESTED. Pre-fix the schedule-derived period (2) forced index 1 — an index nothing +/// drives — to be validated, and the declaration was refused. This is the over-veto class. +/// * **D2 (must-not-flip).** The same rotation with BOTH arms published is ingested at count 1 +/// AND at count 8 — the protected arm, pinned so the fix cannot be mistaken for "accept +/// more". +/// * **D3 (mandatory discriminating negative).** The same rotation with only A published at +/// count 2 DOES reach index 1 ⇒ refused. D3 is what separates D1 from "the validation was +/// deleted": under a deleted firewall D3 would be ingested. +#[test] +fn declared_count_shorter_than_the_rotation_is_not_over_refused() { + // D1 — the fix's over-refusal half. + assert!( + matches!( + g1_declare_verdict(false, IterationCount::Fixed(1), &round_robin_a_b, false), + WaitingFor::RespondToShortcut { .. } + ), + "CR 732.2a: a count of 1 drives index 0 only, which selects the PUBLISHED arm — \ + refusing it is the over-veto this fix removes" + ); + // D2 — must-not-flip, both counts. + for count in [IterationCount::Fixed(1), IterationCount::Fixed(8)] { + assert!( + matches!( + g1_declare_verdict(true, count.clone(), &round_robin_a_b, false), + WaitingFor::RespondToShortcut { .. } + ), + "a fully-published rotation is conforming at {count:?} — this arm must not move" + ); + } + // D3 — the discriminating negative at the first index the count DOES reach. + assert!( + matches!( + g1_declare_verdict(false, IterationCount::Fixed(2), &round_robin_a_b, false), + WaitingFor::Priority { .. } + ), + "count 2 reaches index 1, which selects the UNPUBLISHED arm ⇒ refused. If this is \ + ingested, the firewall is gone rather than correctly ranged" + ); +} + +/// R9 arms E / E-neg — `Fixed(0)` validates over an EMPTY range, and the firewall is STILL +/// live there. +/// +/// CR 732.2b: a shortened proposal's new ending point is the first deviating choice, and +/// CR 732.2c makes taking the shortcut mandatory once accepted — so a zero-repetition +/// proposal must be representable AND validatable. The `.max(1)` floor validated index 0 of a +/// range nothing drives. +/// +/// * **E (⚠ behaviour change).** `Piecewise[(0,B),(5,A)]` with only A published, at count 0. +/// Index 0 selects the UNPUBLISHED B — but nothing drives index 0, so post-fix this is +/// INGESTED. The template shape is load-bearing: under `RoundRobin[A,B]` index 0 selects the +/// PUBLISHED A, so the arm would pass before and after and its revert-probe could not fail. +/// * **E-neg (anti-"validation deleted" control at the SAME count).** Two pins against a +/// one-target point at the same count 0: the cardinality check sits outside the index loop, +/// so it must still refuse. Without E-neg, E would also pass under a firewall that had been +/// deleted outright. +/// +/// REVERT-PROBE: restore the `.max(1)` floor ⇒ E FAILS and no other arm moves (every other +/// arm's range is already ≥ 1). +#[test] +fn a_zero_count_declaration_validates_over_an_empty_range_but_still_checks_cardinality() { + // E — nothing is driven, so nothing is out of the published set. + assert!( + matches!( + g1_declare_verdict(false, IterationCount::Fixed(0), &piecewise_b_then_a, false), + WaitingFor::RespondToShortcut { .. } + ), + "CR 732.2b/c: a zero-repetition proposal drives no index, so no index can leave the \ + published set — the floor was refusing a conforming declaration" + ); + // E-neg — the firewall is still live at the same count. + assert!( + matches!( + g1_declare_verdict(false, IterationCount::Fixed(0), &piecewise_b_then_a, true), + WaitingFor::Priority { .. } + ), + "the cardinality check is OUTSIDE the index loop: two pins against a one-target \ + point are refused even at count 0. If this is ingested, E passed because validation \ + was deleted rather than because the range is empty" + ); +} + +// ═════════════ PR-7 Phase 5c, ITEM 2 — the kill-declared-target stop-short row ═════════════ + +/// Player-scope hexproof (CR 702.11c). The refuser is RULED to be +/// hexproof rather than phasing: hexproof makes the pinned seat illegal at the DRIVE's +/// spec-aware CR 608.2b re-validation (the `GameAction::SelectTargets` the injector submits), +/// which is the backstop layer no other 5c row exercises. Phasing would instead fail at +/// `resolve_target`'s EXISTENCE half and double-cover R1's seam. +/// A SYNTHETIC harness prop, deliberately NOT named after any printing: it exists only to be +/// the thing that makes the pinned seat illegal mid-window, and inventing a real card name for +/// non-verbatim text is the fabrication hazard CLAUDE.md's "verify the card, not just the rule" +/// principle warns about. Plan §12 scopes the verbatim-Oracle rule to the card under test; the +/// card under test here is the SANGUINE_BOND drain, whose text IS verbatim. +const HEXPROOF_GRANT: &str = "You have hexproof."; + +const P3: PlayerId = PlayerId(3); + +/// The R5 board — 4 seats, P0 running the escalating TARGETED drain +/// (`SANGUINE_BOND` × `BLOODTHIRSTY_CONQUEROR`), P1/P2/P3 at 1000 life so the drive never +/// crosses lethal inside the declared window. +/// +/// FOUR SEATS, and that is the §6 reach-guard rather than padding: killing the pinned seat +/// must leave **at least two** other legal seats standing. A one-element surviving set cannot +/// witness "did not re-choose" — a retargeting engine would have exactly one place to go and +/// a stopped engine and a retargeting engine would be indistinguishable at the seat level. +/// +/// Returns `(runner, sanguine_bond, hexproof_source, kickoff)`. The hexproof source starts in +/// P1's HAND, where its static does not function, so both arms share a byte-identical board +/// up to the moment the kill arm puts it onto the battlefield. +fn r5_board() -> (GameRunner, ObjectId, ObjectId, ObjectId) { + let mut scenario = GameScenario::new_n_player(4, 7); + scenario.at_phase(Phase::PreCombatMain); + scenario.with_life(P0, 20); + for seat in 1..4u8 { + scenario.with_life(PlayerId(seat), 1000); + } + let bond = scenario + .add_creature_from_oracle(P0, "Sanguine Bond", 2, 2, SANGUINE_BOND) + .id(); + scenario.add_creature_from_oracle(P0, "Bloodthirsty Conqueror", 3, 4, BLOODTHIRSTY_CONQUEROR); + let hexproof_src = scenario + .add_creature_to_hand_from_oracle(P1, "Test Hexproof Source", 0, 4, HEXPROOF_GRANT) + .id(); + let kickoff = scenario + .add_spell_to_hand_from_oracle(P0, "Test Lifegain Kickoff", false, KICKOFF) + .id(); + let mut runner = scenario.build(); + runner.state_mut().loop_detection = LoopDetectionMode::Interactive; + (runner, bond, hexproof_src, kickoff) +} + +/// A `Fixed(count)` template pinning the Sanguine Bond trigger's `target opponent` to one +/// seat for every iteration. The slot's source is the Bond itself, so `slot_source_prompted` +/// matches the mid-drive `TriggerTargetSelection` the injector must answer. +fn r5_pin_template(bond: ObjectId, seat: PlayerId, count: u32) -> DecisionTemplate { + let source = YieldTarget::ThisObject { + source_id: bond, + incarnation: None, + trigger_description: None, + }; + let slot = DecisionSlot { + source: source.clone(), + index: 0, + }; + DecisionTemplate { + owner: P0, + decisions: vec![PinnedDecision::Targets { + slot, + targets: vec![TargetPin::Player(seat)], + }], + replay: ReplayMode::Scheduled { + count: IterationCount::Fixed(count), + }, + key: DecisionGroupKey::from_sources(&[source], DecisionKind::LoopChoice), + } +} + +/// Reach the R5 board's own bounded `LoopShortcut` offer and return the runner parked on it +/// plus every seat's life at that instant. +/// +/// The offer is the ENGINE's, read off `state.waiting_for` — never an out-of-band call to the +/// offer predicate, which would only prove the predicate agrees with itself. +fn r5_reach_offer() -> (GameRunner, ObjectId, ObjectId, Vec) { + let (mut runner, bond, hexproof_src, kickoff) = r5_board(); + let _ = runner.cast(kickoff).target_player(P1).resolve(); + let WaitingFor::LoopShortcut { + proposer, schema, .. + } = runner.state().waiting_for.clone() + else { + panic!( + "the 4p targeted drain must OFFER a LoopShortcut, got {:?}", + runner.state().waiting_for + ); + }; + assert_eq!(proposer, P0, "P0 has priority and proposes the shortcut"); + // LAYER ATTRIBUTION, half one: this offer publishes NO decision points, so + // `handle_declare_shortcut`'s pin firewall (`if !offer.schema.points.is_empty()`) is + // provably not the refuser in the kill arm below. Whatever refuses there is downstream. + assert!( + schema.points.is_empty(), + "this offer publishes no points, so declare-time `validate_pins` never runs — the \ + kill arm's refusal must therefore come from the drive; got {} points", + schema.points.len() + ); + let lives = vec![ + life(&runner, P0), + life(&runner, P1), + life(&runner, P2), + life(&runner, P3), + ]; + (runner, bond, hexproof_src, lives) +} + +/// The per-cycle life the pinned seat loses, probed by an independent `Fixed(1)` +/// materialization of this same board (one recurrence = one full cycle). Mirrors +/// [`probe_drain_delta`]; nothing below is bound to a literal drain rate. +fn r5_probe_delta() -> i32 { + let (mut runner, bond, _hexproof_src, l0) = r5_reach_offer(); + runner + .act(GameAction::DeclareShortcut { + count: IterationCount::Fixed(1), + template: Some(r5_pin_template(bond, P1, 1)), + }) + .expect("declare Fixed(1) with a Player pin"); + accept_all_opponents(&mut runner); + let delta = l0[1] - life(&runner, P1); + assert!( + delta > 0, + "Fixed(1) must materialize a nonzero drain cycle on the PINNED seat, got {delta}" + ); + delta +} + +/// ITEM 2 / R5 ⭐ — **a declared target made illegal mid-drive stops the drive short and is +/// NEVER re-chosen.** Governing ruling, ledgered verbatim: *stop-short/abort, never silently +/// re-choose or skip.* +/// +/// # The seam, and why hexproof is the ruled refuser +/// +/// A `Fixed(n)` drive re-resolves its template per cycle and answers each mid-cycle +/// `TriggerTargetSelection` through `inject_pinned_answer`, which submits the pinned value as +/// a real `GameAction::SelectTargets`. That submission is the **drive-time CR 608.2b +/// re-validation** — the backstop layer, one below the declare-time firewall. Hexproof +/// (CR 702.11c, "can't be the target of spells or abilities **your opponents control**": the +/// source is P0's permanent and the pinned seat is P0's opponent) makes the pinned seat +/// illegal exactly there and nowhere earlier. Phasing was rejected as the refuser precisely +/// because it fails one layer up, at `resolve_target`'s existence half, double-covering R1. +/// +/// # Constructed-board deviation, DISCLOSED (constructibility-first) +/// +/// This row is built on a constructed 4-seat board rather than on a dump fixture, which §6 +/// licenses explicitly. Two measurements forced it, and both are INLINED here rather than +/// cited, because the probe archive that holds them is untracked and never ships: (i) the +/// real `dellian_emblem_conqueror_4p` dump — the only tracked fixture whose loop targets a +/// player — runs **309 beats to `GameOver` and raises no `LoopShortcut` at all** under the +/// generic dump driver, so it cannot host a declared drive; (ii) the refuser has to be +/// *introduced* on a named seat's battlefield mid-window, which is a board construction +/// whichever fixture carries it. The construction itself is the tracked one — +/// `declare_illegal_pin_falls_back_legal_ingests` builds its declare-seam board the same way. +/// +/// # The four-assertion anti-retarget set (§6), each named at its assertion below +/// +/// 1. the drive **stops short** — zero of `N` cycles commit, and `N * delta` is what the same +/// board commits with the refuser absent; +/// 2. **no retarget** — neither surviving legal seat is drained; +/// 3. **no silent skip** — the aborting cycle is not skipped-and-continued: no seat moves at +/// all, and the drain's mirror gain on P0 does not move either; +/// 4. **state coherent post-abort** — ring cleared, priority handed to a living seat, nobody +/// eliminated, the board still carries the refuser. +/// +/// # Reach-guards (without these every assertion above is vacuous) +/// +/// * the CLEAN arm is the positive control: the identical board with the hexproof source left in +/// hand drives all `N` cycles onto the pinned seat, so a `0` in the kill arm is the refuser +/// firing and not a dead harness; +/// * `player_has_hexproof(P1)` flips `false → true` across the move, so the setup cannot +/// silently no-op; +/// * **the surviving legal set has `len() >= 2`** — §6's own reach-guard. A one-element set +/// cannot witness "did not re-choose"; +/// * the declare firewall **passed** (`RespondToShortcut` opened) and the offer publishes +/// **no points**, so the refusal is attributable to the drive and not to `validate_pins`. +/// +/// # REVERT-PROBES — every claim below is a MEASUREMENT, with its result INLINED +/// +/// Nothing here cites a log path: the probe archive is untracked and never ships, so the +/// measured values are reproduced in full instead. +/// +/// The headline result is that the anti-retarget OUTCOME is defended by **AT LEAST THREE +/// independent production guards**, which is why no single-guard probe flips this row. Three +/// are named and measured below. The enumeration is deliberately open — a fourth, the +/// pre-drive `decision_template::resolve` re-check at the top of `materialize_fixed_shortcut`'s +/// `'cycles` loop, exists and simply is not engaged by THIS refuser (measured: it fires in +/// neither arm, which is exactly §6's reason for ruling hexproof over phasing). +/// +/// * **GUARD 1 — the drive's per-slot CR 608.2b target-legality rejection** +/// (`ability_utils::validate_selected_slots_with_specs`, its "Illegal target selected" arm), +/// reached through `inject_pinned_answer`'s `GameAction::SelectTargets` submission. Measured +/// on the UNMUTATED tree, reached exactly ONCE, on the pinned seat, against a live-derived +/// legal set: `target=Player(P1) live_legal=[Player(P2), Player(P3)] would_reject=true` ⇒ +/// `pinned_submit_ok=false` ⇒ `RecastAbort` ⇒ `CycleOutcome::Abort` ⇒ `break 'cycles` at +/// `i=0`. This is the layer this row claims to exercise, and it is provably reached. +/// * **GUARD 2 — the CR 732.2a per-cycle conformance check** in `materialize_fixed_shortcut` +/// (`actual != per_cycle.delta` ⇒ `break 'cycles`). +/// * **GUARD 3 — `inject_pinned_answer`'s fail-closed catch-all** (CR 732.2a "no conditional +/// actions": any prompt kind with no Stage-2 pin producer ⇒ `RecastAbort` ⇒ +/// `CycleOutcome::Abort`). +/// +/// * **RP-1**, the plan-named *"first legal target"* fallback in `inject_pinned_answer` (when +/// the pinned submission is refused, answer the prompt with the prompt's own first legal +/// target) ⇒ **this row still PASSES** (`1 passed; 0 failed`, `EXIT=0`). Not a hole in the +/// assertions — instrumented, the mutation *does* reach and *does* retarget: the prompt's +/// live legal set is `[P2, P3]` (P1 already dropped by the layer system), +/// `pinned_submit_ok=false`, `fallback=[Player(P2)]`, `fallback_ok=true`. The retargeted +/// cycle is then caught by GUARD 2: measured `break=CONFORMANCE i=0 actual={P0:+1, P2:-1} +/// expected={P0:+1, P1:-1}` ⇒ the divergent cycle is dropped whole. +/// * **SINGLE-GUARD PROBE on GUARD 1** — disable ONLY the per-slot legality rejection, leaving +/// GUARD 2 and CR 732.2a conformance fully intact ⇒ **this row still PASSES** (`1 passed`, +/// `EXIT=0`). Measured: the illegal pinned submission is then ACCEPTED +/// (`pinned_submit_ok=true`), the cycle never recurs, and the drive walks on to a +/// `DeclareAttackers` prompt that GUARD 3 fails closed on ⇒ `CycleOutcome::Abort` ⇒ +/// `break 'cycles` at `i=0`, with **zero** conformance breaks. +/// * **RP-1b**, RP-1 *plus* GUARD 2 disabled ⇒ **FAILS at named assertion (2)**, the +/// anti-retarget assertion: `left: (997, 1000) right: (1000, 1000)` (all `N = 3` cycles +/// committed onto P2), `EXIT=101`. This is the row's discrimination proof. It does not need +/// to touch GUARD 3: a successfully retargeted cycle RECURS, so the unpinned-prompt arm is +/// never reached on that path. +/// * **RP-2**, `CycleOutcome::Abort => continue 'cycles` ⇒ **measured NOT discriminating** +/// (`1 passed`, `EXIT=0`), disclosed rather than papered over. This row's refuser is +/// PERMANENT, so every later cycle aborts too and `committed` never advances. A real property +/// of a permanent refuser, not a gap in the assertions — a transient one is unconstructible +/// on this harness (no in-drive hook removes a static). +/// +/// **Read the inertness correctly.** These assertions are insensitive to the removal of any ONE +/// guard, and that is a property of PRODUCTION'S REDUNDANCY, not a weakness of the row: the row +/// asserts the observable outcome (stop short, never retarget), and production defends that +/// outcome three ways over. The row IS a discriminator — it reaches GUARD 1 exactly once with +/// `would_reject=true` on the pinned seat against a live-derived legal set, and RP-1b flips it +/// at a named assertion. What it is not is a single-guard regression pin; no probe result here +/// should be read as claiming otherwise. +#[test] +fn a_declared_target_made_illegal_mid_drive_stops_short_and_never_retargets() { + use engine::types::zones::Zone; + + const N: u32 = 3; + let delta = r5_probe_delta(); + + // ───────────────────────── CLEAN arm — the positive control ───────────────────────── + // Identical board, hexproof source left in hand (its static does not function there), so the + // ONLY difference from the kill arm is whether the refuser is on the battlefield. + let (mut clean, clean_bond, _clean_hexproof_src, clean_l0) = r5_reach_offer(); + clean + .act(GameAction::DeclareShortcut { + count: IterationCount::Fixed(N), + template: Some(r5_pin_template(clean_bond, P1, N)), + }) + .expect("declare Fixed(N) with a Player pin"); + accept_all_opponents(&mut clean); + assert_eq!( + life(&clean, P1), + clean_l0[1] - (N as i32) * delta, + "control: with no refuser the drive commits EXACTLY N cycles onto the PINNED seat" + ); + assert_eq!( + (life(&clean, P2), life(&clean, P3)), + (clean_l0[2], clean_l0[3]), + "control: the pin, not the seat order, is what selects the drained seat" + ); + + // ───────────────────────────────── KILL arm ───────────────────────────────────────── + let (mut runner, bond, hexproof_src, l0) = r5_reach_offer(); + assert!( + !engine::game::static_abilities::player_has_hexproof(runner.state(), P1), + "setup anti-vacuity: the pinned seat must START without hexproof, or the kill below \ + changes nothing" + ); + + runner + .act(GameAction::DeclareShortcut { + count: IterationCount::Fixed(N), + template: Some(r5_pin_template(bond, P1, N)), + }) + .expect("declare Fixed(N) with a Player pin"); + // LAYER ATTRIBUTION, half two: the declare-time firewall INGESTED this declaration. The + // refusal measured below therefore happened at the drive, which is the whole point of + // choosing hexproof over phasing as the refuser. + assert!( + matches!( + runner.state().waiting_for, + WaitingFor::RespondToShortcut { .. } + ), + "the declare firewall must PASS — otherwise this row measures `validate_pins`, not \ + the drive's CR 608.2b backstop; got {:?}", + runner.state().waiting_for + ); + + // THE KILL: the refuser arrives on the pinned seat's battlefield through the production + // zone pipeline, after the declaration has been ingested and before the table's Accept. + { + let mut events = Vec::new(); + engine::game::zones::move_to_zone( + runner.state_mut(), + hexproof_src, + Zone::Battlefield, + &mut events, + ); + // CR 613.1: the grant is a continuous effect — re-derive the board so the legality + // reads below are taken against the post-kill layers rather than a stale cache. + engine::game::layers::mark_layers_full(runner.state_mut()); + engine::game::layers::evaluate_layers(runner.state_mut()); + } + assert!( + engine::game::static_abilities::player_has_hexproof(runner.state(), P1), + "setup anti-vacuity: the kill must actually land — a silently inert hexproof source would \ + make every assertion below pass for the wrong reason" + ); + assert!( + !engine::game::targeting::player_is_legal_target(runner.state(), P1, bond, P0), + "CR 702.11c: the pinned seat must now be an ILLEGAL target of the Bond's ability" + ); + // §6's REACH-GUARD, asserted as a count so a shrinking board fails loudly: after the kill + // at least TWO other seats are still legal, so a retargeting engine has somewhere to go. + let surviving_legal: Vec = [P2, P3] + .into_iter() + .filter(|&seat| { + engine::game::targeting::player_is_legal_target(runner.state(), seat, bond, P0) + }) + .collect(); + assert!( + surviving_legal.len() >= 2, + "a 1-element surviving legal set cannot witness `did not re-choose`; got \ + {surviving_legal:?}" + ); + + accept_all_opponents(&mut runner); + + // (1) STOPS SHORT — zero of N cycles committed. Bound to the measured `delta` and to the + // control arm above, never to a literal: `N * delta > 0` is what a completing drive + // would have taken off the pinned seat. + assert!( + N >= 2 && delta > 0, + "the stop-short claim needs a window longer than one cycle and a nonzero drain rate" + ); + assert_eq!( + life(&runner, P1), + l0[1], + "the pinned seat must lose NOTHING: the drive stopped at the first cycle whose \ + re-validation refused, and that cycle rolled back whole" + ); + // (2) NO RETARGET — both seats that were measured LEGAL above are untouched. + assert_eq!( + (life(&runner, P2), life(&runner, P3)), + (l0[2], l0[3]), + "stop-short, never silently re-choose: neither surviving legal seat may be drained. \ + A `first legal target` fallback in the injector drains P2 here" + ); + // (3) NO SILENT SKIP — the drain's mirror gain on the controller did not move either, so + // the drive did not skip the refused cycle and press on with the remaining ones. + assert_eq!( + life(&runner, P0), + l0[0], + "no silent skip: a drive that skipped the refused cycle and continued would still \ + have run the remaining cycles and moved the controller's mirror gain" + ); + // (4) STATE COHERENT POST-ABORT. + assert_eq!( + runner.state().waiting_for, + WaitingFor::Priority { player: P0 }, + "the abort hands priority back to a living seat (manual fallback), not a wrong-crown \ + and not a stuck response window" + ); + assert!( + runner.state().loop_detect_ring.is_empty(), + "the ring is cleared on handback so the same apply() does not instantly re-offer" + ); + assert!( + [P0, P1, P2, P3] + .into_iter() + .all(|seat| !is_eliminated(&runner, seat)), + "the table stays live — this row is about a refused target, not about anyone dying" + ); + assert!( + runner.state().battlefield.contains(&hexproof_src), + "the roll-back is scoped to the DRIVE: the board change that made the pin illegal is \ + not undone by the abort" + ); +} + +/// **Row R27 conjunct (a1) — THE SPLIT IS REAL AND THE TWO HALVES DIFFER.** +/// +/// CR 104.4b + CR 732.2a: `LoopDetectSample` separates the equality *comparand* from the +/// shortcut *evaluable*. Every later conjunct of R27 (a2/a3/b/c, U3) asserts that a +/// period-touch consumer reads the un-normalized half; **all of them are false PASSes if +/// the two halves happen to hold the same thing.** This row is the BASE/POST discipline +/// applied to the split itself: it pins that a real production sample's halves DIFFER on +/// the axis that made the split necessary. +/// +/// The axis is the object allocator. `normalize_for_loop` zeroes `next_object_id` +/// (`types/game_state.rs`, `clone.next_object_id = 0;`) while the live sample keeps it, +/// and `zones::create_object` allocates `ObjectId(state.next_object_id)` then +/// `state.objects.insert(id, obj)` — so evaluating a token creation against a normalized +/// frame allocates `ObjectId(0)` and REPLACES whatever object id 0 is, corrupting the map +/// the resolution runs on. That is the concrete defect the split exists to prevent. +/// +/// **Revert-probe:** make `GameState::loop_detect_live_sample` return +/// `self.normalize_for_loop()` (i.e. collapse the split) ⇒ `live.next_object_id` becomes +/// `0` ⇒ the `assert_ne!` and the `live == pre_sample` assertion both FAIL. The row is +/// deliberately NOT sensitive to which half any consumer reads — that is (a2)/(a3)'s job — +/// so it stays the honest positive control while those arms are the subject. +/// +/// Fixture: the tracked `dellian_emblem_conqueror_4p` dump, driven through the production +/// `apply()` path so the ring is populated by `record_loop_detect_sample` itself and not by +/// a hand-built fixture. +#[test] +fn a_recorded_loop_detect_sample_keeps_a_live_half_normalization_would_have_erased() { + let json = gunzip_dump(include_bytes!( + "../fixtures/dellian_emblem_conqueror_4p.json.gz" + )); + let mut state = restore_dump(&json); + + // ── REACH-GUARDS. Without these the assertions below are vacuous. + assert!( + state.loop_detection.samples(), + "reach-guard: the dump must load with a SAMPLING loop-detection mode, else no sample \ + is ever recorded; got {:?}", + state.loop_detection + ); + assert_eq!( + state.loop_detect_ring.len(), + 0, + "reach-guard: the dump ships with an EMPTY ring — every frame below was accumulated by \ + THIS drive through the production producer, not restored from the dump" + ); + + let pin = engine_live_opponents(&state, P0).first().copied(); + + // Drive until the production sampler has recorded at least one sample, capturing the + // live `next_object_id` observed at the beat immediately BEFORE the ring grew. That + // pre-sample value is what the `live` half must have preserved. + let mut witness: Option<(u64, u64, u64, u64)> = None; + for _ in 0..400 { + if matches!(state.waiting_for, WaitingFor::LoopShortcut { .. }) { + break; + } + let before = state.loop_detect_ring.len(); + let next_object_id_before = state.next_object_id; + if dump_drive_one_beat(&mut state, pin).is_err() { + break; + } + if state.loop_detect_ring.len() > before { + let sample = state + .loop_detect_ring + .back() + .expect("the ring just grew, so it has a back element"); + witness = Some(( + next_object_id_before, + sample.live.next_object_id, + sample.normalized.next_object_id, + state.next_object_id, + )); + break; + } + } + + let (before_beat, live, normalized, after_beat) = witness.expect( + "reach-guard: the drive must record at least one loop-detect sample, else this row \ + asserts about a ring that was never populated and passes vacuously", + ); + + // The whole point of the axis: it must be non-degenerate on this board, so that + // `live != normalized` is a real inequality and not `0 != 0` dressed up, and so that + // the lower bound below actually bites. + assert!( + before_beat > 0, + "reach-guard: the allocator axis must be non-degenerate — a board that had allocated \ + ZERO objects makes the split unobservable on this axis and every assertion below \ + trivially true; got next_object_id = {before_beat}" + ); + + // ── THE CLAIM, both directions. + assert_eq!( + normalized, 0, + "CR 104.4b: the comparand half is `normalize_for_loop()`d, which zeroes the volatile \ + monotonic allocator so two positions reached at different times can compare equal" + ); + // The sampler runs at the POST-pipeline frame, so objects allocated earlier in the same + // beat are already counted: the live half is bracketed by the beat's own endpoints + // rather than equal to either. Collapsing the split drives it to 0, which is below + // `before_beat` (> 0 by the reach-guard above) and so fails this bound. + assert!( + (before_beat..=after_beat).contains(&live), + "CR 732.2a: the evaluable half is the beat un-normalized — it must carry the live \ + allocator cursor as of the post-pipeline frame the sampler runs at, i.e. inside \ + [{before_beat}, {after_beat}], because a shortcut's 'predictable results' are \ + evaluated by really resolving against it and `zones::create_object` allocates \ + `ObjectId(state.next_object_id)`; got {live}" + ); + assert_ne!( + live, normalized, + "THE SPLIT IS REAL: if the two halves agreed on this axis, R27's later conjuncts \ + (a2)/(a3)/(b)/(c) — every one of which asserts that a period-touch consumer reads the \ + un-normalized half — would be satisfiable by a build in which the split does not exist" + ); +} + +// ─────────── 5d U2 / R28 — the declared template's `owner` is ENGINE-BOUND ─────────── + +/// The engine-issued offer's own point set, hand-assembled to match `r5_pin_template`'s slot. +/// +/// The R5 board's live offer publishes an EMPTY schema (`r5_reach_offer` asserts it), so a +/// NON-empty-schema declaration has to be staged. This is the tree's own idiom for staging a +/// `LoopShortcut` wait; `offer.proposer` — the firewall's engine-issued comparand — still comes +/// from `WaitingFor::LoopShortcut`, which is what the row is about. +fn r28_nonempty_schema_offer(runner: &mut GameRunner, bond: ObjectId) { + let WaitingFor::LoopShortcut { + proposer, + predicted_winner, + certificate, + schema, + } = runner.state().waiting_for.clone() + else { + panic!("staged from the live offer, never from thin air"); + }; + let slot = DecisionSlot { + source: YieldTarget::ThisObject { + source_id: bond, + incarnation: None, + trigger_description: None, + }, + index: 0, + }; + runner.state_mut().waiting_for = WaitingFor::LoopShortcut { + proposer, + predicted_winner, + certificate, + schema: ShortcutDecisionSchema { + points: vec![DecisionPoint { + slot, + kind: DecisionPointKind::Targets { + legal_targets: vec![ + TargetRef::Player(P1), + TargetRef::Player(P2), + TargetRef::Player(P3), + ], + min_targets: 1, + max_targets: 1, + ordered: false, + }, + }], + ..schema + }, + }; +} + +/// R28 arms (a)/(a′) — **CR 732.2a + CR 603.5: a declaration whose `template.owner` names +/// another seat is refused AT DECLARE.** +/// +/// `template.owner` arrives VERBATIM from the client (`GameAction::DeclareShortcut { template }` +/// is forwarded whole) and it is the comparand the drive's seat guard uses to decide whose +/// CR 603.5 choice a pin may answer. Without a declare-time binding to the engine-issued +/// `LoopShortcutOffer.proposer`, that guard compares an attacker-chosen value against itself: +/// a declaration carrying `owner: ` satisfies `*player != template.owner` exactly +/// when the prompt's recipient IS that other seat, and the proposer's pinned value is +/// dispatched as the other seat's `GameAction::DecideOptionalEffect`. +/// +/// **(a′) is the reach-guard**: the byte-identical declaration with `owner = P0` builds the +/// proposal and opens APNAP, proving the fixture reaches the firewall and that (a) is keyed to +/// the `owner` axis rather than to `predictability_gate` / `validate_pins` / the count cap. +/// +/// REVERT-PROBE: delete `if template.as_ref().is_some_and(|t| t.owner != offer.proposer) { .. }` +/// from `handle_declare_shortcut` ⇒ the wrong-owner declaration is accepted, a proposal is +/// built, APNAP opens ⇒ **(a) FLIPS TO FAIL** while (a′) stays green. +#[test] +fn r28_a_declared_template_owning_another_seat_is_refused_at_declare() { + for hostile in [false, true] { + let (mut runner, bond, _hexproof, _lives) = r5_reach_offer(); + r28_nonempty_schema_offer(&mut runner, bond); + let WaitingFor::LoopShortcut { schema, .. } = runner.state().waiting_for.clone() else { + panic!("staged offer"); + }; + assert_eq!( + schema.points.len(), + 1, + "reach-guard: this arm runs on a NON-empty schema, so `predictability_gate` and \ + `validate_pins` really run and (a′) proves they PASS" + ); + + let mut template = r5_pin_template(bond, P1, 1); + if hostile { + template.owner = P1; + } + assert_eq!( + template.owner, + if hostile { P1 } else { P0 }, + "the two arms differ in exactly one field" + ); + let before = runner.state().clone(); + let result = runner + .act(GameAction::DeclareShortcut { + count: IterationCount::Fixed(1), + template: Some(template), + }) + .expect("the declaration is dispatched either way — refusal is a HANDBACK"); + + if hostile { + // (a) refused into the manual handback. + assert!( + matches!(runner.state().waiting_for, WaitingFor::Priority { .. }), + "(a) CR 800.4a: a wrong-`owner` declaration hands priority back, got {:?}", + runner.state().waiting_for + ); + assert!( + !matches!( + runner.state().waiting_for, + WaitingFor::RespondToShortcut { .. } + ), + "(a) no `ShortcutProposal` may be built" + ); + assert!( + result.events.is_empty(), + "(a) `handle_declare_shortcut` pushes NO events at all, so this is an exact \ + assertion rather than a wildcard: {:?}", + result.events + ); + assert_eq!( + before.players.iter().map(|p| p.life).collect::>(), + runner + .state() + .players + .iter() + .map(|p| p.life) + .collect::>(), + "(a) nothing was driven" + ); + } else { + // (a′) the matched positive: the proposal IS built and APNAP opens. + let WaitingFor::RespondToShortcut { proposal, .. } = &runner.state().waiting_for else { + panic!( + "(a′) the honest declaration must open APNAP, got {:?}", + runner.state().waiting_for + ); + }; + assert_eq!( + proposal.template.as_ref().map(|t| t.owner), + Some(P0), + "(a′) the proposal carries the engine-bound owner" + ); + } + } +} + +/// R28 arm (a″) — **the firewall's PLACEMENT, which no other arm can see.** +/// +/// The firewall sits OUTSIDE `if !offer.schema.points.is_empty()`. On an EMPTY-schema offer +/// that block is skipped entirely, so a `Some(template)` declaration would otherwise reach the +/// proposal without passing any template validation at all — `predictability_gate` and +/// `validate_pins` both live inside it. Arms (a)/(a′) run on a non-empty schema and therefore +/// pass whether the firewall is inside the block or outside it. +/// +/// The R5 offer's schema is empty (asserted by `r5_reach_offer`), so this arm reaches exactly +/// that path. +/// +/// REVERT-PROBE: move the firewall INSIDE the `!offer.schema.points.is_empty()` block ⇒ the +/// wrong-owner declaration is accepted here ⇒ **(a″) FLIPS TO FAIL** while (a)/(a′) stay green. +#[test] +fn r28_a_the_owner_firewall_is_reached_on_an_empty_schema_offer_too() { + // matched positive first: the empty-schema path DOES accept an honest declaration. + let (mut runner, bond, _h, _l) = r5_reach_offer(); + runner + .act(GameAction::DeclareShortcut { + count: IterationCount::Fixed(1), + template: Some(r5_pin_template(bond, P1, 1)), + }) + .expect("declare"); + assert!( + matches!( + runner.state().waiting_for, + WaitingFor::RespondToShortcut { .. } + ), + "(a″) reach-guard: an EMPTY-schema offer accepts an owner-correct declaration, so the \ + refusal below is the firewall and not the empty-schema path refusing everything" + ); + + let (mut runner, bond, _h, _l) = r5_reach_offer(); + let mut template = r5_pin_template(bond, P1, 1); + template.owner = P1; + let result = runner + .act(GameAction::DeclareShortcut { + count: IterationCount::Fixed(1), + template: Some(template), + }) + .expect("dispatched"); + assert!( + matches!(runner.state().waiting_for, WaitingFor::Priority { .. }), + "(a″) the firewall runs BEFORE the `!points.is_empty()` guard, so an empty-schema \ + offer is covered too, got {:?}", + runner.state().waiting_for + ); + assert!(result.events.is_empty(), "(a″) no events on the handback"); +} + +/// R28 arms (c)/(c′)/(c″) — **the RESTORE ingress, the only one the declare firewall cannot +/// see, closed at the single consumption chokepoint.** +/// +/// `ShortcutProposal` is plainly serialized inside `GameState.waiting_for`, and the +/// untrusted-restore scrubber rewrites only the two PRE-CAST waits — so a persisted +/// `WaitingFor::RespondToShortcut` decodes with its template intact, having never run +/// `handle_declare_shortcut`. `apply_confirmed_shortcut` is the sole route into both drives, +/// which is why the re-validation conjunct joins ITS existing fail-closed guard. +/// +/// Driven over BOTH trust branches, because `Deserialize for PersistedGameState` dispatches on +/// the presence of a top-level `"state"` key and only the RAW arm runs the scrubber. Asserting +/// one branch would leave the other untested — and (c″) below shows they really are different +/// code paths rather than one path asserted twice. +/// +/// * **(c)** `t.owner = P1` on a `proposal.proposer = P0` proposal ⇒ Accept is refused into the +/// manual handback: priority to a living seat, ZERO cycles committed, no `GameOver`. +/// * **(c′)** MATCHED POSITIVE, byte-identical except that one field ⇒ the drive runs and +/// commits. This is the reach-guard proving the fixture reaches `apply_confirmed_shortcut` at +/// all, and that (c) is keyed to the `owner` axis rather than to `is_alive`, the count cap or +/// the conformance check. +/// * **(c″-Raw)** the scrubber RUNS on this branch and leaves the wait untouched — which is the +/// mechanism that makes (c) necessary. **(c″-Trusted)** is a DIFFERENT claim: the scrubber is +/// not on that path at all, so the arm asserts survival across the trusted envelope and +/// claims nothing about the scrubber. +/// +/// REVERT-PROBE: delete the `|| proposal.template.as_ref().is_some_and(|t| t.owner != +/// proposal.proposer)` conjunct from `apply_confirmed_shortcut`'s guard ⇒ the round-tripped +/// wrong-owner proposal drives and commits ⇒ **(c) FLIPS TO FAIL** on both branches, while +/// (c′) stays green (it never depended on the conjunct). +#[test] +fn r28_c_a_restored_proposal_with_a_foreign_template_owner_is_refused_at_consumption() { + for hostile in [false, true] { + for trusted in [false, true] { + let label = format!("hostile={hostile} trusted={trusted}"); + let (mut runner, bond, _h, lives) = r5_reach_offer(); + runner + .act(GameAction::DeclareShortcut { + count: IterationCount::Fixed(1), + template: Some(r5_pin_template(bond, P1, 1)), + }) + .expect("declare opens APNAP"); + + // Tamper the persisted wait exactly as a hand-edited dump would, THEN round-trip. + // The declare firewall has already run and passed on the honest value, so nothing + // below can be attributed to it. + let WaitingFor::RespondToShortcut { proposal, .. } = + &mut runner.state_mut().waiting_for + else { + panic!("{label}: APNAP must be open"); + }; + let expected_owner = if hostile { P1 } else { P0 }; + proposal + .template + .as_mut() + .expect("the declared template rode into the proposal") + .owner = expected_owner; + // MEASURED CONSTRAINT ON THIS INGRESS, applied to BOTH arms so they stay + // byte-identical except `owner`: `ShortcutProposal.per_cycle` carries a + // `PlayerId`-keyed resource map, and `PlayerId` cannot deserialize from a JSON + // object KEY — so a persisted `RespondToShortcut` whose proposal carries a + // per-cycle signature fails to decode with `invalid type: string "0", expected + // u8`. That is a pre-existing serde asymmetry this change does not touch; its + // consequence here is that ingress I3 is reachable only for `per_cycle: None` + // proposals, which is exactly the shipped `Some(template)` population. The guard + // under test does not read `per_cycle`, so nulling it costs the row nothing. + proposal.per_cycle = None; + + let raw = serde_json::to_value(runner.state()).expect("state serializes"); + let payload = if trusted { + serde_json::json!({ "state": raw }) + } else { + raw + }; + let restored: GameState = + serde_json::from_value::(payload) + .expect("decodes through the production boundary") + .into_game_state(); + + // (c″) — the wait and its tampered owner SURVIVE the decode. On the Raw branch the + // scrubber ran and left it alone (its `semantic_owner` match names only the two + // pre-cast waits); on the Trusted branch the scrubber is not on the path at all. + let WaitingFor::RespondToShortcut { proposal, .. } = &restored.waiting_for else { + panic!( + "{label}: (c\u{2033}) the restore must NOT drop the wait — otherwise (c) \ + would pass by a different mechanism entirely; got {:?}", + restored.waiting_for + ); + }; + assert_eq!( + proposal.template.as_ref().map(|t| t.owner), + Some(expected_owner), + "{label}: (c\u{2033}) the tampered owner reaches `apply_confirmed_shortcut` \ + unchanged" + ); + assert_eq!( + proposal.proposer, P0, + "{label}: the proposer is engine state" + ); + + let mut restored_runner = GameRunner::from_state(restored); + accept_all_opponents(&mut restored_runner); + + let after: Vec = restored_runner + .state() + .players + .iter() + .map(|p| p.life) + .collect(); + if hostile { + assert!( + matches!( + restored_runner.state().waiting_for, + WaitingFor::Priority { .. } + ), + "{label}: (c) CR 800.4a manual handback, got {:?}", + restored_runner.state().waiting_for + ); + assert_eq!( + after, lives, + "{label}: (c) ZERO cycles committed — the board is byte-equal on life" + ); + } else { + assert_ne!( + after, lives, + "{label}: (c\u{2032}) the honest proposal DRIVES — without this the \ + hostile arm's `no delta` assertion is vacuous" + ); + } + } + } +} diff --git a/crates/engine/tests/integration/sprout_inalla_realistic_offer.rs b/crates/engine/tests/integration/sprout_inalla_realistic_offer.rs index c9664afb98..931e7d12da 100644 --- a/crates/engine/tests/integration/sprout_inalla_realistic_offer.rs +++ b/crates/engine/tests/integration/sprout_inalla_realistic_offer.rs @@ -60,8 +60,12 @@ fn load_realistic_dump() -> GameState { )); let envelope: serde_json::Value = serde_json::from_str(&json).expect("dump envelope parses as JSON"); + // Decode AS `PersistedGameState` rather than decoding a bare `GameState` and wrapping + // it in `Raw`: only the former runs `reject_legacy_raw_prompt_authority` and + // `decode_persisted_resolution_state`, which is the rest of the production chokepoint. + // `.expect(..)`, not `?`: `into_game_state` returns `GameState`, not `Result`. serde_json::from_value::(envelope["gameState"].clone()) - .expect("the realistic 4p gameState restores through the persisted ingress") + .expect("gameState deserializes through the production decoder") .into_game_state() } From 01ed26cbb0e31dae20d0f4448aef851734a6503b Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 19:33:59 -0500 Subject: [PATCH 49/62] fix(scripts,ai): stage the stamper beside its destination and cover the zero-count arm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two CodeRabbit findings, plus the class sweep the first one implies. The stamper's staging was not atomic. `mktemp -t` resolves to /tmp (device 50 here) while the fixture directory is on /home (device 47), so `mv "$TMP" "$FIX"` degraded to copy-then-unlink. This script rewrites its fixtures IN PLACE and those fixtures are TRACKED, so an interrupted run truncates a committed fixture — a worse failure mode than the migrate script's stray temp file. Staging now happens beside the destination, and stage paths are registered with a trap on EXIT/INT/TERM. This is the same defect, and the same fix, as `migrate-dump-fixture.sh` already carries. That one was fixed and its sibling was not: one recipe, two call sites, one of them missed. The new `stage_locality_control` pre-flight arm compares stage and destination DIRECTORIES rather than devices, because device equality does not discriminate — under a `-t` revert the stage lands in /tmp and a test destination under /tmp shares its device. Revert-probed: reverting `stage_beside` to `mktemp -t` reports STAGE_BESIDE_DEST=false ("stage /tmp vs dest /tmp/tmp.KQJVvxNaF5") and the script exits 1. CLASS SWEEP over scripts/ for the recipe "mktemp into system tmp, then mv to a destination outside it": grep -rn "mktemp" scripts/ --include=*.sh grep -rn "\bmv " scripts/ --include=*.sh Every other mv-into-place stages in the destination's own directory (deploy-cf.sh:67, fetch-comp-rules.sh:47, gen-card-data.sh:248/304, lib/mtgjson-fetch.sh:70, lib/scryfall-fetch.sh:77/131) or never moves at all (coverage-history.sh:110, tilt-wait.sh:104). One further instance exists — suno-generate/generate.sh:82 — and is deliberately NOT touched here: it is an unrelated media-tooling subsystem and its destination (.state.json) is gitignored, so the failure mode is losing local generator state, not corrupting a tracked file. The Fixed(0) reject arm had no test. The suite covered Fixed(4)/Fixed(11) bounded and Fixed(4) unbounded, so deleting the arm left every test green. Added a row with a reach-guard asserting the schema reads bounded, since the arm sits below the unbounded `na()` branch and would otherwise measure that instead. Revert-probed: deleting the arm makes the row FAIL. The AI change is a test row only — no scoring arm moved, no arm order changed, so `cargo ai-gate` carries no new obligation. Assisted-by: ClaudeCode:claude-opus-5 --- crates/phase-ai/src/policies/loop_shortcut.rs | 30 ++++++++++++ scripts/stamp-fixture-firing.sh | 48 ++++++++++++++++++- 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/crates/phase-ai/src/policies/loop_shortcut.rs b/crates/phase-ai/src/policies/loop_shortcut.rs index 235ef277ef..fbaf2a54d8 100644 --- a/crates/phase-ai/src/policies/loop_shortcut.rs +++ b/crates/phase-ai/src/policies/loop_shortcut.rs @@ -559,6 +559,36 @@ mod tests { ); } + /// CR 732.2a — the ZERO-count arm asserted directly. A `Fixed(0)` declaration commits no + /// cycles while still spending the CR 732.2b response window, so declining weakly + /// dominates it and it must be rejected rather than scored. + /// + /// The arm previously carried no row at all: the suite covered `Fixed(4)` and `Fixed(11)` + /// bounded and `Fixed(4)` unbounded, so deleting the `Fixed(0)` arm left every test green + /// and it carried zero regression protection. + /// + /// REVERT-PROBE: delete the `(_, IterationCount::Fixed(0))` arm ⇒ `Fixed(0)` falls through + /// to the in-bound progress arm ⇒ this row reads `Score` / + /// `"loop_shortcut_bounded_declare_progress"` and FAILS on both assertions. + #[test] + fn loop_shortcut_bounded_declare_rejects_zero_count() { + let state = bounded_offer_state(10); + // REACH-GUARD: the zero arm sits BELOW the `!is_bounded() => na()` branch, so on an + // unbounded schema this row would measure the neutral branch instead and pass for the + // wrong reason. + assert!( + schema_of(&state).is_bounded(), + "reach-guard: the zero arm is only reachable on a BOUNDED schema" + ); + let v = verdict_for(&state, &declare(IterationCount::Fixed(0))); + assert!( + matches!(v, PolicyVerdict::Reject { .. }), + "a zero-cycle declare commits nothing while spending the response window ⇒ weakly \ + dominated by declining, got {v:?}" + ); + assert_eq!(kind_of(&v), "loop_shortcut_bounded_declare_zero_count"); + } + /// CR 732.2a — the `na()` branch asserted DIRECTLY rather than inferred from which arm /// happened to be reached. This row and the one above assert OPPOSITE outcomes for the /// SAME `Fixed(n)`, discriminated by ONE field of the schema: a constant-`na()` diff --git a/scripts/stamp-fixture-firing.sh b/scripts/stamp-fixture-firing.sh index 617ff316ae..2c41472941 100755 --- a/scripts/stamp-fixture-firing.sh +++ b/scripts/stamp-fixture-firing.sh @@ -223,15 +223,61 @@ non_gamestate_control() { return 1 } +# The staged file MUST be minted in the destination's OWN directory. This script +# rewrites its fixtures IN PLACE, and those fixtures are TRACKED, so a stage on a +# different filesystem makes the final `mv` a copy-then-unlink and an interruption +# truncates a committed fixture — the worst failure mode either fixture script has. +# Measured here: `mktemp -t` resolves to /tmp (device 50) while the fixture directory +# is on /home (device 47), so the two genuinely differ. Same recipe, same fix, and the +# same helper shape as `migrate-dump-fixture.sh` — the sibling this was missed on. +stage_beside() { # stage_beside + mktemp "$(dirname "$1")/.stamp-firing-stage-XXXXXX.json.gz" +} +# Registered stage files are reaped on EXIT/INT/TERM: the explicit `rm -f "$TMP"` calls +# below cannot cover death before the next statement runs, and debris would land in the +# tracked fixture directory. +STAGE_FILES="" +cleanup_stage_files() { + [ -n "$STAGE_FILES" ] || return 0 + # shellcheck disable=SC2086 # deliberate word-splitting over the staged-path list + rm -f $STAGE_FILES + STAGE_FILES="" +} +trap cleanup_stage_files EXIT INT TERM + +# The staging mechanism itself: the stage file must be minted in the destination's OWN +# directory, or the in-place `mv` is not atomic and an interrupted run truncates a +# TRACKED fixture. Compares DIRECTORIES, not devices — device equality is the property +# that makes `mv` atomic but it does NOT discriminate here, because a `-t` revert puts +# the stage in /tmp and any test destination under /tmp shares its device. That trap +# already cost `migrate-dump-fixture.sh` a self-test that could not fail on its subject. +stage_locality_control() { + local d probe + d="$(mktemp -d)" || return 1 + : > "$d/dest.json.gz" + probe="$(stage_beside "$d/dest.json.gz")" + if [ "$(dirname "$probe")" != "$(dirname "$d/dest.json.gz")" ]; then + echo "CONTROL STAGE_BESIDE_DEST=false — stage $(dirname "$probe") vs dest $(dirname "$d/dest.json.gz")" >&2 + echo " a cross-directory stage makes the in-place mv non-atomic; an interrupted run" >&2 + echo " would truncate a tracked fixture" >&2 + rm -f "$probe"; rm -rf "$d"; return 1 + fi + rm -f "$probe"; rm -rf "$d" + echo "CONTROL STAGE_BESIDE_DEST=true" + return 0 +} + definition_shape_control || exit 1 carrier_preservation_control || exit 1 stale_carrier_control || exit 1 non_gamestate_control || exit 1 +stage_locality_control || exit 1 rc=0 for FIX in "$@"; do [ -f "$FIX" ] || { echo "no such fixture: $FIX" >&2; rc=1; continue; } - TMP="$(mktemp -t stamp-firing-XXXXXX.json.gz)" + TMP="$(stage_beside "$FIX")" + STAGE_FILES="$STAGE_FILES $TMP" # `-f` with the lib prepended keeps ONE definition of the derivation. if ! gzip -dc "$FIX" \ | jq -c -f <(printf '%s\nstamp_trigger_firing | stamp_delayed_allocators\n' "$(cat "$LIB")") \ From 1a3b472ad8cc3ffcec1e7c32347ed0cfafa5b092 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 19:44:11 -0500 Subject: [PATCH 50/62] fix(scripts): assert stage locality at the call site, not only in the helper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Review found the locality control in both fixture scripts tests the HELPER and not the CALL SITE, so it cannot see the defect it exists to catch. Measured: revert ONLY `TMP="$(stage_beside "$FIX")"` to `mktemp -t`, leaving `stage_beside` and `stage_locality_control` untouched, and the control still prints STAGE_BESIDE_DEST=true while the run writes with its stage in /tmp — the original non-atomic write, fully restored, past a green control. The sibling has the same shape: `migrate-dump-fixture.sh`'s a0 self-test proves `stage_path` RETURNS a beside-destination path and says nothing about whether `regenerate` still calls it. Both call sites now compare `dirname` of stage and destination before writing and fail closed. Fixed at every site rather than the one that was reported: one recipe with two call sites was how the first defect survived, and repeating that would leave the maintainer asking why only half the class moved. REVERT-PROBES, each reverting ONLY the call-site binding with the helper intact: stamp-fixture-firing.sh, on a real tracked fixture (dina_conqueror_4p): guards present rc=0 ctrl_true=1 guard=0 debris=0, fixture written call reverted rc=1 ctrl_true=1 guard=1 debris=0, fixture UNCHANGED "stage not beside destination: /tmp/stamp-firing-vwHw0q.json.gz vs /tmp/tmp.VtIWnOZvTQ/dina_conqueror_4p.json.gz" migrate-dump-fixture.sh: guards present rc=0 guard=0, SELFTEST ATOMIC_ON_FAILURE=true ENVELOPE_PRESERVED=true call reverted rc=1 guard=1, SELFTEST still ATOMIC_ON_FAILURE=true `ctrl_true=1` and the unchanged SELFTEST line in the reverted arms are the finding: the helper-level checks stay green across the defect. The guards are what move. Comparison is by directory, not device, for the reason the helper control already documents — under a `-t` revert both paths sit under /tmp and share a device. Assisted-by: ClaudeCode:claude-opus-5 --- scripts/migrate-dump-fixture.sh | 10 ++++++++++ scripts/stamp-fixture-firing.sh | 11 +++++++++++ 2 files changed, 21 insertions(+) diff --git a/scripts/migrate-dump-fixture.sh b/scripts/migrate-dump-fixture.sh index c012d416b9..1d2dd83700 100755 --- a/scripts/migrate-dump-fixture.sh +++ b/scripts/migrate-dump-fixture.sh @@ -205,6 +205,16 @@ regenerate() { # regenerate mkdir -p "$(dirname "$dest")" staged="$(stage_path "$dest")" STAGE_FILES="$STAGE_FILES $staged" + # CALL-SITE guard. The a0 self-test proves `stage_path` RETURNS a beside-destination + # path; it cannot see whether this line still calls it. Reverting only this binding to + # `mktemp -t` leaves the helper and the self-test intact and green while restoring the + # non-atomic write — the same blind spot the sibling stamper carries, fixed at both + # sites so the class is closed rather than one instance of it. + if [ "$(dirname "$staged")" != "$(dirname "$dest")" ]; then + echo "stage not beside destination: $staged vs $dest — mv would not be atomic" >&2 + rm -f "$staged" + return 1 + fi if ! unzip -p "$PRISTINE" | transform "$mode" | gzip -9 -n > "$staged"; then rm -f "$staged" echo "REGENERATION FAILED (fail-closed, $dest left untouched)" >&2 diff --git a/scripts/stamp-fixture-firing.sh b/scripts/stamp-fixture-firing.sh index 2c41472941..8888f2e5f4 100755 --- a/scripts/stamp-fixture-firing.sh +++ b/scripts/stamp-fixture-firing.sh @@ -278,6 +278,17 @@ for FIX in "$@"; do [ -f "$FIX" ] || { echo "no such fixture: $FIX" >&2; rc=1; continue; } TMP="$(stage_beside "$FIX")" STAGE_FILES="$STAGE_FILES $TMP" + # CALL-SITE guard, and it is NOT redundant with `stage_locality_control` above. That + # control proves the HELPER returns a beside-destination path; it says nothing about + # whether this line still calls the helper. Measured: revert ONLY this binding to + # `mktemp -t`, leaving `stage_beside` intact, and the control still prints + # STAGE_BESIDE_DEST=true while the run writes with its stage in /tmp — the original + # defect fully restored, past a green control. A property must be asserted where the + # value is BOUND, not only where it is produced. + if [ "$(dirname "$TMP")" != "$(dirname "$FIX")" ]; then + echo "stage not beside destination: $TMP vs $FIX — mv would not be atomic" >&2 + rm -f "$TMP"; rc=1; continue + fi # `-f` with the lib prepended keeps ONE definition of the derivation. if ! gzip -dc "$FIX" \ | jq -c -f <(printf '%s\nstamp_trigger_firing | stamp_delayed_allocators\n' "$(cat "$LIB")") \ From 5c11069399d3266b739fca2b5caa1c5c58ec682e Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 20:20:25 -0500 Subject: [PATCH 51/62] fix(engine): guard the second decode ingress and drop the orphaned helper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two seams the #6933 fold analysis flagged that the merge resolution left open. Both are additive here; nothing in the merge is rewritten. 1. CR 732.2a bound guard, second ingress. #6933 split the decode surface: the free `decode_persisted_resolution_state` became a delegator, and the two authorities are now `GameStateDecode::decode_persisted_resolution_state` and `GameStateDecode::decode`. They are genuinely separate — the former deserializes `ResolutionStateWire` itself and never calls the latter — and `impl Deserialize for GameState` routes through `decode` with `GameStateDecodeMode::DirectCurrentRaw`. With the guard on one site only, a persisted `LoopShortcut` offer whose wire bound is 0 was refused through the persisted path and revived through the bare-`GameState` path. A discriminating row lands with it (see loop_shortcut.rs): bare-`GameState` decode of `with_bound(0)` must `Err`, with a `with_bound(5)` control and a reach-guard that the UNMUTATED fixture decodes bare at all — `DirectCurrentRaw` skips the legacy migrations, so without that guard an `Err` would not be attributable to the bound. REVERT-PROBE: delete only the new call in `decode` and every pre-existing arm still passes while that row flips to `Ok`. 2. `delayed_trigger_payload_matches` is dead. It is base code from the v1 provenance backfill that #6933 replaced; upstream deleted the definition AND its only caller together, and this branch adds no caller of its own (`git diff 9b970193b..ea1b0ac19 -- game_state.rs` contains no added reference). Kept, it is a private fn with zero callers under `-D warnings`. Post-removal grep for the name returns 0 hits repo-wide. Also documents, at the `bind_resolution_scope` caller in stack.rs, why the CR 603.4 settlement must stay at the caller and never move into the helper: `analysis/resource.rs` calls that helper on CLONED PROBE BOARDS at five sites, where running terminal delayed-trigger disposition would mutate lifecycle state for a board that is only being measured. Comment only; the code is unchanged. ON THE CR ANNOTATION AT THAT BLOCK, since it is easy to read as drift: the trigger-event-context block keeps `CR 608.2k`, not the `CR 603.7c` inherited from before this branch. CR 608.2k — "If an ability's effect refers to a specific untargeted object that has been previously referred to by that ability's cost or trigger condition, it still affects that object even if the object has changed characteristics" — is what the block implements: it stores `current_trigger_event` so `TriggeringSpellController`/`TriggeringSource` resolve at resolution time. CR 603.7c is scoped to delayed triggered abilities and zone changes and does not describe this code. `resolution_prompt.rs` already cross-references CR 608.2k for this helper. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/game/stack.rs | 6 ++++++ crates/engine/src/types/game_state.rs | 23 ++++++----------------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/crates/engine/src/game/stack.rs b/crates/engine/src/game/stack.rs index 1aa5239e3c..a831f0d7f6 100644 --- a/crates/engine/src/game/stack.rs +++ b/crates/engine/src/game/stack.rs @@ -1071,6 +1071,12 @@ pub fn resolve_top(state: &mut GameState, events: &mut Vec) { return; } + // CR 603.4: the intervening-if recheck lives inside `bind_resolution_scope`; a `false` + // return means the condition failed and this entry resolves with no effect. The + // SETTLEMENT stays HERE, at the caller, and must never move into the helper: + // `analysis/resource.rs` calls `bind_resolution_scope` on CLONED PROBE BOARDS (five + // sites), where running terminal delayed-trigger disposition would mutate lifecycle + // state for a board that is only being measured. if !bind_resolution_scope(state, &entry, trigger_event_batch) { events.push(GameEvent::StackResolved { object_id: entry.id, diff --git a/crates/engine/src/types/game_state.rs b/crates/engine/src/types/game_state.rs index e1dee5bf24..ad564cc81d 100644 --- a/crates/engine/src/types/game_state.rs +++ b/crates/engine/src/types/game_state.rs @@ -8690,23 +8690,6 @@ fn delayed_trigger_install_command_mut( .as_object_mut() } -fn delayed_trigger_payload_matches( - delayed: &serde_json::Value, - command_trigger: &serde_json::Value, -) -> bool { - let mut delayed = delayed.clone(); - let mut command_trigger = command_trigger.clone(); - delayed - .as_object_mut() - .expect("delayed trigger was validated as an object") - .remove("provenance"); - command_trigger - .as_object_mut() - .expect("command trigger was validated as an object") - .remove("provenance"); - delayed == command_trigger -} - /// CR 732.2a: a shortcut proposal describes "a sequence of game choices ... that may be /// legally taken based on the current game state". A restored `LoopShortcut` OFFER whose /// bound is `0` can describe no such sequence — it admits only the empty one — so the @@ -14984,6 +14967,12 @@ impl GameStateDecode { let mut state = Self::materialize_prepared(value)?; normalize_delayed_trigger_allocators(&mut state)?; validate_trigger_firing_coherence(&state)?; + // Both decode entry points guard, because they are genuinely two ingresses: + // `decode_persisted_resolution_state` above deserializes `ResolutionStateWire` + // itself and never routes through `decode`. Hosting the CR 732.2a bound check on + // only one of them leaves the other — the one a bare-`GameState` `impl Deserialize` + // reaches — able to revive a zero-bound offer. + reject_zero_bound_shortcut_offer(&state)?; #[cfg(debug_assertions)] debug_assert_runtime_resolution_invariants(&state); Ok(state) From 79d4f0a55b22f6c71bfc1ccff0be867cc5be9801 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 20:20:45 -0500 Subject: [PATCH 52/62] test(engine): pin the bare-GameState ingress and rebuild r28_c's trusted payload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two independent changes to the same file, both consequences of #6933. 1. The second-ingress row for the CR 732.2a bound guard added in the previous commit. Arms: bare-`GameState` decode of `with_bound(0)` must `Err` naming `max_iterations 0`; `with_bound(5)` must load; and a REACH-GUARD that the unmutated fixture decodes bare at all, because `DirectCurrentRaw` skips the legacy migrations and an `Err` from a fixture that cannot decode at all would say nothing about the bound. The pre-existing arms above it cannot stand in for this one: they reach `decode_persisted_resolution_state`, and a revert of the guard call in `decode` ALONE leaves every one of them green. The orphaned `PersistedGameState` import goes with it — the branch's loader uses the fully-qualified path, so the merge left the short import unused (`-D warnings`). 2. r28_c's TRUSTED arm hand-built `{"state": }`. #6933 made `resolution_state_version` a required discriminator and gave only the PersistedRaw ingress permission to stamp v1 onto a legacy payload; the TrustedEnvelope ingress deliberately stamps nothing, because a trusted snapshot is WRITTEN as a versioned envelope and must retain its declared compatibility mode. `GameState`'s derived `Serialize` emits no such field, so the hand-built value was a shape production never writes and the trusted path was right to refuse it. Measured before the fix: `Error("resolution state wire is missing a numeric resolution_state_version")`. Fixed at the BUILDER, not the assertion: the payload is now constructed through `ResolutionStateWire::from_game_state`, which is exactly what `TrustedGameStateEnvelope`'s own `Serialize` does, so the arm round-trips the shape production writes. No assertion was weakened. The decode `.expect` also becomes a labelled panic. The row drives four arms (hostile x trusted) and the original message carried no `{label}`, so the failure above could not say which arm broke — it had to be re-derived by hand. Assisted-by: ClaudeCode:claude-opus-5 --- .../engine/tests/integration/loop_shortcut.rs | 63 +++++++++++++++++-- 1 file changed, 57 insertions(+), 6 deletions(-) diff --git a/crates/engine/tests/integration/loop_shortcut.rs b/crates/engine/tests/integration/loop_shortcut.rs index 5230ca4205..9dadf8e825 100644 --- a/crates/engine/tests/integration/loop_shortcut.rs +++ b/crates/engine/tests/integration/loop_shortcut.rs @@ -26,8 +26,7 @@ use engine::types::ability::{Effect, TargetRef}; use engine::types::actions::GameAction; use engine::types::events::GameEvent; use engine::types::game_state::{ - CastPaymentMode, GameState, LoopDetectionMode, PersistedGameState, StackEntryKind, WaitingFor, - YieldTarget, + CastPaymentMode, GameState, LoopDetectionMode, StackEntryKind, WaitingFor, YieldTarget, }; use engine::types::identifiers::ObjectId; use engine::types::mana::{ManaColor, ManaCost, ManaCostShard, ManaType, ManaUnit}; @@ -5420,6 +5419,43 @@ fn a_wire_zero_shortcut_bound_fails_the_load_and_a_wire_five_does_not() { .is_ok(), "a wire max_iterations of 5 is a legal bound and must still load" ); + + // ── THE SECOND INGRESS ────────────────────────────────────────────────────────── + // CR 732.2a again, through the OTHER decode entry point. Upstream #6933 split the + // decode surface in two: `GameStateDecode::decode_persisted_resolution_state` (which + // the arms above reach) deserializes `ResolutionStateWire` itself and NEVER calls + // `GameStateDecode::decode`. A bare `GameState` decode routes through `decode` with + // `GameStateDecodeMode::DirectCurrentRaw` instead (see `impl Deserialize for + // GameState`), so hosting the bound guard on only one of them leaves this path able + // to revive exactly the corrupt offer the arms above refuse. + // + // REVERT-PROBE: delete the `reject_zero_bound_shortcut_offer` call in + // `GameStateDecode::decode` ONLY — leaving the one in + // `decode_persisted_resolution_state` — and every arm above still passes while this + // one flips to `Ok`. That single-site revert is why this row exists and why the + // arms above cannot stand in for it. + // + // REACH-GUARD FIRST: `DirectCurrentRaw` deliberately SKIPS the legacy migrations, so + // if this fixture could not decode bare at all, the `Err` below would prove nothing + // about the bound. + assert!( + serde_json::from_value::(base.clone()).is_ok(), + "reach-guard: the unmutated fixture must decode through the bare-GameState \ + ingress, or the zero-bound Err below is not attributable to the bound" + ); + + let bare_zero = serde_json::from_value::(with_bound(0)); + let bare_message = bare_zero + .expect_err("the bare-GameState ingress must refuse a wire max_iterations of 0 too") + .to_string(); + assert!( + bare_message.contains("max_iterations 0"), + "the bare-ingress rejection must NAME the same invariant, got: {bare_message}" + ); + assert!( + serde_json::from_value::(with_bound(5)).is_ok(), + "a legal bound must still load through the bare-GameState ingress" + ); } /// Opponents the ENGINE considers living. `Player::is_eliminated` is the authority the @@ -10842,15 +10878,30 @@ fn r28_c_a_restored_proposal_with_a_foreign_template_owner_is_refused_at_consump // under test does not read `per_cycle`, so nulling it costs the row nothing. proposal.per_cycle = None; - let raw = serde_json::to_value(runner.state()).expect("state serializes"); + // The TRUSTED arm must carry a real resolution-wire envelope, not a bare + // `GameState` under a `"state"` key. Upstream #6933 made + // `resolution_state_version` a required discriminator and gave only the + // PersistedRaw ingress permission to stamp v1 onto a legacy payload; the + // TrustedEnvelope ingress deliberately stamps nothing, because a trusted + // snapshot is WRITTEN as a versioned envelope and must retain its declared + // compatibility mode. `GameState`'s derived `Serialize` emits no such field, + // so hand-wrapping it produced a payload the trusted path is right to refuse. + // Building through `ResolutionStateWire` is what `TrustedGameStateEnvelope`'s + // own `Serialize` does, so this arm now round-trips the shape production + // writes instead of one only this test ever constructed. let payload = if trusted { - serde_json::json!({ "state": raw }) + let wire = engine::types::resolution::ResolutionStateWire::from_game_state( + runner.state().clone(), + ); + serde_json::json!({ "state": serde_json::to_value(wire).expect("wire serializes") }) } else { - raw + serde_json::to_value(runner.state()).expect("state serializes") }; let restored: GameState = serde_json::from_value::(payload) - .expect("decodes through the production boundary") + .unwrap_or_else(|error| { + panic!("{label}: decodes through the production boundary: {error}") + }) .into_game_state(); // (c″) — the wait and its tampered owner SURVIVE the decode. On the Raw branch the From 596bdfaa91eac0bad55751ce8520e7eb05abd5d6 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 20:20:59 -0500 Subject: [PATCH 53/62] fix(scripts): pin the live TriggerFiring wire vocabulary in the stamper controls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Arms 5 and 6 asserted against `{"Delayed":null}`, a wire shape #6933 removed. The live `TriggerFiring` variants (`types/identifiers.rs`) are `"Ordinary"`, `"LegacyDelayed"`, `{"ReceiptEligible":{token,instance,source_id}}` and `"UnknownLegacy"`. Those arms stayed GREEN across the removal, which is the point worth recording: jq is untyped, so the controls fed themselves a shape the engine can no longer emit and got it back unchanged. A control that passes on input its subject cannot produce is not evidence about the subject. The arms were not wrong — they had stopped being about the engine. Adds a `ReceiptEligible` sub-arm alongside the unit-variant one. That variant carries a payload, and a preservation rule written against the unit variants alone could drop its `DelayedTriggerOrigin` and still satisfy every other arm — so this asserts the VALUE survives, not just the discriminant. Measured after the change: DEFINITION_SHAPES, CARRIER_PRESERVED (with `receipt={"ReceiptEligible":{"token":3,"instance":4,"source_id":7}}`), STALE_CARRIER_PRUNED, NON_GAMESTATE_SKIPPED and STAGE_BESIDE_DEST all true; 12 fixtures, 0 arm failures. Assisted-by: ClaudeCode:claude-opus-5 --- scripts/stamp-fixture-firing.sh | 54 ++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/scripts/stamp-fixture-firing.sh b/scripts/stamp-fixture-firing.sh index 8888f2e5f4..8e4345fba8 100755 --- a/scripts/stamp-fixture-firing.sh +++ b/scripts/stamp-fixture-firing.sh @@ -118,28 +118,46 @@ definition_shape_control() { # # The NEGATIVE half is what makes it non-vacuous: an ABSENT carrier must still be # derived, or "preserved everything" would also describe a stamp that did nothing. +# +# VOCABULARY: these arms pin the LIVE `TriggerFiring` wire shapes +# (`types/identifiers.rs`): `"Ordinary"`, `"LegacyDelayed"`, +# `{"ReceiptEligible":{token,instance,source_id}}`, `"UnknownLegacy"`. They previously +# pinned `{"Delayed":null}`, a shape upstream #6933 removed. jq is untyped, so those arms +# stayed GREEN against a vocabulary the engine can no longer produce — a control passing +# on input the subject cannot emit is not evidence about the subject. carrier_preservation_control() { - local kept derived - # (a) An existing `Delayed` carrier survives, and is NOT rewritten to "Ordinary" — + local kept receipt derived + local defs='"objects":{"7":{"base_trigger_definitions":[{"description":"D"}]}}' + local pend='"pending_trigger":{"source_id":7,"description":"D"}' + local firing='stamp_trigger_firing | .gameState.pending_trigger_firing' + # (a) An existing delayed carrier survives, and is NOT rewritten to "Ordinary" — # note its description IS present in the object's definitions, so the struck # form would have overwritten it rather than aborting. - kept="$(printf '%s' '{"gameState":{"objects":{"7":{"base_trigger_definitions":[{"description":"D"}]}}, - "pending_trigger":{"source_id":7,"description":"D"}, - "pending_trigger_firing":{"Delayed":null}}}' \ - | jq -c -f <(printf '%s\n%s\n' "$(cat "$LIB")" 'stamp_trigger_firing | .gameState.pending_trigger_firing') \ + kept="$(printf '%s' "{\"gameState\":{$defs,$pend, + \"pending_trigger_firing\":\"LegacyDelayed\"}}" \ + | jq -c -f <(printf '%s\n%s\n' "$(cat "$LIB")" "$firing") \ + 2>/dev/null || echo FAILED)" + # (b) The PAYLOAD-CARRYING variant survives with its payload intact. A preservation + # rule written against the unit variants alone could drop `ReceiptEligible`'s + # origin and still satisfy (a) — this is the arm that says the value, not just + # the discriminant, comes through. + receipt="$(printf '%s' "{\"gameState\":{$defs,$pend, + \"pending_trigger_firing\":{\"ReceiptEligible\":{\"token\":3,\"instance\":4,\"source_id\":7}}}}" \ + | jq -c -f <(printf '%s\n%s\n' "$(cat "$LIB")" "$firing") \ 2>/dev/null || echo FAILED)" - # (b) NEGATIVE CONTROL — the SAME dump with the carrier removed must still derive one, + # (c) NEGATIVE CONTROL — the SAME dump with the carrier removed must still derive one, # or "preserved" would also describe a stamp that stopped working entirely. - derived="$(printf '%s' '{"gameState":{"objects":{"7":{"base_trigger_definitions":[{"description":"D"}]}}, - "pending_trigger":{"source_id":7,"description":"D"}}}' \ - | jq -c -f <(printf '%s\n%s\n' "$(cat "$LIB")" 'stamp_trigger_firing | .gameState.pending_trigger_firing') \ + derived="$(printf '%s' "{\"gameState\":{$defs,$pend}}" \ + | jq -c -f <(printf '%s\n%s\n' "$(cat "$LIB")" "$firing") \ 2>/dev/null || echo FAILED)" - if [ "$kept" = '{"Delayed":null}' ] && [ "$derived" = '"Ordinary"' ]; then - echo "CONTROL CARRIER_PRESERVED=true existing=$kept absent_is_derived=$derived" + if [ "$kept" = '"LegacyDelayed"' ] \ + && [ "$receipt" = '{"ReceiptEligible":{"token":3,"instance":4,"source_id":7}}' ] \ + && [ "$derived" = '"Ordinary"' ]; then + echo "CONTROL CARRIER_PRESERVED=true existing=$kept receipt=$receipt absent_is_derived=$derived" return 0 fi - echo "CONTROL CARRIER_PRESERVED=false existing=$kept absent_is_derived=$derived" >&2 + echo "CONTROL CARRIER_PRESERVED=false existing=$kept receipt=$receipt absent_is_derived=$derived" >&2 echo " stamping is not additive (or stopped deriving absent carriers) — refusing to stamp" >&2 return 1 } @@ -172,7 +190,7 @@ stale_carrier_control() { # already carries a canonical marker. `$sf` is empty here, which is the gate the # old form failed at. The stale key must be gone AND the live one must remain. pruned="$(run "{\"gameState\":{$objs,$live, - \"stack_trigger_firings\":{\"9\":{\"Delayed\":null},\"5\":\"Ordinary\"}}}")" + \"stack_trigger_firings\":{\"9\":\"LegacyDelayed\",\"5\":\"Ordinary\"}}}")" # (b) EVERY carrier stale — the rebuilt map is `{}`, and `{}` must still be written. # A prune that only ever shrinks a non-empty map would pass (a) and fail here. emptied="$(run "{\"gameState\":{$objs,\"stack\":[], @@ -181,16 +199,16 @@ stale_carrier_control() { # and (b) would also be satisfied by a stamp that simply wipes the slot. This is # also the idempotence check: a re-run of an already-correct fixture writes nothing. untouched="$(run "{\"gameState\":{$objs,$live, - \"stack_trigger_firings\":{\"9\":{\"Delayed\":null}}}}")" + \"stack_trigger_firings\":{\"9\":\"LegacyDelayed\"}}}")" - if [ "$pruned" = '{"9":{"Delayed":null}}' ] \ + if [ "$pruned" = '{"9":"LegacyDelayed"}' ] \ && [ "$emptied" = '{}' ] \ - && [ "$untouched" = '{"9":{"Delayed":null}}' ]; then + && [ "$untouched" = '{"9":"LegacyDelayed"}' ]; then echo "CONTROL STALE_CARRIER_PRUNED=true pruned=$pruned all_stale=$emptied unchanged=$untouched" return 0 fi echo "CONTROL STALE_CARRIER_PRUNED=false pruned=$pruned all_stale=$emptied unchanged=$untouched" >&2 - echo " expected pruned={\"9\":{\"Delayed\":null}} all_stale={} unchanged={\"9\":{\"Delayed\":null}}" >&2 + echo " expected pruned={\"9\":\"LegacyDelayed\"} all_stale={} unchanged={\"9\":\"LegacyDelayed\"}" >&2 echo " a departed stack entry's carrier is being carried forward — refusing to stamp" >&2 return 1 } From 6face1fddf66c3ce8af1c02fa29d54e87222b0b8 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Sun, 2 Aug 2026 20:43:43 -0500 Subject: [PATCH 54/62] fix(engine): re-pin the CR 603.5 prompt census after the #6933 fold MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The census pins each producer by `file:line`, and folding upstream #6933 grew engine.rs around one of them: `game/engine.rs:10640 => :11427`, +787, while the file's whole-file delta over the same range is +1134 — so 787 lands above this producer and 347 below, which is what a file growing AROUND a mint looks like rather than one gaining a mint. Identity re-established at the new coordinate, not assumed. The line at :11427 is byte-identical by sha256 to `ea1b0ac19:game/engine.rs:10640`, and it is still inside `begin_pending_trigger_target_selection` (fn opens at :11278) — the producer this row names. The old coordinate now holds copy-target-slot code that mints nothing. The other four entries did not move at all, which is the same set-preservation evidence the earlier rebases in this comment relied on: a census that had gained or lost a producer could not leave four entries byte-identical AND in place. Nothing is weakened. The total stays 37 and the partition stays 5/7/25; only the coordinate of an unchanged producer is updated. This is the failure mode the row is DESIGNED to have — it is line-pinned precisely so that a moved or added mint cannot pass silently — so the red was the instrument working, not a defect in it. Surfaced by `cargo test -p phase-engine --lib` at 596bdfaa9; every other gate stage at that tip was green (fmt, parser gate, clippy -D warnings, phase-ai, integration, fixture corpus). Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/game/engine.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index b9a9381c27..6dc3068017 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -15205,7 +15205,18 @@ mod stage2_injector_tests { // whole-file delta is also +51, so it adds nothing below). The OTHER FOUR // entries did not move at all this time — a census that had gained or lost a // producer could not leave four entries byte-identical AND in place. - "game/engine.rs:10640".to_string(), + // + // Fold of upstream #6933 (409956671, merged by the maintainer as d1a5270a4): + // `:10640 ⇒ :11427`, +787. engine.rs's whole-file delta over the same range is + // +1134, so 787 lands above this producer and 347 below — consistent with a + // file that grew around it rather than one that gained a mint. Identity + // re-established at the new coordinate rather than assumed: the line is + // byte-identical by sha256 to `ea1b0ac19:engine.rs:10640`, and it is still + // inside `begin_pending_trigger_target_selection` (fn opens at :11278), which + // is the producer this row NAMES below. The old coordinate now holds + // copy-target-slot code that mints nothing. The OTHER FOUR entries did not + // move, which is the same set-preservation evidence as the previous rebases. + "game/engine.rs:11427".to_string(), ], "the five production producers, NAMED: the CR 603.5 gate in `resolve_chain_body` \ plus the two repeated-optional-payment drivers, the per-player acceptance cursor \ From 84992d9e52cd664cfc7d117194e57d3d21c84304 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Mon, 3 Aug 2026 07:33:05 -0500 Subject: [PATCH 55/62] fix(ai): reject zero-count loop-shortcut declares on unbounded offers `(_, IterationCount::Fixed(0))` sat below `(_, Fixed(_)) if !schema.is_bounded() => na()`, so a zero-cycle declaration on an unbounded offer matched the neutral guard first and never reached the rejection. The CR 732.2a weak-domination argument that motivates that rejection does not depend on boundedness: a declaration committing no cycles still spends the CR 732.2b response window, so both schema shapes must reach the same verdict. Move the zero arm ahead of the unbounded arm. Final order is zero -> unbounded-neutral -> over-bound -> in-bound score. Checked before moving rather than after: the three arms that remain above are `UntilLethal`-only and cannot match `Fixed(_)`, and the over-bound guard can never be satisfied by 0, so no verdict other than unbounded-`Fixed(0)` changes. `loop_shortcut_unbounded_declare_rejects_zero_count` is the regression the pre-existing row structurally could not be: that row asserts a bounded schema as its reach-guard, so it is a test of the other half rather than a weak test. The new row carries a `!is_bounded()` reach-guard, drives all three `predicted_winner` values because the arm binds `_` on that axis, and asserts on the same state that a `Fixed(4)` declare is STILL `loop_shortcut_na` with delta 0.0 -- which distinguishes "zero now precedes neutral" from "the neutral arm was deleted", a mutation that would otherwise satisfy every reject assertion while re-scoping all unbounded `Fixed(n)` into the bounded scoring path. Revert-probe run rather than asserted: with the arm moved back below, the new row FAILS reading `loop_shortcut_na`/0.0 while `..._bounded_declare_rejects_zero_count` stays green. File restored byte-identical (`cmp`). The `loop_shortcut_bounded_declare_zero_count` reason string is deliberately kept although the arm now covers both schema shapes: a `PolicyReason` kind is a stable identifier that ai-gate baselines key on, so renaming it carries its own blast radius and is not a drive-by on a review fix. Disclosed in the PR thread. Verification at this content, run directly in the branch worktree: cargo fmt --all --check rc=0 scripts/check-parser-combinators.sh 7fa1fc4a1 rc=0 (Gate A PASS, Gate G PASS) cargo clippy --workspace --all-targets -- -D warnings rc=0 cargo test -p phase-ai rc=0, 2069 passed / 0 failed cargo test -p phase-engine --lib rc=0, 18426 passed / 0 failed cargo test -p phase-engine --test integration rc=0, 4442 passed / 0 failed Gate A uses the true merge base explicitly; the hook's fork-relative default resolves to the wrong base on a stale fork and yields a vacuous PASS. `cargo ai-gate` has not returned and this is pushed ahead of it at the repository author's direction. Repo-wide, ai-gate's pull_request runs hit the 60-minute timeout-minutes ceiling on 22 of 22 runs on 2026-08-02 and 12 of 14 on 08-03 (median cancelled duration 60.4m), so its absence here is that ceiling rather than this change. Wall-clock work is ongoing in a separate lane and the result will be posted to the PR either way. Addresses the 2026-08-03T04:17Z review and CodeRabbit discussion_r3699911189. Assisted-by: ClaudeCode:claude-opus-5 --- crates/phase-ai/src/policies/loop_shortcut.rs | 99 +++++++++++++++---- 1 file changed, 82 insertions(+), 17 deletions(-) diff --git a/crates/phase-ai/src/policies/loop_shortcut.rs b/crates/phase-ai/src/policies/loop_shortcut.rs index fbaf2a54d8..fc51b149f3 100644 --- a/crates/phase-ai/src/policies/loop_shortcut.rs +++ b/crates/phase-ai/src/policies/loop_shortcut.rs @@ -177,6 +177,32 @@ impl TacticalPolicy for LoopShortcutPolicy { PolicyVerdict::reject(PolicyReason::new("loop_shortcut_untillethal_cannot_crown")) } + // CR 732.2a: a ZERO-repetition declaration is representable, and the engine treats + // it as legal — `a_zero_count_declaration_validates_over_an_empty_range_but_still_ + // checks_cardinality` in `crates/engine/tests/integration/loop_shortcut.rs` pins + // exactly that — but it commits NO cycles while still spending the CR 732.2b + // response window. That is the same weak-domination shape the over-bound arm below + // and the `(None, UntilLethal)` arm above reject: the outcome set is {no-op, minus a + // response window}, so declining weakly dominates it. + // + // ⚠ ORDER IS LOAD-BEARING: this arm MUST precede the `!schema.is_bounded() => na()` + // arm below. `Fixed(0)` matches that guard too, so with the arms the other way round + // a zero-count declare on an UNBOUNDED offer scored NEUTRAL rather than rejected — + // and the domination argument above does not depend on boundedness at all. A + // declaration that commits nothing spends the CR 732.2b window whether or not the + // offer carries a bound, so the two schema shapes must reach the same verdict. + // `loop_shortcut_unbounded_declare_rejects_zero_count` is the regression for the + // unbounded half specifically, and it goes RED via `na()` if this arm is moved back + // below. + // + // Not reachable from today's generator either way (it emits only + // `Fixed(max_iterations)`, and the load seam refuses `max_iterations: 0`), so no + // scoring that can occur today is reordered. The arm states the scoring arm's OWN + // precondition rather than leaving it to an invariant maintained a crate away. + (_, IterationCount::Fixed(0)) => PolicyVerdict::reject(PolicyReason::new( + "loop_shortcut_bounded_declare_zero_count", + )), + // CR 732.2a "a loop that repeats a specified number of times". The verdict splits // on whether the OFFER states a real CR 704 bound, because the domination argument // below is valid only when it does. @@ -230,23 +256,6 @@ impl TacticalPolicy for LoopShortcutPolicy { .with_fact("max_iterations", i64::from(schema.max_iterations)), ), - // CR 732.2a: a ZERO-repetition declaration is representable, and the engine treats - // it as legal — `a_zero_count_declaration_validates_over_an_empty_range_but_still_ - // checks_cardinality` in `crates/engine/tests/integration/loop_shortcut.rs` pins - // exactly that — but it commits NO cycles while still spending the CR 732.2b - // response window. That is the same weak-domination shape the over-bound arm above - // and the `(None, UntilLethal)` arm reject: the outcome set is {no-op, minus a - // response window}, so declining weakly dominates it. - // - // Unreachable from today's generator (it emits only `Fixed(max_iterations)`, and - // the load seam refuses `max_iterations: 0`), so this reorders nothing that can - // occur now. It states the scoring arm's OWN precondition rather than leaving it - // to an invariant maintained a crate away: without it, the arm below hands a - // guaranteed no-op the CRITICAL band, i.e. ranks doing nothing as game-deciding. - (_, IterationCount::Fixed(0)) => PolicyVerdict::reject(PolicyReason::new( - "loop_shortcut_bounded_declare_zero_count", - )), - // CR 732.2a: within the offered bound on a bounded offer ⇒ committed board // progress that eliminates nobody. Game-deciding ⇒ critical band, via the // auto-banding `PolicyVerdict::score` (NEVER `preference`, whose `debug_assert!` @@ -589,6 +598,62 @@ mod tests { assert_eq!(kind_of(&v), "loop_shortcut_bounded_declare_zero_count"); } + /// CR 732.2a — the UNBOUNDED half of the same arm, which the row above structurally cannot + /// see because it asserts a bounded schema as its reach-guard. + /// + /// The defect this pins was real and measured: with `(_, Fixed(0))` sitting BELOW + /// `(_, Fixed(_)) if !schema.is_bounded() => na()`, a zero-count declare on an unbounded + /// offer matched the `na()` guard first and scored NEUTRAL. The domination argument does + /// not depend on boundedness — a declaration committing no cycles spends the CR 732.2b + /// response window either way — so the two schema shapes must reach the same verdict. + /// + /// Driven across every `predicted_winner` because the arm binds `_` on that axis; if the + /// reorder had accidentally been written as a winner-specific arm, only one of these three + /// would pass. + /// + /// THE `Fixed(4)` CONTRAST IS LOAD-BEARING, not decoration. A "fix" that deleted the + /// `!is_bounded() => na()` arm outright would satisfy the reject assertions above while + /// silently re-scoping every unbounded `Fixed(n)` into the bounded scoring path. Asserting + /// that a NON-zero count on the SAME state is still neutral is what distinguishes "the zero + /// arm now precedes the neutral arm" from "the neutral arm is gone". + /// + /// REVERT-PROBE: move the `(_, IterationCount::Fixed(0))` arm back below the + /// `!schema.is_bounded()` arm ⇒ `Fixed(0)` reaches `na()` ⇒ this row reads `"loop_shortcut_na"` + /// with delta `0.0` and FAILS, while every bounded row stays green. + /// + /// On the reason string: it still reads `..._bounded_declare_zero_count` although the arm + /// now covers both schema shapes. Left as-is deliberately — a `PolicyReason` kind is a + /// stable identifier that AI-gate baselines key on, so renaming it is a separate change + /// with its own blast radius, not a drive-by. + #[test] + fn loop_shortcut_unbounded_declare_rejects_zero_count() { + for predicted_winner in [None, Some(P0), Some(P1)] { + let state = offer_state(predicted_winner); + assert!( + !schema_of(&state).is_bounded(), + "REACH-GUARD: this row is about the UNBOUNDED schema — the bounded row above \ + already covers the other half; measured max_iterations {}", + schema_of(&state).max_iterations + ); + let zero = verdict_for(&state, &declare(IterationCount::Fixed(0))); + assert!( + matches!(zero, PolicyVerdict::Reject { .. }), + "a zero-cycle declare commits nothing while spending the CR 732.2b window \ + whether or not the offer is bounded (winner {predicted_winner:?}), got {zero:?}" + ); + assert_eq!(kind_of(&zero), "loop_shortcut_bounded_declare_zero_count"); + + let nonzero = verdict_for(&state, &declare(IterationCount::Fixed(4))); + assert_eq!( + kind_of(&nonzero), + "loop_shortcut_na", + "the neutral arm must survive the reorder — only ZERO is pulled ahead of it \ + (winner {predicted_winner:?})" + ); + assert_eq!(delta_of(&nonzero), 0.0); + } + } + /// CR 732.2a — the `na()` branch asserted DIRECTLY rather than inferred from which arm /// happened to be reached. This row and the one above assert OPPOSITE outcomes for the /// SAME `Fixed(n)`, discriminated by ONE field of the schema: a constant-`na()` From f6f1cf413de679905938b9fc7f5977f0e56c020a Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Mon, 3 Aug 2026 08:33:23 -0500 Subject: [PATCH 56/62] fix(ai): reject bounded shortcut declares that eliminate the proposer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `elimination_bounds` derives the offered bound from EVERY living seat and deliberately lets the PROPOSER be the binding one — CR 732.2a says the shortcut proposer "need not be the player proposing the shortcut" who benefits, so the producer is right not to gate on proposer benefit. That makes it the deciding side's job, and nothing was doing it. Three facts compose into the defect: a bounded offer always carries `predicted_winner: None`, so the "hands somebody else the win" arm is structurally unreachable; the AI's only bounded candidate is `Fixed(max_iterations)`, the maximum and never a smaller n; and the in-bound arm scores the 8.0 field, auto-banded CRITICAL. A self-mill period whose binding seat is the proposer therefore scored critical for running the proposer's own library to exactly 0. Adds `cycles_to_proposer_elimination` — the inverse of `elimination_bounds`, mirrored axis for axis but asked of one seat, returning the MINIMUM across axes so the arm compares one number. Library threshold is 0 (CR 104.3c + CR 121.4: a player loses on the DRAW from an empty library, not on emptying it, so an emptied library is an already-committed self-loss and `elimination_bounds` permits that terminal value); life <= 0 (CR 704.5a); poison >= 10 (CR 704.5c). Each rate is guarded `> 0` before it divides, so a library or life GAIN yields no bound. The new arm sits immediately before the scoring arm, so the only verdicts that change are ones that previously scored — deliberate, to keep the ai-gate baseline blast radius minimal. Three rows. `..._decks_the_proposer_is_refused` is the threshold test: library 30, 3 milled per cycle, fatal at exactly 10 — `Fixed(10)` rejects and **`Fixed(9)` still scores**. That second assertion is what makes it a test of the threshold rather than of "a proposer-negative axis exists"; a blanket refusal of any self-mill would satisfy the first and be wrong. `..._decks_only_an_opponent_still_ scores` changes only which seat the drain names. The life-axis row proves the min-across-axes logic is not a library special case. Reach-guards assert the schema is bounded and the certificate carries a period, since the predicate returns None without one and every assertion would be vacuous. Assisted-by: ClaudeCode:claude-opus-5 --- crates/phase-ai/src/policies/loop_shortcut.rs | 237 +++++++++++++++++- 1 file changed, 233 insertions(+), 4 deletions(-) diff --git a/crates/phase-ai/src/policies/loop_shortcut.rs b/crates/phase-ai/src/policies/loop_shortcut.rs index fc51b149f3..29042cf638 100644 --- a/crates/phase-ai/src/policies/loop_shortcut.rs +++ b/crates/phase-ai/src/policies/loop_shortcut.rs @@ -83,6 +83,7 @@ //! `ctx.ai_player == proposer` would silently DROP the veto in that case. use engine::analysis::decision_template::IterationCount; +use engine::analysis::loop_check::LoopCertificate; use engine::types::actions::GameAction; use engine::types::game_state::{GameState, WaitingFor}; use engine::types::player::PlayerId; @@ -122,6 +123,7 @@ impl TacticalPolicy for LoopShortcutPolicy { fn verdict(&self, ctx: &PolicyContext<'_>) -> PolicyVerdict { let na = || PolicyVerdict::neutral(PolicyReason::new("loop_shortcut_na")); + // (see `cycles_to_proposer_elimination` below for the CR 704 self-cost predicate) // Cheapest possible gate FIRST (one enum-discriminant compare): every `ActivateAbility` // candidate in the game runs this. It is also this policy's contribution to NaN safety — @@ -135,7 +137,7 @@ impl TacticalPolicy for LoopShortcutPolicy { proposer, predicted_winner, schema, - .. + certificate, } = &ctx.state.waiting_for else { return na(); @@ -266,6 +268,38 @@ impl TacticalPolicy for LoopShortcutPolicy { // generated), and a bounded offer carries `predicted_winner: None` (so the winning // arm cannot be reached). With no ordering to distort, a second tuned field would // buy nothing and cost the full `UNTUNED_POLICY_PENALTY_FIELDS` protocol. + // CR 704.5a / CR 704.5c / CR 104.3c: the offered bound is derived from EVERY living + // seat, and `ResourceVector::elimination_bounds` deliberately lets the PROPOSER be + // the binding one — CR 732.2a's shortcut proposer "need not be the player proposing + // the shortcut" who benefits, so the producer is right not to gate on proposer + // benefit (engine `game/engine.rs`, `bounded_cycle_offer` doc). That makes it the + // DECIDING side's job, and nothing was doing it: a bounded offer always carries + // `predicted_winner: None`, so the "hands somebody else the win" arm above is + // structurally unreachable here, and the AI's only bounded candidate is + // `Fixed(max_iterations)` — the maximum, never a smaller n. A self-mill period whose + // binding seat is the proposer therefore scored CRITICAL for running the proposer's + // own library to exactly 0. + // + // This arm asks the question the producer declines to ask, on the proposer's behalf + // only, and REJECTS rather than dropping to `na()`: neutral would still leave the + // declare competing on other policies' scores, and the domination argument here is + // the same shape as the zero-count arm's — a declare that eliminates the declarer is + // weakly dominated by declining, which rolls back to exactly where a decline lands. + (_, IterationCount::Fixed(n)) + if cycles_to_proposer_elimination(ctx.state, certificate, *proposer) + .is_some_and(|fatal| i64::from(*n) >= fatal) => + { + PolicyVerdict::reject( + PolicyReason::new("loop_shortcut_declare_eliminates_proposer") + .with_fact("declared", i64::from(*n)) + .with_fact( + "eliminates_at", + cycles_to_proposer_elimination(ctx.state, certificate, *proposer) + .unwrap_or_default(), + ), + ) + } + (_, IterationCount::Fixed(n)) => PolicyVerdict::score( ctx.penalties().loop_shortcut_winning_declare_bonus, PolicyReason::new("loop_shortcut_bounded_declare_progress") @@ -275,6 +309,66 @@ impl TacticalPolicy for LoopShortcutPolicy { } } +/// The fewest whole cycles of this offer's certified period that drive `proposer` to a CR 704 +/// elimination threshold, or `None` if no measured axis ever does. +/// +/// This is the inverse of `ResourceVector::elimination_bounds` (engine `analysis/resource.rs`), +/// mirrored axis for axis and asked of ONE seat instead of narrowed over all of them: +/// +/// - **library**, CR 104.3c + CR 121.4 — reaching **0** is the threshold, not 1. A player does +/// not lose when the library empties; they lose the next time they would draw from it. So an +/// emptied library is a self-loss already committed, and `elimination_bounds` deliberately +/// permits that terminal value (its `narrow(p.library.len(), drain)` lands exactly on 0). +/// - **life**, CR 704.5a — reaching **0 or less** is the threshold. +/// - **poison**, CR 704.5c — reaching **10 or more** is the threshold. +/// +/// Only movement TOWARD death counts: a positive library delta, a life gain, or a poison +/// decrease yields no bound on that axis, which is why each rate is tested `> 0` before it is +/// allowed to divide. +/// +/// Returns the MINIMUM across axes, so the caller compares one number against the declared +/// count. `None` means "no axis kills the proposer at any n" — including the case where this +/// offer carries no certified period at all. That last branch is unreachable for the bounded +/// class (`certified_bounded_cycle_offer` mints `per_cycle: Some(periodic)`), and it is written +/// as a plain `?` rather than an `expect` because a policy must never panic on a state shape; +/// the reach-guard in `loop_shortcut_declare_that_decks_the_proposer_is_refused` is what proves +/// the `Some` path is the one actually exercised. +fn cycles_to_proposer_elimination( + state: &GameState, + certificate: &LoopCertificate, + proposer: PlayerId, +) -> Option { + let period = certificate.per_cycle.as_ref()?; + let player = state.players.get(proposer.0 as usize)?; + let per_cycle = |axis: &std::collections::BTreeMap| { + axis.get(&proposer).copied().unwrap_or(0) + }; + + // `headroom / rate` rounded UP: the first whole cycle at which the threshold is met. + // Written long-hand rather than with `i64::div_ceil`, which is still unstable on this + // toolchain (`int_roundings`). Both operands are non-negative here — `headroom` is clamped + // and `rate` is guarded `> 0` — so the `+ rate - 1` form is exact, with no negative-operand + // truncation-toward-zero trap. + let cycles = |headroom: i64, rate: i64| -> Option { + (rate > 0).then(|| (headroom.max(0) + rate - 1) / rate) + }; + + [ + cycles( + player.library.len() as i64, + -per_cycle(&period.delta.library_delta), + ), + cycles(i64::from(player.life), -per_cycle(&period.delta.life)), + cycles( + 10 - i64::from(player.poison_counters), + per_cycle(&period.delta.poison), + ), + ] + .into_iter() + .flatten() + .min() +} + #[cfg(test)] mod tests { use super::*; @@ -286,15 +380,20 @@ mod tests { use engine::ai_support::{ActionMetadata, AiDecisionContext, CandidateAction, TacticalClass}; use engine::analysis::decision_template::ShortcutDecisionSchema; use engine::analysis::loop_check::{LoopCertificate, WinKind}; - use engine::analysis::resource::BoardDelta; + use engine::analysis::resource::{BoardDelta, PeriodicDelta, ResourceVector}; + use engine::types::identifiers::ObjectId; use rand::rngs::SmallRng; use rand::SeedableRng; const P0: PlayerId = PlayerId(0); const P1: PlayerId = PlayerId(1); - /// A synthetic optional-lethal certificate — the policy never reads it; only `proposer` and - /// `predicted_winner` drive the verdict. + /// A synthetic optional-lethal certificate with NO certified period. + /// + /// The policy reads exactly one field of this: `per_cycle`, via + /// `cycles_to_proposer_elimination`. `None` here means "no self-elimination bound is + /// derivable", so every row built on this helper exercises the pre-existing arms only — + /// which is why the self-cost rows below use [`bounded_offer_with_period`] instead. fn cert() -> LoopCertificate { LoopCertificate { unbounded: vec![], @@ -506,6 +605,50 @@ mod tests { state } + /// A BOUNDED offer carrying a real certified period — the shape + /// `certified_bounded_cycle_offer` actually mints (`per_cycle: Some(periodic)`), as opposed + /// to [`cert`]'s `None`. + fn bounded_offer_with_period(max_iterations: u32, period: PeriodicDelta) -> GameState { + let mut state = GameState::new_two_player(0); + state.waiting_for = WaitingFor::LoopShortcut { + proposer: P0, + predicted_winner: None, + certificate: LoopCertificate { + per_cycle: Some(period), + ..cert() + }, + schema: ShortcutDecisionSchema { + max_iterations, + ..Default::default() + }, + }; + state + } + + /// One repetition's whole-game delta, given only the axes a test cares about. + fn periodic(library_delta: &[(PlayerId, i64)], life: &[(PlayerId, i64)]) -> PeriodicDelta { + PeriodicDelta { + frames_per_period: 1, + delta: ResourceVector { + library_delta: library_delta.iter().copied().collect(), + life: life.iter().copied().collect(), + ..Default::default() + }, + victim_slot: vec![], + } + } + + fn stock_library(state: &mut GameState, player: PlayerId, cards: u64) { + state.players[player.0 as usize].library = (0..cards).map(ObjectId).collect(); + } + + fn certificate_of(state: &GameState) -> &LoopCertificate { + match &state.waiting_for { + WaitingFor::LoopShortcut { certificate, .. } => certificate, + other => panic!("expected a LoopShortcut offer, got {other:?}"), + } + } + fn schema_of(state: &GameState) -> &ShortcutDecisionSchema { match &state.waiting_for { WaitingFor::LoopShortcut { schema, .. } => schema, @@ -513,6 +656,92 @@ mod tests { } } + /// CR 104.3c + CR 121.4 — the AI must not declare a bounded loop that runs its OWN library + /// to zero. `elimination_bounds` deliberately lets the proposer be the binding seat, and the + /// engine's only bounded candidate is `Fixed(max_iterations)`, so before this guard the + /// heuristic path declared a self-decking loop at the CRITICAL band. + /// + /// THE `Fixed(9)` ROW IS THE DISCRIMINATOR, and it is what makes this test about the + /// THRESHOLD rather than about the mere presence of a proposer-negative axis. A "fix" that + /// rejected any period charging the proposer's library would satisfy the `Fixed(10)` + /// assertion and still be wrong — it would refuse profitable self-mill loops the proposer + /// survives. One cycle short of the bound leaves 3 cards, and that must still score. + /// + /// REVERT-PROBE: delete the `cycles_to_proposer_elimination` guard arm ⇒ `Fixed(10)` falls + /// through to the scoring arm and reads `loop_shortcut_bounded_declare_progress`, so the + /// first assertion FAILS while the `Fixed(9)` row stays green. + #[test] + fn loop_shortcut_declare_that_decks_the_proposer_is_refused() { + // 30 cards, 3 milled from the proposer per cycle ⇒ empty at exactly 10 cycles. + let mut state = bounded_offer_with_period(10, periodic(&[(P0, -3), (P1, -1)], &[])); + stock_library(&mut state, P0, 30); + + assert!( + schema_of(&state).is_bounded(), + "REACH-GUARD: the arm under test is bounded-only; max_iterations = {}", + schema_of(&state).max_iterations + ); + assert!( + certificate_of(&state).per_cycle.is_some(), + "REACH-GUARD: `cycles_to_proposer_elimination` returns None on a certificate with \ + no period, which would make every assertion below vacuous" + ); + assert_eq!(state.players[P0.0 as usize].library.len(), 30); + + let fatal = verdict_for(&state, &declare(IterationCount::Fixed(10))); + assert!( + matches!(fatal, PolicyVerdict::Reject { .. }), + "10 cycles empty the proposer's own library ⇒ a self-loss committed at the next \ + draw (CR 104.3c); got {fatal:?}" + ); + assert_eq!(kind_of(&fatal), "loop_shortcut_declare_eliminates_proposer"); + + let survivable = verdict_for(&state, &declare(IterationCount::Fixed(9))); + assert_eq!( + kind_of(&survivable), + "loop_shortcut_bounded_declare_progress", + "9 cycles leave 3 cards — the guard must be quantitative, not a blanket refusal of \ + any proposer-negative library axis" + ); + assert!(delta_of(&survivable) > STRONG_MAX); + } + + /// The CONTRAST that proves the guard reads the PROPOSER's seat and not merely "some seat + /// is being milled": identical schema, identical bound, identical declared count — the only + /// change is which player the drain names. + #[test] + fn loop_shortcut_declare_that_decks_only_an_opponent_still_scores() { + let mut state = bounded_offer_with_period(10, periodic(&[(P1, -3)], &[])); + stock_library(&mut state, P0, 30); + stock_library(&mut state, P1, 30); + + let v = verdict_for(&state, &declare(IterationCount::Fixed(10))); + assert_eq!( + kind_of(&v), + "loop_shortcut_bounded_declare_progress", + "milling an OPPONENT to zero is the loop working as intended; got {v:?}" + ); + assert!(delta_of(&v) > STRONG_MAX); + } + + /// The predicate is a MINIMUM across axes, not a library special case (CR 704.5a life). + /// Life 20 losing 2 per cycle ⇒ dead at 10; the same offer one cycle short still scores. + #[test] + fn loop_shortcut_declare_that_kills_the_proposer_on_life_is_refused() { + let state = bounded_offer_with_period(10, periodic(&[], &[(P0, -2)])); + assert_eq!(state.players[P0.0 as usize].life, 20); + + assert_eq!( + kind_of(&verdict_for(&state, &declare(IterationCount::Fixed(10)))), + "loop_shortcut_declare_eliminates_proposer" + ); + assert_eq!( + kind_of(&verdict_for(&state, &declare(IterationCount::Fixed(9)))), + "loop_shortcut_bounded_declare_progress", + "9 cycles leave the proposer at 2 life — alive, so the scoring arm still owns it" + ); + } + /// CR 732.2a — the BOUNDED branch, both halves, on ONE schema differing only in `n`. /// /// (i) `Fixed(4)` with `max_iterations == 10` ⇒ committed progress that eliminates nobody From f9a77005b1f8a8840a5fafa8556ff49e19598f4e Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Mon, 3 Aug 2026 08:33:38 -0500 Subject: [PATCH 57/62] fix(engine): refuse wire-zero frames_per_period on both shortcut hosts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `max_iterations` says how many repetitions a proposal commits; `frames_per_period` says what one repetition IS. A wire-supplied 0 corrupts the second question exactly as a 0 bound corrupts the first. Mechanism rather than symmetry: `drive_one_shortcut_cycle` closes a committed cycle on `frames_per_period.is_some_and(|k| frames_this_cycle >= k)`, and `frames_this_cycle` is a `u32` — so `>= 0` is a TAUTOLOGY. That disjunct fires at the first active-player priority beat, collapsing the cycle boundary to one beat instead of the certified span, and every per-cycle conformance check then measures a truncated cycle against a whole-period delta. THE FIELD HAS TWO WIRE HOSTS, and the guard initially covered the wrong one. `frames_per_period` rides `PeriodicDelta`, which hangs off both `LoopCertificate` (the `LoopShortcut` offer) and `ShortcutProposal` (the `RespondToShortcut` proposal). `materialize_fixed_shortcut` feeds the drive from `proposal.per_cycle.as_ref().map(|pd| pd.frames_per_period)` — the proposal host, never the offer's certificate — and a restored `RespondToShortcut` is reached without re-entering `LoopShortcut`. Guarding only the offer left the consumed path open while looking complete. `reject_zero_frames_per_period` is therefore the single authority, called from both hosts, with the host NAMED in the error so a reader can tell which fired. Production never mints 0: both certification bases derive it measured (`span as u32` on basis A, `k` on basis B), which is why a 0 on the wire is a corrupted or hand-edited save rather than a live shape. The test drives both hosts and builds its `PeriodicDelta` / `WaitingFor` in Rust then serializes them, rather than hand-authoring JSON — `ResourceVector`'s maps are `PlayerId`-keyed and need the wire adapter, so hand-written JSON risks asserting against a shape production never emits. Each host gets a legal-span anti-vacuity arm. Revert-probes documented per host: the sibling `max_iterations` row cannot cover either, because the fixture omits that key entirely and defaults it to `MAX_SHORTCUT_CYCLES`. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/types/game_state.rs | 56 +++++++- .../engine/tests/integration/loop_shortcut.rs | 129 ++++++++++++++++++ 2 files changed, 184 insertions(+), 1 deletion(-) diff --git a/crates/engine/src/types/game_state.rs b/crates/engine/src/types/game_state.rs index ad564cc81d..d3543664b6 100644 --- a/crates/engine/src/types/game_state.rs +++ b/crates/engine/src/types/game_state.rs @@ -8717,8 +8717,31 @@ fn delayed_trigger_install_command_mut( /// `MAX_SHORTCUT_CYCLES` mean "unbounded", a legitimate state; and an ABSENT wire key /// decodes to `MAX_SHORTCUT_CYCLES` through `#[serde(default = "default_max_iterations")]`, /// so every legacy save predating the field is untouched. +/// CR 732.2a: a certified period spanning ZERO frames is not a period. +/// +/// Single authority for the field so both wire hosts enforce identically — the offer's +/// `LoopCertificate::per_cycle` and the proposal's `ShortcutProposal::per_cycle` are different +/// structs carrying the same `PeriodicDelta`, and only the second is what the drive reads. +fn reject_zero_frames_per_period( + period: &Option, + host: &str, +) -> Result<(), String> { + if period.as_ref().is_some_and(|pd| pd.frames_per_period == 0) { + return Err(format!( + "persisted {host} states frames_per_period 0, which delimits every committed cycle \ + at the first priority beat rather than at the certified CR 732.2a period" + )); + } + Ok(()) +} + fn reject_zero_bound_shortcut_offer(state: &GameState) -> Result<(), String> { - if let WaitingFor::LoopShortcut { schema, .. } = &state.waiting_for { + if let WaitingFor::LoopShortcut { + schema, + certificate, + .. + } = &state.waiting_for + { if schema.max_iterations == 0 { return Err( "persisted LoopShortcut offer states max_iterations 0, which CR 732.2a admits \ @@ -8726,6 +8749,37 @@ fn reject_zero_bound_shortcut_offer(state: &GameState) -> Result<(), String> { .to_string(), ); } + // The SIBLING wire zero. `max_iterations` says how many repetitions there are; + // `frames_per_period` says what one repetition IS, and a wire-supplied 0 corrupts the + // second question exactly as a 0 bound corrupts the first. + // + // ⚠ THIS CALL COVERS ONE OF THE FIELD'S TWO HOSTS. `frames_per_period` rides + // `PeriodicDelta`, which hangs off BOTH `LoopCertificate` (here) and `ShortcutProposal` + // (the `RespondToShortcut` arm below) — and the second is the one the drive reads. Neither + // call is complete alone; `reject_zero_frames_per_period` is the shared authority so the + // two can never drift apart. + // + // Mechanism, not a symmetry argument: `drive_one_shortcut_cycle` delimits a committed + // cycle with `frames_per_period.is_some_and(|k| frames_this_cycle >= k)` + // (`game/engine.rs`). `frames_this_cycle` is a `u32`, so `>= 0` is a TAUTOLOGY — that + // disjunct fires at the first active-player priority beat, collapsing the cycle boundary + // to one beat instead of the certified span, and every per-cycle conformance check then + // measures a truncated cycle against a whole-period delta. + // + // Production never mints 0 — both certification bases derive it measured (`span as u32` + // on basis A, `k` on basis B) — which is exactly why a 0 arriving on the wire is a + // corrupted or hand-edited save rather than a live shape. + reject_zero_frames_per_period(&certificate.per_cycle, "LoopShortcut offer")?; + } + // THE SECOND WIRE HOST FOR THE SAME FIELD, and the one the drive actually reads. + // `frames_per_period` is not a `LoopCertificate` field — it lives on `PeriodicDelta`, and + // `ShortcutProposal` carries its own `per_cycle` too. `materialize_fixed_shortcut` feeds + // `drive_one_shortcut_cycle` from `proposal.per_cycle.as_ref().map(|pd| pd.frames_per_period)` + // (`game/engine.rs`), i.e. from THIS host, not from the offer's certificate. Guarding only + // the offer would leave the consumed path open — the restored `RespondToShortcut` state is + // reached without ever re-entering `LoopShortcut`. + if let WaitingFor::RespondToShortcut { proposal, .. } = &state.waiting_for { + reject_zero_frames_per_period(&proposal.per_cycle, "RespondToShortcut proposal")?; } Ok(()) } diff --git a/crates/engine/tests/integration/loop_shortcut.rs b/crates/engine/tests/integration/loop_shortcut.rs index 9dadf8e825..42ea21d4aa 100644 --- a/crates/engine/tests/integration/loop_shortcut.rs +++ b/crates/engine/tests/integration/loop_shortcut.rs @@ -5363,6 +5363,135 @@ fn migrated_dump_decodes_through_both_decoders_and_unmigrated_through_neither() /// its call) ⇒ the `0` arm decodes `Ok` ⇒ FAILS. The wire-`5` arm is the anti-vacuity half: /// it proves the mutation instrument reaches the field and that the invariant refuses `0` /// specifically rather than refusing every mutated save. +/// The SIBLING wire zero on the same offer: `PeriodicDelta::frames_per_period`. +/// +/// `max_iterations` says how many repetitions a proposal commits; `frames_per_period` says what +/// ONE repetition is. `drive_one_shortcut_cycle` closes a cycle on +/// `frames_per_period.is_some_and(|k| frames_this_cycle >= k)`, and `frames_this_cycle` is a +/// `u32` — so `k == 0` makes that disjunct a TAUTOLOGY, ending every "cycle" at the first +/// active-player priority beat instead of at the certified CR 732.2a period. +/// +/// THE PERIOD IS BUILT IN RUST AND SERIALIZED, not hand-written as JSON. `ResourceVector`'s +/// per-player maps are keyed by `PlayerId` and need the wire adapter to cross the boundary, so a +/// hand-authored object risks testing a shape production never emits — the failure mode this +/// suite has hit before. +/// +/// REVERT-PROBE: delete the `frames_per_period == 0` block in `reject_zero_bound_shortcut_offer` +/// ⇒ the `0` arm decodes `Ok` ⇒ this row FAILS while +/// `a_wire_zero_shortcut_bound_fails_the_load_and_a_wire_five_does_not` stays green, because the +/// fixture omits `max_iterations` entirely and defaults it to `MAX_SHORTCUT_CYCLES`. The `2` arm +/// is the anti-vacuity half: it proves the splice reaches the field and that the guard refuses +/// `0` specifically rather than refusing every save carrying a period. +#[test] +fn a_wire_zero_frames_per_period_fails_the_load_and_a_wire_two_does_not() { + let json = gunzip_dump(include_bytes!( + "../fixtures/tenacity_exquisite_blood_4p.json.gz" + )); + let envelope: serde_json::Value = + serde_json::from_str(&json).expect("dump envelope parses as JSON"); + let base = envelope["gameState"].clone(); + + assert_eq!( + base["waiting_for"]["type"].as_str(), + Some("LoopShortcut"), + "the invariant is scoped to the one variant that carries a LoopCertificate" + ); + assert!( + base["waiting_for"]["data"]["certificate"]["per_cycle"].is_null(), + "the fixture carries no certified period, so the splice below CREATES it" + ); + + let with_frames = |frames: u32| { + let mut v = base.clone(); + let period = engine::analysis::resource::PeriodicDelta { + frames_per_period: frames, + delta: Default::default(), + victim_slot: vec![], + }; + v["waiting_for"]["data"]["certificate"]["per_cycle"] = + serde_json::to_value(&period).expect("a PeriodicDelta serializes"); + assert_eq!( + v["waiting_for"]["data"]["certificate"]["per_cycle"]["frames_per_period"].as_u64(), + Some(u64::from(frames)), + "the splice must reach certificate.per_cycle.frames_per_period" + ); + v + }; + + let message = + serde_json::from_value::(with_frames(0)) + .expect_err("a wire frames_per_period of 0 must fail the load") + .to_string(); + assert!( + message.contains("frames_per_period 0"), + "the rejection must NAME the invariant it enforces, and must not be the sibling \ + max_iterations guard firing instead, got: {message}" + ); + + assert!( + serde_json::from_value::(with_frames(2)) + .is_ok(), + "a wire frames_per_period of 2 is a legal certified span and must still load" + ); + + // ── THE SECOND WIRE HOST, AND THE ONE THE DRIVE ACTUALLY READS ────────────────────── + // `frames_per_period` is a `PeriodicDelta` field, not a `LoopCertificate` field, and + // `ShortcutProposal` carries its own `per_cycle`. `materialize_fixed_shortcut` feeds the + // drive from `proposal.per_cycle.as_ref().map(|pd| pd.frames_per_period)` — THIS host — + // never from the offer's certificate. A restored `RespondToShortcut` is reached without + // re-entering `LoopShortcut`, so guarding only the arms above would leave the consumed path + // open while looking complete. + // + // REVERT-PROBE: delete the `RespondToShortcut` block in `reject_zero_bound_shortcut_offer` + // ⇒ every arm above still passes and only this one flips to `Ok`. + let respond_with_frames = |frames: u32| { + let mut v = base.clone(); + let waiting = engine::types::game_state::WaitingFor::RespondToShortcut { + player: engine::types::player::PlayerId(1), + remaining_players: vec![], + proposal: engine::analysis::loop_check::ShortcutProposal { + proposer: engine::types::player::PlayerId(0), + predicted_winner: None, + count: engine::analysis::decision_template::IterationCount::Fixed(3), + unbounded: vec![], + win_kind: engine::analysis::loop_check::WinKind::Advantage, + template: None, + per_cycle: Some(engine::analysis::resource::PeriodicDelta { + frames_per_period: frames, + delta: Default::default(), + victim_slot: vec![], + }), + }, + }; + v["waiting_for"] = serde_json::to_value(&waiting).expect("a WaitingFor serializes"); + assert_eq!( + v["waiting_for"]["data"]["proposal"]["per_cycle"]["frames_per_period"].as_u64(), + Some(u64::from(frames)), + "the splice must reach proposal.per_cycle.frames_per_period" + ); + v + }; + + let message = serde_json::from_value::( + respond_with_frames(0), + ) + .expect_err("a wire frames_per_period of 0 on the PROPOSAL must fail the load") + .to_string(); + assert!( + message.contains("frames_per_period 0") && message.contains("RespondToShortcut"), + "the rejection must name BOTH the invariant and the host that carried it, so a reader \ + can tell which of the two per_cycle sites fired, got: {message}" + ); + + assert!( + serde_json::from_value::( + respond_with_frames(2) + ) + .is_ok(), + "a legal span on the proposal host must still load — anti-vacuity for the arm above" + ); +} + #[test] fn a_wire_zero_shortcut_bound_fails_the_load_and_a_wire_five_does_not() { let json = gunzip_dump(include_bytes!( From 2f405d4246af1f7c8eff9502a53bb043878d0d48 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Mon, 3 Aug 2026 08:33:59 -0500 Subject: [PATCH 58/62] test(engine): re-pin CR 603.5 census for upstream #6955 `effects/mod.rs:8949 => :8970`, +21 matching that commit's insertion count exactly. Producer re-read at the new coordinate: sha256-identical to the same line pre-merge. The other four pins did not move, which locates the insertion below two of them and is itself evidence the SET is unchanged. Records the row's CI-only failure mode: CI checks out `refs/pull//merge`, so an upstream insertion above a producer reds this row in CI while it stays green locally until the branch merges that upstream. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/game/engine.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index 6dc3068017..b3c486ee3f 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -15191,7 +15191,21 @@ mod stage2_injector_tests { // and diffed against the pre-rebase tree: byte-identical. "game/effects/mod.rs:5918".to_string(), "game/effects/mod.rs:5995".to_string(), - "game/effects/mod.rs:8949".to_string(), + // Merge of upstream #6955 (c9daf66e3): `:8949 ⇒ :8970`, +21 from that commit's + // 21 insertions ABOVE this producer in the same file — shift == insertion count + // exactly. The other two entries here did NOT move, which locates the insertion + // below them and is itself evidence the SET is unchanged. Producer re-read at the + // new coordinate: byte-identical by sha256 to the same line pre-merge. + // + // NOTE ON THIS ROW'S FAILURE MODE. CI checks out `refs/pull//merge` — this + // branch merged with CURRENT `main` — so an upstream insertion above a producer + // reds this row in CI while it stays green locally, until the branch merges that + // upstream. That is the 4th such drift (#6842 +22, #6933 on `engine.rs`, now + // #6955 +21), every one pure line movement and none a real sixth producer. The + // pin is deliberately kept line-exact because that is what makes a NEW mint a + // counted event; a function+content-hash anchor would end the drift class while + // preserving that, and is filed as a follow-up rather than done here. + "game/effects/mod.rs:8970".to_string(), // UNMOVED across the rebase, and that is itself evidence the SET did not // move: a census that had gained or lost a producer would not leave this // entry both byte-identical AND at the same coordinate. From 0b5a2bfa151ba26d97bb108b849cbfe27b0f18e4 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Mon, 3 Aug 2026 09:07:55 -0500 Subject: [PATCH 59/62] test(engine): adjudicate offer-writer census test half 14 => 16 PRODUCTION STAYED AT 22. That is the half this pin exists to protect: the assert's own text says a new production site in a certification-path file halts the U-series, while a new READ site is the benign case to adjudicate. Both new sites are in `phase-ai/src/policies/loop_shortcut.rs`'s `#[cfg(test)]` module and belong to the proposer-elimination rows: `bounded_offer_with_period`, a builder minting an offer whose certificate carries a real `per_cycle` so the new arm can be driven at all, and `certificate_of`, a read accessor for those rows. The policy arm itself READS the certificate and writes no offer, which is why the production count is unmoved. Named rather than renumbered, per the assert's instruction to name the new site instead of only moving the number. Assisted-by: ClaudeCode:claude-opus-5 --- .../loop_shortcut_offer_writer_census.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/crates/engine/tests/integration/loop_shortcut_offer_writer_census.rs b/crates/engine/tests/integration/loop_shortcut_offer_writer_census.rs index 7804e3ee63..8ea900fdf7 100644 --- a/crates/engine/tests/integration/loop_shortcut_offer_writer_census.rs +++ b/crates/engine/tests/integration/loop_shortcut_offer_writer_census.rs @@ -230,7 +230,7 @@ fn the_loop_shortcut_offer_writer_surface_is_pinned_and_every_declare_site_valid assert_eq!( (production.len(), in_test.len()), - (22, 14), + (22, 16), "CR 732.2a OFFER-WRITER SURFACE CHANGED (not re-measured — this number is an \ INVARIANCE pin over the whole 5d U-series).\n\ The three CERTIFICATION-PATH writers are `reconcile_terminal_result` (object-growth \ @@ -243,11 +243,17 @@ fn the_loop_shortcut_offer_writer_surface_is_pinned_and_every_declare_site_valid certify without declaring or driving — §10 ruling condition (2), i.e. \ answer-legality-at-certification becomes OWED WORK and the U-series stops. A new READ \ site is the benign case; adjudicate, do not relax the assert.\n\ - THE TEST HALF HAS BEEN ADJUDICATED TWICE (12 ⇒ 13, §6 R27 (b)'s schema read in \ + THE TEST HALF HAS BEEN ADJUDICATED THREE TIMES (12 ⇒ 13, §6 R27 (b)'s schema read in \ `engine/src/analysis/resource.rs`; 13 ⇒ 14, 5d U4's `u4_park_on_offer` fixture in \ `engine/src/game/engine.rs`, which parks a constructed board on an offer so §6 R28 \ - arm (b) can assert the DECLARE firewall refuses a hostile `template.owner`); if it \ - moves again, name the new site here too rather than only moving the number.\n\ + arm (b) can assert the DECLARE firewall refuses a hostile `template.owner`; 14 ⇒ 16, \ + BOTH in `phase-ai/src/policies/loop_shortcut.rs`'s `#[cfg(test)]` module — \ + `bounded_offer_with_period`, a builder minting an offer whose certificate carries a \ + real `per_cycle` so the proposer-elimination arm can be driven, and `certificate_of`, \ + a read accessor for the same rows. PRODUCTION STAYED AT 22 across that change, which \ + is the half this pin exists to protect: the new policy arm READS the certificate and \ + writes no offer); if it moves again, name the new site here too rather than only \ + moving the number.\n\ measured per-file production multiset: {multiset:?}\n\ production: {production:?}\n\ test: {in_test:?}" From 79ea95e1a15876655481636764be4eb451508f2d Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Mon, 3 Aug 2026 09:45:04 -0500 Subject: [PATCH 60/62] test(engine): commit the 5th-drift census re-pin that was left uncommitted MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The CR 603.5 producer census pins `game/effects/mod.rs` line-exact. The #6961 + v0.44.0 uniform +78 shift moved the three producers to :5996/:6073/:9048, and that re-pin was edited during the 851180cf7 fold but never committed — it stayed in the working tree, so the pushed tip 0b5a2bfa1 still asserted :5918/:5995/:8970 and CI went red on it. This commit is that edit and nothing else. Why the local gate was green while CI was red: the census test walks `src/` from disk at runtime (`env!("CARGO_MANIFEST_DIR")` + `read_to_string`), so it measures the WORKING TREE, never the commit. A dirty tree can never certify a commit — "green at the exact tip" requires HEAD == sha AND a clean `git status` on the gated paths, and that precondition is now part of the drift-log instructions. Re-verified in the `refs/pull//merge` layout rather than locally, per the drift log's own rule: `git merge-tree --write-tree HEAD upstream/main` (upstream 1738d5c91) puts the producers at exactly :5996/:6073/:9048, with `scoped_library_search.rs:452` and `engine.rs:11427` unmoved — all five production producers accounted for, still no sixth. Upstream #6959 is innocent. Assisted-by: ClaudeCode:claude-opus-5 --- crates/engine/src/game/engine.rs | 43 +++++++++++++++++--------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index b3c486ee3f..69a8d6576d 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -15185,27 +15185,30 @@ mod stage2_injector_tests { assert_eq!( producers, vec![ - // Rebase onto upstream #6842 (8121fd1c6): `:5896/:5973/:8927 ⇒ - // :5918/:5995/:8949`, a uniform +22 shift from lines that commit adds ABOVE - // these three in the same file. Each producer re-read at its new coordinate - // and diffed against the pre-rebase tree: byte-identical. - "game/effects/mod.rs:5918".to_string(), - "game/effects/mod.rs:5995".to_string(), - // Merge of upstream #6955 (c9daf66e3): `:8949 ⇒ :8970`, +21 from that commit's - // 21 insertions ABOVE this producer in the same file — shift == insertion count - // exactly. The other two entries here did NOT move, which locates the insertion - // below them and is itself evidence the SET is unchanged. Producer re-read at the - // new coordinate: byte-identical by sha256 to the same line pre-merge. + // DRIFT LOG for these three, newest last. Every entry is pure line movement + // with the producer re-read and sha256-compared at its new coordinate; none has + // ever been a real sixth producer. + // #6842 (8121fd1c6): `:5896/:5973/:8927 ⇒ :5918/:5995/:8949`, uniform +22. + // #6933: `engine.rs :10640 ⇒ :11427` (that entry, below). + // #6955 (c9daf66e3): `:8949 ⇒ :8970`, +21 == that commit's insertion count, + // and the other two did NOT move, which located the insertion below them. + // #6961 (2ead7aab1) + v0.44.0: `:5918/:5995/:8970 ⇒ :5996/:6073/:9048`, + // uniform +78 above all three (whole-file delta +153/-15). // - // NOTE ON THIS ROW'S FAILURE MODE. CI checks out `refs/pull//merge` — this - // branch merged with CURRENT `main` — so an upstream insertion above a producer - // reds this row in CI while it stays green locally, until the branch merges that - // upstream. That is the 4th such drift (#6842 +22, #6933 on `engine.rs`, now - // #6955 +21), every one pure line movement and none a real sixth producer. The - // pin is deliberately kept line-exact because that is what makes a NEW mint a - // counted event; a function+content-hash anchor would end the drift class while - // preserving that, and is filed as a follow-up rather than done here. - "game/effects/mod.rs:8970".to_string(), + // ⚠ THIS ROW FAILS IN CI BEFORE IT FAILS LOCALLY, and that is not a bug in the + // row. CI checks out `refs/pull//merge` — this branch merged with CURRENT + // `main` — so an upstream insertion above a producer reds it in CI while the + // branch tree stays green, until the branch merges that upstream. Diagnose by + // rebuilding the merge tree (`git merge-tree --write-tree HEAD upstream/main`) + // and comparing coordinates there, NOT by editing pins to match a local tree. + // + // Five drifts, all upstream, zero true positives. The pin stays line-exact + // because that is what makes a NEW mint a counted event; a function + + // content-hash anchor would end the drift class while keeping that property, + // and is offered as a follow-up rather than taken unannounced mid-review. + "game/effects/mod.rs:5996".to_string(), + "game/effects/mod.rs:6073".to_string(), + "game/effects/mod.rs:9048".to_string(), // UNMOVED across the rebase, and that is itself evidence the SET did not // move: a census that had gained or lost a producer would not leave this // entry both byte-identical AND at the same coordinate. From 2cda9473dc681382d320b35ed7f2c5d31a8b7196 Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Mon, 3 Aug 2026 10:22:44 -0500 Subject: [PATCH 61/62] fix(ai): stop treating an empty library as proposer elimination (CR 121.4) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `cycles_to_proposer_elimination` counted the proposer's library reaching 0 as an elimination axis, so a bounded self-mill shortcut that ends at exactly zero was rejected at the CRITICAL band. That is a rules error. CR 121.4 (docs/MagicCompRules.txt:1158): "A player who attempts to draw a card from a library with no cards in it loses the game the next time a player would receive priority." The loss attaches to the DRAW ATTEMPT, not to the library reaching zero — a player with an empty library and no draw ahead of them has not lost and may still win. Self-mill to zero is a real strategy class: `loop_check` classifies such a period as `Advantage`, not `Decking`, and `ResourceVector::elimination_bounds` intentionally permits the exactly-zero terminal value. ACCUMULATION IS NOT REALIZATION, and the engine already tests that doctrine on The One Ring. Under the Kilo/Freed/Relic proliferate engine it certifies an infinite burden-GROWTH loop as `WinKind::Advantage` — not a win — naming the unbounded burden counter axis (`analysis/corpus_tests.rs`, `one_ring_burden_growth_certificate`, with the 0-burden dead-loop control beside it). The burden's lethality realizes only downstream at the upkeep trigger, which is where CR 704.5a finally applies: `tests/integration/one_ring_burden_upkeep_lethal.rs` pairs `one_ring_burden_upkeep_kills_owner_p0_wins` with the sub-lethal control `one_ring_sublethal_burden_owner_survives_no_gameover`. An emptying library is that same shape with mill for burden and the draw attempt for the upkeep trigger, so removing the axis makes this policy CONSISTENT with the engine's own tested doctrine rather than stricter than it. That is also why life stays, and why the line is principled rather than an ad-hoc keep/drop: `per_cycle.delta.life` is IN-CYCLE realization — the drain happens inside the certified period and is state-based-checkable at cycle boundaries, so the certificate proves the death it implies. The One Ring's life loss would only enter a certificate the same way if the upkeep trigger were inside the loop span. Both surviving axes are immediate state-based losses on state alone: life 0 or less (CR 704.5a), ten or more poison counters (CR 704.5c). A certified period records per-cycle resource deltas; it cannot express "and then the proposer is forced to draw", so no library-based veto is sound today. The axis is removed rather than weakened, and the EXCLUSION is what the doc comment annotates — why library is absent is the non-obvious fact a future reader needs. If a certificate ever proves a forced post-zero draw, that is the documented extension point. Tests, written before the fix and observed failing first: - `..._mills_the_proposer_to_exactly_zero_still_scores` is the regression. It FAILED pre-fix reading `loop_shortcut_declare_eliminates_proposer` with facts `declared=10, eliminates_at=10`, and scores bounded progress post-fix. Re-adding a library term flips it back, so it is its own revert-probe. - The threshold-discrimination pair (fatal-at-N rejects / N-1 scores) moves to the life axis, which remains a true elimination axis, and keeps its independent-failure revert-probe. - The seat contrast is re-based onto life: a library-drain contrast would now pass for BOTH seats and discriminate nothing. - A poison row is added so the min-across-axes claim is covered on both surviving axes, with life held constant so poison is the only binding one. Sibling sweep across phase-ai for library-to-zero-as-death reasoning: none. `mill_targeting.rs:89` penalizes milling an ALREADY-empty library, which is a wasted-value heuristic and not an elimination claim; the `self_cost_value.rs` rows concern DRAWING from an empty library, which is CR 121.4-correct. The engine-side bound derivation is deliberately untouched: this finding is about the AI-side veto, and `elimination_bounds` already permits exactly-zero. Assisted-by: ClaudeCode:claude-opus-5 --- crates/phase-ai/src/policies/loop_shortcut.rs | 198 +++++++++++++----- 1 file changed, 148 insertions(+), 50 deletions(-) diff --git a/crates/phase-ai/src/policies/loop_shortcut.rs b/crates/phase-ai/src/policies/loop_shortcut.rs index 29042cf638..39be774ca7 100644 --- a/crates/phase-ai/src/policies/loop_shortcut.rs +++ b/crates/phase-ai/src/policies/loop_shortcut.rs @@ -315,23 +315,54 @@ impl TacticalPolicy for LoopShortcutPolicy { /// This is the inverse of `ResourceVector::elimination_bounds` (engine `analysis/resource.rs`), /// mirrored axis for axis and asked of ONE seat instead of narrowed over all of them: /// -/// - **library**, CR 104.3c + CR 121.4 — reaching **0** is the threshold, not 1. A player does -/// not lose when the library empties; they lose the next time they would draw from it. So an -/// emptied library is a self-loss already committed, and `elimination_bounds` deliberately -/// permits that terminal value (its `narrow(p.library.len(), drain)` lands exactly on 0). /// - **life**, CR 704.5a — reaching **0 or less** is the threshold. /// - **poison**, CR 704.5c — reaching **10 or more** is the threshold. /// -/// Only movement TOWARD death counts: a positive library delta, a life gain, or a poison -/// decrease yields no bound on that axis, which is why each rate is tested `> 0` before it is -/// allowed to divide. +/// **LIBRARY IS DELIBERATELY EXCLUDED, and that is the non-obvious part of this function.** +/// CR 121.4: "A player who attempts to draw a card from a library with no cards in it loses the +/// game the next time a player would receive priority." The loss attaches to the DRAW ATTEMPT, +/// not to the library reaching zero — a player with an empty library and no draw ahead of them +/// has not lost and may still win. Milling yourself to exactly zero is a legal, sometimes +/// winning line (self-mill payoffs; `loop_check` classifies such a period as `Advantage`, and +/// `elimination_bounds` intentionally permits the exactly-zero terminal value), so vetoing it +/// would refuse a real strategy class. A certified period records per-cycle resource deltas; it +/// cannot express "and then the proposer is forced to draw", so on today's evidence no +/// library-based veto is sound. **Extension point:** if a future certificate can prove a forced +/// post-zero draw, that is what would license adding the axis back — reconcile it against +/// `loop_shortcut_declare_that_mills_the_proposer_to_exactly_zero_still_scores`. +/// +/// **The principle is accumulation ≠ realization, and the engine already tests it.** The One Ring +/// under the Kilo/Freed/Relic proliferate engine certifies an infinite burden-GROWTH loop as +/// `WinKind::Advantage` — not a win — naming the unbounded burden counter axis +/// (`analysis/corpus_tests.rs`, `one_ring_burden_growth_certificate`, with the 0-burden dead-loop +/// control beside it and the driver doc at `analysis/corpus.rs`). The burden's lethality realizes +/// only DOWNSTREAM, at the upkeep trigger, which is where CR 704.5a finally applies: +/// `tests/integration/one_ring_burden_upkeep_lethal.rs` pairs +/// `one_ring_burden_upkeep_kills_owner_p0_wins` with the sub-lethal control +/// `one_ring_sublethal_burden_owner_survives_no_gameover`. The engine therefore refuses to treat +/// in-loop accumulation of a doom resource as realized elimination. An emptying library is the +/// same shape with mill in place of burden and the draw attempt in place of the upkeep trigger, +/// so excluding it makes this policy consistent with the engine's own tested doctrine rather than +/// stricter than it. +/// +/// **That is also why life STAYS, and the line is principled rather than an ad-hoc keep/drop.** +/// `per_cycle.delta.life` is IN-CYCLE realization: the drain happens inside the certified period +/// and is state-based-checkable at cycle boundaries, so the certificate does prove the death it +/// implies. The One Ring's life loss would only enter a certificate the same way if the upkeep +/// trigger were inside the loop span. Both surviving axes are immediate state-based losses on +/// state alone (CR 704), requiring no intervening action — which is exactly the property an empty +/// library lacks. +/// +/// Only movement TOWARD death counts: a life gain or a poison decrease yields no bound on that +/// axis, which is why each rate is tested `> 0` before it is allowed to divide. /// /// Returns the MINIMUM across axes, so the caller compares one number against the declared /// count. `None` means "no axis kills the proposer at any n" — including the case where this /// offer carries no certified period at all. That last branch is unreachable for the bounded /// class (`certified_bounded_cycle_offer` mints `per_cycle: Some(periodic)`), and it is written /// as a plain `?` rather than an `expect` because a policy must never panic on a state shape; -/// the reach-guard in `loop_shortcut_declare_that_decks_the_proposer_is_refused` is what proves +/// the reach-guards in `loop_shortcut_declare_that_kills_the_proposer_on_life_is_refused` and +/// `loop_shortcut_declare_that_mills_the_proposer_to_exactly_zero_still_scores` are what prove /// the `Some` path is the one actually exercised. fn cycles_to_proposer_elimination( state: &GameState, @@ -354,10 +385,7 @@ fn cycles_to_proposer_elimination( }; [ - cycles( - player.library.len() as i64, - -per_cycle(&period.delta.library_delta), - ), + // No library term — see the CR 121.4 exclusion in this function's doc comment. cycles(i64::from(player.life), -per_cycle(&period.delta.life)), cycles( 10 - i64::from(player.poison_counters), @@ -656,23 +684,28 @@ mod tests { } } - /// CR 104.3c + CR 121.4 — the AI must not declare a bounded loop that runs its OWN library - /// to zero. `elimination_bounds` deliberately lets the proposer be the binding seat, and the - /// engine's only bounded candidate is `Fixed(max_iterations)`, so before this guard the - /// heuristic path declared a self-decking loop at the CRITICAL band. + /// CR 121.4 — running your OWN library to exactly zero is NOT a loss, and a bounded loop that + /// does it must still score. "A player who attempts to draw a card from a library with no + /// cards in it loses the game the next time a player would receive priority" — the loss + /// attaches to the DRAW ATTEMPT, not to the library reaching zero. A self-mill line that ends + /// at exactly zero with no draw in the cycle is legal, is a real strategy class (self-mill + /// payoffs, `loop_check` classifies it as `Advantage`), and can be the winning line. /// - /// THE `Fixed(9)` ROW IS THE DISCRIMINATOR, and it is what makes this test about the - /// THRESHOLD rather than about the mere presence of a proposer-negative axis. A "fix" that - /// rejected any period charging the proposer's library would satisfy the `Fixed(10)` - /// assertion and still be wrong — it would refuse profitable self-mill loops the proposer - /// survives. One cycle short of the bound leaves 3 cards, and that must still score. + /// WRITTEN BEFORE THE FIX AND OBSERVED FAILING, which is this row's revert-probe: against the + /// library-axis veto it read `loop_shortcut_declare_eliminates_proposer` and the `assert_eq!` + /// below reported that kind. Re-adding a library term to `cycles_to_proposer_elimination` + /// flips it back, so the row cannot silently lose its grip on the regression. /// - /// REVERT-PROBE: delete the `cycles_to_proposer_elimination` guard arm ⇒ `Fixed(10)` falls - /// through to the scoring arm and reads `loop_shortcut_bounded_declare_progress`, so the - /// first assertion FAILS while the `Fixed(9)` row stays green. + /// The certificate cannot represent a forced post-zero draw, so no library-based veto is + /// sound on today's evidence; if a future certificate proves a forced draw, that is the + /// extension point and this row is what it must be reconciled against. + /// + /// Same shape as the tested One Ring case (`one_ring_burden_upkeep_lethal.rs`): burden + /// accumulating in-loop is not the loss — the upkeep trigger that realizes it is. Here the + /// draw attempt plays the upkeep's role, per CR 121.4. Accumulation ≠ realization. #[test] - fn loop_shortcut_declare_that_decks_the_proposer_is_refused() { - // 30 cards, 3 milled from the proposer per cycle ⇒ empty at exactly 10 cycles. + fn loop_shortcut_declare_that_mills_the_proposer_to_exactly_zero_still_scores() { + // 30 cards, 3 of the proposer's own milled per cycle ⇒ EXACTLY zero at the 10th cycle. let mut state = bounded_offer_with_period(10, periodic(&[(P0, -3), (P1, -1)], &[])); stock_library(&mut state, P0, 30); @@ -683,53 +716,81 @@ mod tests { ); assert!( certificate_of(&state).per_cycle.is_some(), - "REACH-GUARD: `cycles_to_proposer_elimination` returns None on a certificate with \ - no period, which would make every assertion below vacuous" + "REACH-GUARD: a certificate with no period makes every assertion below vacuous" ); assert_eq!(state.players[P0.0 as usize].library.len(), 30); - - let fatal = verdict_for(&state, &declare(IterationCount::Fixed(10))); - assert!( - matches!(fatal, PolicyVerdict::Reject { .. }), - "10 cycles empty the proposer's own library ⇒ a self-loss committed at the next \ - draw (CR 104.3c); got {fatal:?}" + assert_eq!( + state.players[P0.0 as usize].life, 20, + "REACH-GUARD: the proposer must be alive on the axes that DO kill (CR 704.5a life, \ + CR 704.5c poison), or this row would pass for the wrong reason" ); - assert_eq!(kind_of(&fatal), "loop_shortcut_declare_eliminates_proposer"); - let survivable = verdict_for(&state, &declare(IterationCount::Fixed(9))); + let v = verdict_for(&state, &declare(IterationCount::Fixed(10))); assert_eq!( - kind_of(&survivable), + kind_of(&v), "loop_shortcut_bounded_declare_progress", - "9 cycles leave 3 cards — the guard must be quantitative, not a blanket refusal of \ - any proposer-negative library axis" + "10 cycles put the proposer's library at exactly 0 with no draw — legal under \ + CR 121.4, so the scoring arm owns it; got {v:?}" ); - assert!(delta_of(&survivable) > STRONG_MAX); + assert!(delta_of(&v) > STRONG_MAX); } - /// The CONTRAST that proves the guard reads the PROPOSER's seat and not merely "some seat - /// is being milled": identical schema, identical bound, identical declared count — the only - /// change is which player the drain names. + /// The CONTRAST that proves the guard reads the PROPOSER's seat and not merely "some seat is + /// being drained": identical schema, identical bound, identical declared count — the only + /// change is which player the life loss names. Re-based from the library axis onto life when + /// CR 121.4 removed library as an elimination axis; a library-drain contrast would now pass + /// for BOTH seats and discriminate nothing. #[test] - fn loop_shortcut_declare_that_decks_only_an_opponent_still_scores() { - let mut state = bounded_offer_with_period(10, periodic(&[(P1, -3)], &[])); - stock_library(&mut state, P0, 30); - stock_library(&mut state, P1, 30); + fn loop_shortcut_declare_that_kills_only_an_opponent_still_scores() { + let state = bounded_offer_with_period(10, periodic(&[], &[(P1, -2)])); + assert_eq!( + state.players[P1.0 as usize].life, 20, + "REACH-GUARD: 10 cycles at -2 must actually reach 0 on the OPPONENT, or the contrast \ + is vacuous" + ); let v = verdict_for(&state, &declare(IterationCount::Fixed(10))); assert_eq!( kind_of(&v), "loop_shortcut_bounded_declare_progress", - "milling an OPPONENT to zero is the loop working as intended; got {v:?}" + "draining an OPPONENT to zero life is the loop working as intended; got {v:?}" ); assert!(delta_of(&v) > STRONG_MAX); } - /// The predicate is a MINIMUM across axes, not a library special case (CR 704.5a life). - /// Life 20 losing 2 per cycle ⇒ dead at 10; the same offer one cycle short still scores. + /// CR 704.5a — the AI must not declare a bounded loop that runs its OWN life to 0 or less. + /// `elimination_bounds` deliberately lets the proposer be the binding seat, and the engine's + /// only bounded candidate is `Fixed(max_iterations)`, so before this guard the heuristic path + /// declared a self-killing loop at the CRITICAL band. + /// + /// THIS IS THE THRESHOLD DISCRIMINATOR, moved here from the library axis when CR 121.4 struck + /// library from `cycles_to_proposer_elimination`. Life is a true elimination axis: 0 or less + /// life is an immediate state-based loss on state alone, with no intervening action required + /// — unlike an empty library, which kills only at the next DRAW ATTEMPT. + /// + /// THE `Fixed(9)` ROW IS WHAT MAKES THIS A THRESHOLD TEST rather than a test that a + /// proposer-negative axis exists at all. A "fix" that rejected any period charging the + /// proposer's life would satisfy the `Fixed(10)` assertion and still be wrong — it would + /// refuse profitable loops the proposer survives. One cycle short leaves 2 life, and that + /// must still score. + /// + /// REVERT-PROBE: delete the `cycles_to_proposer_elimination` guard arm ⇒ `Fixed(10)` falls + /// through to the scoring arm and reads `loop_shortcut_bounded_declare_progress`, so the + /// first assertion FAILS while the `Fixed(9)` row stays green — the two rows fail + /// independently, which is what makes the pair discriminating rather than redundant. #[test] fn loop_shortcut_declare_that_kills_the_proposer_on_life_is_refused() { let state = bounded_offer_with_period(10, periodic(&[], &[(P0, -2)])); assert_eq!(state.players[P0.0 as usize].life, 20); + assert!( + schema_of(&state).is_bounded(), + "REACH-GUARD: the arm under test is bounded-only; max_iterations = {}", + schema_of(&state).max_iterations + ); + assert!( + certificate_of(&state).per_cycle.is_some(), + "REACH-GUARD: a certificate with no period makes every assertion below vacuous" + ); assert_eq!( kind_of(&verdict_for(&state, &declare(IterationCount::Fixed(10)))), @@ -742,6 +803,43 @@ mod tests { ); } + /// The predicate is a MINIMUM across the surviving axes, and poison is one of them + /// (CR 704.5c: ten or more poison counters is a loss). Life is left untouched here, so the + /// ONLY binding axis is poison — a min that silently dropped it would score this offer. + #[test] + fn loop_shortcut_declare_that_poisons_the_proposer_out_is_refused() { + let mut state = bounded_offer_with_period(10, periodic(&[], &[])); + match &mut state.waiting_for { + WaitingFor::LoopShortcut { certificate, .. } => { + let period = certificate + .per_cycle + .as_mut() + .expect("bounded_offer_with_period always sets a period"); + period.delta.poison = [(P0, 1)].into_iter().collect(); + } + other => panic!("expected a LoopShortcut offer, got {other:?}"), + } + assert_eq!( + state.players[P0.0 as usize].poison_counters, 0, + "REACH-GUARD: 10 cycles at +1 poison must actually reach the CR 704.5c threshold" + ); + assert_eq!( + state.players[P0.0 as usize].life, 20, + "REACH-GUARD: life must be untouched so poison is the ONLY binding axis" + ); + + assert_eq!( + kind_of(&verdict_for(&state, &declare(IterationCount::Fixed(10)))), + "loop_shortcut_declare_eliminates_proposer", + "10 cycles put the proposer at 10 poison — a CR 704.5c loss on state alone" + ); + assert_eq!( + kind_of(&verdict_for(&state, &declare(IterationCount::Fixed(9)))), + "loop_shortcut_bounded_declare_progress", + "9 cycles leave the proposer at 9 poison — one short of lethal, so it still scores" + ); + } + /// CR 732.2a — the BOUNDED branch, both halves, on ONE schema differing only in `n`. /// /// (i) `Fixed(4)` with `max_iterations == 10` ⇒ committed progress that eliminates nobody From 1b2bf6d63fa70a71c95acc75bc59edd706ef82fe Mon Sep 17 00:00:00 2001 From: Lindsey Gray Date: Mon, 3 Aug 2026 11:00:25 -0500 Subject: [PATCH 62/62] test(ai): build the poison row's offer directly, leaving the writer census pinned MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The CR 732.2a offer-writer census (`engine/tests/integration/ loop_shortcut_offer_writer_census.rs`) walks `phase-ai/src` as well as `engine/src`, and pins `(production, in_test)` at `(22, 16)` as an INVARIANCE pin over the whole 5d U-series. The poison row added in the previous commit patched the certificate after construction: match &mut state.waiting_for { WaitingFor::LoopShortcut { certificate, .. } => { ...poison... } which the anchor counts, taking the in-test half to 17 and reddening the census. Measured `left: (22, 17)` / `right: (22, 16)`. PRODUCTION STAYED AT 22 — the benign signature. The previous commit removes an elimination axis and touches only `#[cfg(test)]` rows and doc comments, so a production move would have meant something else was wrong and would have been escalated rather than re-pinned. The fix is to remove the hit, not to adjudicate it. The row never needed to reach into a minted offer; it needed a poison delta AT CONSTRUCTION. A `periodic_poison` helper beside `periodic` supplies that, so the offer is built in one step and the census is untouched. Re-pinning would have spent an invariance guarantee that spans the U-series to buy a test-local convenience. Verified: census 2 passed / 0 failed with the pin unchanged; policy module 20 passed / 0 failed. Process note for whoever reads this next: the previous commit's gate was scoped by crate (`-p phase-ai`) and therefore could not see this failure, because the test that broke lives in `crates/engine/tests/` and reads phase-ai source from disk. Gate scope must be derived from what READS the files a change touches, not from which crate those files live in. Assisted-by: ClaudeCode:claude-opus-5 --- crates/phase-ai/src/policies/loop_shortcut.rs | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/crates/phase-ai/src/policies/loop_shortcut.rs b/crates/phase-ai/src/policies/loop_shortcut.rs index 39be774ca7..6038175d21 100644 --- a/crates/phase-ai/src/policies/loop_shortcut.rs +++ b/crates/phase-ai/src/policies/loop_shortcut.rs @@ -666,6 +666,21 @@ mod tests { } } + /// One repetition's whole-game delta on the POISON axis (CR 704.5c). Kept separate from + /// [`periodic`] so the common life/library rows stay two-argument, and so a poison row needs + /// no post-construction mutation of `waiting_for` — reaching into the offer to patch the + /// certificate would add an in-test hit to the CR 732.2a offer-writer census for no gain. + fn periodic_poison(poison: &[(PlayerId, i64)]) -> PeriodicDelta { + PeriodicDelta { + frames_per_period: 1, + delta: ResourceVector { + poison: poison.iter().copied().collect(), + ..Default::default() + }, + victim_slot: vec![], + } + } + fn stock_library(state: &mut GameState, player: PlayerId, cards: u64) { state.players[player.0 as usize].library = (0..cards).map(ObjectId).collect(); } @@ -808,17 +823,7 @@ mod tests { /// ONLY binding axis is poison — a min that silently dropped it would score this offer. #[test] fn loop_shortcut_declare_that_poisons_the_proposer_out_is_refused() { - let mut state = bounded_offer_with_period(10, periodic(&[], &[])); - match &mut state.waiting_for { - WaitingFor::LoopShortcut { certificate, .. } => { - let period = certificate - .per_cycle - .as_mut() - .expect("bounded_offer_with_period always sets a period"); - period.delta.poison = [(P0, 1)].into_iter().collect(); - } - other => panic!("expected a LoopShortcut offer, got {other:?}"), - } + let state = bounded_offer_with_period(10, periodic_poison(&[(P0, 1)])); assert_eq!( state.players[P0.0 as usize].poison_counters, 0, "REACH-GUARD: 10 cycles at +1 poison must actually reach the CR 704.5c threshold"

    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�IFbbyJ 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ùN_MxTM;Z>@mN*JaJ?Z_;yH;Bt6xy&m&BIA63-z9hJx@8 zR|w)(S}S-?ZnLk}ts!WLk^TZ8frg?~)3L9hg9-ZJ!{S5tL}KV3czoV*!y3lGoU5ga zlx6U)&RJ>ehzu3$6v)YPr5B%lY}-^K#5zpsYBllf5OGypGKY(+wpNGafFZP$4O>kk z+cndu3`M_2n8Cfwoc7fkT>7SfpePTSq0WFxbA`w?lHX<=(Kf>}K$-X8l7H9ai<&%8ViE2N;?CmW7RoBYIy{~zGK0ZsljbvS(PBm;(O{^Y zztbqtOi(;nS?B;KjX0O-eSf!#d|3}FS&a&sNPtqeWD5zkjoJ3Fj(m6r+vvB`Vh!C; z8B3_vtgW3ATCfQyC+^q@OiHmtTo<#+npp!&)*axM?8Ys0tGrXCP>=td;vk0 z%(~S+kt>Hal;G ziWR*z0Ol2wfvOagq7jt_$vW3GM*3ONyV026W{OxAQ9GJrbfu=BvG2nu;=F2Wgle?7 z8Vx?0+8~Gs*f;VD2SuU0`xH4(QFF@0QkBxixiGYJ6(g>4nZvJws|jf8%{*0)*eoRD zlG#^FJrvZ~su*uY6qEc^GY;t4$gzl%MJP2Pf?XFWwzNoc%4%k^)8uRuU>oLe9<{oN zavS&`M4zGx8e3~`)^=ZtVP>5HEl;uMMihnFtIG)3k@UR3TQa^0>r3jrXj!zmx!xM# z`&QE)#x4O(1W{6N!1*I@2*bD(jmbmWUMF~&6NgZX&Uhn&6fo1`2b|*eyNs#S8WMIb zG>#DG66V6x8gqFaH{my8`ZiZUwi=+(EUIOsjN4k4@>mt*Rm>v}gEJHtZHo#A z23_h}o23%V)}d2Yz95+JBABm{>T1E%vF%!5$Qw?0Ew)jbG96I{z_{rFRc;d#OpL2m zV+$rD{}O#ydYV+624W~zL#`Dv;xbv#bRLlcq%6CmUXwQiI<^>-MPDit<~b553Tv_Z znPwm01^2L;Qz88qPzr_PZi=ENWpd6VNjW`s2fJcHOQFVv>0u38=>jhe0KpP>lHQ!_ zR1X&mP!rk$aPPG={8s@NMEQ(pBhN>g!esyXs7dGwjwwrlC5OW!fl!1NOUgE5IJ z%1kH?1_24gKITN3(rTP6To)wFP_|4c5jGa#e*x->Fe^uv?kIh3Abc6A1#LKMWG&3q zM*{)4*lLi|vQFaO zWI~T{aLDb~j^EzrulYm4PdE<0eZXsD~jKSuna8Qz~ za~Twjtmy!9rBj@2vf_wm;7xj=$2SBtd_+ipnqamA2tX`TRY!r&M=wk_CTPqSS(T{w zhmJf-6Qd`+)e&2hX&IAqajYbT+(d6^V7#Iwqg+7vI{NTnvOJoi+u9@Ai0y!uY**@U zcw=@Qbn3CyCc-1hRV`eY>M2=+e=5|&X4iG3Sq@;u4}C}sEI^;cz}Y7tF11?~$|7;|c2#*GDPja45RVm) zzqU=95G0vX(7WPfk@mUK}d+MS3;92tSTuFOgn7XRkQ>@CbBzgql!!HVrC7!hfxYfxvld+ z4A$DwWnARiO0le6kW3}{;6hgebv!>}p+||ws|$sgU_+`>$<4C>&2&-^iP+2=HD&=T zle!jBltf!I;3CpR2NHJ@M0l!QL1&Z%gu<3e!(!Pfn<<4A92qD)WT~gv64${J#WgTA zf>YW?y;T~AtJXZ1n_l1$sb)Q#2U{&}Z>Tc>g4AVHpR7+oiV3N9N9jb3={U34dso!7 z&TVw)E!1s^GNuJ`P$KPVd}51jAk#{$-DmXCW!S`>4GkZ}CkbunzyPpcdDiAOcr4X9 zqUi98pD*a-wh+OddKKMA2zy6DK(63F)hSKjel2nw2xHHpb#M|RrKY{Du%*QHfFQ2G z5X5dU!{9C=xR;u)+?C3Dinnc~C6`s0wMye|No_E-*e%N(1{^)=r84X;oK;7)HSR+^ zwNyOXKmivi0oa!y?G0z0ji!&XuhwdDt*8JJY9EyNR5%+*tXyj%ZG0Ph-y5wH$dmu`8))c3IECWR!6&hU!Kb}PaobUbqdChgG9Pcb$@US$((#H(&pWH#yC7Hum$Ul~?PB$Psuf=VOJ zN8?ch)s4bLukx~d%W2f5dLaA2-jxcjN@$Ve+0^B%&!L(f{(%bd7^IcTp%a_Ugi}Mj z5i_RScuyp%l0FNUhcexan&zH1f?WX@N~s>W7uXz}p;~Dw);cOR$1TvE^UxK_a~6>b zI;k@Ah_Av(26bB*HcbO9+QnLT;GWqUCQWmcu7g<;f@X?TL^VsiUo#F~brfa9UUQhR zyRo@|EysFpvWEcN%qY#_%bq*3@PbFm{Hb@~g3-!H;D0 zZT>Q2_j)Rj`BZ2H-AGB#g3F{cD=Q1HH3XBLPFLXA0Pe`;TKmk^$tjaNe!tL^HsgSd z5|K&JH;EQ<5n;^SlQsmjso5*MWxy}1mV%ON4${8KqwC1NM_j^A&it-gX`u6VR$uo5 zoF4JO(x+nSc2j)Zv{f+LqA-t0~i=8 zSWyqFMP(o$tJ-AXJ+``yX=Y4V;BL=k3PiZ_C>zIEJ=vNBQdR7#B0z5tn)L+^6r2>7 zDs{RVHo(4Ma)xthgqrE22=2M6jG3LLi`!ON#Z}DH*h-lpKoJ{4ti5#96da2-b)@N$hE$VrXD+3C~F6 zzJ2V0=rm|4!r;TwVMJE;8=w6kB%rr%vi4Yf3vU;TvknT$$wYEAcq-oZ6P*P#>V>dY z(r_BdqU}a4EKrM;b09^qKwRXz<$xzpR7+FANSyi;>9s_iGGk&O-;LctN8~W+840@> zeBi9uCk_*fMEC_%YDr!#e0W4bKDUaTnl)i1BtGr-h-nZrl}3KmhbW8#t!6|!HpQv8 zp-)*eM^8Hx;0HK9HY_-vwootJF?p%lW@s8~RqwX>{k4m_?ROCNe}55ou^oEIZ&_=IMKi zc~i_vciIp@nF!;cON|S_a~x3|JB>g!3Tc+7Ylf|kZ{iLNQ5?UhWoLBz@%B~$GN~a= zv^*CLz6y72#03^uPMIQ%eY;qu%w@bap0=p6p6$o*lxg!LpP?H zKqM|7I`t5Bl|B+AYy3wsNR1B34`(n?-R3Xo-eT_vnT|JB!lDm21D?4^5sO`m(H@_I zC2;*#c?)2+3krjyYa=Z=TwMyy?lh&kQt-@;q9xm^!I*gMVcm-NU-RO65HWNyNsX$# zaoAQLJYrT^NYopllumVd z`Z*IU3Gn1bSY%#xq{v2V+6dgM`m$EGux~gh0};LfYO7Fv%D4FKp2>BH(H%G3^gU^)1lF81&j!z!|El&PE2Z-?!}% zgN9iF0}uShfLKH2F;s-oM(kBKhYDLHijWVh9wj}Ay{nnC7PN?DQ)NG{bQOFQ(WfLI ziZ5|3%Pi12VkHxk5sm305k7vmt&$_=0 zTa!)2X0soew^k%a4ce!E%(aTyuRawwuvVXFT1SSgxpcWFVE;tYlKR;WFBi-v97 zt}f^Z$E-{lq7RI^b-=aIbdC1C*LwS~G{b?GbR|iNz^6-7ZdqvBQE$tqTAU88&_QPQ zQtvCsucOpjQox>D%s7hIRj@0-B)wf&0iucBJr++X1i`M<0xc$>8CV1mh%hb+3?)QV z1GJa2aK$hd1+tFdnvd8ecY=|cTI#6F?^~!Y)`E3x6Dg!tRa*glxm79*j3VgGTAS$r z>2eWgb|Yxv42YuA1}|$rw>msqa;LEBR}><#97nYqQj^sxP4*J6iGO<^|$>2+)_cFDt!PHwvmR(dDP zm{d{)wj{N|f#OGO1LM-Y>PKFS?86ShMTdmU2njnztUGW_2PaG@~-txBH)%qR&|OrbOl`;Lsz{E>a~m43G1;XH**+c&)(_g ztfC1b?7}%!nQf|?XA8v-cUW1o2GA~w^qf4KY;ZKi$>;l^_3O9ej5qKahCyjc(}5Vs zFFQB!8gu)shx0d~_n}AzHx?WZnEg1Ad2?8UiIog?e>JE9>CqQ3A9Q(gsyrf==^mDA zB$!N2Y%yV|PMy^xI>|oFO}DJzk%r64QEm_esSF!Jn?RF&^({ULTXj0H+#vGA*DQCc zlG9=uIfv2PBc_|CJ5f!Q9;G9Oz;mtlu4z|F2dWuIZ6c|j=#D|-61sH;0#jNVCT;VV zg@QXyTi_gU%5J!W8$GfZMix1C8$3hW)4__IGMG&(#=4bFg{wufQUV4O$0SoqFm=BP}F(x>9dH?*}sw9Ke&Rvr42uNhEr7UN{?pz3d? z23G2cUvgAXe}f7d;r>UYMLbY^88&Bj;E_aOCIZkz%17&ga&VX%o!)|7%Me{xB8LsI z?oJ^UX>2pjls(L62`j5m%m^zBqSR)hNswZh5=ymzK;N@raMD9XKnU0 zfrJ&^$pWw~EL_7Ix`l>YOCj&)7Mh<197iL$PxMbI|C$))ECU3mJh!Ohiry=eD8eAV zP|)@@R)mu$S{Lfb7 z@#hLdtw1tkvo70b3YQyLO9}U5Z*We5g6C$SVPR@7+mlG6z&{nvmS7q|5JJd?=+|4& zX)nNJb)kIUv4Zn~Tn4=Z8w%uav<2n4CD_#!K|$Q*LML}xR%KUAvaU5J;jw7nM8DLe zF7Kg@At|p62z&O*Ap#flf;1c`WE!~|n?no)+iBU^yOrdQvXAJ8OdUlZ7-BhAus*D2 zvI%}$KIN)2s#sN8nOM^1rX!)|%FXtYgihWl6X1*Bq=G?QP{{RycThrxF5920G)(yr zdl5EkV=VwEYIZqiqhF#h19-etkGKf*w-u<9YfL3pDvj>kzFLLK+(-nNAqIICyb_Ww zdIjoLA~?`$S)PJq6PzlJk;Q@ejMz8L>TKP%N_E77+_TPdh!?CU#fCQx=X&yUn>4MA z3kg(rl*h!Y4DPVaNFi&zJ?LB0GtgYa5s$Z^RfWa}I$5Le*p|G71{E!9Wknhqt7GAK z_tl)KZlom+Agv`Nrs(K`04GQl!kSMt#G0ya+bXNI*@B2;!_-*#=wT1lYhB2z#wc+} z>pn#+up>dLuTD_bfQs$ZWf)`9Hfbu$4MT88SFxtNH7w@vu2^HM-zVU}WS33~OVm5G z*$KNwi^evDX}8)8$Jix7x!LhEqaJ(%tY&x2= zYT6*NrKULt!^vk4`#Z^!L7rmKHJzF}6$vv0;d@-O%mN}w%!cStf{RUD$W!lYtgPwH zFd7TLa&U&Sg#b!hN&hn<0w7ECLixV0Q1;cRHTpv6j$%1IqomomN~=!tyZzm|t;onu z5)a=|1qZ4%Y|67k-W1jnSze45;MNkqB$zV|2B#EpO4RuWB^dW|SQS7~q`h>hui9h;znKMO>)EvaT}_O0C`Ys&s^m>n7V^%#?Ov2fsyv zIA9{;sDf-)PyzSooHN0W_)NvID2zwXDT8TNwVS-lx@7ya%d<3rWyPFZN?6{e=$B+xn_NAX7&Q5U&shvd}UIMq4s0 zwB&^pa;3n~l1A1nj5#^9q$St0NrlaJ29dsp#)TJW(qomZCCHXxJ$u?=BhV3mUtd~8 znaNi=hP1n7*wWw`*z3uRJoc_0By&e=dSx&5-d>y$d+rFiWh2)7s>B=FjYeN?5A)V6 zLLYn~8J68xv=#)!9^eSjtxTon>2xjIm$sLh8{Vci<9;6KKxLfT zMoJ+DJ;HujWkd(wY9e>%sk#=pTsqsN7dXki>T9eHLOorsUFe{F4OVuz7zY4A88-Sz zBInk{)Kv`JjY{557rL)`%fYspq;T9dqQr<66$_g+dDpcKp$X2Rclxqefi>hq7o{+_ z3*gLtRBFVZt5X|`MNR1PezHZAhm5f50}4&OPYoW`KrJ!QW2 zJj7*#J_p!5TA2xuSOKiRoRNgRBXJy%-9w3dQ25)2EdrWmr=pKF=do5sbpFX<-A=Py%nE32ty$N4J9F zJe40!FWJ(LeGH@~wr$x+5VIl(q)n-eZN;#vU z|6|arA+4lSsvMs=dYD=Ex523yd_?YB3xjin#F=62v3{`Evo6O z`ItmWS6)4$v_6Naf}|Cocgt{Eg=t&}h`k?%l@TJ9TgTA`@g_^@b+%bsbTmyER(-T{ zh*~(u2aZ}0Q-Yf=!r9wp;Q@1TAZENkg{2^J8A}=GXx!yggbjfUiOlalq%(=U9`J-T zr>!;SG9+jm-Rg>nU%=qnOJ5dO&Ji%8LZ?$|_@n!jXm-}bv5Qt*qfs5vEtob3FBG%U zmyKhISd$cpaB!?qP1i>ptD7j5#xY>e0J;d|7IRK^OBCI)&q&#OS@k%b_D8RD+%<@Pa#R^s@HNL$96UJ@5Dsc;m`*1@K-7_8l(0)s+7z5!I@s@R0*h< z&NtRd3RyWaN_1MQR;hqN=)=afzZ=*Yh%lbUXo+a)P$k4bsOeU0wpYUjT^>0;+M+6r zG12m?291Q1tkbEx*3ciQMGEAg3P)%fJDRgo%ceS}9@S9bHB{YMH{x=OIPD5G4SVo% zaxJa6unZuSLVn7FjwmaYT%zAPv|~>A=~Z=d0FQuIrUtMy$d9?=*7O@l(3^x~SQTB^ zrkV&a>b6z`fFsqFv09BZ#vEKsFMAe%0!O)P(e99j%hXnsx3E=O+p@EY{G9LL2J6_8 zJ5&1{anxEJL1P2N1y|*&g*hMl7WtnV>HQRx9Z`r0MU@U%y@PI9u}+Dirv|@|w<)f( zzKZB1M976+rX@3M;xi@ODvmr3qa0;glIyLdUG%ocZ6GyQX-vyZ$|F$?@ZzN#CAfG1 zFiaOw74>+Bk$p%xeIOA~U7g;=C5W}@S}#L)r3dQ$9=Qy}TC3H_XPN4^sJzz(=To&N z>vVN0jaks*X)V{14%->Z(b6tBkzs~wI){-%#5*HC?snubeb5=B&IE?e8!8yM&YIN` zpBorU$grLr8Z>Ue0$v01CX$I*bfD>HY!q81yJ})eU^eA5I4%HF!whoM9l_xBu#p`)1*To zdC^%){Yi9}GH%_|vfVZ*Xzz2|JC}?56jOZkS1gR~*);26lB~4A?h%902U_kU7 zh=4mMh+!GFLUKMqT_M}GnBJMDbToGO5c}9JX&HKY)@U*_$vf2?3b`m3#MrGD);YtV zi{KMycOS4IcZYs>Z_zj>62wSPX@ePVL6nI$YfinYP|PrMj9|9qQ=X-SLie9_T69Fo z5jzWwZp(y2DT^sKJ;OgXI~NfA-MLdB~fQ@93-lk(lFPtuZ!VhoMY zS`k6xBz++7j8M#Gg~}X@>Yh>SarU$)5{`DmB1DjQ_232(_g|r>uB*;k zkTA2ZhFQH@;wg#MX%;VD9mjB%!m`-yH5`z9RnbSWw1eur#K?HiThJTRIC~zGno26% zsb?o|;L)rZd7?roNao2QjP+!q2hSm^Dh8Rwxg49dYf708f29JQuzFGV!XQs)u~4it z7du1U{#@2}{NIhRmNYTB&M13WS1nK-N!aJ`bqs+bv4_y=5hQbW;8rG~i@dB6*P<{^ zU7sQhKJU&Ua5C&-E0D-xj%FK7l!?{hrshF}3n3$DM7}GJ7a>MEUSQ&OKMSE~EHtZu zQkVEOQUwvuTsFA^n9r_JvTZI#Q8b#<%r@DF3bkn9`W5r_wkDL|oVO>@oaihR zWa6-E=`i@GE{?Wsg z647%Tdsy!%$BrQFY1%iSjcPaeNRF9>Cq5V25F!F4i2%<6ib`q*?VRSC04bM-r-wI| zL=F|f0es)a2x&oWh;4g^>FmoGs$-n%4Shfg0Z}{j_Pef9CttdUsO8HPrZ!YifTqLg zT(z-4VfL`gaf-?)Og+f3C{=IASNh}0ZB;EJhfNcooNMJyrCFWZ1M7ZnBi=xOk=WO`i7&45Uze5lha zKy{q09wZYh^3kql=ZnSTQT&ozax>P1F=*YvNG8AxXjc!*SCNU7RHWu)!JI~7KJ zHQ?-4SW$?jD`IgrlhOt5SQQ-p^a^(`Z|bZ?$eSznZp0nbqun%s@Rj70tF{zp!%X`_ zX)O)ilv!wnRV);>3Chy5s|B@*?SU2if;hdz#w$_0upsZ|T-x~&wRl4;O5wnLmcyDY zw7d;x>q2-nx4hD}@gl&XX570_j{&7Pj+z=vHbr;AG_C|wWMmMMLKMK2#7(sZQ`F@& zC2LzCHKbo7>_QtnZAeYSWtBSn+~lSOIV6g|0O2v1=GrqljS=y*aiEy3Ty=$K0`!`h z4&Qmf0GhaH6mP^QW#y$E6a!}jol1l!n#=(;BfyjUPVK|+f}X3Jv0>)`_)?STTJ**+ z1>@YD#?5B>#M5w_f>}gNR1H~Vl$;WDYqM=mXV7bo+Z2p4=)pSJqhly42ez6XSFLMn z`mGL{df=l+l_*!bZhoRDj;2=ZEy>Cnrp2u$M#z&oR&c0Bq1~Cwa#Pw6Ye0YY@KVu> zrVCPbHqiAL1}$2-1r!bm8Vlh#N|AKkFgn42V$h&YV!Y*h0#BZ3vw3uZ8?`!}qqGaD zXupo}mN+2YKfbt}=W~2>aXe-_6C*BhLVA3DK2I;dd03B6#d+#EkFH;yojOWtJhf1|KTqfRaliL7^J-78U(NgTbky@F zFZz0Yem?8vWA5)+Z?7-6jo9CxpWVM{@b!Wp)}QLhw|eZ|1{5!>gn0#gL!_`4`2M~$=Tzhes+3!es*#+j_1WEM~@y~9@V42HGlWF z=15-IJU==+J(B1C>F-bf>Fo6K?2q&G`VtqUdNXT7`r zeDC4eka_f=p5C7q|M%Ic1U3IL`{PTQBnL;duO7{lliS?TzI=T7`M%qGhq*t`zq$II z`O@6GUJM-dn{|A0 zxgY*B>+10CPgp?r{_X7Xc9>&#hslW-)954_w#yrc{11WJlQ3q zi_7EF!&ABU%k%oD`Gl`@{qDc{f6q>@to)w-;U7M^_vk^rvCf{q>ro%p`}3PCm%P&_ zY(0|)$-Z$lYCnUkSGq5?f3|JdZhcYr-ofJi%cnBiPA@Lc>+$K!Uv#UN{Q=H>`>oy8 z!0ylY=AR~)z4z<0KkYKkdtE2Y|4;7yJ2U2`|hu44eu@Srr+bJmuKfs?!9b%U*G8SbNb^sMP7JNH?|1b44#`h z-@S%g;|n3jt*(uAhUGx|R!hhXxVi+R0YSq!anU*fAD!24Prf0ns@&3coD?I<7k+jJ zgGZEkf#9ngy?AON3Z_}pyLZdh`ntRJzKQ2H?K?zfKc<}km_TR0`;&WnT6}ZS&mP^}z&|@Vku&J~ z_U@}->V*yR#bfoOj-rnK@)qmtjUuQ|uBZF;tbPCC(NAf_VbOniwe#I^)xTn%AMW#` zp5AYD2E6AK;kBctmqkmim^^Du3UgxsS5SD0qm({jtmuuO!QaA%e`IkJ&cUA=JDODLr5Gx-CxnVy@$p`U)1^V z?Ecy1gV!x(y|;kri%IS74uMj*TcG6MB2YTa>f4jvSx+vG`q{%qxG&4==<@7(4SXVl z@7LqgBXe|eya<*)yOi2toA-}TPkH)hYi9@ZbR1n=&PRu{;q1|)GZxIz$=SucIQpIZ z{U=A?KA7k8=yykC5D(^2eaQRe8vOeDB(Jo`llzp%-yFs_0_ijjw=(dI6>acT6@cY=}URguQio_ zb#^gdHkEIy88P;kvRrSJi}vk2v;AH_%J07WQLTWN2L8V}Y;G?^|L=B@-225T^YnuT zLO;mz8=#dJ6;sBYlJM_e{t3o#2~*Oy>BmSo*S4!~rs+7?tBaUlHQOPg;LQ2plN z@#)#)i=%(2=YQG_xHl|2+1HDrzB)VabGHX?1W`Alr^BLo8Yk@^yiP3!>L?zl8nAr?O$+zbbnlQ5xUN<>~spF|+^Y z?@zy$<#&}+jPv@fB+2}7JspR|^K`?1!$9Zh-8~=deE+8Z#d-bq4U^!jllE16`rDm4 zcls8UhWCEZKe~MUm0#xGYtEhz^|fCTLCYKdyvp|Q8d1mRXOEs-{qp5?7B=t~e*5eC z&0XF*L7z9^fi2pQ|5d=n)ULVb$0$e zVb}+2-MwBth^6>iWvIJVOkWZ~eRX*_g?_ji(&xWDO4@!JOa0l=jq~Qe{`3D37JZl_ z=f_cmO0i+1f(k9bDU5S#2B8>iAGRb@(p_UFo3KW2N{jo$u;O*NpiAmBf*IqWhY8rt zVNU=T1CObe9QKJp!yUBE>Nkp+zPg;J7svJV=&O2q|MBtZ@!P~ruLe@xx%%`k_2HxA zbI#MxPvpXPC`8%26{75G7NV|`V&;CmWQ~4uwAaE-c> zBpfsmnAS(v7n08O^`CxEQhn&m$*(_ou4C9{KYKVYjvk%QNA-M;PYDcHno$ESxsyEr<&{PcgmaXfdog4MsBJ^oCd z=xf%i_H6sb{`svd|7nl$jK%i&?D2)@SMe8fyfpL@fCC4s?9|Ugpp8K!W|leMisysP@a_Kh5jIfJ;57=e1wX^WzKdZp?Ljdh@h>cITF| z%Xs$7JU#R8{WJ6N7pLPl>u|2VpSJ1Sh0*d+^NY#EA7AhJ@+>~%dg#?+`h}p5u4fk` zUReyic@X}!6$PK4%D04guYa(9ck?}c-wXV?Y)D@oHl9}o!yjqH`m$*6@x{FO=JLGu zKY~}DmmhcB{gP53Ur%tayoY~(OsG>&zB+ESpzeM5>iy!sa}obN^=UtbfZ{JN1`$7w z_}hk@QpaDV5Px@MB;iBn-n5P!!wayHn0!y54pOG}R#S9K$YP+bsJvZ6~3 zi0B2;42{^#kCxQT3r%x3QVeetfB*eFuO~;JJ$f`Rk1yw4L+=+k46j+T{Kct2^d25^ z;rCXy+yNfpC6tI~L7q%`UF-bfY`**RFTeZQ(J%gksP<}&T<4HC zlFCny{&C%GTgjl~i=)Y39yuCRhUzEqesdq48_{%LPcPQl`NQj7<@z`E(WB>oc=1iW znpn@D#W&H(B7*bUOG&!iuNl04&9va{?^S)^|GYbt>5Dn@C;LOLw$$4xPS4J;=bq#p zD(3RWUeXGE>8p6VlY#xP9-tw@TN(hv76v7S5K;A?rF3i!)$X0AGZ>DSK^MtVX8(ADz$yyjC zCX2y?b^w4E&Z*ebxYB&SlS*^G!iT-Bn&fu%i zMdr!7s;Wk6W&~|LT5IdgdM&c-e>*SwW0`;-CewQ<#P|G3WfFgJ{`h$OfE||G@LJMG zeEjH-6SUT`;J1#(+3Ekdyq?VUwmtOy=Xbw9{m1=nzCC+dIWiCHuEPZQDlzBhXAd9M^WzIq7&>`y^9;HTVfLH$|IEI5ly8*CzGZf@&)6Gj z#PfyHX9WfhBm?dcc?BxB{~IBt2d_A4HGlKg@*Ou0k#}_T{AR5S(P%n8efB`U?KMe1 zpJR6Z$K_}HN>U%#*ZA?BTX)sVxNX_KeW3Z=ExnF##jDdfZBdCVMGcRo0JMRUOH;;9 zd`FBi;y(Aj(>b$j)iG9;8j9&SnP$|>bc&^q*z;ECpQG#I(p23QRNs);UEQkG(~5oK zJ#617o%`)^yF7n(z&~Z@$NNKx-aIRAl#UvzxnLq zB{CORptNf!^HDv0a&-FmVS|mlp31^}di3=z7ud(jUIF~!Gi>Gy=*-~P?nL&yKGB|j z_#Mx-i=+APkLwBTbw1?j-@o{6o)y?Q`uf3qvMVqjptbnt!~0+o|CB|(B8$B3L^?<> zT>OTcd!9x2)sDKZc8TY78NPedEcESQbng-#`Kx+yxnX(Zr>yp;toEm@R&M9!#{G(v z<~a=RQ|`$v0E}lA+K*`(zh&p`uPC|yIH}GbB)a*_EfLL~bNvrQmwqdW%6Fg<+`Fu%<;I9U1{%WAYfuWae{n^oVmIXiWd-JIO zwR4Q8d{S++3QP>4@uE|mtvz&pW4yi9)14XqiFo6ra$)t>szO){|g%A zs~+o%GNn(S?KO1deQT1wy0nvH4`EIG_QZ_?QTuE&rc~O`>1N5{1C(~MHOXi_FzOOp zw1Cg+P_gUfa(B}%oFPh&DPv!R=NbOrPGuXd%5$uwdu+j^H!AJ?qW5`vd4AmGWL(E0 zuKLzG^Y5s0|Jr4qJBoCL*DUjVeO@0vI+?duS!A9+jYAGShJ$vB6fCbfzds^kn^pv1-*8Ypmru z$JxNiH7J{1^}&@;gZlu-SW_^__Tqm!lim3Bwpm&1&m{|AeOn&_Ir{sv zb7_~o(>?cZ{`~cKKRfztjH5sQ{JW#G^P@li@;ecYW4Dz>en^LR=k4h6>B+pf*fq*4 z{l$x?rXR=mA6#;khiB(g{`@`cx345r9w>v4&d`%8PX#Xr1I%HB8QuqEfDG~Sk36aS0!^aQr{Vcym zx&CT%f2LG_t>b$et?q*x85!fpz!)^(ZR?A1I3+I?l5HheGh4W;G=Fl*gwm9Sq~o>r zs#WYky-D4LX_{DpuWD8qW~i0$T&~Wk7DrdXu9BKJvAOFj@9#sC%$IsNcS}&((M_--RKhg!f1vV_dx)m*ala=5J2Pp2mv{~^}cgv}=OjC9SH?!$2mlxf#?^HK9 z`;X&(^u;`ReE-fuQ9lZ8`@5HJAJr!Zrv{vSPEKyvhf-QpzxzA&yIaK4K3vuI%f}BN zeI~zpJ|ehLB0Ovl_tfw1y(BJp`QQ&O-1+VtIm~jR?ZKj zeAJDd0|~iQXB=ZTli#q=`el9cI*vClDOBIBaO!IdX=W7itR~&UGo)4Jd~4pO>Ggnc z6Kd+oxT*BS2E=zUnRRNk8me)6#HM9f)wZRfMsr5_V!di9Of{Rf%Q@StqsA2da3j~D z3jH_V{Zu9Pr8HQSHoGgC^DB;2V%LTf#3)~_R@H{6M#(KDzv>)tl9Ef#OdnJ*je{d+ zRf8XDjaq#ht1iPs%PX!iN>VkKsJt;+HJ_KNvHRkRUpa86)pT3)s4B#!mG8Bwrc+Z! z_u7l?$#&2(wYl0tC@M@7mG`57W|=(3V0xUk6|UA+h%wHnrfEz0m8Yt`Yc-5VKO@?l zq)VvvswOWrg09LBw^XrZs$!Nc#+zmaw=kOX(MZeEFXdYdD*L`v=%GzBTe6nZYV?w` z^+_3>tn$+*Rbz-M_t1+ArqojV8U$Cpq3$Hh^j_(UcE z;EbPB`ak%Y9^J1G=gX*3&!i2{BnKNN{8fE)ekPWM&n5_;{{Hm(SGS1H*uVQ*3%>5; z?DRhW%K*U&-}0T`!bE02xc3Lmc|P^Oy5sks{$GF6A8skE|3F$9Kc)R2dD{Ov>-Qb1 z{=O$ku%~O_E=m1sYJl1A)c~{4F^;Z>|3kg_{P^<8&kx%d3+6-dklx*v`(CxboQvJ) zs#*a1l-5$M+M%48Hq~XO3H2`Z2dzy?r8ZSt(JB}_Rhea}K0;fjx-vYoNk^Mka9Ww= zhYBWPlrpp$)m9UNO>T;wb8*h(IhCI@C~}Reg|JjEz7=P5bpt7|YSUWDMpdhiDy#+$ z*?ZM}olVz}eGRWDQ@9#+8_lcWz$eFLRZG>VRDw4qHE%0r3XlYjKswJ6ln*7UTxLlKI*CwIbav_DLi=Tvz`t#s{vm}2vA z?#-mCNgT$}m-XVJzO(}Iu7C^gw!-k|ufO}`=o*u46gUjDe9Hx*(b7>Cwf5$7`Kzp7-hV<<}+6#hXpUPsoky zqfKY$Cm$H~uphy%4zkQ|*^<1azHoD|{OW2R+^B5)oCkgHyW2QWw*)Ka^H1~oht7pEz1{~ZCq;#Wce7z?A@cP2gw`+7ieb~>kd7m>nd;U8SLAb_ z#6ACNPyE}y`ZK8FxBHM+!yumbLAg5?;-6WC9|#TcVu$3xln(oQ(=xghKkzR5A>R)T z_aB4U??*-G`%qtIW4pdj1^L-S@-H9n;rJsh8{aOb)N^QgC8gWY%Ezo#nLViCn=#r) zU8U4`hw`kpZcaCf(jlO-Yn>`_6%}-xefd81B8=2+)LiXUu`Q$g$X&H$nrf}*k&V-9 zvFVsHVxUrLszWx(G*ykyYWk8(aI3_~(sr|jKAcrQ`Ml2sv)N0v`J1xn0$|R zQQeI>gVbqJ)iIXx)Omf*IZFjRSewS|UIlG}^3gU`{4A;(lzUql(-W456n#kEDVtVR zzNVlGhSIgK?(7)O7bzXvNuhSA+4*kX4OM-s%Hwn$=5T9D>9|@md(VoZuktZzRm{kW zRG`m7%am;}^^_Cs#uj^0K2@#q%0s1SqAe?gm>HIhDZ|;K;+#Qw=Rg-{qcWZ}O-Ey* zm6*ScOtsaT0K>6PRYuOL+thv3CC@~WJZDYJztqT6ItRQ{G_LB%O>67CC?_|grWmk4#4Ih>WYxUK$k5d_Eqw+cg)%uJoW*1}Ad71PQ^wlT#9zMBza4>d!MaJ>- z6M@|Q`t0%Po$JDH-SPZLt#KaC)7oi!UK>AEs1zHZab3>2d66x^@ME#Oc}bo2jg^D` z8WgF1(l!1`0qQ3Os9THAKj|93i@EkLv|(uO+7XQCYSe!oas|*}NLA)cu+{_^EQr4rI<$t1tsHNfH}pG7Fj;xfE)|f
    mfHsZCO((RI|?W;M0x%D0|W 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