Both self-restart paths (Bot.restart_or_exit, GameController "could not
recover") spawn a replacement process that waited for the resume key like a
manual launch. With nobody at the keyboard every self-recovery became a
permanent stall - the "bot is stuck all the time" report on 2026-09-15.
- Replacement processes get BOTTY_AUTOSTART=1; main.py starts the bot when it
is set and D2R is running. A manual launch still waits for the key.
- The controller path now shares Bot's restart cap (reset on reaching town),
so an unrecoverable screen stops after 5 restarts instead of looping.
Co-Authored-By: Claude Opus 5 <[email protected]>