# task-1971: dispatch.py 봇 lazy start 문제 수정 + 시스템3문서 업데이트

## 문제 현상
서버/cokacdir 재부팅 후 dispatch.py로 작업 위임 시 봇이 메시지를 수신하지 못함.
- cokacdir는 정상 가동, cron 등록 성공, 스케줄 실행됨
- 그러나 봇의 Claude 세션이 lazy start(첫 수동 메시지 수신 시에만 시작)
- cron 메시지가 Claude 세션 시작 전에 도착하면 소실됨
- 수동으로 봇에 메시지 보낸 후에는 정상 동작

## 근본 원인
cokacdir v0.4.96은 봇 세션을 lazy start함. 텔레그램 메시지 수신은 되지만, Claude 프로세스가 떠있지 않으면 처리 불가.

## 수정 범위

### 1. dispatch.py에 봇 wake-up 로직 추가
- cron 등록 전에 대상 봇에 빈 ping 메시지(wake-up) 전송
- wake-up 후 Claude 세션이 시작될 때까지 대기 (최대 30초)
- 구현 방법: `cokacdir --cron "." --at "{now+5s}" --chat {CHAT_ID} --key {key}` 로 빈 메시지 먼저 전송
- 실제 작업 cron은 wake-up 후 충분한 딜레이(예: 20초) 후 전송
- 또는: `get_dispatch_time(10)` → `get_dispatch_time(30)` 으로 딜레이 확대

### 2. 봇 세션 상태 확인 로직
- dispatch 전에 `ps aux | grep claude.*{session_id}` 로 해당 봇의 Claude 프로세스 존재 확인
- 프로세스 없으면 wake-up 전송 + 대기
- 프로세스 있으면 바로 cron 전송

### 3. dispatch.py에 경고 로그 추가
- 봇 프로세스가 감지되지 않을 때 WARNING 로그 출력
- `[lazy-start] bot-{x}의 Claude 프로세스 미감지. wake-up 메시지 전송 중...`

### 4. 시스템3문서 업데이트
- `/home/jay/workspace/memory/plans/cross-verification-workflow/` 3문서에 반영:
  - plan.md: dispatch lazy start 대응 로직 추가 기록
  - context-notes.md: 2026-04-20 발견, 원인, 해결 방법 기록
  - checklist.md: 해당 항목 추가 + [x] 체크

## ★★★ 절대 규칙 ★★★
- dispatch.py의 기존 로직 깨지면 안 됨 — 기존 테스트 전체 PASS 필수
- wake-up 메시지가 봇의 실제 작업을 방해하면 안 됨 (빈 메시지 또는 무시 가능한 메시지)

## 검증 시나리오
1. Claude 프로세스가 없는 봇에 dispatch → wake-up 전송 + 대기 → cron 전송 → 봇 정상 수신
2. Claude 프로세스가 있는 봇에 dispatch → wake-up 생략 → cron 바로 전송 → 정상 수신
3. pytest 전체 PASS
4. 시스템3문서 3개 파일 모두 업데이트 확인

## 레벨
- normal

## 프로젝트
- dev-system