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

# 맥락 노트: task-2422

**task**: task-2422

---

## 결정 근거

### 1. 변경 코드 제거 범위 (Fix A)
- session-watchdog.sh의 변경 행위 4종 모두 제거:
  - line ~295: `.done` 핸들러의 `status = "escalated"` 박제
  - line ~365: superseded 핸들러의 `status = "escalated"` 박제
  - line ~517: max_retry 핸들러의 `status = "escalated"` 박제 (Phase β-2)
  - line ~482-484: `${TASK_ID}.backoff` 파일 쓰기
  - line ~312, 437: `task-timer.py end` 호출 (timer end_time 박제도 변경 행위)
- 회장 명시: "스스로 아무것도 변경하지 못해야 한다" → ALL writes 제거
- log 기록 + Telegram alert만 유지 (read-only + push)

### 2. PID 검사 구현 방식 (Fix B)
- 옵션 A: pgrep -f system_prompt_<hash> (watchdog과 동일 방식)
- 옵션 B: cokacdir bot status API
- 옵션 C: heartbeat가 신선이면 PID alive로 간주 (생략)
- 결정: **옵션 A 채택** — watchdog 검증된 방식, 추가 인프라 불필요. 다만 dashboard 새로고침마다 process scan 부하 우려 → **30초 TTL 캐시** 적용.

### 3. status=escalated 처리 정책
- 기존: dashboard `get_running_tasks_by_team`이 `status == "running"` 필터 → escalated 박제 시 즉시 유휴 표시
- 신규: status가 `running` 또는 `escalated`이고, heartbeat fresh + PID alive 시 → 작업중 표시
- 논리: 신호등은 "봇이 실제 일하고 있는가"를 우선시. status 박제는 secondary 신호로 강등.
- completed status는 즉시 유휴 (봇 본인이 명시 종료)

### 4. heartbeat 임계값
- 600초 (10분) — 코드 작업 watchdog 임계값과 동일
- 더 짧으면 짧은 휴지기에 false dead. 더 길면 진짜 죽음 늦게 감지.
- 600초가 합의 기준 (task-2399 fix#4에서 확립)

## 참조 자료

- 회장 명시: 2026-05-03 dispatch 메모리
- 사고 사례: task-2414, task-2417, task-2420 (false positive 박제)
- 결합 제거 권고 출처: task-2411 (좀비, 통합 권고는 정합 but 결합 강화는 결함)
- watchdog 원본: scripts/session-watchdog.sh (576 lines)
- dashboard 원본: dashboard/data_loader.py (2627 lines)

## 주의사항

- **변경 금지 (allowed_resources의 forbidden_paths)**: dispatch.py, scripts/auto_merge.py, scripts/finish-task.sh, scripts/done-watcher.py, teams/shared/**, CLAUDE.md
- **회장 메모리 보호**: Generate.tsx / AiOnestop.tsx / premiumOnly 절대 수정 금지
- **task-2421 (design팀) 영향 X**: 본 task는 dev2-team 단독, design 팀 진행 작업과 무관
- **PID 캐시 TTL**: 너무 짧으면 부하, 너무 길면 stale. 30초가 합리적 기본값
- **systemctl --user start session-watchdog.timer**: 회장이 정지시킨 상태. 머지 후 재가동 필요 (보고서에 명시)
