#!/usr/bin/env bash # queue-next.sh — bash-only slot watcher: run queued TASK turns as slots free. # rc=3 from dispatch = DEFERRED (cap) -> keep waiting on same task, don't exit. set -uo pipefail LOGDIR="$HOME/.coordinate/logs" i=1 while [ $i -le $# ]; do task=${!i} i=$((i+1)) slug=$(basename "$task" .md | sed 's/^TASK-[0-9]*-[0-9]*-//') while true; do n=$(ls /home/_crossfeed/metrics/active/*.pid 2>/dev/null | wc -l) [ "$n" -lt 2 ] && break sleep 60 done echo "$(date -Is) RUN $slug" >> "$LOGDIR/queue.status" bash "$HOME/.coordinate/scripts/dispatch-turn.sh" "q-$slug" "$task" \ >> "$LOGDIR/queue-$slug.log" 2>&1 rc=$? if [ "$rc" = 3 ]; then echo "$(date -Is) DEFER $slug (cap) - re-queueing" >> "$LOGDIR/queue.status" i=$((i-1)); sleep 30; continue fi echo "$(date -Is) $([ $rc -eq 0 ] && echo OK || echo FAIL) $slug rc=$rc" >> "$LOGDIR/queue.status" [ $rc -ne 0 ] && exit $rc done echo "$(date -Is) queue complete" >> "$LOGDIR/queue.status"