Skip to content

[Card Bug] Painful Truths — Converge X parsed as ObjectCount with empty filter (counts whole battlefield) #307

Description

@matthewevans

Oracle text (verified from client/public/card-data.json)

Painful Truths:

Converge — You draw X cards and lose X life, where X is the number of colors of mana spent to cast this spell.

Card(s)

Painful Truths (and the entire Converge family — Bring to Light, Radiant Flames, Cunning Strike, etc.)

Reported behavior

User reports AI cast Painful Truths and ended up drawing 30 cards / losing 30 life, freezing the AI as it tried to discard down. (Discord thread: Painful Truths bug, 2026-05-10)

Root cause (parser)

Painful Truths text: Converge — You draw X cards and lose X life, where X is the number of colors of mana spent to cast this spell.

Current parsed AST:

  • Effect: Draw { count: Ref(ObjectCount { filter: Typed { type_filters: [], properties: [] } }), target: Controller }
  • Sub-ability: LoseLife { amount: Ref(ObjectCount { filter: Typed { type_filters: [], properties: [] } }) }

The ObjectCount filter is completely empty, which counts every object on the battlefield. With ~30 permanents, X resolves to 30. The expected QuantityRef should be a typed ColorsOfManaSpentToCast (or Converge) ref that the engine resolves from the casting cost.

Class impact

Every Converge card in the database has the same broken AST. This is a single-class parser fix that unblocks ~25+ cards.

Source

Discord: https://discord.com/channels/1485498006781427802/ (thread: Painful Truths bug)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions