summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xscripts/next-task18
1 files changed, 11 insertions, 7 deletions
diff --git a/scripts/next-task b/scripts/next-task
index eeeca2e..e74ca26 100755
--- a/scripts/next-task
+++ b/scripts/next-task
@@ -3,9 +3,10 @@
#
# 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.
+# 2. If READY, run its first PENDING child (subtask) to begin the series.
+# 3. If COMPLETED, run its next PENDING sibling to continue the series.
+# 4. If neither yields a task, fall back to highest-priority oldest PENDING
+# task across the whole queue.
#
# Usage: next_id=$(scripts/next-task)
# Example: scripts/start-next-task
@@ -21,13 +22,16 @@ fi
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;")
+if [ "$state" == "READY" ]; then
+ # 2. READY = parent task; run its first PENDING child to begin the series
+ next_task=$(sqlite3 "$DB_PATH" "SELECT id FROM tasks WHERE parent_task_id = '$id' AND state = 'PENDING' ORDER BY created_at ASC LIMIT 1;")
+elif [ "$state" == "COMPLETED" ]; then
+ # 3. Find next PENDING sibling to continue the series
+ next_task=$(sqlite3 "$DB_PATH" "SELECT id FROM tasks WHERE parent_task_id = '$parent_id' AND state = 'PENDING' ORDER BY created_at ASC LIMIT 1;")
fi
if [ -z "$next_task" ]; then
- # 3. No sibling found (or READY state): find next task by priority then oldest
+ # 4. No child/sibling found: fall back to highest-priority oldest PENDING task
next_task=$(sqlite3 "$DB_PATH" "SELECT id FROM tasks WHERE state = 'PENDING' AND id != '$id'
ORDER BY
CASE priority