From bfe8be3a1a85aa2104bb8e9f2fb2c5147d9fbcaf Mon Sep 17 00:00:00 2001 From: Ben Sima Date: Thu, 27 Nov 2025 22:21:02 -0500 Subject: Exclude tasks with retry >= 3 from ready queue Tasks that have failed 3 or more times need human intervention and should not appear in the ready queue. This prevents infinite retry loops. Task-Id: t-164 Amp-Thread-ID: https://ampcode.com/threads/T-4c8bc88f-f8f9-4921-96e5-3b68552c0bc0 Co-authored-by: Amp --- Omni/Task/Core.hs | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'Omni/Task/Core.hs') diff --git a/Omni/Task/Core.hs b/Omni/Task/Core.hs index ca9345f..4ff0f5f 100644 --- a/Omni/Task/Core.hs +++ b/Omni/Task/Core.hs @@ -619,12 +619,16 @@ listTasks maybeType maybeParent maybeStatus maybeNamespace = do getReadyTasks :: IO [Task] getReadyTasks = do allTasks <- loadTasks + retryContexts <- getAllRetryContexts let openTasks = filter (\t -> taskStatus t == Open || taskStatus t == InProgress) allTasks doneIds = map taskId <| filter (\t -> taskStatus t == Done) allTasks parentIds = mapMaybe taskParent allTasks isParent tid = tid `elem` parentIds + -- Tasks with retry_attempt >= 3 need human intervention + needsInterventionIds = [retryTaskId ctx | ctx <- retryContexts, retryAttempt ctx >= 3] + blockingDepIds task = [depId dep | dep <- taskDependencies task, depType dep `elem` [Blocks, ParentChild]] isReady task = taskType task @@ -633,6 +637,8 @@ getReadyTasks = do && all (`elem` doneIds) (blockingDepIds task) && taskType task /= HumanTask + && taskId task + `notElem` needsInterventionIds pure <| filter isReady openTasks -- Get dependency tree -- cgit v1.2.3