Skip to content

[Bug]: "The tokens are goaded [for the rest of the game / for as long as ~ remains]" is dropped after a create-tokens effect #3000

Description

@philluiz2323

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

  1. Parse Life of the Party / The War Games (the create-tokens line + "The tokens are goaded …").
  2. Inspect the parse: the "The tokens are goaded …" clause is an Effect:the gap; the created tokens carry no goaded state.
  3. In play, the tokens are created but not goaded.
  4. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions