# task-1779.1 완료 보고서

**S**: session-watchdog.sh의 봇 PID fallback 로직(170-173줄)이 `ps aux | grep "claude.*-p.*/home/jay/workspace/teams/${TEAM_SHORT}"` 패턴으로 매칭을 시도하나, 실제 프로세스 args에는 `/teams/dev2` 경로가 없어 항상 실패한다.

**C**: 팀 경로는 `system_prompt_해시_PID` 파일 **내부**에 `Project directory: /home/jay/workspace/teams/dev2` 형태로만 존재하므로, ps args에서 직접 grep하는 방식은 근본적으로 매칭 불가능하다.

**Q**: system_prompt 파일 내용을 기반으로 팀 디렉토리를 매칭하여 올바른 봇 PID를 추적할 수 있는가?

**A**: fallback 로직을 `grep -rl`로 system_prompt 파일 내용에서 팀 디렉토리를 검색 → 매칭된 파일의 basename으로 `ps aux`에서 PID를 추적하는 방식으로 교체. bash syntax 검증 통과, watchdog 관련 pytest 41건 전체 통과(회귀 0건).

## 수정 내역

### 변경 파일
- `/home/jay/workspace/scripts/session-watchdog.sh` (170-178줄)

### 변경 전 (4줄)
```bash
if [[ -z "$BOT_PID" ]]; then
    TEAM_SHORT="${TEAM_ID%-team}"
    BOT_PID=$(ps aux | grep "claude.*-p.*/home/jay/workspace/teams/${TEAM_SHORT}" | grep -v grep | awk '{print $2}' | head -1)
fi
```

### 변경 후 (9줄)
```bash
if [[ -z "$BOT_PID" ]]; then
    TEAM_SHORT="${TEAM_ID%-team}"
    # system_prompt 파일 내용에서 팀 디렉토리 매칭 → 해당 파일의 해시로 PID 추적
    MATCHING_PROMPT=$(grep -rl "Project directory: /home/jay/workspace/teams/${TEAM_SHORT}" /home/jay/.cokacdir/system_prompt_* 2>/dev/null | head -1)
    if [[ -n "$MATCHING_PROMPT" ]]; then
        PROMPT_BASENAME=$(basename "$MATCHING_PROMPT")
        BOT_PID=$(ps aux | grep "$PROMPT_BASENAME" | grep -v grep | awk '{print $2}' | head -1)
    fi
fi
```

## 테스트 결과
- `bash -n session-watchdog.sh`: SYNTAX OK
- `test_session_watchdog.py`: 16/16 passed
- `test_bot_watchdog.py`: 17/17 passed
- `test_orphan_watchdog.py`: 6/6 passed
- `test_chain_manager.py`: 2/2 passed (watchdog 키워드 매칭)
- 총 41건 passed, 0 failed, 회귀 0건

## 발견 이슈 및 해결

### 자체 해결 (0건)
없음

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

### 관찰 사항 (3건)
1. **grep -rl 성능**: system_prompt 파일이 다수(10+)일 때 `grep -rl`이 모든 파일을 스캔하므로 약간의 I/O 부하 발생 가능하나, 와치독은 주기적(분 단위) 실행이므로 실질적 문제 없음
2. **다중 매칭 방어**: `head -1`로 동일 팀의 여러 prompt 파일이 있을 때 첫 번째만 사용. 최신 파일이 필요한 경우 `ls -t`로 정렬 가능하나 현재 요구사항에는 불필요
3. **기존 1차 매칭(162-168줄)과의 관계**: SCHEDULE_ID 기반 1차 매칭이 성공하면 이 fallback은 실행되지 않음. 둘 다 실패 시 "정상 종료" 경로로 진행 (기존 동작 유지)

## 모델 사용 기록
- 카르티케야 / 작업: session-watchdog.sh 170-173줄 PID 매칭 로직 교체 / 모델: sonnet / 정당성: -

## QC 자동 검증
(아래 참조)

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

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

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

