Two bugs that combined to hang the bot for hours after the 5-fail breaker
fired (observed 2026-09-15: last log entry 08:49, bot still hung at 12:54):
1. go_to_hero_selection(): the inner 'while is_loading' loop had no timeout.
If D2R was stuck on a loading screen that never resolved, the bot spun
forever. Added a 30s bound to the inner wait so the outer 45s timeout
can actually fire.
2. _baal_xp_rearm + on_maintenance: the 5-fail breaker fired (reset the
counter, logged the warning) but on_maintenance immediately re-armed the
leech because _baal_xp_only() is always True. The breaker was a no-op —
the fail-rearm-fail loop continued indefinitely. Now the breaker sets a
flag that on_maintenance checks: instead of re-arming, it triggers
end_game so the controller can restart D2R with fresh config.