summaryrefslogtreecommitdiff
path: root/scripts/next-task
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/next-task')
-rwxr-xr-xscripts/next-task17
1 files changed, 14 insertions, 3 deletions
diff --git a/scripts/next-task b/scripts/next-task
index 8bd958c..eeeca2e 100755
--- a/scripts/next-task
+++ b/scripts/next-task
@@ -1,8 +1,18 @@
#!/bin/bash
+# next-task — print the ID of the next PENDING task to run, or nothing if none.
+#
+# Selection logic:
+# 1. Find the most recently updated COMPLETED or READY task.
+# 2. If COMPLETED, prefer its next PENDING sibling (same parent) to continue a series.
+# 3. If no sibling exists (series done, or READY state), fall back to the
+# highest-priority oldest PENDING task across the whole queue.
+#
+# Usage: next_id=$(scripts/next-task)
+# Example: scripts/start-next-task
DB_PATH="/site/doot.terst.org/data/claudomator.db"
-# 1. Fetch the most recently updated task
+# 1. Fetch the most recently updated COMPLETED or READY task
target=$(sqlite3 "$DB_PATH" "SELECT id, state, parent_task_id FROM tasks WHERE state IN ('COMPLETED', 'READY') ORDER BY updated_at DESC LIMIT 1;")
if [ -z "$target" ]; then
@@ -14,9 +24,10 @@ IFS='|' read -r id state parent_id <<< "$target"
if [ "$state" == "COMPLETED" ]; then
# 2. Find next sibling task that is currently PENDING
next_task=$(sqlite3 "$DB_PATH" "SELECT id FROM tasks WHERE parent_task_id = '$parent_id' AND state = 'PENDING' LIMIT 1;")
+fi
-elif [ "$state" == "READY" ]; then
- # 3. Find next task ordered by priority then oldest
+if [ -z "$next_task" ]; then
+ # 3. No sibling found (or READY state): find next task by priority then oldest
next_task=$(sqlite3 "$DB_PATH" "SELECT id FROM tasks WHERE state = 'PENDING' AND id != '$id'
ORDER BY
CASE priority