#!/usr/bin/env bash # queue-after.sh # Wait until no longer exists, then dispatch the task turn. # Keeps repo-touching turns serialized when two queue screens would overlap. set -uo pipefail GATE="$1"; SLUG="$2"; TASK="$3" LOGDIR="$HOME/.coordinate/logs" while screen -ls 2>/dev/null | grep -q "\.${GATE}[[:space:]]"; do sleep 60 done # QUOTA WALL GUARD: if any recent turn log shows the z.ai usage wall, # halt the chain instead of burning the next turn into the same wall. WALLLOG=$(ls -t "$LOGDIR"/q-*.log 2>/dev/null | head -1) if [ -n "$WALLLOG" ] && grep -q "Usage limit reached" "$WALLLOG" 2>/dev/null; then echo "$(date -Is) QUOTA WALL detected in $WALLLOG — chain halted before $SLUG" >> "$LOGDIR/queue.status" screen -S RCEO-PMO -X stuff "QUOTA WALL - chain halted before $SLUG. Do not dispatch until quota verified.$(printf '\r')" || true exit 0 fi echo "$(date -Is) GATE $GATE cleared — RUN $SLUG" >> "$LOGDIR/queue.status" bash "$HOME/.coordinate/scripts/dispatch-turn.sh" "q-$SLUG" "$TASK" \ >> "$LOGDIR/queue-$SLUG.log" 2>&1 rc=$? echo "$(date -Is) $([ $rc -eq 0 ] && echo OK || echo "FAIL(rc=$rc)") $SLUG" >> "$LOGDIR/queue.status"