From e9f6c679ba8709a1be32a18b6963862d2c6a5243 Mon Sep 17 00:00:00 2001 From: Eva Date: Mon, 13 Apr 2026 10:32:12 +0700 Subject: [PATCH] fix: flatten polling-loop notice guard and suppress rerun on shutdown abort --- .../context-engine-maintenance.ts | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/agents/pi-embedded-runner/context-engine-maintenance.ts b/src/agents/pi-embedded-runner/context-engine-maintenance.ts index 5db1678659d..639b26e282e 100644 --- a/src/agents/pi-embedded-runner/context-engine-maintenance.ts +++ b/src/agents/pi-embedded-runner/context-engine-maintenance.ts @@ -379,16 +379,17 @@ async function runDeferredTurnMaintenanceWorker(params: { for (;;) { while (getQueueSize(sessionLane) > 0) { const now = Date.now(); - if (lastWaitNoticeAt === 0 || now - lastWaitNoticeAt >= TURN_MAINTENANCE_LONG_WAIT_MS) { + if ( + now - startedWaitingAt >= TURN_MAINTENANCE_LONG_WAIT_MS && + now - lastWaitNoticeAt >= TURN_MAINTENANCE_LONG_WAIT_MS + ) { lastWaitNoticeAt = now; - if (now - startedWaitingAt >= TURN_MAINTENANCE_LONG_WAIT_MS) { - surfaceMaintenanceUpdate( - "Waiting for the session lane to go idle.", - surfacedUserNotice - ? "Still waiting for the session lane to go idle." - : "Deferred maintenance is waiting for the session lane to go idle.", - ); - } + surfaceMaintenanceUpdate( + "Waiting for the session lane to go idle.", + surfacedUserNotice + ? "Still waiting for the session lane to go idle." + : "Deferred maintenance is waiting for the session lane to go idle.", + ); } await sleepWithAbort(TURN_MAINTENANCE_WAIT_POLL_MS, shutdownAbort.abortSignal); } @@ -538,6 +539,7 @@ function scheduleDeferredTurnMaintenance(params: DeferredTurnMaintenanceSchedule `taskId=${task.taskId} sessionKey=${sessionKey} lane=${resolveDeferredTurnMaintenanceLane(sessionKey)}`, ); + const schedulerAbort = createDeferredTurnMaintenanceAbortSignal(); let runPromise: Promise; try { runPromise = enqueueCommandInLane(resolveDeferredTurnMaintenanceLane(sessionKey), async () => @@ -552,6 +554,7 @@ function scheduleDeferredTurnMaintenance(params: DeferredTurnMaintenanceSchedule }), ); } catch (err) { + schedulerAbort.dispose(); markDeferredTurnMaintenanceTaskScheduleFailure({ sessionKey, taskId: task.taskId, @@ -569,11 +572,14 @@ function scheduleDeferredTurnMaintenance(params: DeferredTurnMaintenanceSchedule }); }) .finally(() => { + schedulerAbort.dispose(); const current = activeDeferredTurnMaintenanceRuns.get(sessionKey); if (current !== state) { return; } - const rerunParams = current.rerunRequested ? current.latestParams : undefined; + const shutdownTriggered = schedulerAbort.abortSignal?.aborted === true; + const rerunParams = + current.rerunRequested && !shutdownTriggered ? current.latestParams : undefined; activeDeferredTurnMaintenanceRuns.delete(sessionKey); if (rerunParams) { scheduleDeferredTurnMaintenance(rerunParams);