#!/bin/zsh
# B' 재실행 완료 감지 → manifest.json 에서 S19 sh5 admit/attach/guide 확인.
export PGPASSWORD=theroad_dev_2026
CK="/Users/manta/Documents/Projects/TheRoad-I1/projects/a7f80ab9-e97b-420c-a380-3beccb0bcfe5/checkpoints/episodes/286f3ba4-5738-49b7-a7e4-ce0295fd4352/outdoor_site_layout"
# 시작 대기(status running 될 때까지 잠깐)
sleep 20
for i in $(seq 1 240); do
  st=$(psql -h localhost -U theroad -d theroad -t -c "SELECT status FROM step_run WHERE step_id='outdoor_site_layout' ORDER BY updated_at DESC LIMIT 1;" | tr -d ' \n')
  if [ "$st" = "completed" ] || [ "$st" = "failed" ]; then echo "DONE status=$st after ${i} polls"; break; fi
  sleep 30
done
cp "$CK/manifest.json" /Users/manta/Documents/Projects/TheRoad-I1/scratchpad/outdoor_manifest_bprime.json 2>/dev/null
python3 - "$CK/manifest.json" <<'PY'
import json, sys
d=json.load(open(sys.argv[1])); diag=d['data']['diagnostics']
print("updated_at:", d.get('updated_at'))
ic=diag.get('shared_model_image_calls',{})
print("image_calls actual:", ic.get('actual_call_count'), ic.get('actual'))
jd=diag.get('shared_model_judge_decisions') or []
ad=diag.get('shared_model_attach_decisions') or []
print("judge_decisions:",len(jd)," attach_decisions:",len(ad))
# S19 sh5 찾기
for j in jd:
    if 's19' in str(j.get('group_id','')).lower() or '19:5' in str(j.get('evidence','')):
        print("\n=== S19 judge ===")
        print(json.dumps({k:j.get(k) for k in ('group_id','needs_shared_model_guide','decision_type','confidence','reasons','admit','deny_reason')}, ensure_ascii=False))
        print("evidence:", json.dumps(j.get('evidence'), ensure_ascii=False)[:300])
for a in ad:
    if 's19' in str(a.get('group_id','')).lower():
        print("=== S19 attach ===", json.dumps(a, ensure_ascii=False))
PY
