Mirrors the discard_only plumbing pattern. Uses HeuristicBot() (default balanced params) and converts the bot's phase-local action to unified via state.to_unified_action. Recursive (Cython) path was already supported and is unchanged. Tests: smoke run + accept/reject validators. All 59 tests pass.