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)
Oracle text (verified from
client/public/card-data.json)Painful Truths:
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:
Draw { count: Ref(ObjectCount { filter: Typed { type_filters: [], properties: [] } }), target: Controller }LoseLife { amount: Ref(ObjectCount { filter: Typed { type_filters: [], properties: [] } }) }The
ObjectCountfilter is completely empty, which counts every object on the battlefield. With ~30 permanents, X resolves to 30. The expectedQuantityRefshould be a typedColorsOfManaSpentToCast(orConverge) 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)