Summary
When a chained ChangeZone names a zone belonging to the ability's controller ("from your graveyard") while a companion player target exists on the parent node, ability_utils::relative_controller_kind classifies that ControllerRef::You as a relative controller.
legal_targets_for_ability_filter then re-enumerates the slot against the companion player's candidates — the machinery behind "target player sacrifices a creature they control" — so it searches the opponent's graveyard, finds nothing, and activation fails with:
ActionNotAllowed("No legal targets available")
Reproduction
[[The Beamtown Bullies]] (#6496):
{T}: Target opponent whose turn it is puts target nonlegendary creature card from your graveyard onto the battlefield under their control. It gains haste. Goad it. At the beginning of the next end step, exile it.
Activate {T} on an opponent's turn with a nonlegendary creature card in your graveyard. The ability is not activatable.
Proven pre-existing
The identical Oracle text with the whose turn it is relative clause removed — which parses to the pre-#6496 Typed { controller: Opponent } shape — fails with the same error. So this is independent of the #6496 targeting work.
This is the actual root cause of the original "doesn't work at all" Discord report on #6496. Triage attributed the symptom to a controller inversion, but the card cannot be activated in the first place.
Pinned by
beamtown_activation_blocked_by_relative_your_graveyard_slot_known_gap in crates/engine/tests/integration/beamtown_bullies_active_opponent_target.rs (added in #6689).
Update that test when fixing — do not delete it. It carries three reach-guards proving the failure is the graveyard slot and not the player slot.
⚠️ Do not fix this in isolation
Beamtown's "under their control" binding is also unparsed (see the companion issue). Fixing only this gap makes the creature enter under the ability controller's control — you would goad a creature you now control, at yourself. That is a worse game state than the current "cannot activate".
Land both together. Also delete the Effect::unimplemented("enters_under_their_control", …) marker node in the same change, since inserting it currently makes the ChangeZone's immediate sub_link a ContinuationStep rather than a SequentialSibling.
Pointers
Summary
When a chained
ChangeZonenames a zone belonging to the ability's controller ("from your graveyard") while a companion player target exists on the parent node,ability_utils::relative_controller_kindclassifies thatControllerRef::Youas a relative controller.legal_targets_for_ability_filterthen re-enumerates the slot against the companion player's candidates — the machinery behind "target player sacrifices a creature they control" — so it searches the opponent's graveyard, finds nothing, and activation fails with:Reproduction
[[The Beamtown Bullies]] (#6496):
Activate
{T}on an opponent's turn with a nonlegendary creature card in your graveyard. The ability is not activatable.Proven pre-existing
The identical Oracle text with the
whose turn it isrelative clause removed — which parses to the pre-#6496Typed { controller: Opponent }shape — fails with the same error. So this is independent of the #6496 targeting work.This is the actual root cause of the original "doesn't work at all" Discord report on #6496. Triage attributed the symptom to a controller inversion, but the card cannot be activated in the first place.
Pinned by
beamtown_activation_blocked_by_relative_your_graveyard_slot_known_gapincrates/engine/tests/integration/beamtown_bullies_active_opponent_target.rs(added in #6689).Update that test when fixing — do not delete it. It carries three reach-guards proving the failure is the graveyard slot and not the player slot.
Beamtown's
"under their control"binding is also unparsed (see the companion issue). Fixing only this gap makes the creature enter under the ability controller's control — you would goad a creature you now control, at yourself. That is a worse game state than the current "cannot activate".Land both together. Also delete the
Effect::unimplemented("enters_under_their_control", …)marker node in the same change, since inserting it currently makes theChangeZone's immediatesub_linkaContinuationSteprather than aSequentialSibling.Pointers
crates/engine/src/game/ability_utils.rs—relative_controller_kind,legal_targets_for_ability_filter