# 세션 자동 이어가기 Watchdog — 체크리스트 v2

## Phase 1: Heartbeat + Watchdog 핵심

### post-tool-use.sh 수정
- [ ] heartbeat 갱신 1줄 추가: `[[ -n "$TASK_ID" ]] && date +%s > "/home/jay/workspace/memory/heartbeats/${TASK_ID}.heartbeat" 2>/dev/null`
- [ ] heartbeats 디렉토리 사전 생성 (mkdir -p)
- [ ] 기존 hook 동작 회귀 테스트

### session-watchdog.sh 작성
- [ ] task-timers.json에서 running 상태 + dev팀 작업 추출 (anu-direct 제외)
- [ ] .done 파일 존재 확인 → pass
- [ ] PID 추적 (Primary): schedule_id → grep system_prompt_* → PID → kill -0 확인
- [ ] heartbeat mtime 확인 (Secondary): 10분 타임아웃
- [ ] 판정: PID 존재 OR heartbeat < 10분 → alive → pass
- [ ] 판정: PID 없음 AND (heartbeat > 10분 OR heartbeat 없음) → stalled
- [ ] stalled → dispatch.py 재위임 호출 (절대경로, unset CLAUDECODE)
- [ ] retry_count 관리 (max 2)
- [ ] max 초과 시 Telegram 알림 (환경변수 기반, 토큰 미노출)
- [ ] 모든 변수 따옴표 처리
- [ ] 로깅: logs/session-watchdog.log에 append

### systemd unit 파일
- [ ] session-watchdog.service (Type=oneshot, EnvironmentFile)
- [ ] session-watchdog.timer (OnUnitActiveSec=120s)
- [ ] systemctl --user enable --now session-watchdog.timer

### task-timers.json 스키마 확장
- [ ] retry_count 필드 (int, default 0)
- [ ] max_retry 필드 (int, default 2)
- [ ] schedule_id 필드 (str, dispatch 응답에서 기록)
- [ ] 기존 파싱 로직 하위 호환 확인

### 테스트
- [ ] TC1: heartbeat 갱신 후 watchdog → 재위임 안 함
- [ ] TC2: heartbeat 10분 초과 + .done 없음 → 재위임 실행
- [ ] TC3: .done 존재 → 재위임 안 함
- [ ] TC4: retry_count=2 → 재위임 차단 + 알림
- [ ] TC5: anu-direct 작업 → watchdog 대상 제외
- [ ] TC6: post-tool-use.sh 기존 기능 회귀 테스트
- [ ] TC7: systemd timer 정상 동작 (시작/정지/재시작)

## Phase 2: Circuit Breaker + 통합 [미착수]
- [ ] 빠른 재실패 감지 (재위임 후 3분 내 재종료)
- [ ] 30분 백오프 로직
- [ ] 동시 재위임 상한 (3건/cycle)
- [ ] 집계 알림 (8팀 동시 실패 시 단일 알림)
- [ ] 대시보드 재위임 이력 표시
- [ ] bats-core 통합 테스트
- [ ] heartbeat 통계 분석 (평균 도구 호출 간격)
