diff --git a/.agents/scripts/supervisor/ai-actions.sh b/.agents/scripts/supervisor/ai-actions.sh index 20bdf84a00..4b35b77fba 100755 --- a/.agents/scripts/supervisor/ai-actions.sh +++ b/.agents/scripts/supervisor/ai-actions.sh @@ -163,7 +163,7 @@ _compute_target_state_hash() { local started started=$(printf '%s' "$task_line" | grep -oE 'started:[^ ]+' || echo "") local blocked - blocked=$(printf '%s' "$task_line" | grep -oE 'blocked-by:[^ ]+' || echo "") + blocked=$(printf '%s' "$task_line" | grep -oE 'blocked-by:t[0-9][^ ]*' || echo "") local pr_field pr_field=$(printf '%s' "$task_line" | grep -oE 'pr:#[0-9]+' || echo "") # t1285: Include [proposed:...] annotations in state hash so diff --git a/.agents/scripts/supervisor/ai-context.sh b/.agents/scripts/supervisor/ai-context.sh index 68c8535f73..7b1a9a6c0b 100755 --- a/.agents/scripts/supervisor/ai-context.sh +++ b/.agents/scripts/supervisor/ai-context.sh @@ -466,7 +466,7 @@ build_todo_context() { if [[ -n "$task_id" ]] && echo "$_db_done_ids" | grep -qxF "$task_id"; then continue fi - blocker=$(echo "$line" | grep -oE 'blocked-by:[^ ]+' | head -1) + blocker=$(echo "$line" | grep -oE 'blocked-by:t[0-9][^ ]*' | head -1) output+="- $task_id ($blocker)\n" done <<<"$blocked_tasks" fi diff --git a/.agents/scripts/supervisor/cron.sh b/.agents/scripts/supervisor/cron.sh index d574f718cd..49937cc25a 100755 --- a/.agents/scripts/supervisor/cron.sh +++ b/.agents/scripts/supervisor/cron.sh @@ -389,9 +389,10 @@ is_task_blocked() { local task_line="$1" local todo_file="$2" - # Extract blocked-by: field + # Extract blocked-by: field — require value to start with a task ID (tNNN) + # to avoid matching backtick-quoted mentions like `blocked-by:` in descriptions local blocked_by - blocked_by=$(printf '%s' "$task_line" | grep -oE 'blocked-by:[^ ]+' | sed 's/blocked-by://' || true) + blocked_by=$(printf '%s' "$task_line" | grep -oE 'blocked-by:t[0-9][^ ]*' | sed 's/blocked-by://' || true) if [[ -z "$blocked_by" ]]; then return 1 # No dependencies — not blocked diff --git a/.agents/scripts/supervisor/sanity-check.sh b/.agents/scripts/supervisor/sanity-check.sh index 6a075a2da5..d436157286 100755 --- a/.agents/scripts/supervisor/sanity-check.sh +++ b/.agents/scripts/supervisor/sanity-check.sh @@ -558,7 +558,7 @@ _execute_sanity_action() { local current_line current_line=$(sed -n "${line_num}p" "$todo_file") local blocked_by - blocked_by=$(printf '%s' "$current_line" | grep -oE 'blocked-by:[^ ]+' | head -1 | sed 's/blocked-by://' || echo "") + blocked_by=$(printf '%s' "$current_line" | grep -oE 'blocked-by:t[0-9][^ ]*' | head -1 | sed 's/blocked-by://' || echo "") if [[ -z "$blocked_by" ]]; then echo "no blocked-by field found" diff --git a/.agents/scripts/supervisor/todo-sync.sh b/.agents/scripts/supervisor/todo-sync.sh index 5af0903650..55c253eea4 100755 --- a/.agents/scripts/supervisor/todo-sync.sh +++ b/.agents/scripts/supervisor/todo-sync.sh @@ -1174,7 +1174,7 @@ auto_unblock_resolved_tasks() { # Extract blocked-by dependencies local blocked_by="" - blocked_by=$(printf '%s' "$line" | grep -oE 'blocked-by:[^ ]+' | head -1 | sed 's/blocked-by://' || echo "") + blocked_by=$(printf '%s' "$line" | grep -oE 'blocked-by:t[0-9][^ ]*' | head -1 | sed 's/blocked-by://' || echo "") [[ -z "$blocked_by" ]] && continue # Check each blocker