π€ AI text below π€
Card(s)
Grub's Command (mode 4). Class-wide: any tracked-set ("β¦ this way") anaphor carrying a card-type restriction.
Build/version
Measured on main at 77e686cae, and confirmed pre-existing against a card-data corpus generated before that (see Evidence).
Game mode
Solo/goldfish
Actual behavior
The parser drops the card-type restriction from a tracked-set anaphor filter.
Oracle text (mode 4), verbatim:
Target player mills five cards, then puts each Goblin card milled this way into their hand.
Parsed AST for that mode's second instruction:
{ "type": "ChangeZone",
"target": { "type": "TrackedSetFiltered", "id": 0, "filter": { "type": "Any" } } }
filter is Any. The Goblin restriction is gone, so the instruction means "put each card milled this way into their hand" β all five milled cards, regardless of type.
Expected behavior
filter should restrict to the Goblin subtype, so only Goblin cards among the five milled are moved to hand (CR 608.2c β follow the instructions in the order written, applying the rules of English; the restrictive modifier "Goblin" is part of the instruction).
Evidence
1. It is pre-existing, not introduced by any in-flight parser work. A card-data corpus generated before the current parser changes (file mtime 2026-08-15 11:43, predating parser commit 3f7537e99 dated 2026-08-16) already contains:
[{"type":"TrackedSetFiltered","id":0,"filter":{"type":"Any"}}]
2. It is specific to the tracked-set filter, not a missing subtype. The string Goblin does parse elsewhere on this same card β mode 1 is "Create a token that's a copy of target Goblin you control" and retains its subtype filter. So the parser can represent the subtype; it drops it only when building the TrackedSetFiltered anaphor.
β οΈ Unmask ordering β please read before fixing the sibling defect
This bug is currently masked by a second, independent defect: a singular Effect::ChangeZone whose target is a tracked-set filter is inert at runtime. Measured on a real cast of this card, the milled cards produced zero ZoneChanged events and the hand stayed empty. Nothing moves today, so the dropped filter has no visible effect.
Consequence: fixing the inert singular-ChangeZone defect alone makes this bug live and strictly worse than the current behavior β instead of moving nothing, the card would move all five milled cards to hand instead of only the Goblins.
These two defects must be fixed together, or the filter fix must land first. A changelog entry reading "fixed ChangeZone with tracked-set targets" that ships without the filter fix would be a regression in play terms, even though it repairs a real defect.
Scope
Reported from the #6857 / #7484 lane (mode-scoped tracked-set handoff) but out of that PR's scope β that work changes which objects a tracked set publishes, not how a member filter is parsed. Filed separately rather than folded in.
Related: #7501 (add-engine-variant checklist gap), filed alongside this one.
π€ AI text below π€
Card(s)
Grub's Command (mode 4). Class-wide: any tracked-set ("β¦ this way") anaphor carrying a card-type restriction.
Build/version
Measured on
mainat77e686cae, and confirmed pre-existing against a card-data corpus generated before that (see Evidence).Game mode
Solo/goldfish
Actual behavior
The parser drops the card-type restriction from a tracked-set anaphor filter.
Oracle text (mode 4), verbatim:
Parsed AST for that mode's second instruction:
{ "type": "ChangeZone", "target": { "type": "TrackedSetFiltered", "id": 0, "filter": { "type": "Any" } } }filterisAny. TheGoblinrestriction is gone, so the instruction means "put each card milled this way into their hand" β all five milled cards, regardless of type.Expected behavior
filtershould restrict to theGoblinsubtype, so only Goblin cards among the five milled are moved to hand (CR 608.2c β follow the instructions in the order written, applying the rules of English; the restrictive modifier "Goblin" is part of the instruction).Evidence
1. It is pre-existing, not introduced by any in-flight parser work. A card-data corpus generated before the current parser changes (file mtime
2026-08-15 11:43, predating parser commit3f7537e99dated 2026-08-16) already contains:[{"type":"TrackedSetFiltered","id":0,"filter":{"type":"Any"}}]2. It is specific to the tracked-set filter, not a missing subtype. The string
Goblindoes parse elsewhere on this same card β mode 1 is "Create a token that's a copy of target Goblin you control" and retains its subtype filter. So the parser can represent the subtype; it drops it only when building theTrackedSetFilteredanaphor.This bug is currently masked by a second, independent defect: a singular
Effect::ChangeZonewhose target is a tracked-set filter is inert at runtime. Measured on a real cast of this card, the milled cards produced zeroZoneChangedevents and the hand stayed empty. Nothing moves today, so the dropped filter has no visible effect.Consequence: fixing the inert singular-
ChangeZonedefect alone makes this bug live and strictly worse than the current behavior β instead of moving nothing, the card would move all five milled cards to hand instead of only the Goblins.These two defects must be fixed together, or the filter fix must land first. A changelog entry reading "fixed
ChangeZonewith tracked-set targets" that ships without the filter fix would be a regression in play terms, even though it repairs a real defect.Scope
Reported from the #6857 / #7484 lane (mode-scoped tracked-set handoff) but out of that PR's scope β that work changes which objects a tracked set publishes, not how a member filter is parsed. Filed separately rather than folded in.
Related: #7501 (
add-engine-variantchecklist gap), filed alongside this one.