diff --git a/src/resources/extensions/sf/auto/phases.js b/src/resources/extensions/sf/auto/phases.js index 1dbf1d636..3cc8f8a45 100644 --- a/src/resources/extensions/sf/auto/phases.js +++ b/src/resources/extensions/sf/auto/phases.js @@ -2247,11 +2247,12 @@ export async function runUnitPhase(ic, iterData, loopState, sidecarItem) { const unitResult = await runUnit(ctx, pi, s, unitType, unitId, finalPrompt); s.lastUnitAgentEndMessages = unitResult.event?.messages ?? null; let currentUnitResult = unitResult; - let solverAssessment = assessAutonomousSolverTurn( - s.basePath, - unitType, - unitId, - ); + // Short-circuit: if runUnit was cancelled (provider not ready, session + // failed, timeout) there is no checkpoint to repair — skip the repair loop + // entirely and let the cancelled handler below surface the real cause. + let solverAssessment = unitResult.status === "cancelled" + ? { action: "none" } + : assessAutonomousSolverTurn(s.basePath, unitType, unitId); while (solverAssessment.action === "missing-checkpoint-retry") { const diagnosis = classifyAutonomousSolverMissingCheckpointFailure( currentUnitResult.event?.messages ?? [], @@ -2296,6 +2297,10 @@ export async function runUnitPhase(ic, iterData, loopState, sidecarItem) { ), ); s.lastUnitAgentEndMessages = currentUnitResult.event?.messages ?? null; + if (currentUnitResult.status === "cancelled") { + solverAssessment = { action: "none" }; + break; + } solverAssessment = assessAutonomousSolverTurn(s.basePath, unitType, unitId); } const solverCheckpoint = solverAssessment.checkpoint;