---
task_id: task-2399
type: checklist
scope: task
created: 2026-05-03
updated: 2026-05-03
status: completed
---

# 체크리스트: task-2399

**task**: task-2399

---

## Phase 1 — 이참나 (팀장, 분석/설계)

- [x] A. session-watchdog.sh 코드 분석 + bug #1~#9 root cause 식별
- [x] B. task-timers.json 실측 — 상대 경로 + cwd 불일치 확인 (bug #1 smoking gun)
- [x] C. 3문서 작성 (plan/context/checklist) + 3 Step Why 자문
- [x] D. Codex 사전 검증 gate PASS (G1) — 2차 pass=true, critical=0

## Phase 2 — 이참나 직접 수정 (회장 명시 "개판칠거면 하지마" 강도)

- [x] A. session-watchdog.sh fix #1: cd $WORKSPACE + TASK_FILE absolute fallback (resolve_task_file)
- [x] B. session-watchdog.sh fix #2: STALLED_LIST 중복 push 차단 (add_stalled 헬퍼)
- [x] C. session-watchdog.sh fix #3: .escalate 마커 시 알람 억제 (should_skip_for_escalate)
- [x] D. session-watchdog.sh fix #4: design/code task 종류별 heartbeat 차등 (get_stale_threshold)
- [x] E. session-watchdog.sh fix #5: AND 조건 죽음 판정 (PID + 마커 + events mtime + PR/worktree)
- [x] F. session-watchdog.sh fix #6: long-running 마커 화이트리스트 5종 (has_progress_marker)
- [x] G. session-watchdog.sh fix #7: 알람 텔레그램 본문 디버깅 정보 추가
- [x] H. shellcheck 0 error 검증 (style/info warnings만)
- [x] I. WATCHDOG_DRY_RUN 환경변수 도입 (테스트 안전성)

## Phase 3 — 카마소츠 (테스터, 회귀 테스트)

- [x] A. tests/test_watchdog_noise_elimination.py 신규 (pytest)
- [x] B. 시나리오 14개 작성 (12+ 목표 초과)
- [x] C. pytest PASS 14/14 (1.79s)
- [x] D. 기존 tests/test_session_watchdog.py + bot/orphan watchdog 회귀 0 (39/39 PASS)

## Phase 4 — 이참나 (팀장, 통합 검증)

- [x] A. L1: bash session-watchdog.sh 1회 실행 → false alert 0건
- [x] B. L1: 5 사이클 모니터링 → false alert 0건 누적 (모든 stalled = TP)
- [x] C. G3 독립 검증 (g3_independent_verifier.py) PASS
- [x] D. 보고서 작성 (memory/reports/task-2399.md)
- [x] E. 3문서 status → completed 업데이트
- [ ] F. finish-task.sh 실행 (다음 단계)

## 검증

- [x] pytest 통과 (14 신규 + 39 기존 + 5 bash 회귀, 모두 PASS)
- [x] shellcheck 0 error
- [x] L1 5 사이클 모니터링 false alert 0건
- [x] G3 독립 검증 PASS
- [x] Codex 사전 검증 PASS (구현 후 critical=0)
- [x] 최종 보고서 작성
