summaryrefslogtreecommitdiff
path: root/Omni/Task
diff options
context:
space:
mode:
authorBen Sima <ben@bensima.com>2025-11-27 22:42:20 -0500
committerBen Sima <ben@bensima.com>2025-11-27 22:42:20 -0500
commitc3f48a938af0b9a2f692fab2168cc549d629511c (patch)
tree98b8ea55a03011b37aa33e236025a9b714ca2036 /Omni/Task
parentecbc8385d590cf8f52d437796ff91d6e55bfd55e (diff)
Add Draft status for tasks not ready for jr to pickup
All changes are in place. The build and tests pass. The implementation i 1. **Added `Draft` to Status enum** - First in sequence: `Draft | Open | 2. **Excluded Draft from getReadyTasks** - Uses `taskStatus t `elem` [Op 3. **CLI support** - `task update <id> draft` works, `task list --status 4. **Display coloring** - Draft shows in gray with `[.]` indicator in tr 5. **TaskStats** - Added `draftTasks` field and display in stats output 6. **Tests** - Added unit test for draft exclusion from ready tasks and Task-Id: t-166
Diffstat (limited to 'Omni/Task')
-rw-r--r--Omni/Task/Core.hs13
1 files changed, 10 insertions, 3 deletions
diff --git a/Omni/Task/Core.hs b/Omni/Task/Core.hs
index d15ed8e..61a2e83 100644
--- a/Omni/Task/Core.hs
+++ b/Omni/Task/Core.hs
@@ -44,7 +44,7 @@ data Task = Task
data TaskType = Epic | WorkTask | HumanTask
deriving (Show, Eq, Read, Generic)
-data Status = Open | InProgress | Review | Approved | Done
+data Status = Draft | Open | InProgress | Review | Approved | Done
deriving (Show, Eq, Read, Generic)
-- Priority levels (matching beads convention)
@@ -692,7 +692,7 @@ getReadyTasks :: IO [Task]
getReadyTasks = do
allTasks <- loadTasks
retryContexts <- getAllRetryContexts
- let openTasks = filter (\t -> taskStatus t == Open || taskStatus t == InProgress) allTasks
+ let openTasks = filter (\t -> taskStatus t `elem` [Open, InProgress]) allTasks
doneIds = map taskId <| filter (\t -> taskStatus t == Done) allTasks
parentIds = mapMaybe taskParent allTasks
@@ -815,6 +815,7 @@ showTaskTree maybeId = do
completed = length <| filter (\t -> taskStatus t == Done) children
in "[" <> T.pack (show completed) <> "/" <> T.pack (show total) <> "]"
_ -> case taskStatus task of
+ Draft -> "[.]"
Open -> "[ ]"
InProgress -> "[~]"
Review -> "[?]"
@@ -824,6 +825,7 @@ showTaskTree maybeId = do
coloredStatusStr = case taskType task of
Epic -> magenta statusStr
_ -> case taskStatus task of
+ Draft -> gray statusStr
Open -> bold statusStr
InProgress -> yellow statusStr
Review -> magenta statusStr
@@ -881,6 +883,7 @@ printTask t = do
coloredStatus =
let s = "[" <> T.pack (show (taskStatus t)) <> "]"
in case taskStatus t of
+ Draft -> gray s
Open -> bold s
InProgress -> yellow s
Review -> magenta s
@@ -987,6 +990,7 @@ saveTaskToJsonl path task = do
data TaskStats = TaskStats
{ totalTasks :: Int,
+ draftTasks :: Int,
openTasks :: Int,
inProgressTasks :: Int,
reviewTasks :: Int,
@@ -1021,6 +1025,7 @@ getTaskStats maybeEpicId = do
tasks = targetTasks
total = length tasks
+ draft = length <| filter (\t -> taskStatus t == Draft) tasks
open = length <| filter (\t -> taskStatus t == Open) tasks
inProg = length <| filter (\t -> taskStatus t == InProgress) tasks
review = length <| filter (\t -> taskStatus t == Review) tasks
@@ -1028,7 +1033,7 @@ getTaskStats maybeEpicId = do
done = length <| filter (\t -> taskStatus t == Done) tasks
epics = length <| filter (\t -> taskType t == Epic) tasks
readyCount' = readyCount
- blockedCount = total - readyCount' - done
+ blockedCount = total - readyCount' - done - draft
byPriority =
[ (P0, length <| filter (\t -> taskPriority t == P0) tasks),
(P1, length <| filter (\t -> taskPriority t == P1) tasks),
@@ -1042,6 +1047,7 @@ getTaskStats maybeEpicId = do
pure
TaskStats
{ totalTasks = total,
+ draftTasks = draft,
openTasks = open,
inProgressTasks = inProg,
reviewTasks = review,
@@ -1068,6 +1074,7 @@ showTaskStats maybeEpicId = do
Just epicId -> putText <| "Task Statistics for Epic " <> epicId
putText ""
putText <| "Total tasks: " <> T.pack (show (totalTasks stats))
+ putText <| " Draft: " <> T.pack (show (draftTasks stats))
putText <| " Open: " <> T.pack (show (openTasks stats))
putText <| " In Progress: " <> T.pack (show (inProgressTasks stats))
putText <| " Review: " <> T.pack (show (reviewTasks stats))