Skip to content

fix(engine): stop basic-land mana fallback from bypassing CantBeActivated - #6841

Merged
matthewevans merged 6 commits into
phase-rs:mainfrom
claytonlin1110:ship/karn-liquimetal-coating-mana-fallback
Jul 31, 2026
Merged

fix(engine): stop basic-land mana fallback from bypassing CantBeActivated#6841
matthewevans merged 6 commits into
phase-rs:mainfrom
claytonlin1110:ship/karn-liquimetal-coating-mana-fallback

Conversation

@claytonlin1110

@claytonlin1110 claytonlin1110 commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes #6469 — Karn, the Great Creator failed to block an opponent's activated ability on a land that Liquimetal Coating had turned into an artifact.

  • Root cause: land_mana_options() (mana_sources.rs) fell back to unconditional, subtype-inferred mana production whenever scan_mana_abilities() returned no options — without checking why it was empty. The fallback exists for lands that carry a basic land type but no explicit Effect::Mana ability (e.g. Urborg/Blood-Moon-class grants). But it also fired when a real mana ability exists and was correctly filtered out by a legality gate (CantBeActivated, CantActivateDuring, an unsatisfied activation condition) — silently re-adding the land as a legal mana source and defeating the gate that just blocked it.
  • Karn's static (Activated abilities of artifacts your opponents control can't be activated.) correctly matched the Coating-turned-artifact land and correctly filtered its {T}: Add {G} ability out of scan_mana_abilities. The fallback then mistook that filtering for "no ability exists" and re-added the land anyway, letting the opponent still tap it for mana.
  • Fix: gate the fallback on the object genuinely carrying no Effect::Mana ability at all, so the Urborg/Blood-Moon case still works while a real, currently-prohibited ability stays prohibited.

I verified the parser/AST side is not at fault first: Karn's CantBeActivated { source_filter: Typed(Artifact, controller: Opponent) } filter parses and is stored correctly (confirmed against card-data.json), and a synthetic test driving the real GenericEffect → transient continuous effect → layer-4 AddType pipeline confirms the land's card_types are updated correctly before the block is checked. The actual defect is downstream in mana-source legal-action generation, not in parsing or the layer system.

Test plan

  • New regression test karn_blocks_liquimetal_coated_opponent_land — drives the real Effect::GenericEffectTransientContinuousEffectevaluate_layers pipeline (not hand-set card_types) to confirm Karn blocks a Coating-turned-artifact opponent land.
  • New regression test karn_blocks_liquimetal_coated_forest_from_legal_mana_actions — reproduces the actual bug via activatable_mana_actions_for_player (the real legal-action surface behind both the manual "tap for mana" UI and AI candidate generation) with a real Forest object (explicit {T}: Add {G} ability + Forest subtype); fails before the fix, passes after.
  • cargo test -p phase-engine --lib — full crate suite green (18064 passed) before rebasing onto latest upstream; re-verified green in the ship worktree against current upstream/main after cherry-pick.
  • cargo clippy -p phase-engine --lib --tests -- -D warnings — clean.
  • cargo fmt — clean.
  • Targeted suites re-checked for regressions on the legitimate fallback path: game::mana_sources (46 tests, incl. manual_fallback_land_action_* which exercise the genuine bare-subtype fallback), game::mana_abilities (130 tests), game::casting_costs (121 tests), urborg/karn/pithing_needle/cant_be_activated filters — all pass.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Bug Fixes

    • Corrected basic-land mana generation when explicit mana abilities are unavailable or activation restrictions apply.
    • Karn now correctly prevents prohibited opponent-controlled artifact lands from activating abilities or producing mana.
    • Excluded detained, phased-out, or untappable lands from legal mana actions.
    • Preserved normal mana generation for unrestricted basic-land subtypes.
  • Tests

    • Added regression coverage for transformed artifact lands, explicit and intrinsic mana abilities, activation restrictions, and unrestricted mana production.

…ated

