- Add commander_names param to run(), run_n(), _create_state() - Commander card flagged is_commander=True and placed in player.command_zone instead of shuffled into library/hand - Only first matching card is extracted (handles singleton rule) - Backward compatible: commander_names defaults to None