# task-2063: dispatch.py wake-up 2단계 방식 구현

## 배경
"." wake-up 제거(task-2041) 후 봇 수신 실패 반복. 딜레이 조정(5→15초)으로 일부 개선했지만 근본 해결 안 됨.

## 문제
dispatch.py의 _wake_up_bot()이 메시지를 보내지 않고 polling만 하므로, 봇 프로세스가 없으면 세션이 시작되지 않음.

## ★ 먼저 읽을 파일
- `/home/jay/workspace/dispatch.py` L1246~1280 (_wake_up_bot 함수)
- `/home/jay/workspace/dispatch.py` L2158~2165, L2952~2959 (호출부)

## 해결: 2단계 wake-up

### Stage 1: 세션 시작용 메시지 전송
- "." 대신 **무해한 시스템 메시지** 전송: `"[SYSTEM] 세션 준비 중. 다음 메시지에서 작업이 전달됩니다."`
- 봇 CLAUDE.md에 이 패턴을 무시하는 규칙 추가 (이미 DIRECT-WORKFLOW.md에 추가 가능)
- 또는 cokacdir의 `--once` 옵션으로 전송하여 세션만 시작

### Stage 2: 실제 작업 전송 (딜레이 후)
- Stage 1 전송 후 15초 대기
- 그 후 실제 작업 프롬프트 cron 전송

### 구현 상세
```python
def _wake_up_bot(chat_id: str, key: str) -> bool:
    # Stage 1: 세션 시작용 메시지 전송
    wake_msg = "[SYSTEM] 세션 준비 중. 다음 메시지에서 작업이 전달됩니다. 이 메시지는 무시하세요."
    wake_cmd = ["cokacdir", "--cron", wake_msg, "--at", get_dispatch_time(3), "--chat", chat_id, "--key", key, "--once"]
    subprocess.run(wake_cmd, capture_output=True, text=True, timeout=30)
    
    # 15초 polling (봇 세션 시작 대기)
    for i in range(3):
        time.sleep(5)
        if _check_bot_process(key):
            return True
    return False
```

### 봇 CLAUDE.md/DIRECT-WORKFLOW.md 수정
- "[SYSTEM] 세션 준비 중" 패턴 수신 시 무시하고 다음 메시지 대기하는 규칙 추가

## 완료 시그니처
- [grep] `세션 준비 중\|SYSTEM.*세션\|wake.*stage` @ `dispatch.py`
- [grep] `세션 준비 중.*무시\|SYSTEM.*무시` @ `prompts/DIRECT-WORKFLOW.md`

## 검증 시나리오
1. 봇 프로세스 없는 상태에서 dispatch → Stage 1 메시지 전송 → 봇 세션 시작 → Stage 2 작업 수신
2. `python3 -m pytest tests/test_dispatch.py -x` → PASS
3. 봇이 "[SYSTEM] 세션 준비 중" 메시지를 무시하고 실제 작업만 처리

## 레벨
- critical

## 프로젝트
- dev-system
