fb626e4ef0
requestAbort's abortSent branch only upgraded incoming signal reasons, so a shutdown landing after a soft-budget hard-abort was discarded and abortKind() stayed budget. finalizeSubagentLifecycle then followed the budget-resumable path (idle + adopt) even though AgentLifecycleManager.dispose() had run, leaking the subagent session into SDK/process reuse. - Upgrade a prior budget abort to shutdown so the run takes the shutdown release path; genuine kills (signal/timeout/terminate) stay terminal and shutdown is never downgraded to signal. - Cover the shutdown-races-budget-hard-abort case. Fixes #8216