Every deal begins with a complete deck
Solitaire and the multiplayer card games construct their decks from explicit suit and rank lists. Automated tests verify the expected card count and confirm that every dealt card is unique.
That catches accidental duplicates, missing ranks, and dealing errors before they reach a live game.
The shuffle visits every position
The games use a Fisher–Yates style shuffle: starting at the end of the deck, each position swaps with a randomly chosen position at or before it. Every card participates, and the finished order is not built from a predictable sorting shortcut.
Solo games can use a seed so a deal can be recreated during tests. Multiplayer rooms create the game on the server so all players receive one authoritative deal.
Legal moves are checked as rules
The game engines do not rely only on the interface hiding illegal buttons. They calculate legal cards from the current state: following suit, unbroken hearts or spades, left-bower suit changes, valid Solitaire sequences, and exposed Pyramid cards.
A multiplayer action that does not match those rules is rejected by the room rather than accepted because a client requested it.
Tests use known situations
Automated rule tests create small, controlled positions: a left bower facing its printed suit, a Spades trick containing multiple trump cards, or a Hearts first trick with point cards. The expected winner or legal move is asserted directly.
Seeded random functions make deal tests repeatable. A failure can be reproduced instead of disappearing behind a different shuffle.
What fairness does not mean
A fair shuffle can still produce an uneven hand, a difficult Solitaire deal, or a run of unlucky cards. Fairness means the system does not favor a player and applies the same legal rules to every seat.
Bots receive the same type of hand and use the same legal-move calculation as human seats. They do not inspect hidden opposing hands to choose a move.