Ok, I think I found the culprit... unfortunately, the culprit is the current deck persistence system, disabling it fixes both the ante bug and the starting cards/mulligan bug. I'll temporarily disable it, looks like I'll have to think some more about how to implement persistent sideboarding across duels... Any ideas?...
Also, I updated the check for minimum deck size requirements between duels in a match for Constructed and Quest, I hope I understand it right that a deck can become under 60 cards (for Constructed) or 40 cards (for Quest) in size in case you're playing for ante (at least until your next match, that is). So for now, the enforced limit during in-game sideboarding will be either the format-enforced minimum or the current number of cards in deck, whichever is smaller (but if the match ends with less cards than the format enforces, you won't be able to start a new game with that deck until you add more cards to it).
Here's something I'm not unsure about: In Sealed Deck and Draft modes, should the player be forced to restore his deck to at least 40 cards? (theoretically speaking it should be possible because the sideboard is always big, but I'm not sure if it should be done).
To summarize, here's what we currently lack that would have been highly useful:- Persistence of the main deck and sideboard across duels in a match (almost had a working implementation but it had a fatal flaw which pretty much warranted either reimplementation or at least serious rewrite).
- Sorting cards in the in-game sideboard editor (not sure how to implement, tried several things but all failed).
EDIT: I've experimented a bit more and ran into another extreme situation

I tried writing changes directly into the player's deck (the "deck" parameter of sideboardAndPrepareLibrary) and that kind of worked (at least the main deck and the sideboard are indeed persistent), but they are *too persistent* now (the last main/sideboard configuration stays across different matches - actually, as far as I can tell, until you restart Forge). Not sure if this will be a viable approach to implement it, but if it is, is there any way to reload/reinitialize the deck at every first duel of every match?..
EDIT: Grrr, just spent 6 hours in a row trying to do something with all this, and ended up with nothing that's actually working any better than the previous incarnations if I want persistence and sorting. Any help at all would be highly welcome, for now I'm giving up on it, at least for the day - I'm out of ideas how to make everything work together smoothly.
The current SVN state has a supposedly stable (unless there are any previously undiscovered bugs), but feature-incomplete implementation (but at least there's no "cards disappearing in round two/on mulligan" bug and the ante seems to work fine), but there's no sideboard configuration persistence and still no deck list sorting... Feel free to take a look at it and update if you have good ideas. My latest local implementation has "extreme persistence" (as described above), yet even if I find out how to fix the "extremeness" bit by reloading the deck, I'm not sure how to ensure that the card on ante was indeed removed between rounds in that case ('cause if I restore the original state of the deck from some persistent "memory", the card(s) lost on ante will most likely go right in once again, at least in Constructed which doesn't (supposedly?) store the lost cards on hard drive. And if I don't restore the state of the deck, then we have no persistence, which seems to be a catch 22 situation).
Your help is highly welcome.
- Agetian