# task-1777 완료 보고서

## S - Situation
session-watchdog.sh의 사망 원인 판정이 telegram JSONL 로그(BOT_LOG)에만 의존하고 있어, DEATH_REASON이 "unknown"으로 남는 케이스가 다수 발생하고 있다.

## C - Complication
cokacdir의 ai_trace.log에는 START/EXEC/STREAM/FINAL 이벤트가 상세히 기록되어 있으나 활용되지 않고 있다. 이로 인해 start_failure, exec_crash, context_limit 등 정확한 사망 원인을 판별할 수 있음에도 "unknown"으로 처리되어 재위임 전략 최적화가 불가능하다.

## Q - Question
ai_trace.log를 추가 판정 소스로 통합하여 "unknown" 사망 원인 비율을 줄이고, 재위임 전략의 정확도를 높일 수 있는가?

## A - Answer
ai_trace.log 기반 3단계 패턴 매칭(start_failure/exec_crash/context_limit) 판정 로직을 구현하고, watchdog-deaths.jsonl에 trace_info 필드를 추가하여 진단 데이터를 풍부하게 했다. 테스트 108/108건 전건 통과(기존 89건 + 신규 19건). 기존 BOT_LOG 판정은 그대로 유지하고, DEATH_REASON == "unknown"일 때만 ai_trace 분석이 작동하여 하위 호환성 100% 보장.

## 수정 파일 목록

- `/home/jay/workspace/scripts/session-watchdog.sh` — ai_trace 설정 로딩 + 사망 원인 판정 블록 + JSONL trace_info 기록
- `/home/jay/workspace/config/constants.json` — watchdog.ai_trace_log_path, ai_trace_tail_lines 추가
- `/home/jay/workspace/scripts/tests/test_session_watchdog.sh` — TC25~TC30 (19개 서브케이스) 추가

## 변경 상세

### 1. session-watchdog.sh
- **constants 로딩**: AI_TRACE_LOG, AI_TRACE_TAIL 변수를 constants.json에서 로드 (fallback 포함)
- **ai_trace 판정 블록**: BOT_LOG 분석 후 DEATH_REASON=="unknown"일 때만 실행
  - SCHEDULE_ID → system_prompt 파일 경로로 1차 필터링
  - 팀 workspace 경로(teams/{short})로 fallback 필터링
  - grep -A2로 후속 라인(completed OK 등) 포함
  - 3패턴: start_failure([START] only), exec_crash([EXEC] w/o completed OK), context_limit(history_len 100+)
- **JSONL 기록**: trace_info 필드 선택적 추가 (JSON escape 처리)

### 2. constants.json
- `watchdog.ai_trace_log_path`: "/home/jay/.cokacdir/debug/ai_trace.log"
- `watchdog.ai_trace_tail_lines`: 200

### 3. test_session_watchdog.sh
- `judge_death_with_trace()`, `extract_trace_info()` 함수 추가
- TC25: start_failure 감지 (2건)
- TC26: exec_crash 감지 (2건)
- TC27: fallback 유지 (3건)
- TC28: trace_info JSONL 검증 (4건)
- TC29: constants.json 연동 (4건)
- TC30: context_limit history_len 감지 (4건)

## 발견 이슈 및 해결

### 자체 해결 (1건)
1. **grep 필터링 시 completed OK 라인 누락** — `grep -A2`로 후속 2라인 포함하여 해결
   - 상세: ai_trace.log의 `[EXEC] completed OK` 라인에는 팀 경로가 없어 팀 경로 grep 시 누락됨. session-watchdog.sh (line 306, 315) + test (line 251, 279) 4곳에 `-A2` 추가

## 테스트 결과

- **bash -n session-watchdog.sh**: SYNTAX OK
- **python3 json.load constants.json**: JSON VALID
- **test_session_watchdog.sh**: 108/108 통과 (0건 실패)
  - 기존 89건 회귀 없음
  - 신규 19건 전건 통과

## 검증 시나리오 결과

1. start_failure 감지: TC25-1 PASS
2. exec_crash 감지: TC26-1 PASS
3. 기존 fallback 유지: TC27-1~3 PASS
4. trace_info JSONL 포함: TC28-1~4 PASS
5. constants.json 연동: TC29-1~4 PASS
6. 회귀 테스트: 89/89 PASS (기존 전건 통과)

## 모델 사용 기록

- 팀원: 불칸 / 작업: session-watchdog.sh + constants.json 수정 / 사용 모델: sonnet
- 팀원: 아르고스 / 작업: test_session_watchdog.sh 테스트 추가 / 사용 모델: sonnet
- 팀장(헤르메스): 설계, grep -A2 버그 수정, QC/통합 / 사용 모델: opus

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

### 수정 파일 목록
- /home/jay/workspace/scripts/session-watchdog.sh: 5회 (Edit)
- /home/jay/workspace/scripts/tests/test_session_watchdog.sh: 4회 (Edit)
- /home/jay/workspace/config/constants.json: 1회 (Edit)
- /home/jay/workspace/memory/reports/task-1777.md: 1회 (Write)
- /home/jay/workspace/memory/tasks/task-1777.md: 1회 (dispatch)

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

