# 와치독 set -e + grep 충돌 수정

## Lv.1 작업

## 근본 원인 (확정)
`session-watchdog.sh` 1줄: `set -euo pipefail`

for 루프 내 `ps -eo ... | grep "$bn" | grep -v grep | awk ... | head -1` 에서:
- grep 매칭 없음 → exit code 1 → `set -e`가 스크립트 즉시 종료
- 첫 번째 파일에서 PID 없으면 나머지 파일 순회 불가

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

for 루프 내 모든 `ps | grep` 패턴에 `|| true` 추가:

### 175줄 (교차체크 for 루프)
```bash
# 현재
pid=$(ps -eo pid,args --no-headers -ww | grep "$bn" | grep -v grep | awk '{print $1}' | head -1)

# 변경
pid=$(ps -eo pid,args --no-headers -ww | grep "$bn" | grep -v grep | awk '{print $1}' | head -1 || true)
```

### 동일 패턴 전체 검색 + 수정
`grep -n "grep.*grep -v grep" session-watchdog.sh`로 모든 위치 찾아서 `|| true` 추가.
특히 파이프라인 안의 grep은 `set -o pipefail` 때문에 중간 grep 실패도 전체 파이프 실패로 전파됨.

안전한 패턴:
```bash
pid=$(ps -eo pid,args --no-headers -ww | grep "$bn" | grep -v grep | awk '{print $1}' | head -1) || true
```

또는 `set +e` / `set -e`로 해당 구간만 감싸기:
```bash
set +e
pid=$(ps -eo pid,args --no-headers -ww | grep "$bn" | grep -v grep | awk '{print $1}' | head -1)
set -e
```

## 검증 시나리오
1. `bash session-watchdog.sh` 수동 실행 → "봇 좀비 감지" 로그 출력 (1772.5)
2. systemd timer 다음 실행 → 동일 로그 확인
3. PID 없는 파일 4개 중 3개 → skip → 4번째에서 PID 발견 확인
4. 기존 테스트 69건 회귀 없음

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