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

# 체크리스트: task-2422

**task**: task-2422

---

## Phase 1 — 설계 (오딘)

- [x] A. 작업 파일/현재 코드 분석
- [x] B. 3문서 작성 (plan/context/checklist)
- [x] C. 3 Step Why 검증
- [x] D. Codex 사전 검증 (G1, 권고 5건 모두 구현 반영)

## Phase 2 — Fix A: Watchdog 무변경화 (토르)

- [x] A. line ~295 (.done 핸들러) jq박제 제거
- [x] B. line ~365 (superseded 핸들러) jq박제 제거
- [x] C. line ~517 (max_retry 핸들러) jq박제 제거
- [x] D. line ~482-484 backoff 파일 쓰기 제거
- [x] E. line ~312, 437 task-timer.py end 호출 제거
- [x] F. ESCALATED_LIST/REDELEGATED_LIST 사용처 정합 점검 (alert 본문용 유지)
- [x] G. shellcheck + bash -n PASS (BACKOFF_DURATION 미사용 변수도 정리)

## Phase 3 — Fix B: Dashboard 3 신호 종합 (토르)

- [x] A. _is_heartbeat_fresh() 헬퍼 추가 (evaluate_task_liveness 내부)
- [x] B. _is_pid_alive() 헬퍼 추가 (_PidLivenessProvider, 30초 TTL 캐시)
- [x] C. _classify_task_aliveness() = evaluate_task_liveness() 분류 함수 추가
- [x] D. get_running_tasks_by_team() 3 신호 적용 (+ liveness key 반환)
- [x] E. compute_org_stats() / compute_dashboard_stats() / get_team_stats() 동일 로직 적용
- [x] F. python3 -c "import dashboard.data_loader" PASS

## Phase 4 — Fix C: 회귀 테스트 (헤임달)

- [x] A. tests/test_watchdog_alert_only.py 작성 (8 tests)
- [x] B. tests/dashboard/test_signal_pid_aggregation.py 작성 (13 tests)
- [x] C. pytest 21/21 PASS

## Phase 5 — 통합 검증 (오딘)

- [x] A. Sanitize 게이트 PASS (감지 항목 0)
- [x] B. Codex G1 사전 검증 → 권고 5건 구현 반영
- [x] C. 마아트 독립 검증 PASS (5/5 항목, 결함 0)
- [x] D. L1 스모크: watchdog 실행 → timer.json mtime/내용 동일 (diff 0)
- [x] E. L1 스모크: status=escalated + fresh heartbeat → 신호등 작업중 표시 (test PASS)
- [x] F. G3 독립 검증 PASS
- [x] G. 보고서 작성 + finish-task.sh

## 검증

- [x] pytest 21/21 PASS
- [x] shellcheck 신규 warning 0 (기존 warning 6건은 task 외 영역)
- [x] Pyright 0 errors (unused 변수 정리 완료)
- [x] timer.json 무변경 보장 (watchdog 실행 후 mtime/내용 동일)
- [x] task-2414/2417/2420 사고 재현 시 신호등 정확히 작업중 표시
