summaryrefslogtreecommitdiff
path: root/Omni/Task/Core.hs
diff options
context:
space:
mode:
authorBen Sima <ben@bensima.com>2025-11-27 22:21:02 -0500
committerBen Sima <ben@bensima.com>2025-11-27 22:21:02 -0500
commitbfe8be3a1a85aa2104bb8e9f2fb2c5147d9fbcaf (patch)
treefa40260c3d587846ea15f0996386d645882baa3f /Omni/Task/Core.hs
parentfc84d75d38834417f8c9a27e7826a51a391644e5 (diff)
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 <amp@ampcode.com>
Diffstat (limited to 'Omni/Task/Core.hs')
-rw-r--r--Omni/Task/Core.hs6
1 files changed, 6 insertions, 0 deletions
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