#!/bin/bash
# 최소 검증판 주행 감시 (2026-08-28) — 30초마다 진행·실패를 한 줄로 남긴다.
# 멈춤을 스스로 고치지는 않는다. 그건 사람이 본다.
EP=3e83f3ee-ded7-4f2a-aded-01584d6ea5c5
LOG=/Users/manta/Documents/Projects/TheRoad-I1/scratchpad/run_0828_minimal.log
Q() { PGPASSWORD=theroad_dev_2026 psql -h localhost -U theroad -d theroad -tA -c "$1" 2>/dev/null; }
LAST=""
while true; do
  NOW=$(date '+%H:%M:%S')
  CNT=$(Q "SELECT string_agg(status||'='||n, ' ') FROM (SELECT status, count(*) n FROM step_run WHERE episode_id='$EP' GROUP BY status ORDER BY status) t;")
  CUR=$(Q "SELECT string_agg(step_id, ',') FROM step_run WHERE episode_id='$EP' AND status='running';")
  FAIL=$(Q "SELECT string_agg(step_id||'!'||coalesce(left(error_message,60),''), ' | ') FROM step_run WHERE episode_id='$EP' AND status IN ('failed','partial');")
  # ★시각을 빼고 비교한다 — 넣고 비교하면 상태가 그대로여도 30초마다
  #  새 줄이 되어 알림이 헛돈다(첫 판이 그랬다).
  KEY="$CNT  ▶$CUR"
  [ -n "$FAIL" ] && KEY="$KEY  ✗$FAIL"
  if [ "$KEY" != "$LAST" ]; then echo "$NOW  $KEY" >> "$LOG"; LAST="$KEY"; fi
  # 끝났나 — running 0 이고 pending 0
  R=$(Q "SELECT count(*) FROM step_run WHERE episode_id='$EP' AND status IN ('running','pending');")
  if [ "$R" = "0" ]; then
    sleep 20
    R2=$(Q "SELECT count(*) FROM step_run WHERE episode_id='$EP' AND status IN ('running','pending');")
    [ "$R2" = "0" ] && { echo "$(date '+%H:%M:%S')  ALL STEPS DONE  $CNT" >> "$LOG"; break; }
  fi
  sleep 30
done
