# dispatch.py task-ID 불일치 버그 수정

## 레벨: Lv.2

## 문제
아누가 지시서 파일(`dispatch-xxx.md`)에 `# task-458.1: ...`로 task-id를 적어서 dispatch.py에 전달하면:
1. dispatch.py는 파일 내용의 task-id를 **무시**하고 task-timers.json에서 자동 생성
2. 결과: 지시서 안에는 "task-458.1"이지만 실제 task-id는 "task-459.1"
3. 팀장이 읽는 지시서에 잘못된 task-id가 들어있어 혼란 발생

추가 문제: dispatch 실패해도 task-timers.json에 task-id가 등록되어 다음 실행 시 ID가 건너뛰어짐.

## 수정 파일
- `/home/jay/workspace/dispatch.py`

## 수정 방법

### 수정 1: 지시서 파일 내용에서 task-id 제거 후 실제 task-id로 교체
`dispatch()` 함수에서 task_desc(지시서 내용)를 `memory/tasks/{task_id}.md`에 저장할 때:
1. `task_desc` 내용 첫 줄이 `# task-NNN.N: ...` 패턴이면 자동 생성된 task_id로 치환
2. 정규식: `^# task-\d+\.\d+:` → `# {actual_task_id}:`
3. 이렇게 하면 지시서 파일에 어떤 ID가 적혀있든 실제 ID로 교체됨

### 수정 2: dispatch 실패 시 task-timers.json 롤백
현재 `dispatch()` 함수 흐름:
- task-timer start 호출 (task-timers.json에 등록)
- ... 중간 로직 ...
- cokacdir --cron 호출 (실패 가능)
- **실패해도 task-timers.json에 이미 등록됨** → ID 낭비

수정:
- dispatch 최종 성공 전까지 task-timer start를 지연시키거나
- 또는 실패 시 task-timer end로 정리

### 구체적 코드 위치
- `generate_task_id()`: line 161~216 — ID 자동 생성 로직
- `dispatch()`: line 375~376 — task_id 생성 분기
- `dispatch()`: line 440~442 — 지시서 파일 저장
- `dispatch()`: line 450 부근 — task-timer start 호출

## 검증 기준
- [ ] 지시서에 `# task-999.1:` 로 적어도, 저장된 파일에는 실제 생성된 task-id로 교체됨
- [ ] dispatch 실패 시 task-timers.json에 잔여 task-id 없음
- [ ] 기존 `--task-id` 플래그 동작에 영향 없음
- [ ] 기존 자동 ID 생성 로직에 영향 없음