# task-1784.1 완료 보고서: 와치독 set -e + grep 충돌 수정

**S**: `session-watchdog.sh`는 systemd timer에 의해 2분마다 실행되며, 팀장 봇 세션의 좀비/stall 상태를 감지하고 자동 재위임하는 핵심 인프라 스크립트다.

**C**: 스크립트 첫줄 `set -euo pipefail` 설정 하에서 `ps | grep | grep -v grep` 패턴이 5곳에 존재하며, grep 매칭 결과가 없을 때 exit code 1을 반환 → `pipefail`이 전체 파이프라인 실패로 전파 → `set -e`가 스크립트를 즉시 종료. for 루프에서 첫 번째 파일에 PID가 없으면 나머지 파일 순회가 불가했다.

**Q**: 5개의 `ps | grep` 패턴에 안전한 실패 처리를 추가하여, grep 매칭 실패 시에도 스크립트가 정상 계속 실행되도록 할 수 있는가?

**A**: 모든 5개 위치에 `|| true`를 command substitution 바깥에 추가하여, grep 실패 시 exit code를 0으로 변환. 변수 할당은 빈 문자열로 정상 동작. bash 구문 검사 통과, pytest 16건 전체 통과.

## 수정 내역

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

### 변경 내용 (5개 라인)

| 라인 | 변수 | 용도 |
|------|------|------|
| 128 | `PID` | schedule_id 기반 PID 추적 (Primary) |
| 166 | `BOT_PID` | 교차 체크용 봇 PID 추적 |
| 175 | `pid` | 팀 디렉토리 fallback PID 추적 (for 루프 내) |
| 210 | `DEATH_CHECK_PID` | 사망 원인 분석용 PID 확인 |
| 349 | `STALE_PID` | 재위임 전 잔존 프로세스 kill 대상 PID |

모든 라인에 동일 패턴 적용:
```bash
# 변경 전
VAR=$(ps -eo pid,args --no-headers -ww | grep "pattern" | grep -v grep | awk '{print $1}' | head -1)

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

## 발견 이슈 및 해결

### 자체 해결 (1건)
1. **5개 `ps|grep` 패턴 모두 `|| true` 누락** — command substitution 바깥에 `|| true` 추가로 `set -e` + `pipefail` 조합에서 안전하게 동작하도록 수정

### 범위 외 미해결 (0건)
없음

## 검증 결과

- `bash -n session-watchdog.sh`: 구문 검사 통과
- `pytest tests/test_session_watchdog.py`: 16/16 통과 (0 실패)
- 수정 라인: 정확히 5개 (추가 변경 없음)

## 셀프 QC

- [x] 1. 영향 파일: `session-watchdog.sh` 1개만 수정. 다른 파일 영향 없음
- [x] 2. 엣지 케이스: grep 결과 0건 → 빈 문자열 할당 → 이후 `-n`/`-z` 분기에서 정상 처리
- [x] 3. 작업 지시와 정확히 일치: 5개 grep 패턴에 `|| true` 추가
- [x] 4. 보안: 변경 없음 (단순 에러 처리 추가)
- [x] 5. 테스트: pytest 16건 전체 통과
- [x] 6. 발견 이슈 모두 해결
- [x] 7. 코드 아키텍처 원칙: 해당 없음 (쉘 스크립트 단순 수정)
- [x] 8. 인터페이스 변경 없음

## 모델 사용 기록
- 스바로그(백엔드) / `session-watchdog.sh` 5개 라인 수정 / sonnet / -

## 세션 통계
- 총 도구 호출: 8회

### 수정 파일 목록
- /home/jay/workspace/scripts/session-watchdog.sh: 5회 (Edit)
- /home/jay/workspace/memory/reports/task-1784.1.md: 1회 (Write)
- /home/jay/workspace/memory/tasks/task-1784.1.md: 1회 (dispatch)
- bash_cmd: 1회 (Bash)

### 도구 사용 현황
- Edit: 5회
- Bash: 1회
- Write: 1회
- dispatch: 1회