land_mana_options() fell back to unconditional subtype-inferred mana
production whenever scan_mana_abilities() returned no options, without
checking whether that emptiness meant "no mana ability exists" or "a
real mana ability exists but was just filtered out by a legality gate."
Karn, the Great Creator correctly filtered a Liquimetal-Coating-turned-
artifact land's own {T}: Add ability out of scan_mana_abilities, but the
fallback then silently re-added it via bare subtype inference, letting
the opponent tap the blocked land for mana anyway (phase-rs#6469). Gate the
fallback on the object genuinely carrying no Effect::Mana ability at
all, so Urborg/Blood-Moon-class subtype-only production still works
while a real, currently-prohibited ability stays prohibited.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 899f23cd-a751-41fa-82f7-61647a00dfe1

📥 Commits

Reviewing files that changed from the base of the PR and between a9b986c and 670985d.

📒 Files selected for processing (2)
  • crates/engine/src/game/casting_tests.rs
  • crates/engine/src/game/mana_abilities.rs
🚧 Files skipped from review as they are similar to previous changes (2)
  • crates/engine/src/game/casting_tests.rs
  • crates/engine/src/game/mana_abilities.rs

📝 Walkthrough

Walkthrough

The change applies activation-prohibition checks to synthesized basic-land mana abilities. It preserves explicit ability handling and adds regression tests for Karn, artifact-coated lands, blocked Forest mana, and intrinsic land restrictions.

Changes

Karn intrinsic land-mana restriction

Layer / File(s) Summary
Apply restrictions to intrinsic land mana
crates/engine/src/game/mana_abilities.rs, crates/engine/src/game/mana_sources.rs
A synthetic basic-land mana ability now uses standard activation-prohibition checks. Fallback synthesis runs only when no explicit mana ability exists. Interactive paths reject prohibited intrinsic mana colors.
Verify Karn land restrictions
crates/engine/src/game/casting_tests.rs
Regression tests cover Liquimetal Coating, explicit artifact Forest mana, blocked intrinsic Forest mana, unrestricted intrinsic Forest mana, detained lands, phased-out lands, and CantTap restrictions.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

Sequence Diagram(s)

sequenceDiagram
  participant GameState
  participant ManaSources
  participant ManaAbilities
  participant ActivationChecks
  GameState->>ManaSources: request legal mana actions
  ManaSources->>ManaAbilities: evaluate synthesized land-mana ability
  ManaAbilities->>ActivationChecks: evaluate activation gates
  ActivationChecks-->>ManaSources: return activation legality
  ManaSources-->>GameState: include or exclude mana action
Loading

Suggested labels: needs-maintainer

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the fix for basic-land mana fallback bypassing activation restrictions.
Linked Issues check ✅ Passed The implementation and regression tests address issue #6469 by blocking Karn-prohibited abilities while preserving valid intrinsic land-mana fallback.
Out of Scope Changes check ✅ Passed The changes are limited to mana legality logic and regression tests directly related to issue #6469.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ast-grep (0.45.0)
crates/engine/src/game/casting_tests.rs

ast-grep timed out on this file


Comment @coderabbitai help to get the list of available commands.

@matthewevans matthewevans self-assigned this Jul 31, 2026
@matthewevans

matthewevans commented Jul 31, 2026

Copy link
Copy Markdown
Member

Parse changes introduced by this PR

✓ No card-parse changes detected.

@matthewevans matthewevans added the bug Bug fix label Jul 31, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@crates/engine/src/game/mana_sources.rs`:
- Around line 2351-2364: The CR annotation in
crates/engine/src/game/mana_sources.rs:2351-2364 must document both intrinsic
basic-land mana and the activation prohibition by adding CR 305.6 alongside CR
602.5. In crates/engine/src/game/casting_tests.rs:30960-30966, add CR 613.1d for
the layer-4 Artifact type change. In
crates/engine/src/game/casting_tests.rs:31059-31068, add CR 305.6 and CR 602.5
for intrinsic Forest mana and its activation prohibition; ensure each annotation
includes the rule description matching the behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 17cbc852-034b-410b-ace5-4bd485f17839

📥 Commits

Reviewing files that changed from the base of the PR and between 5a3a42a and 1bf194c.

📒 Files selected for processing (2)
  • crates/engine/src/game/casting_tests.rs
  • crates/engine/src/game/mana_sources.rs

Comment thread crates/engine/src/game/mana_sources.rs Outdated
@matthewevans

Copy link
Copy Markdown
Member

Maintainer follow-up on current head 7e230700912066ff98a470d4c949ca617fcf39f8: the CR 305.6 + CR 602.5 annotation fix is pushed, and the required CI suite has restarted. This PR remains triaged but is not yet approved or enqueued; approval and merge-queue enrollment will resume once this exact head's required checks succeed and its <!-- coverage-parse-diff --> artifact is current.

@matthewevans matthewevans left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changes requested — the subtype-only fallback still bypasses activation prohibitions.

🔴 Blocker

[HIGH] land_mana_options still emits a fallback mana action for a land with a basic land subtype, no explicit Effect::Mana, and a prohibition such as Karn's. Evidence: crates/engine/src/game/mana_sources.rs:2363 gates the fallback only on !has_explicit_mana_ability, then :2369 synthesizes the option without consulting CantBeActivated; docs/MagicCompRules.txt:1705 says the basic-land-type mana ability is intrinsic, and :2541 says a player cannot begin an activation prohibited from activation. Why it matters: a subtype-only artifact land (the Urborg/Blood Moon class this fallback explicitly preserves) remains a legal mana source under Karn even though its intrinsic {T}: Add ... ability is also an activated ability. The new Forest regression has an explicit Effect::Mana, so it exercises the new guard but cannot reach this remaining fallback branch. Suggested fix: apply the same activation-gate decision to the synthesized intrinsic fallback, then add a real legal-action regression with a bare subtype-only artifact land under the Karn prohibition alongside the existing positive bare-subtype fallback test.

Recommendation: request changes — preserve the ordinary bare-subtype fallback, but make its synthesized action obey the same prohibitions as every other activated mana ability.

@matthewevans matthewevans removed their assignment Jul 31, 2026
The first fix only closed the gap for a land carrying an explicit
Effect::Mana ability. A land with NO explicit ability at all - just a
basic land subtype, the genuine Urborg/Blood-Moon-class case the
fallback exists for - hits land_mana_options()'s bare-subtype branch
directly, bypassing scan_mana_abilities() entirely and any
CantBeActivated check with it. Per CR 305.6 that intrinsic "{T}: Add
[mana symbol]" ability is still an activated mana ability, so CR 602.5
prohibitions must block it exactly like a printed one.

Add mana_abilities::intrinsic_land_mana_ability_blocked, which builds a
minimal synthetic AbilityDefinition for the intrinsic ability and
delegates to the single-authority is_blocked_by_cant_be_activated /
is_blocked_by_cant_activate_during checks - never re-implements them.
Wire it into the fallback, gated on require_current_payability to match
how is_active_tap_mana_ability treats real abilities (the auto-tap
planning pass doesn't consult per-source legality gates for any mana
source, real or intrinsic).

Adds a regression test with a bare-subtype artifact land under Karn's
prohibition (the case the prior fix's Forest test couldn't reach, since
Forest carries an explicit ability) and a positive companion test
confirming the ordinary bare-subtype fallback still works with no
prohibition in play.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@claytonlin1110

Copy link
Copy Markdown
Contributor Author

Addressed — thanks for the catch, and for the direct CR 305.6 citation fixup.

The blocker was correct: the first commit only closed the gap for a land carrying an explicit Effect::Mana ability. A bare-subtype land (no AbilityDefinition at all — the genuine Urborg/Blood-Moon case the fallback exists for) hit land_mana_options's subtype-only branch directly, bypassing scan_mana_abilities and any CantBeActivated check with it. Per CR 305.6 that intrinsic {T}: Add [mana symbol] ability is still an activated mana ability, so CR 602.5 prohibitions have to apply to it too.

Fixed in the new commit: mana_abilities::intrinsic_land_mana_ability_blocked builds a minimal synthetic AbilityDefinition for the intrinsic ability and delegates to the same single-authority is_blocked_by_cant_be_activated / is_blocked_by_cant_activate_during checks a printed ability goes through — no separate logic to drift. Wired into the fallback, gated on require_current_payability to match how is_active_tap_mana_ability already treats real abilities.

Added karn_blocks_bare_subtype_artifact_land_from_legal_mana_actions (a bare-subtype artifact land under Karn's prohibition — the case the Forest test couldn't reach) plus bare_subtype_land_still_offers_mana_without_a_prohibition as a positive companion proving the ordinary fallback still works with no prohibition in play.

Full suite (18,109 tests), clippy, and fmt all clean.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@crates/engine/src/game/mana_abilities.rs`:
- Around line 1339-1362: Update intrinsic_land_mana_ability_blocked to route the
synthesized land-mana AbilityDefinition through the full activation-readiness
logic, including phased-out, detained, and untappable-source checks. Refactor
the shared readiness helper as needed to accept synthesized abilities while
preserving existing mana_ability_ready_without_simulation_gated behavior for the
planning path, and ensure mana_sources does not emit an option when readiness
fails.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: b54f0b8d-6e1d-441b-a1e2-8f5b01100a59

📥 Commits

Reviewing files that changed from the base of the PR and between 7e23070 and 9c4aab9.

📒 Files selected for processing (3)
  • crates/engine/src/game/casting_tests.rs
  • crates/engine/src/game/mana_abilities.rs
  • crates/engine/src/game/mana_sources.rs
🚧 Files skipped from review as they are similar to previous changes (1)
  • crates/engine/src/game/mana_sources.rs

Comment thread crates/engine/src/game/mana_abilities.rs Outdated
@matthewevans matthewevans self-assigned this Jul 31, 2026

@matthewevans matthewevans left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changes requested — the intrinsic land-mana fallback still bypasses shared readiness gates.

🔴 Blocker

[HIGH] intrinsic_land_mana_ability_blocked reimplements only two of the legal-action checks for the synthesized CR 305.6 ability. Evidence: crates/engine/src/game/mana_abilities.rs:1339-1362 constructs the synthetic {T}: Add ability and checks only is_blocked_by_cant_be_activated and is_blocked_by_cant_activate_during; the established readiness authority at crates/engine/src/game/mana_abilities.rs:1393-1478 additionally excludes phased-out and detained sources and {T} costs on object_cant_tap sources. activatable_land_mana_options_indexed_gated takes the interactive legal-action path with require_current_payability = true at crates/engine/src/game/mana_sources.rs:1324-1339, then emits the fallback option after this partial check at :2369-2403.

Why it matters: a bare-subtype land is a synthesized activated mana ability, so a phased-out, detained, or can't-become-tapped Forest can still be offered through activatable_mana_actions_for_player, even though the equivalent printed mana ability is excluded by the shared readiness authority. The current bare-Forest/Karn test correctly covers the prior CantBeActivated gap, but it does not exercise these sibling gates.

Suggested fix: route the synthetic ability through the same simulation-free readiness authority (refactoring that authority as needed to support a synthesized definition without inventing a parallel legality predicate), while preserving the deliberately different auto-tap planning path. Add real legal-action regressions for at least detained/phased-out and CantTap bare-subtype lands, plus a positive unaffected fallback case.

@matthewevans matthewevans removed their assignment Jul 31, 2026
… readiness authority

intrinsic_land_mana_ability_blocked reimplemented only two of the checks
a printed mana ability goes through (CantBeActivated,
CantActivateDuring), missing phased-out (CR 702.26b), detained
(CR 701.35a), and can't-tap (CR 701.26a + CR 508.1f) sources. A
bare-subtype land in any of those states was still offered as a legal
mana source, since the equivalent printed mana ability is excluded by
mana_ability_ready_without_simulation_gated but the synthesized
intrinsic ability was checked against a narrower, hand-picked subset.

That readiness authority takes an AbilityDefinition by reference and
never indexes obj.abilities, so a synthesized definition with no real
storage slot is exactly as valid an input as a printed one - no
refactor of the authority needed. Route the synthetic {T}: Add ability
through it directly instead of re-implementing any subset of its
checks, preserving the require_current_payability split that already
keeps the auto-tap planning path (which doesn't consult per-source
legality gates for any mana source, real or intrinsic) distinct from
the interactive legal-action path this whole family targets.

Adds three regression tests (detained, phased-out, can't-tap
bare-subtype lands, none of which need a CantBeActivated static to
demonstrate the gap) alongside the existing CantBeActivated and
positive-fallback coverage.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@claytonlin1110

Copy link
Copy Markdown
Contributor Author

Addressed — good catch, my two-check version was exactly the "parallel legality predicate" you flagged.

You were right that mana_ability_ready_without_simulation_gated already accepts an AbilityDefinition by reference and never indexes into obj.abilities, so no refactor of the authority was actually needed — the synthetic intrinsic ability is just as valid an input as a printed one. intrinsic_land_mana_ability_blocked now builds the synthetic {T}: Add [mana symbol] definition and routes it straight through that function (via the gated variant when gates is available, falling back to the ungated one otherwise), so it picks up phased-out, detained, zone, tapped/can't-tap, summoning sickness, CantBeActivated/CantActivateDuring, static activation restrictions, and mana-sub-cost payability in one call — no more hand-picked subset.

Added the three regressions you asked for: bare_subtype_land_detained_excluded_from_legal_mana_actions, bare_subtype_land_phased_out_excluded_from_legal_mana_actions, and bare_subtype_land_cant_tap_excluded_from_legal_mana_actions — none of them need a CantBeActivated static in play, since they're specifically exercising the sibling gates the previous version skipped. The existing bare-Forest/Karn test and the unaffected-fallback positive test are untouched.

Full suite (18,112 tests), clippy, and fmt all clean.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@crates/engine/src/game/casting_tests.rs`:
- Around line 31296-31298: Update the rules annotation above the CantTap test to
remove CR 508.1f and cite the verified rules covering the tap symbol, ability
activation, unpayable costs, activation prohibitions, and intrinsic basic-land
abilities, including CR 305.6 and CR 602.5. Keep the annotation limited to rules
that directly describe why a permanent unable to become tapped cannot pay the
intrinsic {T} activation cost.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: e68bd082-1a9a-4822-8b86-da42aa3224df

📥 Commits

Reviewing files that changed from the base of the PR and between 9c4aab9 and a9b986c.

📒 Files selected for processing (3)
  • crates/engine/src/game/casting_tests.rs
  • crates/engine/src/game/mana_abilities.rs
  • crates/engine/src/game/mana_sources.rs
🚧 Files skipped from review as they are similar to previous changes (2)
  • crates/engine/src/game/mana_sources.rs
  • crates/engine/src/game/mana_abilities.rs

Comment thread crates/engine/src/game/casting_tests.rs Outdated
Comment on lines +31296 to +31298
// CR 701.26a + CR 508.1f + CR 305.6: a permanent that can't become tapped
// can't pay a {T} activation cost — including a bare-subtype land's
// intrinsic {T}: Add mana ability.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Correct the CantTap rules annotation.

Line 31296 cites CR 508.1f, but that rule describes tapping creatures as attackers. It does not describe paying an activation cost. (media.wizards.com)

For this test, cite the rules for the tap symbol, ability activation, unpayable costs, activation prohibitions, and intrinsic basic-land abilities instead. (media.wizards.com)

Proposed annotation fix
-    // CR 701.26a + CR 508.1f + CR 305.6: a permanent that can't become tapped
+    // CR 107.5 + CR 602.2b + CR 602.5 + CR 601.2h + CR 305.6: a permanent that can't become tapped

As per path instructions, rules-touching code requires verified CR annotations, including CR 305.6 and CR 602.5, and each cited rule must describe the annotated behavior.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
// CR 701.26a + CR 508.1f + CR 305.6: a permanent that can't become tapped
// can't pay a {T} activation cost — including a bare-subtype land's
// intrinsic {T}: Add mana ability.
// CR 107.5 + CR 602.2b + CR 602.5 + CR 601.2h + CR 305.6: a permanent that can't become tapped
// can't pay a {T} activation cost — including a bare-subtype land's
// intrinsic {T}: Add mana ability.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/engine/src/game/casting_tests.rs` around lines 31296 - 31298, Update
the rules annotation above the CantTap test to remove CR 508.1f and cite the
verified rules covering the tap symbol, ability activation, unpayable costs,
activation prohibitions, and intrinsic basic-land abilities, including CR 305.6
and CR 602.5. Keep the annotation limited to rules that directly describe why a
permanent unable to become tapped cannot pay the intrinsic {T} activation cost.

Source: Path instructions

@matthewevans matthewevans self-assigned this Jul 31, 2026
@matthewevans

Copy link
Copy Markdown
Member

Maintainer fixup on current head 670985d289199fddf2ed484cf8391ee59c964df9: corrected the new CantTap activation-cost annotations to cite the applicable rules — CR 101.2 (a “can’t” effect wins), CR 107.5 (the tap symbol in an activation cost), CR 601.2h (unpayable costs cannot be paid), CR 602.2b (activated abilities follow that cost-payment process), and CR 305.6 for the intrinsic basic-land mana ability. The prior CR 508.1f citation describes tapping attackers and was not an activation-cost rule.

The behavioral readiness fix and its detained, phased-out, and CantTap legal-action regressions remain unchanged. cargo fmt --all, the repository pre-commit parser gates, and git diff --check pass locally; required CI has restarted for this exact head. This PR is not approved or enqueued until the current-head checks and parse-diff artifact are green/current.

@matthewevans matthewevans left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved: intrinsic basic-land mana now uses the existing full readiness authority, preserving the legal fallback while enforcing activation gates. Current-head CI, parse-diff, and independent review are clean.

@matthewevans
matthewevans added this pull request to the merge queue Jul 31, 2026
@matthewevans matthewevans removed their assignment Jul 31, 2026
Merged via the queue into phase-rs:main with commit 7323622 Jul 31, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Bug fix

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Karn, the Great Creator — My opponent can activate abilities of lands I have targeted with Liquimetal Coating when I ha…

2 participants