From ddfb922584dd990481f44aad1a989e5bdf188823 Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Thu, 5 Mar 2026 17:41:09 +0000 Subject: scripts: make next-task machine-readable, simplify start-next-task next-task now outputs only the task ID (or nothing), removing prose prefixes that made downstream parsing fragile. start-next-task simplifies to a direct empty-check with no awk required. Co-Authored-By: Claude Sonnet 4.6 --- scripts/next-task | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100755 scripts/next-task (limited to 'scripts/next-task') diff --git a/scripts/next-task b/scripts/next-task new file mode 100755 index 0000000..8bd958c --- /dev/null +++ b/scripts/next-task @@ -0,0 +1,33 @@ +#!/bin/bash + +DB_PATH="/site/doot.terst.org/data/claudomator.db" + +# 1. Fetch the most recently updated 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 + exit 0 +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;") + +elif [ "$state" == "READY" ]; then + # 3. Find next task ordered by priority then oldest + next_task=$(sqlite3 "$DB_PATH" "SELECT id FROM tasks WHERE state = 'PENDING' AND id != '$id' + ORDER BY + CASE priority + WHEN 'critical' THEN 4 + WHEN 'high' THEN 3 + WHEN 'normal' THEN 2 + WHEN 'low' THEN 1 + ELSE 0 + END DESC, + created_at ASC + LIMIT 1;") +fi + +echo "$next_task" -- cgit v1.2.3