From 4fd3a816eec835dd8e8e597f909d6dfbde21635c Mon Sep 17 00:00:00 2001 From: lgray Date: Sat, 8 Aug 2026 06:09:00 -0500 Subject: [PATCH 01/13] fix(ai): stop proposing strategically vacuous loop-shortcut Shortens MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `smart_shortcut_response` documented "a way to break the loop" but called `has_meaningful_priority_action` — the auto-pass gate, a strictly weaker predicate it was never meant to reuse. On a real 4p board a seat holding only a basic-land fetch answered Shorten against a mandatory trigger cascade it could not touch: rules-legal under CR 732.2b, strategically vacuous, and paid for with a real priority window. Adds a stage-2 efficacy classifier (`WindowReach`) as a fourth orthogonal axis: controller-relative confinement. A seat whose only actions write inside its own resources Accepts; a seat that can reach past them still Shortens. The wildcard arm is deliberately `MayInterfere` — the opposite of `ability_scan`'s default — because a wrong Accept can lose a game while a wrong Shorten costs a beat. Stage 1 is behaviorally unchanged. No CR licence is claimed for stage 2: CR 732.2b is unconditioned and CR 732.2c requires only a different choice. This is AI policy, and the module doc says so. Stage 2 must classify every action stage 1 counted as meaningful, and at first it did not. Stage 1's second disjunct, `has_activatable_sacrifice_for_mana`, reads the state rather than the action list, and sacrifice-for-mana activations never reach that list — so a seat whose only meaningful action was one of them cleared stage 1 and then had stage 2 fold over a list that did not contain it. A confined remainder meant Accept where the shipped predicate returned Shorten. That is not a wrong classification but an absent one, and a fail-closed wildcard cannot cover a shape it never receives. `stage_two_action_set` is that union, built from the same predicate stage 1 uses so the two cannot drift apart, and a row asserts the membership independently of any verdict so a later reclassification cannot silently retire the invariant. `smart_shortcut_response` serves two prompt shapes, so stage 2 applies at the precast-copy window as well as the ordinary one — the same question deserves the same answer — and a row drives that window through production `ai_support::candidate_actions` rather than leaving it inferred. The `predicted_winner` read is structurally absent there: that variant carries no `proposal` field. The two shortcut windows and the tests' reach-guards share one probe recipe (`ai_support::shortcut_probe`) rather than parallel copies. At base the recipe was inlined at two production sites and no test-side guard existed; early revisions of the new guards drifted, evaluating `has_meaningful_priority_action` against the caller's prompt state, whose `has_activatable_sacrifice_for_mana` rung is gated on `waiting_for == Priority`, so a guard could read false where production reads true. Sharing the recipe removes the class. The second copy is NOT unified: `game::engine::no_living_player_has_meaningful_priority_action` still inlines the same seven statements. Only the shared probe documents the mirroring; that second copy carries no back-reference, so a reader standing there has no pointer to it. Routing it through the shared probe would touch the CR 732.5 mandatory-loop firewall — both its production callers are mandatory-loop gates: the `LoopDetectionMode::On` auto-win block, whose own comment calls it the "entire soundness firewall", and `interactive_loop_bridge`'s `mandatory` binding. That is outside this change's scope, so it stays a follow-up rather than being claimed as done. The confinement guarantee is scoped to what it can actually promise — never a false `Accept` from a shape it does not recognize — and the doc now names the residual it cannot cover. A parser-swallowed clause makes an ability look strictly MORE confined, which is the direction that loses games. Measured on `Invoke Justice`, whose "distribute four +1/+1 counters … target player controls" clause is dropped with no `Unimplemented` marker, leaving a lone graveyard-recursion effect that classifies as confined. `SearchLibrary`'s arm gains a real fold-absorption witness (`Haunting Echoes`, whose `SearchLibrary { target_player: None }` sub-ability classifies confined on its own and is absorbed by its sibling graveyard-exile head). The two library rows already present are both caught by `target_player` directly and never exercised the fold they were cited for. Acceptance rides the real dump (844846 B, sha256 9843d5165cbbf7dd7bca4171c7888c190b7eba7e52a2ed095b44ff76fadd7886) driven through the production restore and `apply()`, not a synthetic scenario. Assisted-by: ClaudeCode:claude-opus-4.8 --- crates/engine/src/ai_support/mod.rs | 231 ++- .../src/ai_support/shortcut_efficacy.rs | 940 ++++++++++++ .../src/game/engine_resolution_choices.rs | 6 +- .../tests/fixtures/dina_noff_turn5_4p.json.gz | Bin 0 -> 844846 bytes crates/engine/tests/integration/main.rs | 1 + .../tests/integration/shorten_efficacy.rs | 1296 +++++++++++++++++ 6 files changed, 2444 insertions(+), 30 deletions(-) create mode 100644 crates/engine/src/ai_support/shortcut_efficacy.rs create mode 100644 crates/engine/tests/fixtures/dina_noff_turn5_4p.json.gz create mode 100644 crates/engine/tests/integration/shorten_efficacy.rs diff --git a/crates/engine/src/ai_support/mod.rs b/crates/engine/src/ai_support/mod.rs index 1f7f720675..72fde9f2d2 100644 --- a/crates/engine/src/ai_support/mod.rs +++ b/crates/engine/src/ai_support/mod.rs @@ -6,6 +6,7 @@ mod evoke; pub mod filter; mod payment_continuation; mod prospective_mana; +mod shortcut_efficacy; mod swarm; mod targeted_exchange; @@ -1352,25 +1353,48 @@ fn has_activatable_sacrifice_for_mana(state: &GameState) -> bool { && mana_actions_include_meaningful_sacrifice(state, &activatable_object_mana_actions(state)) } +/// The mana activations [`has_activatable_sacrifice_for_mana`] counts, as +/// items rather than as a yes/no. +/// +/// SINGLE AUTHORITY for the predicate. `smart_shortcut_response`'s stage 2 has +/// to classify exactly the actions stage 1 counted, and stage 1 counts these — +/// which the flat `legal_actions` list structurally cannot contain (they live +/// in `legal_actions_by_object` only). Re-testing the same shape at that call +/// site would be a parallel copy free to drift, so the call site consumes this +/// iterator and `mana_actions_include_meaningful_sacrifice` is defined as its +/// emptiness. +fn meaningful_sacrifice_mana_actions<'a>( + state: &'a GameState, + object_mana_actions: &'a [GameAction], +) -> impl Iterator { + object_mana_actions.iter().filter(move |action| { + matches!( + action, + GameAction::ActivateAbility { + source_id, + ability_index, + } if activate_ability_is_meaningful_priority(state, *source_id, *ability_index) + ) + }) +} + /// Slice-taking core of [`has_activatable_sacrifice_for_mana`]: given a /// precomputed activatable mana-action sweep, true iff any action is a /// meaningful (sacrifice-for-mana) mana activation. Extracted so /// `auto_pass_recommended` can compute the sweep ONCE and share it between the /// G1 beneficial-mana-tap hold (rung 5) and this rung-9 sac check, avoiding the /// PR #5229 double-evaluation of the mana-action sweep. +/// +/// `Iterator::any(p)` and `.filter(p).next().is_some()` agree on every input +/// (both are the first-match short-circuit over the same predicate), so this +/// re-expression leaves the loop-firewall and auto-pass answers unchanged. fn mana_actions_include_meaningful_sacrifice( state: &GameState, object_mana_actions: &[GameAction], ) -> bool { - object_mana_actions.iter().any(|action| { - matches!( - action, - GameAction::ActivateAbility { - source_id, - ability_index, - } if activate_ability_is_meaningful_priority(state, *source_id, *ability_index) - ) - }) + meaningful_sacrifice_mana_actions(state, object_mana_actions) + .next() + .is_some() } /// True when `actions` contains a priority action that materially changes the @@ -1387,24 +1411,22 @@ pub fn has_meaningful_priority_action(state: &GameState, actions: &[GameAction]) || has_activatable_sacrifice_for_mana(state) } -/// PR-7 Phase 4c (LOW-2): CR 732.2b/c + CR 104.4b — an AI opponent polled on an -/// OPTIONAL loop shortcut. The offer is raised only for optional loops the polled -/// player CAN break (a Path A optional drain, `WaitingFor::LoopShortcut`); the win -/// is a loss condition for every polled opponent (single-faller: see -/// `interactive_loop_bridge`'s Path A gate, CR 104.2a). SELF-PRESERVATION: if this -/// player has a meaningful priority action (a way to break the loop), name -/// `Shorten{0}` — the engine realizes Shorten as a real `WaitingFor::Priority` -/// window (`game::engine::apply_action`'s `RespondToShortcut(Shorten)` arm) where -/// it can act — rather than Accept its own loss. No meaningful action ⇒ Accept -/// (nothing to do). Single authority for all 3 `RespondToShortcut` emission sites -/// (engine `candidates.rs` + phase-ai `projection.rs`/`search.rs`) so the -/// self-preservation heuristic can't drift between them. Reuses the exact -/// `no_living_player_has_meaningful_priority_action` probe recipe -/// (`game::engine`), scoped to the single polled player. -pub fn smart_shortcut_response( +/// The probe [`smart_shortcut_response`] folds over: `state` re-parked at +/// `polled_player`'s priority with auto-pass cleared and layers flushed, plus +/// that state's flat priority actions. Mirrors +/// `game::engine`'s `no_living_player_has_meaningful_priority_action` recipe, +/// scoped to the single polled player. +/// +/// Public because the shortcut tests' reach-guards must assert on THIS list and +/// THIS state. A private copy of the recipe in a test silently starts measuring +/// a different action set — and a different `has_meaningful_priority_action` +/// answer, since that predicate's sacrifice-for-mana rung only fires while +/// `waiting_for` is `Priority`, which is true of the probe state and false of +/// the `RespondToShortcut` state the caller holds. +pub fn shortcut_probe( state: &GameState, polled_player: PlayerId, -) -> crate::analysis::loop_check::ShortcutResponse { +) -> (casting::PriorityCastProbe, Vec) { let mut probe_state = state.clone(); probe_state.auto_pass.clear(); probe_state.priority_player = polled_player; @@ -1414,11 +1436,166 @@ pub fn smart_shortcut_response( layers::flush_layers(&mut probe_state); let probe = casting::PriorityCastProbe::from_flushed_state(probe_state, polled_player); let actions = flat_priority_actions_with_probe(probe.state(), Some(&probe)); - if has_meaningful_priority_action(probe.state(), &actions) { + (probe, actions) +} + +/// The actions [`smart_shortcut_response`]'s stage 2 classifies, given a probe +/// state and the flat priority list stage 1 read. +/// +/// COVERAGE INVARIANT — stage 2 must classify every action stage 1 counted as +/// meaningful. The flat list does not satisfy that on its own: +/// [`has_meaningful_priority_action`] is a disjunction, and its second rung +/// ([`has_activatable_sacrifice_for_mana`]) reads `state`, not `actions`, so it +/// counts sacrifice-for-mana activations that `legal_actions` structurally omits +/// (they live in `legal_actions_by_object` only — see issue #544). Folding stage +/// 2 over the flat list alone therefore lets a seat whose ONLY meaningful action +/// is such an activation Accept BY OMISSION: an action stage 2 never sees +/// reaches no arm, so `shortcut_efficacy`'s fail-closed `_ => MayInterfere` +/// default cannot protect it, and a false Accept is the direction the module doc +/// says can lose a game. +/// +/// `activatable_object_mana_actions` is gated on `waiting_for` — the probe state +/// is re-parked at `Priority`, which is the same gate +/// `has_activatable_sacrifice_for_mana` passes there, so the two stages read the +/// SAME sweep. The added items come from +/// [`meaningful_sacrifice_mana_actions`], the single authority stage 1's rung is +/// also defined in terms of; re-testing the shape here would be a parallel copy +/// free to drift. +/// +/// Deliberately does NOT add the whole mana sweep, only the subset stage 1 +/// counts: a plain land tap is not a meaningful priority action to stage 1, and +/// widening past that would buy `Shorten`s stage 1 never asked for. +/// +/// Public for the same reason [`shortcut_probe`] is: the shortcut tests' +/// coverage row must assert on THIS set, and a private copy of the recipe would +/// silently start measuring a different one. +pub fn stage_two_action_set( + probe_state: &GameState, + flat_actions: &[GameAction], +) -> Vec { + let mana_actions = activatable_object_mana_actions(probe_state); + flat_actions + .iter() + .chain(meaningful_sacrifice_mana_actions( + probe_state, + &mana_actions, + )) + .cloned() + .collect() +} + +/// PR-7 Phase 4c (LOW-2): CR 732.2b/c + CR 104.4b — an AI opponent polled on an +/// OPTIONAL or bounded loop shortcut. The win is a loss condition for every +/// polled opponent (single-faller: see `interactive_loop_bridge`'s Path A gate, +/// CR 104.2a). +/// +/// SINGLE AUTHORITY, and what it does NOT cover. MEASURED — production (i.e. +/// non-`#[cfg(test)]`) code under `crates/*/src/` builds a +/// `GameAction::RespondToShortcut` value at exactly four places: +/// * `ai_support::candidates::candidate_actions_broad_with_probe`, +/// * `phase_ai::projection::resolve_choice`, +/// * `phase_ai::search::fallback_action` — these three are AI seats and all +/// route here, so the heuristic cannot drift between them; and +/// * `game::interaction::materialize_shortcut_reply_response`, which turns a +/// HUMAN player's submitted `InteractionShortcutReply` into the action. That +/// one is deliberately NOT covered: running a stated human choice through an +/// AI heuristic would overwrite it. It is also the only site that can emit a +/// non-zero `at_iteration` — every AI site emits `Shorten { at_iteration: 0 }`. +/// +/// `candidate_actions_broad_with_probe` additionally routes +/// `WaitingFor::RespondToPrecastCopyShortcut` here and maps the answer onto +/// `PrecastCopyShortcutResponse`, so this function answers BOTH accept-or-shorten +/// windows. That is intended: both windows ask the identical question — is a real +/// priority window worth taking here — so a seat whose only action cannot touch +/// the loop should decline both. `shorten_efficacy.rs`'s +/// `v8_precast_window_takes_the_same_efficacy_answer` measures that window rather +/// than assuming it. +/// +/// TWO STAGES. +/// +/// **Stage 1 — POSSIBILITY, byte-identical to the shipped predicate.** Reuses +/// the exact `no_living_player_has_meaningful_priority_action` probe recipe +/// (`game::engine`), scoped to the single polled player. No meaningful priority +/// action ⇒ Accept, exactly as before. `has_meaningful_priority_action` is +/// wired into the CR 732.5 NON-COMPULSION rule — +/// "No player can be forced to perform an action that would end a loop other +/// than actions called for by objects involved in the loop" — and is untouched +/// here. +/// +/// **Stage 2 — EFFICACY (AI POLICY, no CR licence claimed).** CR 732.2b grants +/// an unconditioned accept-or-shorten option and CR 732.2c requires only that a +/// shortening player's next choice be +/// *different*, which a fetchland activation already satisfies; nothing in the +/// Comprehensive Rules states an efficacy criterion. This stage is therefore +/// policy, and it declines to burn a real priority window on a response that +/// cannot change the outcome: +/// - arm (A): the offer's own predicted result already crowns this seat, so +/// shortening moves the game away from a win it already holds; +/// - arm (B): every action stage 1 counted as meaningful is confined to this +/// seat's own resources (`shortcut_efficacy::any_action_may_interfere`), so +/// no available choice touches the loop. Scoped to what stage 1 counted, not +/// to "every action this seat could take": the stage-2 set is a SUPERSET of, +/// and never smaller than, what stage 1 counted — the flat list enters +/// whole, so it also carries actions the stage-1 fold +/// (`flat_actions_have_meaningful_priority`) does not count as meaningful, +/// `PassPriority` and mana-ability activations among them, and extra items +/// can only push toward `MayInterfere`. See the coverage invariant at the +/// call below; the wider phrasing would claim coverage of shapes neither +/// stage enumerates. +/// +/// Otherwise the seat still Shortens and gets its window +/// (`game::engine::apply_action`'s `RespondToShortcut(Shorten)` arm). +/// +/// READ-ORDER: the proposal is read off the ORIGINAL `state`, before +/// [`shortcut_probe`] re-parks its clone at `Priority` — the probe state carries +/// no offer at all, so reading the crown from it would make arm (A) dead code. +pub fn smart_shortcut_response( + state: &GameState, + polled_player: PlayerId, +) -> crate::analysis::loop_check::ShortcutResponse { + // Both accept-or-shorten windows are named, so neither is answered by + // accident. The wildcard is not removable — `WaitingFor` has 128 variants and + // enumerating 126 `=> None` arms here would be noise, not a guard — and this + // two-named-arms + `_` shape is the module's existing idiom for the same + // question (`game::precast_copy_shortcut::normalize_untrusted_restore`, + // `::rekey_after_trusted_restore`). + let crowned_winner = match &state.waiting_for { + WaitingFor::RespondToShortcut { proposal, .. } => proposal.predicted_winner, + // STRUCTURAL, not an oversight: `RespondToPrecastCopyShortcut` carries no + // proposal summary and therefore no `predicted_winner` field, so the + // pre-cast route has no crown to read and arm (A) is inapplicable rather + // than skipped. Stage 1 and arm (B) do apply, and both run below. + WaitingFor::RespondToPrecastCopyShortcut { .. } => None, + _ => None, + }; + + let (probe, actions) = shortcut_probe(state, polled_player); + if !has_meaningful_priority_action(probe.state(), &actions) { + // CR 732.2c: nothing to do — agree to take the shortcut. + return crate::analysis::loop_check::ShortcutResponse::Accept; + } + + // Arm (A). Keyed on `predicted_winner`, never `proposer`: CR 732.2a lets a + // player propose a shortcut whose outcome crowns someone else, and the + // proposer is excluded from the APNAP response queue anyway. + if crowned_winner == Some(polled_player) { + return crate::analysis::loop_check::ShortcutResponse::Accept; + } + + // Arm (B). No bounded/unbounded exemption: an `IterationCount::Fixed(n)` + // offer ends the game just as surely as an `UntilLethal` one, so both + // classes take the identical rule. + // + // The fold reads [`stage_two_action_set`], never the bare flat `actions` — + // see that function for the coverage invariant and what folding over the + // flat list alone would silently Accept. + if shortcut_efficacy::any_action_may_interfere( + probe.state(), + &stage_two_action_set(probe.state(), &actions), + ) { // CR 732.2b: name an earlier stopping point — take my window instead of losing. crate::analysis::loop_check::ShortcutResponse::Shorten { at_iteration: 0 } } else { - // CR 732.2c: nothing to do — agree to take the shortcut. crate::analysis::loop_check::ShortcutResponse::Accept } } diff --git a/crates/engine/src/ai_support/shortcut_efficacy.rs b/crates/engine/src/ai_support/shortcut_efficacy.rs new file mode 100644 index 0000000000..106fb97d3a --- /dev/null +++ b/crates/engine/src/ai_support/shortcut_efficacy.rs @@ -0,0 +1,940 @@ +// engine-citation-gate: symbol anchors only +//! Controller-relative confinement of a polled player's priority window — +//! stage 2 of [`super::smart_shortcut_response`]. +//! +//! CITATION FORM: rule NUMBER only, matching the enrolled test sibling +//! `tests/integration/shorten_efficacy.rs`. The number IS the greppable +//! heading — `grep '^400.1' docs/MagicCompRules.txt` resolves any citation +//! below. `docs/MagicCompRules.txt` is gitignored and re-fetched per checkout, +//! so a line anchor pins a citation to whichever rules revision its author +//! happened to hold. +//! +//! # 1. This is AI POLICY, not a rule +//! +//! CR 732.2b grants an **unconditioned** binary +//! option: "Each other player, in turn order starting after the player who +//! suggested the shortcut, may either accept the proposed sequence, or shorten +//! it by naming a place where they will make a game choice that's different +//! than what's been proposed." There is no criterion, no outcome test, and no +//! efficacy test; the rule explicitly does not even require the shortening +//! player to say what the new choice will be. CR 732.2c adds the only +//! obligation, and it is downstream: "the player who now has priority must make +//! a different game choice than what was originally proposed for that player." +//! Activating a fetchland IS a different game choice, so a fetchland Shorten +//! fully satisfies it. +//! +//! Nothing in the Comprehensive Rules therefore grounds this module's decision. +//! It is an AI policy: a seat whose only available response cannot touch the +//! loop spends its window achieving nothing, and the engine should not burn a +//! real priority window on it. Every CR number below is cited **only for what +//! its text says**, and is used as an *input* the classifier reads (which zones +//! are per-player, who owns what) — never as a licence for the decision. +//! +//! # 2. Fail-closed direction, and why the wildcard is conservative HERE +//! +//! [`WindowReach::MayInterfere`] is the default for every unrecognized shape. +//! That direction is deliberate and is the opposite of the discipline +//! `game::ability_scan` enforces on itself. `ability_scan`'s default is +//! `Axes::NONE` ("this ability reads nothing"), which is its *unsafe* +//! direction — a newly added reader classified inert would ride a false +//! auto-resolution — so that module forbids wildcards outright. Here the +//! default says "this action might interfere", which can produce only a **false +//! `Shorten`** (the polled seat takes a priority window it did not need — it +//! costs beats, never a game) and **never a false `Accept` from a shape it does +//! not recognize** (a seat accepting its own loss while holding a real out). +//! The qualifier is load-bearing; see the residual below. An unknown nesting +//! container is interference regardless of what it nests, so there is no +//! nested-carrier set and no recursion-arm set left to drift, and no +//! hand-maintained allowlist to rot. +//! +//! That argument covers unrecognized *shapes*, and it leaves exactly one +//! residual uncovered: a clause the PARSER silently swallows never becomes a +//! shape here at all, so the ability this module is handed looks strictly MORE +//! confined than the printed card is — and narrowing apparent reach is the +//! dangerous direction, because it produces a false `Accept`, not a false +//! `Shorten`. MEASURED at this base, via `parse_oracle_text` on the verbatim +//! MTGJSON text: `Invoke Justice[0]` parses to a lone [`Effect::ChangeZone`] +//! (`origin: Graveyard`, `target: Typed{controller: You}`) with no cost, no +//! `sub_ability` and every conservative-when-present field absent, so it +//! classifies `OwnResourcesOnly` — while the card's sentence continues "then +//! distribute four +1/+1 counters among any number of creatures and/or Vehicles +//! target player controls". No widening of this module can close that: it +//! cannot read a clause that never reached it, so the residual is owned by the +//! parser, not by the classifier. +//! +//! The structural guard is the compiler, not a test: +//! [`ability_window_reach`] destructures [`AbilityDefinition`] **without +//! `..`**, and every allowlisted [`Effect`] arm is likewise `..`-free, so a new +//! field on the definition or on an allowlisted variant fails to compile until +//! it is classified. Precedent: `game::ability_scan::ability_definition_axes`. +//! +//! # 3. `analysis::ability_graph::collect_effects` is deliberately NOT used +//! +//! Two independent reasons, one mechanism. Its inner recursion ends `_ => {}` +//! (`analysis/ability_graph.rs`, whose own doc says "a wildcard covers the leaf +//! variants") — silent fail-open. And it walks **4 of `AbilityDefinition`'s 38 +//! fields** (`effect`, `sub_ability`, `else_ability`, `mode_abilities`); it +//! never inspects `cost` at all, so `Sacrifice` / `Discard` / `Mill` / +//! `ExileMaterials` costs — every one of which can reach another player's +//! resources — would be structurally invisible. + +use crate::types::ability::{ + AbilityCost, AbilityDefinition, ControllerRef, Effect, FilterProp, PlayerFilter, TargetFilter, +}; +use crate::types::actions::GameAction; +use crate::types::game_state::GameState; +use crate::types::identifiers::ObjectId; +use crate::types::zones::Zone; + +/// How far a single available action can reach, relative to the player who +/// would take it. +/// +/// A fourth axis, orthogonal to the three the engine already carries: +/// `ai_support::FlatPriorityActionClass` classifies *action shape*, +/// `game::ability_rw::WriteScope` classifies *object identity*, and +/// `game::ability_scan::Axes` classifies *AST reads*. This one classifies +/// **controller-relative confinement**. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub(crate) enum WindowReach { + /// Everything this action can touch belongs to the player taking it. + OwnResourcesOnly, + /// This action can reach something outside the actor's own resources — + /// or its shape is not recognized, which is treated identically. + MayInterfere, +} + +impl WindowReach { + fn of(own_resources_only: bool) -> Self { + if own_resources_only { + Self::OwnResourcesOnly + } else { + Self::MayInterfere + } + } + + /// Absorbing fold: one interfering component makes the whole interfering. + fn or(self, other: Self) -> Self { + match (self, other) { + (Self::OwnResourcesOnly, Self::OwnResourcesOnly) => Self::OwnResourcesOnly, + _ => Self::MayInterfere, + } + } + + fn may_interfere(self) -> bool { + matches!(self, Self::MayInterfere) + } +} + +/// True only when every object this filter can match is PROVEN to belong to the +/// acting player. +/// +/// CR 400.1: "Each player has their own library, hand, and graveyard. +/// The other zones are shared by all players." A bare `Zone` reference is +/// therefore ambiguous by rule — it can never answer *whose* zone — so the +/// player-qualified authority has to come from the filter. CR 400.3 +/// names exactly three zones ("If an object would go to any library, graveyard, +/// or hand other than its owner's, it goes to its owner's corresponding zone") +/// and CR 108.3 defines the owner, which is why owner/controller, not +/// zone, is the axis this predicate reads. +/// +/// Unproven is not owned: everything else (`Any`, `None`, `Player`, `Opponent`, +/// `ParentTarget*`, anaphors, specific ids) is `false`. +fn filter_is_actor_owned(filter: &TargetFilter) -> bool { + match filter { + TargetFilter::SelfRef | TargetFilter::Controller => true, + TargetFilter::Typed(typed) => { + typed.controller == Some(ControllerRef::You) + || typed.properties.iter().any(|prop| { + matches!( + prop, + FilterProp::Owned { + controller: ControllerRef::You + } + ) + }) + } + // An `Or` matches an object when ANY leg does, so every leg must be + // proven; an `And` matches only when ALL legs do, so one proven leg is + // enough. The emptiness guards keep a degenerate `filters: []` from + // being proven by a vacuous `all()`. + TargetFilter::Or { filters } => { + !filters.is_empty() && filters.iter().all(filter_is_actor_owned) + } + TargetFilter::And { filters } => filters.iter().any(filter_is_actor_owned), + _ => false, + } +} + +/// Reach of one effect node. Four allowlisted shapes; everything else is +/// interference by default (see the module doc, §2). +fn effect_window_reach(effect: &Effect) -> WindowReach { + match effect { + // CR 106.4: "When an effect instructs a player to add mana, + // that mana goes into a player's mana pool." Mana is a pool resource; + // producing it removes nothing from the board and answers no loop. + // `target` is the Jetfire-class recipient/count role — routing the pool + // it lands in does not make the production an interfering action. + Effect::Mana { + produced: _, + restrictions: _, + grants: _, + expiry: _, + target: _, + } => WindowReach::OwnResourcesOnly, + + // Absent `target_player` is an engine parser convention for "the + // actor's own library". It is a true description of engine behaviour + // and it is NOT the safety warrant for this arm, because it is NOT + // reliable: MEASURED over `data/card-data.json`, five abilities whose + // Oracle text explicitly names a FOREIGN library still carry a + // `SearchLibrary` node with `target_player: None` — Head Games[0], + // Jester's Mask[0], Haunting Echoes[0], Jace, Architect of Thought[2], + // and the SECOND search of Sadistic Sacrament[0] (whose first search + // does carry a `Typed` target_player). No aggregate count is claimed + // here: "how many abilities name a foreign library" has no + // scope-independent answer, and an unscoped census is worse than none. + // + // What makes the arm safe is the ABSORBING ability-level fold in + // `ability_window_reach`: a foreign-library ability carries some + // sibling effect or cost that folds to `MayInterfere` regardless of + // what `target_player` says. `Haunting Echoes[0]` is the in-suite + // witness for that fold — see + // `a_foreign_library_search_is_confined_alone_then_absorbed`. Bribery[0] + // and Praetor's Grasp[0] are also `MayInterfere`, but they witness the + // OTHER path: both carry `target_player: Typed`, so this arm catches + // them directly and the fold never has to. + // + // CR 400.1 is cited here only for why a bare `Zone::Library` + // reference is ambiguous in the first place. + Effect::SearchLibrary { + source_zones: _, + filter: _, + count: _, + reveal: _, + target_player, + selection_constraint: _, + split: _, + } => WindowReach::of(target_player.is_none()), + + // CR 400.1: a library is a per-player zone, so shuffling is + // confined exactly when the shuffled player is proven to be the actor. + Effect::Shuffle { target } => WindowReach::of(filter_is_actor_owned(target)), + + // CR 400.1 + CR 400.3 + CR 108.3: a zone change is + // confined when the moved object is proven actor-owned. The second + // disjunct is the anaphoric fetch/ramp shape — `Any` is the serde + // default, i.e. "no filter stated" ("put IT onto the battlefield") — + // which carries no player information of its own. Its player-qualified + // authority is the parent `SearchLibrary`, and the ability-level fold + // is what catches a foreign one: Bribery has the identical + // `Library -> Battlefield / Any` node and still folds to + // `MayInterfere` because its parent search carries + // `target_player: Typed{controller: Opponent}`. + Effect::ChangeZone { + origin, + destination, + target, + owner_library: _, + enter_transformed: _, + enters_under: _, + enter_tapped: _, + enters_attacking: _, + up_to: _, + enter_with_counters: _, + conditional_enter_with_counters: _, + face_down_profile: _, + enters_modified_if: _, + } => WindowReach::of( + filter_is_actor_owned(target) + || (matches!(target, TargetFilter::Any) + && *origin == Some(Zone::Library) + && *destination == Zone::Battlefield), + ), + + _ => WindowReach::MayInterfere, + } +} + +/// Reach of an activation cost. `Sacrifice` is the one cost shape that can name +/// somebody else's permanent, so it reads the same owner axis as the effects. +fn cost_window_reach(cost: &AbilityCost) -> WindowReach { + match cost { + // Tapping the source and spending mana from your own pool (CR 106.4) + // touch nothing outside the actor. + AbilityCost::Tap => WindowReach::OwnResourcesOnly, + AbilityCost::Mana { cost: _ } => WindowReach::OwnResourcesOnly, + AbilityCost::Sacrifice(sacrifice) => { + WindowReach::of(filter_is_actor_owned(&sacrifice.target)) + } + AbilityCost::Composite { costs } => costs + .iter() + .fold(WindowReach::OwnResourcesOnly, |acc, sub| { + acc.or(cost_window_reach(sub)) + }), + _ => WindowReach::MayInterfere, + } +} + +/// Reach of a whole ability, folded over every field that can carry a +/// player-qualified authority. +/// +/// The `..`-free destructure is the structural guard (module doc §2): a new +/// `AbilityDefinition` field is a compile error here until it is classified as +/// walked, conservative-when-present, or reasoned read-free. +fn ability_window_reach(def: &AbilityDefinition) -> WindowReach { + let AbilityDefinition { + // ---- walked ---- + effect, + sub_ability, + else_ability, + mode_abilities, + cost, + player_scope, + // ---- conservative-when-present: each can name a player, an object, or + // a payment outside the actor, and none is walked ---- + activator_filter, + starting_with, + target_chooser, + unless_pay, + distribute, + cost_reduction, + condition, + duration, + multi_target, + target_constraints, + modal, + repeat_for, + announced_x, + repeat_until, + optional_for, + iteration_kind_binding, + // ---- read-free ---- + // Ability class (activated/triggered/static); no player reference. + kind: _, + // Display strings only. + description: _, + target_prompt: _, + // Activation gates: when, from which zone, with which mana, and under + // which keyword this ability may be activated. NOT player-free, and the + // earlier "no player reference" claim here was simply false: an + // `ActivationRestriction::RequiresCondition` carries a `ParsedCondition` + // that can name a player, and several do ("Activate only if an opponent + // lost life this turn"). Read-free anyway, which is the load-bearing + // part: a restriction narrows WHEN an ability may be activated, never + // WHAT it reaches. It contributes no effect, no target and no payment, + // so it can only make a window rarer — never wider. + activation_restrictions: _, + activation_mana_payment_restriction: _, + activation_zone: _, + ability_tag: _, + // Booleans and scalars that gate shape, never a player or an object. + optional_targeting: _, + optional: _, + target_choice_timing: _, + min_x_value: _, + cant_be_copied: _, + forward_result: _, + target_selection_mode: _, + sub_link: _, + sibling_condition: _, + } = def; + + let mut acc = effect_window_reach(effect); + if let Some(sub) = sub_ability { + acc = acc.or(ability_window_reach(sub)); + } + if let Some(other) = else_ability { + acc = acc.or(ability_window_reach(other)); + } + for mode in mode_abilities { + acc = acc.or(ability_window_reach(mode)); + } + if let Some(cost) = cost { + acc = acc.or(cost_window_reach(cost)); + } + // CR 400.1: an untargeted mass effect scoped to anyone but the actor + // reaches another player's resources by construction. + if let Some(scope) = player_scope { + acc = acc.or(WindowReach::of(matches!(scope, PlayerFilter::Controller))); + } + + let conservative_when_present = activator_filter.is_some() + || starting_with.is_some() + || target_chooser.is_some() + || unless_pay.is_some() + || distribute.is_some() + || cost_reduction.is_some() + || condition.is_some() + || duration.is_some() + || multi_target.is_some() + || !target_constraints.is_empty() + || modal.is_some() + || repeat_for.is_some() + || announced_x.is_some() + || repeat_until.is_some() + || optional_for.is_some() + || iteration_kind_binding.is_some(); + acc.or(WindowReach::of(!conservative_when_present)) +} + +/// Fold every ability an object carries. A missing object, or one carrying no +/// abilities at all, is `MayInterfere` — the fail-closed direction, and the one +/// that keeps an empty fold from being proven confined by its identity element. +fn object_window_reach(state: &GameState, object_id: ObjectId) -> WindowReach { + let Some(object) = state.objects.get(&object_id) else { + return WindowReach::MayInterfere; + }; + if object.abilities.is_empty() { + return WindowReach::MayInterfere; + } + object + .abilities + .iter() + .fold(WindowReach::OwnResourcesOnly, |acc, ability| { + acc.or(ability_window_reach(ability)) + }) +} + +/// Reach of one indexed activated ability. An unresolvable object or an +/// out-of-range index is `MayInterfere`. +fn indexed_ability_window_reach( + state: &GameState, + source_id: ObjectId, + ability_index: usize, +) -> WindowReach { + state + .objects + .get(&source_id) + .and_then(|object| object.abilities.get(ability_index)) + .map_or(WindowReach::MayInterfere, ability_window_reach) +} + +/// Stage 2's predicate: does the polled player hold any action that could reach +/// past their own resources? +/// +/// Reads the actions stage 1 counted — no clone, no `find_legal_targets`, no +/// simulation, no graph build. The caller MUST hand it +/// `ai_support::stage_two_action_set`, not the bare flat list: stage 1 counts +/// sacrifice-for-mana activations that only ever live in +/// `legal_actions_by_object`, and an action never handed to this fold reaches no +/// arm at all, so the fail-closed `_ => MayInterfere` default cannot protect it. +/// Missing an action here is an Accept by OMISSION — the direction that loses +/// games. +/// +/// ponytail: a fetched permanent that itself enables interference is not +/// modelled. Using it needs a further priority window, and this design does NOT +/// claim one is guaranteed — CR 732.1b says only that the shortcut rules *can +/// be used* on a loop, and CR 732.2a makes proposing +/// permissive ("may suggest"). +/// Scope, stated on BOTH axes: +/// - across windows: a bounded miss — a seat's fetched answer goes unused for +/// THIS shortcut; +/// - within the window: the worst case is NOT bounded by "one shortcut". On +/// an `UntilLethal` offer the accepted sequence runs to lethal, so the +/// in-window cost of a missed out is elimination. +/// +/// Accepted because the miss requires the out to be reachable ONLY through the +/// fetched permanent; a directly-castable answer is already caught by the +/// top-level fold. Upgrade path: walk the fetched object's own abilities if a +/// real game shows a missed out. Owner: this lane, deferral burndown. +pub(crate) fn any_action_may_interfere(state: &GameState, actions: &[GameAction]) -> bool { + actions.iter().any(|action| match action { + GameAction::PassPriority => false, + GameAction::CastSpell { object_id, .. } => { + object_window_reach(state, *object_id).may_interfere() + } + GameAction::ActivateAbility { + source_id, + ability_index, + } => indexed_ability_window_reach(state, *source_id, *ability_index).may_interfere(), + // Every other priority action (play a land, declare attackers, special + // actions, ...) is unclassified and therefore interference. + _ => true, + }) +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::parser::oracle::parse_oracle_text; + + /// A card as the pipeline sees it: its REAL printed name plus its verbatim + /// Oracle text. The name is load-bearing, not decoration — `~` + /// normalization resolves a card's self-reference by matching its own name, + /// so parsing "Lightning Bolt deals 3 damage to any target." under a + /// placeholder name yields `Effect::Unimplemented` and the row would then + /// be measuring the fail-closed arm instead of the effect's own semantics + /// (MEASURED: that is exactly what an earlier revision of this table did). + struct Card { + name: &'static str, + oracle: &'static str, + } + + /// Parse verbatim Oracle text the way the card pipeline does and return the + /// ability at `index`. + fn ability(card: &Card, index: usize) -> AbilityDefinition { + let parsed = parse_oracle_text(card.oracle, card.name, &[], &[], &[]); + parsed + .abilities + .get(index) + .unwrap_or_else(|| { + panic!( + "{}[{index}] must exist; parsed {} abilities", + card.name, + parsed.abilities.len() + ) + }) + .clone() + } + + fn reach(card: &Card, index: usize) -> WindowReach { + ability_window_reach(&ability(card, index)) + } + + /// True when this ability's head is the unparsed gap node, i.e. its verdict + /// rides the fail-closed `_` arm rather than the effect's own semantics. + fn head_is_unparsed(card: &Card, index: usize) -> bool { + matches!( + ability(card, index).effect.as_ref(), + Effect::Unimplemented { .. } + ) + } + + const TERRAMORPHIC: Card = Card { + name: "Terramorphic Expanse", + oracle: "{T}, Sacrifice this land: Search your library for a basic land \ + card, put it onto the battlefield tapped, then shuffle.", + }; + const EVOLVING_WILDS: Card = Card { + name: "Evolving Wilds", + oracle: "{T}, Sacrifice this land: Search your library for a basic land \ + card, put it onto the battlefield tapped, then shuffle.", + }; + const RAMPANT_GROWTH: Card = Card { + name: "Rampant Growth", + oracle: "Search your library for a basic land card, put that card onto the battlefield \ + tapped, then shuffle.", + }; + const DEATHRITE_SHAMAN: Card = Card { + name: "Deathrite Shaman", + oracle: "{T}: Exile target land card from a graveyard. Add one mana of \ + any color.\n{B}, {T}: Exile target instant or sorcery card \ + from a graveyard. Each opponent loses 2 life.\n{G}, {T}: \ + Exile target creature card from a graveyard. You gain 2 life.", + }; + const SOUL_GUIDE_LANTERN: Card = Card { + name: "Soul-Guide Lantern", + oracle: "When this artifact enters, exile target card from a \ + graveyard.\n{T}, Sacrifice this artifact: Exile each \ + opponent's graveyard.\n{1}, {T}, Sacrifice this artifact: \ + Draw a card.", + }; + const RELIC_OF_PROGENITUS: Card = Card { + name: "Relic of Progenitus", + oracle: "{T}: Target player exiles a card from their \ + graveyard.\n{1}, Exile this artifact: Exile all graveyards. \ + Draw a card.", + }; + const SCAVENGING_OOZE: Card = Card { + name: "Scavenging Ooze", + oracle: "{G}: Exile target card from a graveyard. If it was a creature \ + card, put a +1/+1 counter on this creature and you gain 1 life.", + }; + const BRIBERY: Card = Card { + name: "Bribery", + oracle: "Search target opponent's library for a creature card and put that card onto the \ + battlefield under your control. Then that player shuffles.", + }; + const PRAETORS_GRASP: Card = Card { + name: "Praetor's Grasp", + oracle: + "Search target opponent's library for a card and exile it face down. Then that player \ + shuffles. You may play that card for as long as it remains exiled.", + }; + const HAUNTING_ECHOES: Card = Card { + name: "Haunting Echoes", + oracle: "Exile all cards from target player's graveyard other than basic land cards. For \ + each card exiled this way, search that player's library for all cards with the same name \ + as that card and exile them. Then that player shuffles.", + }; + const THOUGHTSEIZE: Card = Card { + name: "Thoughtseize", + oracle: "Target player reveals their hand. You choose a nonland card from \ + it. That player discards that card. You lose 2 life.", + }; + const DURESS: Card = Card { + name: "Duress", + oracle: "Target opponent reveals their hand. You choose a noncreature, nonland \ + card from it. That player discards that card.", + }; + const SURVEYORS_SCOPE: Card = Card { + name: "Surveyor's Scope", + oracle: + "{T}, Exile this artifact: Search your library for up to X basic land cards, where X \ + is the number of players who control at least two more lands than you. Put those \ + cards onto the battlefield, then shuffle.", + }; + const ASSASSINS_TROPHY: Card = Card { + name: "Assassin's Trophy", + oracle: "Destroy target permanent an opponent controls. Its controller \ + may search their library for a basic land card, put it onto \ + the battlefield, then shuffle.", + }; + const LIGHTNING_BOLT: Card = Card { + name: "Lightning Bolt", + oracle: "Lightning Bolt deals 3 damage to any target.", + }; + const WRATH_OF_GOD: Card = Card { + name: "Wrath of God", + oracle: "Destroy all creatures. They can't be regenerated.", + }; + const NATURALIZE: Card = Card { + name: "Naturalize", + oracle: "Destroy target artifact or enchantment.", + }; + const DIVINATION: Card = Card { + name: "Divination", + oracle: "Draw two cards.", + }; + const PATH_TO_EXILE: Card = Card { + name: "Path to Exile", + oracle: "Exile target creature. Its controller may search their library for a basic land \ + card, put that card onto the battlefield tapped, then shuffle.", + }; + + /// V8 — the classifier is correct across the whole class, in BOTH + /// directions. Acceptance (a) must be confined; every acceptance-(b) + /// interaction, the graveyard-hate class the origin-keyed predecessor rule + /// wrongly confined, the foreign-library and foreign-hand analogues, and + /// the hostile pair must all be interference. + /// + /// Revert-probe: deleting any allowlisted arm flips its acceptance-(a) rows + /// to `MayInterfere`; trivializing `filter_is_actor_owned` to `true` flips + /// the `Deathrite Shaman[0]` row to `OwnResourcesOnly`. + #[test] + fn window_reach_matches_the_measured_class_table() { + let confined: &[(&Card, usize)] = &[ + (&TERRAMORPHIC, 0), + (&EVOLVING_WILDS, 0), + (&RAMPANT_GROWTH, 0), + // Surveyor's Scope is deliberately NOT here — it is the fetch + // class's fail-closed member and gets its own row below, because + // its verdict rides its `Unimplemented` head and its + // non-allowlisted `Exile` cost rather than the classifier's + // hostile-detection logic. + ]; + let interfering: &[(&Card, usize)] = &[ + // acceptance (b) — real interaction must keep Shortening + (&LIGHTNING_BOLT, 0), + (&WRATH_OF_GOD, 0), + (&NATURALIZE, 0), + (&DIVINATION, 0), + (&PATH_TO_EXILE, 0), + // the B1 defect class: a graveyard is a per-player zone (CR 400.1) + // and none of these filters proves whose + (&DEATHRITE_SHAMAN, 0), + (&DEATHRITE_SHAMAN, 1), + (&SOUL_GUIDE_LANTERN, 0), + (&RELIC_OF_PROGENITUS, 1), + (&SCAVENGING_OOZE, 0), + // Library analogue — caught by `SearchLibrary.target_player` + (&BRIBERY, 0), + (&PRAETORS_GRASP, 0), + // Library analogue caught by the ABSORBING FOLD instead: its + // search node carries `target_player: None` and is confined on its + // own, so neither row above covers this path. The premise that + // makes it a fold witness is pinned separately by + // `a_foreign_library_search_is_confined_alone_then_absorbed`. + (&HAUNTING_ECHOES, 0), + // Hand analogue — these do not ride `ChangeZone` at all; they fall + // to the fail-closed default + (&THOUGHTSEIZE, 0), + (&DURESS, 0), + // hostile — a parsed removal spell that names an opponent's + // permanent explicitly + (&ASSASSINS_TROPHY, 0), + ]; + + for (card, index) in confined { + let name = card.name; + assert!( + !head_is_unparsed(card, *index), + "VACUITY GUARD: {name}[{index}] must PARSE — a confined verdict on an \ + Effect::Unimplemented head would be impossible, so this guard only ever \ + fires on a broken fixture" + ); + assert_eq!( + reach(card, *index), + WindowReach::OwnResourcesOnly, + "{name}[{index}] is a self-contained fetch: it must NOT buy a priority window" + ); + } + for (card, index) in interfering { + let name = card.name; + // The load-bearing anti-vacuity guard. Every row here must reach + // MayInterfere through the classifier's own logic on a PARSED + // effect. Without this, a row whose Oracle text merely failed to + // parse would sit in the table looking like hostile-detection + // coverage while actually exercising only the fail-closed arm — + // and the whole parsed-hostile branch could then be deleted with + // the suite still green. (MEASURED: `Lightning Bolt` did exactly + // this in an earlier revision, because it was parsed under a + // placeholder card name and its self-reference never resolved.) + assert!( + !head_is_unparsed(card, *index), + "VACUITY GUARD: {name}[{index}] rides the Effect::Unimplemented fail-closed \ + arm, so it is NOT a witness for parsed-hostile detection" + ); + assert_eq!( + reach(card, *index), + WindowReach::MayInterfere, + "{name}[{index}] can reach past its controller's own resources" + ); + } + } + + /// The `SearchLibrary` arm's safety warrant is the ABSORBING fold, not the + /// arm itself — and the two library rows in the table above do NOT witness + /// it: `Bribery[0]` and `Praetor's Grasp[0]` each carry + /// `target_player: Typed{controller: Opponent}`, so the arm catches them + /// directly and the fold is never asked to do anything. This test pins the + /// path they miss, on one of the five abilities the arm's own comment names + /// as foreign-library-with-`target_player: None`. + /// + /// MEASURED at this base: `Haunting Echoes[0]` searches "that player's + /// library" — FOREIGN — yet its `sub_ability` heads + /// `SearchLibrary { target_player: None }`, so that node ALONE classifies + /// `OwnResourcesOnly`. What makes the ability interference is its sibling + /// head, `ChangeZoneAll` (graveyard exile, not an allowlisted effect). + /// + /// The two assertions name the fail-open node and its absorber; the + /// composed verdict is the `HAUNTING_ECHOES` row in the interfering table + /// above, so no assertion here duplicates one there. + /// + /// Read the split correctly: MEASURED, that table row's verdict is carried + /// ENTIRELY by the `ChangeZoneAll` head — the ability has no cost, no + /// `player_scope` and no conservative-when-present field, so dropping the + /// fold's `sub_ability` leg leaves it `MayInterfere` unchanged. The reason is + /// specific to THIS fixture and does NOT generalize: in + /// `ability_window_reach` the head is the only term that is not optional, so + /// when the absorber IS the head, there is no leg the fold could lose that + /// would carry it away. Do NOT read that as "an absorbed verdict can never + /// flip" — when the absorbers sit on OPTIONAL legs, the verdict flips as soon + /// as those legs go. MEASURED at this base by fresh `parse_oracle_text` on + /// `Jace, Architect of Thought[2]`, another of the five abilities the + /// `SearchLibrary` arm's own comment names: its head is + /// `SearchLibrary { target_player: None }` — `OwnResourcesOnly` — and all + /// THREE of its absorbers are optional legs: `cost: Loyalty(-8)` (the + /// `cost_window_reach` wildcard), a `sub_ability` heading + /// `ChangeZone { Library -> Exile, target: Any }`, and `player_scope: All`. + /// Dropping the `sub_ability` and `cost` legs together still measures + /// `MayInterfere`, because `player_scope` alone still absorbs; dropping all + /// three measures `OwnResourcesOnly`. That card is NOT a fixture in this + /// suite, so nothing here pins it — it is cited to bound the claim above, not + /// as coverage. What remains lockable on Haunting Echoes is therefore the + /// premise, and the first assertion is what locks it. MEASURED: closing the + /// `SearchLibrary` arm (`WindowReach::of(target_player.is_none())` to a bare + /// `MayInterfere`) flips that assertion. It cannot flip `Bribery[0]` or + /// `Praetor's Grasp[0]` — DERIVED, not measured: closing the arm can only + /// move a verdict toward `MayInterfere`, and both are already there. + #[test] + fn a_foreign_library_search_is_confined_alone_then_absorbed() { + let echoes = ability(&HAUNTING_ECHOES, 0); + let search = echoes + .sub_ability + .as_ref() + .expect("PREMISE: Haunting Echoes[0] carries the library search as its sub_ability"); + assert_eq!( + effect_window_reach(&search.effect), + WindowReach::OwnResourcesOnly, + "PREMISE: the foreign-library search must still look CONFINED on its own — that is \ + the fail-open shape the fold exists to absorb. If this flips, the parser now carries \ + the foreign `target_player` and this row has silently become a second Bribery" + ); + assert_eq!( + effect_window_reach(&echoes.effect), + WindowReach::MayInterfere, + "the absorber: the sibling graveyard-exile head is what the fold ORs in" + ); + } + + /// The fetch class's ONE fail-open candidate, pinned with its mechanism + /// visible instead of hidden among the parsed rows. + /// + /// Surveyor's Scope is shaped like acceptance (a) — it searches the actor's + /// own library for the actor's own basics and shuffles the actor's own + /// library — but at this base the parser does not carry its whole sentence + /// ("where X is the number of players who control at least two more lands + /// than you"), so `abilities[0]` heads an `Effect::Unimplemented`. + /// + /// The verdict is JOINTLY determined, and the two assertions below are not + /// equally load-bearing. MEASURED at this base: the head reaches + /// `effect_window_reach`'s fail-closed `_` arm, AND the cost is + /// `Composite[Tap, Exile{filter: SelfRef}]` — `AbilityCost::Exile` is not + /// allowlisted, so `cost_window_reach` returns `MayInterfere` on its own. + /// Therefore: + /// + /// * the head assertion is the one that carries weight. If it ever flips + /// (the parser learns the sentence), this row fails LOUDLY rather than + /// silently changing which arm it exercises — the failure is the signal + /// to re-verify the verdict on the parsed AST and, if it is then + /// confined, move it into the confined table above. Do NOT delete it as + /// "redundant with the verdict": that leaves a vacuous row; + /// * the verdict assertion is DOMINATED by the cost leg — it would still + /// hold if the head parsed to a fully confined fetch, so it is NOT + /// evidence that the `_` effect arm fired. It is kept because it is the + /// class-level statement "the fetch class has no fail-open member". + /// + /// Kept OUT of the two tables deliberately: an `Unimplemented` row placed + /// among the interfering rows would look like hostile-detection coverage + /// while exercising only the fail-closed arm, which is the exact vacuity + /// the tables' guards exist to forbid. + #[test] + fn surveyors_scope_is_the_fetch_classs_fail_closed_member() { + assert!( + head_is_unparsed(&SURVEYORS_SCOPE, 0), + "PREMISE: this row exists because the head is UNPARSED at this base. If the parser \ + has learned the sentence, re-measure the parsed AST and reclassify the row \ + deliberately — do not delete this assertion to make the suite green" + ); + assert_eq!( + reach(&SURVEYORS_SCOPE, 0), + WindowReach::MayInterfere, + "the fetch class has no fail-open member: an ability the parser cannot carry must \ + never be proven confined" + ); + } + + /// V1c's premise, at AST granularity: the ONLY thing separating + /// `Deathrite Shaman[0]` from `Terramorphic Expanse[0]` is + /// `filter_is_actor_owned`. Trivializing it merges them — which is exactly + /// the defect the integration row pins on a real board. + #[test] + fn deathrite_and_terramorphic_are_separated_only_by_the_owner_axis() { + let drs = ability(&DEATHRITE_SHAMAN, 0); + let Effect::ChangeZone { target, origin, .. } = drs.effect.as_ref() else { + panic!( + "Deathrite Shaman[0] must head a ChangeZone, got {:?}", + drs.effect + ); + }; + assert_eq!( + *origin, + Some(Zone::Graveyard), + "the graveyard origin is what the refuted origin-keyed rule keyed on" + ); + assert!( + !filter_is_actor_owned(target), + "a bare graveyard-card filter names no owner (CR 400.1), so ownership is UNPROVEN — \ + this is the whole of the B1 fix" + ); + + let terramorphic = ability(&TERRAMORPHIC, 0); + let Some(AbilityCost::Composite { costs }) = terramorphic.cost.as_ref() else { + panic!("Terramorphic Expanse[0] must carry a composite cost"); + }; + assert!( + costs.iter().any( + |c| matches!(c, AbilityCost::Sacrifice(s) if filter_is_actor_owned(&s.target)) + ), + "Terramorphic sacrifices ITSELF — proven actor-owned, which is why the fix is \ + surgical rather than a blanket flip to MayInterfere" + ); + } + + /// V8c — the row that discharges B2. An unrecognized nesting container is + /// interference regardless of what it nests: every branch below is + /// individually confined, and the container still folds to `MayInterfere`. + /// + /// Revert-probe: changing `effect_window_reach`'s `_` arm to + /// `OwnResourcesOnly` flips this assertion. + #[test] + fn an_unrecognized_container_with_confined_branches_is_still_interference() { + let confined_branch = ability(&RAMPANT_GROWTH, 0); + assert_eq!( + ability_window_reach(&confined_branch), + WindowReach::OwnResourcesOnly, + "reach-guard: the branch really is confined, so the container's verdict below is \ + attributable to the container and not to its contents" + ); + + let container = Effect::ChooseOneOf { + chooser: PlayerFilter::Controller, + branches: vec![confined_branch.clone(), confined_branch], + }; + assert_eq!( + effect_window_reach(&container), + WindowReach::MayInterfere, + "an unallowlisted container is interference regardless of what it nests" + ); + + assert_eq!( + effect_window_reach(&Effect::unimplemented("test", "unparsed fragment")), + WindowReach::MayInterfere, + "an unparsed effect is the Surveyor's Scope path — never confined" + ); + } + + /// V8's hostile edges on the action fold: nothing resolvable, nothing to + /// resolve, and an index past the end are all interference. + #[test] + fn unresolvable_action_subjects_are_interference() { + let state = GameState::default(); + let missing = ObjectId(9_999_999); + assert_eq!( + object_window_reach(&state, missing), + WindowReach::MayInterfere, + "an object that is not on the board cannot be proven confined" + ); + assert_eq!( + indexed_ability_window_reach(&state, missing, 0), + WindowReach::MayInterfere, + "neither can an ability index into an object that is not on the board" + ); + assert!( + any_action_may_interfere( + &state, + &[GameAction::ActivateAbility { + source_id: missing, + ability_index: 7, + }] + ), + "an out-of-range ability index is interference, not a confined no-op" + ); + assert!( + !any_action_may_interfere(&state, &[GameAction::PassPriority]), + "reach-guard: the fold CAN return false, so the trues above are attributable" + ); + } + + /// The `Or`/`And` legs are set logic, not a coin flip, and an empty leg set + /// is never proven. + #[test] + fn composite_filters_prove_ownership_by_set_logic() { + let owned = TargetFilter::Controller; + let unowned = TargetFilter::Any; + + assert!( + !filter_is_actor_owned(&TargetFilter::Or { + filters: vec![owned.clone(), unowned.clone()], + }), + "an Or is proven only when EVERY leg is proven" + ); + assert!( + filter_is_actor_owned(&TargetFilter::Or { + filters: vec![owned.clone(), owned.clone()], + }), + "reach-guard: an all-proven Or IS proven, so the negative above is not vacuous" + ); + assert!( + filter_is_actor_owned(&TargetFilter::And { + filters: vec![owned, unowned], + }), + "an And narrows, so one proven leg suffices" + ); + assert!( + !filter_is_actor_owned(&TargetFilter::Or { filters: vec![] }), + "a degenerate empty Or must not be proven by a vacuous all()" + ); + } +} diff --git a/crates/engine/src/game/engine_resolution_choices.rs b/crates/engine/src/game/engine_resolution_choices.rs index fa08fddddc..2b930cff13 100644 --- a/crates/engine/src/game/engine_resolution_choices.rs +++ b/crates/engine/src/game/engine_resolution_choices.rs @@ -10225,8 +10225,8 @@ mod tests { /// than a stricter sentence. /// /// POPULATION IS DISCOVERED, NOT LISTED. The guard walks the crate and enforces on every file - /// carrying the opt-in marker comment, so a seventh file joining the class is covered the - /// moment it opts in, and a hardcoded list cannot drift out of sync with the class it names. + /// carrying the opt-in marker comment, so a newly enrolling file is covered the moment it opts + /// in, and a hardcoded list cannot drift out of sync with the class it names. /// A whole-crate sweep was measured and rejected as out of scope, not as unnecessary: /// `crates/engine/src` carries 216 such anchors across 61 files (`game/engine.rs` alone 29), /// ~20x this change. Regenerate that census with: @@ -10253,7 +10253,7 @@ mod tests { const TEST_MOD: &str = "#[cfg(test)]\nmod tests {"; // Enrolment floor. Not a list — a non-vacuity guard, so a broken walk or a renamed marker // reds instead of passing on an empty population. Raise it when a file joins. - const ENROLLED_FLOOR: usize = 6; + const ENROLLED_FLOOR: usize = 8; // `CR 732.2a` has no colon; `std::vec` no digit; `field:1` and `{"Life":1}` have a name or // a quote before the colon. A bare back-reference is recognized only after whitespace, a diff --git a/crates/engine/tests/fixtures/dina_noff_turn5_4p.json.gz b/crates/engine/tests/fixtures/dina_noff_turn5_4p.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..169ab59d3d71fe8d50c84547a50c17315080a58a GIT binary patch literal 844846 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

=$R^v2)IJXra#DKwZSL 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�^{LuI` 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⋙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

iHOl*u1vuvl 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

W1ntz@f zo0Zkv_3K{XQjHP=@f0!qKg{_C$LtO?RfGuMrzwf!uE(JiVjOhcyZ#o_UpPp$cc%*W zlVi4~jEN{%g;{z(2T@h2J6%IHD!6xN09m<(Ph$pV3R_0x(M~+7fs0)>bPGs9F$#!J zF(a#Fz@CmC$qbf0R8J8}g`I9#Zw9JEK2cItQNc%8Q020wKlys4(ZN}p`KAa(Hw4fW z_HCc8CisQzmPrOswRcKI;k~sGtzXX#PTM=e3cB8u$S5lY8v?}uJ>C-g`?SF{L;E?< ztCXWTZ)cHIWO1MLJ`J*RKqQxanx8f*(wsrbv1HwKc$f7FrDol1V^zrhD&B;h9cQI6 zns^_^NkdEYb7lNow~a_28I>tV>CDhz+bg2R@f<=D=66~Q!|YBtTdm2kr7p_{!lPdt zWo(NwurXXJ0zj=dn+L>cg}{!T5BrqqeY9U!->9xbPOv*Y!L;%|mHX^0^P(0cjO!Nq z3j&X}vreM$zn_*ck|-HoG=z7InyiwsBBh;HxcT?A66Yi)lc7zZq{2~?^#&V)iru5M zM*od!M}Q#;_2Hh&=*U|kH(-*8iZ`pbu*jD+)>PbF4#Z3gpxtvCPE`>?x5+zBn0F

5remfRObM7{dUP?(ZY=miNxdgx}V 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%0D{8 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 WaitingFor { + for _ in 0..cap { + match runner.state().waiting_for.clone() { + WaitingFor::Priority { .. } => { + if runner.act(GameAction::PassPriority).is_err() { + break; + } + } + WaitingFor::OrderTriggers { triggers, .. } => { + let order: Vec = (0..triggers.len()).collect(); + if runner + .act(GameAction::OrderTriggers { order }) + .or_else(|_| runner.act(GameAction::OrderTriggers { order: vec![] })) + .is_err() + { + break; + } + } + _ => break, + } + } + runner.state().waiting_for.clone() +} + +/// The exact action list `smart_shortcut_response` folds over — obtained by +/// CALLING production's recipe (`ai_support::shortcut_probe`), not by copying it. +/// A local copy would drift the moment production's recipe changed, and every +/// reach-guard in this file reads this list, so the guards would then be +/// measuring a different action set than the code under test. +fn probe_actions(state: &GameState, player: PlayerId) -> Vec { + engine::ai_support::shortcut_probe(state, player).1 +} + +/// Stage 1's verdict, evaluated on the PROBE state — which is the state +/// production evaluates it on. Evaluating it on the caller's +/// `RespondToShortcut` state instead silently drops +/// `has_meaningful_priority_action`'s sacrifice-for-mana rung, which is gated on +/// `waiting_for` being `Priority`. +fn stage_one_meaningful(state: &GameState, player: PlayerId) -> bool { + let (probe, actions) = engine::ai_support::shortcut_probe(state, player); + engine::ai_support::has_meaningful_priority_action(probe.state(), &actions) +} + +/// Which ability indices of `source` are actually enumerated at this window. +/// V1c's two reach-guards read this. +fn legal_ability_indices(state: &GameState, player: PlayerId, source: ObjectId) -> Vec { + let mut indices: Vec = probe_actions(state, player) + .iter() + .filter_map(|a| match a { + GameAction::ActivateAbility { + source_id, + ability_index, + } if *source_id == source => Some(*ability_index), + _ => None, + }) + .collect(); + indices.sort_unstable(); + indices +} + +/// The shipped `setup_3p_optional_cascade` shape (`loop_shortcut.rs`): P0 runs +/// a self-refilling mutual drain, P1's Mountain + Bolt make the loop OPTIONAL +/// so an offer is raised at all. `decorate` stages the seat under test. +fn optional_cascade(decorate: impl FnOnce(&mut GameScenario)) -> (GameRunner, ObjectId) { + 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); + scenario.add_creature_from_oracle(P0, "Test Drain Cleric", 2, 2, DRAIN_CLERIC); + scenario.add_creature_from_oracle(P0, "Test Blood Sipper", 2, 2, BLOOD_SIPPER); + scenario.add_basic_land(P1, ManaColor::Red); + scenario.add_bolt_to_hand(P1); + decorate(&mut scenario); + 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, kickoff) +} + +/// Cast the kick-off, drive to the offer, have P0 declare, then walk the APNAP +/// queue to `seat` by submitting manual Accepts for everyone ahead of it (never +/// the AI's answer — that would stop the queue). +fn respond_window_at(runner: &mut GameRunner, kickoff: ObjectId, seat: PlayerId) { + let _ = runner.cast(kickoff).resolve(); + let wf = drive_collect(runner, 500); + assert!( + matches!(wf, WaitingFor::LoopShortcut { .. }), + "reach-guard: the optional cascade must OFFER a shortcut, got {wf:?}" + ); + runner + .act(GameAction::DeclareShortcut { + count: IterationCount::UntilLethal, + template: None, + }) + .expect("the proposer declares"); + for _ in 0..8 { + match runner.state().waiting_for { + WaitingFor::RespondToShortcut { player, .. } if player == seat => return, + WaitingFor::RespondToShortcut { .. } => { + runner + .act(GameAction::RespondToShortcut { + response: ShortcutResponse::Accept, + }) + .expect("manual Accept advances the APNAP queue"); + } + _ => break, + } + } + panic!( + "reach-guard: {seat:?} must be polled; stopped at {:?}", + runner.state().waiting_for + ); +} + +// =========================================================================== +// V1b — ACCEPTANCE (a), Path A class: a fetchland no longer buys a window. +// =========================================================================== + +/// The shipped optional-cascade fixture plus exactly ONE card: a Terramorphic +/// Expanse on the polled seat's battlefield. Stage 1 still says "you have a +/// meaningful action" — a non-mana activated ability always does — and stage 2 +/// answers the question stage 1 cannot: the action reaches nothing but its own +/// controller's library, so the window would change nothing. +/// +/// MUTANTS — both flip the `Accept` assertion: +/// * DROP ⇒ `Shorten { at_iteration: 0 }` (this IS the shipped behaviour, which +/// is the defect). +/// * TRIVIALIZE arm (B) (`any_action_may_interfere ≡ true`) ⇒ `Shorten`. +/// +/// REACH-GUARDS (both are assertions): the fetchland really is enumerated, and +/// stage 1 really does return `true`. Without them an `Accept` here would be +/// indistinguishable from the empty-board stage-1 path — the vacuity that a +/// naive version of this row would ship. +#[test] +fn v1b_a_confined_fetchland_accepts_instead_of_buying_a_vacuous_window() { + let mut terramorphic = ObjectId(0); + let (mut runner, kickoff) = optional_cascade(|s| { + terramorphic = s + .add_land_from_oracle(P2, "Terramorphic Expanse", TERRAMORPHIC) + .id(); + }); + respond_window_at(&mut runner, kickoff, P2); + + let actions = probe_actions(runner.state(), P2); + assert!( + actions.contains(&GameAction::ActivateAbility { + source_id: terramorphic, + ability_index: 0, + }), + "REACH-GUARD 1: the fetchland's ability must be enumerated, otherwise this row \ + degenerates to the empty-board stage-1 path; got {actions:?}" + ); + assert!( + stage_one_meaningful(runner.state(), P2), + "REACH-GUARD 2: stage 1 (POSSIBILITY, untouched by this change) must still return \ + true — an Accept produced by stage 1 would prove nothing about stage 2" + ); + + assert_eq!( + engine::ai_support::smart_shortcut_response(runner.state(), P2), + ShortcutResponse::Accept, + "a seat whose ONLY action is a self-contained fetch has no efficacious response; \ + spending a real priority window on it changes nothing (CR 732.2c is satisfied by \ + any different choice, which is precisely why it grants no efficacy)" + ); +} + +// =========================================================================== +// V1c — B1 REGRESSION LOCK. The graveyard-hate seat still Shortens. +// =========================================================================== + +/// The one row whose sole job is pinning the owner axis. A graveyard is a +/// PER-PLAYER zone (CR 400.1) and `Zone` carries no +/// player field, so a rule keyed on `ChangeZone.origin` cannot tell "exile a +/// land card from MY graveyard" from "…from YOURS". Deathrite Shaman `[0]` +/// exiles a land card from P0's graveyard — a real interaction with another +/// player's resources — and must keep its window. +/// +/// This row's expected value (`Shorten`) IS the shipped value, so **DROP cannot +/// flip it**. Its whole discriminating power is the TRIVIALIZE arm: +/// `filter_is_actor_owned ≡ true` makes DRS `[0]` fold to `OwnResourcesOnly` +/// and the response becomes `Accept` — the row FLIPS. +/// +/// That flip only exists if the fixture leaves ability `[0]` and ONLY `[0]` +/// legal, so both constraints ship as assertions: +/// * REACH-GUARD 1 — without a land card in a graveyard, `[0]` is not +/// enumerated at all and the action list collapses to `["PassPriority"]`; +/// stage 1 returns false and the row would pass through the wrong path. +/// * REACH-GUARD 2 — with `{B}`/`{G}` available and a matching graveyard card, +/// `[1]`/`[2]` become legal. Their `LoseLife`/`GainLife` sub-effects classify +/// `MayInterfere` even under the mutant, so `any_action_may_interfere`'s +/// `.any()` absorbs the mutation and the row passes VACUOUSLY. +/// +/// The fixture denies `{B}`/`{G}` by construction (P2 controls no lands) and +/// stages no instant/sorcery/creature card in any graveyard, so `[1]` and `[2]` +/// are each blocked on two independent axes. +#[test] +fn v1c_graveyard_hate_across_a_per_player_zone_keeps_its_window() { + let mut shaman = ObjectId(0); + let (mut runner, kickoff) = optional_cascade(|s| { + // CR 302.6 (the summoning-sickness rule): `add_creature_from_oracle` + // stages a pre-existing battlefield creature, so the `{T}` cost is + // payable. + shaman = s + .add_creature_from_oracle(P2, "Deathrite Shaman", 1, 2, DEATHRITE_SHAMAN) + .id(); + // The land card sits in P0's graveyard — the ability reaches ACROSS a + // per-player zone that the AST does not player-qualify. That crossing + // is the whole of the defect this row locks. + s.add_land_to_graveyard(P0, "Test Graveyard Land"); + }); + respond_window_at(&mut runner, kickoff, P2); + + let indices = legal_ability_indices(runner.state(), P2, shaman); + assert!( + indices.contains(&0), + "REACH-GUARD 1: without a land card in a graveyard the Shaman's [0] is not enumerated \ + and this row degenerates to the stage-1 empty-action path; got {indices:?}" + ); + assert_eq!( + indices, + vec![0], + "REACH-GUARD 2: [1]/[2] must stay illegal. They classify MayInterfere even under the \ + TRIVIALIZE mutant, so leaving one legal lets .any() absorb the mutation and this row \ + passes vacuously; got {indices:?}" + ); + + assert_eq!( + engine::ai_support::smart_shortcut_response(runner.state(), P2), + ShortcutResponse::Shorten { at_iteration: 0 }, + "exiling a land card out of ANOTHER player's graveyard is real interaction — the \ + confinement predicate must require PROVEN actor ownership, not merely a zone name" + ); +} + +// =========================================================================== +// V2 / V3 — ACCEPTANCE (b) and the matched pair. +// =========================================================================== + +/// V3, both arms in one row, because neither arm alone is the discriminator. +/// The two boards are identical but for P2's holdings: +/// * `{}` ⇒ Accept, reached through stage 1 (nothing to do); +/// * `{Mountain, Lightning Bolt}` ⇒ Shorten, reached through stage 2. +/// +/// The pass ⇒ grant / respond ⇒ no-grant pair is what proves stage 2 did not +/// over-generalize into "always Accept". Sibling coverage for Wrath of God, +/// Naturalize, Divination and Path to Exile is at classifier granularity in +/// `ai_support::shortcut_efficacy`'s unit table (they are sorceries/instants +/// with no legal target on this board, so a runtime row would assert on +/// castability rather than on efficacy). +/// +/// MUTANTS: TRIVIALIZE arm (B) (`any_action_may_interfere ≡ false`, or +/// `filter_is_actor_owned ≡ true` — Bolt's `DealDamage` reaches neither, so it +/// is the whole-predicate constant that bites) flips the Bolt arm to `Accept`. +/// DROP leaves both arms at their shipped values and flips neither; that is +/// stated rather than claimed otherwise. +#[test] +fn v3_matched_pair_empty_seat_accepts_and_bolt_seat_still_shortens() { + // Arm 1 — nothing at all. + let (mut bare, bare_kickoff) = optional_cascade(|_| {}); + respond_window_at(&mut bare, bare_kickoff, P2); + let bare_actions = probe_actions(bare.state(), P2); + assert!( + !stage_one_meaningful(bare.state(), P2), + "reach-guard: this arm must resolve at STAGE 1, so it stays a control for the stage-2 \ + arm below; got {bare_actions:?}" + ); + assert_eq!( + engine::ai_support::smart_shortcut_response(bare.state(), P2), + ShortcutResponse::Accept, + "no meaningful action ⇒ Accept, unchanged from the shipped predicate" + ); + + // Arm 2 — the SAME board plus a Mountain and a Bolt. + let (mut armed, armed_kickoff) = optional_cascade(|s| { + s.add_basic_land(P2, ManaColor::Red); + s.add_bolt_to_hand(P2); + }); + respond_window_at(&mut armed, armed_kickoff, P2); + let armed_actions = probe_actions(armed.state(), P2); + assert!( + armed_actions + .iter() + .any(|a| matches!(a, GameAction::CastSpell { .. })), + "reach-guard: the Bolt must actually be castable, otherwise this arm tests the empty \ + board twice; got {armed_actions:?}" + ); + assert_eq!( + engine::ai_support::smart_shortcut_response(armed.state(), P2), + ShortcutResponse::Shorten { at_iteration: 0 }, + "ACCEPTANCE (b): a seat holding real interaction must still get its priority window — \ + this is the assertion any over-broad confinement rule destroys first" + ); +} + +// =========================================================================== +// V4 / V6 / V7 — arm (A): the crowned seat, keyed on `predicted_winner`. +// =========================================================================== + +/// CR 732.2a lets the player with priority propose a +/// shortcut whose predictable result crowns SOMEONE ELSE. This fixture is the +/// shipped `interactive_offer_separates_priority_proposer_from_predicted_winner` +/// shape: P1 proposes, P0 is the measured winner, and P1 (the proposer) is +/// excluded from the response queue, so P0 is polled. +/// +/// P0 also holds a Mountain and a Bolt — the reach-guard the measurement proved +/// load-bearing. WITHOUT them P0 has no meaningful action and Accepts via +/// stage 1, making the row vacuous; WITH them the shipped predicate returns +/// `Shorten`, i.e. the crowned player shortens its own guaranteed win. +/// +/// Three claims ride this one board: +/// * **V4** — arm (A) fires: the crowned seat Accepts. +/// * **V6** — it is keyed on `predicted_winner`, never `proposer`. The row +/// asserts `proposer != predicted_winner` and `polled == predicted_winner`, +/// so a `proposer`-keyed implementation (which passes every other row) fails +/// exactly here. +/// * **V7** — read order. Arm (A) reads the proposal off the ORIGINAL state; +/// `smart_shortcut_response` overwrites its probe clone's `waiting_for` with +/// `Priority` before enumerating. Moving that read after the clone makes +/// `crowned_winner` unconditionally `None` and this row FAILS — it is the +/// only row that can detect the mis-ordering. +/// +/// MUTANTS — both flip the `Accept` assertion: DROP ⇒ `Shorten`; TRIVIALIZE +/// arm (A) (delete the `crowned_winner` guard) ⇒ `Shorten` via arm (B), because +/// the Bolt is genuine interference. +#[test] +fn v4_the_crowned_seat_accepts_its_own_predicted_win() { + 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 Drain Cleric", 2, 2, DRAIN_CLERIC); + scenario.add_creature_from_oracle(P0, "Test Blood Sipper", 2, 2, BLOOD_SIPPER); + scenario.add_basic_land(P1, ManaColor::Red); + scenario.add_bolt_to_hand(P1); + // The reach-guard: P0 must hold a meaningful action or stage 1 answers first. + scenario.add_basic_land(P0, ManaColor::Red); + scenario.add_bolt_to_hand(P0); + let kickoff = scenario + .add_spell_to_hand_from_oracle(P1, "P0 Lifegain Kickoff", false, TARGETED_KICKOFF) + .id(); + let mut runner = scenario.build(); + runner.state_mut().loop_detection = LoopDetectionMode::Interactive; + runner.state_mut().active_player = P1; + runner.state_mut().priority_player = P1; + runner.state_mut().waiting_for = WaitingFor::Priority { player: P1 }; + + let _ = runner.cast(kickoff).target_player(P0).resolve(); + let wf = drive_collect(&mut runner, 500); + let WaitingFor::LoopShortcut { + proposer, + predicted_winner, + .. + } = wf + else { + panic!("reach-guard: P1's priority window must receive an offer, got {wf:?}"); + }; + assert_eq!( + proposer, P1, + "CR 732.2a routes the offer to the priority holder" + ); + assert_eq!( + predicted_winner, + Some(P0), + "reach-guard: the two authorities must actually DIFFER, or the winner-keyed and \ + proposer-keyed implementations are indistinguishable here" + ); + + runner + .act(GameAction::DeclareShortcut { + count: IterationCount::UntilLethal, + template: None, + }) + .expect("P1 declares"); + let WaitingFor::RespondToShortcut { + player, + ref proposal, + .. + } = runner.state().waiting_for + else { + panic!( + "reach-guard: a response window must open, got {:?}", + runner.state().waiting_for + ); + }; + assert_eq!( + player, P0, + "the proposer is excluded from its own response queue, so the crowned seat is polled" + ); + assert_ne!( + proposal.proposer, + proposal + .predicted_winner + .expect("this offer names a winner"), + "V6: the multi-authority premise — a proposer-keyed rule would read P1 here" + ); + + let actions = probe_actions(runner.state(), P0); + assert!( + stage_one_meaningful(runner.state(), P0), + "REACH-GUARD: without a meaningful action P0 would Accept via stage 1 and this row \ + would be vacuous; got {actions:?}" + ); + + assert_eq!( + engine::ai_support::smart_shortcut_response(runner.state(), P0), + ShortcutResponse::Accept, + "arm (A): the offer's predicted result already crowns this seat. CR 732.2c grants a \ + shortening player nothing but the obligation to choose differently, so shortening \ + here moves the game away from a win it already holds" + ); +} + +// =========================================================================== +// V1 / V5 — REAL 4-player board, loaded through the production restore +// chokepoint and driven through the public `apply()` boundary. +// =========================================================================== + +/// Inflate a committed dump fixture. +fn gunzip_dump(gz: &[u8]) -> 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 +} + +/// Decode AS `PersistedGameState` — the production chokepoint the server's +/// `from_persisted` and WASM's `decode_restored_game_state` both funnel +/// through — rather than decoding a bare `GameState`. +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("gameState deserializes through the production decoder") + .into_game_state() +} + +/// The LIVE-PATH board: the real 4-player Dina / Bloodthirsty Conqueror drain +/// on which the defect actually occurs, because seat P2 controls a Terramorphic +/// Expanse. +/// +/// Derived from the read-only pristine archive, and the derivation is the +/// artifact's provenance rather than a claim about it: +/// `unzip -p combofb-dumps-pristine/dina-conqueror-offers-no-ff.zip | +/// jq -c '{gameState}' | gzip -9 -n` +/// → 844846 bytes, sha256 +/// `9843d5165cbbf7dd7bca4171c7888c190b7eba7e52a2ed095b44ff76fadd7886`. +/// `gzip -n` is a no-op from a pipe but load-bearing from a file (it strips the +/// stored name and mtime), so KEEP it: a re-derivation that stages the 21 MB +/// dump through an intermediate file — the natural thing to do at that size — +/// otherwise misses the digest and presents as a corrupt artifact rather than +/// as convention drift. +fn live_path_board() -> GameState { + restore_dump(&gunzip_dump(include_bytes!( + "../fixtures/dina_noff_turn5_4p.json.gz" + ))) +} + +/// The QUIET board: the same matchup captured at a beat where NO seat holds any +/// meaningful priority action. Retained only as a negative control — see +/// `v1_control_*` for why it has no discriminating power for acceptance (a). +fn quiet_board() -> GameState { + restore_dump(&gunzip_dump(include_bytes!( + "../fixtures/dina_conqueror_4p.json.gz" + ))) +} + +fn dump_driver_forbids(a: &GameAction) -> bool { + matches!(a, GameAction::Concede { .. } | GameAction::Debug(_)) +} + +fn dump_beat_actor(state: &GameState) -> Option<(PlayerId, Vec)> { + if let Some(p) = state.waiting_for.acting_player() { + let (actions, _costs, _grouped) = engine::ai_support::legal_actions_for_viewer(state, p); + if !actions.is_empty() { + return Some((p, actions)); + } + } + for p in state.players.iter().map(|p| p.id) { + let (actions, _costs, _grouped) = engine::ai_support::legal_actions_for_viewer(state, p); + if !actions.is_empty() { + return Some((p, actions)); + } + } + None +} + +/// One beat of the drain-drive policy: at `Priority` ALWAYS pass (the mandatory +/// triggers re-trigger — that IS the loop), answer every other prompt. +fn dump_drive_one_beat(state: &mut GameState) -> Result<(), String> { + let Some((who, actions)) = dump_beat_actor(state) else { + return Err(format!("no legal actor at {:?}", state.waiting_for)); + }; + 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::PassPriority) && !dump_driver_forbids(a)) + .or_else(|| actions.iter().find(|a| !dump_driver_forbids(a))) + .cloned() + }; + let Some(action) = chosen else { + return Err(format!("empty action list at {:?}", state.waiting_for)); + }; + apply(state, who, action.clone()) + .map(|_| ()) + .map_err(|e| format!("apply err ({action:?}): {e:?}")) +} + +/// Drive real beats until the board mints a bounded offer. +fn drive_to_offer(state: &mut GameState, cap: usize) -> Option { + for beat in 0..cap { + if matches!(state.waiting_for, WaitingFor::LoopShortcut { .. }) { + return Some(beat); + } + if dump_drive_one_beat(state).is_err() { + return None; + } + } + None +} + +// NOTE: no `give_fetchland` staging helper. The live-path test drives the seat's +// OWN Terramorphic Expanse out of the restored dump (`ObjectId(203)`), so there is +// nothing to inject; a staging helper here would have made the live test synthetic +// again. `give_bolt` below survives because the positive control needs an +// interactive card the recorded board does not contain. + +/// Stage a castable Lightning Bolt in `player`'s hand, mirroring +/// `GameScenario::add_bolt_to_hand` (same `Effect::DealDamage` ability, same +/// absence of a printed mana cost) so the positive control below is the same +/// interaction the shipped fixtures use. +fn give_bolt(state: &mut GameState, player: PlayerId) -> ObjectId { + let card_id = CardId(state.next_object_id); + let id = engine::game::zones::create_object( + state, + card_id, + player, + "Lightning Bolt".to_string(), + Zone::Hand, + ); + let ability = AbilityDefinition::new( + AbilityKind::Spell, + Effect::DealDamage { + amount: QuantityExpr::Fixed { value: 3 }, + target: TargetFilter::Any, + damage_source: None, + excess: None, + }, + ); + let obj = state.objects.get_mut(&id).expect("just created"); + obj.card_types + .core_types + .push(engine::types::card_type::CoreType::Instant); + obj.base_card_types = obj.card_types.clone(); + obj.abilities = std::sync::Arc::new(vec![ability.clone()]); + obj.base_abilities = std::sync::Arc::new(vec![ability]); + state.layers_dirty = LayersDirty::full(); + id +} + +/// Declare the offer this board minted, then poll `seat` by walking the APNAP +/// queue with MANUAL Accepts (never the AI's answer, which would stop the +/// queue). Returns the state parked at `seat`'s response window. +fn declare_and_poll(state: &GameState, seat: PlayerId) -> GameState { + let WaitingFor::LoopShortcut { + proposer, + ref schema, + .. + } = state.waiting_for + else { + panic!( + "declare_and_poll expects a LoopShortcut window, got {:?}", + state.waiting_for + ); + }; + let mut s = state.clone(); + apply( + &mut s, + proposer, + GameAction::DeclareShortcut { + count: schema.iteration_count.clone(), + template: None, + }, + ) + .expect("the proposer declares its own offer"); + for _ in 0..8 { + match s.waiting_for { + WaitingFor::RespondToShortcut { player, .. } if player == seat => return s, + WaitingFor::RespondToShortcut { player, .. } => { + apply( + &mut s, + player, + GameAction::RespondToShortcut { + response: ShortcutResponse::Accept, + }, + ) + .expect("manual Accept advances the APNAP queue"); + } + _ => break, + } + } + panic!( + "reach-guard: {seat:?} must be polled; stopped at {:?}", + s.waiting_for + ); +} + +/// The non-`PassPriority` actions available to `seat`, rendered with the source +/// object's name / zone / controller so a reach-guard failure names the board +/// rather than an opaque id. +fn non_pass_actions(state: &GameState, seat: PlayerId) -> Vec { + probe_actions(state, seat) + .iter() + .filter(|a| !matches!(a, GameAction::PassPriority)) + .map(|a| match a { + GameAction::ActivateAbility { + source_id, + ability_index, + } => { + let o = state.objects.get(source_id); + format!( + "ActivateAbility({source_id:?} {:?} #{ability_index} zone={:?} controller={:?})", + o.map(|o| o.name.clone()), + o.map(|o| o.zone), + o.map(|o| o.controller) + ) + } + other => format!("{other:?}"), + }) + .collect() +} + +// =========================================================================== +// V1 / V5 — ACCEPTANCE (a) on the REAL 4-player board, LIVE PATH. +// =========================================================================== + +/// **The acceptance row.** A real 4-player Dina / Bloodthirsty Conqueror drain, +/// restored through the production chokepoint +/// (`PersistedGameState::into_game_state()`, the same path the server's +/// `from_persisted` and WASM's `decode_restored_game_state` funnel through) and +/// driven beat by beat through the public `apply()` boundary. No `GameScenario` +/// anywhere on this row: a synthetic board going green while the live 4p case +/// failed is a documented failure mode in this lane. +/// +/// The defect, on this exact board: seat P2 controls **`ObjectId(203)`, +/// "Terramorphic Expanse"**, on the battlefield. A non-mana activated ability is +/// unconditionally "meaningful" to stage 1, so the shipped one-stage predicate +/// answered `Shorten { at_iteration: 0 }` — handing P2 a real priority window +/// whose only content is cracking its own fetchland, which cannot touch the +/// drain. Stage 2 answers `Accept`. +/// +/// **V5 — bounded offers are NOT exempt.** MEASURED on this board: the offer +/// mints at beat 21 carrying `predicted_winner: None` and +/// `IterationCount::Fixed(25)`. It is the BOUNDED class, not the `UntilLethal` +/// class the synthetic rows use, and `predicted_winner: None` additionally +/// proves arm (A) cannot be what produces the `Accept` below — only arm (B) +/// can. Re-introducing an `UntilLethal`-only gate makes this row return +/// `Shorten` and fail. +/// +/// **Why the flip set is exactly {P2}, asserted rather than asserted-about.** +/// P1 and P3 are polled on the same board and hold nothing, so they answer at +/// stage 1 and are unaffected. That is the sibling control: the change is +/// surgical, not a blanket flip to `Accept`. +/// +/// MUTANTS — the `Accept` assertion flips under both: +/// * **DROP** (delete stage 2) ⇒ `Shorten { at_iteration: 0 }`, which is the +/// shipped behaviour and therefore the defect itself; +/// * **TRIVIALIZE** (`any_action_may_interfere ≡ true`) ⇒ `Shorten`. +/// +/// The opposite direction is `v1_positive_control_*` below, on this same board. +#[test] +fn v1_live_path_fetchland_seat_accepts_on_the_real_4p_board() { + let mut board = live_path_board(); + assert!( + !matches!(board.waiting_for, WaitingFor::LoopShortcut { .. }), + "reach-guard: the dump must not ship AT an offer — the offer is this drive's product, \ + not its input; got {:?}", + board.waiting_for + ); + let beat = drive_to_offer(&mut board, 400).expect( + "CR 732.2a: the offer must FIRE on this real 4p drain. A failure here is the offer \ + never being raised, not a fixture accident", + ); + let WaitingFor::LoopShortcut { + predicted_winner, + ref schema, + .. + } = board.waiting_for + else { + unreachable!("drive_to_offer only returns at a LoopShortcut window"); + }; + + // ── V5's premise, read off the live offer rather than assumed ── + assert_eq!( + predicted_winner, None, + "V5: the BOUNDED class mints no crown — so arm (A) is structurally unable to produce \ + the Accept below, and only arm (B) can (offer beat {beat})" + ); + assert_eq!( + schema.iteration_count, + IterationCount::Fixed(25), + "V5: a FINITE count is the point — stage 2 takes the identical rule for it and for \ + the UntilLethal class" + ); + + // ── the row: P2, whose only action is its own fetchland ── + let polled = declare_and_poll(&board, P2); + let non_pass = non_pass_actions(&polled, P2); + + assert_eq!( + non_pass.len(), + 1, + "REACH-GUARD: P2 must hold EXACTLY ONE non-pass action. Two would let the fold's \ + .any() reach Shorten through the other one and this row would pass for the wrong \ + reason; zero would make it the stage-1 path; got {non_pass:?}" + ); + assert!( + non_pass[0].contains("Terramorphic Expanse") + && non_pass[0].contains("zone=Some(Battlefield)") + && non_pass[0].contains("controller=Some(PlayerId(2))"), + "REACH-GUARD: that one action must be P2's OWN battlefield fetchland — the object the \ + diagnosis pinned; got {non_pass:?}" + ); + assert!( + stage_one_meaningful(&polled, P2), + "REACH-GUARD: stage 1 (POSSIBILITY, untouched here) must still return true. An Accept \ + produced by stage 1 would prove nothing about stage 2 — this is the assertion that \ + makes the row non-vacuous" + ); + + assert_eq!( + engine::ai_support::smart_shortcut_response(&polled, P2), + ShortcutResponse::Accept, + "ACCEPTANCE (a), LIVE PATH: cracking its own fetchland cannot touch the drain, so P2 \ + must not buy a priority window with it. CR 732.2c is satisfied by ANY different \ + choice, which is exactly why satisfying it carries no efficacy" + ); + + // ── sibling control: the flip set is exactly {P2} ── + for seat in [P1, P3] { + let other = declare_and_poll(&board, seat); + assert!( + !stage_one_meaningful(&other, seat), + "sibling control: {seat:?} holds nothing on this board, so it answers at stage 1 \ + and stage 2 never runs for it; got {:?}", + non_pass_actions(&other, seat) + ); + assert_eq!( + engine::ai_support::smart_shortcut_response(&other, seat), + ShortcutResponse::Accept, + "sibling control: {seat:?} is unchanged by this fix — the flip set is exactly {{P2}}" + ); + } +} + +/// The positive control for the row above, on the SAME real board: give P2 a +/// castable Lightning Bolt and it must Shorten. +/// +/// This is what makes `v1_live_path_*`'s `Accept` attributable. The same +/// instrument, on the same restored 4p board, at the same offer, returns BOTH +/// values — so the `Accept` is caused by the fetchland's confinement and not by +/// anything about the board, the beat, or the offer class. Without this row a +/// classifier that answered `Accept` unconditionally would pass. +/// +/// MUTANT: `any_action_may_interfere ≡ false` ⇒ `Accept` — this row flips. +/// +/// This row's expected value (`Shorten`) IS the shipped value, so **DROP cannot +/// flip it**. Its whole discriminating power is the TRIVIALIZE arm named above. +#[test] +fn v1_positive_control_interactive_seat_still_shortens_on_the_real_4p_board() { + let mut board = live_path_board(); + drive_to_offer(&mut board, 400).expect("the offer must fire"); + let bolt = give_bolt(&mut board, P2); + + let polled = declare_and_poll(&board, P2); + let actions = probe_actions(&polled, P2); + assert!( + actions + .iter() + .any(|a| matches!(a, GameAction::CastSpell { object_id, .. } if *object_id == bolt)), + "REACH-GUARD: the Bolt must actually be castable here, or this control cannot fire; \ + got {:?}", + non_pass_actions(&polled, P2) + ); + + assert_eq!( + engine::ai_support::smart_shortcut_response(&polled, P2), + ShortcutResponse::Shorten { at_iteration: 0 }, + "ACCEPTANCE (b), LIVE PATH: a seat holding real interaction must still get its window. \ + This is the assertion any over-broad confinement rule destroys first" + ); +} + +/// NEGATIVE CONTROL — and its limits are the point. +/// +/// The previously-tracked `dina_conqueror_4p` board is the same matchup at a +/// beat where NO seat holds any meaningful priority action. MEASURED: the offer +/// mints at beat 19 with `predicted_winner: None`, `IterationCount::Fixed(30)`, +/// and all three polled seats (P1, P2, P3) enumerate exactly +/// `["PassPriority"]` — length one, NOT empty; it is +/// `has_meaningful_priority_action` returning false that produces the Accept, +/// not an empty action vector. +/// +/// **This board therefore has ZERO discriminating power for acceptance (a), and +/// it is retained only for what it CAN show.** The defect needs a seat holding +/// a meaningful-but-vacuous action; a board with no such seat cannot exhibit it, +/// so this row passes identically with and without stage 2. Do not promote it +/// to an acceptance row, and do not read its green as evidence about the fix: +/// what it pins is the one-way property that stage 2 must not make a quiet +/// board start Shortening. +#[test] +fn v1_control_quiet_board_is_unchanged_and_cannot_discriminate() { + let mut board = quiet_board(); + let beat = drive_to_offer(&mut board, 400).expect("the quiet board still mints an offer"); + let WaitingFor::LoopShortcut { + predicted_winner, + ref schema, + .. + } = board.waiting_for + else { + unreachable!() + }; + assert_eq!(predicted_winner, None, "bounded class (offer beat {beat})"); + assert_eq!(schema.iteration_count, IterationCount::Fixed(30)); + + for seat in [P1, P2, P3] { + let polled = declare_and_poll(&board, seat); + let actions = probe_actions(&polled, seat); + assert_eq!( + actions, + vec![GameAction::PassPriority], + "the premise of this control: {seat:?} enumerates exactly one action, and it is a \ + pass. If this ever fails the board is no longer quiet and the row's `cannot \ + discriminate` claim needs re-deriving" + ); + assert!( + !stage_one_meaningful(&polled, seat), + "and it is stage 1, not an empty action list, that answers" + ); + assert_eq!( + engine::ai_support::smart_shortcut_response(&polled, seat), + ShortcutResponse::Accept, + "no-regress: stage 2 must not make a quiet seat start Shortening" + ); + } +} + +// =========================================================================== +// V8 — the SECOND window this authority answers: the pre-cast copy route. +// =========================================================================== + +const PRECAST_EPOCH: u64 = 7; +const PRECAST_BREAKPOINT: u64 = 99; + +/// Re-park an already-polled state at the PRE-CAST responder window, board +/// untouched. +/// +/// Hand-built from the engine's own constructor shape +/// (`game::precast_copy_shortcut::responder_wait`), exactly as the shipped +/// `precast_copy_shortcut.rs` fixture `precast_shortcut_response_state` does. +/// Sound HERE specifically: `smart_shortcut_response` reads `waiting_for` for +/// one thing only (the crown — and this variant carries no crown to read) and +/// then re-parks its own probe clone at `Priority`, so the efficacy answer is a +/// function of the BOARD. Driving a genuine pre-cast copy route would supply a +/// different board, which is the one variable this row must hold fixed against +/// `v1b`/`v3` above. +fn as_precast_window(state: &GameState, seat: PlayerId) -> GameState { + let mut s = state.clone(); + s.waiting_for = WaitingFor::RespondToPrecastCopyShortcut { + player: seat, + epoch: PRECAST_EPOCH, + breakpoint_ids: vec![PRECAST_BREAKPOINT], + remaining_players: Vec::new(), + }; + s +} + +/// The pre-cast reply the PRODUCTION candidate builder emits for this state. +/// Goes through `ai_support::candidate_actions`, i.e. the real consumer at +/// `candidates::candidate_actions_broad_with_probe`, so the +/// `ShortcutResponse` → `PrecastCopyShortcutResponse` mapping is measured too. +fn precast_candidate_response(state: &GameState) -> PrecastCopyShortcutResponse { + let replies: Vec = engine::ai_support::candidate_actions(state) + .iter() + .filter_map(|candidate| match &candidate.action { + GameAction::PrecastCopyShortcut { epoch, response } if *epoch == PRECAST_EPOCH => { + Some(response.clone()) + } + _ => None, + }) + .collect(); + assert_eq!( + replies.len(), + 1, + "reach-guard: the pre-cast responder window must offer exactly one reply candidate, \ + otherwise this row is reading something else; got {replies:?}" + ); + replies[0].clone() +} + +/// `smart_shortcut_response` is the single authority for TWO accept-or-shorten +/// windows, not one: `candidates::candidate_actions_broad_with_probe` routes +/// `WaitingFor::RespondToPrecastCopyShortcut` through it as well and maps the +/// answer onto `PrecastCopyShortcutResponse`. Stage 2 therefore changed behaviour +/// at that window too, and this row measures it instead of assuming it. +/// +/// Uniform treatment is the deliberate choice: both windows ask the identical +/// question — is a real priority window worth taking here — so a seat whose only +/// action cannot touch the loop should decline both. Arm (A) is separately +/// INAPPLICABLE here rather than merely skipped: `RespondToPrecastCopyShortcut` +/// carries no proposal summary and hence no `predicted_winner` field, so there is +/// no crown to read. Stage 1 and arm (B) both apply and both run. +/// +/// NON-VACUITY, and it is arm 2 that supplies it: `candidates.rs` maps a +/// `Shorten` with an EMPTY `breakpoint_ids` back to `Accept`, so on a +/// breakpoint-less prompt both answers would collapse to `Accept` and arm 1 +/// would pass for free. Arm 2 returns `Shorten { breakpoint_id }` off the same +/// staged breakpoint list, which proves the mapping is live and arm 1's `Accept` +/// is the efficacy verdict rather than the collapse. +/// +/// MUTANTS — both RUN, not reasoned about: +/// * `any_action_may_interfere ≡ true` ⇒ arm 1's production-path assertion fails +/// with `left: Shorten { breakpoint_id: 99 }, right: Accept`. This is also the +/// direct measurement of the non-vacuity claim above: the mapping's `Shorten` +/// branch really is reachable on this prompt. +/// * `any_action_may_interfere ≡ false` ⇒ arm 2 fails with +/// `left: Accept, right: Shorten { breakpoint_id: 99 }`. +/// +/// DROP (delete stage 2 entirely) flips arm 1 the same way and leaves arm 2 at +/// its shipped value; the first mutant covers that direction. +#[test] +fn v8_precast_window_takes_the_same_efficacy_answer() { + // Arm 1 — the confined fetchland seat. + let (mut runner, kickoff) = optional_cascade(|s| { + s.add_land_from_oracle(P2, "Terramorphic Expanse", TERRAMORPHIC); + }); + respond_window_at(&mut runner, kickoff, P2); + let fetch_precast = as_precast_window(runner.state(), P2); + + assert!( + stage_one_meaningful(&fetch_precast, P2), + "REACH-GUARD: stage 1 must still say `meaningful` at the PRE-CAST window, or this arm \ + measures the stage-1 path and says nothing about stage 2; got {:?}", + non_pass_actions(&fetch_precast, P2) + ); + // The PRODUCTION-PATH assertion comes first deliberately: it is the one that + // has to discriminate, and an authority-level assertion ahead of it would + // absorb every mutant before the candidate builder was ever exercised. + assert_eq!( + precast_candidate_response(&fetch_precast), + PrecastCopyShortcutResponse::Accept, + "the pre-cast candidate builder must carry stage 2's answer through: a window whose only \ + content is cracking one's own fetchland is worth no more on the pre-cast route than on \ + the generic one" + ); + assert_eq!( + engine::ai_support::smart_shortcut_response(&fetch_precast, P2), + ShortcutResponse::Accept, + "and the authority itself answers identically at both windows" + ); + + // Arm 2 — the same board plus real interaction. The window is still granted. + let (mut armed, armed_kickoff) = optional_cascade(|s| { + s.add_land_from_oracle(P2, "Terramorphic Expanse", TERRAMORPHIC); + s.add_basic_land(P2, ManaColor::Red); + s.add_bolt_to_hand(P2); + }); + respond_window_at(&mut armed, armed_kickoff, P2); + let armed_precast = as_precast_window(armed.state(), P2); + + assert!( + probe_actions(&armed_precast, P2) + .iter() + .any(|a| matches!(a, GameAction::CastSpell { .. })), + "reach-guard: the Bolt must be castable at the pre-cast window too, or this arm repeats \ + arm 1; got {:?}", + non_pass_actions(&armed_precast, P2) + ); + assert_eq!( + precast_candidate_response(&armed_precast), + PrecastCopyShortcutResponse::Shorten { + breakpoint_id: PRECAST_BREAKPOINT + }, + "ACCEPTANCE (b) on the pre-cast route: a seat holding real interaction keeps its window, \ + named at the breakpoint the engine issued to it. This is also arm 1's non-vacuity proof \ + — the Shorten branch of the mapping is reachable on this exact prompt" + ); +} + +// =========================================================================== +// V9 — COVERAGE INVARIANT: stage 2 classifies everything stage 1 counted. +// =========================================================================== + +/// Krark-Clan Ironworks, verbatim, verified byte-for-byte against MTGJSON +/// `AtomicCards.json` (`.data["Krark-Clan Ironworks"][0].text`; `.types` is +/// `["Artifact"]`). CARD PROVENANCE, in the sense the header block above defines +/// — it is the shape under test, so a paraphrase could take a different parser +/// branch and go green while the real card stayed broken. +/// +/// Why THIS card: its activation is the issue #544 shape — a sacrifice-for-mana +/// ability that `legal_actions` structurally omits while +/// `has_meaningful_priority_action`'s second rung still counts it off `state`. +/// That gap between the two stages' inputs is the whole subject of this section. +const IRONWORKS: &str = "Sacrifice an artifact: Add {C}{C}."; + +/// Stage the Ironworks on `player`'s battlefield with its ability taken from the +/// REAL parser, not hand-built: the verdict under test is a function of the AST, +/// so a hand-written `AbilityDefinition` would let this section pass against a +/// shape the pipeline never produces. +fn give_ironworks(state: &mut GameState, player: PlayerId) -> ObjectId { + let parsed = + engine::parser::oracle::parse_oracle_text(IRONWORKS, "Krark-Clan Ironworks", &[], &[], &[]); + assert_eq!( + parsed.abilities.len(), + 1, + "PREMISE: Krark-Clan Ironworks parses to exactly one ability; got {:?}", + parsed.abilities + ); + let id = engine::game::zones::create_object( + state, + CardId(state.next_object_id), + player, + "Krark-Clan Ironworks".to_string(), + Zone::Battlefield, + ); + let obj = state.objects.get_mut(&id).expect("just created"); + obj.card_types + .core_types + .push(engine::types::card_type::CoreType::Artifact); + obj.base_card_types = obj.card_types.clone(); + // CR 302.6 gates only creatures, but the mana-source sweep reads the flag + // uniformly; a permanent that has been under its controller's control since + // their most recent turn began is not sick. + obj.summoning_sick = false; + obj.abilities = std::sync::Arc::new(parsed.abilities.clone()); + obj.base_abilities = std::sync::Arc::new(parsed.abilities); + state.layers_dirty = LayersDirty::full(); + id +} + +/// A vanilla artifact for the Ironworks to eat. No abilities and no card claim: +/// it exists so the sacrifice cost is payable, and it must contribute no action +/// of its own or it would give the fold a second way to reach `Shorten`. +fn give_artifact_fodder(state: &mut GameState, player: PlayerId) -> ObjectId { + let id = engine::game::zones::create_object( + state, + CardId(state.next_object_id), + player, + "Test Artifact Fodder".to_string(), + Zone::Battlefield, + ); + let obj = state.objects.get_mut(&id).expect("just created"); + obj.card_types + .core_types + .push(engine::types::card_type::CoreType::Artifact); + obj.base_card_types = obj.card_types.clone(); + obj.summoning_sick = false; + state.layers_dirty = LayersDirty::full(); + id +} + +/// The optional-cascade board with an Ironworks + one artifact staged on P2 +/// AFTER the response window opens, so the addition cannot perturb the drive to +/// the offer. +fn ironworks_seat_polled() -> (GameRunner, ObjectId) { + let (mut runner, kickoff) = optional_cascade(|_| {}); + respond_window_at(&mut runner, kickoff, P2); + let ironworks = give_ironworks(runner.state_mut(), P2); + let _fodder = give_artifact_fodder(runner.state_mut(), P2); + (runner, ironworks) +} + +/// The invariant, asserted directly on the set rather than inferred from a +/// verdict: **stage 2 folds over every action stage 1 counted as meaningful.** +/// +/// This is the row that survives a future reclassification. `v9b` below reads +/// the Ironworks' *verdict*, which a later, more precise `filter_is_actor_owned` +/// could legitimately flip (CR 701.21a: "A player can't sacrifice something that +/// isn't a permanent, or something that's a permanent they don't control" — so +/// "Sacrifice an artifact" IS actor-owned in fact, merely not PROVEN so by this +/// AST). This row does not depend on the verdict at all — it +/// pins that the action is *handed to the classifier*, which is what keeps a +/// newly added stage-1 rung from silently reintroducing Accept-by-omission. +/// +/// The three assertions are the defect's three premises, in order: +/// 1. the activation is ABSENT from the flat list (issue #544 grouping), so +/// 2. stage 1 nonetheless counts it — via the `state`-reading second rung — and +/// 3. `stage_two_action_set` therefore has to put it back, or the two stages +/// read different inputs. +/// +/// Revert-probe (EXECUTED, see the report): defining `stage_two_action_set` as +/// `flat_actions.to_vec()` fails assertion 3. +#[test] +fn v9a_stage_two_folds_over_every_action_stage_one_counted() { + let (runner, ironworks) = ironworks_seat_polled(); + let activation = GameAction::ActivateAbility { + source_id: ironworks, + ability_index: 0, + }; + + let (probe, flat) = engine::ai_support::shortcut_probe(runner.state(), P2); + assert!( + !flat.contains(&activation), + "PREMISE 1: sacrifice-for-mana stays out of the flat priority list (issue #544) — if it \ + were present, the two stages would already agree and this row would be vacuous; got \ + {flat:?}" + ); + assert!( + stage_one_meaningful(runner.state(), P2), + "PREMISE 2: stage 1 counts it anyway, off `state` rather than off that list — this is the \ + asymmetry the invariant exists to close; got {flat:?}" + ); + + let stage_two = engine::ai_support::stage_two_action_set(probe.state(), &flat); + assert!( + stage_two.contains(&activation), + "THE INVARIANT: every action stage 1 counted as meaningful must be handed to stage 2. An \ + action the classifier never sees reaches no arm, so the fail-closed default cannot save \ + it and the seat Accepts BY OMISSION; got {stage_two:?}" + ); +} + +/// The response-level discriminator: with the invariant restored, this seat +/// Shortens; without it, it Accepts. +/// +/// It discriminates because the Ironworks activation classifies `MayInterfere` — +/// its `Sacrifice` cost filter (`Typed{Artifact}`) names no controller, so +/// `filter_is_actor_owned` cannot PROVE actor ownership and `cost_window_reach` +/// takes the fail-closed direction. A sacrifice ability whose filter *were* +/// proven actor-owned would classify `OwnResourcesOnly` and the response would +/// stay `Accept` under both versions — i.e. would not discriminate — so the +/// unproven filter is load-bearing, not incidental. +/// +/// REACH-GUARD: the flat list is asserted to be EXACTLY `[PassPriority]`. That +/// is what makes the verdict attributable: `PassPriority` is the classifier's +/// one `false` arm, so the flat half cannot reach `Shorten` on its own and the +/// only action that can is the one the widening added. +/// +/// MUTANT (EXECUTED, see the report): `stage_two_action_set ≡ flat_actions +/// .to_vec()` — i.e. delete the widening — flips this row to `Accept`. +/// +/// If a future `filter_is_actor_owned` learns to prove "Sacrifice an artifact" +/// actor-owned (CR 701.21a makes that TRUE in fact), this row will fail. That +/// failure is a signal to re-derive the fixture on an ability whose reach is +/// genuinely unproven — NOT to delete the row, and NOT to weaken the classifier. +/// `v9a` above holds the invariant meanwhile. +#[test] +fn v9b_a_sacrifice_for_mana_seat_still_gets_its_window() { + let (runner, ironworks) = ironworks_seat_polled(); + let activation = GameAction::ActivateAbility { + source_id: ironworks, + ability_index: 0, + }; + + let flat = probe_actions(runner.state(), P2); + assert_eq!( + flat, + vec![GameAction::PassPriority], + "REACH-GUARD: the flat half must be exactly the one action the classifier answers `false` \ + on, or a `Shorten` here is not attributable to the widening; got {flat:?}" + ); + assert!( + stage_one_meaningful(runner.state(), P2), + "reach-guard: stage 1 must return true, or the seat resolves at stage 1 and never reaches \ + the fold under test" + ); + + assert_eq!( + engine::ai_support::smart_shortcut_response(runner.state(), P2), + ShortcutResponse::Shorten { at_iteration: 0 }, + "a seat whose only meaningful action is {activation:?} must keep its window: the AST does \ + not prove the sacrificed artifact is this seat's own, and stage 2 must not Accept a \ + reach it cannot rule out" + ); +} From aca9de9278348b6cd39e0f43f99d29d73ae9f8ae Mon Sep 17 00:00:00 2001 From: lgray Date: Sat, 8 Aug 2026 13:39:29 -0500 Subject: [PATCH 02/13] fix(ai): stop classifying mana production as a confined own-resource window Stage two classified `Effect::Mana` as `WindowReach::OwnResourcesOnly`, so a seat whose only answer was a ritual -- or an actor-owned sacrifice-for-mana source -- was judged unable to interfere, and the AI accepted a loop shortcut that surrendered a live out. `ShortcutResponse::Shorten` hands the responder a real `Priority` window; inside it, mana is fungible reach. The defect was a CR 106.4 quotation truncated before the clause that refutes it. The arm quoted "that mana goes into a player's mana pool" and concluded board-neutrality implies non-interference. The rule's next sentence is "From there, it can be used to pay costs immediately". Board-neutrality and non-interference are different propositions; a correct citation was attached to the wrong one. `Effect::Mana` now falls through to the fail-closed `_ => MayInterfere` wildcard. The allowlist drops from four shapes to three. The *spending*-side `AbilityCost::Mana` arm deliberately stays -- paying a cost consumes reach, it does not create it -- and the arm now says so, so a future reader does not read its survival as an oversight. Regressions on the real 4p dump, both required by the maintainer: v10a a cast mana spell (Dark Ritual) funding an otherwise-unaffordable Bolt v10b an actor-owned sacrifice-for-mana seat (Lotus Petal, Composite[Tap, Sacrifice{SelfRef}]) re-admitted through `stage_two_action_set` Revert probe executed: restoring the deleted arm flips exactly 3 of 20 rows (the unit row, v10a, v10b) and leaves 17 green -- including both ACCEPT arms, the flagship, v9b, and the positive control -- then the files were restored and verified byte-identical. Two fixture facts are load-bearing and documented at their sizing sites: Lotus Petal's capacity is exactly 1 (`AnyOneColor` yields `vec![type; amount]`), leaving a 1-mana margin over P2's cheapest alternative; and any staged P2 source contributing 2 or more unlocks Angel of the Ruins' plainscycling, which would silently destroy v10b's attribution. Both assertions fail loudly instead. `give_bolt_with_cost` seeds `base_mana_cost` as well as `mana_cost`: `seed_live_characteristics_from_base` reseeds `mana_cost` from the base on every layer pass, and every consumer reaches the object through `shortcut_probe`, which flushes layers -- so setting only `mana_cost` would have made the "otherwise-unaffordable" premise measure nothing. Assisted-by: ClaudeCode:claude-opus-4.8 --- .../src/ai_support/shortcut_efficacy.rs | 156 +++++- .../tests/integration/shorten_efficacy.rs | 509 +++++++++++++++++- 2 files changed, 636 insertions(+), 29 deletions(-) diff --git a/crates/engine/src/ai_support/shortcut_efficacy.rs b/crates/engine/src/ai_support/shortcut_efficacy.rs index 106fb97d3a..397cbb4760 100644 --- a/crates/engine/src/ai_support/shortcut_efficacy.rs +++ b/crates/engine/src/ai_support/shortcut_efficacy.rs @@ -165,23 +165,10 @@ fn filter_is_actor_owned(filter: &TargetFilter) -> bool { } } -/// Reach of one effect node. Four allowlisted shapes; everything else is +/// Reach of one effect node. Three allowlisted shapes; everything else is /// interference by default (see the module doc, §2). fn effect_window_reach(effect: &Effect) -> WindowReach { match effect { - // CR 106.4: "When an effect instructs a player to add mana, - // that mana goes into a player's mana pool." Mana is a pool resource; - // producing it removes nothing from the board and answers no loop. - // `target` is the Jetfire-class recipient/count role — routing the pool - // it lands in does not make the production an interfering action. - Effect::Mana { - produced: _, - restrictions: _, - grants: _, - expiry: _, - target: _, - } => WindowReach::OwnResourcesOnly, - // Absent `target_player` is an engine parser convention for "the // actor's own library". It is a true description of engine behaviour // and it is NOT the safety warrant for this arm, because it is NOT @@ -251,6 +238,36 @@ fn effect_window_reach(effect: &Effect) -> WindowReach { && *destination == Zone::Battlefield), ), + // NOT allowlisted — and `Effect::Mana` is the case that has to be NAMED + // here rather than left to the reader, because an earlier revision of + // this module allowlisted it. + // + // CR 106.1: "Mana is the primary resource in the game. Players spend + // mana to pay costs, usually when casting spells and activating + // abilities." CR 106.4 is the rule that earlier arm cited, and it quoted + // only the FIRST sentence — "that mana goes into a player's mana pool". + // The second sentence is the one that refutes the inference drawn from + // it: "From there, it can be used to pay costs immediately". CR 601.2g + // then runs mana abilities during the very cast they fund. + // + // So mana is FUNGIBLE REACH, and the earlier arm's inference — + // "producing it removes nothing from the board" — answers where the mana + // LANDS, which is not what this classifier asks. The question is whether + // the action widens what the seat can do inside the window + // `game::engine`'s `RespondToShortcut(Shorten)` arm hands back. + // + // Whether it does is NOT a function of the AST: it depends on the rest of + // the hand, the board, the colors produced, and on what other permanents + // trigger off mana being added (CR 603.2) or off the source leaving the + // battlefield (CR 701.21a). This function reads ONE ability and no other + // object, so `OwnResourcesOnly` here would be a proof it cannot + // discharge — exactly the unknowable this module's §2 default exists for. + // + // It is also the CONSISTENT answer: stage 1 re-admits a sacrifice-for-mana + // activation precisely BECAUSE the sacrifice is board-changing (see + // `types::mana::ManaSourcePenalty::is_meaningful_priority_activation`), so + // classifying that same action as confined here contradicted the stage + // that handed it over. _ => WindowReach::MayInterfere, } } @@ -261,6 +278,14 @@ fn cost_window_reach(cost: &AbilityCost) -> WindowReach { match cost { // Tapping the source and spending mana from your own pool (CR 106.4) // touch nothing outside the actor. + // + // The `Mana` arm here is the SPENDING side and it stays allowlisted; + // only PRODUCING mana is reach. Paying a mana cost consumes a resource + // the actor already holds and hands nothing new to the seat, whereas the + // effect-side `_` arm above explains why adding mana widens what the + // seat can do inside the window. Flipping this arm would classify every + // ability with a mana cost as interference and vacate the feature, so + // its absence from that change is deliberate. AbilityCost::Tap => WindowReach::OwnResourcesOnly, AbilityCost::Mana { cost: _ } => WindowReach::OwnResourcesOnly, AbilityCost::Sacrifice(sacrifice) => { @@ -601,6 +626,14 @@ mod tests { oracle: "Exile target creature. Its controller may search their library for a basic land \ card, put that card onto the battlefield tapped, then shuffle.", }; + const DARK_RITUAL: Card = Card { + name: "Dark Ritual", + oracle: "Add {B}{B}{B}.", + }; + const LOTUS_PETAL: Card = Card { + name: "Lotus Petal", + oracle: "{T}, Sacrifice this artifact: Add one mana of any color.", + }; /// V8 — the classifier is correct across the whole class, in BOTH /// directions. Acceptance (a) must be confined; every acceptance-(b) @@ -609,8 +642,25 @@ mod tests { /// the hostile pair must all be interference. /// /// Revert-probe: deleting any allowlisted arm flips its acceptance-(a) rows - /// to `MayInterfere`; trivializing `filter_is_actor_owned` to `true` flips - /// the `Deathrite Shaman[0]` row to `OwnResourcesOnly`. + /// to `MayInterfere`. That clause is TIGHTER than it used to be — there are + /// now three allowlisted arms and all three are exercised by the three + /// `confined` rows, whereas the `Effect::Mana` arm this table shipped with + /// had no acceptance-(a) row witnessing it at all. + /// + /// This table no longer witnesses the TRIVIALIZE mutant, and the sentence + /// that said it did has been removed rather than weakened. It claimed that + /// trivializing `filter_is_actor_owned` to `true` flips the + /// `Deathrite Shaman[0]` row to `OwnResourcesOnly`; MEASURED, that stopped + /// being true when `Effect::Mana` left the allowlist. `Deathrite Shaman[0]` + /// carries its "Add one mana of any color" clause as a `sub_ability`, which + /// now folds `MayInterfere` on its own, so the absorbing fold holds the row + /// no matter what the owner axis says. The owner axis keeps its full + /// discriminating power; only this table's claim to be its witness went + /// stale. Its witnesses are the two tests that assert on + /// `filter_is_actor_owned` DIRECTLY — + /// `deathrite_and_terramorphic_are_separated_only_by_the_owner_axis` and + /// `composite_filters_prove_ownership_by_set_logic`, both in this module. Do + /// NOT weaken any assertion here to restore the old sentence. #[test] fn window_reach_matches_the_measured_class_table() { let confined: &[(&Card, usize)] = &[ @@ -937,4 +987,78 @@ mod tests { "a degenerate empty Or must not be proven by a vacuous all()" ); } + + /// Mana is FUNGIBLE REACH (CR 106.1 / CR 106.4 / CR 601.2g), so neither a + /// cast ritual nor an actor-owned sacrifice-for-mana is confined. + /// + /// The Lotus Petal half is the load-bearing one, and its ATTRIBUTION is the + /// second assertion: the parser emits "Sacrifice this artifact" as a + /// `TargetFilter::SelfRef`, which `filter_is_actor_owned` PROVES actor-owned + /// — and CR 701.21a is why proving it is SOUND rather than merely convenient + /// ("A player can't sacrifice something that isn't a permanent, or something + /// that's a permanent they don't control"). The rule grounds + /// actor-OWNERSHIP; it does not dictate the AST encoding. + /// So `cost_window_reach` returns `OwnResourcesOnly` and the ONLY thing that + /// can carry the verdict is the mana effect. That is what separates this row + /// from `v9b`'s Ironworks, which reaches `MayInterfere` through an UNPROVEN + /// sacrifice filter and therefore never exercises this arm. + /// + /// Revert-probe, EXECUTED: restoring + /// `Effect::Mana {..} => WindowReach::OwnResourcesOnly` as this match's first + /// arm reds this row at the Dark Ritual verdict, which is where the run + /// aborts. The Lotus Petal verdict flips under the same mutation and that is + /// MEASURED rather than derived — the integration row `v10b` reads exactly + /// this ability through `indexed_ability_window_reach` and flips to `Accept` + /// under the same mutation, which it can only do if this fold returned + /// `OwnResourcesOnly`. + #[test] + fn mana_production_is_reach_not_a_confined_own_resource() { + for (card, index) in [(&DARK_RITUAL, 0usize), (&LOTUS_PETAL, 0usize)] { + assert!( + !head_is_unparsed(card, index), + "VACUITY GUARD: {} must PARSE, or the row measures the fail-closed arm instead \ + of the mana effect's own semantics", + card.name + ); + } + + // PREMISE (card-data is gitignored; re-measured here on the live parser). + let ritual = ability(&DARK_RITUAL, 0); + assert!( + matches!(ritual.effect.as_ref(), Effect::Mana { .. }), + "PREMISE: Dark Ritual heads Effect::Mana; got {:?}", + ritual.effect + ); + assert!( + ritual.cost.is_none(), + "PREMISE: Dark Ritual carries no cost, so NOTHING but the head can carry the verdict" + ); + assert_eq!( + reach(&DARK_RITUAL, 0), + WindowReach::MayInterfere, + "a cast ritual funds an otherwise-unaffordable response" + ); + + let petal = ability(&LOTUS_PETAL, 0); + let cost = petal + .cost + .as_ref() + .expect("PREMISE: Lotus Petal carries an activation cost"); + assert_eq!( + cost_window_reach(cost), + WindowReach::OwnResourcesOnly, + "ATTRIBUTION: the SelfRef sacrifice IS proven actor-owned (CR 701.21a: a player can \ + only sacrifice a permanent they control), so the cost leg is confined and cannot be \ + what produces the verdict below" + ); + assert_eq!( + ability_window_reach(&petal), + WindowReach::MayInterfere, + "…so the verdict is carried by the mana effect ALONE — this is the row v9b cannot be" + ); + + // Reach-guard: the classifier can still return OwnResourcesOnly, so the + // two MayInterfere verdicts above are attributable and not a constant. + assert_eq!(reach(&RAMPANT_GROWTH, 0), WindowReach::OwnResourcesOnly); + } } diff --git a/crates/engine/tests/integration/shorten_efficacy.rs b/crates/engine/tests/integration/shorten_efficacy.rs index 5818b715ce..8928fbf8a9 100644 --- a/crates/engine/tests/integration/shorten_efficacy.rs +++ b/crates/engine/tests/integration/shorten_efficacy.rs @@ -42,9 +42,10 @@ use engine::game::engine::apply; use engine::game::scenario::{GameRunner, GameScenario}; use engine::types::ability::{AbilityDefinition, AbilityKind, Effect, QuantityExpr, TargetFilter}; use engine::types::actions::{GameAction, PrecastCopyShortcutResponse}; +use engine::types::card_type::CoreType; use engine::types::game_state::{GameState, LayersDirty, LoopDetectionMode, WaitingFor}; use engine::types::identifiers::{CardId, ObjectId}; -use engine::types::mana::ManaColor; +use engine::types::mana::{ManaColor, ManaCost, ManaCostShard}; use engine::types::phase::Phase; use engine::types::player::PlayerId; use engine::types::zones::Zone; @@ -651,6 +652,21 @@ fn drive_to_offer(state: &mut GameState, cap: usize) -> Option { /// absence of a printed mana cost) so the positive control below is the same /// interaction the shipped fixtures use. fn give_bolt(state: &mut GameState, player: PlayerId) -> ObjectId { + give_bolt_with_cost(state, player, ManaCost::zero()) +} + +/// `give_bolt` with a PRINTED cost, so a row can stage an interaction the seat +/// cannot yet afford. `GameObject::mana_cost` is the field the castability probe +/// reads, and `ManaCost`'s `Default` is `zero()` (`GameObject::new` seeds both +/// cost fields from it), so the free-Bolt caller above is byte-unchanged. +/// +/// BOTH fields are assigned, and `base_mana_cost` is the load-bearing one: +/// `game::layers`' `seed_live_characteristics_from_base` reassigns +/// `mana_cost` from `base_mana_cost` on every layer pass, and every consumer +/// here reaches the object through `ai_support::shortcut_probe`, which flushes +/// layers. Setting only the live field would silently restore the free cost and +/// leave the "otherwise-unaffordable" premise measuring nothing. +fn give_bolt_with_cost(state: &mut GameState, player: PlayerId, cost: ManaCost) -> ObjectId { let card_id = CardId(state.next_object_id); let id = engine::game::zones::create_object( state, @@ -673,6 +689,8 @@ fn give_bolt(state: &mut GameState, player: PlayerId) -> ObjectId { .core_types .push(engine::types::card_type::CoreType::Instant); obj.base_card_types = obj.card_types.clone(); + obj.base_mana_cost = cost.clone(); + obj.mana_cost = cost; obj.abilities = std::sync::Arc::new(vec![ability.clone()]); obj.base_abilities = std::sync::Arc::new(vec![ability]); state.layers_dirty = LayersDirty::full(); @@ -842,6 +860,30 @@ fn v1_live_path_fetchland_seat_accepts_on_the_real_4p_board() { "REACH-GUARD: that one action must be P2's OWN battlefield fetchland — the object the \ diagnosis pinned; got {non_pass:?}" ); + + // NON-VACUITY PIN. The guards above read the FLAT list, which cannot contain + // a BATTLEFIELD mana activation: `candidates.rs` excludes it at generation + // (`!is_mana_ability(&ability_def)`), and a land's `TapLandForMana` is + // additionally dropped by `flat_priority_actions_with_probe`'s + // `GameAction::is_mana_ability` filter. (It CAN contain a hand- or + // graveyard-zone mana activation, which has its own candidate loop and is a + // `GameAction::ActivateAbility` — so the filter never sees it. That class is + // not on this board, and the assertion below would catch it if it were.) + // The set stage 2 actually folds over is WIDER still — `stage_two_action_set` + // re-admits sacrifice-for-mana activations — so without this the flagship is + // blind to exactly the class that would vacuate the feature: a seat that + // acquired a Lotus-Petal-shaped permanent during the drive would silently + // start Shortening and this row would flip. + let (probe, flat) = engine::ai_support::shortcut_probe(&polled, P2); + let stage_two = engine::ai_support::stage_two_action_set(probe.state(), &flat); + assert_eq!( + stage_two, flat, + "NON-VACUITY: P2 must own NO mana-producing action on this board, so its Accept is \ + produced by the fetchland's confinement and NOT by the absence of a widening. If this \ + fails, the flagship Accept is no longer measuring what it claims — re-derive the row, \ + do NOT relax the assertion" + ); + assert!( stage_one_meaningful(&polled, P2), "REACH-GUARD: stage 1 (POSSIBILITY, untouched here) must still return true. An Accept \ @@ -1244,13 +1286,21 @@ fn v9a_stage_two_folds_over_every_action_stage_one_counted() { /// The response-level discriminator: with the invariant restored, this seat /// Shortens; without it, it Accepts. /// -/// It discriminates because the Ironworks activation classifies `MayInterfere` — -/// its `Sacrifice` cost filter (`Typed{Artifact}`) names no controller, so -/// `filter_is_actor_owned` cannot PROVE actor ownership and `cost_window_reach` -/// takes the fail-closed direction. A sacrifice ability whose filter *were* -/// proven actor-owned would classify `OwnResourcesOnly` and the response would -/// stay `Accept` under both versions — i.e. would not discriminate — so the -/// unproven filter is load-bearing, not incidental. +/// It discriminates because the Ironworks activation classifies `MayInterfere`, +/// and since V10 it does so through TWO independent legs. Its `Sacrifice` cost +/// filter (`Typed{Artifact}`) names no controller, so `filter_is_actor_owned` +/// cannot PROVE actor ownership and `cost_window_reach` takes the fail-closed +/// direction; and its `Effect::Mana` head is no longer allowlisted either, so +/// the head alone would carry the verdict. +/// +/// The counterfactual this doc used to carry — "a sacrifice ability whose filter +/// *were* proven actor-owned would classify `OwnResourcesOnly` … i.e. would not +/// discriminate" — is FALSE since `Effect::Mana` left the allowlist, and +/// `v10b` is the row that refutes it on exactly that shape (Lotus Petal's +/// `SelfRef` sacrifice IS proven actor-owned, and the seat still Shortens). What +/// survives is the sentence's purpose: the unproven filter is still what makes +/// THIS row's own MUTANT discriminate, because that mutant deletes the widening +/// rather than touching the classifier. /// /// REACH-GUARD: the flat list is asserted to be EXACTLY `[PassPriority]`. That /// is what makes the verdict attributable: `PassPriority` is the classifier's @@ -1260,11 +1310,16 @@ fn v9a_stage_two_folds_over_every_action_stage_one_counted() { /// MUTANT (EXECUTED, see the report): `stage_two_action_set ≡ flat_actions /// .to_vec()` — i.e. delete the widening — flips this row to `Accept`. /// -/// If a future `filter_is_actor_owned` learns to prove "Sacrifice an artifact" -/// actor-owned (CR 701.21a makes that TRUE in fact), this row will fail. That -/// failure is a signal to re-derive the fixture on an ability whose reach is -/// genuinely unproven — NOT to delete the row, and NOT to weaken the classifier. -/// `v9a` above holds the invariant meanwhile. +/// This row's verdict is now OVER-DETERMINED, which changes what a future +/// refinement does to it. The doc used to predict that a `filter_is_actor_owned` +/// which learns to prove "Sacrifice an artifact" actor-owned (CR 701.21a makes +/// that TRUE in fact) would red this row; it will not, because the unallowlisted +/// `Effect::Mana` head carries `MayInterfere` unconditionally. The guidance the +/// prediction carried still stands and is the part to keep: if this row ever +/// does red, re-derive the fixture on an ability whose reach is genuinely +/// unproven — NOT delete the row, and NOT weaken the classifier. Its +/// discriminating power comes from its MUTANT rather than from the cost filter's +/// imprecision, and `v9a` above holds the invariant meanwhile. #[test] fn v9b_a_sacrifice_for_mana_seat_still_gets_its_window() { let (runner, ironworks) = ironworks_seat_polled(); @@ -1294,3 +1349,431 @@ fn v9b_a_sacrifice_for_mana_seat_still_gets_its_window() { reach it cannot rule out" ); } + +// =========================================================================== +// V10 — MANA IS FUNGIBLE REACH, not a confined own resource. +// +// CR 106.4's first sentence ("that mana goes into a player's mana pool") is the +// half an earlier `Effect::Mana` arm quoted; the rest of the same rule says the +// mana "can be used to pay costs immediately", CR 106.1 says paying costs is +// mana's whole function, and CR 601.2g runs mana abilities during the very cast +// they fund. So producing mana widens what the polled seat can do inside the +// window `game::engine`'s `RespondToShortcut(Shorten)` arm hands back, and the +// classifier — which reads ONE ability's AST and no other object — cannot prove +// otherwise. Both rows below ride the REAL 4p board through the same production +// chokepoint the flagship uses. +// =========================================================================== + +/// Dark Ritual, verbatim. CARD PROVENANCE in the sense the header block defines. +/// The `Effect::Mana` head with `cost: None` is the point — nothing but the head +/// can carry this object's verdict. +const DARK_RITUAL: &str = "Add {B}{B}{B}."; + +/// Lotus Petal, verbatim. CARD PROVENANCE. This is the maintainer's named +/// "actor-owned sacrifice-for-mana" class: the parser emits "Sacrifice this +/// artifact" as a `TargetFilter::SelfRef`, which `filter_is_actor_owned` PROVES +/// actor-owned (CR 701.21a grounds why that is sound — a player can only +/// sacrifice a permanent they control), so the cost leg is confined and the mana +/// head carries the verdict ALONE. That is what makes it not a second `v9b`, +/// whose Ironworks reaches the same verdict through an UNPROVEN cost filter. +const LOTUS_PETAL: &str = "{T}, Sacrifice this artifact: Add one mana of any color."; + +/// Sol Ring, verbatim. CARD PROVENANCE. The ORDINARY mana source: no sacrifice +/// leg, so `mana_ability_penalty` is `None` rather than `Sacrifices` and the +/// stage-2 widening must not re-admit it. +const SOL_RING: &str = "{T}: Add {C}{C}."; + +/// Stage a real card with its abilities taken from the REAL parser, not +/// hand-built: every verdict below is a function of the AST, so a hand-written +/// `AbilityDefinition` would let this section pass against a shape the pipeline +/// never produces. Same construction shape as `give_ironworks` above (left +/// untouched: it is shipped and `v9a`/`v9b` are green on it), parameterized over +/// the three axes the V10 rows vary. +fn give_parsed_card( + state: &mut GameState, + player: PlayerId, + name: &str, + oracle: &str, + core_type: CoreType, + zone: Zone, +) -> ObjectId { + let parsed = engine::parser::oracle::parse_oracle_text(oracle, name, &[], &[], &[]); + assert_eq!( + parsed.abilities.len(), + 1, + "PREMISE: {name} parses to exactly one ability; got {:?}", + parsed.abilities + ); + let id = engine::game::zones::create_object( + state, + CardId(state.next_object_id), + player, + name.to_string(), + zone, + ); + let obj = state.objects.get_mut(&id).expect("just created"); + obj.card_types.core_types.push(core_type); + obj.base_card_types = obj.card_types.clone(); + // CR 302.6 gates only creatures, but the mana-source sweep reads the flag + // uniformly; a permanent that has been under its controller's control since + // their most recent turn began is not sick. + obj.summoning_sick = false; + obj.abilities = std::sync::Arc::new(parsed.abilities.clone()); + obj.base_abilities = std::sync::Arc::new(parsed.abilities); + state.layers_dirty = LayersDirty::full(); + id +} + +/// The Ritual is staged as an INSTANT and with no printed mana cost, and both +/// are deliberate. Without a core type the sorcery-timing gate refuses the cast +/// at this window and the funder never enters the action set — the row would go +/// vacuous silently. And Dark Ritual's real printed cost is `{B}` while P2 +/// controls no mana source, so a printed-cost Ritual would itself be uncastable +/// and the row would measure an empty board twice. What the row measures is the +/// CLASSIFIER, which reads the AST and never the mana cost. +fn give_dark_ritual(state: &mut GameState, player: PlayerId) -> ObjectId { + give_parsed_card( + state, + player, + "Dark Ritual", + DARK_RITUAL, + CoreType::Instant, + Zone::Hand, + ) +} + +/// THE SIZING SITE. This source contributes **exactly 1** to +/// `game::mana_sources`' `feasible_mana_capacity`: its `AnyOneColor` production +/// carries `count: Fixed { value: 1 }`, and that arm of +/// `game::effects::mana`'s `resolve_mana_types_for_ability` returns +/// `vec![mana_type; amount]` — length `amount`, NOT `color_options.len()`. +/// +/// MEASURED on this fixture, the only mana-gated action P2 owns at this window +/// is Angel of the Ruins' hand-zone plainscycling (object 210), whose cost is +/// `Composite[Mana{generic 2}, Discard{self_ref}]` — `{2}` generic. **The margin +/// is exactly 1 mana.** ANY staged P2 source contributing 2 or more unlocks that +/// cycling, puts an `ActivateAbility` in P2's flat list, and destroys `v10b`'s +/// attribution — its `non_pass` assertion is what fails, loudly, if that +/// happens. A future edit that raises this source's capacity silently destroys +/// the discrimination, so do NOT "strengthen" it. +fn give_lotus_petal(state: &mut GameState, player: PlayerId) -> ObjectId { + give_parsed_card( + state, + player, + "Lotus Petal", + LOTUS_PETAL, + CoreType::Artifact, + Zone::Battlefield, + ) +} + +/// Capacity **2** (`Colorless { count: Fixed 2 }`), which is why the control it +/// serves asserts re-admission ONLY and never a verdict — see `v10b`. +fn give_sol_ring(state: &mut GameState, player: PlayerId) -> ObjectId { + give_parsed_card( + state, + player, + "Sol Ring", + SOL_RING, + CoreType::Artifact, + Zone::Battlefield, + ) +} + +/// V10a — a CAST mana spell funds an otherwise-unaffordable answer, so the seat +/// must keep its window. +/// +/// The pair varies exactly one object: a Dark Ritual in P2's hand. Both arms +/// hold the same `{B}{B}{B}` Bolt, and assertion 1 is the operational definition +/// of "otherwise-unaffordable" — `feasible_mana_capacity` is battlefield-scoped, +/// so a Ritual sitting in HAND contributes 0 and the castability gate +/// structurally cannot see "cast a ritual first, then the Bolt". That two-step +/// is exactly what the priority window buys, and CR 601.2g / CR 117.1d are the +/// rules that make the mana available to pay a cost the moment it is produced. +/// +/// The row does NOT assert the post-resolution board: reaching it would require +/// driving the Ritual through the stack, and the row's discriminating power does +/// not depend on it. The arithmetic is carried by the verbatim texts — the +/// Ritual adds `{B}{B}{B}`, the Bolt is printed at `{B}{B}{B}`. +/// +/// MUTANT: restoring `Effect::Mana {..} => WindowReach::OwnResourcesOnly` as +/// `effect_window_reach`'s first arm flips the SHORTEN arm to `Accept`. Under it +/// the Ritual's single ability folds `OwnResourcesOnly` (head `Effect::Mana`, +/// `cost: None`), and P2's remaining actions are `PassPriority` — the +/// classifier's one `false` arm — and the fetchland, whose verdict rides +/// untouched arms. The ACCEPT arm is unaffected by the mutation by construction: +/// its action set carries no `Effect::Mana` node at all. +/// +/// Every `GameAction::CastSpell` matcher below binds `{ object_id, .. }` and +/// must NOT name `payment_mode`: a Petal- or Ritual-funded cast can be offered +/// as `CastPaymentMode::AutoExceptSacrificialMana`, and a mode-specific matcher +/// would fail with a message claiming the funding does not work. +#[test] +fn v10a_a_cast_mana_spell_that_funds_an_unaffordable_answer_keeps_its_window() { + let mut board = live_path_board(); + drive_to_offer(&mut board, 400).expect("CR 732.2a: the offer must fire on this real 4p drain"); + // ONE drive, ONE poll, shared by both arms — so staging cannot perturb the + // drive, the offer schema, or the APNAP walk. + let polled = declare_and_poll(&board, P2); + + let mut base = polled.clone(); + let bolt = give_bolt_with_cost( + &mut base, + P2, + // `{B}{B}{B}` — sized to exactly what one Dark Ritual adds. + ManaCost::Cost { + shards: vec![ManaCostShard::Black; 3], + generic: 0, + }, + ); + + // ── arm ACCEPT: the interaction alone ── + let accept_arm = base.clone(); + // ── arm SHORTEN: same board, same Bolt, PLUS the funding piece ── + let mut shorten_arm = base.clone(); + let ritual = give_dark_ritual(&mut shorten_arm, P2); + + for (label, arm) in [("ACCEPT", &accept_arm), ("SHORTEN", &shorten_arm)] { + assert!( + !probe_actions(arm, P2).iter().any( + |a| matches!(a, GameAction::CastSpell { object_id, .. } if *object_id == bolt) + ), + "PREMISE ({label} arm): the Bolt must be OTHERWISE-UNAFFORDABLE at poll time — a \ + hand-zone Ritual is invisible to the battlefield-scoped capacity scan, so the \ + castability gate cannot see the two-step the window buys; got {:?}", + non_pass_actions(arm, P2) + ); + assert!( + stage_one_meaningful(arm, P2), + "reach-guard ({label} arm): stage 1 must return true, or the seat answers at stage 1 \ + and the fold under test never runs" + ); + } + + assert!( + probe_actions(&shorten_arm, P2) + .iter() + .any(|a| matches!(a, GameAction::CastSpell { object_id, .. } if *object_id == ritual)), + "reach-guard: the FUNDER must really be castable, or the SHORTEN arm is the ACCEPT arm \ + with extra steps; got {:?}", + non_pass_actions(&shorten_arm, P2) + ); + + let accept_non_pass = non_pass_actions(&accept_arm, P2); + assert_eq!( + accept_non_pass.len(), + 1, + "ATTRIBUTION: the ACCEPT arm's action set must be the flagship's exactly, so its Accept \ + is the already-shipped verdict and the pair's ONLY variable is the Ritual; got \ + {accept_non_pass:?}" + ); + assert!( + accept_non_pass[0].contains("Terramorphic Expanse") + && accept_non_pass[0].contains("zone=Some(Battlefield)") + && accept_non_pass[0].contains("controller=Some(PlayerId(2))"), + "ATTRIBUTION: that one action must be P2's OWN battlefield fetchland; got \ + {accept_non_pass:?}" + ); + + assert_eq!( + engine::ai_support::smart_shortcut_response(&accept_arm, P2), + ShortcutResponse::Accept, + "the pair's negative arm: an unaffordable answer and a confined fetchland buy nothing" + ); + assert_eq!( + engine::ai_support::smart_shortcut_response(&shorten_arm, P2), + ShortcutResponse::Shorten { at_iteration: 0 }, + "the pair's positive arm: producing mana is REACH (CR 106.1 / CR 106.4 / CR 601.2g). \ + The ritual is the one object that differs, and accepting here surrenders a live out" + ); +} + +/// V10b — an ACTOR-OWNED sacrifice-for-mana seat keeps its window. This is the +/// maintainer's named class, and it is the row `v9b` structurally cannot be. +/// +/// The pair varies exactly ONE object: a Lotus Petal on P2's battlefield. No +/// Bolt, no Swamp, no second permanent. +/// +/// **CAPACITY THRESHOLD — the sizing this row lives or dies on.** The staged +/// source contributes exactly **1** to `feasible_mana_capacity` (see +/// `give_lotus_petal`), and the only mana-gated action P2 owns at this window is +/// Angel of the Ruins' hand-zone plainscycling at `{2}` generic. **The margin is +/// exactly 1 mana.** ANY staged P2 source contributing 2 or more unlocks that +/// cycling, puts an `ActivateAbility` in P2's flat list, and destroys this row's +/// attribution — the `non_pass` assertion below is what fails, loudly, if that +/// happens. A row that reds that way is a fixture-threshold artifact, not a +/// defect in the classifier: check whether `non_pass_actions` names object 210 +/// first, shrink the staged source, and do NOT respond by relaxing an +/// `Effect::Mana` classification. +/// +/// **P2's full reachable surface at this window, enumerated so the threshold is +/// not a claim about the hand alone.** MEASURED from the committed fixture: +/// battlefield 1 (Terramorphic Expanse, capacity 0); hand 7, of which six are +/// sorcery-speed (`Victimize`, `Plains`, `Arcane Signet`, `Commander's Sphere`, +/// `Compleated Huntmaster`, `Night's Whisper`) and only the Angel offers a +/// mana-gated instant-speed action; command zone 1 — `Brimaz, Blight of +/// Oreskos`, `{2}{W}{B}`, a CREATURE, and `format_config.command_zone` is true, +/// so `casting::spell_objects_available_to_cast`'s `Zone::Command` clause does +/// put it inside the candidate loop. The fixture is `active_player` 0 in +/// `CombatDamage` with priority at P2, so it is neither P2's turn nor a main +/// phase and sorcery-speed timing blocks Brimaz — and no amount of mana lifts a +/// timing gate. Library-zone activations are gated `is_active && stack_empty` +/// and P2 is not active. So `{2}` really is the whole threshold, over the whole +/// surface rather than over the hand. +/// +/// MUTANT: restoring `Effect::Mana {..} => WindowReach::OwnResourcesOnly` flips +/// the SHORTEN arm to `Accept`. The Petal's cost leg is ALREADY +/// `OwnResourcesOnly` — `Composite[Tap, Sacrifice{SelfRef}]`, and +/// `filter_is_actor_owned` proves `SelfRef` at its first match arm — so with the +/// mana arm restored the whole ability folds `OwnResourcesOnly`. That is exactly +/// why this row is not a second `v9b`, whose verdict rides its UNPROVEN cost +/// filter and is untouched by the mutation. +#[test] +fn v10b_an_actor_owned_sacrifice_for_mana_seat_keeps_its_window() { + let mut board = live_path_board(); + drive_to_offer(&mut board, 400).expect("CR 732.2a: the offer must fire on this real 4p drain"); + let polled = declare_and_poll(&board, P2); + + // ── arm ACCEPT: the polled board, untouched ── + let accept_arm = polled.clone(); + // ── arm SHORTEN: the polled board plus ONE object ── + let mut shorten_arm = polled.clone(); + let petal = give_lotus_petal(&mut shorten_arm, P2); + let activation = GameAction::ActivateAbility { + source_id: petal, + ability_index: 0, + }; + + assert!( + !probe_actions(&shorten_arm, P2).contains(&activation), + "PREMISE: the Petal's ability IS a mana ability (CR 605.1a), so candidate generation \ + excludes it from the flat list outright. This is the issue-#544 asymmetry the whole \ + V9/V10 section exists for — if it were present, stage 2 would already see it and the \ + widening below would be vacuous" + ); + + let non_pass = non_pass_actions(&shorten_arm, P2); + assert_eq!( + non_pass.len(), + 1, + "ATTRIBUTION + THRESHOLD SENTINEL: if the Petal's mana made ANY P2 action affordable — a \ + hand card, or the Angel's {{2}} cycling — it would appear here and could carry \ + MayInterfere independently of the arm under test. See this row's capacity-threshold \ + note before touching the staged source; got {non_pass:?}" + ); + assert!( + non_pass[0].contains("Terramorphic Expanse") + && non_pass[0].contains("zone=Some(Battlefield)") + && non_pass[0].contains("controller=Some(PlayerId(2))"), + "ATTRIBUTION: that one action must still be P2's OWN battlefield fetchland; got \ + {non_pass:?}" + ); + + let (probe, flat) = engine::ai_support::shortcut_probe(&shorten_arm, P2); + let mut expected = flat.clone(); + expected.push(activation); + assert_eq!( + engine::ai_support::stage_two_action_set(probe.state(), &flat), + expected, + "the widening added EXACTLY the Petal. Order is determinate — `stage_two_action_set` is \ + the flat list chained with the meaningful sacrifice-mana actions — and the penalty is \ + `Sacrifices` because `mana_ability_penalty`'s FIRST clause is `cost_includes_sacrifice`, \ + which inspects `Composite` legs" + ); + + let (accept_probe, accept_flat) = engine::ai_support::shortcut_probe(&accept_arm, P2); + assert_eq!( + engine::ai_support::stage_two_action_set(accept_probe.state(), &accept_flat), + accept_flat, + "the negative half of the widening, on the same instrument: without the Petal there is \ + nothing to re-admit" + ); + + for (label, arm) in [("ACCEPT", &accept_arm), ("SHORTEN", &shorten_arm)] { + assert!( + stage_one_meaningful(arm, P2), + "reach-guard ({label} arm): stage 1 must return true, or the seat answers at stage 1 \ + and the fold under test never runs" + ); + } + + assert_eq!( + engine::ai_support::smart_shortcut_response(&accept_arm, P2), + ShortcutResponse::Accept, + "the pair's negative arm — and it is the flagship's own verdict on the flagship's own \ + action set" + ); + assert_eq!( + engine::ai_support::smart_shortcut_response(&shorten_arm, P2), + ShortcutResponse::Shorten { at_iteration: 0 }, + "the pair's positive arm: an actor-owned sacrifice-for-mana activation is two board \ + events, not a confined own resource. Stage 1 re-admits it PRECISELY because the \ + sacrifice is board-changing, so classifying it as confined here contradicted the stage \ + that handed it over" + ); + + // ── FUNDING LEMMA (CR 117.1d + CR 601.2g), deliberately QUARANTINED ── + // + // These two clones NEVER reach `smart_shortcut_response`. Staging the probe + // spell into an arm above would put a `CastSpell` in the flat list whose own + // `Effect::DealDamage` reaches the fail-closed arm — the pair would then + // Shorten with the fix reverted and would stop measuring anything. The + // separation IS the design; do not merge them. + // + // `{1}` generic on purpose: a generic residual is decided by comparing the + // summed capacity against it, so both halves are decided on one read path + // with zero slack. Without the Petal, P2's battlefield is one Terramorphic + // Expanse, whose ability heads `SearchLibrary` and contributes 0, so the sum + // is 0 < 1; with the Petal it is exactly 1 >= 1. + let mut funded = shorten_arm.clone(); + let probe_spell = give_bolt_with_cost(&mut funded, P2, ManaCost::generic(1)); + assert!( + probe_actions(&funded, P2).iter().any( + |a| matches!(a, GameAction::CastSpell { object_id, .. } if *object_id == probe_spell) + ), + "FUNDING: with the Petal on the battlefield the engine's own castability gate says a \ + {{1}} interaction IS payable — by activating a mana ability during cost payment, which \ + is exactly what happens inside the window this row buys (CR 117.1d / CR 601.2g); got \ + {:?}", + non_pass_actions(&funded, P2) + ); + + let mut unfunded = accept_arm.clone(); + let unfunded_spell = give_bolt_with_cost(&mut unfunded, P2, ManaCost::generic(1)); + assert!( + !probe_actions(&unfunded, P2).iter().any( + |a| matches!(a, GameAction::CastSpell { object_id, .. } if *object_id == unfunded_spell) + ), + "FUNDING, negative half: the SAME interaction on the SAME board minus the Petal is NOT \ + payable. Together with the assertion above, the Petal's mana is what makes it reachable \ + — which is the whole content of 'otherwise-unaffordable'; got {:?}", + non_pass_actions(&unfunded, P2) + ); + + // ── the ORDINARY-mana-source control: plain mana never leaks into stage 2 ── + let mut ordinary = polled.clone(); + let sol_ring = give_sol_ring(&mut ordinary, P2); + let (ordinary_probe, ordinary_flat) = engine::ai_support::shortcut_probe(&ordinary, P2); + assert!( + !ordinary_flat.iter().any( + |a| matches!(a, GameAction::ActivateAbility { source_id, .. } if *source_id == sol_ring) + ), + "candidate generation excludes a mana ability outright (CR 605.1a); got {ordinary_flat:?}" + ); + assert_eq!( + engine::ai_support::stage_two_action_set(ordinary_probe.state(), &ordinary_flat), + ordinary_flat, + "NON-VACUITY: an ordinary mana source has penalty `None`, not `Sacrifices`, so the \ + stage-2 widening does NOT re-admit it. The Lotus Petal DOES enter this same set in this \ + same test, so this emptiness is a measurement and not a stuck instrument" + ); + // NO verdict assertion here, deliberately. Sol Ring contributes 2 to + // `feasible_mana_capacity`, which is enough to pay Angel of the Ruins' + // hand-zone plainscycling already sitting in P2's hand on this fixture. That + // activation enters the FLAT list and is `MayInterfere` on two independent + // legs (`AbilityCost::Discard` is not allowlisted; its `sub_ability` moves a + // card to a HAND, which the anaphoric fetch disjunct does not cover), so + // this seat answers Shorten — through candidate affordability, a route this + // control does not model and claims nothing about. Asserting Accept here + // would assert a false fact about the board. +} From a99aa92b2957eef3b2e453a2ab1644ef98c5fbb8 Mon Sep 17 00:00:00 2001 From: lgray Date: Sat, 8 Aug 2026 15:59:41 -0500 Subject: [PATCH 03/13] fix(ai): correct three justifications the mana-reach review measured as false Review-impl returned Semantic-Impact PASS and Maintainer-Simulation PASS on the parent commit; these are its three [LOW] and two [NIT] items. No classifier logic changes -- with comments stripped, the `shortcut_efficacy.rs` delta is a single assertion-message string. - `give_bolt_with_cost`'s rationale for setting `base_mana_cost` was false for the objects it stages. `reset_recipient_to_base` is reached only over `battlefield_phased_in_ids()`, and the incremental arm's recipient set is battlefield entrants plus attachment hosts -- neither reaches a hand object. `sync_missing_base_characteristics` back-fills base FROM live, the opposite direction. The code is kept because it is defensively correct if the staging zone ever changes; the comment now says that instead of asserting a mechanism that does not fire here. A false justification is worse than none: it gets trusted. - The CR 701.21a quotation began at the rule's second sentence -- the same half-quote shape this branch exists to repair. It now starts at sentence one, "its controller moves it from the battlefield directly to its OWNER's graveyard", which is what bounds the conclusion: `SelfRef` proves control, never ownership, so a controlled-but-not-owned source puts a card in another player's graveyard while the leg still answers `OwnResourcesOnly`. Not repairable at this seam -- the AST carries no ownership -- so the limit is named rather than papered over. - `give_ironworks` had become a byte-equivalent duplicate of `give_parsed_card`; field-by-field equivalence was verified, then it was collapsed to a one-line delegation. The divergence hazard had already fired in the parent commit, where `base_mana_cost` reached one construction path and not the other. - The `v1` NON-VACUITY note credited the wrong assertion: `stage_two_action_set` only appends, so `stage_two == flat` cannot catch a non-sacrifice hand or graveyard mana activation. The `non_pass.len() == 1` reach-guard above does. - `summoning_sick = false` was a proven no-op (`create_object` documents that it does not set the flag; `GameObject::new` defaults it false). Removed, with a comment recording why it is absent so it is not re-added. Assisted-by: ClaudeCode:claude-opus-4.8 --- .../src/ai_support/shortcut_efficacy.rs | 42 +++++-- .../tests/integration/shorten_efficacy.rs | 117 ++++++++++-------- 2 files changed, 98 insertions(+), 61 deletions(-) diff --git a/crates/engine/src/ai_support/shortcut_efficacy.rs b/crates/engine/src/ai_support/shortcut_efficacy.rs index 397cbb4760..1cbaf40f01 100644 --- a/crates/engine/src/ai_support/shortcut_efficacy.rs +++ b/crates/engine/src/ai_support/shortcut_efficacy.rs @@ -993,15 +993,32 @@ mod tests { /// /// The Lotus Petal half is the load-bearing one, and its ATTRIBUTION is the /// second assertion: the parser emits "Sacrifice this artifact" as a - /// `TargetFilter::SelfRef`, which `filter_is_actor_owned` PROVES actor-owned - /// — and CR 701.21a is why proving it is SOUND rather than merely convenient - /// ("A player can't sacrifice something that isn't a permanent, or something - /// that's a permanent they don't control"). The rule grounds - /// actor-OWNERSHIP; it does not dictate the AST encoding. - /// So `cost_window_reach` returns `OwnResourcesOnly` and the ONLY thing that - /// can carry the verdict is the mana effect. That is what separates this row - /// from `v9b`'s Ironworks, which reaches `MayInterfere` through an UNPROVEN - /// sacrifice filter and therefore never exercises this arm. + /// `TargetFilter::SelfRef`, which `filter_is_actor_owned` returns true for, + /// so `cost_window_reach` returns `OwnResourcesOnly` and the ONLY thing that + /// can carry the verdict is the mana effect. + /// + /// What that predicate does and does NOT establish — CR 701.21a, quoted from + /// its FIRST sentence: "To sacrifice a permanent, its controller moves it + /// from the battlefield directly to its owner's graveyard. A player can't + /// sacrifice something that isn't a permanent, or something that's a + /// permanent they don't control." Sentence two bounds the actor to + /// permanents they CONTROL — that much is grounded. Sentence one is the half + /// that bounds the conclusion: the card goes to its OWNER's graveyard, so a + /// controlled-but-not-owned Petal (Control Magic) puts a card into another + /// player's graveyard while this leg still answers `OwnResourcesOnly`. + /// `SelfRef` therefore proves control, never ownership, and "confined" is + /// narrower than the predicate's name reads. + /// + /// Not repairable at this seam: `filter_is_actor_owned` is a pure AST + /// predicate and the AST carries no ownership. Nor does it move this row, + /// whose verdict the mana head decides on its own. It is named so the limit + /// is not later widened on the strength of a half-quoted rule — which is the + /// exact species of error (CR 106.4, above) this whole change repairs. + /// + /// A confined cost leg plus a verdict carried by the mana head ALONE is what + /// separates this row from `v9b`'s Ironworks, which reaches `MayInterfere` + /// through an UNPROVEN sacrifice filter and therefore never exercises this + /// arm. /// /// Revert-probe, EXECUTED: restoring /// `Effect::Mana {..} => WindowReach::OwnResourcesOnly` as this match's first @@ -1047,9 +1064,10 @@ mod tests { assert_eq!( cost_window_reach(cost), WindowReach::OwnResourcesOnly, - "ATTRIBUTION: the SelfRef sacrifice IS proven actor-owned (CR 701.21a: a player can \ - only sacrifice a permanent they control), so the cost leg is confined and cannot be \ - what produces the verdict below" + "ATTRIBUTION: the SelfRef sacrifice is proven CONTROLLED (CR 701.21a bounds the actor \ + to permanents they control; the card still leaves for its OWNER's graveyard — see \ + the doc comment), so the cost leg reads confined and cannot be what produces the \ + verdict below" ); assert_eq!( ability_window_reach(&petal), diff --git a/crates/engine/tests/integration/shorten_efficacy.rs b/crates/engine/tests/integration/shorten_efficacy.rs index 8928fbf8a9..ea0cd592e9 100644 --- a/crates/engine/tests/integration/shorten_efficacy.rs +++ b/crates/engine/tests/integration/shorten_efficacy.rs @@ -660,12 +660,33 @@ fn give_bolt(state: &mut GameState, player: PlayerId) -> ObjectId { /// reads, and `ManaCost`'s `Default` is `zero()` (`GameObject::new` seeds both /// cost fields from it), so the free-Bolt caller above is byte-unchanged. /// -/// BOTH fields are assigned, and `base_mana_cost` is the load-bearing one: -/// `game::layers`' `seed_live_characteristics_from_base` reassigns -/// `mana_cost` from `base_mana_cost` on every layer pass, and every consumer -/// here reaches the object through `ai_support::shortcut_probe`, which flushes -/// layers. Setting only the live field would silently restore the free cost and -/// leave the "otherwise-unaffordable" premise measuring nothing. +/// BOTH fields are assigned, but the LIVE one is what carries this helper — +/// `base_mana_cost` is NOT load-bearing for the objects staged here, and saying +/// otherwise would be a justification the next reader trusts. +/// +/// READ FROM SOURCE (three call sites, not a runtime probe — the evidence grade +/// is stated because overclaiming it is the very habit this comment replaces). +/// `game::layers`' base→live reseed does run +/// `mana_cost = base_mana_cost.clone()` (`seed_live_characteristics_from_base`), +/// and every consumer here does reach the object through +/// `ai_support::shortcut_probe`, which flushes layers — but the full pass +/// applies that reseed (via `reset_recipient_to_base`) only over +/// `battlefield_phased_in_ids()`, and the hand branch of the same pass resets +/// `keywords` alone. `layers::layer_pass_materializes_keywords`' doc is the +/// in-repo authority for that split ("Battlefield — resets the full +/// characteristic set" vs "Hand — keywords-only reset"); the incremental arm +/// resets only battlefield entrants and their hosts, so it cannot reach a hand +/// object either. This object is staged to `Zone::Hand`, so no pass reseeds its +/// `mana_cost`. `GameObject`'s +/// `sync_missing_base_characteristics` — which the hand branch DOES call — +/// would in fact back-fill `base_mana_cost` from the live field, the opposite +/// direction. +/// +/// `base_mana_cost` is set for symmetry: it keeps the two fields from +/// disagreeing on a freshly minted object, and it keeps the helper correct if +/// the hardcoded `Zone::Hand` below ever becomes the battlefield, where the +/// reseed WOULD restore the default (free) cost over the printed one and +/// silently leave an "otherwise-unaffordable" premise measuring nothing. fn give_bolt_with_cost(state: &mut GameState, player: PlayerId, cost: ManaCost) -> ObjectId { let card_id = CardId(state.next_object_id); let id = engine::game::zones::create_object( @@ -868,7 +889,11 @@ fn v1_live_path_fetchland_seat_accepts_on_the_real_4p_board() { // `GameAction::is_mana_ability` filter. (It CAN contain a hand- or // graveyard-zone mana activation, which has its own candidate loop and is a // `GameAction::ActivateAbility` — so the filter never sees it. That class is - // not on this board, and the assertion below would catch it if it were.) + // not on this board, and what would catch it is the `non_pass.len() == 1` + // REACH-GUARD above, NOT the assertion below: such an activation is already + // IN the flat list, so it shows up as a second non-pass action, while + // `stage_two_action_set` only APPENDS `meaningful_sacrifice_mana_actions` — + // a non-sacrifice one adds nothing and `stage_two == flat` still holds.) // The set stage 2 actually folds over is WIDER still — `stage_two_action_set` // re-admits sacrifice-for-mana activations — so without this the flagship is // blind to exactly the class that would vacuate the feature: a seat that @@ -1166,39 +1191,25 @@ fn v8_precast_window_takes_the_same_efficacy_answer() { /// That gap between the two stages' inputs is the whole subject of this section. const IRONWORKS: &str = "Sacrifice an artifact: Add {C}{C}."; -/// Stage the Ironworks on `player`'s battlefield with its ability taken from the -/// REAL parser, not hand-built: the verdict under test is a function of the AST, -/// so a hand-written `AbilityDefinition` would let this section pass against a -/// shape the pipeline never produces. +/// Stage the Ironworks on `player`'s battlefield, ability taken from the REAL +/// parser (see `give_parsed_card`, which this is now one call into). +/// +/// It was an inlined copy of that helper until the two were diffed field by +/// field and found byte-equivalent — same parse call, same assertion text once +/// `name` is substituted, same `create_object` arguments, same core-type push, +/// same `base_card_types`/`abilities`/`base_abilities` assignment, same +/// `layers_dirty`. Delegating is behaviour-identical BY CONSTRUCTION, and the +/// divergence it prevents already fired once inside this same change: +/// `base_mana_cost` reached one construction path and not the other. fn give_ironworks(state: &mut GameState, player: PlayerId) -> ObjectId { - let parsed = - engine::parser::oracle::parse_oracle_text(IRONWORKS, "Krark-Clan Ironworks", &[], &[], &[]); - assert_eq!( - parsed.abilities.len(), - 1, - "PREMISE: Krark-Clan Ironworks parses to exactly one ability; got {:?}", - parsed.abilities - ); - let id = engine::game::zones::create_object( + give_parsed_card( state, - CardId(state.next_object_id), player, - "Krark-Clan Ironworks".to_string(), + "Krark-Clan Ironworks", + IRONWORKS, + CoreType::Artifact, Zone::Battlefield, - ); - let obj = state.objects.get_mut(&id).expect("just created"); - obj.card_types - .core_types - .push(engine::types::card_type::CoreType::Artifact); - obj.base_card_types = obj.card_types.clone(); - // CR 302.6 gates only creatures, but the mana-source sweep reads the flag - // uniformly; a permanent that has been under its controller's control since - // their most recent turn began is not sick. - obj.summoning_sick = false; - obj.abilities = std::sync::Arc::new(parsed.abilities.clone()); - obj.base_abilities = std::sync::Arc::new(parsed.abilities); - state.layers_dirty = LayersDirty::full(); - id + ) } /// A vanilla artifact for the Ironworks to eat. No abilities and no card claim: @@ -1312,8 +1323,9 @@ fn v9a_stage_two_folds_over_every_action_stage_one_counted() { /// /// This row's verdict is now OVER-DETERMINED, which changes what a future /// refinement does to it. The doc used to predict that a `filter_is_actor_owned` -/// which learns to prove "Sacrifice an artifact" actor-owned (CR 701.21a makes -/// that TRUE in fact) would red this row; it will not, because the unallowlisted +/// which learns to prove "Sacrifice an artifact" actor-owned (CR 701.21a bounds +/// the actor to permanents they CONTROL, which is the fact such a refinement +/// would be reading) would red this row; it will not, because the unallowlisted /// `Effect::Mana` head carries `MayInterfere` unconditionally. The guidance the /// prediction carried still stands and is the part to keep: if this row ever /// does red, re-derive the fixture on an ability whose reach is genuinely @@ -1371,10 +1383,16 @@ const DARK_RITUAL: &str = "Add {B}{B}{B}."; /// Lotus Petal, verbatim. CARD PROVENANCE. This is the maintainer's named /// "actor-owned sacrifice-for-mana" class: the parser emits "Sacrifice this -/// artifact" as a `TargetFilter::SelfRef`, which `filter_is_actor_owned` PROVES -/// actor-owned (CR 701.21a grounds why that is sound — a player can only -/// sacrifice a permanent they control), so the cost leg is confined and the mana -/// head carries the verdict ALONE. That is what makes it not a second `v9b`, +/// artifact" as a `TargetFilter::SelfRef`, which `filter_is_actor_owned` +/// returns true for, so the cost leg reads confined and the mana head carries +/// the verdict ALONE. CR 701.21a bounds the actor to permanents they CONTROL, +/// which is the most that predicate can be grounded in — its first sentence +/// sends the sacrificed card to its OWNER's graveyard, so control is not +/// ownership and "confined" is narrower than the predicate's name suggests. +/// `shortcut_efficacy`'s `mana_production_is_reach_not_a_confined_own_resource` +/// quotes the rule in full and names the limit; nothing here rests on it, +/// because the mana head decides this verdict either way. That is also what +/// makes this row not a second `v9b`, /// whose Ironworks reaches the same verdict through an UNPROVEN cost filter. const LOTUS_PETAL: &str = "{T}, Sacrifice this artifact: Add one mana of any color."; @@ -1386,9 +1404,9 @@ const SOL_RING: &str = "{T}: Add {C}{C}."; /// Stage a real card with its abilities taken from the REAL parser, not /// hand-built: every verdict below is a function of the AST, so a hand-written /// `AbilityDefinition` would let this section pass against a shape the pipeline -/// never produces. Same construction shape as `give_ironworks` above (left -/// untouched: it is shipped and `v9a`/`v9b` are green on it), parameterized over -/// the three axes the V10 rows vary. +/// never produces. Parameterized over the three axes the V10 rows vary, and the +/// SINGLE staging path for parsed cards in this file — `give_ironworks` above +/// delegates here rather than keeping the byte-equivalent copy it used to be. fn give_parsed_card( state: &mut GameState, player: PlayerId, @@ -1414,10 +1432,11 @@ fn give_parsed_card( let obj = state.objects.get_mut(&id).expect("just created"); obj.card_types.core_types.push(core_type); obj.base_card_types = obj.card_types.clone(); - // CR 302.6 gates only creatures, but the mana-source sweep reads the flag - // uniformly; a permanent that has been under its controller's control since - // their most recent turn began is not sick. - obj.summoning_sick = false; + // No `summoning_sick = false` here: it would be a no-op that reads as + // load-bearing. `zones::create_object` documents that it deliberately does + // NOT set the flag (only the real ETB pipeline's + // `reset_for_battlefield_entry` does), `add_to_zone` never touches it, and + // `GameObject::new` already defaults it to `false`. obj.abilities = std::sync::Arc::new(parsed.abilities.clone()); obj.base_abilities = std::sync::Arc::new(parsed.abilities); state.layers_dirty = LayersDirty::full(); From 6c9dd80944ce4f1ba8f39afebedcef4dd1fa7467 Mon Sep 17 00:00:00 2001 From: lgray Date: Sat, 8 Aug 2026 18:02:13 -0500 Subject: [PATCH 04/13] test(ai): close three evidence gaps in the mana-reach shortcut regressions Review-impl r2 passed all five of the maintainer's acceptance criteria and returned no BLOCK; these are its three test-quality [LOW] items. Test-only -- no production seam is touched, and each new assertion has a mutation that was RUN and observed to redden it, not merely derived. - v10b's ordinary-mana-source control rested on two negatives (the Sol Ring activation is absent from the flat list; stage two equals the flat list) whose outcome was dominated by an upstream conjunct. `stage_two_action_set` chains `meaningful_sacrifice_mana_actions` over `activatable_object_mana_actions`, which for a probe at `Priority` is literally `mana_sources::activatable_mana_actions_for_player` -- so a Sol Ring that was never swept is filtered out for a reason the row could not distinguish from the penalty filter it means to measure. MEASURED: with the new guard removed and the Sol Ring tapped, BOTH pre-existing negatives still pass. They were green for the wrong reason. Two guards close it at two different levels. The sweep function is `pub`, so the row now asserts definitionally that the Sol Ring IS in the list stage two filters; and it asserts the consequence the row's own doc already stated as fact but never checked -- that the Sol Ring's capacity of 2 unlocks Angel of the Ruins' {2} plainscycling in the flat list. Swapping in a capacity-1 source reddens only the second, so they are independently breakable rather than redundant. - v10a bounded only its ACCEPT arm. Its SHORTEN arm's discrimination rested on a derived-but-unasserted fact, so a future fixture or capacity change that added one MayInterfere action would over-determine the row silently instead of reddening. It now carries the threshold sentinel its sibling already had. MEASURED at 2 (the Ritual cast plus Terramorphic Expanse); staging one extra two-capacity source makes it 3 and reddens the sentinel. - v10a asserted only that the {B}{B}{B} Bolt is NOT castable, leaving the funding half -- the half its own name claims -- as prose. The row now measures it on the production instrument the way v10b's lemma does: a quarantined clone casts the Ritual through `apply`, drives the stack, and re-probes. A zone reach-guard pins that the Ritual actually resolved (CR 608.2n) before the funding assertion runs. Printing the Bolt at {B}{B}{B}{B} reddens the funding assertion alone; collapsing the drive bound reddens the zone guard alone. The row's doc previously said "The row does NOT assert the post-resolution board". That became false with this change, so it is corrected rather than left to mislead. CR 117.1d, CR 601.2g and CR 608.2n were each grepped from the rules text before being written. The first draft of the last one said 608.2m from memory, which is a different rule ("if it leaves the stack once it starts to resolve, it will continue to resolve fully"); the verification step caught it. Assisted-by: ClaudeCode:claude-opus-4.8 --- .../tests/integration/shorten_efficacy.rs | 111 ++++++++++++++++-- 1 file changed, 101 insertions(+), 10 deletions(-) diff --git a/crates/engine/tests/integration/shorten_efficacy.rs b/crates/engine/tests/integration/shorten_efficacy.rs index ea0cd592e9..5148f173de 100644 --- a/crates/engine/tests/integration/shorten_efficacy.rs +++ b/crates/engine/tests/integration/shorten_efficacy.rs @@ -1510,10 +1510,12 @@ fn give_sol_ring(state: &mut GameState, player: PlayerId) -> ObjectId { /// is exactly what the priority window buys, and CR 601.2g / CR 117.1d are the /// rules that make the mana available to pay a cost the moment it is produced. /// -/// The row does NOT assert the post-resolution board: reaching it would require -/// driving the Ritual through the stack, and the row's discriminating power does -/// not depend on it. The arithmetic is carried by the verbatim texts — the -/// Ritual adds `{B}{B}{B}`, the Bolt is printed at `{B}{B}{B}`. +/// BOTH halves of "otherwise-unaffordable" are measured, as in `v10b`. The +/// negative half is assertion 1 above, in both arms. The positive half is the +/// QUARANTINED funding lemma at the end of the row: the Ritual is driven through +/// the stack on the `apply()` boundary and the SAME Bolt is re-probed, so the +/// arithmetic (`{B}{B}{B}` added against `{B}{B}{B}` printed) is read off the +/// engine's castability gate rather than off the verbatim texts. /// /// MUTANT: restoring `Effect::Mana {..} => WindowReach::OwnResourcesOnly` as /// `effect_window_reach`'s first arm flips the SHORTEN arm to `Accept`. Under it @@ -1578,6 +1580,18 @@ fn v10a_a_cast_mana_spell_that_funds_an_unaffordable_answer_keeps_its_window() { non_pass_actions(&shorten_arm, P2) ); + let shorten_non_pass = non_pass_actions(&shorten_arm, P2); + assert_eq!( + shorten_non_pass.len(), + 2, + "ATTRIBUTION + THRESHOLD SENTINEL, mirroring `v10b`'s: the SHORTEN arm must be the \ + ACCEPT arm's single fetchland PLUS the Ritual cast, and nothing else. The Ritual sits \ + in `Zone::Hand`, which the battlefield-scoped `feasible_mana_capacity` cannot see, so \ + it unlocks no third action — but that is DERIVED, and a fixture or capacity change \ + that added one `MayInterfere` action here would over-determine this row silently \ + instead of reddening. MEASURED at 2 on the committed fixture; got {shorten_non_pass:?}" + ); + let accept_non_pass = non_pass_actions(&accept_arm, P2); assert_eq!( accept_non_pass.len(), @@ -1605,6 +1619,54 @@ fn v10a_a_cast_mana_spell_that_funds_an_unaffordable_answer_keeps_its_window() { "the pair's positive arm: producing mana is REACH (CR 106.1 / CR 106.4 / CR 601.2g). \ The ritual is the one object that differs, and accepting here surrenders a live out" ); + + // ── FUNDING LEMMA (CR 117.1d + CR 601.2g), deliberately QUARANTINED ── + // + // The negative half is already asserted above: the `{B}{B}{B}` Bolt is NOT + // castable in EITHER arm at poll time. This is the positive half — the half + // this row's title claims ("funds an unaffordable answer") — measured on the + // production instrument rather than left to the verbatim texts' arithmetic. + // + // QUARANTINE, mirroring `v10b`'s lemma: this clone NEVER reaches + // `smart_shortcut_response`. Both verdicts above are already taken; resolving + // the Ritual inside an arm would change the very action set they were taken + // on, and the funded board additionally unlocks the Angel's `{2}` cycling + // (`give_lotus_petal`'s capacity note), which carries `MayInterfere` on a + // route this pair does not model. + let (probe, probe_list) = engine::ai_support::shortcut_probe(&shorten_arm, P2); + let cast_ritual = probe_list + .iter() + .find(|a| matches!(a, GameAction::CastSpell { object_id, .. } if *object_id == ritual)) + .cloned() + .expect("the funder is castable — the reach-guard above asserts exactly this"); + let mut funded = probe.state().clone(); + apply(&mut funded, P2, cast_ritual).expect("the funder casts at P2's own probe priority"); + // Pass beats until the Ritual leaves the stack: it is on top, so the first + // full pass round resolves it (MEASURED: 4 beats on this 4p board). + for _ in 0..40 { + if !funded.stack.iter().any(|entry| entry.id == ritual) { + break; + } + dump_drive_one_beat(&mut funded).expect("passing priority resolves the top of the stack"); + } + assert_eq!( + funded.objects.get(&ritual).map(|o| o.zone), + Some(Zone::Graveyard), + "reach-guard: the Ritual must have RESOLVED, not merely been cast — CR 608.2n puts a \ + resolved instant into its owner's graveyard, so this is the observable that separates \ + 'it resolved' from 'the drive capped out' and would otherwise red the funding \ + assertion below for the wrong reason" + ); + assert!( + probe_actions(&funded, P2) + .iter() + .any(|a| matches!(a, GameAction::CastSpell { object_id, .. } if *object_id == bolt)), + "FUNDING: with the Ritual resolved, the engine's own castability gate says the SAME \ + `{{B}}{{B}}{{B}}` Bolt that is unaffordable in BOTH arms above IS payable. That is the \ + two-step the priority window buys (CR 117.1d / CR 601.2g), measured rather than \ + inferred from the printed texts; got {:?}", + non_pass_actions(&funded, P2) + ); } /// V10b — an ACTOR-OWNED sacrifice-for-mana seat keeps its window. This is the @@ -1773,6 +1835,24 @@ fn v10b_an_actor_owned_sacrifice_for_mana_seat_keeps_its_window() { let mut ordinary = polled.clone(); let sol_ring = give_sol_ring(&mut ordinary, P2); let (ordinary_probe, ordinary_flat) = engine::ai_support::shortcut_probe(&ordinary, P2); + // REACH-GUARD — the assertion the two negatives below rest on. `stage_two_action_set` + // filters `activatable_object_mana_actions`, and on a probe state parked at + // `Priority { player }` that IS + // `mana_sources::activatable_mana_actions_for_player(state, player)` — the same call, + // routed through `mana_action_player`'s `Priority` arm. Asserting the Sol Ring is IN + // that sweep is what makes "absent from the stage-2 set" attributable to the penalty + // filter; without it, the two negatives below cannot tell `ManaSourcePenalty::None` + // apart from "this object was never swept as a mana source at all". + assert!( + engine::game::mana_sources::activatable_mana_actions_for_player(ordinary_probe.state(), P2) + .contains(&GameAction::ActivateAbility { + source_id: sol_ring, + ability_index: 0, + }), + "REACH-GUARD: the Sol Ring must reach the sweep stage 2 filters, or the negatives \ + below pass because nothing was ever there to re-admit — which is not the \ + `None`-vs-`Sacrifices` penalty distinction this control claims to measure" + ); assert!( !ordinary_flat.iter().any( |a| matches!(a, GameAction::ActivateAbility { source_id, .. } if *source_id == sol_ring) @@ -1789,10 +1869,21 @@ fn v10b_an_actor_owned_sacrifice_for_mana_seat_keeps_its_window() { // NO verdict assertion here, deliberately. Sol Ring contributes 2 to // `feasible_mana_capacity`, which is enough to pay Angel of the Ruins' // hand-zone plainscycling already sitting in P2's hand on this fixture. That - // activation enters the FLAT list and is `MayInterfere` on two independent - // legs (`AbilityCost::Discard` is not allowlisted; its `sub_ability` moves a - // card to a HAND, which the anaphoric fetch disjunct does not cover), so - // this seat answers Shorten — through candidate affordability, a route this - // control does not model and claims nothing about. Asserting Accept here - // would assert a false fact about the board. + // activation enters the FLAT list — MEASURED, because the withheld verdict + // rests on it and a stale fixture could silently make it false: + let ordinary_non_pass = non_pass_actions(&ordinary, P2); + assert!( + ordinary_non_pass + .iter() + .any(|a| a.contains("Angel of the Ruins")), + "the Sol Ring's 2 mana must unlock the Angel's {{2}} plainscycling — this is the fact \ + that makes withholding a verdict assertion correct rather than evasive; got \ + {ordinary_non_pass:?}" + ); + // It is `MayInterfere` on two independent legs (`AbilityCost::Discard` is not + // allowlisted; its `sub_ability` moves a card to a HAND, which the anaphoric + // fetch disjunct does not cover), so this seat answers Shorten — through + // candidate affordability, a route this control does not model and claims + // nothing about. Asserting Accept here would assert a false fact about the + // board. } From 29a66524c703175df7aab15213e736c7b4060447 Mon Sep 17 00:00:00 2001 From: lgray Date: Sat, 8 Aug 2026 21:21:42 -0500 Subject: [PATCH 05/13] test(ai): pin membership, not just cardinality, in the mana-reach rows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two review findings, both cases of an assertion claiming more than it measured. The SHORTEN-arm sentinel bounded the action set's COUNT at 2 while its own prose claimed its MEMBERSHIP ("the ACCEPT arm's single fetchland PLUS the Ritual cast, and nothing else"). A fixture or capacity change that dropped the fetchland and added some unrelated MayInterfere action satisfies both `len() == 2` and the ritual reach-guard, so the row would have gone on measuring the wrong pair silently. Partitioning on the Ritual and asserting the remainder equals the ACCEPT arm's set closes that gap and pins the Ritual leg in the same equality: an empty or doubled partition reddens. The Angel guard matched on card name alone, but the fact it exists to establish is specific — that the Sol Ring's two mana unlock the {2} PLAINSCYCLING activation from HAND, which is what makes withholding a verdict assertion below it correct rather than evasive. A bare name match is also satisfied by some other Angel ability or an Angel in another zone. Ability index 0 is measured off the fixture, not assumed: object 210 carries exactly one parsed ability, tagged Cycling with activation_zone Hand. Both tightenings are additive; no existing assertion was weakened. Both were revert-probed, and the SHORTEN probe was chosen to be invisible to the two pre-existing guards so the new assertion is provably the one catching it. Assisted-by: ClaudeCode:claude-opus-5 --- .../tests/integration/shorten_efficacy.rs | 49 +++++++++++++++++-- 1 file changed, 44 insertions(+), 5 deletions(-) diff --git a/crates/engine/tests/integration/shorten_efficacy.rs b/crates/engine/tests/integration/shorten_efficacy.rs index 5148f173de..542dd82f9d 100644 --- a/crates/engine/tests/integration/shorten_efficacy.rs +++ b/crates/engine/tests/integration/shorten_efficacy.rs @@ -1608,6 +1608,36 @@ fn v10a_a_cast_mana_spell_that_funds_an_unaffordable_answer_keeps_its_window() { {accept_non_pass:?}" ); + // IDENTITY, not just cardinality. The sentinel above bounds the SHORTEN + // arm's COUNT; this bounds its MEMBERSHIP, which is what that sentinel's + // prose actually claims ("the ACCEPT arm's single fetchland PLUS the Ritual + // cast, and nothing else"). Without this pair, a fixture or capacity change + // that DROPPED the fetchland and added some unrelated `MayInterfere` action + // still satisfies `len() == 2` AND the ritual reach-guard, and the row + // silently measures the wrong pair. + // + // The fetchland is the same fixture object in both arms — both are clones + // of one `base`, and only the Ritual is staged on top — so + // `accept_non_pass[0]` is reusable verbatim instead of re-typing the three + // `contains` substrings. MEASURED: the two formatted strings are byte-equal + // (`ObjectId(203)` in both arms). + // + // The Ritual leg is matched on `object_id` ONLY. It must NOT name + // `payment_mode`, for the reason this test's doc comment gives. + let (_ritual_leg, other_legs): (Vec<&String>, Vec<&String>) = shorten_non_pass + .iter() + .partition(|a| a.starts_with(&format!("CastSpell {{ object_id: {ritual:?},"))); + assert_eq!( + other_legs, + vec![&accept_non_pass[0]], + "ATTRIBUTION: the SHORTEN arm's set MINUS the Ritual must be the ACCEPT arm's set \ + EXACTLY — same fetchland object, same zone, same controller. Anything else means the \ + pair varies more than the single object it claims to vary, and the Shorten verdict below \ + is no longer attributable to the Ritual. This one equality also pins the Ritual leg: if \ + the partition matched nothing, `other_legs` carries both members and reddens; if it \ + matched both, `other_legs` is empty and reddens; got {shorten_non_pass:?}" + ); + assert_eq!( engine::ai_support::smart_shortcut_response(&accept_arm, P2), ShortcutResponse::Accept, @@ -1873,12 +1903,21 @@ fn v10b_an_actor_owned_sacrifice_for_mana_seat_keeps_its_window() { // rests on it and a stale fixture could silently make it false: let ordinary_non_pass = non_pass_actions(&ordinary, P2); assert!( - ordinary_non_pass - .iter() - .any(|a| a.contains("Angel of the Ruins")), + ordinary_non_pass.iter().any(|a| { + a.contains("Angel of the Ruins") + && a.contains("#0 zone=Some(Hand)") + && a.contains("controller=Some(PlayerId(2))") + }), "the Sol Ring's 2 mana must unlock the Angel's {{2}} plainscycling — this is the fact \ - that makes withholding a verdict assertion correct rather than evasive; got \ - {ordinary_non_pass:?}" + that makes withholding a verdict assertion correct rather than evasive. Ability index 0 \ + is MEASURED off this fixture, never assumed: the Angel (object 210) carries EXACTLY ONE \ + parsed ability and it is the plainscycling one — `ability_tag: Cycling`, \ + `activation_zone: Hand`, cost `Composite[Mana{{generic 2}}, Discard{{self_ref}}]`, \ + effect `SearchLibrary` filtered to `Subtype(Plains)`. A bare name match would also be \ + satisfied by some OTHER Angel activated ability, or by an Angel in a zone whose \ + activation this Sol Ring does not pay for, neither of which supports the withheld \ + verdict. If this reddens, first check whether the INDEX shifted (a newly parsed second \ + ability) before concluding the semantics changed; got {ordinary_non_pass:?}" ); // It is `MayInterfere` on two independent legs (`AbilityCost::Discard` is not // allowlisted; its `sub_ability` moves a card to a HAND, which the anaphoric From 2e6e63b9e7bcf8ec9321611e9c44ebbc8b5d8c63 Mon Sep 17 00:00:00 2001 From: lgray Date: Sun, 9 Aug 2026 01:11:36 -0500 Subject: [PATCH 06/13] fix(ai): require a provably tapped entry before calling a fetch confined MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The mana-reach fix deleted the `Effect::Mana` allowlist arm because mana produced inside the priority window a Shorten hands the responder can fund an otherwise-unaffordable answer. The same mechanism was still live one arm over: `effect_window_reach` allowlisted ANY library-to-battlefield move as `OwnResourcesOnly`, so an untapped fetch — whose land taps for mana in that same window — read as confined. Measured on the production classifier, Crop Rotation and Nature's Lore both classified `OwnResourcesOnly`. `enter_tapped` was already destructured and ignored in that arm. The gate now requires the AST to PROVE a confined entry rather than merely suggest one (CR 110.5b: permanents enter untapped unless something says otherwise): `EtbTapState::Tapped`, with no conditional `enters_modified_if` rider that could change the arrival (CR 614.12 + CR 614.12a), not `enters_attacking` (CR 508.4), and `enters_under` absent or the actor. `Unspecified` and `Untapped` both fall out to `MayInterfere`. `SearchLibrary`'s `split` is the second door onto the battlefield — it moves its own found cards with no `ChangeZone` node — and is gated the same way. Both edits are conjunctive, so they can only move verdicts toward `MayInterfere`; neither can manufacture a false Accept. The gate is destination-scoped rather than tied to the anaphoric disjunct, because ownership does not stop an untapped land from producing mana. This DOES reclassify a live class, and an earlier revision of this message claimed otherwise. That claim came from a census that counted AST nodes over the whole card document; both halves were wrong. `printed_cards.rs` copies only `card_face.abilities` into `obj.abilities` and the classifier folds over `object.abilities` alone, so nodes in `triggers`/`static_abilities`/ `replacements` never reach it; and a verdict is a fold over a whole ability, so an ability already `MayInterfere` for an unrelated reason cannot flip whatever its `ChangeZone` node says. Re-measured at the enforcement surface — 22,717 top-level abilities in this candidate's own projection — this commit's two conjuncts move 195 of the 522 abilities that were still `OwnResourcesOnly` after the mana arm's deletion (37.4%), all in the `OwnResourcesOnly` -> `MayInterfere` direction, with 0 moving the other way. The `split` conjunct is inert at today's pool (9 of 9 battlefield-primary carriers already print tapped, none routes `rest_destination` to the battlefield); it is in because that door would otherwise stay open for the first card that walks through it. Adds `v10c`, a response-level regression driving the real 4p dump to a real `RespondToShortcut` and asserting on `smart_shortcut_response`, with a tapped control on the same board so the tap axis is what the row measures. Assisted-by: ClaudeCode:claude-opus-5 --- .../src/ai_support/shortcut_efficacy.rs | 404 ++++++++++++++++-- .../tests/integration/shorten_efficacy.rs | 340 +++++++++++++++ 2 files changed, 716 insertions(+), 28 deletions(-) diff --git a/crates/engine/src/ai_support/shortcut_efficacy.rs b/crates/engine/src/ai_support/shortcut_efficacy.rs index 1cbaf40f01..9f46f422e4 100644 --- a/crates/engine/src/ai_support/shortcut_efficacy.rs +++ b/crates/engine/src/ai_support/shortcut_efficacy.rs @@ -52,15 +52,19 @@ //! shape here at all, so the ability this module is handed looks strictly MORE //! confined than the printed card is — and narrowing apparent reach is the //! dangerous direction, because it produces a false `Accept`, not a false -//! `Shorten`. MEASURED at this base, via `parse_oracle_text` on the verbatim -//! MTGJSON text: `Invoke Justice[0]` parses to a lone [`Effect::ChangeZone`] -//! (`origin: Graveyard`, `target: Typed{controller: You}`) with no cost, no -//! `sub_ability` and every conservative-when-present field absent, so it -//! classifies `OwnResourcesOnly` — while the card's sentence continues "then +//! `Shorten`. The residual is stated structurally rather than pinned to a card, +//! because a card witness is only valid until the classifier moves under it: +//! this doc previously named `Invoke Justice[0]` — a lone +//! [`Effect::ChangeZone`] (`origin: Graveyard`, `target: Typed{controller: +//! You}`, no cost, no `sub_ability`) whose printed sentence continues "then //! distribute four +1/+1 counters among any number of creatures and/or Vehicles -//! target player controls". No widening of this module can close that: it -//! cannot read a clause that never reached it, so the residual is owned by the -//! parser, not by the classifier. +//! target player controls" — and the entry gate added below has since +//! reclassified it `MayInterfere`, because its battlefield entry is not +//! provably tapped. That narrowed the residual; it did not close it. What +//! remains live is the same shape at a destination the entry gate does not +//! constrain: a non-battlefield destination, or a provably tapped entry. No +//! widening of this module can reach any of it — it cannot read a clause that +//! never arrived, so the residual is owned by the parser, not the classifier. //! //! The structural guard is the compiler, not a test: //! [`ability_window_reach`] destructures [`AbilityDefinition`] **without @@ -84,7 +88,7 @@ use crate::types::ability::{ use crate::types::actions::GameAction; use crate::types::game_state::GameState; use crate::types::identifiers::ObjectId; -use crate::types::zones::Zone; +use crate::types::zones::{EtbTapState, Zone}; /// How far a single available action can reach, relative to the player who /// would take it. @@ -193,6 +197,17 @@ fn effect_window_reach(effect: &Effect) -> WindowReach { // // CR 400.1 is cited here only for why a bare `Zone::Library` // reference is ambiguous in the first place. + // + // `split` IS read, and it is the second door into the battlefield. A + // cultivate-class search moves its own found cards + // (`SearchDestinationSplit { primary_destination, primary_enter_tapped, + // rest_destination }`) WITHOUT any `ChangeZone` sub-ability, so the tap + // gate on that arm cannot see it. Same rule (CR 110.5b), same + // fail-closed direction: a split may reach the battlefield only through + // its `primary_destination` and only when `primary_enter_tapped` proves + // `Tapped`. `rest_destination` carries NO tap state at all, so it can + // never be proven tapped and a battlefield `rest_destination` is reach + // by construction. Effect::SearchLibrary { source_zones: _, filter: _, @@ -200,8 +215,15 @@ fn effect_window_reach(effect: &Effect) -> WindowReach { reveal: _, target_player, selection_constraint: _, - split: _, - } => WindowReach::of(target_player.is_none()), + split, + } => { + let split_entry_is_confined = split.as_ref().is_none_or(|split| { + (split.primary_destination != Zone::Battlefield + || matches!(split.primary_enter_tapped, EtbTapState::Tapped)) + && split.rest_destination != Zone::Battlefield + }); + WindowReach::of(target_player.is_none() && split_entry_is_confined) + } // CR 400.1: a library is a per-player zone, so shuffling is // confined exactly when the shuffled player is proven to be the actor. @@ -217,26 +239,81 @@ fn effect_window_reach(effect: &Effect) -> WindowReach { // `Library -> Battlefield / Any` node and still folds to // `MayInterfere` because its parent search carries // `target_player: Typed{controller: Opponent}`. + // + // OWNERSHIP IS NOT ENOUGH WHEN THE DESTINATION IS THE BATTLEFIELD. + // CR 110.5b: "Permanents enter the battlefield untapped, unflipped, face + // up, and phased in unless a spell or ability says otherwise." A land + // that arrives UNTAPPED taps for mana in the very window the Shorten + // hands the responder — CR 601.2g runs mana abilities during the cast + // they fund, and CR 302.6's summoning-sickness bar is a CREATURE rule + // that never applies to a land. So an untapped fetch is the + // `Effect::Mana` case below with one extra step, and the reasoning that + // refuses to allowlist mana production refuses this too. MEASURED at + // this base on the live parser: `Terramorphic Expanse[0]` and + // `Evolving Wilds[0]` carry `enter_tapped: Tapped`, while + // `Crop Rotation[0]` and `Nature's Lore[0]` — same anaphoric + // `Library -> Battlefield / Any` node, same absent cost — carry + // `Unspecified` and were allowlisted here until this gate. + // + // Fail-closed on the tap axis: ONLY a provably `Tapped` entry stays + // confined, so `Unspecified` (the serde default, i.e. the AST said + // nothing) and `Untapped` both fall out. A conditionally-untapped entry + // (a shock land's pay-life choice, a land-count gate) cannot be proven + // tapped from the AST and is therefore reach, which is the direction + // this module's §2 default exists to take. + // + // The gate is keyed on `destination` because tap state is meaningless + // anywhere else: a move to a hand, graveyard, library or exile is + // unaffected. It applies to BOTH disjuncts, not just the anaphoric one — + // proven ownership does not stop an untapped land from producing mana, + // so a graveyard-recursion shape reaching the battlefield untapped is + // the same defect through the other door. + // + // PROVABLY tapped, not NOMINALLY tapped. Three more of this variant's + // fields decide what actually arrives, and each one is read here rather + // than ignored, because `enter_tapped` alone is not proof: + // + // * `enters_modified_if: Some(filter)` makes the tapped rider + // CONDITIONAL on the moved object's characteristics (CR 614.12: check + // the characteristics of the permanent as it would exist on the + // battlefield; CR 614.12a: any choice it requires is made first), so + // an object that fails the filter enters untapped while the field + // still reads `Tapped`. Unprovable from the AST ⇒ reach. + // * `enters_under` (CR 110.2a: "that object enters the battlefield under + // that player's control unless the effect states otherwise") routes the + // entering permanent to whatever controller it names. Anything but the + // actor puts a permanent on ANOTHER player's board, which is reach by + // definition — tapped or not. + // * `enters_attacking` (CR 508.4) puts the creature into combat against + // a defending player, planeswalker or battle. That is the clearest + // possible touch outside the actor's own resources, and a tapped + // attacker is still an attacker. Effect::ChangeZone { origin, destination, target, owner_library: _, enter_transformed: _, - enters_under: _, - enter_tapped: _, - enters_attacking: _, + enters_under, + enter_tapped, + enters_attacking, up_to: _, enter_with_counters: _, conditional_enter_with_counters: _, face_down_profile: _, - enters_modified_if: _, - } => WindowReach::of( - filter_is_actor_owned(target) + enters_modified_if, + } => { + let object_is_confined = filter_is_actor_owned(target) || (matches!(target, TargetFilter::Any) && *origin == Some(Zone::Library) - && *destination == Zone::Battlefield), - ), + && *destination == Zone::Battlefield); + let entry_is_confined = *destination != Zone::Battlefield + || (matches!(enter_tapped, EtbTapState::Tapped) + && enters_modified_if.is_none() + && !*enters_attacking + && matches!(enters_under, None | Some(ControllerRef::You))); + WindowReach::of(object_is_confined && entry_is_confined) + } // NOT allowlisted — and `Effect::Mana` is the case that has to be NAMED // here rather than left to the reader, because an earlier revision of @@ -446,12 +523,20 @@ fn indexed_ability_window_reach( /// Missing an action here is an Accept by OMISSION — the direction that loses /// games. /// -/// ponytail: a fetched permanent that itself enables interference is not -/// modelled. Using it needs a further priority window, and this design does NOT -/// claim one is guaranteed — CR 732.1b says only that the shortcut rules *can -/// be used* on a loop, and CR 732.2a makes proposing -/// permissive ("may suggest"). -/// Scope, stated on BOTH axes: +/// ponytail: a fetched permanent that itself enables interference is modelled +/// only through its ARRIVAL STATE, never by walking its abilities. +/// `effect_window_reach` keeps a battlefield entry confined only when the AST +/// proves it arrives tapped (CR 110.5b), so the mana axis — the fetched land +/// that taps for mana inside this same window — is closed: an untapped entry +/// reads `MayInterfere`. +/// +/// What remains unmodelled, stated precisely rather than as a blanket: a +/// permanent that arrives TAPPED and still enables interference, via an ability +/// whose cost is not tapping (e.g. sacrifice-for-mana). Reaching that needs a +/// further priority window, and this design does NOT claim one is guaranteed — +/// CR 732.1b says only that the shortcut rules *can be used* on a loop, and +/// CR 732.2a makes proposing permissive ("may suggest"). +/// Scope of that remainder, on BOTH axes: /// - across windows: a bounded miss — a seat's fetched answer goes unused for /// THIS shortcut; /// - within the window: the worst case is NOT bounded by "one shortcut". On @@ -459,9 +544,10 @@ fn indexed_ability_window_reach( /// in-window cost of a missed out is elimination. /// /// Accepted because the miss requires the out to be reachable ONLY through the -/// fetched permanent; a directly-castable answer is already caught by the -/// top-level fold. Upgrade path: walk the fetched object's own abilities if a -/// real game shows a missed out. Owner: this lane, deferral burndown. +/// fetched permanent AND that permanent to arrive tapped; a directly-castable +/// answer is already caught by the top-level fold. Upgrade path: walk the +/// fetched object's own abilities if a real game shows a missed out. Owner: +/// this lane, deferral burndown. pub(crate) fn any_action_may_interfere(state: &GameState, actions: &[GameAction]) -> bool { actions.iter().any(|action| match action { GameAction::PassPriority => false, @@ -626,6 +712,36 @@ mod tests { oracle: "Exile target creature. Its controller may search their library for a basic land \ card, put that card onto the battlefield tapped, then shuffle.", }; + /// Nature's Lore, verbatim (MTGJSON `.data["Nature's Lore"][0].text`). The + /// MINIMAL PAIR against `RAMPANT_GROWTH` above: same sentence shape, same + /// absent cost, same anaphoric `Library -> Battlefield / Any` node — and it + /// differs by the ONE printed word (`tapped`) the gate reads. + const NATURES_LORE: Card = Card { + name: "Nature's Lore", + oracle: "Search your library for a Forest card, put that card onto the battlefield, \ + then shuffle.", + }; + /// Crop Rotation, verbatim (MTGJSON, both lines). The reviewer's named + /// residual. MEASURED on the live parser: the additional-cost line is NOT + /// carried (`cost: None`, one ability), so its verdict rides the zone-change + /// node alone — which is exactly why it was allowlisted before this gate. + const CROP_ROTATION: Card = Card { + name: "Crop Rotation", + oracle: "As an additional cost to cast this spell, sacrifice a land.\n\ + Search your library for a land card, put that card onto the battlefield, \ + then shuffle.", + }; + /// Cultivate, verbatim (MTGJSON). The SECOND door onto the battlefield: its + /// search carries a `SearchDestinationSplit` and moves the found cards + /// ITSELF, with no `ChangeZone` sub-ability for the tap gate to read. + /// MEASURED over the corpus: 12 abilities carry a split at all, and every + /// battlefield-primary one prints "tapped" — so this fixture is the class, + /// not an example of it. + const CULTIVATE: Card = Card { + name: "Cultivate", + oracle: "Search your library for up to two basic land cards, reveal those cards, put one \ + onto the battlefield tapped and the other into your hand, then shuffle.", + }; const DARK_RITUAL: Card = Card { name: "Dark Ritual", oracle: "Add {B}{B}{B}.", @@ -1079,4 +1195,236 @@ mod tests { // two MayInterfere verdicts above are attributable and not a constant. assert_eq!(reach(&RAMPANT_GROWTH, 0), WindowReach::OwnResourcesOnly); } + + /// The tap-state gate (CR 110.5b), on the MINIMAL PAIR. `Rampant Growth` and + /// `Nature's Lore` differ by one printed word, and every other axis this + /// classifier reads is identical: no cost, a `SearchLibrary` head with + /// `target_player: None`, and one anaphoric + /// `ChangeZone { Library -> Battlefield, target: Any }` sub-ability. So the + /// verdicts below are attributable to `enter_tapped` and to nothing else — + /// the first two assertions MEASURE that premise rather than assert it. + /// + /// Why the untapped one is reach: the fetched land arrives ready (CR 302.6's + /// summoning-sickness bar is a creature rule), taps for mana inside the + /// window the Shorten hands back, and CR 601.2g runs that mana ability during + /// the cast it funds. `v10c` in `tests/integration/shorten_efficacy.rs` + /// measures that whole chain on the real 4p board; this row pins the AST + /// premise it rests on. + /// + /// Revert-probe: in `effect_window_reach`'s `ChangeZone` arm, replace + /// `object_is_confined && entry_is_confined` with `object_is_confined` alone + /// (the pre-fix expression) — BOTH untapped rows flip to `OwnResourcesOnly`. + #[test] + fn an_untapped_fetch_is_reach_and_a_tapped_one_stays_confined() { + for card in [&NATURES_LORE, &CROP_ROTATION] { + let name = card.name; + assert!( + !head_is_unparsed(card, 0), + "VACUITY GUARD: {name}[0] must PARSE, or the row measures the fail-closed arm \ + instead of the zone-change node's own semantics" + ); + let def = ability(card, 0); + assert!( + def.cost.is_none(), + "PREMISE: {name}[0] carries no cost, so no cost leg can carry the verdict; got \ + {:?}", + def.cost + ); + assert_eq!( + effect_window_reach(&def.effect), + WindowReach::OwnResourcesOnly, + "PREMISE: {name}[0]'s SearchLibrary head is confined ON ITS OWN, so the verdict \ + below is produced by the zone-change sub-ability and by nothing else" + ); + assert_eq!( + reach(card, 0), + WindowReach::MayInterfere, + "{name}[0] puts a land onto the battlefield UNTAPPED (CR 110.5b), which taps for \ + mana inside the window the Shorten hands back — the Effect::Mana case with one \ + extra step" + ); + } + + // The tapped half of the pair, and the reach-guard that keeps the two + // MayInterfere verdicts above from being a constant. + assert_eq!( + reach(&RAMPANT_GROWTH, 0), + WindowReach::OwnResourcesOnly, + "the gate is on the TAP STATE, not on the fetch shape: the same sentence with \ + 'tapped' printed in it stays confined" + ); + + // Fail-closed direction, on all THREE `EtbTapState` variants, measured on + // the REAL parsed node rather than a hand-built one. Only a provably + // `Tapped` entry is allowlisted; `Unspecified` (the AST said nothing) and + // `Untapped` are both reach — which is what makes a conditionally-untapped + // entry (a shock land's pay-life choice, a land-count gate) safe by + // default instead of a shape this predicate would have to model. + let mut node = ability(&NATURES_LORE, 0) + .sub_ability + .as_ref() + .expect("PREMISE: Nature's Lore[0] carries the zone change as its sub_ability") + .effect + .as_ref() + .clone(); + for (state, expected) in [ + (EtbTapState::Tapped, WindowReach::OwnResourcesOnly), + (EtbTapState::Unspecified, WindowReach::MayInterfere), + (EtbTapState::Untapped, WindowReach::MayInterfere), + ] { + let Effect::ChangeZone { enter_tapped, .. } = &mut node else { + panic!("PREMISE: the sub-ability must head a ChangeZone; got {node:?}"); + }; + *enter_tapped = state; + assert_eq!( + effect_window_reach(&node), + expected, + "fail-closed on the tap axis: {state:?} must classify {expected:?}" + ); + } + } + + /// PROVABLY tapped, not NOMINALLY tapped — the three riders that decide what + /// actually arrives, plus the split that reaches the battlefield without a + /// `ChangeZone` node at all. + /// + /// Every row mutates ONE field of a REAL parsed node and re-measures, so the + /// unmutated verdict is each row's own positive control: the base node is + /// asserted `OwnResourcesOnly` first, which is what makes each flip + /// attributable to the field and not to the fixture. + /// + /// The corpus is why these are fixtures rather than hypotheticals: MEASURED + /// over every card in the pinned MTGJSON projection, 12 abilities carry a + /// `SearchDestinationSplit`, and NO ability that classifies + /// `OwnResourcesOnly` carries `enters_under`, `enters_attacking` or + /// `enters_modified_if` today. So these guards change no card's verdict at + /// this base — they close the door before a parser improvement or a new card + /// walks through it, in the one direction (toward `MayInterfere`) that can + /// never produce a false Accept. + #[test] + fn a_battlefield_entry_must_be_provably_tapped_actor_controlled_and_not_attacking() { + // ── the three ChangeZone riders, on Terramorphic's real fetch node ── + let base_node = ability(&TERRAMORPHIC, 0) + .sub_ability + .as_ref() + .expect("PREMISE: Terramorphic Expanse[0] carries the zone change as its sub_ability") + .effect + .as_ref() + .clone(); + assert_eq!( + effect_window_reach(&base_node), + WindowReach::OwnResourcesOnly, + "POSITIVE CONTROL: the unmutated tapped fetch node IS confined, so every flip below is \ + attributable to the single field it mutates" + ); + + let mut attacking = base_node.clone(); + let mut foreign = base_node.clone(); + let mut conditional = base_node.clone(); + let Effect::ChangeZone { + enters_attacking, .. + } = &mut attacking + else { + panic!("PREMISE: the fetch node must head a ChangeZone"); + }; + *enters_attacking = true; + let Effect::ChangeZone { enters_under, .. } = &mut foreign else { + panic!("PREMISE: the fetch node must head a ChangeZone"); + }; + *enters_under = Some(ControllerRef::Opponent); + let Effect::ChangeZone { + enters_modified_if, .. + } = &mut conditional + else { + panic!("PREMISE: the fetch node must head a ChangeZone"); + }; + *enters_modified_if = Some(TargetFilter::Any); + + for (label, node) in [ + ( + "enters_attacking (CR 508.4): a tapped attacker is still an attacker", + &attacking, + ), + ( + "enters_under (CR 110.2a): the permanent lands on ANOTHER player's board", + &foreign, + ), + ( + "enters_modified_if (CR 614.12 + CR 614.12a): the tapped rider is CONDITIONAL, so \ + enter_tapped == Tapped is not proof of a tapped entry", + &conditional, + ), + ] { + assert_eq!( + effect_window_reach(node), + WindowReach::MayInterfere, + "{label}" + ); + } + + // ── the split door, on Cultivate's real search node ── + assert!( + !head_is_unparsed(&CULTIVATE, 0), + "VACUITY GUARD: Cultivate[0] must PARSE, or this half measures the fail-closed arm" + ); + let mut search = ability(&CULTIVATE, 0).effect.as_ref().clone(); + let Effect::SearchLibrary { split, .. } = &search else { + panic!("PREMISE: Cultivate[0] must head a SearchLibrary; got {search:?}"); + }; + let split = split.as_ref().expect( + "PREMISE: Cultivate[0] carries a SearchDestinationSplit — this is the shape \ + that reaches the battlefield with no ChangeZone node for the tap gate to read", + ); + assert_eq!( + split.primary_destination, + Zone::Battlefield, + "PREMISE: the split's PRIMARY destination is the battlefield" + ); + assert_eq!( + split.primary_enter_tapped, + EtbTapState::Tapped, + "PREMISE: and the real card prints 'tapped', which is the only reason it stays confined" + ); + assert_eq!( + effect_window_reach(&search), + WindowReach::OwnResourcesOnly, + "POSITIVE CONTROL: the unmutated split IS confined, so the two flips below are \ + attributable to the mutated field" + ); + + for (state, expected) in [ + (EtbTapState::Tapped, WindowReach::OwnResourcesOnly), + (EtbTapState::Unspecified, WindowReach::MayInterfere), + (EtbTapState::Untapped, WindowReach::MayInterfere), + ] { + let Effect::SearchLibrary { + split: Some(split), .. + } = &mut search + else { + panic!("PREMISE: the mutated node must keep its split"); + }; + split.primary_enter_tapped = state; + assert_eq!( + effect_window_reach(&search), + expected, + "the split reaches the battlefield WITHOUT a ChangeZone node, so it takes the same \ + fail-closed tap gate: {state:?} must classify {expected:?}" + ); + } + + let Effect::SearchLibrary { + split: Some(split), .. + } = &mut search + else { + panic!("PREMISE: the mutated node must keep its split"); + }; + split.primary_enter_tapped = EtbTapState::Tapped; + split.rest_destination = Zone::Battlefield; + assert_eq!( + effect_window_reach(&search), + WindowReach::MayInterfere, + "`rest_destination` carries NO tap state of its own, so a battlefield rest can never be \ + proven tapped and is reach by construction" + ); + } } diff --git a/crates/engine/tests/integration/shorten_efficacy.rs b/crates/engine/tests/integration/shorten_efficacy.rs index 542dd82f9d..02772633a9 100644 --- a/crates/engine/tests/integration/shorten_efficacy.rs +++ b/crates/engine/tests/integration/shorten_efficacy.rs @@ -1401,6 +1401,29 @@ const LOTUS_PETAL: &str = "{T}, Sacrifice this artifact: Add one mana of any col /// stage-2 widening must not re-admit it. const SOL_RING: &str = "{T}: Add {C}{C}."; +/// Crop Rotation, verbatim, BOTH lines. CARD PROVENANCE (MTGJSON +/// `.data["Crop Rotation"][0].text`). The UNTAPPED fetch — the residual the +/// `enter_tapped` gate closes, and the class `Terramorphic Expanse` is NOT. +/// +/// MEASURED on the live parser: this text yields exactly ONE ability with +/// `cost: None` — the additional-cost line is not carried — heading +/// `SearchLibrary { filter: Typed[Land], target_player: None }` over a +/// `ChangeZone { Library -> Battlefield, target: Any, enter_tapped: Unspecified }` +/// over `Shuffle { Controller }`. So every leg but the tap state reads confined, +/// which is precisely why this card was allowlisted before the gate. Its search +/// filter is ANY land card, which is what lets the funding lemma below find a +/// real basic Swamp in P2's own recorded library instead of staging one. +const CROP_ROTATION: &str = "As an additional cost to cast this spell, sacrifice a land.\n\ + Search your library for a land card, put that card onto the \ + battlefield, then shuffle."; + +/// Rampant Growth, verbatim. CARD PROVENANCE. The TAPPED sibling and the whole +/// point of the matched pair: one printed word apart from Crop Rotation on every +/// axis this classifier reads, and the fetched land arrives unable to pay for +/// anything. +const RAMPANT_GROWTH: &str = "Search your library for a basic land card, put that card onto \ + the battlefield tapped, then shuffle."; + /// Stage a real card with its abilities taken from the REAL parser, not /// hand-built: every verdict below is a function of the AST, so a hand-written /// `AbilityDefinition` would let this section pass against a shape the pipeline @@ -1486,6 +1509,102 @@ fn give_lotus_petal(state: &mut GameState, player: PlayerId) -> ObjectId { ) } +/// Both fetches are staged as INSTANTS with no printed mana cost, for +/// `give_dark_ritual`'s reasons: without a core type the sorcery-timing gate +/// refuses the cast at this window and the funder never enters the action set, +/// and P2 controls no mana source so a printed cost would make the funder itself +/// uncastable and the row would measure an empty board twice. +/// +/// The type is card-faithful for Crop Rotation (a real instant) and is NOT for +/// Rampant Growth (a real sorcery). That deviation is deliberate and stated: the +/// control's subject is the TAP STATE of the fetched land, and putting the two +/// fetches on different timing rails would confound exactly that axis. +fn give_crop_rotation(state: &mut GameState, player: PlayerId) -> ObjectId { + give_parsed_card( + state, + player, + "Crop Rotation", + CROP_ROTATION, + CoreType::Instant, + Zone::Hand, + ) +} + +/// The tapped half of `v10c`'s pair. See `give_crop_rotation` for the staging. +fn give_rampant_growth(state: &mut GameState, player: PlayerId) -> ObjectId { + give_parsed_card( + state, + player, + "Rampant Growth", + RAMPANT_GROWTH, + CoreType::Instant, + Zone::Hand, + ) +} + +/// Cast `fetch` at P2's OWN probe priority and drive real `apply()` beats until +/// it resolves, selecting a basic **Swamp** at the search prompt. Returns the +/// resulting state and the fetched land. +/// +/// The Swamp is chosen by NAME rather than taken as the prompt's first offer: +/// several of the lands in P2's recorded library carry their own "enters tapped" +/// clause (Path of Ancestry, Goldmire Bridge, Temple of Silence, ...), and one of +/// those would make the funding lemma measure the FETCHED CARD's printed text +/// instead of the fetch effect's `enter_tapped` rider — the very axis under test. +fn resolve_fetch_choosing_a_swamp(arm: &GameState, fetch: ObjectId) -> (GameState, ObjectId) { + let (probe, list) = engine::ai_support::shortcut_probe(arm, P2); + let cast = list + .iter() + .find(|a| matches!(a, GameAction::CastSpell { object_id, .. } if *object_id == fetch)) + .cloned() + .expect("reach-guard: the fetch must be castable at P2's own probe priority"); + let mut state = probe.state().clone(); + // This drive is the first thing in this file to reach a library SHUFFLE, and + // a shuffle is the one operation that reads the live ChaCha20 stream. + // `restore_dump` above decodes through `into_game_state()`, which does NOT + // reseed the `#[serde(skip)]` `rng` — production's restore does that in a + // SECOND step (`engine-wasm`'s `restore_game_state` calls + // `GameState::rehydrate_rng` right after decoding, issue #5466). Without it + // the live stream sits at offset 0 while this dump's `rng_word_pos` is 313, + // and `game::library`'s `capture_rng_word_pos` fails the entropy-high-water + // invariant. Doing it here rather than in `restore_dump` keeps every other + // row in this file byte-identical: the reseed lands only on this quarantined + // funding clone, which no verdict is ever taken on. + state.rehydrate_rng(); + apply(&mut state, P2, cast).expect("the fetch casts at P2's own probe priority"); + + let mut chosen: Option = None; + for _ in 0..60 { + let prompt = match &state.waiting_for { + WaitingFor::SearchChoice { player, cards, .. } => Some((*player, cards.clone())), + _ => None, + }; + if let Some((player, cards)) = prompt { + let swamp = cards + .iter() + .copied() + .find(|id| state.objects.get(id).is_some_and(|o| o.name == "Swamp")) + .expect("P2's recorded library must offer a basic Swamp to this search"); + apply( + &mut state, + player, + GameAction::SelectCards { cards: vec![swamp] }, + ) + .expect("the searcher selects the Swamp"); + chosen = Some(swamp); + continue; + } + if chosen.is_some() && !state.stack.iter().any(|entry| entry.id == fetch) { + break; + } + dump_drive_one_beat(&mut state).expect("passing priority resolves the top of the stack"); + } + ( + state, + chosen.expect("reach-guard: the fetch must have PROMPTED a library search"), + ) +} + /// Capacity **2** (`Colorless { count: Fixed 2 }`), which is why the control it /// serves asserts re-admission ONLY and never a verdict — see `v10b`. fn give_sol_ring(state: &mut GameState, player: PlayerId) -> ObjectId { @@ -1926,3 +2045,224 @@ fn v10b_an_actor_owned_sacrifice_for_mana_seat_keeps_its_window() { // nothing about. Asserting Accept here would assert a false fact about the // board. } + +/// V10c — an UNTAPPED fetch is the `Effect::Mana` case with one extra step, so +/// the seat must keep its window; the TAPPED sibling still Accepts. +/// +/// `v10a`/`v10b` closed mana production. This row closes the residual one arm +/// over: `effect_window_reach`'s `ChangeZone` arm allowlisted ANY +/// `Library -> Battlefield` move, and a land that arrives untapped (CR 110.5b — +/// permanents enter untapped "unless a spell or ability says otherwise") taps for +/// mana inside the window the Shorten hands back. CR 302.6's summoning-sickness +/// bar is a CREATURE rule and never reaches a land, and CR 601.2g runs the mana +/// ability during the cast it funds. +/// +/// **The pair varies exactly one object** on the flagship board: a Crop Rotation +/// in P2's hand. Its four-legged AST is confined on every axis but the tap state +/// (MEASURED — see `CROP_ROTATION`), so the Shorten below is attributable to the +/// gate and to nothing else. +/// +/// **Otherwise-unaffordable, both halves, on the production instrument.** The +/// negative half is asserted in BOTH arms at poll time: the `{1}` answer is not +/// castable, because `feasible_mana_capacity` is battlefield-scoped and P2's +/// battlefield is one Terramorphic Expanse (capacity 0). The positive half is the +/// QUARANTINED funding lemma: the Rotation is driven through the stack on the +/// `apply()` boundary, a real basic Swamp from P2's own recorded library enters +/// UNTAPPED, and the SAME answer is re-probed against the engine's own +/// castability gate. +/// +/// **The tapped control is the load-bearing half of the pair.** The same drive +/// with Rampant Growth puts a land on the battlefield TAPPED, the answer stays +/// uncastable, and the seat still Accepts. That is what makes this gate a +/// distinction rather than a blanket flip — and it is the measurement that keeps +/// `v1`/`v1b`'s Terramorphic Accept correct rather than merely surviving. +/// +/// MUTANT: in `effect_window_reach`'s `ChangeZone` arm, replace +/// `object_is_confined && entry_is_confined` with `object_is_confined` alone (the +/// pre-fix expression) — the SHORTEN arm flips to `Accept` (the shipped defect +/// this row exists to catch). The ACCEPT arm and +/// the tapped control are unaffected by that mutation by construction — neither +/// carries an untapped battlefield entry at all — so the row cannot pass by +/// trivializing in either direction. +/// +/// Every `GameAction::CastSpell` matcher binds `{ object_id, .. }` and must NOT +/// name `payment_mode`, for `v10a`'s reason. +#[test] +fn v10c_an_untapped_fetch_that_funds_an_unaffordable_answer_keeps_its_window() { + let mut board = live_path_board(); + drive_to_offer(&mut board, 400).expect("CR 732.2a: the offer must fire on this real 4p drain"); + let polled = declare_and_poll(&board, P2); + + let mut base = polled.clone(); + // `{1}` generic, sized as in `v10b`: a generic residual is decided by + // comparing summed battlefield capacity against it, so ONE untapped Swamp is + // exactly enough and one tapped Swamp is exactly not — zero slack on both + // halves, decided on one read path. + let answer = give_bolt_with_cost(&mut base, P2, ManaCost::generic(1)); + + // ── arm ACCEPT: the answer alone ── + let accept_arm = base.clone(); + // ── arm SHORTEN: same board, same answer, PLUS the untapped fetch ── + let mut shorten_arm = base.clone(); + let rotation = give_crop_rotation(&mut shorten_arm, P2); + + for (label, arm) in [("ACCEPT", &accept_arm), ("SHORTEN", &shorten_arm)] { + assert!( + !probe_actions(arm, P2).iter().any( + |a| matches!(a, GameAction::CastSpell { object_id, .. } if *object_id == answer) + ), + "PREMISE ({label} arm): the answer must be OTHERWISE-UNAFFORDABLE at poll time — P2's \ + battlefield is one Terramorphic Expanse, which contributes 0 to the \ + battlefield-scoped capacity scan, and the scan cannot see the fetch-then-tap two-step \ + the window buys; got {:?}", + non_pass_actions(arm, P2) + ); + assert!( + stage_one_meaningful(arm, P2), + "reach-guard ({label} arm): stage 1 must return true, or the seat answers at stage 1 \ + and the fold under test never runs" + ); + } + + assert!( + probe_actions(&shorten_arm, P2).iter().any( + |a| matches!(a, GameAction::CastSpell { object_id, .. } if *object_id == rotation) + ), + "reach-guard: the FUNDER must really be castable, or the SHORTEN arm is the ACCEPT arm \ + with extra steps; got {:?}", + non_pass_actions(&shorten_arm, P2) + ); + + let shorten_non_pass = non_pass_actions(&shorten_arm, P2); + assert_eq!( + shorten_non_pass.len(), + 2, + "ATTRIBUTION + THRESHOLD SENTINEL, mirroring `v10a`'s: the SHORTEN arm must be the ACCEPT \ + arm's single fetchland PLUS the Rotation cast, and nothing else. A fixture or capacity \ + change that added a third `MayInterfere` action would over-determine this row silently \ + instead of reddening; got {shorten_non_pass:?}" + ); + + let accept_non_pass = non_pass_actions(&accept_arm, P2); + assert_eq!( + accept_non_pass.len(), + 1, + "ATTRIBUTION: the ACCEPT arm's action set must be the flagship's exactly, so its Accept is \ + the already-shipped verdict and the pair's ONLY variable is the Rotation; got \ + {accept_non_pass:?}" + ); + assert!( + accept_non_pass[0].contains("Terramorphic Expanse") + && accept_non_pass[0].contains("zone=Some(Battlefield)") + && accept_non_pass[0].contains("controller=Some(PlayerId(2))"), + "ATTRIBUTION: that one action must be P2's OWN battlefield fetchland; got \ + {accept_non_pass:?}" + ); + + // MEMBERSHIP, not just cardinality — `v10a`'s partition, for its reasons. + let (_rotation_leg, other_legs): (Vec<&String>, Vec<&String>) = shorten_non_pass + .iter() + .partition(|a| a.starts_with(&format!("CastSpell {{ object_id: {rotation:?},"))); + assert_eq!( + other_legs, + vec![&accept_non_pass[0]], + "ATTRIBUTION: the SHORTEN arm's set MINUS the Rotation must be the ACCEPT arm's set \ + EXACTLY — same fetchland object, same zone, same controller; got {shorten_non_pass:?}" + ); + + assert_eq!( + engine::ai_support::smart_shortcut_response(&accept_arm, P2), + ShortcutResponse::Accept, + "the pair's negative arm: an unaffordable answer and a confined TAPPED fetchland buy \ + nothing" + ); + assert_eq!( + engine::ai_support::smart_shortcut_response(&shorten_arm, P2), + ShortcutResponse::Shorten { at_iteration: 0 }, + "the pair's positive arm: a fetch that puts a land onto the battlefield UNTAPPED \ + (CR 110.5b) hands the seat mana inside its own window, so accepting here surrenders a \ + live out. The Rotation is the one object that differs" + ); + + // ── FUNDING LEMMA (CR 110.5b + CR 117.1d + CR 601.2g), QUARANTINED ── + // + // Both verdicts above are already taken; resolving the fetch inside an arm + // would change the very action set they were taken on, and the funded board + // additionally unlocks the Angel's `{2}` cycling (`give_lotus_petal`'s + // capacity note), which carries `MayInterfere` on a route this pair does not + // model. Same quarantine as `v10a`/`v10b`. + let (funded, fetched) = resolve_fetch_choosing_a_swamp(&shorten_arm, rotation); + let land = funded + .objects + .get(&fetched) + .expect("the fetched Swamp is a real object on this board"); + assert_eq!( + land.zone, + Zone::Battlefield, + "reach-guard: the Rotation must have RESOLVED and MOVED the land, not merely been cast — \ + otherwise the funding assertion below would red for the wrong reason" + ); + assert!( + !land.tapped, + "CR 110.5b: the fetched land enters UNTAPPED because this fetch says nothing otherwise. \ + This is the game-level fact the AST's `enter_tapped` stands for, measured on the object \ + rather than inferred from the printed text" + ); + assert!( + probe_actions(&funded, P2) + .iter() + .any(|a| matches!(a, GameAction::CastSpell { object_id, .. } if *object_id == answer)), + "FUNDING: with the fetched Swamp untapped, the engine's own castability gate says the SAME \ + `{{1}}` answer that is unaffordable in BOTH arms above IS payable. That is the two-step \ + the priority window buys (CR 117.1d / CR 601.2g), measured rather than inferred; got {:?}", + non_pass_actions(&funded, P2) + ); + + // ── THE TAPPED CONTROL — the half that makes this a distinction ── + // + // Same board, same answer, same drive, same chosen Swamp: only the fetch's + // printed tap rider differs. The land arrives tapped, funds nothing, and the + // seat still Accepts — which is `v1`/`v1b`'s Terramorphic verdict, measured + // here on the funding mechanism itself instead of assumed to survive. + let mut tapped_arm = base.clone(); + let growth = give_rampant_growth(&mut tapped_arm, P2); + assert_eq!( + non_pass_actions(&tapped_arm, P2).len(), + 2, + "reach-guard: the tapped fetch must be castable too, or its Accept below is produced by an \ + absent action rather than by a confined one; got {:?}", + non_pass_actions(&tapped_arm, P2) + ); + + let (tapped_funded, tapped_fetched) = resolve_fetch_choosing_a_swamp(&tapped_arm, growth); + let tapped_land = tapped_funded + .objects + .get(&tapped_fetched) + .expect("the fetched Swamp is a real object on this board"); + assert_eq!( + tapped_land.zone, + Zone::Battlefield, + "reach-guard: the tapped fetch must have resolved and moved the land as well" + ); + assert!( + tapped_land.tapped, + "CR 110.5b: 'unless a spell or ability says otherwise' — this one says otherwise, and this \ + assertion is what separates the pair" + ); + assert!( + !probe_actions(&tapped_funded, P2) + .iter() + .any(|a| matches!(a, GameAction::CastSpell { object_id, .. } if *object_id == answer)), + "FUNDING, negative half: a TAPPED land pays for nothing, so the identical answer stays \ + uncastable after the identical drive. Together with the assertion above, the tap state — \ + not the fetch shape — is what funds the out; got {:?}", + non_pass_actions(&tapped_funded, P2) + ); + assert_eq!( + engine::ai_support::smart_shortcut_response(&tapped_arm, P2), + ShortcutResponse::Accept, + "…and the classifier agrees with the board: a tapped fetch buys the seat nothing, so the \ + gate is a DISTINCTION on the tap axis and not a blanket flip of the fetch class. This is \ + the assertion an over-broad version of this fix destroys first" + ); +} From b4c760fe89ed7a437bcea1bb047a0f6939378e44 Mon Sep 17 00:00:00 2001 From: lgray Date: Sun, 9 Aug 2026 06:15:26 -0500 Subject: [PATCH 07/13] fix(ai): never call an object confined when its rules content is unreadable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `object_window_reach` folded only `obj.abilities`. `printed_cards.rs` splits one card face into four collections — `abilities`, `replacement_definitions`, `static_definitions` and `base_trigger_definitions` — so a card whose entire function lives in one of the other three was classified from the empty half. Measured witness: Stunning Reversal projects `abilities[0] = ChangeZone{origin: None, destination: Exile, target: SelfRef}`, which is confined on every conjunct this module reads, while its function is `replacements[0] = {event: GameLoss, mode: Mandatory}`. A seat holding it read `OwnResourcesOnly`, so the shortcut window was Accepted for the one card that exists to survive it. Both entry points now return `MayInterfere` on the presence of any of the three collections. The activation path gets the gate for its own reason rather than by symmetry: activating an ability is itself a game event, so a trigger on the same object can fire off the activation (CR 603.2) or off the cost being paid. The gate is presence, not content — this module has no classifier for those definition types, and the named upgrade path is to classify them the way `ability_window_reach` classifies `AbilityDefinition`. Same review round, one door over: `destination: Zone::Hand` leaves the confined set. A card put into hand is a castable card; after the spell that put it there resolves the active player receives priority (CR 117.3b) and priority then passes in turn order (CR 117.3d), so the responding seat gets it back still inside this window and a hand arrival is not provably confined. That hand gate went in on the `ChangeZone` arm only, and a review round found the `SearchLibrary` split still routing cards to hand unchecked. Both doors now go through one `landing_zone_is_confined` authority rather than two call sites answering the same question — two answers is how they drifted apart. The split is destructured `..`-free in the closure pattern for the same reason the `ChangeZone` arm is: a future `rest_enter_tapped` must be a compile error here, not a silently ignored arrival modifier. All changes are strictly narrowing — early returns to the absorbing value and one more conjunct each — so `May -> Own` is 0 by construction, not by census. Corpus, on this candidate's own SHA-bound projection of 22,717 top-level abilities: combined 2600 -> 151 confined (2449 flips, 94.2%, 0 widen); the entry gate alone 522 -> 151 (371, 71.1%). The hand authority accounts for 176 of those, split by door: 166 on `ChangeZone` across 154 cards, 10 on the split across 10 cards. All 12 split carriers route something to hand (9 via `rest_destination`, 3 via `primary_destination`), so Cultivate and its class leave the confined set. At object level, 72 printed cards have a fully-confined ability list and 19 carry an unreadable collection (7 static-only); 53 stay confined. That is a printed-card census and a lower bound on runtime objects — `game/stickers.rs` pushes into all three collections at runtime. The gate's price, stated rather than buried: Diligent Farmhand fetches a basic land TAPPED and flips anyway, on one static scoped `active_zones: ["Graveyard"]` that cannot touch this window. It is the only one of the 19 provably inert by its own zone scope; presence-gating cannot see that, and classifying the collections is what buys it back. Tests: `an_object_whose_rules_content_this_module_cannot_read_is_never_confined` covers all three disjuncts — replacement, trigger (through the real `materialize_base_trigger_definitions()` wiring, with a premise that the field the gate reads is populated) and static — each with the other two cleared first, so every verdict is attributable to one collection. `a_destination_is_confined_only_when_the_seat_cannot_act_on_what_lands_there` walks the destination axis on a real parsed node whose target is `SelfRef`, so destination is the only free variable. The split row asserts Cultivate's real `rest_destination == Hand` premise and mutates that one field as its control: since all 12 carriers touch hand, no real card can serve as the tap-axis positive control, and the test says so instead of implying live coverage. Revert-probed: each gate and each conjunct cut alone from pristine source reds its own row and leaves its neighbours green. Assisted-by: ClaudeCode:claude-opus-4.8 --- .../src/ai_support/shortcut_efficacy.rs | 437 +++++++++++++++++- 1 file changed, 414 insertions(+), 23 deletions(-) diff --git a/crates/engine/src/ai_support/shortcut_efficacy.rs b/crates/engine/src/ai_support/shortcut_efficacy.rs index 9f46f422e4..5d1bf8d0c4 100644 --- a/crates/engine/src/ai_support/shortcut_efficacy.rs +++ b/crates/engine/src/ai_support/shortcut_efficacy.rs @@ -83,7 +83,8 @@ //! resources — would be structurally invisible. use crate::types::ability::{ - AbilityCost, AbilityDefinition, ControllerRef, Effect, FilterProp, PlayerFilter, TargetFilter, + AbilityCost, AbilityDefinition, ControllerRef, Effect, FilterProp, PlayerFilter, + SearchDestinationSplit, TargetFilter, }; use crate::types::actions::GameAction; use crate::types::game_state::GameState; @@ -169,6 +170,41 @@ fn filter_is_actor_owned(filter: &TargetFilter) -> bool { } } +/// Is a landing zone confined — i.e. can the seat NOT act on what arrives there, +/// inside the window the Shorten hands back? +/// +/// This is the single authority for that question, and it exists because the two +/// doors out of a library drifted apart exactly once: the `ChangeZone` arm gated +/// `Zone::Hand` while the `SearchLibrary` split arm gated only `Zone::Battlefield`, +/// so a `SearchDestinationSplit` routing cards to hand stayed classified confined. +/// MEASURED at that point: all twelve split carriers in `card-data.json` route +/// something to hand — nine via `rest_destination` (the Cultivate class: land to +/// the battlefield tapped, the REST to hand) and three via `primary_destination` +/// (Final Parting, Fork in the Road, Jarad's Orders). Two call sites answering one +/// question is how that happens, so there is now one function and no second answer. +/// +/// * `Zone::Battlefield` — CR 110.5b: permanents enter untapped unless something +/// says otherwise, and an untapped permanent taps for mana during the very cast +/// it funds (CR 601.2g). Only a PROVABLY tapped arrival is confined. +/// * `Zone::Hand` — a card in hand is a castable card. After the spell that put it +/// there resolves the active player receives priority (CR 117.3b) and priority +/// then passes in turn order (CR 117.3d), so the responding seat gets it back +/// still inside this window. The AST carries nothing that could prove the card +/// uncastable. +/// * Everything else — graveyard, library, exile, command — puts the card where the +/// actor needs some FURTHER permission to use it, and that permission would itself +/// be an ability this fold already reads. +/// +/// Callers still apply their own extra conjuncts (the battlefield riders on +/// `ChangeZone`); this answers the destination question only. +fn landing_zone_is_confined(destination: Zone, tapped: EtbTapState) -> bool { + match destination { + Zone::Battlefield => matches!(tapped, EtbTapState::Tapped), + Zone::Hand => false, + _ => true, + } +} + /// Reach of one effect node. Three allowlisted shapes; everything else is /// interference by default (see the module doc, §2). fn effect_window_reach(effect: &Effect) -> WindowReach { @@ -217,11 +253,26 @@ fn effect_window_reach(effect: &Effect) -> WindowReach { selection_constraint: _, split, } => { - let split_entry_is_confined = split.as_ref().is_none_or(|split| { - (split.primary_destination != Zone::Battlefield - || matches!(split.primary_enter_tapped, EtbTapState::Tapped)) - && split.rest_destination != Zone::Battlefield - }); + // Destructured `..`-free for the same reason `Effect::ChangeZone` is: a + // new field on `SearchDestinationSplit` (a `rest_enter_tapped`, say) must + // be a COMPILE ERROR here rather than a silently ignored arrival modifier. + // Reading the split by `.field` is exactly how the `Hand` hole survived. + let split_entry_is_confined = split.as_ref().is_none_or( + |SearchDestinationSplit { + primary_destination, + primary_count: _, + primary_enter_tapped, + rest_destination, + }| { + // Both destinations go through the SAME authority as the + // `ChangeZone` arm. `rest_destination` carries no tap state at + // all, so it is asked with `Unspecified` and can never be proven + // tapped — a battlefield `rest_destination` is reach by + // construction, and a hand one is reach because hand always is. + landing_zone_is_confined(*primary_destination, *primary_enter_tapped) + && landing_zone_is_confined(*rest_destination, EtbTapState::Unspecified) + }, + ); WindowReach::of(target_player.is_none() && split_entry_is_confined) } @@ -262,12 +313,39 @@ fn effect_window_reach(effect: &Effect) -> WindowReach { // tapped from the AST and is therefore reach, which is the direction // this module's §2 default exists to take. // - // The gate is keyed on `destination` because tap state is meaningless - // anywhere else: a move to a hand, graveyard, library or exile is - // unaffected. It applies to BOTH disjuncts, not just the anaphoric one — - // proven ownership does not stop an untapped land from producing mana, - // so a graveyard-recursion shape reaching the battlefield untapped is - // the same defect through the other door. + // TWO destinations are gated, for the same reason and by different + // evidence. The question this module asks is never "is the moved card + // the actor's own?" — the deleted `Effect::Mana` arm is what happens when + // ownership is mistaken for confinement. It is "can the seat DO something + // with the result inside the window the Shorten hands back?" + // + // * `Battlefield` — an untapped permanent taps for mana during the very + // cast it funds (CR 601.2g), so only a PROVABLY tapped arrival is + // confined. This applies to BOTH disjuncts, not just the anaphoric one: + // proven ownership does not stop an untapped land producing mana, so a + // graveyard-recursion shape reaching the battlefield untapped is the + // same defect through the other door. + // * `Hand` — a card put into hand is a CASTABLE card. When the spell that + // put it there finishes resolving, the active player receives priority + // (CR 117.3b) and priority then passes in turn order (CR 117.3d), so the + // responding seat gets it back still inside this window and can cast it. + // That is the `Effect::Mana` argument with one extra step, exactly as the + // untapped fetch was, and the AST carries nothing that could prove the + // returned card uncastable. MEASURED with the hand gate held off, 327 + // abilities are confined and 176 of them move a card to hand — 166 + // through this arm and 10 through the `SearchLibrary` split, which is + // why both doors now share `landing_zone_is_confined`. The witnesses are + // instant-speed: `Auroral Procession` returns ANY graveyard card, + // including an instant. Gating both doors leaves 151 confined abilities, + // 102 of which reach the battlefield, so the flagship tapped-fetch + // Accept is untouched: this closes a door, it does not vacate the + // feature. + // + // No other destination is gated, and that is a claim about what the seat + // can act with, not an oversight: a move to graveyard, library or exile + // puts the card somewhere the actor cannot cast or activate it from + // inside this window without some FURTHER permission, which would itself + // be an ability this fold already reads. // // PROVABLY tapped, not NOMINALLY tapped. Three more of this variant's // fields decide what actually arrives, and each one is read here rather @@ -307,11 +385,11 @@ fn effect_window_reach(effect: &Effect) -> WindowReach { || (matches!(target, TargetFilter::Any) && *origin == Some(Zone::Library) && *destination == Zone::Battlefield); - let entry_is_confined = *destination != Zone::Battlefield - || (matches!(enter_tapped, EtbTapState::Tapped) - && enters_modified_if.is_none() - && !*enters_attacking - && matches!(enters_under, None | Some(ControllerRef::You))); + let entry_is_confined = landing_zone_is_confined(*destination, *enter_tapped) + && (*destination != Zone::Battlefield + || (enters_modified_if.is_none() + && !*enters_attacking + && matches!(enters_under, None | Some(ControllerRef::You)))); WindowReach::of(object_is_confined && entry_is_confined) } @@ -482,6 +560,34 @@ fn ability_window_reach(def: &AbilityDefinition) -> WindowReach { /// Fold every ability an object carries. A missing object, or one carrying no /// abilities at all, is `MayInterfere` — the fail-closed direction, and the one /// that keeps an empty fold from being proven confined by its identity element. +/// +/// `abilities` is NOT the whole of an object's rules content. `game::printed_cards` +/// splits a card face across four collections — `obj.abilities`, +/// `obj.trigger_definitions`, `obj.replacement_definitions` and +/// `obj.static_definitions` — and this module can only classify the first, because +/// `ability_window_reach` destructures an `AbilityDefinition` and the other three +/// carry different types entirely. Folding only `abilities` and returning +/// `OwnResourcesOnly` would therefore prove a card confined from whichever fraction +/// of it happens to be ability-shaped. +/// +/// That is not hypothetical. MEASURED on `data/card-data.json`: `Stunning Reversal` +/// projects `abilities` = one `ChangeZone { destination: Exile, target: SelfRef }` +/// — actor-owned, non-battlefield, hence confined on every conjunct this module +/// reads — while its entire function lives in `replacements[0]`, a `GameLoss` +/// replacement ("The next time you would lose the game this turn, instead draw +/// seven cards and your life total becomes 1"). A seat holding it would have read +/// `OwnResourcesOnly` and Accepted the very shortcut the card exists to survive. +/// Per this module's §2 that is the losing direction, and it is the same defect +/// class as the deleted `Effect::Mana` arm: reasoning from the part of the card the +/// classifier can see instead of from what the seat can do. +/// +/// So a non-empty unreadable collection is `MayInterfere` — not because those +/// definitions are known to interfere, but because this module cannot prove they +/// do not, which is the only warrant `OwnResourcesOnly` ever has. Reading them +/// properly (classifying `TriggerDefinition` / `ReplacementDefinition` / +/// `StaticDefinition` the way `ability_window_reach` classifies an +/// `AbilityDefinition`) is the named upgrade path; until then the gate is +/// presence, and presence is conservative. fn object_window_reach(state: &GameState, object_id: ObjectId) -> WindowReach { let Some(object) = state.objects.get(&object_id) else { return WindowReach::MayInterfere; @@ -489,6 +595,12 @@ fn object_window_reach(state: &GameState, object_id: ObjectId) -> WindowReach { if object.abilities.is_empty() { return WindowReach::MayInterfere; } + if !object.trigger_definitions.is_empty() + || !object.replacement_definitions.is_empty() + || !object.static_definitions.is_empty() + { + return WindowReach::MayInterfere; + } object .abilities .iter() @@ -499,15 +611,31 @@ fn object_window_reach(state: &GameState, object_id: ObjectId) -> WindowReach { /// Reach of one indexed activated ability. An unresolvable object or an /// out-of-range index is `MayInterfere`. +/// +/// Carries the same unreadable-collection gate as `object_window_reach`, and for a +/// reason specific to this path rather than by symmetry: activating an ability is +/// itself a game event, so a trigger on the SAME object can fire off the activation +/// (CR 603.2) or off the cost being paid, and a static ability can change what the +/// activation is allowed to do. This module cannot classify any of those three +/// collections, so an object carrying one is not provably confined no matter how +/// confined the indexed ability reads on its own. fn indexed_ability_window_reach( state: &GameState, source_id: ObjectId, ability_index: usize, ) -> WindowReach { - state - .objects - .get(&source_id) - .and_then(|object| object.abilities.get(ability_index)) + let Some(object) = state.objects.get(&source_id) else { + return WindowReach::MayInterfere; + }; + if !object.trigger_definitions.is_empty() + || !object.replacement_definitions.is_empty() + || !object.static_definitions.is_empty() + { + return WindowReach::MayInterfere; + } + object + .abilities + .get(ability_index) .map_or(WindowReach::MayInterfere, ability_window_reach) } @@ -567,6 +695,7 @@ pub(crate) fn any_action_may_interfere(state: &GameState, actions: &[GameAction] #[cfg(test)] mod tests { use super::*; + use crate::game::zones::create_object; use crate::parser::oracle::parse_oracle_text; /// A card as the pipeline sees it: its REAL printed name plus its verbatim @@ -742,6 +871,10 @@ mod tests { oracle: "Search your library for up to two basic land cards, reveal those cards, put one \ onto the battlefield tapped and the other into your hand, then shuffle.", }; + const SPREADING_SEAS: Card = Card { + name: "Spreading Seas", + oracle: "Enchant land\nWhen this Aura enters, draw a card.\nEnchanted land is an Island.", + }; const DARK_RITUAL: Card = Card { name: "Dark Ritual", oracle: "Add {B}{B}{B}.", @@ -751,6 +884,15 @@ mod tests { oracle: "{T}, Sacrifice this artifact: Add one mana of any color.", }; + /// Verbatim from the pinned MTGJSON `AtomicCards.json` (`{3}{B}`, Instant), + /// not from memory. The two lines matter in opposite directions: the SECOND + /// is all this module can read, and the FIRST is the entire card. + const STUNNING_REVERSAL: Card = Card { + name: "Stunning Reversal", + oracle: "The next time you would lose the game this turn, instead draw seven cards \ + and your life total becomes 1.\nExile Stunning Reversal.", + }; + /// V8 — the classifier is correct across the whole class, in BOTH /// directions. Acceptance (a) must be confined; every acceptance-(b) /// interaction, the graveyard-hate class the origin-keyed predecessor rule @@ -1041,6 +1183,227 @@ mod tests { ); } + /// An object is not the same thing as its ability list, and proving the + /// ability list confined proves nothing about the object. + /// + /// `game::printed_cards` splits one card face across four collections. This + /// module can classify exactly one of them. Before the gate in + /// `object_window_reach`, a card whose ability list was the confined fraction + /// and whose real content sat in another collection read `OwnResourcesOnly`. + /// + /// The witness is real, not constructed: `Stunning Reversal` parses to one + /// ability — `Exile ~`, i.e. `ChangeZone { destination: Exile, target: SelfRef + /// }`, actor-owned and off the battlefield, so confined on every conjunct this + /// module reads — plus one `GameLoss` replacement carrying the whole card. A + /// seat holding it would have Accepted the shortcut the card exists to + /// survive, which is the direction §2 calls the one that loses games. + /// + /// Discrimination is measured, not asserted, and by construction rather than + /// by a second fixture: the two objects below differ in exactly one field. + /// The CONTROL clears `replacement_definitions` and nothing else, and it must + /// return `OwnResourcesOnly` — so the guarded verdict cannot be a constant, + /// and it is attributable to that field alone. + /// + /// Revert-probe: delete the three `is_empty()` checks from + /// `object_window_reach` and this row's first assertion reds while the control + /// stays green. + #[test] + fn an_object_whose_rules_content_this_module_cannot_read_is_never_confined() { + let parsed = parse_oracle_text( + STUNNING_REVERSAL.oracle, + STUNNING_REVERSAL.name, + &[], + &[], + &[], + ); + assert_eq!( + parsed.abilities.len(), + 1, + "PREMISE: the card projects exactly one ability; got {:?}", + parsed.abilities + ); + assert_eq!( + parsed.replacements.len(), + 1, + "PREMISE: and exactly one replacement — the half this module cannot read; got {:?}", + parsed.replacements + ); + assert_eq!( + ability_window_reach(&parsed.abilities[0]), + WindowReach::OwnResourcesOnly, + "PREMISE: the ability half really is confined on its own, so the verdict below is \ + produced by the GATE and not by the ability list" + ); + + // `game::zones::create_object` is the shared primitive for this: it allocates the id, + // builds the object AND registers it in its zone. Hand-rolling the insert here would + // duplicate it and, worse, would leave the object absent from the hand's own id list. + let mut state = GameState::default(); + let id = create_object( + &mut state, + crate::types::identifiers::CardId(1), + crate::types::player::PlayerId(0), + STUNNING_REVERSAL.name.to_string(), + Zone::Hand, + ); + let object = state.objects.get_mut(&id).expect("just created"); + object.abilities = std::sync::Arc::new(parsed.abilities.clone()); + object.replacement_definitions = parsed.replacements.clone().into(); + + assert_eq!( + object_window_reach(&state, id), + WindowReach::MayInterfere, + "a GameLoss replacement this module cannot classify is not proof of confinement" + ); + assert_eq!( + indexed_ability_window_reach(&state, id, 0), + WindowReach::MayInterfere, + "the activation path takes the same gate: a trigger or replacement on the SAME object \ + can fire off the activation (CR 603.2)" + ); + + // CONTROL — one field cleared IN PLACE, nothing else touched. + state + .objects + .get_mut(&id) + .expect("still present") + .replacement_definitions = Vec::new().into(); + assert_eq!( + object_window_reach(&state, id), + WindowReach::OwnResourcesOnly, + "REACH-GUARD: with the unreadable collection gone the SAME object is confined, so the \ + two verdicts above are attributable to that one field and are not a constant" + ); + + // The TRIGGER disjunct, exercised through the real materialization path rather than + // asserted from reading it. The three collections are not wired alike: `printed_cards` + // assigns `replacement_definitions` and `static_definitions` directly, but routes triggers + // through `base_trigger_definitions` + `materialize_base_trigger_definitions()`. A gate that + // reads the materialized field while the pipeline only ever fills the printed one would be + // silently blind to every trigger, so the wiring is the thing under test here, not the + // `is_empty()` call. + let triggers = parse_oracle_text( + SOUL_GUIDE_LANTERN.oracle, + SOUL_GUIDE_LANTERN.name, + &[], + &[], + &[], + ) + .triggers; + assert_eq!( + triggers.len(), + 1, + "PREMISE: Soul-Guide Lantern's ETB is a real parsed trigger; got {triggers:?}" + ); + let object = state.objects.get_mut(&id).expect("still present"); + object.base_trigger_definitions = std::sync::Arc::new(triggers); + object.materialize_base_trigger_definitions(); + assert!( + !object.trigger_definitions.is_empty(), + "PREMISE: materializing the printed triggers must populate the field the gate reads — \ + if this ever fails the gate is blind to triggers no matter what it returns" + ); + assert_eq!( + object_window_reach(&state, id), + WindowReach::MayInterfere, + "a trigger this module cannot classify is not proof of confinement either" + ); + + // The STATIC disjunct — the third of three, and the one a review round + // correctly noted had neither a test nor a probe. 7 of the 19 printed cards + // this gate flips at today's pool are static-only carriers, so an untested + // disjunct here would leave better than a THIRD of the gate's own measured + // effect unexercised. + let object = state.objects.get_mut(&id).expect("still present"); + object.base_trigger_definitions = std::sync::Arc::new(Vec::new()); + object.materialize_base_trigger_definitions(); + assert!( + object.trigger_definitions.is_empty(), + "PREMISE: triggers cleared, so the next verdict cannot be the trigger clause again" + ); + assert_eq!( + object_window_reach(&state, id), + WindowReach::OwnResourcesOnly, + "CONTROL: with every unreadable collection empty the SAME object is confined again" + ); + let parsed_statics = + parse_oracle_text(SPREADING_SEAS.oracle, SPREADING_SEAS.name, &[], &[], &[]).statics; + assert!( + !parsed_statics.is_empty(), + "PREMISE: Spreading Seas carries a real parsed static ability; got {parsed_statics:?}" + ); + state + .objects + .get_mut(&id) + .expect("still present") + .static_definitions = parsed_statics.into(); + assert_eq!( + object_window_reach(&state, id), + WindowReach::MayInterfere, + "nor is a static ability this module cannot classify proof of confinement" + ); + } + + /// The destination axis, on a REAL parsed node, one field mutated. + /// + /// `Stunning Reversal`'s ability is `ChangeZone { destination: Exile, target: + /// SelfRef }`, so `object_is_confined` holds by ownership alone and does not + /// depend on `destination` — which makes `destination` the only thing the + /// verdicts below can be measuring. (The anaphoric fetch node cannot serve + /// here: its `object_is_confined` disjunct itself requires + /// `destination == Battlefield`, so mutating the field would move two things + /// at once and the row would prove nothing.) + /// + /// `Hand` is gated for the same reason a `Battlefield`-untapped arrival is: a + /// card put into hand is a CASTABLE card. The spell that put it there + /// resolves, the active player receives priority (CR 117.3b) and priority then + /// passes in turn order (CR 117.3d), so the responding seat gets it back still + /// inside this window and can cast it. Graveyard, library and exile are not gated + /// because the actor cannot cast or activate from them without some further + /// permission — which would itself be an ability this fold already reads. + /// + /// Both directions are present, so neither verdict can be a constant. + #[test] + fn a_destination_is_confined_only_when_the_seat_cannot_act_on_what_lands_there() { + let parsed = parse_oracle_text( + STUNNING_REVERSAL.oracle, + STUNNING_REVERSAL.name, + &[], + &[], + &[], + ); + let node = parsed.abilities[0].effect.as_ref().clone(); + let Effect::ChangeZone { target, .. } = &node else { + panic!("PREMISE: the node must head a ChangeZone; got {node:?}"); + }; + assert!( + filter_is_actor_owned(target), + "PREMISE: the target is actor-owned, so `object_is_confined` holds independently of \ + `destination` and every verdict below is attributable to the destination alone" + ); + + for (zone, want) in [ + (Zone::Exile, WindowReach::OwnResourcesOnly), + (Zone::Graveyard, WindowReach::OwnResourcesOnly), + (Zone::Library, WindowReach::OwnResourcesOnly), + (Zone::Hand, WindowReach::MayInterfere), + // `enter_tapped` is `Unspecified` on this node, so the battlefield + // arm is reach for the TAP reason, not the destination reason. + (Zone::Battlefield, WindowReach::MayInterfere), + ] { + let mut mutated = node.clone(); + let Effect::ChangeZone { destination, .. } = &mut mutated else { + unreachable!("just matched above") + }; + *destination = zone; + assert_eq!( + effect_window_reach(&mutated), + want, + "destination {zone:?} must classify {want:?}" + ); + } + } + /// V8's hostile edges on the action fold: nothing resolvable, nothing to /// resolve, and an index past the end are all interference. #[test] @@ -1385,11 +1748,39 @@ mod tests { EtbTapState::Tapped, "PREMISE: and the real card prints 'tapped', which is the only reason it stays confined" ); + assert_eq!( + split.rest_destination, + Zone::Hand, + "PREMISE: and the REST of the search goes to hand — the door this arm used to leave open" + ); + assert_eq!( + effect_window_reach(&search), + WindowReach::MayInterfere, + "the split arm takes the SAME landing-zone authority as the ChangeZone arm: a rest \ + destination of hand is a castable card inside the window, so Cultivate is NOT confined \ + however tapped its primary arrival is" + ); + + // From here the rest destination is moved OFF hand, which is what makes a + // confined split expressible at all: MEASURED on this candidate's own + // projection, all TWELVE `SearchDestinationSplit` carriers route something to + // hand (nine via `rest_destination`, three via `primary_destination`), so no + // real card can serve as the positive control for the tap axis. Single-field + // mutation off a real parsed node is the honest way to get one, and saying so + // is the point — an inert branch presented as covered is the error this row + // exists to avoid. + let Effect::SearchLibrary { + split: Some(split), .. + } = &mut search + else { + panic!("PREMISE: the mutated node must keep its split"); + }; + split.rest_destination = Zone::Graveyard; assert_eq!( effect_window_reach(&search), WindowReach::OwnResourcesOnly, - "POSITIVE CONTROL: the unmutated split IS confined, so the two flips below are \ - attributable to the mutated field" + "CONTROL: one field moved and nothing else, so the verdict above is attributable to \ + `rest_destination` alone and is not a constant" ); for (state, expected) in [ From 0ae3aadb06ee9f9ff671be4fbf53e30f97931a37 Mon Sep 17 00:00:00 2001 From: lgray Date: Sun, 9 Aug 2026 11:15:08 -0500 Subject: [PATCH 08/13] fix(ai): close the fail-open zone wildcard and widen the unreadable-content gate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Review findings against a15f0740e, all reproduced before being fixed. `landing_zone_is_confined` matched `Battlefield`/`Hand` and closed with `_ => true`. `Zone` is a closed seven-variant enum (CR 400.1) and that wildcard was this module's only fail-OPEN default: it silently absorbed `Zone::Stack`, a live `ChangeZone` destination, so a node landing a card on the stack read as confined. CR 405.1 puts a cast spell's card on the stack and CR 608.1 resolves it once all players pass, which is strictly stronger reach than the `Hand` case this same function closed last round. The match is now exhaustive, so adding a `Zone` variant breaks the build. `Zone::Command` joins hand and stack per CR 903.8 (a commander may be cast from the command zone) and CR 114.1 (emblems carry abilities there). The object gate's own doc claimed `printed_cards` splits a card face across four collections. Measured, it writes eight more rules-bearing fields, and `obj.keywords` carries printed Cascade — which never reaches `trigger_definitions` — so a Cascade spell whose printed abilities all read confined was provably `OwnResourcesOnly` while resolving it casts a free spell of arbitrary reach inside the window. Both entry points now route through one `carries_unreadable_rules_content` authority covering every unreadable rules-bearing field rather than a curated subset, since a subset is an allowlist someone has to remember to extend. That argument applies to the list itself, so the list is now compiler-enforced. A new test destructures `CardFace` `..`-free and sorts every field into folded / gated / not-rules-bearing with a reason on each. Writing it immediately found four more unreadable fields no re-reading had surfaced — `case_state`, `class_level`, `intensity` and `attraction_lights` — all now gated. `CardFace` rather than `GameObject` because `GameObject` has 149 fields, mostly runtime state, and destructuring it would be a churn magnet blanket-`..`'d back within a round; `CardFace` has 33 and is the source `printed_cards` actually reads. Scope limit stated in the test: it does not cover `GameObject` fields written outside `printed_cards` (`game::stickers` writes only the three definition collections, which are gated). Measured on this candidate's own projection: ability-level figures are unchanged (2600 -> 151), confirming the zone fix is latent — 0 `Stack` destinations, 1 `Command` (Hellkite Courser, in `triggers`, never folded). Object level moves 72/19/53 to 72/29/43: the widening adds 10 flips (8 keywords, 1 modal, 1 additional_cost). The four fields found by the guard are 0 among survivors and real document-wide (solve conditions 15, Class 38, Case 15, Attraction 35) — latent holes, closed for the same reason as the zone arm. The protected class is untouched — Terramorphic Expanse, Evolving Wilds and Rampant Growth carry none of these fields, asserted in the census as a reach-guard that fails rather than prints. Tests: the destination table now covers all seven zones with a compile-time exhaustiveness guard that is deliberately not a mirror of the production match; the object-gate test gains keyword and spellbook disjuncts with a cleared-field control between each, so no verdict can be a constant. Assisted-by: ClaudeCode:claude-opus-4.8 --- .../src/ai_support/shortcut_efficacy.rs | 357 ++++++++++++++++-- 1 file changed, 325 insertions(+), 32 deletions(-) diff --git a/crates/engine/src/ai_support/shortcut_efficacy.rs b/crates/engine/src/ai_support/shortcut_efficacy.rs index 5d1bf8d0c4..ffd0e61cfd 100644 --- a/crates/engine/src/ai_support/shortcut_efficacy.rs +++ b/crates/engine/src/ai_support/shortcut_efficacy.rs @@ -82,6 +82,7 @@ //! `ExileMaterials` costs — every one of which can reach another player's //! resources — would be structurally invisible. +use crate::game::game_object::GameObject; use crate::types::ability::{ AbilityCost, AbilityDefinition, ControllerRef, Effect, FilterProp, PlayerFilter, SearchDestinationSplit, TargetFilter, @@ -191,17 +192,43 @@ fn filter_is_actor_owned(filter: &TargetFilter) -> bool { /// then passes in turn order (CR 117.3d), so the responding seat gets it back /// still inside this window. The AST carries nothing that could prove the card /// uncastable. -/// * Everything else — graveyard, library, exile, command — puts the card where the +/// * `Zone::Stack` — strictly stronger than the hand case, and the one a `_` arm hid. +/// CR 405.1: a cast spell's card is put on the stack; CR 608.1: the object on top +/// of the stack resolves once all players pass. A card that LANDS there is past +/// casting already and resolves inside this very window, so the seat does not even +/// need priority to get its effect. +/// * `Zone::Command` — CR 903.8: "A player may cast a commander they own from the +/// command zone", and CR 114.1 puts emblems there carrying abilities of their own. +/// It is a zone the seat acts FROM, so it belongs with hand rather than with the +/// need-further-permission group this doc previously filed it under. +/// * `Zone::Library` / `Zone::Graveyard` / `Zone::Exile` — the card lands where the /// actor needs some FURTHER permission to use it, and that permission would itself /// be an ability this fold already reads. /// /// Callers still apply their own extra conjuncts (the battlefield riders on /// `ChangeZone`); this answers the destination question only. fn landing_zone_is_confined(destination: Zone, tapped: EtbTapState) -> bool { + // EXHAUSTIVE ON PURPOSE — no wildcard. `Zone` is a closed seven-variant enum + // (CR 400.1), and a `_` arm here is FAIL-OPEN in a module whose every other + // default is fail-closed: it answers "confined" for any variant nobody thought + // about. That is not hypothetical. This function shipped as + // `Battlefield => …, Hand => false, _ => true`, and the `_` silently absorbed + // `Zone::Stack` — a live `ChangeZone` destination (`game::zones`) — so a node + // landing a card on the stack read as confined, contributing `OwnResourcesOnly` to + // a fold whose whole purpose is to decide whether an Accept is safe. (Whether any + // one node's verdict becomes an Accept depends on the rest of the fold; what is + // certain is that this arm was voting the wrong way.) MEASURED at this candidate's + // projection: 0 `Stack` destinations and 1 `Command` (Hellkite Courser, whose node + // lives in `triggers` and is therefore never folded), so the fix is latent today + // and is rated on what it does when reached, not on how often it is reached. + // The doc above listed "graveyard, library, exile, command" as the remainder and + // never mentioned Stack, which is exactly what a wildcard costs you: the arm list + // stops being a claim the compiler checks. Adding a `Zone` variant must break this + // build. match destination { Zone::Battlefield => matches!(tapped, EtbTapState::Tapped), - Zone::Hand => false, - _ => true, + Zone::Hand | Zone::Stack | Zone::Command => false, + Zone::Library | Zone::Graveyard | Zone::Exile => true, } } @@ -557,18 +584,75 @@ fn ability_window_reach(def: &AbilityDefinition) -> WindowReach { acc.or(WindowReach::of(!conservative_when_present)) } +/// Does this object carry rules content this module cannot classify? +/// +/// Single authority for that question — both entry points route through it, because +/// the previous shape (each entry point spelling out its own three-field check) is how +/// two answers to one question drift apart, and this module has already paid for that +/// once with `landing_zone_is_confined`. +/// +/// The list is deliberately EVERY rules-bearing field `game::printed_cards` writes and +/// `ability_window_reach` cannot read, not a curated subset of the ones known to be +/// dangerous. A curated subset is an allowlist maintained by whoever remembers to +/// update it; MEASURED, the previous three-field version claimed in its own doc comment +/// to cover what `printed_cards` splits a face into, and was wrong by eight fields. +/// `obj.keywords` alone carries printed **Cascade** (`game::triggers`: printed Cascade +/// lives in `obj.keywords` and never reaches `trigger_definitions`), so a Cascade spell +/// whose printed `abilities` all read confined would have been proven +/// `OwnResourcesOnly` while resolving it casts a free spell of arbitrary reach inside +/// the very window the seat just declined to keep. +/// +/// MEASURED cost of widening from three fields to all of them, on this candidate's own +/// projection: of the 53 cards that survived the three-field gate, 10 now flip (8 on +/// `keywords`, 1 `modal`, 1 `additional_cost`), leaving 43. The class this classifier +/// exists to protect is untouched — Terramorphic Expanse, Evolving Wilds and Rampant +/// Growth carry none of these fields. +/// +/// A presence gate is conservative by construction: it can only move a verdict toward +/// `MayInterfere`, which per §2 is the direction that costs efficacy rather than games. +fn carries_unreadable_rules_content(object: &GameObject) -> bool { + !object.trigger_definitions.is_empty() + || !object.replacement_definitions.is_empty() + || !object.static_definitions.is_empty() + // Keywords are rules text the fold never sees; Cascade is the sharp case. + || !object.keywords.is_empty() + // Casting-time modifiers: each one changes what resolving the object does or + // what the seat may do with it, and none is an `AbilityDefinition`. + || object.modal.is_some() + || object.additional_cost.is_some() + || object.strive_cost.is_some() + || object.cleave_variant.is_some() + || !object.casting_restrictions.is_empty() + || !object.casting_options.is_empty() + || !object.spellbook.is_empty() + // A back face is an entire second face of rules content that this fold never + // descends into. 0 carriers among today's confined set, so gating it is free. + || object.back_face.is_some() + // The four below were found by WRITING the staleness guard below, not by reading + // this list again — which is the argument for the guard existing. All four are + // rules-bearing, all four are written by `printed_cards`, and none was gated. + // MEASURED at this candidate's projection: each is 0 among the cards that survive + // the gate, and real document-wide (solve conditions 15, Class 38, Case 15, + // Attraction 35), so they are latent holes rather than live ones — the same shape + // as the `Zone::Stack` arm, and closed for the same reason. + || object.case_state.is_some() + || object.class_level.is_some() + || object.intensity != 0 + || !object.attraction_lights.is_empty() +} + /// Fold every ability an object carries. A missing object, or one carrying no /// abilities at all, is `MayInterfere` — the fail-closed direction, and the one /// that keeps an empty fold from being proven confined by its identity element. /// /// `abilities` is NOT the whole of an object's rules content. `game::printed_cards` -/// splits a card face across four collections — `obj.abilities`, -/// `obj.trigger_definitions`, `obj.replacement_definitions` and -/// `obj.static_definitions` — and this module can only classify the first, because -/// `ability_window_reach` destructures an `AbilityDefinition` and the other three -/// carry different types entirely. Folding only `abilities` and returning -/// `OwnResourcesOnly` would therefore prove a card confined from whichever fraction -/// of it happens to be ability-shaped. +/// spreads a card face across many more rules-bearing fields than this module can +/// classify — `carries_unreadable_rules_content` below is the enumerated authority on +/// which, and the one place to look; a count written here would only drift out of step +/// with it. This module classifies exactly one of them, because `ability_window_reach` +/// destructures an `AbilityDefinition` and the rest carry different types entirely. +/// Folding only `abilities` and returning `OwnResourcesOnly` would therefore prove a +/// card confined from whichever fraction of it happens to be ability-shaped. /// /// That is not hypothetical. MEASURED on `data/card-data.json`: `Stunning Reversal` /// projects `abilities` = one `ChangeZone { destination: Exile, target: SelfRef }` @@ -581,13 +665,12 @@ fn ability_window_reach(def: &AbilityDefinition) -> WindowReach { /// class as the deleted `Effect::Mana` arm: reasoning from the part of the card the /// classifier can see instead of from what the seat can do. /// -/// So a non-empty unreadable collection is `MayInterfere` — not because those -/// definitions are known to interfere, but because this module cannot prove they -/// do not, which is the only warrant `OwnResourcesOnly` ever has. Reading them -/// properly (classifying `TriggerDefinition` / `ReplacementDefinition` / -/// `StaticDefinition` the way `ability_window_reach` classifies an -/// `AbilityDefinition`) is the named upgrade path; until then the gate is -/// presence, and presence is conservative. +/// So a non-empty unreadable field is `MayInterfere` — not because its contents are +/// known to interfere, but because this module cannot prove they do not, which is the +/// only warrant `OwnResourcesOnly` ever has. Reading them properly (classifying +/// `TriggerDefinition` / `ReplacementDefinition` / `StaticDefinition` the way +/// `ability_window_reach` classifies an `AbilityDefinition`) is the named upgrade +/// path; until then the gate is presence, and presence is conservative. fn object_window_reach(state: &GameState, object_id: ObjectId) -> WindowReach { let Some(object) = state.objects.get(&object_id) else { return WindowReach::MayInterfere; @@ -595,10 +678,7 @@ fn object_window_reach(state: &GameState, object_id: ObjectId) -> WindowReach { if object.abilities.is_empty() { return WindowReach::MayInterfere; } - if !object.trigger_definitions.is_empty() - || !object.replacement_definitions.is_empty() - || !object.static_definitions.is_empty() - { + if carries_unreadable_rules_content(object) { return WindowReach::MayInterfere; } object @@ -612,13 +692,13 @@ fn object_window_reach(state: &GameState, object_id: ObjectId) -> WindowReach { /// Reach of one indexed activated ability. An unresolvable object or an /// out-of-range index is `MayInterfere`. /// -/// Carries the same unreadable-collection gate as `object_window_reach`, and for a +/// Carries the same unreadable-content gate as `object_window_reach`, and for a /// reason specific to this path rather than by symmetry: activating an ability is /// itself a game event, so a trigger on the SAME object can fire off the activation /// (CR 603.2) or off the cost being paid, and a static ability can change what the -/// activation is allowed to do. This module cannot classify any of those three -/// collections, so an object carrying one is not provably confined no matter how -/// confined the indexed ability reads on its own. +/// activation is allowed to do. This module cannot classify any of that, so an object +/// carrying it is not provably confined no matter how confined the indexed ability +/// reads on its own. fn indexed_ability_window_reach( state: &GameState, source_id: ObjectId, @@ -627,10 +707,7 @@ fn indexed_ability_window_reach( let Some(object) = state.objects.get(&source_id) else { return WindowReach::MayInterfere; }; - if !object.trigger_definitions.is_empty() - || !object.replacement_definitions.is_empty() - || !object.static_definitions.is_empty() - { + if carries_unreadable_rules_content(object) { return WindowReach::MayInterfere; } object @@ -697,6 +774,8 @@ mod tests { use super::*; use crate::game::zones::create_object; use crate::parser::oracle::parse_oracle_text; + use crate::types::card::CardFace; + use crate::types::keywords::Keyword; /// A card as the pipeline sees it: its REAL printed name plus its verbatim /// Oracle text. The name is load-bearing, not decoration — `~` @@ -1204,9 +1283,11 @@ mod tests { /// return `OwnResourcesOnly` — so the guarded verdict cannot be a constant, /// and it is attributable to that field alone. /// - /// Revert-probe: delete the three `is_empty()` checks from + /// Revert-probe: delete the `carries_unreadable_rules_content` call from /// `object_window_reach` and this row's first assertion reds while the control - /// stays green. + /// stays green. Cutting a single disjunct out of that function instead reds only + /// the row for that disjunct, which is how each one is shown to carry its own + /// weight rather than riding the first. #[test] fn an_object_whose_rules_content_this_module_cannot_read_is_never_confined() { let parsed = parse_oracle_text( @@ -1342,6 +1423,176 @@ mod tests { WindowReach::MayInterfere, "nor is a static ability this module cannot classify proof of confinement" ); + + // The KEYWORD disjunct. This is the one a review round caught: the gate used to + // read three collections while `printed_cards` writes far more, and printed + // Cascade lives in `obj.keywords` and never reaches `trigger_definitions` — so a + // Cascade spell whose printed abilities all read confined was provably + // `OwnResourcesOnly` while resolving it casts a free spell of arbitrary reach. + let object = state.objects.get_mut(&id).expect("still present"); + object.static_definitions = Vec::new().into(); + assert_eq!( + object_window_reach(&state, id), + WindowReach::OwnResourcesOnly, + "CONTROL: statics cleared, so the keyword verdict below is the keyword's alone" + ); + state + .objects + .get_mut(&id) + .expect("still present") + .keywords + .push(Keyword::Cascade); + assert_eq!( + object_window_reach(&state, id), + WindowReach::MayInterfere, + "a keyword is rules text this fold never reads; Cascade resolves a free spell of \ + arbitrary reach inside the window the seat would have declined to keep" + ); + assert_eq!( + indexed_ability_window_reach(&state, id, 0), + WindowReach::MayInterfere, + "and the activation path takes the same widened gate, not the old three-field one" + ); + + // A CASTING-TIME MODIFIER, to show the widening is not keyword-specific. + let object = state.objects.get_mut(&id).expect("still present"); + object.keywords.clear(); + assert_eq!( + object_window_reach(&state, id), + WindowReach::OwnResourcesOnly, + "CONTROL: keyword cleared and the SAME object is confined again, so neither verdict \ + above is a constant" + ); + state + .objects + .get_mut(&id) + .expect("still present") + .spellbook + .push("Lightning Bolt".to_string()); + assert_eq!( + object_window_reach(&state, id), + WindowReach::MayInterfere, + "a spellbook names cards this object can reach for, and it is not an \ + AbilityDefinition either — the gate is over unreadable CONTENT, not over one field" + ); + + // The four fields the STALENESS GUARD surfaced. They are inert at today's pool + // (0 carriers among the cards that survive the gate), which is exactly why they + // need a witness here: an inert disjunct with no test is indistinguishable from a + // disjunct that does nothing, and the next person to tidy this function would have + // no way to tell. Each is set on the SAME object with every other unreadable field + // cleared first, so each verdict is attributable to that one field. + // Named rather than written inline: `clippy::type_complexity` rejects the tuple-of-fn-ptr + // array form, and the alias is the lint's own suggested remedy. + type FieldSetter = fn(&mut GameObject); + let setters: [(&str, FieldSetter); 4] = [ + ("case_state", |o| { + o.case_state = Some(crate::game::game_object::CaseState { + is_solved: false, + solve_condition: crate::types::ability::SolveCondition::Text { + description: "probe".to_string(), + }, + }) + }), + ("class_level", |o| o.class_level = Some(1)), + ("intensity", |o| o.intensity = 1), + ("attraction_lights", |o| o.attraction_lights = vec![1]), + ]; + for (field, set) in setters { + let object = state.objects.get_mut(&id).expect("still present"); + object.spellbook.clear(); + object.case_state = None; + object.class_level = None; + object.intensity = 0; + object.attraction_lights.clear(); + assert_eq!( + object_window_reach(&state, id), + WindowReach::OwnResourcesOnly, + "CONTROL before {field}: with every unreadable field cleared the SAME object \ + is confined again, so the verdict below is attributable to {field} alone" + ); + set(state.objects.get_mut(&id).expect("still present")); + assert_eq!( + object_window_reach(&state, id), + WindowReach::MayInterfere, + "{field} is rules content this fold cannot read, so it is not proof of confinement" + ); + } + } + + /// STALENESS GUARD. Every printed rules field is either folded or gated. + /// + /// The defect this exists to prevent has now happened twice on this one gate: it + /// shipped reading three collections while `printed_cards` wrote eleven fields, and a + /// review round found `keywords` (printed Cascade) that way. Writing THIS test then + /// found four more — `case_state`, `class_level`, `intensity`, `attraction_lights` — + /// which no amount of re-reading the gate by hand had surfaced. An enumerated list is + /// only ever correct on the day it is written; a `..`-free destructure is correct + /// until the compiler says otherwise. + /// + /// **Why `CardFace` and not `GameObject`.** `GameObject` has 149 fields, most of them + /// runtime state (zone, damage, counters, attachments) with no bearing on what a card + /// can do. Destructuring it here would be a churn magnet that every unrelated field + /// addition breaks, and it would be blanket-`..`'d back within a round. `CardFace` has + /// 33 and is the actual source `printed_cards` reads to populate object rules content, + /// so it guards the defect class that occurred rather than the largest surface + /// available. + /// + /// **Honest scope limit:** this guards fields that reach an object THROUGH + /// `printed_cards`. A `GameObject` field written by some other path is not covered — + /// `game::stickers` is the live example, and it writes only the three definition + /// collections, which are gated. + #[test] + fn every_printed_rules_field_is_either_folded_or_gated() { + // `..`-free ON PURPOSE. A new `CardFace` field is a COMPILE ERROR here until + // someone sorts it into one of the three buckets. The sort IS the assertion: + // there is nothing to run, and that is the point — this fires at build time, + // when it can still be cheap, rather than at review time. + let CardFace { + // ---- FOLDED: this module classifies these itself. + abilities: _, + + // ---- GATED: unreadable rules content. `carries_unreadable_rules_content` + // returns true on the corresponding `GameObject` field. + keywords: _, + triggers: _, + static_abilities: _, + replacements: _, + cleave_variant: _, + modal: _, + additional_cost: _, + casting_restrictions: _, + casting_options: _, + strive_cost: _, + solve_condition: _, // lands as `obj.case_state` + attraction_lights: _, + // `metadata` is mixed: its `spellbook` is gated; `related_token_ids` is not + // rules-bearing (it names tokens a card can make, and making them runs + // through abilities this fold already reads). + metadata: _, + + // ---- NOT RULES-BEARING. One reason each, because an unjustified entry here + // is exactly where the next lazy re-bucket lands. + name: _, // identity, not behaviour + mana_cost: _, // cost to cast, not what resolving does + card_type: _, // types/subtypes gate other rules, carry none alone + power: _, // combat statistic + toughness: _, // combat statistic + loyalty: _, // resource counter, abilities that spend it are in `abilities` + defense: _, // battle counter, same argument as loyalty + oracle_text: _, // the SOURCE the parser reads; the parse is the rules content + non_ability_text: _, // by definition not an ability + flavor_name: _, // cosmetic + color_override: _, // colour is a characteristic, not an action + color_identity: _, // deck construction (CR 903.4), not in-game behaviour + scryfall_oracle_id: _, // external identifier + brawl_commander: _, // format eligibility + is_commander: _, // format eligibility + is_oathbreaker: _, // format eligibility + deck_copy_limit: _, // deck construction + parse_warnings: _, // parser diagnostics, never consulted at runtime + rarities: _, // printing metadata + } = CardFace::default(); } /// The destination axis, on a REAL parsed node, one field mutated. @@ -1382,15 +1633,57 @@ mod tests { `destination` and every verdict below is attributable to the destination alone" ); - for (zone, want) in [ + // Every one of `Zone`'s seven variants (CR 400.1) appears here. The previous + // table listed five and the production match closed the gap with `_ => true`, + // so `Zone::Stack` was classified confined by a wildcard and no row noticed. + let table = [ (Zone::Exile, WindowReach::OwnResourcesOnly), (Zone::Graveyard, WindowReach::OwnResourcesOnly), (Zone::Library, WindowReach::OwnResourcesOnly), (Zone::Hand, WindowReach::MayInterfere), + // Already past casting (CR 405.1) and resolves inside the window + // (CR 608.1) — strictly stronger reach than the hand row above. + (Zone::Stack, WindowReach::MayInterfere), + // CR 903.8: a commander may be cast from here. + (Zone::Command, WindowReach::MayInterfere), // `enter_tapped` is `Unspecified` on this node, so the battlefield // arm is reach for the TAP reason, not the destination reason. (Zone::Battlefield, WindowReach::MayInterfere), + ]; + + // COMPLETENESS GUARD, compile-time half: this match is exhaustive over `Zone`, + // so adding a variant breaks THIS test's build and forces a row decision here + // as well as in the production match. The runtime half below then catches a + // variant that compiles but was left out of `table`. Deliberately NOT a mirror + // of the production match — it asserts coverage only, never a verdict, so it + // cannot pass by agreeing with a wrong implementation. + for zone in [ + Zone::Library, + Zone::Hand, + Zone::Battlefield, + Zone::Graveyard, + Zone::Stack, + Zone::Exile, + Zone::Command, ] { + match zone { + Zone::Library + | Zone::Hand + | Zone::Battlefield + | Zone::Graveyard + | Zone::Stack + | Zone::Exile + | Zone::Command => {} + } + assert!( + table.iter().any(|(z, _)| *z == zone), + "Zone::{zone:?} has no row in the destination table — every zone must be \ + classified explicitly, because the failure this test exists for is a \ + destination nobody wrote a row for" + ); + } + + for (zone, want) in table { let mut mutated = node.clone(); let Effect::ChangeZone { destination, .. } = &mut mutated else { unreachable!("just matched above") From 545c8402ef59601668867f5c475d88d3f4838858 Mon Sep 17 00:00:00 2001 From: lgray Date: Sun, 9 Aug 2026 14:08:25 -0500 Subject: [PATCH 09/13] fix(ai): gate Room unlock state and test every disjunct of the unreadable-content gate A review round measured three holes in the object-level gate this PR added, all of the same shape: a set that was curated by hand and therefore incomplete. Seven of the gate's disjuncts had neither a test nor a revert-probe -- `modal`, `additional_cost`, `strive_cost`, `cleave_variant`, `casting_restrictions`, `casting_options`, `back_face`. Each occurred exactly once in the file, in the gate itself, so deleting any of them left the whole suite green. Witness coverage was anti-correlated with liveness: `modal` and `additional_cost` are 2 of the 10 cards the widening flips, while all four disjuncts that did have witnesses are inert at today's pool -- witnesses had been written for the newest additions rather than derived from the gate. `every_gated_card_face_field_reaches_the_gate_through_printed_cards` closes that with 12 cases, each mutating a `CardFace` and running the real `apply_card_face_to_object`, which also turns the staleness guard's comment-only CardFace->GameObject mapping into a runnable assertion. CONTROL and witness are separate freshly-created objects because `printed_cards` seeds `class_level` only while `base_characteristics_initialized` is false (CR 716.2b); re-applying to one object would have skipped the field the Class case tests. `back_face` reuses `game::specialize::empty_back_face`, promoted to `pub(crate)`, rather than duplicating a 22-field literal that would go stale the moment `BackFaceData` grew. The staleness guard bound `metadata: _` -- the one field its own comment called "mixed", and the exact path `spellbook` had already used to get into this gate. It now destructures all 8 `CardMetadata` fields with a reason each. The guard's `card_type` bucket reason was measurably wrong: `printed_cards` derives four object-level rules fields from `subtypes` alone (`Class`, `Case`, `Room`, `Attraction`), and `room_unlocks` was the one with no disjunct -- so the bucket whose job is certifying "no gate needed" was certifying a real hole. CR 709.5 makes a shared type line two static abilities that remove each locked half's rules text, and CR 709.5e lets any player unlock a half at any priority, so which halves are unlocked decides what rules text the permanent has and `obj.abilities` cannot express it. Presence gate, strictly narrowing: 0 flips at today's pool (72/29/43 unchanged; of 60 Room faces only two clear every other gate and neither is confined). Assisted-by: ClaudeCode:claude-opus-5 --- .../src/ai_support/shortcut_efficacy.rs | 207 +++++++++++++++++- crates/engine/src/game/specialize.rs | 5 +- 2 files changed, 203 insertions(+), 9 deletions(-) diff --git a/crates/engine/src/ai_support/shortcut_efficacy.rs b/crates/engine/src/ai_support/shortcut_efficacy.rs index ffd0e61cfd..ba96b586b0 100644 --- a/crates/engine/src/ai_support/shortcut_efficacy.rs +++ b/crates/engine/src/ai_support/shortcut_efficacy.rs @@ -639,6 +639,16 @@ fn carries_unreadable_rules_content(object: &GameObject) -> bool { || object.class_level.is_some() || object.intensity != 0 || !object.attraction_lights.is_empty() + // CR 709.5: a shared type line is two static abilities that remove the name, mana + // cost and RULES TEXT of each locked half; CR 709.5c names the unlocked + // designations, and CR 709.5e lets any player unlock a half as a special action at + // any priority. So which halves are unlocked decides what rules text the permanent + // has, `obj.abilities` is a flat list that cannot express that, and an opponent can + // change the answer inside the very window this fold is deciding about. + // Found by the same review round that caught the `card_type` bucket below, and it + // is the fourth subtype-derived field of four — the other three were already here, + // which is what made this one's absence a curated subset rather than a set. + || object.room_unlocks.is_some() } /// Fold every ability an object carries. A missing object, or one carrying no @@ -774,7 +784,7 @@ mod tests { use super::*; use crate::game::zones::create_object; use crate::parser::oracle::parse_oracle_text; - use crate::types::card::CardFace; + use crate::types::card::{CardFace, CardMetadata}; use crate::types::keywords::Keyword; /// A card as the pipeline sees it: its REAL printed name plus its verbatim @@ -1566,16 +1576,45 @@ mod tests { strive_cost: _, solve_condition: _, // lands as `obj.case_state` attraction_lights: _, - // `metadata` is mixed: its `spellbook` is gated; `related_token_ids` is not - // rules-bearing (it names tokens a card can make, and making them runs - // through abilities this fold already reads). - metadata: _, + // `metadata` is MIXED, so it is DESTRUCTURED rather than bound whole. Binding + // it was a hole in the guard that the guard's own comment declared and did not + // close: `spellbook` is exactly a rules-bearing field that arrived inside this + // struct, so "mixed" is the reason to open it, not the reason to wave it past. + metadata: + CardMetadata { + // GATED as `obj.spellbook`. + spellbook: _, + // Parser-provenance counters: how many abilities came from Forge + // scripts rather than the Oracle parser. The abilities themselves are + // in the collections above; these are counts of them. + forge_abilities: _, + forge_triggers: _, + forge_statics: _, + forge_replacements: _, + // Names tokens this card can make; MAKING one runs through + // `Effect::Token` in `abilities`, which this fold already reads. + related_token_ids: _, + // Image/catalog identifiers. + source_printing_ids: _, + // CR 202.3d + CR 709.4b: a split card's combined off-stack mana value, + // read by deck-construction checks. A cost, not what resolving does. + off_stack_mana_value_override: _, + }, // ---- NOT RULES-BEARING. One reason each, because an unjustified entry here // is exactly where the next lazy re-bucket lands. - name: _, // identity, not behaviour - mana_cost: _, // cost to cast, not what resolving does - card_type: _, // types/subtypes gate other rules, carry none alone + name: _, // identity, not behaviour + mana_cost: _, // cost to cast, not what resolving does + // NOT inert, and the earlier reason here ("types/subtypes gate other rules, + // carry none alone") was measurably WRONG. `printed_cards` derives four + // object-level rules fields from `subtypes` ALONE, with no CardFace field + // behind them: `Class` => `class_level` (:206), `Case` => `case_state` (:238), + // `Room` => `room_unlocks` (:246), `Attraction` => `attraction_lights` (:250). + // The face's own field is therefore safe to skip only BECAUSE all four + // derived fields are gated — and `room_unlocks` was not, until the review + // round that read this line. A wrong reason in this bucket is worse than no + // reason: it certifies that no gate is needed. + card_type: _, power: _, // combat statistic toughness: _, // combat statistic loyalty: _, // resource counter, abilities that spend it are in `abilities` @@ -1595,6 +1634,158 @@ mod tests { } = CardFace::default(); } + /// Every GATED bucket entry above must actually REACH the gate, through the pipeline + /// that really populates it. + /// + /// This exists because a review round measured that seven of the gate's disjuncts had + /// no test and no revert-probe — `modal`, `additional_cost`, `strive_cost`, + /// `cleave_variant`, `casting_restrictions`, `casting_options`, `back_face` — each + /// occurring exactly once in the whole file, in the gate itself. Deleting any of them + /// left the entire suite green. The sting: `modal` and `additional_cost` are 2 of the + /// 10 cards the widening actually flips, so the disjuncts with no coverage were the + /// LIVE ones while the four that had witnesses were the inert ones. The guard above is + /// a compile-time claim that each field is classified; this is the runtime claim that + /// the classification is TRUE. + /// + /// It also turns the guard's `CardFace` → `GameObject` mapping from a comment into an + /// assertion. Each case mutates a **`CardFace`** and runs the real + /// `apply_card_face_to_object`, so a rename or a dropped copy in `printed_cards` reds + /// here instead of silently un-gating the field — which is the failure the `spellbook` + /// and `keywords` holes both took to get in. + #[test] + fn every_gated_card_face_field_reaches_the_gate_through_printed_cards() { + use crate::game::printed_cards::apply_card_face_to_object; + + // `clippy::type_complexity` rejects the inline tuple-of-fn-ptr array; the alias is + // the lint's own suggested remedy. + type FaceSetter = fn(&mut CardFace); + let cases: [(&str, FaceSetter); 12] = [ + // --- carried on the face itself. + ("keywords", |f| f.keywords = vec![Keyword::Cascade]), + ("cleave_variant", |f| { + f.cleave_variant = Some(crate::types::card::CleaveVariant::default()) + }), + ("modal", |f| { + f.modal = Some(crate::types::ability::ModalChoice::default()) + }), + ("additional_cost", |f| { + f.additional_cost = Some(crate::types::ability::AdditionalCost::Kicker { + costs: vec![], + repeatability: crate::types::ability::AdditionalCostRepeatability::Once, + }) + }), + ("casting_restrictions", |f| { + f.casting_restrictions = vec![crate::types::ability::CastingRestriction::AsSorcery] + }), + ("casting_options", |f| { + f.casting_options = vec![crate::types::ability::SpellCastingOption::free_cast()] + }), + ("strive_cost", |f| { + f.strive_cost = Some(crate::types::mana::ManaCost::default()) + }), + ("metadata.spellbook", |f| { + f.metadata.spellbook = vec!["Lightning Bolt".to_string()] + }), + // --- DERIVED FROM `card_type.subtypes` ALONE, with no face field behind them. + // These four are why the guard's `card_type` bucket reason had to be rewritten: + // the face's own `card_type` is safe to skip only because all four landing + // fields are gated, and `room_unlocks` was not until this round. + ("card_type: Class → class_level", |f| { + f.card_type.subtypes = vec!["Class".to_string()] + }), + ("card_type: Case → case_state", |f| { + f.card_type.subtypes = vec!["Case".to_string()]; + f.solve_condition = Some(crate::types::ability::SolveCondition::Text { + description: "probe".to_string(), + }); + }), + ("card_type: Room → room_unlocks", |f| { + f.card_type.subtypes = vec!["Room".to_string()] + }), + ("card_type: Attraction → attraction_lights", |f| { + f.card_type.subtypes = vec!["Attraction".to_string()] + }), + ]; + + for (field, set) in cases { + // CONTROL and WITNESS are SEPARATE freshly-created objects rather than one + // object applied twice. `printed_cards` seeds `class_level` only when + // `base_characteristics_initialized` is still false (CR 716.2b), so re-applying + // to the same object would silently skip the very field the Class case tests — + // and the case would pass for the wrong reason on the three cases beside it. + let mut face = CardFace { + name: "Probe".to_string(), + ..CardFace::default() + }; + let mut state = GameState::default(); + + let control = create_object( + &mut state, + crate::types::identifiers::CardId(1), + crate::types::player::PlayerId(0), + face.name.clone(), + Zone::Hand, + ); + apply_card_face_to_object( + state.objects.get_mut(&control).expect("just created"), + &face, + ); + assert!( + !carries_unreadable_rules_content( + state.objects.get(&control).expect("just created") + ), + "CONTROL for {field}: a default face lands no unreadable content, so the \ + verdict below is produced by {field} and not by the face it rides on" + ); + + set(&mut face); + let witness = create_object( + &mut state, + crate::types::identifiers::CardId(2), + crate::types::player::PlayerId(0), + face.name.clone(), + Zone::Hand, + ); + apply_card_face_to_object( + state.objects.get_mut(&witness).expect("just created"), + &face, + ); + assert!( + carries_unreadable_rules_content( + state.objects.get(&witness).expect("just created") + ), + "CardFace {field} is rules content this fold cannot read, so `printed_cards` \ + must land it somewhere the gate looks — either the gate lost a disjunct or \ + the copy into `GameObject` was renamed out from under it" + ); + } + + // `back_face` is the one gated field with no `apply_card_face_to_object` route: + // `printed_cards::apply_card_face_to_back_face` fills a `BackFaceData` on the + // transform path instead. Asserted directly, and reusing `game::specialize`'s + // existing empty constructor rather than hand-rolling a 22-field literal that would + // go stale the moment `BackFaceData` gains a field. + let mut state = GameState::default(); + let id = create_object( + &mut state, + crate::types::identifiers::CardId(3), + crate::types::player::PlayerId(0), + "Probe".to_string(), + Zone::Hand, + ); + assert!( + !carries_unreadable_rules_content(state.objects.get(&id).expect("just created")), + "CONTROL for back_face: a bare object carries nothing the gate reads" + ); + state.objects.get_mut(&id).expect("just created").back_face = + Some(crate::game::specialize::empty_back_face()); + assert!( + carries_unreadable_rules_content(state.objects.get(&id).expect("just created")), + "a back face is an entire second face of rules content this fold never descends \ + into, so its presence is not proof of confinement" + ); + } + /// The destination axis, on a REAL parsed node, one field mutated. /// /// `Stunning Reversal`'s ability is `ChangeZone { destination: Exile, target: diff --git a/crates/engine/src/game/specialize.rs b/crates/engine/src/game/specialize.rs index 95d1332ff0..0e8c019933 100644 --- a/crates/engine/src/game/specialize.rs +++ b/crates/engine/src/game/specialize.rs @@ -73,7 +73,10 @@ pub fn eligible_specialize_colors( .collect() } -fn empty_back_face() -> BackFaceData { +/// An all-empty `BackFaceData`. `pub(crate)` rather than private because it is the only +/// constructor of the type that does not hand-roll the full field list, and a second copy +/// of that literal would go stale the moment `BackFaceData` gains a field. +pub(crate) fn empty_back_face() -> BackFaceData { BackFaceData { name: String::new(), power: None, From 76ff7769d2f867e780b04ecf43033cdf23d9a011 Mon Sep 17 00:00:00 2001 From: lgray Date: Sun, 9 Aug 2026 19:15:03 -0500 Subject: [PATCH 10/13] fix(ai): prove confinement against the live board, not the AST alone MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `WindowReach::OwnResourcesOnly` was emitted from an AST-only proof whose premises are live-state facts the AST structurally cannot carry. The module was fail-closed on unrecognized *variants* but fail-open on known-incomplete *inputs*. Three gates close three premises, all at `any_action_may_interfere` — the one seam that already holds `&GameState`. Ownership (CR 110.2, CR 109.5, CR 701.21a). `SelfRef`/`Controller` prove CONTROL, never ownership, and a sacrificed permanent goes to its OWNER's graveyard — so a controlled-but-not-owned permanent changes another player's resources while every AST predicate still reads confined. Proven set-level: `TargetFilter::Controller` is a bare unit variant and `Typed` is a set predicate, so per-object threading is structurally impossible. Board observers (CR 603.2, CR 603.6a, CR 113.6). Trigger matching is a board-wide scan; the fold read one object. A tapped, self-targeted fetch was provably confined while an opponent's Hedron Crab ("Landfall — Whenever a land you control enters, target player mills three cards") reached every player. Relief is a disjunction of independently sufficient reliefs, gated zone-of-function first via the existing CR 113.6 authority. The subject carve-out is `SelfRef`-EXACT: reusing `filter_is_actor_owned` returns true for `Typed{controller: You}` — exactly the crab's filter — and provably fails to fix this, which is pinned as a negative control. Parse completeness. A parse cannot testify about its own omissions, so `parse_warnings` now gates confinement and moves from the staleness guard's NOT-RULES-BEARING bucket to GATED. That one line — "parser diagnostics, never consulted at runtime" — was the root cause stated as a certification. The relief predicate lives in `ai_support`, not `game/triggers.rs`: relief is not intrinsic to a trigger, it holds only relative to the confined-action allowlists this module defines. `LifeLost` relief is sound only because `AbilityCost::PayLife` falls to `MayInterfere`; its doc names both allowlists and that witness so widening either forces a re-audit. Measured, not assumed: `Milled*`, `EntersOrAttacks` and `EntersOrHauntedCreatureDies` are NOT relieved — their matchers read a generic `ZoneChanged` that an allowlisted `ChangeZone` emits (CR 701.17a), so relieving them would have been a fresh false-Accept. The flagship acceptance seat keeps `Accept` (171 defs -> 168 zone-gated -> 3 survivors, all relieved); P1 is safe via the stage-1 short-circuit, not because no board fires. All 14 revert-probes executed PASS->FAIL, none non-discriminating. 30 CR numbers verified against the rules text; one self-caught miscite corrected (701.12a is Exchange, not Fight -> 701.14a). Assisted-by: ClaudeCode:claude-opus-4.8 --- crates/engine/src/ai_support/mod.rs | 1 + .../src/ai_support/shortcut_efficacy.rs | 892 +++++++++++++++++- crates/engine/src/game/game_object.rs | 38 + crates/engine/src/game/printed_cards.rs | 4 + .../tests/integration/shorten_efficacy.rs | 447 +++++++++ 5 files changed, 1357 insertions(+), 25 deletions(-) diff --git a/crates/engine/src/ai_support/mod.rs b/crates/engine/src/ai_support/mod.rs index 72fde9f2d2..3de9b0076d 100644 --- a/crates/engine/src/ai_support/mod.rs +++ b/crates/engine/src/ai_support/mod.rs @@ -1591,6 +1591,7 @@ pub fn smart_shortcut_response( // flat list alone would silently Accept. if shortcut_efficacy::any_action_may_interfere( probe.state(), + polled_player, &stage_two_action_set(probe.state(), &actions), ) { // CR 732.2b: name an earlier stopping point — take my window instead of losing. diff --git a/crates/engine/src/ai_support/shortcut_efficacy.rs b/crates/engine/src/ai_support/shortcut_efficacy.rs index ba96b586b0..29fdbea37e 100644 --- a/crates/engine/src/ai_support/shortcut_efficacy.rs +++ b/crates/engine/src/ai_support/shortcut_efficacy.rs @@ -90,6 +90,7 @@ use crate::types::ability::{ use crate::types::actions::GameAction; use crate::types::game_state::GameState; use crate::types::identifiers::ObjectId; +use crate::types::player::PlayerId; use crate::types::zones::{EtbTapState, Zone}; /// How far a single available action can reach, relative to the player who @@ -145,6 +146,15 @@ impl WindowReach { /// /// Unproven is not owned: everything else (`Any`, `None`, `Player`, `Opponent`, /// `ParentTarget*`, anaphors, specific ids) is `false`. +/// +/// SCOPE, and the name is wider than what this proves. Both `true` arms are +/// CONTROL arms, not ownership arms: CR 109.5 defines "you"/"your" on an object +/// as its CONTROLLER, so `SelfRef`, `Controller` and `Typed{controller: You}` all +/// resolve through control, and CR 110.2 makes owner and controller +/// independent. Ownership is proven separately and at BOARD level by +/// [`actor_owns_everything_they_control`], which +/// [`any_action_may_interfere`] applies before it folds any action; this +/// predicate is sound only underneath that conjunct. fn filter_is_actor_owned(filter: &TargetFilter) -> bool { match filter { TargetFilter::SelfRef | TargetFilter::Controller => true, @@ -171,6 +181,39 @@ fn filter_is_actor_owned(filter: &TargetFilter) -> bool { } } +/// Does the actor OWN every permanent they control? +/// +/// [`filter_is_actor_owned`] proves CONTROL, because CR 109.5 defines "you" and +/// "your" on an object as its controller. CR 110.2 makes owner and controller +/// independent axes ("A permanent's owner is the same as the owner of the card +/// that represents it"), so a controlled-but-not-owned permanent breaks every +/// place this module treats a control proof as a confinement proof. The sharp +/// one is CR 701.21a: "To sacrifice a permanent, its controller moves it from the +/// battlefield directly to its OWNER'S graveyard" — so the allowlisted +/// `AbilityCost::Sacrifice` of a permanent the actor controls but does not own +/// puts a card into ANOTHER player's graveyard, which is that player's own zone +/// per CR 400.1 ("Each player has their own library, hand, and graveyard") and +/// therefore reach by construction. +/// +/// SET-LEVEL BY NECESSITY, not by preference. Threading ownership per matched +/// object is structurally impossible at the filter layer: `TargetFilter::Controller` +/// is a bare unit variant carrying no id at all, and `TargetFilter::Typed` is a +/// SET PREDICATE describing a class rather than naming a member, so neither can be +/// resolved to the objects it would match without evaluating it against the board. +/// The single variant that does carry an id — `SpecificObject { id }` — already +/// falls to `filter_is_actor_owned`'s `_` arm and returns `false`. So the only +/// place the ownership fact can be discharged is the board, once, over every +/// object the actor controls. +/// +/// Board facts are action-independent, so the caller evaluates this ONCE rather +/// than per action. +fn actor_owns_everything_they_control(state: &GameState, actor: PlayerId) -> bool { + state + .objects + .values() + .all(|o| o.controller != actor || o.owner == actor) +} + /// Is a landing zone confined — i.e. can the seat NOT act on what arrives there, /// inside the window the Shorten hands back? /// @@ -649,6 +692,16 @@ fn carries_unreadable_rules_content(object: &GameObject) -> bool { // is the fourth subtype-derived field of four — the other three were already here, // which is what made this one's absence a curated subset rather than a set. || object.room_unlocks.is_some() + // THE PARSER SAID IT COULD NOT READ THIS CARD. Every other disjunct above gates a + // field whose CONTENTS this fold cannot classify; this one gates the parser's own + // report that some printed clause never became a field at all. That is the exact + // residual the module doc's §2 names as the one thing the fail-closed default + // cannot cover — "a clause the PARSER silently swallows never becomes a shape here, + // so the ability this module is handed looks strictly MORE confined than the + // printed card is" — and a diagnostic is the seat's only in-band evidence that it + // happened. Reading `abilities` and ignoring the note saying `abilities` is + // incomplete is proving confinement from the fraction of the card that parsed. + || !object.parse_warnings.is_empty() } /// Fold every ability an object carries. A missing object, or one carrying no @@ -726,6 +779,271 @@ fn indexed_ability_window_reach( .map_or(WindowReach::MayInterfere, ability_window_reach) } +/// CR 603.2: can a CONFINED action's event stream ever match this trigger's +/// trigger event? Returns `true` iff it PROVABLY cannot. +/// +/// # This predicate is NOT a fact about the trigger +/// +/// It is a fact about the trigger RELATIVE TO the confined-action allowlists this +/// module defines, and it lives here for exactly that reason. Relief is not +/// intrinsic to a `TriggerMode`; every arm below is discharged by reading what +/// [`cost_window_reach`] and [`effect_window_reach`] admit, so the premise has to +/// live where those allowlists live. Moving it to `game::triggers` would present +/// it as a CR-grounded property of a trigger and invite reuse by a caller with a +/// different action set, for which every arm below is unproven. +/// +/// ## The soundness contract, named in full +/// +/// Relief holds only while BOTH allowlists stay exactly as they are today: +/// +/// * [`cost_window_reach`] admits `AbilityCost::Tap`, `AbilityCost::Mana`, +/// an actor-owned `AbilityCost::Sacrifice`, and `AbilityCost::Composite` of +/// those. Everything else is `MayInterfere`. +/// * [`effect_window_reach`] admits `Effect::SearchLibrary`, `Effect::Shuffle` +/// and a gated `Effect::ChangeZone`. Everything else is `MayInterfere`. +/// +/// **WIDEN EITHER ALLOWLIST AND YOU MUST RE-AUDIT EVERY ARM BELOW.** The witness +/// that makes that concrete, and the reason the Life family's relief is +/// CONTINGENT rather than structural: `AbilityCost::PayLife` exists +/// (`types::ability`) and a Polluted-Delta-class fetchland pays it — "{T}, Pay 1 +/// life, Sacrifice this land: Search your library …" — squarely inside this +/// predicate's own event boundary, which counts cost payment. Such a card is +/// `MayInterfere` today ONLY because `PayLife` falls to `cost_window_reach`'s +/// fail-closed `_` arm. Allowlist `PayLife` and a Bloodthirsty Conqueror +/// ("Whenever an opponent loses life, you gain that much life") fires through a +/// mode this function has RELIEVED — which is the precise defect the board scan +/// exists to prevent. +/// +/// ## Boundary +/// +/// The classified action set is `GameAction::CastSpell` and +/// `GameAction::ActivateAbility` only; every other `GameAction` already returns +/// `true` in [`any_action_may_interfere`] without consulting this. Events are +/// counted from announcement through full resolution, INCLUDING cost payment +/// (CR 601.2b–i for a spell, CR 602.2b for an activated ability, which routes to +/// the same process). `GameAction::PassPriority` is excluded by construction (it +/// returns `false` before the fold), so phase advance is out of domain and a +/// beginning-of-phase trigger cannot be reached through this predicate's callers. +/// +/// ## Fail-closed +/// +/// Exhaustive dispatch with a `_ => false` arm, mirroring +/// [`crate::game::triggers::trigger_event_unreachable_in_phase`]: a mode this +/// predicate cannot classify KEEPS its veto. A future mode is swallowed into +/// conservatism, never into relief. +fn trigger_event_unreachable_by_confined_action( + def: &crate::types::ability::TriggerDefinition, +) -> bool { + use crate::types::triggers::TriggerMode; + + match def.mode { + // LIFE — CR 119.3: "If an effect causes a player to gain life or lose + // life, that player's life total is adjusted accordingly." No allowlisted + // effect adjusts a life total, and no allowlisted COST pays life. See the + // `AbilityCost::PayLife` witness above: this family is the contingent one. + // `PayEcho`/`PayCumulativeUpkeep` additionally route to `match_phase` + // (`game::trigger_matchers`), i.e. they key on `GameEvent::PhaseChanged`, + // which the turn-structure argument below covers independently. + TriggerMode::LifeGained + | TriggerMode::LifeLost + | TriggerMode::LifeLostAll + | TriggerMode::LifeChanged + | TriggerMode::PayLife + | TriggerMode::PayCumulativeUpkeep + | TriggerMode::PayEcho => true, + + // DAMAGE — CR 120.1: "Objects can deal damage to battles, creatures, + // planeswalkers, and players." Searching, shuffling and moving a card + // deal no damage, and no allowlisted cost does either. `Fight`/`FightOnce` + // are in this family by CR 701.14a (each fighting creature "deals damage equal to its + // power to the other creature") and are + // additionally keyed on `EffectKind::Fight` in `game::trigger_matchers`, + // which no allowlisted effect produces. + TriggerMode::DamageDone + | TriggerMode::DamageDoneOnce + | TriggerMode::DamageAll + | TriggerMode::DamageDealtOnce + | TriggerMode::DamageDoneOnceByController + | TriggerMode::DamageReceived + | TriggerMode::DamagePreventedOnce + | TriggerMode::ExcessDamage + | TriggerMode::ExcessDamageAll + | TriggerMode::Fight + | TriggerMode::FightOnce => true, + + // COMBAT — CR 508.1 and CR 509.1 both open "this turn-based action doesn't + // use the stack": attackers and blockers are declared by the turn-based + // actions of CR 506.1's declare-attackers and declare-blockers steps, not + // by any spell or ability. MEASURED in `game::trigger_matchers`: every mode + // below keys on `GameEvent::AttackersDeclared` or + // `GameEvent::BlockersDeclared`, neither of which a cast or an activation + // emits. + // + // The one allowlisted effect that could otherwise put a creature into + // combat is `Effect::ChangeZone`'s `enters_attacking` rider (CR 508.4), + // and `effect_window_reach` already requires `!enters_attacking` for a + // battlefield arrival to be confined — so this family depends on that + // conjunct and not merely on the turn-based-action argument. + // + // `TriggerMode::EntersOrAttacks` is DELIBERATELY ABSENT — see the excluded + // list below. + TriggerMode::Attacks + | TriggerMode::AttackersDeclared + | TriggerMode::AttackersDeclaredOneTarget + | TriggerMode::YouAttack + | TriggerMode::YouAttackUnblocked + | TriggerMode::AttackerBlocked + | TriggerMode::AttackerBlockedOnce + | TriggerMode::AttackerBlockedByCreature + | TriggerMode::AttackerUnblocked + | TriggerMode::AttackerUnblockedOnce + | TriggerMode::Blocks + | TriggerMode::BlockersDeclared + | TriggerMode::BecomesBlocked + | TriggerMode::AttacksOrBlocks + | TriggerMode::BlocksOrBecomesBlocked => true, + + // TURN STRUCTURE — CR 500.1: "A turn consists of five phases, in this + // order …". A phase or turn begins by turn-based action, never because a + // player cast a spell or activated an ability. `PassPriority` is the + // action that CAN advance a phase and it never reaches this predicate + // (see Boundary above). + TriggerMode::Phase | TriggerMode::TurnBegin | TriggerMode::NewGame => true, + + // CARD FLOW the allowlist cannot cause. + // + // * `Drawn` — CR 121.1: "A player draws a card by putting the top card of + // their library into their hand." Doubly unreachable: `match_drawn` keys + // on the dedicated `GameEvent::CardDrawn`, AND no confined action can put + // a card into a hand at all, because `landing_zone_is_confined` answers + // `false` for `Zone::Hand` on both doors out of a library. + // * `Discarded`/`DiscardedAll` — CR 701.9a: "To discard a card, move it + // from its owner's hand to that player's graveyard." `match_discarded` + // keys on the dedicated `GameEvent::Discarded`, which + // `game::zone_pipeline` emits only for a recorded discard, not for a + // generic hand-to-graveyard move. + // * `TokenCreated`/`TokenCreatedOnce` — CR 111.1: tokens are put onto the + // battlefield by effects that say so. `Effect::Token` is not allowlisted, + // and `match_token_created` keys on the dedicated + // `GameEvent::TokenCreated`. + // + // `Milled`/`MilledOnce`/`MilledAll` are DELIBERATELY ABSENT — see below. + TriggerMode::Drawn + | TriggerMode::Discarded + | TriggerMode::DiscardedAll + | TriggerMode::TokenCreated + | TriggerMode::TokenCreatedOnce => true, + + // ── NOT RELIEVED. Each keeps its veto, with the source that reaches it. ── + // + // Directly produced by casting or activating: + // `SpellCast` CR 601.2i — announcing the spell IS the event + // `AbilityActivated` CR 602.2b — likewise for an activation + // `Taps` / `TapsForMana` / `ManaAdded` — `AbilityCost::Tap` and the mana + // the actor spends + // `PlayerPerformedAction` — `game::search_library` emits it + // `SearchedLibrary` — `Effect::SearchLibrary` itself + // `Shuffled` — `Effect::Shuffle` itself + // Produced by the allowlisted `ChangeZone` / `Sacrifice`: + // `Exiled`, `Sacrificed`, `Destroyed`, `ChangesZone`, `ChangesZoneAll`, + // `LeavesBattlefield`, `Revealed`, `BecomesTarget`, `CounterAdded` + // (`game::zone_pipeline` puts counters on an entering permanent), + // `ChangesController`, `Attached`, `Unattach`. + // Unknowable here: + // `StateCondition` — CR 603.2 state triggers watch a game STATE, not an + // event, so no event-stream argument can relieve one; + // `Unknown(_)` — an unclassified Forge mode string, by definition. + // + // THREE MEASURED EXCLUSIONS from families that otherwise look relieved. + // Each was found by reading the matcher rather than the mode name, and + // each reads a GENERIC `GameEvent::ZoneChanged` that an allowlisted + // `Effect::ChangeZone` really does emit: + // + // * `Milled` / `MilledOnce` / `MilledAll` — CR 701.17a defines milling as + // library-to-graveyard, and `game::trigger_matchers::match_milled` keys + // on `ZoneChanged { from: Some(Library), to: Graveyard }` rather than on + // any mill-specific event. `Effect::ChangeZone { origin: Some(Library), + // destination: Graveyard, target: }` is confined here + // (graveyard is a confined landing zone, the target proves control) and + // emits exactly that event, so relieving the family would be unsound. + // * `EntersOrAttacks` — `match_enters_or_attacks` reads `ZoneChanged`, so + // the flagship's own tapped fetch fires it. It is a combat mode by name + // only. + // * `EntersOrHauntedCreatureDies` — dispatches to `match_changes_zone` + // outright (`game::trigger_matchers`). + // + // Fail-closed: every mode this predicate cannot classify keeps its veto. + _ => false, + } +} + +/// CR 603.2: could ANY trigger anywhere on the board fire off a confined action +/// the actor takes in this window? +/// +/// [`any_action_may_interfere`]'s per-action fold reads the acting object's own +/// AST and nothing else, so it cannot see an OBSERVER — a permanent belonging to +/// somebody else whose triggered ability watches for the very event the confined +/// action produces. The maintainer witness is Hedron Crab: "Landfall — Whenever a +/// land you control enters, target player mills three cards." A seat that +/// confidently cracks its own fetchland in front of an opponent's Crab has just +/// milled a player, and no amount of reading the fetchland proves otherwise. +/// +/// Three INDEPENDENT SUFFICIENT reliefs, applied as a DISJUNCTION — a trigger is +/// inert iff at least one holds. They are ordered cheapest-first, and the zone +/// gate MUST stay first: MEASURED on the largest board in the enrolled fixture +/// set it removes 103 of 145 candidate definitions before any other work runs. +/// +/// 1. **Zone of function** — CR 113.6 / CR 603.6: +/// [`crate::game::triggers::trigger_definition_functions_in_zone`] is the +/// single authority. Reading `def.trigger_zones.contains(&zone)` directly is +/// FAIL-OPEN and must never be done here: an EMPTY `trigger_zones` means +/// battlefield-only, so a direct `contains` answers "does not function" for +/// every ordinary battlefield trigger on the board. +/// 2. **Mode** — [`trigger_event_unreachable_by_confined_action`]. +/// 3. **The self-reference carve-out** — a trigger that watches only ITS OWN +/// object (CR 109.5: "you"/"your" refer to the object's controller) and whose +/// object the actor does not own cannot be reached by an action confined to +/// the actor's own resources. All three conjuncts are load-bearing: +/// * `zone_change_clauses.is_empty()`, because a non-empty clause list makes +/// the matcher IGNORE the scalar `valid_card` entirely +/// (`types::ability::TriggerDefinition`), so reading `valid_card` under a +/// disjunctive trigger reads a field the engine does not consult; +/// * `valid_card == Some(TargetFilter::SelfRef)` EXACTLY. This deliberately +/// does NOT reuse [`filter_is_actor_owned`], which answers `true` for +/// `Typed { controller: Some(You) }` — precisely Hedron Crab's `valid_card`, +/// so reusing it would carve out the very trigger this scan exists to catch. +/// `valid_card: None` means UNRESTRICTED rather than self +/// (`game::trigger_index`), and `== Some(SelfRef)` rejects it without a +/// dedicated arm; +/// * `obj.owner != actor`, because the actor's OWN self-referential observer +/// is reachable by the actor's own action. +/// +/// NOT a `TriggerDefinition` destructure, unlike [`ability_window_reach`]'s +/// `..`-free discipline, and the asymmetry is deliberate. The 30 fields not read +/// here are inert, effect-side, or NARROWING — a narrowing field can only make a +/// trigger fire less often, so ignoring it is conservative. The two that can +/// broaden a trigger within its class, `origin_zones` and `zone_change_clauses`, +/// belong exclusively to zone-change modes, and no zone-change mode is ever +/// relieved by arm 2 (`ChangesZone`/`ChangesZoneAll` fall to `_ => false`); +/// `zone_change_clauses` is additionally read directly by arm 3. +/// +/// CR 603.10a: this reads live `state.objects` rather than any look-back +/// snapshot, which is correct here because the question is prospective — what +/// could fire if the actor acts — not what did fire. +fn board_observer_may_react(state: &GameState, actor: PlayerId) -> bool { + state.objects.values().any(|obj| { + crate::game::functioning_abilities::active_trigger_definitions(state, obj).any(|active| { + let def = active.definition; + let inert = !crate::game::triggers::trigger_definition_functions_in_zone(def, obj.zone) + || trigger_event_unreachable_by_confined_action(def) + || (def.zone_change_clauses.is_empty() + && def.valid_card == Some(TargetFilter::SelfRef) + && obj.owner != actor); + !inert + }) + }) +} + /// Stage 2's predicate: does the polled player hold any action that could reach /// past their own resources? /// @@ -738,32 +1056,62 @@ fn indexed_ability_window_reach( /// Missing an action here is an Accept by OMISSION — the direction that loses /// games. /// -/// ponytail: a fetched permanent that itself enables interference is modelled -/// only through its ARRIVAL STATE, never by walking its abilities. -/// `effect_window_reach` keeps a battlefield entry confined only when the AST -/// proves it arrives tapped (CR 110.5b), so the mana axis — the fetched land -/// that taps for mana inside this same window — is closed: an untapped entry -/// reads `MayInterfere`. +/// # What this seam's inputs can and cannot describe +/// +/// A fetched permanent that itself enables interference is modelled only through +/// its ARRIVAL STATE, never by walking its abilities. `effect_window_reach` keeps +/// a battlefield entry confined only when the AST proves it arrives tapped +/// (CR 110.5b), so the mana axis — the fetched land that taps for mana inside +/// this same window — is closed: an untapped entry reads `MayInterfere`. +/// +/// What that leaves outside the seam's description, stated as a property of the +/// inputs rather than as a blanket: a permanent that arrives TAPPED and still +/// enables interference through an ability whose cost is not tapping (a +/// sacrifice-for-mana, say). This function is handed a `GameState` and a list of +/// `GameAction`s. The card that would arrive is, at the moment of the decision, +/// still IN THE LIBRARY — it is not on the board and it is not the subject of any +/// enumerated action — so neither input contains it and neither the per-action +/// fold nor the board scan below has an object to read. `board_observer_may_react` +/// specifically cannot see it: `trigger_definition_functions_in_zone` correctly +/// answers "does not function" for a library card, which is the CR 113.6 rule and +/// not an omission. Reaching it at all would require resolving the search — a +/// different kind of input than this seam takes. /// -/// What remains unmodelled, stated precisely rather than as a blanket: a -/// permanent that arrives TAPPED and still enables interference, via an ability -/// whose cost is not tapping (e.g. sacrifice-for-mana). Reaching that needs a -/// further priority window, and this design does NOT claim one is guaranteed — -/// CR 732.1b says only that the shortcut rules *can be used* on a loop, and -/// CR 732.2a makes proposing permissive ("may suggest"). -/// Scope of that remainder, on BOTH axes: +/// Its cost, on both axes, for the reader deciding whether that matters: /// - across windows: a bounded miss — a seat's fetched answer goes unused for /// THIS shortcut; -/// - within the window: the worst case is NOT bounded by "one shortcut". On -/// an `UntilLethal` offer the accepted sequence runs to lethal, so the -/// in-window cost of a missed out is elimination. +/// - within the window: NOT bounded by "one shortcut". On an `UntilLethal` +/// offer the accepted sequence runs to lethal, so the in-window cost of a +/// missed out is elimination. /// -/// Accepted because the miss requires the out to be reachable ONLY through the -/// fetched permanent AND that permanent to arrive tapped; a directly-castable -/// answer is already caught by the top-level fold. Upgrade path: walk the -/// fetched object's own abilities if a real game shows a missed out. Owner: -/// this lane, deferral burndown. -pub(crate) fn any_action_may_interfere(state: &GameState, actions: &[GameAction]) -> bool { +/// The miss requires the out to be reachable ONLY through the fetched permanent +/// AND that permanent to arrive tapped; a directly-castable answer is already +/// caught by the top-level fold, and CR 732.1b makes shortcut use permissive +/// ("can be used") rather than guaranteed. +/// +/// # Two board-level conjuncts, evaluated ONCE +/// +/// Both run BEFORE the action fold, because each is a fact about the BOARD and +/// not about any action: re-deriving them per action would multiply a whole-board +/// scan by the action count and produce the identical answer every time. +/// +/// * [`actor_owns_everything_they_control`] — the fold's filter proofs are +/// CONTROL proofs (CR 109.5), and CR 701.21a routes a sacrificed permanent to +/// its OWNER's graveyard. +/// * [`board_observer_may_react`] — a confined action is still OBSERVED +/// (CR 603.2); an opponent's Hedron Crab turns the actor's own fetch into a +/// mill targeting somebody else. +pub(crate) fn any_action_may_interfere( + state: &GameState, + actor: PlayerId, + actions: &[GameAction], +) -> bool { + if !actor_owns_everything_they_control(state, actor) { + return true; + } + if board_observer_may_react(state, actor) { + return true; + } actions.iter().any(|action| match action { GameAction::PassPriority => false, GameAction::CastSpell { object_id, .. } => { @@ -1576,6 +1924,13 @@ mod tests { strive_cost: _, solve_condition: _, // lands as `obj.case_state` attraction_lights: _, + // GATED as `obj.parse_warnings`. It was in the NOT-RULES-BEARING bucket + // below, reasoned "parser diagnostics, never consulted at runtime". That + // reason was TRUE about the field and WRONG about the conclusion: a + // diagnostic is not rules text, it is the parser's report that some printed + // rules text is MISSING from `abilities`, which is the one thing that makes + // an otherwise-confined fold unsound (module doc §2's named residual). + parse_warnings: _, // `metadata` is MIXED, so it is DESTRUCTURED rather than bound whole. Binding // it was a hole in the guard that the guard's own comment declared and did not // close: `spellbook` is exactly a rules-bearing field that arrived inside this @@ -1629,7 +1984,6 @@ mod tests { is_commander: _, // format eligibility is_oathbreaker: _, // format eligibility deck_copy_limit: _, // deck construction - parse_warnings: _, // parser diagnostics, never consulted at runtime rarities: _, // printing metadata } = CardFace::default(); } @@ -1659,7 +2013,7 @@ mod tests { // `clippy::type_complexity` rejects the inline tuple-of-fn-ptr array; the alias is // the lint's own suggested remedy. type FaceSetter = fn(&mut CardFace); - let cases: [(&str, FaceSetter); 12] = [ + let cases: [(&str, FaceSetter); 13] = [ // --- carried on the face itself. ("keywords", |f| f.keywords = vec![Keyword::Cascade]), ("cleave_variant", |f| { @@ -1686,6 +2040,19 @@ mod tests { ("metadata.spellbook", |f| { f.metadata.spellbook = vec!["Lightning Bolt".to_string()] }), + // The parser's own report that some printed clause is NOT in `abilities`. + // `IgnoredRemainder` is the cheapest variant to build and the gate is a + // presence check, so the variant is not load-bearing — that the field + // SURVIVES `apply_card_face_to_object` is. + ("parse_warnings", |f| { + f.parse_warnings = vec![ + crate::parser::oracle_ir::diagnostic::OracleDiagnostic::IgnoredRemainder { + text: "and you gain 2 life".to_string(), + parser: "probe".to_string(), + line_index: 0, + }, + ] + }), // --- DERIVED FROM `card_type.subtypes` ALONE, with no face field behind them. // These four are why the guard's `card_type` bucket reason had to be rewritten: // the face's own `card_type` is safe to skip only because all four landing @@ -1907,6 +2274,7 @@ mod tests { assert!( any_action_may_interfere( &state, + PlayerId(0), &[GameAction::ActivateAbility { source_id: missing, ability_index: 7, @@ -1915,7 +2283,7 @@ mod tests { "an out-of-range ability index is interference, not a confined no-op" ); assert!( - !any_action_may_interfere(&state, &[GameAction::PassPriority]), + !any_action_may_interfere(&state, PlayerId(0), &[GameAction::PassPriority]), "reach-guard: the fold CAN return false, so the trues above are attributable" ); } @@ -2302,4 +2670,478 @@ mod tests { proven tapped and is reach by construction" ); } + + // ======================================================================= + // PR #7101 — the predicates the integration rows exercise through the real + // board, asserted here at the level the board cannot reach (all three are + // private, and widening them to `pub` for a test would be the wrong trade). + // ======================================================================= + + use crate::types::ability::TriggerDefinition; + use crate::types::triggers::TriggerMode; + + fn trigger(mode: TriggerMode) -> TriggerDefinition { + TriggerDefinition::new(mode) + } + + /// Put one object carrying one trigger on the board and ask the scan. + fn scan_with( + owner: crate::types::player::PlayerId, + zone: Zone, + def: TriggerDefinition, + actor: crate::types::player::PlayerId, + ) -> bool { + let mut state = GameState::default(); + let id = create_object( + &mut state, + crate::types::identifiers::CardId(1), + owner, + "Observer".to_string(), + zone, + ); + state + .objects + .get_mut(&id) + .expect("just created") + .install_trigger_base_definitions(std::sync::Arc::new(vec![def])) + .expect("staging one printed trigger"); + board_observer_may_react(&state, actor) + } + + const ACTOR: crate::types::player::PlayerId = crate::types::player::PlayerId(0); + const OPPONENT: crate::types::player::PlayerId = crate::types::player::PlayerId(1); + + /// **T2.3 — the B4a NEGATIVE CONTROL, and the most load-bearing row here.** + /// + /// The carve-out and [`filter_is_actor_owned`] answer two DIFFERENT questions + /// on the identical input, and the whole [HIGH] fix depends on that gap. + /// `Typed { controller: Some(You) }` is Hedron Crab's `valid_card`; if the + /// carve-out had reused `filter_is_actor_owned` — the obvious reuse, and the + /// one this repo's building-block discipline actively invites — the crab + /// would have been carved out and the finding would have survived the fix. + /// + /// Both directions are asserted, so neither can be a constant: the helper + /// says `true` and the shipped carve-out says "not relieved" on ONE input. + #[test] + fn t2_3_the_carve_out_rejects_the_typed_you_shape_that_filter_is_actor_owned_accepts() { + let hedron_crab_shape = TargetFilter::Typed(crate::types::ability::TypedFilter { + controller: Some(ControllerRef::You), + ..Default::default() + }); + + assert!( + filter_is_actor_owned(&hedron_crab_shape), + "PREMISE: the helper really does accept this shape. If this ever goes false the \ + asymmetry below stops being a hazard and this row stops being a control" + ); + + let mut def = trigger(TriggerMode::ChangesZone); + def.valid_card = Some(hedron_crab_shape); + assert!( + scan_with(OPPONENT, Zone::Battlefield, def, ACTOR), + "THE [HIGH] FIX: an opponent-owned `Typed{{controller: You}}` observer must KEEP the \ + veto. Reusing `filter_is_actor_owned` as the carve-out predicate makes this pass \ + through as relieved — that is the exact defect, and this assertion is what forbids \ + the refactor that reintroduces it" + ); + + let mut self_ref = trigger(TriggerMode::ChangesZone); + self_ref.valid_card = Some(TargetFilter::SelfRef); + assert!( + !scan_with(OPPONENT, Zone::Battlefield, self_ref, ACTOR), + "…while the EXACT `SelfRef` shape is relieved. Without this half the row above would \ + pass under a carve-out that never fires at all" + ); + } + + /// **T2.5 — the relieved-mode table**, one row per family. + /// + /// The integration-level witness for this table is the flagship board itself: + /// Dina, Soul Steeper (`LifeGained`) and Bloodthirsty Conqueror (`LifeLost`) + /// are two of its three zone-gate survivors, and they are relieved by the Life + /// family alone. + /// + /// REVERT-PROBE (executed): delete the Life arm ⇒ those two survive the scan, + /// `board_observer_may_react` returns true for P2, and + /// `v1_live_path_fetchland_seat_accepts_on_the_real_4p_board` flips to + /// `Shorten`. + #[test] + fn t2_5_each_relieved_family_is_relieved_and_its_siblings_are_not() { + let relieved = [ + // CR 119.3 — life. + TriggerMode::LifeGained, + TriggerMode::LifeLost, + TriggerMode::LifeLostAll, + TriggerMode::LifeChanged, + TriggerMode::PayLife, + TriggerMode::PayCumulativeUpkeep, + TriggerMode::PayEcho, + // CR 120.1 — damage. + TriggerMode::DamageDone, + TriggerMode::DamageReceived, + TriggerMode::ExcessDamage, + TriggerMode::Fight, + // CR 508.1 / CR 509.1 — combat turn-based actions. + TriggerMode::Attacks, + TriggerMode::Blocks, + TriggerMode::AttackersDeclared, + TriggerMode::BlockersDeclared, + // CR 500.1 — turn structure. + TriggerMode::Phase, + TriggerMode::TurnBegin, + TriggerMode::NewGame, + // Card flow the allowlist cannot cause. + TriggerMode::Drawn, + TriggerMode::Discarded, + TriggerMode::TokenCreated, + ]; + for mode in relieved { + let def = trigger(mode.clone()); + assert!( + trigger_event_unreachable_by_confined_action(&def), + "{mode:?} must be relieved: no confined action can produce its trigger event" + ); + assert!( + !scan_with(OPPONENT, Zone::Battlefield, trigger(mode.clone()), ACTOR), + "{mode:?} must also be relieved END TO END, through the scan the caller runs" + ); + } + + // The other direction, on modes a confined action really does produce. + for mode in [ + TriggerMode::SpellCast, + TriggerMode::AbilityActivated, + TriggerMode::Taps, + TriggerMode::TapsForMana, + TriggerMode::ManaAdded, + TriggerMode::Shuffled, + TriggerMode::SearchedLibrary, + TriggerMode::PlayerPerformedAction, + TriggerMode::Sacrificed, + TriggerMode::Destroyed, + TriggerMode::Exiled, + TriggerMode::ChangesZone, + TriggerMode::BecomesTarget, + TriggerMode::CounterAdded, + TriggerMode::Revealed, + ] { + assert!( + !trigger_event_unreachable_by_confined_action(&trigger(mode.clone())), + "{mode:?} IS producible by a confined cast or activation, so it must keep its veto" + ); + } + } + + /// **T2.6 — an unclassifiable mode KEEPS its veto.** + /// + /// The fail-closed direction, and the one an earlier draft of this work had + /// backwards. `StateCondition` watches a game STATE rather than an event + /// (CR 603.2), so no event-stream argument can ever relieve it, and + /// `Unknown(_)` is an unclassified Forge mode string by construction. + /// + /// REVERT-PROBE (executed): change the predicate's `_ => false` arm to + /// `_ => true` ⇒ this row fails. + #[test] + fn t2_6_a_mode_the_predicate_cannot_classify_keeps_its_veto() { + for mode in [ + TriggerMode::StateCondition, + TriggerMode::Unknown("SomeFutureForgeMode".to_string()), + // The three MEASURED exclusions from families that read a GENERIC + // `GameEvent::ZoneChanged` an allowlisted `Effect::ChangeZone` emits. + // `match_milled` keys on `ZoneChanged { from: Library, to: Graveyard }` + // (CR 701.17a), which a confined actor-owned self-mill produces. + TriggerMode::Milled, + TriggerMode::MilledAll, + TriggerMode::EntersOrAttacks, + TriggerMode::EntersOrHauntedCreatureDies, + ] { + assert!( + !trigger_event_unreachable_by_confined_action(&trigger(mode.clone())), + "{mode:?} must NOT be relieved — either it is unclassifiable, or its matcher reads \ + a generic zone-change event the confined allowlist really does emit" + ); + } + } + + /// **T2.7 — a disjunctive zone-change trigger is not carved out.** + /// + /// Scrap Trawler's shape: "Whenever this creature dies OR another artifact you + /// control is put into a graveyard from the battlefield, …". When + /// `zone_change_clauses` is non-empty the matcher IGNORES the scalar + /// `valid_card` entirely (`types::ability::TriggerDefinition`), so a `SelfRef` + /// sitting in that field describes only the FIRST clause and says nothing + /// about the second. Carving out on it would relieve a trigger that fires on + /// other objects. + /// + /// Matched pair on the clause list alone. + #[test] + fn t2_7_a_disjunctive_zone_change_trigger_is_not_relieved_by_its_scalar_valid_card() { + let mut scalar = trigger(TriggerMode::ChangesZone); + scalar.valid_card = Some(TargetFilter::SelfRef); + assert!( + !scan_with(OPPONENT, Zone::Battlefield, scalar, ACTOR), + "control: with NO clauses the scalar `valid_card` is what the matcher reads, so the \ + carve-out applies" + ); + + let mut disjunctive = trigger(TriggerMode::ChangesZone); + disjunctive.valid_card = Some(TargetFilter::SelfRef); + disjunctive.zone_change_clauses = vec![crate::types::ability::ZoneChangeClause { + origin: crate::types::ability::OriginConstraint::Equals(Zone::Battlefield), + destination: Some(Zone::Graveyard), + destination_constraint: crate::types::ability::OriginConstraint::any_default(), + valid_card: None, + }]; + assert!( + scan_with(OPPONENT, Zone::Battlefield, disjunctive, ACTOR), + "witness: one clause added and nothing else. The engine now ignores `valid_card`, so \ + reading it would be reading a field that no longer decides anything" + ); + } + + /// **T2.10 — SHAPE PIN.** The relieved set is asserted against `TriggerMode`'s + /// own variant list, so a family that silently widens reds here. + /// + /// The list below is the COMPLETE set of modes this module relieves. A new + /// `TriggerMode` variant defaults to `_ => false` (not relieved) and does not + /// break this row — that is the fail-closed direction and it is correct. What + /// this catches is the dangerous edit: somebody adding a variant to a relieved + /// arm without re-deriving the soundness argument in that arm's comment. + #[test] + fn t2_10_the_relieved_mode_set_is_exactly_this_list() { + let expected: Vec = vec![ + TriggerMode::LifeGained, + TriggerMode::LifeLost, + TriggerMode::LifeLostAll, + TriggerMode::LifeChanged, + TriggerMode::PayLife, + TriggerMode::PayCumulativeUpkeep, + TriggerMode::PayEcho, + TriggerMode::DamageDone, + TriggerMode::DamageDoneOnce, + TriggerMode::DamageAll, + TriggerMode::DamageDealtOnce, + TriggerMode::DamageDoneOnceByController, + TriggerMode::DamageReceived, + TriggerMode::DamagePreventedOnce, + TriggerMode::ExcessDamage, + TriggerMode::ExcessDamageAll, + TriggerMode::Fight, + TriggerMode::FightOnce, + TriggerMode::Attacks, + TriggerMode::AttackersDeclared, + TriggerMode::AttackersDeclaredOneTarget, + TriggerMode::YouAttack, + TriggerMode::YouAttackUnblocked, + TriggerMode::AttackerBlocked, + TriggerMode::AttackerBlockedOnce, + TriggerMode::AttackerBlockedByCreature, + TriggerMode::AttackerUnblocked, + TriggerMode::AttackerUnblockedOnce, + TriggerMode::Blocks, + TriggerMode::BlockersDeclared, + TriggerMode::BecomesBlocked, + TriggerMode::AttacksOrBlocks, + TriggerMode::BlocksOrBecomesBlocked, + TriggerMode::Phase, + TriggerMode::TurnBegin, + TriggerMode::NewGame, + TriggerMode::Drawn, + TriggerMode::Discarded, + TriggerMode::DiscardedAll, + TriggerMode::TokenCreated, + TriggerMode::TokenCreatedOnce, + ]; + + for mode in &expected { + assert!( + trigger_event_unreachable_by_confined_action(&trigger(mode.clone())), + "{mode:?} is in the pinned relieved list but the predicate does not relieve it" + ); + } + + // REVERSE CONTAINMENT, over the enum's own declaration read from source. + // `TriggerMode` derives no iteration trait and there is no name table, so + // the only total enumeration available is the declaration itself; a + // hand-copied list here would be the very drift this row exists to catch. + // Each scanned name goes back through `FromStr`, which is the decoder the + // card pipeline uses. + let source = std::fs::read_to_string(concat!( + env!("CARGO_MANIFEST_DIR"), + "/src/types/triggers.rs" + )) + .expect("the enum's own source file is readable"); + let body = source + .split_once("pub enum TriggerMode {") + .expect("the enum declaration must be findable") + .1; + let body = body.split_once("\n}").expect("…and terminated").0; + + // The names this enumeration cannot construct, PINNED so the gap cannot + // grow silently. Three carry payloads and have no bare-name spelling for + // `FromStr`; the other three are PRE-EXISTING gaps in + // `types::triggers`'s own decoder — they are declared on the enum but have + // no `FromStr` arm, so `from_str` degrades them to `Unknown`. That gap is + // not this module's to fix (and `types/triggers.rs` is outside this + // change), but it IS this row's to disclose: none of the six is in the + // relieved list above, so the reverse containment below covers 165 of the + // enum's 171 variants and this constant names the remaining six. + // Declaration order, so a reordering of the enum is visible here too. + const UNCONSTRUCTIBLE: [&str; 6] = [ + "KeywordAbilityActivated", // payload + "Explored", // no `FromStr` arm + "Planeswalked", // payload + "Copied", // no `FromStr` arm + "HauntedCreatureDies", // no `FromStr` arm + "Unknown", // payload + ]; + let mut undecodable = Vec::new(); + + let mut scanned = 0usize; + let mut unexpected = Vec::new(); + for line in body.lines() { + let line = line.trim(); + // Payload variants FIRST: `Foo(Bar),` would otherwise strip only the + // comma and then fail the identifier filter below, silently dropping + // the variant from the enumeration entirely. + let Some(name) = line + .split_once('(') + .map(|(head, _)| head) + .or_else(|| line.strip_suffix(" {")) + .or_else(|| line.strip_suffix(',')) + else { + continue; + }; + let name = name.trim(); + if name.is_empty() + || !name.chars().next().is_some_and(|c| c.is_ascii_uppercase()) + || !name.chars().all(|c| c.is_ascii_alphanumeric()) + { + continue; + } + let mode: TriggerMode = name.parse().expect("FromStr for TriggerMode is Infallible"); + if matches!(mode, TriggerMode::Unknown(_)) { + undecodable.push(name.to_string()); + continue; + } + scanned += 1; + if trigger_event_unreachable_by_confined_action(&trigger(mode.clone())) + && !expected.contains(&mode) + { + unexpected.push(mode); + } + } + + assert_eq!( + undecodable, UNCONSTRUCTIBLE, + "the set of `TriggerMode` variants this enumeration cannot construct changed. If a \ + variant was ADDED to it, the reverse containment below silently stopped covering \ + that variant — restore its `FromStr` arm rather than widening this constant" + ); + assert!( + scanned >= 165, + "the source scan must actually reach the variant list — a parsing change that made it \ + match nothing, or match only a prefix, would turn this whole row vacuous; scanned \ + {scanned}" + ); + assert!( + unexpected.is_empty(), + "these modes are relieved but are NOT in the pinned list — a family widened without \ + its soundness comment being re-derived: {unexpected:?}" + ); + } + + /// **T2.4b — an EMPTY `trigger_zones` means battlefield, not nowhere.** + /// + /// CR 113.6: the zone-of-function question has one authority, + /// `game::triggers::trigger_definition_functions_in_zone`, and the reason the + /// scan must call it rather than read the field is this exact shape. An empty + /// list is the engine's spelling of "battlefield only"; a direct + /// `def.trigger_zones.contains(&zone)` answers `false` for it and would + /// relieve every ordinary battlefield observer on the board — the FAIL-OPEN + /// direction, which produces a false `Accept`. + /// + /// Built here rather than on the real board because it cannot be built there: + /// MEASURED, every active trigger definition on the flagship carries an + /// explicit `trigger_zones: [Battlefield]`, so the direct read and the + /// authority agree across the whole fixture corpus and no integration row can + /// tell them apart. Latent, not live — and closed for the same reason this + /// module closed its `Zone::Stack` arm. + /// + /// REVERT-PROBE (executed): swap the authority call for + /// `def.trigger_zones.contains(&obj.zone)` ⇒ this row fails. + #[test] + fn t2_4b_an_empty_trigger_zones_list_means_battlefield_not_nowhere() { + let mut def = trigger(TriggerMode::ChangesZone); + def.valid_card = Some(TargetFilter::Typed(crate::types::ability::TypedFilter { + controller: Some(ControllerRef::You), + ..Default::default() + })); + assert!( + def.trigger_zones.is_empty(), + "PREMISE: a fresh `TriggerDefinition` carries no zone list, which is the shape under \ + test" + ); + + assert!( + scan_with(OPPONENT, Zone::Battlefield, def.clone(), ACTOR), + "CR 113.6: an empty `trigger_zones` FUNCTIONS on the battlefield, so this observer \ + keeps its veto. A direct `contains` read answers `false` here and relieves it" + ); + assert!( + !scan_with(OPPONENT, Zone::Hand, def, ACTOR), + "…and the same definition does NOT function from hand, so the gate is a distinction \ + and not a constant" + ); + } + + /// **T3.1 — an unread parse warning is not proof of confinement.** + /// + /// RAMPANT_GROWTH is the clean single-variable discriminator: it carries no + /// keywords, no modal, no additional cost, no triggers, no statics and no + /// replacements, so every other disjunct of the gate is already false and the + /// verdict below can only be produced by `parse_warnings`. (Crop Rotation + /// cannot serve — it is over-determined by `additional_cost`.) + /// + /// Both directions on ONE object, one field mutated. + #[test] + fn t3_1_a_parse_diagnostic_gates_an_otherwise_confined_object() { + let mut state = GameState::default(); + let id = create_object( + &mut state, + crate::types::identifiers::CardId(1), + crate::types::player::PlayerId(0), + RAMPANT_GROWTH.name.to_string(), + Zone::Hand, + ); + let parsed = parse_oracle_text(RAMPANT_GROWTH.oracle, RAMPANT_GROWTH.name, &[], &[], &[]); + let obj = state.objects.get_mut(&id).expect("just created"); + obj.abilities = std::sync::Arc::new(parsed.abilities); + + assert_eq!( + object_window_reach(&state, id), + WindowReach::OwnResourcesOnly, + "PREMISE: with a clean parse this card is the module's flagship confined shape. If \ + this direction ever fails the row below stops measuring the diagnostic" + ); + + state + .objects + .get_mut(&id) + .expect("just created") + .parse_warnings = vec![ + crate::parser::oracle_ir::diagnostic::OracleDiagnostic::IgnoredRemainder { + text: "and each opponent loses 2 life".to_string(), + parser: "probe".to_string(), + line_index: 0, + }, + ]; + assert_eq!( + object_window_reach(&state, id), + WindowReach::MayInterfere, + "the parser reported that some printed clause never became an `AbilityDefinition`. \ + Proving confinement from the abilities that DID parse is proving it from the fraction \ + of the card the classifier can see — the module doc's §2 residual, now in band" + ); + } } diff --git a/crates/engine/src/game/game_object.rs b/crates/engine/src/game/game_object.rs index 2e87a31108..9232095032 100644 --- a/crates/engine/src/game/game_object.rs +++ b/crates/engine/src/game/game_object.rs @@ -549,6 +549,34 @@ pub struct GameObject { #[serde(default, skip_serializing_if = "Vec::is_empty")] pub spellbook: Vec, + /// Parser diagnostics for this face, copied verbatim from + /// `CardFace::parse_warnings` by `game::printed_cards`. + /// + /// NOT a rules field, and it does not change how anything resolves. It is + /// carried onto the object because a diagnostic is EVIDENCE ABOUT the rules + /// content: it records that the parser saw printed text it could not turn + /// into an `AbilityDefinition`. `game::coverage` already reads the same list + /// off the face to decide whether a card is supported. Any consumer that + /// wants to prove an object's printed rules text is fully modelled has to be + /// able to see that the parse was lossy, and before this field existed that + /// evidence stopped at the card database. + /// + /// `skip_serializing_if` keeps every existing dump byte-identical: the field + /// is empty for a clean parse, which is the overwhelming majority of objects. + /// + /// DELIBERATELY ABSENT FROM `CopiableValues`. CR 707.2 gives a copy the + /// copiable values of the original's CHARACTERISTICS, and CR 707.2a says why + /// the abilities come along: "those values are derived from its rules text". + /// A parse diagnostic is not derived from the rules text — it is a statement + /// about this engine's READING of it — so it is not a characteristic and a + /// copy does not acquire it. The consequence, stated rather than left to be + /// discovered: a token copy carries the source's `abilities` but its own + /// (empty) diagnostics. That is exactly the coverage a copy had before this + /// field existed; the field narrows the gap for printed objects and leaves + /// the copy case where it already was. + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub parse_warnings: Vec, + // Back face data for double-faced cards (DFCs) pub back_face: Option, @@ -1270,6 +1298,15 @@ fn _gameobject_partition_is_total(o: &GameObject) { token_image_ref: _, source_related_token_ids: _, spellbook: _, + // IMMUTABLE. Written exactly once, by `printed_cards::apply_card_face_to_object`, + // as a verbatim clone of the face's own diagnostics; nothing mutates it + // afterwards. MEASURED by `grep -rn 'parse_warnings\s*=' crates/engine/src/`: + // the only assignments in the crate are `parser::oracle`'s write to a + // `ParsedCard` result and a local `bool` in `game::coverage` — neither is a + // `GameObject` field write. Two objects with the same printed face therefore + // always agree here, so it cannot carry a per-object divergence the CR 104.4b + // comparator would need to see. + parse_warnings: _, back_face: _, specialize_faces: _, specialized_color: _, @@ -2144,6 +2181,7 @@ impl GameObject { token_image_ref: None, source_related_token_ids: Vec::new(), spellbook: Vec::new(), + parse_warnings: Vec::new(), back_face: None, specialize_faces: None, specialized_color: None, diff --git a/crates/engine/src/game/printed_cards.rs b/crates/engine/src/game/printed_cards.rs index b156e6c9c0..5a9c2a9815 100644 --- a/crates/engine/src/game/printed_cards.rs +++ b/crates/engine/src/game/printed_cards.rs @@ -184,6 +184,10 @@ pub fn apply_card_face_to_object(obj: &mut GameObject, card_face: &CardFace) { obj.base_printed_ref = obj.printed_ref.clone(); obj.source_related_token_ids = card_face.metadata.related_token_ids.clone(); obj.spellbook = card_face.metadata.spellbook.clone(); + // Evidence that this face's printed text did not parse cleanly. Carried onto + // the object so a consumer can tell "this card has no such ability" apart from + // "the parser could not read that clause". + obj.parse_warnings = card_face.parse_warnings.clone(); obj.modal = card_face.modal.clone(); obj.additional_cost = card_face.additional_cost.clone(); obj.strive_cost = card_face.strive_cost.clone(); diff --git a/crates/engine/tests/integration/shorten_efficacy.rs b/crates/engine/tests/integration/shorten_efficacy.rs index 02772633a9..1bc88f867d 100644 --- a/crates/engine/tests/integration/shorten_efficacy.rs +++ b/crates/engine/tests/integration/shorten_efficacy.rs @@ -2266,3 +2266,450 @@ fn v10c_an_untapped_fetch_that_funds_an_unaffordable_answer_keeps_its_window() { the assertion an over-broad version of this fix destroys first" ); } + +// =========================================================================== +// PR #7101 — the two maintainer findings, both on the REAL 4p board. +// +// SHARED PREMISE, MEASURED once here rather than re-asserted per row. At the +// offer beat the flagship board carries 171 active trigger definitions; the +// CR 113.6 zone-of-function gate removes 168, leaving exactly three: +// +// Dina, Soul Steeper LifeGained valid_card=None owner=P0 +// Bloodthirsty Conqueror LifeLost valid_card=None owner=P0 +// Abundant Growth ChangesZone valid_card=SelfRef owner=P1 +// +// Dina and the Conqueror are relieved by the MODE gate (CR 119.3: no confined +// action adjusts a life total). Abundant Growth is relieved for P2 by the +// SELF-REFERENCE carve-out and by nothing else — `obj.owner (P1) != actor (P2)` +// is the whole of it. That is why `v1_live_path_*` still Accepts, and it is why +// polling P1 on this same board would find a live observer: for P1 the carve-out +// conjunct is false. P1 is nevertheless safe, and NOT because "no board fires" — +// it is because `smart_shortcut_response` returns `Accept` from STAGE 1, before +// `any_action_may_interfere` ever runs, which `v1_live_path_*`'s own sibling +// control pins via `!stage_one_meaningful(&other, seat)`. +// =========================================================================== + +const HEDRON_CRAB: &str = "Landfall — Whenever a land you control enters, target player mills \ + three cards. (They put the top three cards of their library into their \ + graveyard.)"; +const BLOODGHAST_LANDFALL: &str = "Landfall — Whenever a land you control enters, you may return \ + this card from your graveyard to the battlefield."; + +/// Stage a real parsed OBSERVER — a card whose rules content is a printed +/// TRIGGER rather than an activated/spell ability — owned and controlled by +/// `player`. +/// +/// Distinct from `give_parsed_card` above on purpose: that helper stages the +/// ACTING object and asserts exactly one parsed *ability*, which is the premise +/// the V10 rows need and the exact opposite of what an observer carries. Verbatim +/// Oracle text under the card's REAL name — a paraphrase can take a different +/// parser branch and green a row while the printed card stays broken. +fn give_parsed_observer( + state: &mut GameState, + player: PlayerId, + zone: Zone, + name: &str, + oracle: &str, +) -> ObjectId { + let parsed = engine::parser::oracle::parse_oracle_text(oracle, name, &[], &[], &[]); + assert_eq!( + parsed.triggers.len(), + 1, + "PREMISE: {name} must parse to exactly one printed trigger, or the row below cannot \ + attribute its verdict to that trigger; got {:?}", + parsed.triggers + ); + let id = engine::game::zones::create_object( + state, + CardId(state.next_object_id), + player, + name.to_string(), + zone, + ); + let obj = state.objects.get_mut(&id).expect("just created"); + obj.card_types.core_types.push(CoreType::Creature); + obj.base_card_types = obj.card_types.clone(); + obj.install_trigger_base_definitions(std::sync::Arc::new(parsed.triggers)) + .expect("staging one printed trigger set on a fresh object"); + state.layers_dirty = LayersDirty::full(); + id +} + +/// Every active trigger definition on `object`, rendered for assertions. +fn trigger_shapes(state: &GameState, object: ObjectId) -> Vec { + let obj = state.objects.get(&object).expect("staged object exists"); + engine::game::functioning_abilities::active_trigger_definitions(state, obj) + .map(|a| { + format!( + "mode={:?} valid_card={:?} trigger_zones={:?} zcc={}", + a.definition.mode, + a.definition.valid_card, + a.definition.trigger_zones, + a.definition.zone_change_clauses.len() + ) + }) + .collect() +} + +/// **T1.2 — the [MED] finding.** `SelfRef` / `Controller` prove CONTROL, never +/// OWNERSHIP. +/// +/// CR 110.2 makes owner and controller independent. CR 701.21a: "To sacrifice a +/// permanent, its controller moves it from the battlefield directly to its +/// OWNER'S graveyard." So when P2 cracks a Terramorphic Expanse it controls but +/// does NOT own, the land lands in somebody else's graveyard — a per-player zone +/// (CR 400.1) — and the action was never confined at all. The fold's +/// `filter_is_actor_owned(sacrifice.target)` says `true` regardless, because +/// `TargetFilter::SelfRef` resolves through control (CR 109.5). +/// +/// ONE VARIABLE against `v1_live_path_fetchland_seat_accepts_on_the_real_4p_board`: +/// the same board, the same beat, the same offer, the same single action — only +/// `ObjectId(203).owner` differs. MEASURED: all four seats own everything they +/// control on this dump naturally, so the violating shape has to be constructed; +/// it is constructed on the flagship's OWN fetchland rather than on a spare +/// object so that the mis-owned permanent IS the one being sacrificed. +/// +/// REVERT-PROBE (executed): trivialize `actor_owns_everything_they_control` to +/// `true` ⇒ this row returns `Accept` and fails. +#[test] +fn t1_2_a_controlled_but_unowned_fetchland_is_not_confined() { + let mut board = live_path_board(); + drive_to_offer(&mut board, 400).expect("the offer must fire"); + let mut polled = declare_and_poll(&board, P2); + + // REACH-GUARD, before the mutation: an `Accept` produced by an empty seat + // would be indistinguishable from an `Accept` produced by the predicate. + let non_pass = non_pass_actions(&polled, P2); + assert!( + !non_pass.is_empty(), + "REACH-GUARD: P2 must hold a non-pass action, or stage 1 answers and stage 2 never runs" + ); + assert!( + non_pass + .iter() + .any(|a| a.contains("Terramorphic Expanse") && a.contains("zone=Some(Battlefield)")), + "REACH-GUARD: the action under test must be the fetchland activation the finding names; \ + got {non_pass:?}" + ); + assert!( + stage_one_meaningful(&polled, P2), + "REACH-GUARD: stage 1 must still pass P2 through to stage 2" + ); + + let fetch = *polled + .objects + .values() + .find(|o| o.name == "Terramorphic Expanse" && o.controller == P2) + .map(|o| &o.id) + .expect("P2's fetchland is on this board"); + + // CONTROL half — untouched board, unchanged answer. + assert_eq!( + engine::ai_support::smart_shortcut_response(&polled, P2), + ShortcutResponse::Accept, + "matched control (T1.3): with ownership intact the seat still Accepts, so the flip below \ + is attributable to the owner field and to nothing else about this board" + ); + + // WITNESS half — one field. + polled.objects.get_mut(&fetch).expect("just read").owner = P1; + assert_eq!( + engine::ai_support::smart_shortcut_response(&polled, P2), + ShortcutResponse::Shorten { at_iteration: 0 }, + "CR 701.21a: sacrificing a permanent P2 controls but P1 OWNS puts a card into P1's \ + graveyard. `filter_is_actor_owned` cannot see that — it proves control (CR 109.5) — so \ + the ownership fact has to be proven at board level or this Accept is unsound" + ); +} + +/// **T2.1 — the [HIGH] finding.** A confined action is still OBSERVED. +/// +/// CR 603.2: "Whenever a game event or game state matches a triggered ability's +/// trigger event, that ability automatically triggers." Reading the ACTING +/// object's AST proves what that object does; it proves nothing about what the +/// rest of the board is watching for. Hedron Crab watches for exactly the event +/// the flagship's confined fetch produces, and its effect targets a PLAYER. +/// +/// The crab is OPPONENT-owned on purpose. Actor-owned, both the shipped +/// carve-out and the `filter_is_actor_owned` shape rejected in T2.3 would relieve +/// it (the `obj.owner != actor` conjunct rescues it), so an actor-owned crab +/// cannot tell the two apart. Only the opponent-owned one discriminates. +/// +/// REVERT-PROBE (executed): delete the `board_observer_may_react` conjunct from +/// `any_action_may_interfere` ⇒ this row returns `Accept` and fails. +#[test] +fn t2_1_an_opponent_owned_landfall_observer_defeats_a_confined_fetch() { + let mut board = live_path_board(); + drive_to_offer(&mut board, 400).expect("the offer must fire"); + + // MATCHED CONTROL (T2.2) — same board, same beat, no crab. + let clean = declare_and_poll(&board, P2); + assert!( + stage_one_meaningful(&clean, P2), + "REACH-GUARD: stage 1 passes P2 through, so both halves below measure stage 2" + ); + assert_eq!( + engine::ai_support::smart_shortcut_response(&clean, P2), + ShortcutResponse::Accept, + "T2.2 matched control: without an observer the confined fetch still Accepts" + ); + + // WITNESS — one object added, owned and controlled by an opponent. + let mut with_crab = board.clone(); + let crab = give_parsed_observer( + &mut with_crab, + P1, + Zone::Battlefield, + "Hedron Crab", + HEDRON_CRAB, + ); + + // PARSE PIN: if the parser ever stops producing this shape the row must go + // RED rather than silently green on a different (or absent) trigger. + let shapes = trigger_shapes(&with_crab, crab); + assert_eq!( + shapes.len(), + 1, + "PREMISE: the crab must carry exactly one active trigger; got {shapes:?}" + ); + assert!( + shapes[0].contains("mode=ChangesZone"), + "PREMISE: landfall is a CR 603.6a zone-change trigger; got {shapes:?}" + ); + assert!( + shapes[0].contains("Land") && shapes[0].contains("You"), + "PREMISE: `valid_card` must be the TYPED land-you-control filter, NOT `SelfRef`. This is \ + the exact shape T2.3 proves `filter_is_actor_owned` accepts — reusing that helper as the \ + carve-out would relieve this trigger and the [HIGH] finding would survive; got {shapes:?}" + ); + assert!( + shapes[0].contains("trigger_zones=[Battlefield]"), + "PREMISE: the crab must FUNCTION where it is standing, or the zone gate — not the \ + carve-out — would be what produces the verdict below; got {shapes:?}" + ); + + let polled = declare_and_poll(&with_crab, P2); + assert!( + stage_one_meaningful(&polled, P2), + "REACH-GUARD: the crab must not have changed which stage answers" + ); + assert_eq!( + engine::ai_support::smart_shortcut_response(&polled, P2), + ShortcutResponse::Shorten { at_iteration: 0 }, + "CR 603.2: P2's 'confined' fetch makes a land enter, the opponent's Crab triggers on it, \ + and its effect mills a TARGET PLAYER. The action reached outside P2's own resources \ + without P2's own AST containing anything that says so" + ); +} + +/// **T2.4 — the zone-of-function gate, on one axis.** Same card, same trigger, +/// two zones. +/// +/// CR 113.6 / CR 603.6: a Bloodghast-shaped landfall trigger functions from the +/// GRAVEYARD (that is where the ability returns the card from), so a copy sitting +/// in HAND observes nothing. The pair moves the zone and nothing else, so the +/// `Accept` cannot be a property of the card and the `Shorten` cannot be a +/// property of the board. +/// +/// REVERT-PROBE (executed): delete the `trigger_definition_functions_in_zone` +/// conjunct from `board_observer_may_react` ⇒ the hand half returns `Shorten` +/// and this row fails. +/// +/// SCOPE, measured rather than assumed. The OTHER way this gate can go wrong — +/// reading `def.trigger_zones.contains(&obj.zone)` directly, which answers +/// "functions nowhere" for the empty list that means battlefield-only — is NOT +/// discriminated by this row, and it cannot be discriminated on this board: +/// MEASURED, every active trigger definition on the flagship carries an explicit +/// `trigger_zones: [Battlefield]`, so the direct read and the authority agree on +/// the whole corpus. That fail-open direction is a LATENT hole here, closed for +/// the same reason as this module's `Zone::Stack` arm, and it is pinned by +/// `t2_4b_an_empty_trigger_zones_list_means_battlefield_not_nowhere` at unit +/// level where the shape can actually be built. +#[test] +fn t2_4_a_landfall_observer_in_hand_does_not_veto_but_in_its_own_zone_it_does() { + let mut board = live_path_board(); + drive_to_offer(&mut board, 400).expect("the offer must fire"); + + for (zone, expected) in [ + (Zone::Hand, ShortcutResponse::Accept), + ( + Zone::Graveyard, + ShortcutResponse::Shorten { at_iteration: 0 }, + ), + ] { + let mut staged = board.clone(); + let ghast = give_parsed_observer(&mut staged, P1, zone, "Bloodghast", BLOODGHAST_LANDFALL); + let shapes = trigger_shapes(&staged, ghast); + assert!( + shapes.iter().any(|s| s.contains("mode=ChangesZone")), + "PREMISE at {zone:?}: the landfall trigger must survive parsing; got {shapes:?}" + ); + + let polled = declare_and_poll(&staged, P2); + assert!( + stage_one_meaningful(&polled, P2), + "REACH-GUARD at {zone:?}: stage 2 must be the stage that answers" + ); + assert_eq!( + engine::ai_support::smart_shortcut_response(&polled, P2), + expected, + "CR 113.6: the SAME trigger on the SAME card must veto from the zone it functions in \ + and not from the zone it does not; failed at {zone:?}" + ); + } +} + +/// **T2.8 — the scan is not battlefield-only.** A command-zone emblem is scanned. +/// +/// CR 114.1 puts emblems in the command zone and CR 114.4 is exact — "Abilities +/// of emblems function in the command zone" — so an observer that never touches +/// the battlefield +/// still observes. `active_trigger_definitions` applies the CR 114.4 emblem gate +/// itself, which is why the scan delegates to it rather than filtering zones. +/// +/// REVERT-PROBE (executed): restrict `board_observer_may_react` to +/// `obj.zone == Zone::Battlefield` ⇒ this row returns `Accept` and fails. +#[test] +fn t2_8_a_command_zone_emblem_observer_is_scanned() { + let mut board = live_path_board(); + drive_to_offer(&mut board, 400).expect("the offer must fire"); + + let emblem = give_parsed_observer(&mut board, P1, Zone::Command, "Hedron Crab", HEDRON_CRAB); + { + let obj = board.objects.get_mut(&emblem).expect("just staged"); + obj.is_emblem = true; + // CR 114.1: an emblem has no characteristics other than its abilities. + obj.card_types.core_types.clear(); + obj.base_card_types = obj.card_types.clone(); + // CR 114.4: "Abilities of emblems function in the command zone." The + // printed crab trigger parses as battlefield-only, so the zone list is + // retargeted — that retarget is the whole staging, and the assertion + // below proves it survived into the live set. + let mut defs = (*obj.base_trigger_definitions).clone(); + for d in &mut defs { + d.trigger_zones = vec![Zone::Command]; + } + obj.install_trigger_base_definitions(std::sync::Arc::new(defs)) + .expect("re-staging the emblem's trigger set"); + } + let shapes = trigger_shapes(&board, emblem); + assert_eq!( + shapes.len(), + 1, + "PREMISE: the emblem must expose exactly one active trigger from the command zone — \ + `active_trigger_definitions` drops non-emblem command-zone triggers, so an empty list \ + here would make the row vacuous; got {shapes:?}" + ); + + let polled = declare_and_poll(&board, P2); + assert!( + stage_one_meaningful(&polled, P2), + "REACH-GUARD: stage 2 must be the stage that answers" + ); + assert_eq!( + engine::ai_support::smart_shortcut_response(&polled, P2), + ShortcutResponse::Shorten { at_iteration: 0 }, + "CR 114.1 + CR 603.2: an observer in the command zone observes. A battlefield-only scan \ + would miss every emblem and every command-zone trigger" + ); +} + +/// **T2.9 — the actor's OWN self-referential observer is NOT relieved**, on the +/// real board's own survivor. +/// +/// Abundant Growth (`ChangesZone`, `valid_card: SelfRef`) is one of the three +/// definitions that survive the zone gate on the flagship board, and for P2 it is +/// relieved by the carve-out's `obj.owner != actor` conjunct alone. Retag it to +/// P2 — owner AND controller together, so the T1.2 ownership conjunct stays +/// satisfied and cannot be what moves the verdict — and the same trigger must +/// stop being relieved. +/// +/// One variable: the object's seat. This is the row that pins the carve-out to +/// "somebody ELSE'S self-reference", which is the only version of it that is +/// sound: an actor's own self-referential trigger is reachable by the actor's own +/// action. +/// +/// REVERT-PROBE (executed): drop the `obj.owner != actor` conjunct ⇒ this row +/// returns `Accept` and fails. +#[test] +fn t2_9_the_actors_own_self_referential_observer_keeps_the_veto() { + let mut board = live_path_board(); + drive_to_offer(&mut board, 400).expect("the offer must fire"); + let mut polled = declare_and_poll(&board, P2); + + let growth = *polled + .objects + .values() + .find(|o| o.name == "Abundant Growth") + .map(|o| &o.id) + .expect("MEASURED: Abundant Growth is on this board and survives the zone gate"); + let shapes = trigger_shapes(&polled, growth); + assert!( + shapes + .iter() + .any(|s| s.contains("valid_card=Some(SelfRef)")), + "PREMISE: this row needs the SelfRef shape the carve-out keys on; got {shapes:?}" + ); + assert_ne!( + polled.objects[&growth].owner, P2, + "PREMISE: it starts on another seat, which is why the flagship Accepts" + ); + + // CONTROL — somebody else's self-reference, relieved. + assert_eq!( + engine::ai_support::smart_shortcut_response(&polled, P2), + ShortcutResponse::Accept, + "control: an opponent's SelfRef observer cannot be reached by an action confined to P2's \ + own resources" + ); + + // WITNESS — the same trigger, now the actor's own. + { + let obj = polled.objects.get_mut(&growth).expect("just read"); + obj.owner = P2; + obj.base_controller = Some(P2); + obj.controller = P2; + } + assert_eq!( + engine::ai_support::smart_shortcut_response(&polled, P2), + ShortcutResponse::Shorten { at_iteration: 0 }, + "CR 109.5: 'you' on the observer means ITS controller. Once that is the actor, the actor's \ + own confined action can reach it, so the carve-out must not apply" + ); +} + +/// **T3.5 — the new `GameObject::parse_warnings` field changes no committed byte.** +/// +/// `skip_serializing_if = "Vec::is_empty"` is the whole mechanism, and this is +/// the assertion that it is actually wired: re-serialize every object of a +/// committed fixture through the production decoder and compare against the +/// bytes the fixture shipped with. +/// +/// REVERT-PROBE (executed): drop `skip_serializing_if` from the field ⇒ every +/// object gains `"parse_warnings":[]` and this row fails. +#[test] +fn t3_5_the_new_parse_warnings_field_keeps_dumps_byte_identical() { + let json = gunzip_dump(include_bytes!("../fixtures/dina_noff_turn5_4p.json.gz")); + let envelope: serde_json::Value = + serde_json::from_str(&json).expect("dump envelope parses as JSON"); + let before = envelope["gameState"]["objects"].clone(); + assert!( + before.as_object().is_some_and(|m| !m.is_empty()), + "PREMISE: the fixture must carry objects, or byte-equality below is vacuous" + ); + assert!( + !before.to_string().contains("parse_warnings"), + "PREMISE: the committed OBJECTS predate the field, so any occurrence below is new. \ + (Scoped to `objects` on purpose: the envelope's card-database subtree carries the \ + face-level `parse_warnings` this field is copied FROM, and has since before this change.)" + ); + + let state = restore_dump(&json); + let after = + serde_json::to_value(state.objects.values().collect::>()).expect("objects reencode"); + assert!( + !after.to_string().contains("parse_warnings"), + "an EMPTY diagnostics list must not serialize. Without `skip_serializing_if` every object \ + in every committed dump gains a `\"parse_warnings\":[]` key and every stored game grows" + ); +} From 3f6dfbc132cd2958025ee1f478dd0578e60b1195 Mon Sep 17 00:00:00 2001 From: lgray Date: Sun, 9 Aug 2026 20:37:58 -0500 Subject: [PATCH 11/13] fix(engine): redact parse_warnings and confine only library-origin entries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three defects found by independent review of the previous commit. Hidden-information leak, introduced by that commit (CR 400.2: a hand and a library are hidden zones). `GameObject::parse_warnings` was not cleared by `hide_card`, so an opponent received a card whose `name` read "Hidden Card" while its diagnostics carried the printed rules text verbatim — and `SwallowedClause.description` IS that text. Because the field is skipped when empty, it appeared on exactly the 891 cards that carry one, making it a per-card fingerprint for reading hands and libraries. The sibling redactor `redact_face_down_identity_from_observer` had the same hole — measured, not assumed: a manifested card's diagnostics survived the face-down transform and reached the observer's payload (CR 708.2, CR 708.5). Both are cleared, each with a matched-pair test: empty for the non-viewer, non-empty for the owner, so the negative arm cannot pass vacuously. The root cause is structural and larger than this field: `hide_card` is an allowlist-shaped problem implemented as a denylist, so any new `GameObject` field defaults to LEAKED. Passing the serialization partition guard proves nothing about visibility. An audit run against the wire found `base_name` (every hidden card's real name), `spellbook`, `unimplemented_mechanics`, `token_rules_text` and the `base_*` characteristics all leaking. Those are PRE-EXISTING and are deliberately NOT fixed here — the correct repair is to project a minimal object rather than extend a hand-maintained clear-list, and that carries its own test matrix and client-consumer audit. A battlefield entry is now confined only from `Zone::Library`. The previous commit's doc claimed the arriving card "is still in the library, so neither input contains it" — false for 46 abilities returning from graveyard, hand or exile, whose objects ARE in `state.objects`. Witness: Helping Hand returning a Fleshbag Marauder is classified confined while making every player sacrifice. The precise fix needs an entering `ObjectId` that does not exist at decision time (`Typed{controller: You}` is an unchosen target), so this narrows the allowlist instead — moving verdicts only toward `MayInterfere` and making the paragraph true rather than retreating from it. Measured cost: of 493 document-wide tapped entries, Library's 247 keep classification; 245 lose it. The flagship fetch rows are untouched — that disjunct already required a library origin. `t2_10`'s decoder pin is now order-insensitive, so reordering `TriggerMode` no longer reds an `ai_support` test. All four revert-probes executed, each the sole failure of its suite. Full engine suite 23,638 passed / 0 failed; workspace check and clippy clean. Assisted-by: ClaudeCode:claude-opus-4.8 --- .../src/ai_support/shortcut_efficacy.rs | 193 ++++++++++++++++-- crates/engine/src/game/visibility.rs | 125 ++++++++++++ .../tests/integration/shorten_efficacy.rs | 182 +++++++++++++++++ 3 files changed, 486 insertions(+), 14 deletions(-) diff --git a/crates/engine/src/ai_support/shortcut_efficacy.rs b/crates/engine/src/ai_support/shortcut_efficacy.rs index 29fdbea37e..49cc27dcb0 100644 --- a/crates/engine/src/ai_support/shortcut_efficacy.rs +++ b/crates/engine/src/ai_support/shortcut_efficacy.rs @@ -436,6 +436,52 @@ fn effect_window_reach(effect: &Effect) -> WindowReach { // a defending player, planeswalker or battle. That is the clearest // possible touch outside the actor's own resources, and a tapped // attacker is still an attacker. + // + // A FOURTH battlefield conjunct, on a different axis than the three + // above: `origin == Some(Zone::Library)`. Those three ask what ARRIVES; + // this one asks what the arriving CARD is, and it is the only conjunct + // that can be discharged from this seam's inputs at all. + // + // A permanent entering the battlefield brings its whole printed text + // with it, and `carries_unreadable_rules_content` is this module's + // authority on which of that text the fold cannot classify. For the + // object performing the action, both entry points already run that gate + // (`object_window_reach`, `indexed_ability_window_reach`) — so a + // `target: SelfRef` recursion, where the card that arrives IS the source, + // is already covered by it. For every other target shape the arriving + // card is a DIFFERENT object, and the gate has never been run on it. + // + // `Library` is the one origin where that is not a hole. CR 400.2 makes a + // library a hidden zone, and the card is an unchosen member of it: the + // seam is handed a `GameState` and a list of `GameAction`s, and the card + // is the subject of neither, so there is nothing to read and nothing is + // being skipped. `board_observer_may_react` agrees for the CR 113.6 + // reason — `trigger_definition_functions_in_zone` correctly answers + // "does not function" for a library card. + // + // A `Graveyard`, `Hand` or `Exile` origin is a DIFFERENT situation and + // was previously admitted on the same warrant. There the arriving card + // IS in `state.objects`, its rules content is readable, and the fold + // simply never looked — so `OwnResourcesOnly` was asserted over text + // nobody had classified. Helping Hand ("Return target creature card with + // mana value 3 or less from your graveyard to the battlefield tapped.", + // Oracle text verified on Scryfall) read `OwnResourcesOnly` while a + // Fleshbag-Marauder-class creature sat in the actor's graveyard, and + // Accepting it hands back a window in which every player sacrifices. + // + // Gating on `Library` closes that without threading state into an + // AST-only function: it can only move a verdict toward `MayInterfere`, + // per §2 the direction that costs efficacy rather than games, and it is + // the same trade the `Hand` destination gate above already made. + // MEASURED on `data/card-data.json`, over every node in the document + // (not the narrower top-level `abilities` list the fold reads) whose + // shape is a tapped, non-attacking, unconditional, You-controlled + // battlefield entry: 493 total — Library 247, origin ABSENT 140, + // Graveyard 74, Hand 25, Exile 6, Battlefield 1. So the flagship + // library-fetch class keeps half the population outright, and the + // absent-origin bucket falls the same way as the named non-library ones, + // for the stronger version of the same reason: the seam cannot even name + // the zone the card comes from. Effect::ChangeZone { origin, destination, @@ -457,7 +503,8 @@ fn effect_window_reach(effect: &Effect) -> WindowReach { && *destination == Zone::Battlefield); let entry_is_confined = landing_zone_is_confined(*destination, *enter_tapped) && (*destination != Zone::Battlefield - || (enters_modified_if.is_none() + || (*origin == Some(Zone::Library) + && enters_modified_if.is_none() && !*enters_attacking && matches!(enters_under, None | Some(ControllerRef::You)))); WindowReach::of(object_is_confined && entry_is_confined) @@ -1067,15 +1114,25 @@ fn board_observer_may_react(state: &GameState, actor: PlayerId) -> bool { /// What that leaves outside the seam's description, stated as a property of the /// inputs rather than as a blanket: a permanent that arrives TAPPED and still /// enables interference through an ability whose cost is not tapping (a -/// sacrifice-for-mana, say). This function is handed a `GameState` and a list of -/// `GameAction`s. The card that would arrive is, at the moment of the decision, -/// still IN THE LIBRARY — it is not on the board and it is not the subject of any -/// enumerated action — so neither input contains it and neither the per-action -/// fold nor the board scan below has an object to read. `board_observer_may_react` -/// specifically cannot see it: `trigger_definition_functions_in_zone` correctly -/// answers "does not function" for a library card, which is the CR 113.6 rule and -/// not an omission. Reaching it at all would require resolving the search — a -/// different kind of input than this seam takes. +/// sacrifice-for-mana, say). +/// +/// That residual is scoped to ONE origin, and the scoping is enforced in code +/// rather than promised here. `effect_window_reach`'s `ChangeZone` arm admits a +/// battlefield entry only when `origin == Some(Zone::Library)`, so the card that +/// would arrive is always an unchosen member of a hidden zone (CR 400.2): this +/// function is handed a `GameState` and a list of `GameAction`s, and the card is +/// the subject of neither, so neither input contains it and neither the +/// per-action fold nor the board scan below has an object to read. +/// `board_observer_may_react` specifically cannot see it — +/// `trigger_definition_functions_in_zone` correctly answers "does not function" +/// for a library card, which is the CR 113.6 rule and not an omission. Reaching +/// it at all would require resolving the search, a different kind of input than +/// this seam takes. +/// +/// A `Graveyard`, `Hand` or `Exile` origin is NOT that situation — the arriving +/// card is in `state.objects` and its rules content is readable — and it is not +/// in this residual because the arm no longer admits it. See that arm's fourth +/// battlefield conjunct for the measurement and the efficacy trade. /// /// Its cost, on both axes, for the reader deciding whether that matters: /// - across windows: a bounded miss — a seat's fetched answer goes unused for @@ -1182,6 +1239,17 @@ mod tests { oracle: "{T}, Sacrifice this land: Search your library for a basic land \ card, put it onto the battlefield tapped, then shuffle.", }; + /// Helping Hand, verbatim (Oracle text verified on Scryfall, + /// `api.scryfall.com/cards/named?exact=Helping+Hand`). The witness for the + /// origin gate: a tapped, You-controlled, unconditional, non-attacking + /// battlefield entry — confined on every axis the arm reads EXCEPT that the + /// arriving card comes from a graveyard, where it is a real object whose + /// rules content the fold has never classified. + const HELPING_HAND: Card = Card { + name: "Helping Hand", + oracle: "Return target creature card with mana value 3 or less from your \ + graveyard to the battlefield tapped.", + }; const EVOLVING_WILDS: Card = Card { name: "Evolving Wilds", oracle: "{T}, Sacrifice this land: Search your library for a basic land \ @@ -2499,6 +2567,99 @@ mod tests { } } + /// **The origin gate** — a battlefield entry is confined only when the card + /// that arrives comes from a LIBRARY. + /// + /// The three riders in the row below ask what ARRIVES. This one asks what the + /// arriving CARD is, and it is the axis on which `OwnResourcesOnly` was + /// previously asserted over rules text nobody had classified: a graveyard, + /// hand or exile card is a real object in `state.objects`, and neither + /// `object_window_reach`'s `carries_unreadable_rules_content` gate (which + /// runs on the SOURCE) nor `board_observer_may_react` (CR 113.6 — an ETB does + /// not function in a graveyard) ever reads it. + /// + /// **Attribution: exactly one field varies.** Helping Hand's REAL parsed node + /// is measured `MayInterfere`, then the SAME node with `origin` rewritten to + /// `Library` and nothing else touched is measured `OwnResourcesOnly`. Every + /// other axis the arm reads — target filter, tap state, the three riders — is + /// held byte-identical across the pair, so the flip is the origin field's and + /// cannot be the fixture's. + /// + /// The `None` row is the stronger case of the same argument: an absent origin + /// does not even name the zone the card comes from. + #[test] + fn a_battlefield_entry_is_confined_only_from_a_library() { + assert!( + !head_is_unparsed(&HELPING_HAND, 0), + "VACUITY GUARD: Helping Hand[0] must PARSE, or this row measures the fail-closed arm \ + instead of the origin axis" + ); + let node = ability(&HELPING_HAND, 0).effect.as_ref().clone(); + let Effect::ChangeZone { + origin, + destination, + enter_tapped, + target, + .. + } = &node + else { + panic!("PREMISE: Helping Hand[0] must head a ChangeZone; got {node:?}"); + }; + assert_eq!( + (*origin, *destination, *enter_tapped), + ( + Some(Zone::Graveyard), + Zone::Battlefield, + EtbTapState::Tapped + ), + "PREMISE: the real card prints a TAPPED graveyard-to-battlefield return, which is what \ + makes the origin the only axis left to decide the verdict" + ); + assert!( + filter_is_actor_owned(target), + "PREMISE: the target is proven actor-controlled, so `object_is_confined` holds and the \ + verdict below is decided by `entry_is_confined` alone" + ); + + assert_eq!( + effect_window_reach(&node), + WindowReach::MayInterfere, + "a graveyard card entering the battlefield IS a readable object this fold never \ + classified — Accepting here hands back a window in which a Fleshbag-Marauder-class \ + ETB makes every player sacrifice" + ); + + for (label, rewritten) in [ + ( + "Library: the card is an unchosen member of a hidden zone (CR 400.2), so there is \ + nothing to read and nothing is skipped", + Some(Zone::Library), + ), + ("Hand: readable, and never classified", Some(Zone::Hand)), + ("Exile: readable, and never classified", Some(Zone::Exile)), + ( + "None: the seam cannot even name the zone the card comes from", + None, + ), + ] { + let mut mutated = node.clone(); + let Effect::ChangeZone { origin, .. } = &mut mutated else { + unreachable!("just destructured above"); + }; + *origin = rewritten; + let expected = if rewritten == Some(Zone::Library) { + WindowReach::OwnResourcesOnly + } else { + WindowReach::MayInterfere + }; + assert_eq!( + effect_window_reach(&mutated), + expected, + "ONE FIELD VARIES from the node asserted above — {label}" + ); + } + } + /// PROVABLY tapped, not NOMINALLY tapped — the three riders that decide what /// actually arrives, plus the split that reaches the battlefield without a /// `ChangeZone` node at all. @@ -2986,13 +3147,16 @@ mod tests { // change), but it IS this row's to disclose: none of the six is in the // relieved list above, so the reverse containment below covers 165 of the // enum's 171 variants and this constant names the remaining six. - // Declaration order, so a reordering of the enum is visible here too. + // Sorted, and compared as a SET: this row's subject is which variants are + // undecodable, not where they sit in the declaration. Pinning declaration + // order would red this `ai_support` row on a no-op reordering of + // `TriggerMode` — a failure that says nothing about either module. const UNCONSTRUCTIBLE: [&str; 6] = [ - "KeywordAbilityActivated", // payload - "Explored", // no `FromStr` arm - "Planeswalked", // payload "Copied", // no `FromStr` arm + "Explored", // no `FromStr` arm "HauntedCreatureDies", // no `FromStr` arm + "KeywordAbilityActivated", // payload + "Planeswalked", // payload "Unknown", // payload ]; let mut undecodable = Vec::new(); @@ -3032,6 +3196,7 @@ mod tests { } } + undecodable.sort_unstable(); assert_eq!( undecodable, UNCONSTRUCTIBLE, "the set of `TriggerMode` variants this enumeration cannot construct changed. If a \ diff --git a/crates/engine/src/game/visibility.rs b/crates/engine/src/game/visibility.rs index 3b371f680e..d4cbf49626 100644 --- a/crates/engine/src/game/visibility.rs +++ b/crates/engine/src/game/visibility.rs @@ -1807,6 +1807,14 @@ fn hide_card(state: &mut GameState, obj_id: ObjectId) { obj.back_face = None; obj.token_image_ref = None; obj.source_related_token_ids.clear(); + // CR 400.2: library and hand are hidden zones — a viewer without + // look-permission may not see the card's face. `parse_warnings` is + // parser evidence derived from that face's printed text (a + // `SwallowedClause` carries the rules text verbatim), and only 891 of + // 35,657 card faces carry a non-empty vector, so its presence and + // contents both fingerprint the card. Redact it with the rest of the + // printed identity. + obj.parse_warnings.clear(); obj.foretold = false; } } @@ -1836,6 +1844,13 @@ fn redact_face_down_identity_from_observer(obj: &mut crate::game::game_object::G obj.printed_ref = None; obj.base_printed_ref = None; obj.back_face = None; + // CR 708.5 + CR 708.2: a face-down permanent has no name and no abilities, + // and no player but its controller may look at the card underneath. + // `parse_warnings` survives the face-down transformation on the + // authoritative object (measured: a manifested card keeps the printed + // face's warnings), so it must be redacted here for the same reason + // `back_face` is — it is evidence about the hidden printed text. + obj.parse_warnings.clear(); } /// CR 603.3b + CR 400.2: A pending trigger awaiting its @@ -2751,6 +2766,116 @@ mod tests { assert!(hidden.back_face.is_none()); } + /// CR 400.2: a hand is a hidden zone. `parse_warnings` is derived from the + /// hidden face's printed text — an `IgnoredRemainder`/`SwallowedClause` + /// payload quotes that text verbatim, and `skip_serializing_if` makes the + /// field's mere presence a fingerprint (891 of 35,657 faces carry one). + /// Matched pair: the owner keeps the diagnostic, the opponent gets nothing. + /// The owner arm is the reach-guard — without it an empty-opponent + /// assertion would pass even if the field were never populated. + #[test] + fn hidden_hand_card_redacts_parse_warnings_from_opponent() { + let mut state = GameState::new_two_player(42); + let card_id = create_object( + &mut state, + CardId(2), + PlayerId(1), + "Warned Card".to_string(), + Zone::Hand, + ); + state.objects.get_mut(&card_id).unwrap().parse_warnings = vec![ + crate::parser::oracle_ir::diagnostic::OracleDiagnostic::IgnoredRemainder { + text: "and each opponent loses 2 life".to_string(), + parser: "effect_chain".to_string(), + line_index: 0, + }, + ]; + + let owner_view = filter_state_for_viewer(&state, PlayerId(1)); + let owned = owner_view.objects.get(&card_id).unwrap(); + assert_eq!(owned.name, "Warned Card"); + assert_eq!( + owned.parse_warnings.len(), + 1, + "reach guard: the owner must still see the diagnostic, otherwise \ + the opponent assertion below is vacuous" + ); + + let opponent_view = filter_state_for_viewer(&state, PlayerId(0)); + let hidden = opponent_view.objects.get(&card_id).unwrap(); + assert_eq!(hidden.name, "Hidden Card"); + assert!( + hidden.parse_warnings.is_empty(), + "opponent must not receive parse diagnostics for a hidden-zone card" + ); + // The wire payload is the actual leak vector: assert on the serialized + // bytes, not just the in-memory field. + assert!( + !serde_json::to_string(hidden) + .unwrap() + .contains("each opponent loses 2 life"), + "hidden card's serialized payload must not quote its printed text" + ); + } + + /// CR 708.5 + CR 708.2: a face-down permanent has no name and no abilities, + /// and only its controller may look at the card underneath. `manifest` does + /// not reset `parse_warnings`, so the printed face's diagnostics survive on + /// the authoritative object and must be redacted for every other viewer — + /// the same reason `back_face` is redacted on this path. + #[test] + fn face_down_permanent_redacts_parse_warnings_from_observer() { + let mut state = GameState::new(FormatConfig::standard(), 2, 42); + let controller = PlayerId(0); + let secret = create_object( + &mut state, + CardId(7), + controller, + "Secret Manifest".to_string(), + Zone::Library, + ); + { + let obj = state.objects.get_mut(&secret).unwrap(); + obj.card_types = CardType { + supertypes: vec![], + core_types: vec![CoreType::Creature], + subtypes: vec![], + }; + obj.parse_warnings = vec![ + crate::parser::oracle_ir::diagnostic::OracleDiagnostic::IgnoredRemainder { + text: "and each opponent loses 2 life".to_string(), + parser: "effect_chain".to_string(), + line_index: 0, + }, + ]; + } + + let mut events = Vec::new(); + manifest(&mut state, controller, &mut events).unwrap(); + // Reach guard: the field genuinely survives the face-down transform, so + // the observer assertion below is not vacuous. + assert_eq!( + state.objects[&secret].parse_warnings.len(), + 1, + "manifest must leave the printed face's diagnostics on the object" + ); + + let controller_view = filter_state_for_viewer(&state, controller); + assert_eq!( + controller_view.objects[&secret].parse_warnings.len(), + 1, + "the controller may look at their own face-down permanent" + ); + + let observer_view = filter_state_for_viewer(&state, PlayerId(1)); + let observed = observer_view.objects.get(&secret).unwrap(); + assert_eq!(observed.name, "Hidden Card"); + assert!( + observed.parse_warnings.is_empty(), + "observer must not receive parse diagnostics for a face-down permanent" + ); + } + #[test] fn search_choice_is_visible_to_turn_controller() { let mut state = GameState::new_two_player(42); diff --git a/crates/engine/tests/integration/shorten_efficacy.rs b/crates/engine/tests/integration/shorten_efficacy.rs index 1bc88f867d..105db467cf 100644 --- a/crates/engine/tests/integration/shorten_efficacy.rs +++ b/crates/engine/tests/integration/shorten_efficacy.rs @@ -2713,3 +2713,185 @@ fn t3_5_the_new_parse_warnings_field_keeps_dumps_byte_identical() { in every committed dump gains a `\"parse_warnings\":[]` key and every stored game grows" ); } + +/// Helping Hand, verbatim (Oracle text verified on Scryfall, +/// `api.scryfall.com/cards/named?exact=Helping+Hand`). Confined on every axis +/// `effect_window_reach`'s `ChangeZone` arm reads EXCEPT the origin: the card it +/// returns is a real object in the actor's graveyard whose rules content the fold +/// never classified. +const HELPING_HAND: &str = "Return target creature card with mana value 3 or less from your \ + graveyard to the battlefield tapped."; + +/// Stage a vanilla creature card in `player`'s graveyard. VANILLA on purpose: +/// with no abilities of its own it cannot itself move any verdict — not through +/// `board_observer_may_react` (nothing to observe with), not through the fold +/// (it is not the subject of any action). It exists only so the Helping Hand +/// below has a legal target, and it is staged in BOTH arms so it is held +/// constant rather than varied. +fn give_graveyard_creature(state: &mut GameState, player: PlayerId) -> ObjectId { + let id = engine::game::zones::create_object( + state, + CardId(state.next_object_id), + player, + "Grizzly Bears".to_string(), + Zone::Graveyard, + ); + let obj = state.objects.get_mut(&id).expect("just created"); + obj.card_types.core_types.push(CoreType::Creature); + obj.base_card_types = obj.card_types.clone(); + obj.power = Some(2); + obj.toughness = Some(2); + state.layers_dirty = LayersDirty::full(); + id +} + +/// V10d — a TAPPED battlefield entry from a GRAVEYARD keeps the seat's window; +/// the tapped LIBRARY sibling still Accepts. +/// +/// `v10c` closed the tap axis on a library fetch. This row closes the residual +/// one axis over: `effect_window_reach`'s `ChangeZone` arm allowlisted a tapped +/// battlefield entry from ANY origin, and the argument that made that safe — +/// stated in `any_action_may_interfere`'s doc — is an argument about a card that +/// is still IN THE LIBRARY: an unchosen member of a hidden zone (CR 400.2), which +/// neither the per-action fold nor the board scan has an object to read. +/// +/// That argument does not transfer to a graveyard. The returned card IS in +/// `state.objects`, its trigger/replacement/static definitions are readable, and +/// nothing reads them: `object_window_reach`'s `carries_unreadable_rules_content` +/// gate runs on the SOURCE (the Helping Hand), never on the card it returns, and +/// `board_observer_may_react` correctly answers "does not function" for a +/// graveyard ETB (CR 113.6). So a Fleshbag-Marauder-class creature in the actor's +/// own graveyard — "When this creature enters, each player sacrifices a creature +/// of their choice" — arrives inside the very window the seat declined to keep. +/// +/// **The pair varies exactly one object** on the flagship board, and both halves +/// of that object are the SAME SHAPE on every axis but origin: two spells staged +/// identically (`give_parsed_card`, instant, no printed cost), each heading a +/// `ChangeZone` to the battlefield with `enter_tapped: Tapped`, no +/// `enters_attacking`, no `enters_modified_if`, and a You-controlled target. The +/// graveyard creature is present in BOTH arms. So the Shorten is attributable to +/// the origin field and to nothing else. +/// +/// **The control is the load-bearing half.** Rampant Growth's tapped LIBRARY +/// fetch must still Accept — that is what keeps this gate a distinction rather +/// than a blanket flip, and it is the same measurement that keeps `v1`/`v1b`'s +/// Terramorphic Accept correct. +/// +/// **Conservative by construction, and the cost is stated.** Grizzly Bears is +/// vanilla, so this seat surrenders its window over a recursion that could not +/// have interfered. That is the gate's shape: it reads the ORIGIN, not the +/// returned card, so it is uniform over what the graveyard happens to hold. Per +/// the module's §2 that is the direction that costs efficacy rather than games, +/// and it is the same trade the `Hand` destination gate already made. MEASURED on +/// `data/card-data.json`, of the 493 document-wide tapped/non-attacking/ +/// unconditional/You-controlled battlefield entries, 247 come from a library and +/// keep their classification; 74 graveyard, 25 hand, 6 exile and 140 +/// absent-origin nodes lose it. +/// +/// MUTANT: in `effect_window_reach`'s `ChangeZone` arm, delete the +/// `*origin == Some(Zone::Library)` conjunct from `entry_is_confined` (the +/// pre-fix expression) — the SHORTEN arm flips to `Accept`. The ACCEPT arm is +/// unaffected by that mutation by construction: its origin already IS +/// `Library`, so the conjunct it deletes was true there anyway. +/// +/// Every `GameAction::CastSpell` matcher binds `{ object_id, .. }` and must NOT +/// name `payment_mode`, for `v10a`'s reason. +#[test] +fn v10d_a_tapped_graveyard_return_keeps_its_window_and_the_library_sibling_accepts() { + let mut board = live_path_board(); + drive_to_offer(&mut board, 400).expect("CR 732.2a: the offer must fire on this real 4p drain"); + let polled = declare_and_poll(&board, P2); + + let mut base = polled.clone(); + give_graveyard_creature(&mut base, P2); + + // ── arm ACCEPT: the tapped LIBRARY fetch ── + let mut accept_arm = base.clone(); + let growth = give_rampant_growth(&mut accept_arm, P2); + // ── arm SHORTEN: same board, same graveyard, the tapped GRAVEYARD return ── + let mut shorten_arm = base.clone(); + let helping_hand = give_parsed_card( + &mut shorten_arm, + P2, + "Helping Hand", + HELPING_HAND, + CoreType::Instant, + Zone::Hand, + ); + + for (label, arm, staged) in [ + ("ACCEPT", &accept_arm, growth), + ("SHORTEN", &shorten_arm, helping_hand), + ] { + assert!( + stage_one_meaningful(arm, P2), + "reach-guard ({label} arm): stage 1 must return true, or the seat answers at stage 1 \ + and the fold under test never runs" + ); + assert!( + probe_actions(arm, P2).iter().any( + |a| matches!(a, GameAction::CastSpell { object_id, .. } if *object_id == staged) + ), + "reach-guard ({label} arm): the staged spell must really be castable at this window, \ + or the arm is the base board with extra steps and the pair measures nothing; got {:?}", + non_pass_actions(arm, P2) + ); + } + + // ATTRIBUTION: both arms must be the flagship's action set PLUS exactly the + // one staged cast. A third `MayInterfere` action in either arm would + // over-determine the row silently instead of reddening. + let accept_non_pass = non_pass_actions(&accept_arm, P2); + let shorten_non_pass = non_pass_actions(&shorten_arm, P2); + assert_eq!( + accept_non_pass.len(), + 2, + "ATTRIBUTION: the ACCEPT arm must be the flagship fetchland PLUS the Rampant Growth cast, \ + and nothing else; got {accept_non_pass:?}" + ); + assert_eq!( + shorten_non_pass.len(), + 2, + "ATTRIBUTION: the SHORTEN arm must be the flagship fetchland PLUS the Helping Hand cast, \ + and nothing else; got {shorten_non_pass:?}" + ); + + // MEMBERSHIP, not just cardinality: the two arms MINUS their staged cast must + // be the same single flagship action, so the pair really does vary one object. + let accept_rest: Vec<&String> = accept_non_pass + .iter() + .filter(|a| !a.starts_with(&format!("CastSpell {{ object_id: {growth:?},"))) + .collect(); + let shorten_rest: Vec<&String> = shorten_non_pass + .iter() + .filter(|a| !a.starts_with(&format!("CastSpell {{ object_id: {helping_hand:?},"))) + .collect(); + assert_eq!( + accept_rest, shorten_rest, + "ATTRIBUTION: each arm's set MINUS its staged cast must be the SAME flagship action — same \ + object, same zone, same controller; got {accept_non_pass:?} vs {shorten_non_pass:?}" + ); + assert!( + accept_rest.len() == 1 + && accept_rest[0].contains("Terramorphic Expanse") + && accept_rest[0].contains("zone=Some(Battlefield)") + && accept_rest[0].contains("controller=Some(PlayerId(2))"), + "ATTRIBUTION: that shared action must be P2's OWN battlefield fetchland; got \ + {accept_rest:?}" + ); + + assert_eq!( + engine::ai_support::smart_shortcut_response(&accept_arm, P2), + ShortcutResponse::Accept, + "the pair's negative arm: a tapped LIBRARY fetch stays confined — the card it puts onto \ + the battlefield is an unchosen member of a hidden zone (CR 400.2), so there is nothing \ + the fold skipped reading" + ); + assert_eq!( + engine::ai_support::smart_shortcut_response(&shorten_arm, P2), + ShortcutResponse::Shorten { at_iteration: 0 }, + "the pair's positive arm: the returned card is a REAL object in the actor's graveyard \ + whose rules content this fold never classified, so `OwnResourcesOnly` would be a proof it \ + cannot discharge. The Helping Hand is the one object that differs" + ); +} From f505f519edc7483912cfc121e05bb625fe8dc0c5 Mon Sep 17 00:00:00 2001 From: lgray Date: Mon, 10 Aug 2026 00:21:58 -0500 Subject: [PATCH 12/13] fix(ai): a library fetch is confined only while every selectable card is inert MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The classifier admitted `Library -> Battlefield` arrivals as confined whenever the permanent entered tapped, on the argument that the card is an unchosen member of a hidden zone and therefore unreadable. That argument is measurably false. CR 701.23a: "To search for a card in a zone, look at all cards in that zone (even if it's a hidden zone)". Probed on the enrolled 4p dump, 91 of 91 library objects resolve in `state.objects` with full parsed rules content — and the hazard is already on that board: the seat's own library holds Bojuka Bog, whose ETB exiles TARGET PLAYER's graveyard. An unrestricted "search for a land card" could select it, so the seat was accepting away the only window that reaches a live cross-player choice. `library_arrivals_are_inert` reads the actor's pooled hidden zones and asks whether every card matching the union of the object's search filters is inert, reusing `carries_unreadable_rules_content` as the single inertness authority rather than growing a second one. It is applied at both entry points beside that gate, not threaded into the AST classifier: two players holding the same printed card get opposite verdicts, so this is a board fact and presenting it as an AST fact would mislabel it. A non-empty pool with an empty match set fails closed — 24 cards carry a search filter that reads the ability's own targets, which this context cannot evaluate, and a false `Accept` is the one outcome not worth risking. No corpus assumption is made. "Basic lands are vanilla" would have been the cheap boundary and it is not proven — a future set can print a Basic land with a trigger. The flagship row survives on measurement instead: Terramorphic searches Basic-only and all 22 basics in that deck are vanilla. Elvish Reclaimer, the card the report named, cannot carry the regression: its `Sacrifice(Typed[Land])` cost is unqualified, so `cost_window_reach` already answers `MayInterfere` and the row reads `Shorten` with and without the new gate. Measured, then replaced with its structural siblings Reshape the Earth and Urza's Cave, which exercise the spell and activated paths respectively. `parse_warnings` now rides `BackFaceData` and all four face-copy paths, so a transform swaps diagnostics with the face they describe instead of leaving a front-clean/back-warning card reading clean. The base-face snapshot line is load-bearing: `apply_face_down_creature_characteristics` blanks name, types, abilities and definitions but not diagnostics, so without it turning face up would have cleared what turning face down preserved — a regression this change would otherwise have introduced. Adding a `BackFaceData` field is compile-forced across 34 struct literals; each is the same single mechanical initializer. Seven revert-probes executed, each observed pass->fail. Engine suite 18,827 lib + 4,790 integration passed, 0 failed; workspace check and clippy clean. One self-caught miscite removed (CR 701.23c is undefined qualities in hidden zones, not a search limit). Assisted-by: ClaudeCode:claude-opus-4.8 --- crates/engine/src/ai_support/candidates.rs | 1 + .../src/ai_support/shortcut_efficacy.rs | 728 +++++++++++++++++- crates/engine/src/game/casting_tests.rs | 7 + crates/engine/src/game/day_night.rs | 1 + crates/engine/src/game/effects/become_copy.rs | 1 + crates/engine/src/game/effects/change_zone.rs | 1 + crates/engine/src/game/effects/flip_coin.rs | 1 + .../engine/src/game/effects/flip_permanent.rs | 1 + crates/engine/src/game/effects/prepare.rs | 1 + .../src/game/effects/set_room_door_lock.rs | 1 + crates/engine/src/game/effects/token.rs | 3 + .../src/game/effects/transform_effect.rs | 1 + crates/engine/src/game/engine.rs | 1 + crates/engine/src/game/engine_debug.rs | 1 + .../engine/src/game/engine_mdfc_land_tests.rs | 1 + crates/engine/src/game/engine_tests.rs | 1 + crates/engine/src/game/flip.rs | 1 + crates/engine/src/game/game_object.rs | 45 +- crates/engine/src/game/printed_cards.rs | 17 + crates/engine/src/game/specialize.rs | 1 + crates/engine/src/game/stack.rs | 1 + crates/engine/src/game/transform.rs | 1 + crates/engine/src/game/triggers.rs | 1 + crates/engine/src/game/zones.rs | 2 + .../azors_gateway_transform_condition.rs | 1 + .../copied_ability_transform_generation.rs | 1 + .../craft_tithing_blade_transform.rs | 1 + .../deterministic_game_state_serde.rs | 1 + .../integration/integration_adventure.rs | 1 + .../issue_2425_fable_chapter_iii_transform.rs | 2 + ...1_frolicking_familiar_adventure_instant.rs | 1 + .../issue_5326_avatar_aang_transform.rs | 1 + .../issue_6403_moonmist_mass_transform.rs | 1 + .../issue_691_sheoldred_saga_lore.rs | 1 + .../tests/integration/kamigawa_flip_cards.rs | 2 + .../integration/room_door_lock_unlock.rs | 1 + .../engine/tests/integration/rules/battle.rs | 1 + .../tests/integration/shorten_efficacy.rs | 319 +++++++- .../tests/integration/specialize_runtime.rs | 1 + .../tests/integration/std_s07_batch5b.rs | 1 + .../stolen_goodies_zero_targets.rs | 1 + .../tamiyo_inquisitive_student_flip.rs | 1 + .../wedding_announcement_transform.rs | 1 + 43 files changed, 1110 insertions(+), 49 deletions(-) diff --git a/crates/engine/src/ai_support/candidates.rs b/crates/engine/src/ai_support/candidates.rs index 1a35510ad6..aea648333b 100644 --- a/crates/engine/src/ai_support/candidates.rs +++ b/crates/engine/src/ai_support/candidates.rs @@ -5383,6 +5383,7 @@ mod tests { casting_restrictions: Vec::new(), casting_options: Vec::new(), layout_kind: Some(LayoutKind::Prepare), + parse_warnings: vec![], } } diff --git a/crates/engine/src/ai_support/shortcut_efficacy.rs b/crates/engine/src/ai_support/shortcut_efficacy.rs index 49cc27dcb0..ad2fde44da 100644 --- a/crates/engine/src/ai_support/shortcut_efficacy.rs +++ b/crates/engine/src/ai_support/shortcut_efficacy.rs @@ -451,13 +451,35 @@ fn effect_window_reach(effect: &Effect) -> WindowReach { // is already covered by it. For every other target shape the arriving // card is a DIFFERENT object, and the gate has never been run on it. // - // `Library` is the one origin where that is not a hole. CR 400.2 makes a - // library a hidden zone, and the card is an unchosen member of it: the + // `Library` narrows that hole but does NOT close it, and the earlier + // version of this comment claimed it did. It argued that CR 400.2 makes a + // library a hidden zone and the card an unchosen member of it, so "the // seam is handed a `GameState` and a list of `GameAction`s, and the card - // is the subject of neither, so there is nothing to read and nothing is - // being skipped. `board_observer_may_react` agrees for the CR 113.6 - // reason — `trigger_definition_functions_in_zone` correctly answers - // "does not function" for a library card. + // is the subject of neither, so there is nothing to read". The premise is + // wrong as a fact about this engine. MEASURED on the enrolled 4p dump at + // the exact poll this module decides at: the actor's library is 91 cards + // and ALL 91 resolve in `state.objects` carrying full parsed rules + // content — 5 of them with triggers, and one of those is **Bojuka Bog** + // ("This land enters tapped. / When this land enters, exile target + // player's graveyard. / {T}: Add {B}.", Oracle text verified on + // Scryfall), whose ETB exiles a graveyard the actor does not own. + // CR 701.23a is the rule that makes it reachable: "To search for a card + // in a zone, look at all cards in that zone (EVEN IF IT'S A HIDDEN ZONE) + // and find a card that matches the given description." Hidden means the + // opponents cannot see it; it never meant the searcher cannot choose it. + // + // `board_observer_may_react` genuinely cannot catch this, and for a + // CORRECT reason rather than an omission: CR 113.6, via + // `trigger_definition_functions_in_zone`, answers "does not function" for + // a card sitting in a library. That predicate scans triggers that + // function NOW; the hazard is a trigger that will function once the + // search puts the card onto the battlefield. + // + // So the arriving card is classified where it can be: at the object + // level, by `library_arrivals_are_inert`, which runs + // `carries_unreadable_rules_content` over exactly the cards the actor + // could select. That gate is a board fact, not an AST fact, which is why + // it lives at the two entry points instead of in this arm. // // A `Graveyard`, `Hand` or `Exile` origin is a DIFFERENT situation and // was previously admitted on the same warrant. There the arriving card @@ -751,6 +773,197 @@ fn carries_unreadable_rules_content(object: &GameObject) -> bool { || !object.parse_warnings.is_empty() } +/// Is every card the actor could SELECT out of a hidden zone and put onto the +/// battlefield provably inert? +/// +/// The companion to [`carries_unreadable_rules_content`], on the other object. +/// That gate asks "can this fold read the rules content of the card TAKING the +/// action"; this one asks the same question about the card the action would +/// BRING IN. `effect_window_reach`'s `ChangeZone` arm admits a battlefield +/// arrival only from `Zone::Library`, and its own comment used to discharge the +/// arriving card's text with a hidden-zone argument. CR 701.23a refutes it: "To +/// search for a card in a zone, look at all cards in that zone (even if it's a +/// hidden zone) and find a card that matches the given description." A hidden +/// zone hides the cards from the OPPONENTS; the searcher picks whichever member +/// they like, so the selectable set is readable and this fold has to read it. +/// +/// # Why this is a board fact and not an AST fact +/// +/// It lives here, called from the two entry points beside +/// `carries_unreadable_rules_content`, rather than inside `effect_window_reach`. +/// The reason is not convenience: the answer is not a function of the ability at +/// all. Two players holding the identical printed card get opposite verdicts, +/// because the verdict is about what is in the deck behind it. Threading a +/// `GameState` into an AST classifier would present a board-dependent answer as +/// an AST-dependent one. +/// +/// # The selection set, and the direction each approximation errs +/// +/// * **Which cards are in the pool** — every object the actor OWNS in a pooled +/// zone. `game::effects::search_library` reads `owner.library` and matches with +/// `matches_target_filter_in_owner_zone`, so owner (CR 108.3), not controller, +/// is the axis, and this scans `state.objects` for the same set. The pool is +/// `Zone::Library` plus whatever `Effect::SearchLibrary::source_zones` names — +/// the God-Pharaoh's-Gift class searches graveyard and hand as well, and a card +/// fetched from there reaches the same battlefield. +/// * **Which of them are selectable** — the union of every `SearchLibrary` +/// filter the object carries, plus every library→battlefield `ChangeZone` +/// target that is not `TargetFilter::Any`. A UNION over the object's searches +/// rather than a binding of each search to the node that consumes its result: +/// binding would require threading a "search filter currently in scope" through +/// the whole recursive fold, and a union is a SUPERSET of any single search's +/// result, so it errs toward `MayInterfere`. `TargetFilter::Any` is excluded +/// because it is the serde default on the ANAPHORIC node ("put IT onto the +/// battlefield") — it states no restriction of its own and its authority is the +/// parent search, which is already in the union. An object with a +/// library→battlefield arrival and NO search filter at all leaves the union +/// empty, and an empty union means the WHOLE pool is selectable. +/// * **`selection_constraint` and `game::effects::search_library`'s +/// `library_search_top_limit` are ignored.** Both NARROW what may be chosen, so +/// ignoring them over-counts the pool, which is the conservative direction. +/// +/// # The one place this fails closed rather than answering +/// +/// A non-empty union that matches NOTHING returns `false`. That looks like +/// throwing away the free case — a deck with no basic land for its own fetch — +/// and it is deliberate, because this seam cannot tell that case apart from a +/// filter it is unable to evaluate. `FilterContext::from_source_with_controller` +/// carries the acting object but no ability instance, so a filter that reads the +/// ability's own targets matches nothing here for a reason that has nothing to do +/// with the deck. MEASURED over `data/card-data.json`: 24 cards carry such a +/// `SearchLibrary` filter (23 `SameNameAsParentTarget` — Infernal Tutor, Surgical +/// Extraction, Bifurcate, … — and 2 `CanEnchant { target: ParentTarget }`: +/// Auratouched Mage, Sovereigns of Lost Alara, with Canoptek Wraith carrying +/// both properties). Answering "empty match set, therefore inert" for those would +/// be a false `Accept` produced by an unevaluated filter, so the empty result is +/// treated as the unanswerable it is. +fn library_arrivals_are_inert( + state: &GameState, + object: &GameObject, + abilities: &[AbilityDefinition], +) -> bool { + let mut reaches_battlefield = false; + let mut pool_zones = vec![Zone::Library]; + let mut selection: Vec = Vec::new(); + + // `types::ability_visit` is the engine's single complete `AbilityDefinition` + // walk, and its `Effect` match is wildcard-free — a future variant carrying a + // nested effect is a compile error there rather than a silent miss here. A + // hand-rolled second walk beside `ability_window_reach`'s is exactly the + // "two answers to one question" shape this module has already paid for twice + // (`landing_zone_is_confined`, `carries_unreadable_rules_content`). + for def in abilities { + // The visitor never breaks — the union needs every node — so the + // `ControlFlow` it returns is always `Continue`. + let _ = crate::types::ability_visit::visit_ability_def(def, &mut |effect: &Effect| { + match effect { + // `..`-FREE, exactly like `effect_window_reach`'s two arms and for + // the same reason: a new field that changes what a search may FIND + // or where it may PUT it must be a compile error here, not a + // silently unread modifier. `count`/`reveal`/`selection_constraint` + // are bound and unused deliberately — the first two do not change + // WHICH cards match, and the third only narrows (see the doc). + Effect::SearchLibrary { + source_zones, + filter, + count: _, + reveal: _, + target_player: _, + selection_constraint: _, + split, + } => { + selection.push(filter.clone()); + for zone in source_zones { + if !pool_zones.contains(zone) { + pool_zones.push(*zone); + } + } + // Both split destinations, for the same reason the reach fold + // reads both: `rest_destination` lands cards too. + if split.as_ref().is_some_and(|split| { + split.primary_destination == Zone::Battlefield + || split.rest_destination == Zone::Battlefield + }) { + reaches_battlefield = true; + } + } + // The arrival-shape fields are the REACH fold's business; this arm + // only needs to know that a library card can land on the + // battlefield and which filter picks it. + Effect::ChangeZone { + origin: Some(Zone::Library), + destination: Zone::Battlefield, + target, + owner_library: _, + enter_transformed: _, + enters_under: _, + enter_tapped: _, + enters_attacking: _, + up_to: _, + enter_with_counters: _, + conditional_enter_with_counters: _, + face_down_profile: _, + enters_modified_if: _, + } => { + reaches_battlefield = true; + if !matches!(target, TargetFilter::Any) { + selection.push(target.clone()); + } + } + // A node this walk does not recognize contributes nothing to the + // pool, and that is safe only because it is not the last word: + // `effect_window_reach`'s own `_` arm answers `MayInterfere` for + // every unrecognized shape, so a future effect that could put a + // library card onto the battlefield makes the WHOLE verdict + // interference before this pool is ever consulted. + _ => {} + } + std::ops::ControlFlow::Continue(()) + }); + } + + if !reaches_battlefield { + return true; + } + + let actor = object.controller; + let pool: Vec<&GameObject> = state + .objects + .values() + .filter(|candidate| candidate.owner == actor && pool_zones.contains(&candidate.zone)) + .collect(); + // Nothing can be selected out of an empty pool, so nothing arrives. This is + // the one empty set that IS an answer, and it is the opposite of the empty + // match set below: here the filter never ran. + if pool.is_empty() { + return true; + } + + let context = crate::game::filter::FilterContext::from_source_with_controller(object.id, actor); + let selectable: Vec<&&GameObject> = if selection.is_empty() { + pool.iter().collect() + } else { + pool.iter() + .filter(|candidate| { + selection.iter().any(|filter| { + crate::game::filter::matches_target_filter_in_owner_zone( + state, + candidate.id, + filter, + &context, + ) + }) + }) + .collect() + }; + if selectable.is_empty() { + return false; + } + selectable + .iter() + .all(|candidate| !carries_unreadable_rules_content(candidate)) +} + /// Fold every ability an object carries. A missing object, or one carrying no /// abilities at all, is `MayInterfere` — the fail-closed direction, and the one /// that keeps an empty fold from being proven confined by its identity element. @@ -791,6 +1004,9 @@ fn object_window_reach(state: &GameState, object_id: ObjectId) -> WindowReach { if carries_unreadable_rules_content(object) { return WindowReach::MayInterfere; } + if !library_arrivals_are_inert(state, object, &object.abilities) { + return WindowReach::MayInterfere; + } object .abilities .iter() @@ -820,10 +1036,15 @@ fn indexed_ability_window_reach( if carries_unreadable_rules_content(object) { return WindowReach::MayInterfere; } - object - .abilities - .get(ability_index) - .map_or(WindowReach::MayInterfere, ability_window_reach) + let Some(ability) = object.abilities.get(ability_index) else { + return WindowReach::MayInterfere; + }; + // Scoped to the ONE ability being activated, unlike the object-level entry + // point: a sibling ability the seat is not activating fetches nothing. + if !library_arrivals_are_inert(state, object, std::slice::from_ref(ability)) { + return WindowReach::MayInterfere; + } + ability_window_reach(ability) } /// CR 603.2: can a CONFINED action's event stream ever match this trigger's @@ -1118,21 +1339,32 @@ fn board_observer_may_react(state: &GameState, actor: PlayerId) -> bool { /// /// That residual is scoped to ONE origin, and the scoping is enforced in code /// rather than promised here. `effect_window_reach`'s `ChangeZone` arm admits a -/// battlefield entry only when `origin == Some(Zone::Library)`, so the card that -/// would arrive is always an unchosen member of a hidden zone (CR 400.2): this -/// function is handed a `GameState` and a list of `GameAction`s, and the card is -/// the subject of neither, so neither input contains it and neither the -/// per-action fold nor the board scan below has an object to read. -/// `board_observer_may_react` specifically cannot see it — -/// `trigger_definition_functions_in_zone` correctly answers "does not function" -/// for a library card, which is the CR 113.6 rule and not an omission. Reaching -/// it at all would require resolving the search, a different kind of input than -/// this seam takes. +/// battlefield entry only when `origin == Some(Zone::Library)`, and what the +/// arriving card can DO is then classified by [`library_arrivals_are_inert`], +/// which both entry points run. +/// +/// The residual is what THAT gate leaves, and it is narrower than the whole +/// fetch class: `carries_unreadable_rules_content` is a presence check, so a +/// selectable card with no trigger, replacement, static or keyword passes it +/// while still carrying an ACTIVATED ability whose cost is not tapping. Such a +/// card arrives tapped (the arm requires it) and can still be sacrificed for +/// value inside this window. +/// +/// This paragraph previously claimed the residual was total and unreachable, on +/// the argument that CR 400.2 makes the library hidden so "neither input +/// contains it and neither the per-action fold nor the board scan has an object +/// to read". That was measurably false — the enrolled 4p dump resolves all 91 of +/// the actor's library cards in `state.objects` — and CR 701.23a is the rule it +/// mistook: a search looks at all cards in the zone "even if it's a hidden +/// zone". `board_observer_may_react` really does miss them, but for the CR 113.6 +/// reason (`trigger_definition_functions_in_zone` answers "does not function" for +/// a library card), which is why the selection gate is separate from it. /// -/// A `Graveyard`, `Hand` or `Exile` origin is NOT that situation — the arriving -/// card is in `state.objects` and its rules content is readable — and it is not -/// in this residual because the arm no longer admits it. See that arm's fourth -/// battlefield conjunct for the measurement and the efficacy trade. +/// A `Graveyard`, `Hand` or `Exile` origin is a different situation again — the +/// arriving card is named by the effect's own target rather than chosen out of a +/// pool — and it is not in this residual because the arm no longer admits it. See +/// that arm's fourth battlefield conjunct for the measurement and the efficacy +/// trade. /// /// Its cost, on both axes, for the reader deciding whether that matters: /// - across windows: a bounded miss — a seat's fetched answer goes unused for @@ -3309,4 +3541,452 @@ mod tests { of the card the classifier can see — the module doc's §2 residual, now in band" ); } + + /// Urza's Cave, verbatim, BOTH lines (Oracle text verified on Scryfall, + /// `api.scryfall.com/cards/named?exact=Urza's+Cave`). Terramorphic Expanse's + /// UNRESTRICTED sibling on the ACTIVATED path: same `{T}` + sacrifice-this + /// cost shape, same tapped library arrival, and the search filter is + /// `Typed[Land]` where Terramorphic's is `Typed[Land] + HasSupertype(Basic)`. + /// Ability `[0]` is its mana ability and `[1]` is the fetch, which is what + /// makes it the right card for the INDEXED entry point: folding the whole + /// object would be over-determined by `Effect::Mana`. + const URZAS_CAVE: Card = Card { + name: "Urza's Cave", + oracle: "{T}: Add {C}.\n{3}, {T}, Sacrifice this land: Search your library for a land \ + card, put it onto the battlefield tapped, then shuffle.", + }; + + /// Bojuka Bog, verbatim (Oracle text verified on Scryfall, + /// `api.scryfall.com/cards/named?exact=Bojuka+Bog`). A LAND whose ETB reaches + /// a graveyard belonging to somebody else — the card that makes "an + /// unrestricted land search is confined" false. + const BOJUKA_BOG: Card = Card { + name: "Bojuka Bog", + oracle: "This land enters tapped.\nWhen this land enters, exile target player's \ + graveyard.\n{T}: Add {B}.", + }; + + /// Snow-Covered Swamp, verbatim — its entire printed rules text is one mana + /// ability. The inert control, and a REAL basic rather than a hand-built + /// vanilla stand-in. + const SNOW_COVERED_SWAMP: Card = Card { + name: "Snow-Covered Swamp", + oracle: "({T}: Add {B}.)", + }; + + /// Put a real parsed card into `player`'s library through the production face + /// path, so its trigger/replacement/static/keyword content is whatever the + /// pipeline actually produces rather than whatever a fixture remembered to + /// set. + fn give_library_card( + state: &mut GameState, + player: PlayerId, + card: &Card, + supertypes: Vec, + ) -> ObjectId { + let parsed = parse_oracle_text(card.oracle, card.name, &[], &[], &[]); + let face = CardFace { + name: card.name.to_string(), + oracle_text: Some(card.oracle.to_string()), + card_type: crate::types::card_type::CardType { + supertypes, + core_types: vec![crate::types::card_type::CoreType::Land], + subtypes: vec![], + }, + abilities: parsed.abilities, + triggers: parsed.triggers, + static_abilities: parsed.statics, + replacements: parsed.replacements, + keywords: parsed.extracted_keywords, + parse_warnings: parsed.parse_warnings, + ..CardFace::default() + }; + let id = create_object( + state, + crate::types::identifiers::CardId(state.next_object_id), + player, + card.name.to_string(), + Zone::Library, + ); + crate::game::printed_cards::apply_card_face_to_object( + state.objects.get_mut(&id).expect("just created"), + &face, + ); + id + } + + /// **T3.3 — a tapped library fetch is confined only while every card it could + /// SELECT is inert, at BOTH entry points.** + /// + /// `effect_window_reach`'s `ChangeZone` arm admits a tapped battlefield + /// arrival whose origin is a library, and it used to discharge the arriving + /// card's rules content with a hidden-zone argument: CR 400.2 makes a library + /// hidden, so "the card is the subject of neither input". CR 701.23a says + /// otherwise — "To search for a card in a zone, look at all cards in that zone + /// (even if it's a hidden zone) and find a card that matches the given + /// description" — and the library cards really are in `state.objects`. + /// + /// TWO AXES, varied one at a time against the same board: + /// * **the deck** — Urza's Cave / Reshape the Earth search for ANY land, so a + /// Bojuka Bog in the library is selectable and a Snow-Covered Swamp is not + /// enough to save it; + /// * **the printed filter** — Terramorphic Expanse searches for a BASIC land + /// on the identical library, and the Bog is not basic, so it stays confined. + /// This is the row that separates the implemented gate from a + /// "Basic means safe" heuristic: the heuristic passes the filter axis and + /// fails the deck axis. + /// + /// Both entry points are exercised because they gate independently: + /// `object_window_reach` folds every ability (Reshape the Earth, a spell), and + /// `indexed_ability_window_reach` folds exactly one (Urza's Cave `[1]`, an + /// activation). Dropping the conjunct from either one alone leaves the other + /// row green. + /// + /// REVERT-PROBES (both executed): delete the `library_arrivals_are_inert` + /// conjunct from `object_window_reach` ⇒ the Reshape row's `MayInterfere` + /// flips; delete it from `indexed_ability_window_reach` ⇒ the Urza's Cave + /// row's flips. + #[test] + fn t3_3_a_library_fetch_is_confined_only_while_every_selectable_card_is_inert() { + const RESHAPE_THE_EARTH: Card = Card { + name: "Reshape the Earth", + oracle: "Search your library for up to ten land cards, put them onto the battlefield \ + tapped, then shuffle.", + }; + let actor = crate::types::player::PlayerId(0); + + // One board, built once, then two sources staged on it. + let mut state = GameState::default(); + state.players.push(crate::types::player::Player { + id: actor, + ..Default::default() + }); + let swamp = give_library_card( + &mut state, + actor, + &SNOW_COVERED_SWAMP, + vec![ + crate::types::card_type::Supertype::Basic, + crate::types::card_type::Supertype::Snow, + ], + ); + let bog = give_library_card(&mut state, actor, &BOJUKA_BOG, vec![]); + for id in [swamp, bog] { + state + .players + .iter_mut() + .find(|p| p.id == actor) + .expect("seated") + .library + .push_back(id); + } + assert!( + !carries_unreadable_rules_content(&state.objects[&swamp]), + "PREMISE: a basic Snow-Covered Swamp is inert, so it can never be what produces a \ + `MayInterfere` below" + ); + assert!( + carries_unreadable_rules_content(&state.objects[&bog]), + "PREMISE: Bojuka Bog carries rules content this fold cannot read — its ETB. Without \ + this the rows below have no hazard to detect" + ); + + // ── source A: a SPELL, folded through `object_window_reach` ── + let reshape = create_object( + &mut state, + crate::types::identifiers::CardId(90), + actor, + RESHAPE_THE_EARTH.name.to_string(), + Zone::Hand, + ); + state + .objects + .get_mut(&reshape) + .expect("just created") + .abilities = std::sync::Arc::new(vec![ability(&RESHAPE_THE_EARTH, 0)]); + assert_eq!( + object_window_reach(&state, reshape), + WindowReach::MayInterfere, + "an unrestricted land search LOOKS AT ALL CARDS (CR 701.23a) and this library holds \ + Bojuka Bog, whose ETB exiles a graveyard the actor does not own" + ); + + // ── source B: an ACTIVATION, folded through `indexed_ability_window_reach` ── + let cave = create_object( + &mut state, + crate::types::identifiers::CardId(91), + actor, + URZAS_CAVE.name.to_string(), + Zone::Battlefield, + ); + state + .objects + .get_mut(&cave) + .expect("just created") + .abilities = + std::sync::Arc::new(vec![ability(&URZAS_CAVE, 0), ability(&URZAS_CAVE, 1)]); + assert_eq!( + indexed_ability_window_reach(&state, cave, 1), + WindowReach::MayInterfere, + "the same hazard reached through the ACTIVATED entry point, which gates separately" + ); + + // ── AXIS 1: vary the DECK, hold the cards fixed ── + let inert_library = { + let mut inert = state.clone(); + inert.objects.remove(&bog); + inert + .players + .iter_mut() + .find(|p| p.id == actor) + .expect("seated") + .library + .retain(|id| *id != bog); + inert + }; + assert_eq!( + object_window_reach(&inert_library, reshape), + WindowReach::OwnResourcesOnly, + "AXIS 1 (deck varies): the identical unrestricted search is confined once every land \ + it could select is inert. Without this direction the gate could be a constant" + ); + assert_eq!( + indexed_ability_window_reach(&inert_library, cave, 1), + WindowReach::OwnResourcesOnly, + "AXIS 1, activated path" + ); + + // ── AXIS 2: vary the printed FILTER, hold the deck fixed ── + let terramorphic = create_object( + &mut state, + crate::types::identifiers::CardId(92), + actor, + TERRAMORPHIC.name.to_string(), + Zone::Battlefield, + ); + state + .objects + .get_mut(&terramorphic) + .expect("just created") + .abilities = std::sync::Arc::new(vec![ability(&TERRAMORPHIC, 0)]); + assert_eq!( + object_window_reach(&state, terramorphic), + WindowReach::OwnResourcesOnly, + "AXIS 2 (filter varies, deck held): a BASIC land search on the very library that \ + defeats the unrestricted one stays confined — the Bog is not basic. A gate that read \ + 'is there a fetch' rather than 'what can it select' fails here" + ); + } + + /// **T3.4 — a non-empty selection filter that matches nothing fails closed.** + /// + /// The one place [`library_arrivals_are_inert`] refuses to answer instead of + /// answering. A library with cards in it but none matching the search could be + /// a deck that genuinely cannot fetch, or it could be a filter this seam + /// cannot evaluate — `FilterContext::from_source_with_controller` carries the + /// acting object but no ability instance, and MEASURED over + /// `data/card-data.json` 24 cards carry a `SearchLibrary` filter that reads + /// the ability's own target (`SameNameAsParentTarget`, `CanEnchant { + /// ParentTarget }`). Those two cases are indistinguishable here, and one of + /// them is a false `Accept`, so neither gets one. + /// + /// The row is the pair: an EMPTY library is confined (nothing can be + /// selected — the filter never ran), a NON-EMPTY library with no match is not. + /// + /// REVERT-PROBE (executed): change the `selectable.is_empty()` arm to return + /// `true` ⇒ the second assertion flips to `OwnResourcesOnly`. + #[test] + fn t3_4_a_search_filter_that_matches_nothing_is_unanswerable_not_confined() { + const RAMPANT_GROWTH: Card = Card { + name: "Rampant Growth", + oracle: "Search your library for a basic land card, put that card onto the \ + battlefield tapped, then shuffle.", + }; + let actor = crate::types::player::PlayerId(0); + let mut state = GameState::default(); + state.players.push(crate::types::player::Player { + id: actor, + ..Default::default() + }); + let growth = create_object( + &mut state, + crate::types::identifiers::CardId(1), + actor, + RAMPANT_GROWTH.name.to_string(), + Zone::Hand, + ); + state + .objects + .get_mut(&growth) + .expect("just created") + .abilities = std::sync::Arc::new(vec![ability(&RAMPANT_GROWTH, 0)]); + + assert_eq!( + object_window_reach(&state, growth), + WindowReach::OwnResourcesOnly, + "an EMPTY library selects nothing, so nothing arrives. This empty set IS an answer" + ); + + // One NON-basic land in the library: the pool is non-empty and the + // basic-land filter matches none of it. + let bog = give_library_card(&mut state, actor, &BOJUKA_BOG, vec![]); + state + .players + .iter_mut() + .find(|p| p.id == actor) + .expect("seated") + .library + .push_back(bog); + assert_eq!( + object_window_reach(&state, growth), + WindowReach::MayInterfere, + "a non-empty pool that the filter matched NOTHING in is the case this seam cannot \ + tell apart from a filter it is unable to evaluate, so it does not claim confinement" + ); + } + + /// **T3.2 — a transform carries the DISPLAYED face's parse diagnostics, both + /// ways.** + /// + /// `obj.parse_warnings` documents itself as "diagnostics for the displayed + /// face", and before `BackFaceData` carried the field that sentence was false + /// the moment a permanent transformed. `printed_cards`' face application + /// copies field by field, so the FRONT face's diagnostics stayed on the object + /// while the BACK face's rules text was displayed. Both directions are wrong + /// and they are wrong in opposite ways, which is why both are asserted here: + /// a front-clean/back-dirty card looked clean while showing text the parser + /// could not read, and a front-dirty/back-clean one kept a diagnostic that + /// described nothing on the object any more. + /// + /// Driven through the REAL `game::transform::transform_permanent`, not through + /// the two face helpers it calls — a test that called `snapshot_object_face` + /// and `apply_back_face_to_object` itself would go green even if the transform + /// stopped using them. + /// + /// **What this row does NOT claim.** It is not a `carries_unreadable_rules_content` + /// row, and asserting that gate here would be vacuous: the gate has a + /// `back_face.is_some()` disjunct, so EVERY double-faced object trips it + /// whatever its diagnostics say. The claim is about the state the gate (and + /// `game::visibility`'s two redactions) read — that after a transform the + /// field describes the face now on top. + /// + /// REVERT-PROBES (both executed): + /// * drop `obj.parse_warnings = back_face.parse_warnings` from + /// `printed_cards::apply_back_face_to_object` ⇒ the post-transform assertion + /// fails in BOTH cases; + /// * drop `parse_warnings: obj.parse_warnings.clone()` from + /// `printed_cards::snapshot_object_face` ⇒ the transform-back assertion + /// fails in the front-dirty case (the outgoing face's diagnostics are lost + /// rather than stashed). + #[test] + fn t3_2_a_transform_carries_the_displayed_faces_parse_diagnostics() { + use crate::game::printed_cards::{apply_card_face_to_back_face, apply_card_face_to_object}; + + fn diagnostic(text: &str) -> crate::parser::oracle_ir::diagnostic::OracleDiagnostic { + crate::parser::oracle_ir::diagnostic::OracleDiagnostic::IgnoredRemainder { + text: text.to_string(), + parser: "probe".to_string(), + line_index: 0, + } + } + + // Both directions, as a table: neither verdict can be a constant. + for (label, front_warnings, back_warnings) in [ + ("front-clean / back-dirty", vec![], vec![diagnostic("back")]), + ( + "front-dirty / back-clean", + vec![diagnostic("front")], + vec![], + ), + ] { + let mut state = GameState::default(); + let id = create_object( + &mut state, + crate::types::identifiers::CardId(1), + crate::types::player::PlayerId(0), + "Probe Front".to_string(), + Zone::Battlefield, + ); + + let front = CardFace { + name: "Probe Front".to_string(), + parse_warnings: front_warnings.clone(), + ..CardFace::default() + }; + let back = CardFace { + name: "Probe Back".to_string(), + parse_warnings: back_warnings.clone(), + ..CardFace::default() + }; + apply_card_face_to_object(state.objects.get_mut(&id).expect("just created"), &front); + let mut stored_back = crate::game::specialize::empty_back_face(); + apply_card_face_to_back_face(&mut stored_back, &back); + assert_eq!( + stored_back.parse_warnings, back_warnings, + "PREMISE ({label}): `apply_card_face_to_back_face` must carry the face's own \ + diagnostics, or the transform below has nothing to install" + ); + state.objects.get_mut(&id).expect("just created").back_face = Some(stored_back); + + assert_eq!( + state.objects[&id].parse_warnings, front_warnings, + "PREMISE ({label}): the object starts on its FRONT face" + ); + + let mut events = Vec::new(); + crate::game::transform::transform_permanent(&mut state, id, &mut events) + .expect("CR 701.27a: a battlefield permanent with a back face transforms"); + assert!( + state.objects[&id].transformed, + "PREMISE ({label}): the transform must actually have happened, or the assertion \ + below is comparing the front face to itself" + ); + assert_eq!( + state.objects[&id].parse_warnings, back_warnings, + "({label}) the displayed face is now the BACK face, so its diagnostics are the \ + object's. Reporting the front face's here is reporting evidence about text the \ + permanent no longer has" + ); + + crate::game::transform::transform_permanent(&mut state, id, &mut events) + .expect("CR 701.27a: and it transforms back"); + assert!( + !state.objects[&id].transformed, + "PREMISE ({label}): the round trip must return to the front face" + ); + assert_eq!( + state.objects[&id].parse_warnings, front_warnings, + "({label}) the return trip restores the FRONT face's diagnostics exactly — a \ + stale back-face warning would outlive the text it described" + ); + + // THE THIRD SNAPSHOT HELPER. `game::effects::turn_face_down` stashes + // `snapshot_object_base_face` and the face-up path installs it with + // the same `apply_back_face_to_object` the transform above used, so + // that restore now READS a field the base snapshot has to write. + // MEASURED: `morph::apply_face_down_creature_characteristics` blanks + // name, types, abilities, keywords and every definition list but never + // touches `parse_warnings`, so a base snapshot that dropped the field + // would make turning face UP clear diagnostics that turning face DOWN + // had left alone — a regression this change would have introduced. + // + // Helper-level on purpose and stated as such: the production entry is + // an effect resolver needing a `ResolvedAbility` and a legal morph + // cost, and those would become the variables the row measures. + // REVERT-PROBE (executed): replace `snapshot_object_base_face`'s + // `parse_warnings: obj.parse_warnings.clone()` with `Vec::new()` ⇒ + // this assertion fails in the front-dirty case. + let stashed = + crate::game::printed_cards::snapshot_object_base_face(&state.objects[&id]); + crate::game::printed_cards::apply_back_face_to_object( + state.objects.get_mut(&id).expect("just created"), + stashed, + ); + assert_eq!( + state.objects[&id].parse_warnings, front_warnings, + "({label}) the face-down stash/restore pair must round-trip the displayed face's \ + diagnostics too" + ); + } + } } diff --git a/crates/engine/src/game/casting_tests.rs b/crates/engine/src/game/casting_tests.rs index 2b3a34402a..b8ce7bc4bc 100644 --- a/crates/engine/src/game/casting_tests.rs +++ b/crates/engine/src/game/casting_tests.rs @@ -10574,6 +10574,7 @@ fn hearth_elemental_self_cost_reduction_counts_adventures() { casting_restrictions: vec![], casting_options: vec![], layout_kind: Some(crate::types::card::LayoutKind::Adventure), + parse_warnings: vec![], }); } } @@ -26689,6 +26690,7 @@ fn create_adventure_in_hand(state: &mut GameState, player: PlayerId) -> ObjectId casting_restrictions: Vec::new(), casting_options: Vec::new(), layout_kind: None, + parse_warnings: vec![], }); obj_id @@ -26781,6 +26783,7 @@ fn create_enchantment_adventure_in_hand(state: &mut GameState, player: PlayerId) casting_restrictions: Vec::new(), casting_options: Vec::new(), layout_kind: Some(LayoutKind::Adventure), + parse_warnings: vec![], }); obj_id @@ -26866,6 +26869,7 @@ fn create_omen_in_hand(state: &mut GameState, player: PlayerId) -> ObjectId { casting_restrictions: Vec::new(), casting_options: Vec::new(), layout_kind: Some(LayoutKind::Omen), + parse_warnings: vec![], }); obj_id @@ -30680,6 +30684,7 @@ fn add_disturb_creature_to_graveyard( casting_restrictions: Vec::new(), casting_options: Vec::new(), layout_kind: Some(LayoutKind::Transform), + parse_warnings: vec![], }); obj_id } @@ -36967,6 +36972,7 @@ mod mtmte_cast_flow { casting_restrictions: Vec::new(), casting_options: Vec::new(), layout_kind: Some(LayoutKind::Transform), + parse_warnings: vec![], } } @@ -50977,6 +50983,7 @@ fn exact_resolution_offer_does_not_inherit_sibling_cast_transformed() { casting_restrictions: Vec::new(), casting_options: Vec::new(), layout_kind: Some(LayoutKind::Transform), + parse_warnings: vec![], }); obj.casting_permissions .push(CastingPermission::ExileWithAltCost { diff --git a/crates/engine/src/game/day_night.rs b/crates/engine/src/game/day_night.rs index 985ab5d63b..e03a649772 100644 --- a/crates/engine/src/game/day_night.rs +++ b/crates/engine/src/game/day_night.rs @@ -178,6 +178,7 @@ mod tests { casting_restrictions: vec![], casting_options: vec![], layout_kind: None, + parse_warnings: vec![], }); id } diff --git a/crates/engine/src/game/effects/become_copy.rs b/crates/engine/src/game/effects/become_copy.rs index d6448b5634..8d2a44385b 100644 --- a/crates/engine/src/game/effects/become_copy.rs +++ b/crates/engine/src/game/effects/become_copy.rs @@ -1167,6 +1167,7 @@ mod tests { casting_restrictions: vec![], casting_options: vec![], layout_kind: None, + parse_warnings: vec![], }); } diff --git a/crates/engine/src/game/effects/change_zone.rs b/crates/engine/src/game/effects/change_zone.rs index 31143ec135..081ad1e1ef 100644 --- a/crates/engine/src/game/effects/change_zone.rs +++ b/crates/engine/src/game/effects/change_zone.rs @@ -9559,6 +9559,7 @@ mod tests { casting_restrictions: vec![], casting_options: vec![], layout_kind: None, + parse_warnings: vec![], }); } diff --git a/crates/engine/src/game/effects/flip_coin.rs b/crates/engine/src/game/effects/flip_coin.rs index 45a9badb58..e20ccac43d 100644 --- a/crates/engine/src/game/effects/flip_coin.rs +++ b/crates/engine/src/game/effects/flip_coin.rs @@ -934,6 +934,7 @@ mod tests { casting_restrictions: vec![], casting_options: vec![], layout_kind: None, + parse_warnings: vec![], }); id } diff --git a/crates/engine/src/game/effects/flip_permanent.rs b/crates/engine/src/game/effects/flip_permanent.rs index 11241f497a..1c3ecf3270 100644 --- a/crates/engine/src/game/effects/flip_permanent.rs +++ b/crates/engine/src/game/effects/flip_permanent.rs @@ -148,6 +148,7 @@ mod tests { casting_restrictions: vec![], casting_options: vec![], layout_kind: Some(crate::types::card::LayoutKind::Flip), + parse_warnings: vec![], }); id } diff --git a/crates/engine/src/game/effects/prepare.rs b/crates/engine/src/game/effects/prepare.rs index 2f720163d1..cb17a3aa3a 100644 --- a/crates/engine/src/game/effects/prepare.rs +++ b/crates/engine/src/game/effects/prepare.rs @@ -1260,6 +1260,7 @@ mod tests { casting_restrictions: Vec::new(), casting_options: Vec::new(), layout_kind: Some(LayoutKind::Prepare), + parse_warnings: vec![], } } } diff --git a/crates/engine/src/game/effects/set_room_door_lock.rs b/crates/engine/src/game/effects/set_room_door_lock.rs index debbc1d22a..fe6728e5ad 100644 --- a/crates/engine/src/game/effects/set_room_door_lock.rs +++ b/crates/engine/src/game/effects/set_room_door_lock.rs @@ -139,6 +139,7 @@ mod tests { casting_restrictions: Vec::new(), casting_options: Vec::new(), layout_kind: Some(crate::types::card::LayoutKind::Split), + parse_warnings: vec![], } } diff --git a/crates/engine/src/game/effects/token.rs b/crates/engine/src/game/effects/token.rs index 7fb6e53adb..bd691211e0 100644 --- a/crates/engine/src/game/effects/token.rs +++ b/crates/engine/src/game/effects/token.rs @@ -3295,6 +3295,9 @@ fn incubator_phyrexian_back_face() -> BackFaceData { strive_cost: None, casting_restrictions: vec![], casting_options: vec![], + // Built in code from CR 111.10i, not parsed from printed text, so there is + // no parse to have gone wrong. + parse_warnings: vec![], layout_kind: None, } } diff --git a/crates/engine/src/game/effects/transform_effect.rs b/crates/engine/src/game/effects/transform_effect.rs index 6a5572cacf..efb2804a0c 100644 --- a/crates/engine/src/game/effects/transform_effect.rs +++ b/crates/engine/src/game/effects/transform_effect.rs @@ -222,6 +222,7 @@ mod tests { // face so `is_double_faced_permanent` recognizes it (the mass-transform // resolver pre-filters on that authority). layout_kind: Some(crate::types::card::LayoutKind::Transform), + parse_warnings: vec![], }); id } diff --git a/crates/engine/src/game/engine.rs b/crates/engine/src/game/engine.rs index b30586e2bf..598b66d572 100644 --- a/crates/engine/src/game/engine.rs +++ b/crates/engine/src/game/engine.rs @@ -14230,6 +14230,7 @@ mod priority_principal_tests { casting_restrictions: Vec::new(), casting_options: Vec::new(), layout_kind: None, + parse_warnings: vec![], }); for _ in 0..mana_count { runner.state_mut().players[0].mana_pool.add(ManaUnit::new( diff --git a/crates/engine/src/game/engine_debug.rs b/crates/engine/src/game/engine_debug.rs index db293d883c..a44e187059 100644 --- a/crates/engine/src/game/engine_debug.rs +++ b/crates/engine/src/game/engine_debug.rs @@ -1551,6 +1551,7 @@ mod tests { casting_restrictions: Vec::new(), casting_options: Vec::new(), layout_kind: Some(LayoutKind::Prepare), + parse_warnings: vec![], } } diff --git a/crates/engine/src/game/engine_mdfc_land_tests.rs b/crates/engine/src/game/engine_mdfc_land_tests.rs index b2637d7df5..c82568085c 100644 --- a/crates/engine/src/game/engine_mdfc_land_tests.rs +++ b/crates/engine/src/game/engine_mdfc_land_tests.rs @@ -62,6 +62,7 @@ fn make_back_face( casting_restrictions: Vec::new(), casting_options: Vec::new(), layout_kind, + parse_warnings: vec![], } } diff --git a/crates/engine/src/game/engine_tests.rs b/crates/engine/src/game/engine_tests.rs index ab045257ab..c665caea18 100644 --- a/crates/engine/src/game/engine_tests.rs +++ b/crates/engine/src/game/engine_tests.rs @@ -1656,6 +1656,7 @@ fn room_back_face(name: &str) -> BackFaceData { casting_restrictions: Vec::new(), casting_options: Vec::new(), layout_kind: Some(crate::types::card::LayoutKind::Split), + parse_warnings: vec![], } } diff --git a/crates/engine/src/game/flip.rs b/crates/engine/src/game/flip.rs index ff53e9eea8..e5db14ecc4 100644 --- a/crates/engine/src/game/flip.rs +++ b/crates/engine/src/game/flip.rs @@ -456,6 +456,7 @@ mod tests { casting_restrictions: vec![], casting_options: vec![], layout_kind: Some(crate::types::card::LayoutKind::Flip), + parse_warnings: vec![], }); id diff --git a/crates/engine/src/game/game_object.rs b/crates/engine/src/game/game_object.rs index 9232095032..d95807ec68 100644 --- a/crates/engine/src/game/game_object.rs +++ b/crates/engine/src/game/game_object.rs @@ -239,6 +239,25 @@ pub struct BackFaceData { pub strive_cost: Option, pub casting_restrictions: Vec, pub casting_options: Vec, + /// Parser diagnostics for THIS face — the `BackFaceData` half of + /// [`GameObject::parse_warnings`], and per-face for the same reason `abilities` + /// is: the two faces are parsed independently, so a card whose front reads + /// cleanly and whose back does not is the normal case rather than a corner one. + /// + /// Without this field the diagnostic was not a per-face fact at all. Face + /// application copies field by field, so a transform kept the FRONT face's + /// diagnostics on the object while displaying the back face's rules text: a + /// front-clean card looked clean after transforming into a back face the parser + /// could not fully read, and a front-dirty one kept a diagnostic that no longer + /// described anything. `ai_support::shortcut_efficacy` reads the object field as + /// evidence that the printed rules text is fully modelled, so the stale answer + /// was load-bearing in both directions. + /// + /// `serde(default)` keeps every persisted dump loadable — an older + /// `BackFaceData` simply carries no diagnostics — and `skip_serializing_if` + /// keeps a clean parse byte-identical on the way out. + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub parse_warnings: Vec, /// Source layout kind — distinguishes Modal DFCs from Transform DFCs /// so the engine can offer face-choice for MDFCs (CR 712.12). #[serde(default, skip_serializing_if = "Option::is_none")] @@ -549,8 +568,12 @@ pub struct GameObject { #[serde(default, skip_serializing_if = "Vec::is_empty")] pub spellbook: Vec, - /// Parser diagnostics for this face, copied verbatim from - /// `CardFace::parse_warnings` by `game::printed_cards`. + /// Parser diagnostics for the DISPLAYED face, copied verbatim from + /// `CardFace::parse_warnings` by `game::printed_cards`. A transform swaps this + /// along with the rest of the face, through [`BackFaceData::parse_warnings`] — + /// the two faces parse independently, so a card can be clean on one and not the + /// other, and reporting the wrong face's diagnostics is worse than reporting + /// none. /// /// NOT a rules field, and it does not change how anything resolves. It is /// carried onto the object because a diagnostic is EVIDENCE ABOUT the rules @@ -1298,14 +1321,16 @@ fn _gameobject_partition_is_total(o: &GameObject) { token_image_ref: _, source_related_token_ids: _, spellbook: _, - // IMMUTABLE. Written exactly once, by `printed_cards::apply_card_face_to_object`, - // as a verbatim clone of the face's own diagnostics; nothing mutates it - // afterwards. MEASURED by `grep -rn 'parse_warnings\s*=' crates/engine/src/`: - // the only assignments in the crate are `parser::oracle`'s write to a - // `ParsedCard` result and a local `bool` in `game::coverage` — neither is a - // `GameObject` field write. Two objects with the same printed face therefore - // always agree here, so it cannot carry a per-object divergence the CR 104.4b - // comparator would need to see. + // OMITTED, SAFE BY WRITE SITE. Every write is a FACE INSTALL: + // `printed_cards::apply_card_face_to_object` (front) and + // `apply_back_face_to_object` (the face a transform swaps in), each a verbatim + // clone of that face's own diagnostics, plus the two `game::visibility` + // redactions which act on a projected copy and never on stored state. So the + // field is a function of WHICH FACE IS DISPLAYED, and `transformed` — compared + // above — is that same function's discriminator: two states this comparator + // calls equal are showing the same face of the same card, and therefore agree + // here. Nothing accumulates in it, so it cannot become the per-iteration drift + // the §5.2c ADD set exists to catch. parse_warnings: _, back_face: _, specialize_faces: _, diff --git a/crates/engine/src/game/printed_cards.rs b/crates/engine/src/game/printed_cards.rs index 5a9c2a9815..de0021ad5f 100644 --- a/crates/engine/src/game/printed_cards.rs +++ b/crates/engine/src/game/printed_cards.rs @@ -296,6 +296,9 @@ pub fn apply_card_face_to_back_face(back_face: &mut BackFaceData, card_face: &Ca back_face.strive_cost = card_face.strive_cost.clone(); back_face.casting_restrictions = card_face.casting_restrictions.clone(); back_face.casting_options = card_face.casting_options.clone(); + // Same copy, same reason, as `apply_card_face_to_object`: evidence that THIS + // face's printed text did not parse cleanly travels with the face. + back_face.parse_warnings = card_face.parse_warnings.clone(); } pub fn apply_back_face_to_object(obj: &mut GameObject, back_face: BackFaceData) { @@ -345,6 +348,10 @@ pub fn apply_back_face_to_object(obj: &mut GameObject, back_face: BackFaceData) obj.strive_cost = back_face.strive_cost; obj.casting_restrictions = back_face.casting_restrictions; obj.casting_options = back_face.casting_options; + // The displayed face's diagnostics replace the outgoing face's. Both + // directions matter and both are this one line: a back face the parser could + // not fully read starts gating here, and transforming back off it stops. + obj.parse_warnings = back_face.parse_warnings; } /// CR 306.5b + CR 310.4b + CR 614.1c: Seed the intrinsic "enters with N @@ -747,6 +754,9 @@ pub fn snapshot_object_face(obj: &GameObject) -> BackFaceData { strive_cost: obj.strive_cost.clone(), casting_restrictions: obj.casting_restrictions.clone(), casting_options: obj.casting_options.clone(), + // The outgoing face's diagnostics ride out with it, so the return trip + // restores them rather than inheriting whatever the other face had. + parse_warnings: obj.parse_warnings.clone(), layout_kind: None, } } @@ -792,6 +802,10 @@ pub fn snapshot_object_base_face(obj: &GameObject) -> BackFaceData { strive_cost: obj.strive_cost.clone(), casting_restrictions: obj.casting_restrictions.clone(), casting_options: obj.casting_options.clone(), + // Face-derived, with no base/live split to choose between: nothing writes + // `parse_warnings` except a face install, so the live field IS the printed + // face's diagnostics and the layer system never touches it. + parse_warnings: obj.parse_warnings.clone(), layout_kind: None, } } @@ -1044,6 +1058,8 @@ fn back_face_for_card_face_with_printed_ref( strive_cost: None, casting_restrictions: Vec::new(), casting_options: Vec::new(), + // Empty seed; `apply_card_face_to_back_face` below fills it from the face. + parse_warnings: Vec::new(), layout_kind: None, }; apply_card_face_to_back_face(&mut back, face); @@ -1906,6 +1922,7 @@ mod tests { casting_restrictions: vec![], casting_options: vec![], layout_kind: None, + parse_warnings: vec![], }); rehydrate_game_from_card_db(&mut state, &db); diff --git a/crates/engine/src/game/specialize.rs b/crates/engine/src/game/specialize.rs index 0e8c019933..67263dcac8 100644 --- a/crates/engine/src/game/specialize.rs +++ b/crates/engine/src/game/specialize.rs @@ -98,6 +98,7 @@ pub(crate) fn empty_back_face() -> BackFaceData { strive_cost: None, casting_restrictions: vec![], casting_options: vec![], + parse_warnings: vec![], layout_kind: None, } } diff --git a/crates/engine/src/game/stack.rs b/crates/engine/src/game/stack.rs index d18ce4d81e..2af1ebe66b 100644 --- a/crates/engine/src/game/stack.rs +++ b/crates/engine/src/game/stack.rs @@ -4806,6 +4806,7 @@ mod tests { casting_restrictions: vec![], casting_options: vec![], layout_kind: None, + parse_warnings: vec![], } } diff --git a/crates/engine/src/game/transform.rs b/crates/engine/src/game/transform.rs index 71c6a4b43c..57111f0214 100644 --- a/crates/engine/src/game/transform.rs +++ b/crates/engine/src/game/transform.rs @@ -327,6 +327,7 @@ mod tests { casting_restrictions: vec![], casting_options: vec![], layout_kind: None, + parse_warnings: vec![], }); id diff --git a/crates/engine/src/game/triggers.rs b/crates/engine/src/game/triggers.rs index 02df951016..d7495c5730 100644 --- a/crates/engine/src/game/triggers.rs +++ b/crates/engine/src/game/triggers.rs @@ -24719,6 +24719,7 @@ pub mod tests { casting_restrictions: vec![], casting_options: vec![], layout_kind: None, + parse_warnings: vec![], }); } diff --git a/crates/engine/src/game/zones.rs b/crates/engine/src/game/zones.rs index 4e094ea099..bf2112a9a5 100644 --- a/crates/engine/src/game/zones.rs +++ b/crates/engine/src/game/zones.rs @@ -4023,6 +4023,7 @@ mod tests { casting_restrictions: vec![], casting_options: vec![], layout_kind: Some(crate::types::card::LayoutKind::Modal), + parse_warnings: vec![], }); } @@ -4188,6 +4189,7 @@ mod tests { casting_restrictions: vec![], casting_options: vec![], layout_kind: Some(crate::types::card::LayoutKind::Modal), + parse_warnings: vec![], }); } // Apply back face (simulating ChooseModalFace on stack). diff --git a/crates/engine/tests/integration/azors_gateway_transform_condition.rs b/crates/engine/tests/integration/azors_gateway_transform_condition.rs index bc19a636bb..6ff8f8ed04 100644 --- a/crates/engine/tests/integration/azors_gateway_transform_condition.rs +++ b/crates/engine/tests/integration/azors_gateway_transform_condition.rs @@ -68,6 +68,7 @@ fn sanctum_of_the_sun_back_face() -> BackFaceData { casting_restrictions: vec![], casting_options: vec![], layout_kind: None, + parse_warnings: vec![], } } diff --git a/crates/engine/tests/integration/copied_ability_transform_generation.rs b/crates/engine/tests/integration/copied_ability_transform_generation.rs index 250d1ff995..bf3af9c4c4 100644 --- a/crates/engine/tests/integration/copied_ability_transform_generation.rs +++ b/crates/engine/tests/integration/copied_ability_transform_generation.rs @@ -83,6 +83,7 @@ fn stonewing_antagonizer_back_face() -> BackFaceData { casting_restrictions: vec![], casting_options: vec![], layout_kind: None, + parse_warnings: vec![], } } diff --git a/crates/engine/tests/integration/craft_tithing_blade_transform.rs b/crates/engine/tests/integration/craft_tithing_blade_transform.rs index 78190502e1..81f9dbe73f 100644 --- a/crates/engine/tests/integration/craft_tithing_blade_transform.rs +++ b/crates/engine/tests/integration/craft_tithing_blade_transform.rs @@ -391,6 +391,7 @@ fn consuming_sepulcher_back_face() -> BackFaceData { casting_restrictions: vec![], casting_options: vec![], layout_kind: None, + parse_warnings: vec![], } } diff --git a/crates/engine/tests/integration/deterministic_game_state_serde.rs b/crates/engine/tests/integration/deterministic_game_state_serde.rs index eed8182619..f97aba069d 100644 --- a/crates/engine/tests/integration/deterministic_game_state_serde.rs +++ b/crates/engine/tests/integration/deterministic_game_state_serde.rs @@ -1191,6 +1191,7 @@ fn back_face(name: &str) -> BackFaceData { casting_restrictions: Vec::new(), casting_options: Vec::new(), layout_kind: None, + parse_warnings: vec![], } } diff --git a/crates/engine/tests/integration/integration_adventure.rs b/crates/engine/tests/integration/integration_adventure.rs index 70458bf2bc..d25b69a7ab 100644 --- a/crates/engine/tests/integration/integration_adventure.rs +++ b/crates/engine/tests/integration/integration_adventure.rs @@ -93,6 +93,7 @@ fn stomp_back_face() -> BackFaceData { casting_restrictions: Vec::new(), casting_options: Vec::new(), layout_kind: None, + parse_warnings: vec![], } } diff --git a/crates/engine/tests/integration/issue_2425_fable_chapter_iii_transform.rs b/crates/engine/tests/integration/issue_2425_fable_chapter_iii_transform.rs index fc0dcb6324..e532f31595 100644 --- a/crates/engine/tests/integration/issue_2425_fable_chapter_iii_transform.rs +++ b/crates/engine/tests/integration/issue_2425_fable_chapter_iii_transform.rs @@ -50,6 +50,7 @@ fn reflection_back_face() -> BackFaceData { casting_restrictions: vec![], casting_options: vec![], layout_kind: None, + parse_warnings: vec![], } } @@ -80,6 +81,7 @@ fn etching_back_face() -> BackFaceData { casting_restrictions: vec![], casting_options: vec![], layout_kind: None, + parse_warnings: vec![], } } diff --git a/crates/engine/tests/integration/issue_4001_frolicking_familiar_adventure_instant.rs b/crates/engine/tests/integration/issue_4001_frolicking_familiar_adventure_instant.rs index 86ca2b2121..8b16553292 100644 --- a/crates/engine/tests/integration/issue_4001_frolicking_familiar_adventure_instant.rs +++ b/crates/engine/tests/integration/issue_4001_frolicking_familiar_adventure_instant.rs @@ -63,6 +63,7 @@ fn blow_off_steam_back_face() -> BackFaceData { casting_restrictions: Vec::new(), casting_options: Vec::new(), layout_kind: None, + parse_warnings: vec![], } } diff --git a/crates/engine/tests/integration/issue_5326_avatar_aang_transform.rs b/crates/engine/tests/integration/issue_5326_avatar_aang_transform.rs index 0c66d980fb..6aba669b6a 100644 --- a/crates/engine/tests/integration/issue_5326_avatar_aang_transform.rs +++ b/crates/engine/tests/integration/issue_5326_avatar_aang_transform.rs @@ -81,6 +81,7 @@ fn attach_aang_back_face(runner: &mut engine::game::scenario::GameRunner, aang: casting_restrictions: vec![], casting_options: vec![], layout_kind: None, + parse_warnings: vec![], }); } diff --git a/crates/engine/tests/integration/issue_6403_moonmist_mass_transform.rs b/crates/engine/tests/integration/issue_6403_moonmist_mass_transform.rs index 7c7083ccfb..6cdcd03dfe 100644 --- a/crates/engine/tests/integration/issue_6403_moonmist_mass_transform.rs +++ b/crates/engine/tests/integration/issue_6403_moonmist_mass_transform.rs @@ -48,6 +48,7 @@ fn attach_transform_back_face(runner: &mut GameRunner, object_id: ObjectId) { // CR 712.16: this is a transforming DFC, so the mass resolver may // transform it rather than applying CR 701.27c's no-op. layout_kind: Some(LayoutKind::Transform), + parse_warnings: vec![], }); } diff --git a/crates/engine/tests/integration/issue_691_sheoldred_saga_lore.rs b/crates/engine/tests/integration/issue_691_sheoldred_saga_lore.rs index 64894f8a23..544d68b4a6 100644 --- a/crates/engine/tests/integration/issue_691_sheoldred_saga_lore.rs +++ b/crates/engine/tests/integration/issue_691_sheoldred_saga_lore.rs @@ -49,6 +49,7 @@ fn true_scriptures_back_face() -> BackFaceData { casting_restrictions: vec![], casting_options: vec![], layout_kind: None, + parse_warnings: vec![], } } diff --git a/crates/engine/tests/integration/kamigawa_flip_cards.rs b/crates/engine/tests/integration/kamigawa_flip_cards.rs index 00c3340b18..ef16674be3 100644 --- a/crates/engine/tests/integration/kamigawa_flip_cards.rs +++ b/crates/engine/tests/integration/kamigawa_flip_cards.rs @@ -70,6 +70,7 @@ fn kenzo_alternative_face() -> BackFaceData { casting_restrictions: vec![], casting_options: vec![], layout_kind: Some(LayoutKind::Flip), + parse_warnings: vec![], } } @@ -129,6 +130,7 @@ fn tok_tok_alternative_face() -> BackFaceData { casting_restrictions: vec![], casting_options: vec![], layout_kind: Some(LayoutKind::Flip), + parse_warnings: vec![], } } diff --git a/crates/engine/tests/integration/room_door_lock_unlock.rs b/crates/engine/tests/integration/room_door_lock_unlock.rs index a818e1ea34..35d0328289 100644 --- a/crates/engine/tests/integration/room_door_lock_unlock.rs +++ b/crates/engine/tests/integration/room_door_lock_unlock.rs @@ -55,6 +55,7 @@ fn room_back_face() -> BackFaceData { casting_restrictions: Vec::new(), casting_options: Vec::new(), layout_kind: Some(LayoutKind::Split), + parse_warnings: vec![], } } diff --git a/crates/engine/tests/integration/rules/battle.rs b/crates/engine/tests/integration/rules/battle.rs index 1cb418f067..dbbf599964 100644 --- a/crates/engine/tests/integration/rules/battle.rs +++ b/crates/engine/tests/integration/rules/battle.rs @@ -104,6 +104,7 @@ fn siege_victory_cast_during_resolution_enters_transformed() { casting_restrictions: Vec::new(), casting_options: Vec::new(), layout_kind: None, + parse_warnings: vec![], }); } diff --git a/crates/engine/tests/integration/shorten_efficacy.rs b/crates/engine/tests/integration/shorten_efficacy.rs index 105db467cf..005a18a9de 100644 --- a/crates/engine/tests/integration/shorten_efficacy.rs +++ b/crates/engine/tests/integration/shorten_efficacy.rs @@ -42,7 +42,7 @@ use engine::game::engine::apply; use engine::game::scenario::{GameRunner, GameScenario}; use engine::types::ability::{AbilityDefinition, AbilityKind, Effect, QuantityExpr, TargetFilter}; use engine::types::actions::{GameAction, PrecastCopyShortcutResponse}; -use engine::types::card_type::CoreType; +use engine::types::card_type::{CoreType, Supertype}; use engine::types::game_state::{GameState, LayersDirty, LoopDetectionMode, WaitingFor}; use engine::types::identifiers::{CardId, ObjectId}; use engine::types::mana::{ManaColor, ManaCost, ManaCostShard}; @@ -1424,6 +1424,30 @@ const CROP_ROTATION: &str = "As an additional cost to cast this spell, sacrifice const RAMPANT_GROWTH: &str = "Search your library for a basic land card, put that card onto \ the battlefield tapped, then shuffle."; +/// Reshape the Earth, verbatim. CARD PROVENANCE — Oracle text verified on +/// Scryfall (`/cards/named?exact=Reshape+the+Earth`), a Sorcery whose whole +/// printed text is this one sentence. +/// +/// Rampant Growth's UNRESTRICTED sibling, and the second one-word-apart pair in +/// this file: identical AST on every axis this classifier reads — no cost, one +/// ability, `SearchLibrary` over `ChangeZone { Library -> Battlefield, target: +/// Any, enter_tapped: Tapped }` over `Shuffle { Controller }`, no triggers, no +/// statics, no replacements, no keywords — and the search filter is +/// `Typed[Land]` where Rampant Growth's is `Typed[Land] + HasSupertype(Basic)`. +/// So the only thing that can separate their verdicts is WHICH CARDS THE ACTOR +/// COULD SELECT. +/// +/// Elvish Reclaimer is the card the review named for this row and it CANNOT +/// serve, which is worth stating rather than leaving as an unexplained +/// substitution. Its ability costs "Sacrifice a land" — parsed +/// `AbilityCost::Sacrifice(Typed[Land])` with `controller: null` — and +/// `filter_is_actor_owned` proves nothing about an unqualified `Typed`, so +/// `cost_window_reach` already answers `MayInterfere` for it. It reads +/// `Shorten` with the selection gate and `Shorten` without it: an +/// over-determined row that would go green while measuring nothing. +const RESHAPE_THE_EARTH: &str = "Search your library for up to ten land cards, put them onto \ + the battlefield tapped, then shuffle."; + /// Stage a real card with its abilities taken from the REAL parser, not /// hand-built: every verdict below is a function of the AST, so a hand-written /// `AbilityDefinition` would let this section pass against a shape the pipeline @@ -2748,22 +2772,23 @@ fn give_graveyard_creature(state: &mut GameState, player: PlayerId) -> ObjectId /// V10d — a TAPPED battlefield entry from a GRAVEYARD keeps the seat's window; /// the tapped LIBRARY sibling still Accepts. /// -/// `v10c` closed the tap axis on a library fetch. This row closes the residual -/// one axis over: `effect_window_reach`'s `ChangeZone` arm allowlisted a tapped -/// battlefield entry from ANY origin, and the argument that made that safe — -/// stated in `any_action_may_interfere`'s doc — is an argument about a card that -/// is still IN THE LIBRARY: an unchosen member of a hidden zone (CR 400.2), which -/// neither the per-action fold nor the board scan has an object to read. -/// -/// That argument does not transfer to a graveyard. The returned card IS in -/// `state.objects`, its trigger/replacement/static definitions are readable, and -/// nothing reads them: `object_window_reach`'s `carries_unreadable_rules_content` -/// gate runs on the SOURCE (the Helping Hand), never on the card it returns, and +/// `v10c` closed the tap axis on a library fetch. This row closes the ORIGIN +/// axis: `effect_window_reach`'s `ChangeZone` arm allowlisted a tapped +/// battlefield entry from ANY origin, so a graveyard recursion read as confined +/// while the card it returns IS in `state.objects` with readable +/// trigger/replacement/static definitions that nothing reads. +/// `object_window_reach`'s `carries_unreadable_rules_content` gate runs on the +/// SOURCE (the Helping Hand), never on the card it returns, and /// `board_observer_may_react` correctly answers "does not function" for a /// graveyard ETB (CR 113.6). So a Fleshbag-Marauder-class creature in the actor's /// own graveyard — "When this creature enters, each player sacrifices a creature /// of their choice" — arrives inside the very window the seat declined to keep. /// +/// The LIBRARY sibling below is not confined because its origin excuses it from +/// being read — v10e is the row that shows a library fetch reading `Shorten` on +/// this same board — but because `library_arrivals_are_inert` reads the cards +/// Rampant Growth could actually select and finds them vanilla. +/// /// **The pair varies exactly one object** on the flagship board, and both halves /// of that object are the SAME SHAPE on every axis but origin: two spells staged /// identically (`give_parsed_card`, instant, no printed cost), each heading a @@ -2883,9 +2908,10 @@ fn v10d_a_tapped_graveyard_return_keeps_its_window_and_the_library_sibling_accep assert_eq!( engine::ai_support::smart_shortcut_response(&accept_arm, P2), ShortcutResponse::Accept, - "the pair's negative arm: a tapped LIBRARY fetch stays confined — the card it puts onto \ - the battlefield is an unchosen member of a hidden zone (CR 400.2), so there is nothing \ - the fold skipped reading" + "the pair's negative arm: a tapped LIBRARY fetch stays confined — Rampant Growth searches \ + for a BASIC land and every basic in P2's recorded library is vanilla, so \ + `library_arrivals_are_inert` really did read the selectable set rather than skip it \ + (v10e is the row that varies that set)" ); assert_eq!( engine::ai_support::smart_shortcut_response(&shorten_arm, P2), @@ -2895,3 +2921,266 @@ fn v10d_a_tapped_graveyard_return_keeps_its_window_and_the_library_sibling_accep cannot discharge. The Helping Hand is the one object that differs" ); } + +/// V10e — a tapped LIBRARY fetch whose search can SELECT an interfering +/// permanent is not confined, and the two things that could be producing that +/// verdict are separated by two orthogonal one-variable controls. +/// +/// The hole this closes was argued, not overlooked. Every earlier revision of +/// `effect_window_reach`'s `ChangeZone` arm discharged the arriving card with a +/// hidden-zone argument: CR 400.2 makes a library hidden, the card is an unchosen +/// member of it, so "the seam is handed a `GameState` and a list of +/// `GameAction`s, and the card is the subject of neither". CR 701.23a is the rule +/// that refutes it — "To search for a card in a zone, look at all cards in that +/// zone (even if it's a hidden zone) and find a card that matches the given +/// description" — and MEASURED on THIS fixture at THIS poll, all 91 cards of P2's +/// library resolve in `state.objects` with full parsed rules content. Hidden +/// means the opponents cannot see it. The searcher picks whichever member they +/// like. +/// +/// **`board_observer_may_react` cannot cover this**, and correctly so: CR 113.6, +/// through `trigger_definition_functions_in_zone`, answers "does not function" +/// for a card in a library. That scan asks which triggers function NOW; the +/// hazard is a trigger that functions once the search puts the card onto the +/// battlefield. +/// +/// **The witness is on the recorded board, not staged.** P2's own library holds +/// **Bojuka Bog** — "This land enters tapped. / When this land enters, exile +/// target player's graveyard. / {T}: Add {B}." (Oracle text verified on Scryfall) +/// — a LAND whose ETB exiles a graveyard belonging to somebody else. A seat that +/// Accepts while holding an unrestricted land fetch has declined a window in +/// which it could have made a live cross-player choice. +/// +/// **Three arms, two orthogonal controls, one variable each.** +/// * `SHORTEN` — Reshape the Earth (`Typed[Land]`) on the recorded library. +/// * `ACCEPT_BY_FILTER` — Rampant Growth (`Typed[Land] + Basic`) on the SAME +/// library. Holds the board fixed and varies the printed search filter, so the +/// gate is shown to read the filter and not merely "some land fetch exists". +/// * `ACCEPT_BY_LIBRARY` — Reshape the Earth again, with the non-inert LANDS +/// removed from P2's library. Holds the card fixed and varies the deck, which +/// is the axis the gate actually claims to read. This is the arm that +/// distinguishes the implemented gate from a filter-text heuristic: a +/// `Basic`-means-safe shortcut passes `ACCEPT_BY_FILTER` and fails here. +/// +/// MUTANT (executed): delete the `library_arrivals_are_inert` conjunct from +/// `object_window_reach` ⇒ the `SHORTEN` arm flips to `Accept`. The two ACCEPT +/// arms are unaffected by that mutation by construction — their selectable sets +/// are already inert, so the deleted conjunct was true in both. +#[test] +fn v10e_an_unrestricted_land_fetch_that_can_select_bojuka_bog_keeps_its_window() { + let mut board = live_path_board(); + drive_to_offer(&mut board, 400).expect("CR 732.2a: the offer must fire on this real 4p drain"); + let polled = declare_and_poll(&board, P2); + + // ── PREMISE, read off the recorded library rather than assumed ── + let library: Vec = polled + .players + .iter() + .find(|p| p.id == P2) + .expect("P2 is seated on this dump") + .library + .iter() + .copied() + .collect(); + assert!( + library.len() > 20, + "PREMISE: P2 must have a real recorded library for the selection set to mean anything; \ + got {}", + library.len() + ); + let resolved = library + .iter() + .filter(|id| polled.objects.contains_key(id)) + .count(); + assert_eq!( + resolved, + library.len(), + "PREMISE, and the refutation of the hidden-zone argument this row exists to retire: every \ + library card must resolve in `state.objects` at the decision point. If this ever fails, \ + the gate has nothing to read and the row measures nothing" + ); + + let named = |state: &GameState, id: &ObjectId| { + state + .objects + .get(id) + .map(|o| o.name.clone()) + .unwrap_or_default() + }; + // A land the gate must reject, and the basics it must accept — both real + // members of this deck. + let bog = library + .iter() + .copied() + .find(|id| named(&polled, id) == "Bojuka Bog") + .expect("PREMISE: the recorded library must contain Bojuka Bog — it IS the hazard"); + let bog_obj = polled.objects.get(&bog).expect("just found"); + assert!( + !bog_obj.trigger_definitions.is_empty(), + "PREMISE: Bojuka Bog must carry its ETB trigger, or it is not the card this row names" + ); + assert!( + bog_obj.card_types.core_types.contains(&CoreType::Land), + "PREMISE: it must be a LAND, or an unrestricted land search cannot select it" + ); + assert!( + !bog_obj.card_types.supertypes.contains(&Supertype::Basic), + "PREMISE: it must NOT be basic, or the ACCEPT_BY_FILTER control below cannot be a control" + ); + let basics: Vec = library + .iter() + .copied() + .filter(|id| { + polled.objects[id] + .card_types + .supertypes + .contains(&Supertype::Basic) + }) + .collect(); + assert!( + !basics.is_empty(), + "PREMISE: ACCEPT_BY_FILTER needs a NON-EMPTY basic-land match set — an empty match set is \ + the one case `library_arrivals_are_inert` deliberately fails closed on, so it would \ + produce the wrong verdict for the wrong reason" + ); + for id in &basics { + let o = &polled.objects[id]; + assert!( + o.trigger_definitions.is_empty() + && o.replacement_definitions.is_empty() + && o.static_definitions.is_empty() + && o.keywords.is_empty(), + "PREMISE: every basic in this deck must be vanilla, or ACCEPT_BY_FILTER would be \ + asserting the wrong direction; {} is not", + o.name + ); + } + + // ── the three arms ── + let mut shorten_arm = polled.clone(); + let reshape_shorten = give_parsed_card( + &mut shorten_arm, + P2, + "Reshape the Earth", + RESHAPE_THE_EARTH, + CoreType::Instant, + Zone::Hand, + ); + + let mut accept_by_filter = polled.clone(); + let growth = give_rampant_growth(&mut accept_by_filter, P2); + + // Vary the DECK, not the card: strip every library land the gate would + // reject, leaving a pool whose land members are all vanilla. + let mut accept_by_library = polled.clone(); + let stripped = strip_non_inert_library_lands(&mut accept_by_library, P2); + assert!( + stripped.contains(&bog), + "the ACCEPT_BY_LIBRARY arm must actually remove the hazard, or it is the SHORTEN arm with \ + extra steps; removed {stripped:?}" + ); + let reshape_accept = give_parsed_card( + &mut accept_by_library, + P2, + "Reshape the Earth", + RESHAPE_THE_EARTH, + CoreType::Instant, + Zone::Hand, + ); + + // ── reach-guards: each arm's staged spell must really be castable here, and + // each arm must be the flagship action set PLUS exactly that one cast ── + for (label, arm, staged) in [ + ("SHORTEN", &shorten_arm, reshape_shorten), + ("ACCEPT_BY_FILTER", &accept_by_filter, growth), + ("ACCEPT_BY_LIBRARY", &accept_by_library, reshape_accept), + ] { + assert!( + stage_one_meaningful(arm, P2), + "reach-guard ({label}): stage 1 must return true, or the seat answers at stage 1 and \ + the fold under test never runs" + ); + let non_pass = non_pass_actions(arm, P2); + assert_eq!( + non_pass.len(), + 2, + "ATTRIBUTION ({label}): the arm must be the flagship fetchland PLUS the one staged \ + cast, and nothing else; got {non_pass:?}" + ); + assert!( + non_pass + .iter() + .any(|a| a.starts_with(&format!("CastSpell {{ object_id: {staged:?},"))), + "reach-guard ({label}): the staged spell must be castable at this window; got \ + {non_pass:?}" + ); + assert!( + non_pass.iter().any(|a| a.contains("Terramorphic Expanse") + && a.contains("zone=Some(Battlefield)") + && a.contains("controller=Some(PlayerId(2))")), + "ATTRIBUTION ({label}): the other action must be P2's OWN battlefield fetchland, so \ + all three arms share it; got {non_pass:?}" + ); + } + + assert_eq!( + engine::ai_support::smart_shortcut_response(&shorten_arm, P2), + ShortcutResponse::Shorten { at_iteration: 0 }, + "CR 701.23a: an unrestricted land search LOOKS AT ALL CARDS in the library, and this one \ + contains Bojuka Bog, whose ETB exiles a graveyard P2 does not own. Accepting here \ + declines a window holding a live cross-player choice" + ); + assert_eq!( + engine::ai_support::smart_shortcut_response(&accept_by_filter, P2), + ShortcutResponse::Accept, + "CONTROL 1 (filter varies, deck held): a basic-land search on this same library can select \ + only vanilla Plains and Swamps, so the gate is a distinction and not a blanket flip" + ); + assert_eq!( + engine::ai_support::smart_shortcut_response(&accept_by_library, P2), + ShortcutResponse::Accept, + "CONTROL 2 (deck varies, card held): the SAME unrestricted search is confined once every \ + land it could select is vanilla. This is what proves the gate reads the library rather \ + than the printed word 'basic'" + ); +} + +/// Remove from `player`'s library every LAND that carries rules content +/// `shortcut_efficacy`'s gate cannot classify, and return what was removed. +/// +/// Lands only, deliberately: the search under test selects lands, so stripping +/// the rest would vary more than the arm claims to. The predicate mirrors the +/// public half of `carries_unreadable_rules_content` — if the two ever disagree +/// the ACCEPT arm reds rather than passing quietly, because a survivor the gate +/// still rejects keeps the verdict at `Shorten`. +fn strip_non_inert_library_lands(state: &mut GameState, player: PlayerId) -> Vec { + let doomed: Vec = state + .players + .iter() + .find(|p| p.id == player) + .expect("player is seated") + .library + .iter() + .copied() + .filter(|id| { + state.objects.get(id).is_some_and(|o| { + o.card_types.core_types.contains(&CoreType::Land) + && (!o.trigger_definitions.is_empty() + || !o.replacement_definitions.is_empty() + || !o.static_definitions.is_empty() + || !o.keywords.is_empty()) + }) + }) + .collect(); + for id in &doomed { + state.objects.remove(id); + } + let library = &mut state + .players + .iter_mut() + .find(|p| p.id == player) + .expect("player is seated") + .library; + library.retain(|id| !doomed.contains(id)); + doomed +} diff --git a/crates/engine/tests/integration/specialize_runtime.rs b/crates/engine/tests/integration/specialize_runtime.rs index a2151b0f8a..52e88f5efb 100644 --- a/crates/engine/tests/integration/specialize_runtime.rs +++ b/crates/engine/tests/integration/specialize_runtime.rs @@ -41,6 +41,7 @@ fn specialize_back(name: &str, color: ManaColor, shard: ManaCostShard) -> BackFa casting_restrictions: vec![], casting_options: vec![], layout_kind: None, + parse_warnings: vec![], } } diff --git a/crates/engine/tests/integration/std_s07_batch5b.rs b/crates/engine/tests/integration/std_s07_batch5b.rs index 8546922e4f..c49871ebf4 100644 --- a/crates/engine/tests/integration/std_s07_batch5b.rs +++ b/crates/engine/tests/integration/std_s07_batch5b.rs @@ -119,6 +119,7 @@ fn add_aang_dfc(state: &mut GameState) -> ObjectId { casting_restrictions: vec![], casting_options: vec![], layout_kind: None, + parse_warnings: vec![], }); id } diff --git a/crates/engine/tests/integration/stolen_goodies_zero_targets.rs b/crates/engine/tests/integration/stolen_goodies_zero_targets.rs index 38d4c24e0e..c00eff8605 100644 --- a/crates/engine/tests/integration/stolen_goodies_zero_targets.rs +++ b/crates/engine/tests/integration/stolen_goodies_zero_targets.rs @@ -80,6 +80,7 @@ fn stolen_goodies_can_be_cast_with_no_targets() { casting_restrictions: vec![], casting_options: vec![], layout_kind: None, + parse_warnings: vec![], }); let pool = &mut runner.state_mut().players[P0.0 as usize].mana_pool; diff --git a/crates/engine/tests/integration/tamiyo_inquisitive_student_flip.rs b/crates/engine/tests/integration/tamiyo_inquisitive_student_flip.rs index a0d4f4be7d..898a6cb4ab 100644 --- a/crates/engine/tests/integration/tamiyo_inquisitive_student_flip.rs +++ b/crates/engine/tests/integration/tamiyo_inquisitive_student_flip.rs @@ -113,6 +113,7 @@ fn tamiyo_third_draw_returns_transformed_not_stranded_in_exile() { casting_restrictions: vec![], casting_options: vec![], layout_kind: None, + parse_warnings: vec![], }); // Precondition: Tamiyo is on the battlefield, front-face (not transformed). diff --git a/crates/engine/tests/integration/wedding_announcement_transform.rs b/crates/engine/tests/integration/wedding_announcement_transform.rs index ecc56c4735..70fc1b1efe 100644 --- a/crates/engine/tests/integration/wedding_announcement_transform.rs +++ b/crates/engine/tests/integration/wedding_announcement_transform.rs @@ -97,6 +97,7 @@ fn wedding_announcement_human_branch_transforms_and_applies_festivity_anthem() { casting_restrictions: vec![], casting_options: vec![], layout_kind: None, + parse_warnings: vec![], }); wedding }; From 0db0d6bc96d2822aeb60670145201b7c15d22ee9 Mon Sep 17 00:00:00 2001 From: matthewevans Date: Sun, 9 Aug 2026 23:05:45 -0700 Subject: [PATCH 13/13] test(PR-7101): preserve face diagnostics across transform --- crates/engine/src/game/transform.rs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/crates/engine/src/game/transform.rs b/crates/engine/src/game/transform.rs index 57111f0214..4ef44b7893 100644 --- a/crates/engine/src/game/transform.rs +++ b/crates/engine/src/game/transform.rs @@ -255,6 +255,7 @@ mod tests { use super::*; use crate::game::game_object::BackFaceData; use crate::game::zones::create_object; + use crate::parser::oracle_ir::diagnostic::OracleDiagnostic; use crate::types::card_type::{CardType, CoreType}; use crate::types::identifiers::CardId; use crate::types::keywords::Keyword; @@ -294,6 +295,11 @@ mod tests { obj.base_abilities = Arc::clone(&obj.abilities); obj.color = vec![ManaColor::Green]; obj.base_color = vec![ManaColor::Green]; + obj.parse_warnings = vec![OracleDiagnostic::IgnoredRemainder { + text: "front diagnostic".to_string(), + parser: "transform_test".to_string(), + line_index: 0, + }]; obj.back_face = Some(BackFaceData { name: "Werewolf Back".to_string(), @@ -327,7 +333,11 @@ mod tests { casting_restrictions: vec![], casting_options: vec![], layout_kind: None, - parse_warnings: vec![], + parse_warnings: vec![OracleDiagnostic::IgnoredRemainder { + text: "back diagnostic".to_string(), + parser: "transform_test".to_string(), + line_index: 0, + }], }); id @@ -352,6 +362,10 @@ mod tests { "BackAbility" ); assert_eq!(obj.color, vec![ManaColor::Green, ManaColor::Red]); + assert!(matches!( + obj.parse_warnings.as_slice(), + [OracleDiagnostic::IgnoredRemainder { text, .. }] if text == "back diagnostic" + )); assert!(state.layers_dirty.is_dirty()); assert_eq!(events.len(), 1); assert_eq!(events[0], GameEvent::Transformed { object_id: id }); @@ -369,6 +383,10 @@ mod tests { let obj = &state.objects[&id]; assert!(!obj.transformed); assert_eq!(obj.name, "Werewolf Front"); + assert!(matches!( + obj.parse_warnings.as_slice(), + [OracleDiagnostic::IgnoredRemainder { text, .. }] if text == "front diagnostic" + )); assert_eq!(events.len(), 2); }

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