diff options
Diffstat (limited to 'scripts')
| -rwxr-xr-x | scripts/next-task | 18 |
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 |
