Summary
A quoted ability grant of a replacement-shaped effect — e.g. it gains "If this creature would leave the battlefield, exile it instead of putting it anywhere else" — currently parses to an inert ContinuousModification::GrantAbility. The concretized ability body is pushed into obj.abilities (crates/engine/src/game/layers.rs), never into replacement_definitions, so the replacement never fires — the redirect is silently a no-op. Affected entries also carry a SwallowedClause / Replacement_Instead parse warning.
Surfaced during review of #6538 (unearth's standalone leave-battlefield exile rider); the granted variant is a distinct, pre-existing gap and was correctly held out of that PR.
Affected cards (5 — verified against card-data.json)
Exactly the cards that carry the Replacement_Instead warning and an inert GrantAbility for this rider:
- Elemental Expressionist — grants it until end of turn (must lapse at cleanup, CR 611.2a / 514.2).
- Geth, Thane of Contracts — permanent grant on a reanimation ability. (Correction: my initial draft named "Geth, Lord of the Vault" — that printing has no such rider; the matching card is Thane of Contracts.)
- Llanowar Greenwidow — permanent (also has a separate unimplemented cost-reduction clause, out of scope).
- Realmbreaker, the Invasion Tree — permanent.
- Spirit-Sister's Call — permanent.
Out of scope / separate gaps
- Magar of the Magic Strings and The Eighth Doctor — their whole granting clause is
Effect::Unimplemented (a face-down-manifest body / a play-from-graveyard permission), so they never reach the GrantAbility seam; separate parser gaps.
- Geth, Lord of the Vault — no such rider on its current printing.
Expected
A quoted grant of a replacement-shaped ability should install a granted, duration-bound replacement effect that (a) redirects the event while active, and (b) honors the grant's stated duration (lapses at cleanup for until end of turn; persists for permanent grants — CR 611.2a) via the layer system, not the object-lifetime host stamp used for standalone reanimation riders (#6538).
Seam
oracle_static::classify_quoted_inner must recognize a quoted replacement clause and route it to a granted ReplacementDefinition (a new ContinuousModification::GrantReplacement) re-applied each layer pass (CR 613.1f), rather than collapsing it to an inert GrantAbility. Runtime install: the Layer-6 apply in layers.rs.
Repro (Elemental Expressionist): grant the rider to a creature, then destroy/sacrifice it within the turn → it should be exiled, not sent to the graveyard; after cleanup the rider should be gone.
Summary
A quoted ability grant of a replacement-shaped effect — e.g.
it gains "If this creature would leave the battlefield, exile it instead of putting it anywhere else"— currently parses to an inertContinuousModification::GrantAbility. The concretized ability body is pushed intoobj.abilities(crates/engine/src/game/layers.rs), never intoreplacement_definitions, so the replacement never fires — the redirect is silently a no-op. Affected entries also carry aSwallowedClause/Replacement_Insteadparse warning.Surfaced during review of #6538 (unearth's standalone leave-battlefield exile rider); the granted variant is a distinct, pre-existing gap and was correctly held out of that PR.
Affected cards (5 — verified against
card-data.json)Exactly the cards that carry the
Replacement_Insteadwarning and an inertGrantAbilityfor this rider:Out of scope / separate gaps
Effect::Unimplemented(a face-down-manifest body / a play-from-graveyard permission), so they never reach theGrantAbilityseam; separate parser gaps.Expected
A quoted grant of a replacement-shaped ability should install a granted, duration-bound replacement effect that (a) redirects the event while active, and (b) honors the grant's stated duration (lapses at cleanup for
until end of turn; persists for permanent grants — CR 611.2a) via the layer system, not the object-lifetime host stamp used for standalone reanimation riders (#6538).Seam
oracle_static::classify_quoted_innermust recognize a quoted replacement clause and route it to a grantedReplacementDefinition(a newContinuousModification::GrantReplacement) re-applied each layer pass (CR 613.1f), rather than collapsing it to an inertGrantAbility. Runtime install: the Layer-6 apply inlayers.rs.Repro (Elemental Expressionist): grant the rider to a creature, then destroy/sacrifice it within the turn → it should be exiled, not sent to the graveyard; after cleanup the rider should be gone.