The orchestrator's agent:stopped listener only called scheduleDispatch(), never marking the agent's assigned task as completed. Tasks stayed in_progress forever after their agent finished. Now handleAgentStopped() calls dispatchManager.completeTask() before scheduling new dispatches, respecting requiresApproval and skipping manual (user_requested) stops.