# 와치독 — 봇 좀비 판정 후 BOT_PID 직접 kill

## Lv.1 작업

## 문제
와치독이 봇 좀비를 감지하고 /stop을 보내지만:
1. /stop이 실효 없음 (봇이 processing 중이라 무시)
2. 기존 kill 로직(344줄)은 schedule_id 기반 → schedule_id 빈 문자열이면 스킵
3. 결과: 좀비 봇이 계속 살아있어 새 작업을 못 받음

## 수정
`/home/jay/workspace/scripts/session-watchdog.sh`

### 봇 좀비 판정 직후(189줄 부근)에 BOT_PID 직접 kill 추가:

```bash
# 봇 좀비: heartbeat ❌ + 봇 PID ✅
log "${TASK_ID}: 봇 좀비 감지 (heartbeat 없음, 봇 PID=${BOT_PID} 생존)"

# /stop 전송
# ... (기존 /stop 로직)

# /stop 후에도 살아있으면 직접 kill
sleep 3
if kill -0 "$BOT_PID" 2>/dev/null; then
    log "${TASK_ID}: /stop 후에도 봇 PID=${BOT_PID} 생존 → kill 실행"
    kill "$BOT_PID" 2>/dev/null || true
    sleep 1
    # 그래도 살아있으면 SIGKILL
    if kill -0 "$BOT_PID" 2>/dev/null; then
        log "${TASK_ID}: SIGTERM 무반응 → SIGKILL 실행"
        kill -9 "$BOT_PID" 2>/dev/null || true
    fi
fi
```

### 기존 잔존 프로세스 kill (344줄)도 유지
schedule_id가 있는 경우의 kill은 기존대로 동작.
BOT_PID kill은 추가 안전장치.

## 검증 시나리오
1. 봇 좀비 상태 재현 → 와치독 실행 → "kill 실행" 로그 확인
2. kill 후 `ps -p $BOT_PID` → 프로세스 없음 확인
3. 재위임된 작업의 새 봇 세션이 시작되는지 확인 (heartbeat 생성)
4. 기존 테스트 회귀 없음

## 보고서
`/home/jay/workspace/memory/reports/task-{TASK_ID}.md`