Description
A family of Commander cards create tokens and then goad them for an extended duration — The War Games, Life of the Party, Rendmaw, Creaking Nest:
"Each player creates three tapped 1/1 white Warrior creature tokens. The tokens are goaded for as long as this Saga remains on the battlefield." (The War Games)
"… each opponent creates a token … The tokens are goaded for the rest of the game." (Life of the Party, Rendmaw)
The create-tokens effect parses, but the "The tokens are goaded …" continuation is dropped (an Effect:the gap), so the created tokens are never goaded — the cards' whole political payoff is lost.
This is a narrow parser gap. Goad is otherwise well-supported:
Effect::Goad / Effect::GoadAll handle imperative "goad target creature" / "goad each creature".
StaticMode::Goaded exists, and the static parser already maps both "is goaded" and "are goaded" to it (oracle_static/evasion.rs).
- The singular continuation "The token is goaded for the rest of the game" is supported (Nettling Nuisance).
But after a CreateToken effect, the plural "The tokens are goaded [duration]" continuation reaches the effect parser (where "The …" has no handler → Effect:the) instead of being recognized as a goaded grant on the just-created tokens.
Steps to reproduce
- Parse Life of the Party / The War Games (the create-tokens line + "The tokens are goaded …").
- Inspect the parse: the "The tokens are goaded …" clause is an
Effect:the gap; the created tokens carry no goaded state.
- In play, the tokens are created but not goaded.
- Contrast: Nettling Nuisance's singular "The token is goaded for the rest of the game" is supported.
Expected behavior (CR 701.15a/b)
"The tokens are goaded [for the rest of the game / for as long as ~ remains on the battlefield / until your next turn]" makes each just-created token goaded for the stated duration: it attacks each combat if able and must attack a player other than its controller.
Implementation (recognize the goaded continuation on created tokens — reuse StaticMode::Goaded)
parser/oracle_effect/sequence.rs (continuation dispatch, near parse_becomes_plotted_continuation) — add a continuation that matches "the token(s) (is|are) goaded [duration]" after a CreateToken effect and grants the goaded state to the tracked created-token set (TrackedSet / ParentTarget), mirroring how the singular form is handled and how other token-grant continuations attach.
- Model the duration via the existing
StaticMode::Goaded grant (CR 701.15b — "goaded for as long as the static applies"): "for the rest of the game" = a permanent goaded static on the tokens; "for as long as this Saga remains" = goaded tied to the source's presence; bare/"until your next turn" maps to the standard Effect::Goad duration. Scope the first pass to the "for the rest of the game" duration (Life of the Party, Rendmaw), which mirrors the already-supported singular Nettling Nuisance form; note "for as long as this Saga remains" (The War Games) as a follow-up if the Saga-scoped duration needs extra wiring.
- Tests — build-the-class: "create … tokens. The tokens are goaded for the rest of the game." grants the goaded static to the tracked created-token set; the singular "The token is goaded …" still parses (no regression); a full-card parse of Life of the Party no longer reports the
Effect:the gap. Verify the coverage-honesty gate locally (no new swallowed-clause) before pushing.
Component
crates/engine/src/parser/oracle_effect/sequence.rs — no continuation arm for the plural "the tokens are goaded …" after CreateToken (falls to Effect:the).
- (Reuse)
crates/engine/src/parser/oracle_static/evasion.rs ("are goaded" → StaticMode::Goaded), StaticMode::Goaded, Effect::Goad.
CR 701.15a/b (Goad). Verified gap: The War Games / Life of the Party / Rendmaw carry this clause and are blocked on it (Effect:the) in current coverage-data.json, while the singular "The token is goaded for the rest of the game" (Nettling Nuisance) is supported.
Description
A family of Commander cards create tokens and then goad them for an extended duration — The War Games, Life of the Party, Rendmaw, Creaking Nest:
The create-tokens effect parses, but the "The tokens are goaded …" continuation is dropped (an
Effect:thegap), so the created tokens are never goaded — the cards' whole political payoff is lost.This is a narrow parser gap. Goad is otherwise well-supported:
Effect::Goad/Effect::GoadAllhandle imperative "goad target creature" / "goad each creature".StaticMode::Goadedexists, and the static parser already maps both "is goaded" and "are goaded" to it (oracle_static/evasion.rs).But after a
CreateTokeneffect, the plural "The tokens are goaded [duration]" continuation reaches the effect parser (where "The …" has no handler →Effect:the) instead of being recognized as a goaded grant on the just-created tokens.Steps to reproduce
Effect:thegap; the created tokens carry no goaded state.Expected behavior (CR 701.15a/b)
"The tokens are goaded [for the rest of the game / for as long as ~ remains on the battlefield / until your next turn]" makes each just-created token goaded for the stated duration: it attacks each combat if able and must attack a player other than its controller.
Implementation (recognize the goaded continuation on created tokens — reuse
StaticMode::Goaded)parser/oracle_effect/sequence.rs(continuation dispatch, nearparse_becomes_plotted_continuation) — add a continuation that matches "the token(s) (is|are) goaded [duration]" after aCreateTokeneffect and grants the goaded state to the tracked created-token set (TrackedSet/ParentTarget), mirroring how the singular form is handled and how other token-grant continuations attach.StaticMode::Goadedgrant (CR 701.15b — "goaded for as long as the static applies"): "for the rest of the game" = a permanent goaded static on the tokens; "for as long as this Saga remains" = goaded tied to the source's presence; bare/"until your next turn" maps to the standardEffect::Goadduration. Scope the first pass to the "for the rest of the game" duration (Life of the Party, Rendmaw), which mirrors the already-supported singular Nettling Nuisance form; note "for as long as this Saga remains" (The War Games) as a follow-up if the Saga-scoped duration needs extra wiring.Effect:thegap. Verify the coverage-honesty gate locally (no new swallowed-clause) before pushing.Component
crates/engine/src/parser/oracle_effect/sequence.rs— no continuation arm for the plural "the tokens are goaded …" afterCreateToken(falls toEffect:the).crates/engine/src/parser/oracle_static/evasion.rs("are goaded"→StaticMode::Goaded),StaticMode::Goaded,Effect::Goad.CR 701.15a/b (Goad). Verified gap: The War Games / Life of the Party / Rendmaw carry this clause and are blocked on it (
Effect:the) in currentcoverage-data.json, while the singular "The token is goaded for the rest of the game" (Nettling Nuisance) is supported.