In YOLO mode, if mergePhaseIntoInitiative() threw (e.g., branch doesn't exist, merge conflict), the error propagated and completePhase() was never called — leaving the phase permanently stuck at in_progress. Also wrap per-phase recovery in try-catch so one failing phase doesn't abort the entire recoverDispatchQueues() loop.