Quick answer: Capture the deck list, full board state, and the recent sequence of cards played on every deckbuilder bug report. Card games fail in specific combinations from a combinatorial space you can never fully test, so the exact state and play order is what makes a combo bug reproducible.
Deckbuilders have a combinatorial explosion built into their design. With a few hundred cards, the number of possible interactions runs into the millions, and you will never test more than a sliver of them. The bugs that result, an infinite loop from two cards that feed each other, a trigger that fires in the wrong order, a cost that goes negative, always live in one specific combination. When a player hits it, you need the exact state and the sequence that produced it, because describing a five-card combo in prose is hopeless.
The combinatorial space is the problem
Every card you add multiplies the interactions with every other card. Two cards that are each correct in isolation can together produce a loop, a lock, or a rules violation that no single-card test would ever reveal. As your card pool grows, the space of untested interactions grows far faster than your ability to test it.
This means you cannot rely on pre-release testing to catch combo bugs, and you cannot ask players to describe them well, because the bug depends on the precise board state and order of play. The only reliable approach is to capture the full state and the recent play sequence automatically when a player reports something wrong, so you can replay the exact situation.
Capture the deck and board state
Start with the deck list and the complete board state at the moment of the bug: cards in hand, in play, in the discard, resources available, and any persistent effects or counters. This is the snapshot from which the bug emerged, and with it you can set up the exact position the player was in.
Persistent effects and stacked modifiers are especially important because they are invisible in a screenshot but central to many card bugs. A buff that double-applies, a counter that does not reset, a status that should have expired, these only make sense when you can see the full effect state, so serialize it into the report rather than relying on what is merely visible on screen.
Capture the sequence of plays
Board state alone is often not enough, because card bugs frequently depend on the order in which things happened. The same end state reached by two different play sequences can behave differently if your rules engine processes triggers in order. Capture the recent sequence of cards played and effects resolved so you can reconstruct not just where the player ended up but how they got there.
Order-of-resolution bugs are the classic deckbuilder defect: two triggers that both fire and the result depends on which resolves first. With the play sequence captured, you can see the exact order that produced the bug and check it against your intended resolution rules, which is usually where the discrepancy lives.
Infinite loops and soft locks
The most dramatic card bugs are infinite loops, where two or more cards trigger each other endlessly, and soft locks, where the game waits for an input that can never come. Loops can hang or crash the game, and a crash report with the board state tells you which cards were in play when it spun out, pointing straight at the offending pair.
Build loop detection into your rules engine where you can, capping repeated triggers and reporting when the cap is hit, with the involved cards attached. This both protects players from a hang and gives you a precise report of which combination caused it, turning a game-breaking loop into a labeled bug you can fix rather than a frozen screen the player rage-quits from.
Setting it up with Bugnet
Add an in-game report option and attach the deck list, board state, effect stack, and recent play sequence as custom fields and a serialized state blob. Bugnet stores them so any combo bug arrives with everything needed to recreate the exact situation, without the player having to explain a tangle of interacting cards in words.
Turn on automatic crash capture for the loops that crash rather than soft-lock, and group identical issues into occurrence counts. When several reports of the same broken interaction share a card pair, you have isolated the offending combo, and you can fix the rules, errata the card, or cap the loop, confident you understand exactly what was going wrong.
Reproduce from the captured state
The real payoff of capturing full state is a test setup that loads a reported situation directly. If you can take a captured board state and play sequence and replay it in a developer mode, you reproduce the bug on demand and verify your fix against the exact case the player hit, rather than approximating it from memory.
Over time, your captured combo bugs become a regression suite. Each broken interaction you fix gets added as a test that loads the offending state and asserts the correct outcome, so a combo you fixed in one patch cannot quietly return when you add new cards later. In a game defined by interactions, that regression coverage is what keeps the card pool from breaking itself as it grows.
In a deckbuilder the bug is always in the combo. Capture the deck, the board, and the order.