# task-316.1: task-timer end 누락 방지 — 근본 원인 해소

## 개요
완료된 작업의 task-timer end가 안 불려서 대시보드에 "running" 상태로 남는 문제.
근본 원인: DIRECT-WORKFLOW.md에서 task-timer end가 워크플로우 최후단(Step 8)에 있어서,
AI 에이전트가 중간에 세션 종료/컨텍스트 초과되면 end가 영영 안 불림.

## 수정 대상 파일 3개

### 1. `/home/jay/workspace/prompts/DIRECT-WORKFLOW.md` — 워크플로우 순서 변경

**현재 순서:**
```
5. .done 파일 생성
6. 아누에게 통보 (cokacdir --cron)
7. 체인 완료 알림
8. task-timer.py end  ← 마지막 (위험!)
```

**변경할 순서:**
```
5. .done 파일 생성
6. task-timer.py end  ← .done 직후로 이동!
7. 아누에게 통보 (cokacdir --cron)
8. (chain_id가 있으면) 체인 Phase 완료 알림
```

핵심: **task-timer end를 .done 생성 직후, 외부 통보 전에 실행**.
외부 통보(cokacdir)는 실패해도 재시도 가능하지만, timer end 누락은 대시보드 오염을 일으킴.

### 2. `/home/jay/workspace/dispatch.py` — 이중 시작 제거

**현재 문제**: dispatch.py L264-273에서 `task-timer start`를 호출하고,
팀장 워크플로우 Step 1에서도 `task-timer start`를 호출 → 이중 시작.

**수정**: dispatch.py의 자동 시작을 **유지** (확실한 기록을 위해).
대신 DIRECT-WORKFLOW.md의 Step 1에서 timer start 호출을 **제거하거나 조건부로 변경**.

구체적으로: Step 1을 "작업 파일을 읽고 분석합니다"로 변경.
timer start는 dispatch.py가 이미 처리했으므로 팀장이 중복 호출할 필요 없음.

### 3. `/home/jay/workspace/hooks/user-prompt-submit.sh` 또는 관련 훅 — 안전망 추가

**현재**: UserPromptSubmit 훅이 .done 파일을 감지하면 "보고서 확인 후 처리하세요" 안내만 함.
**추가**: .done 감지 시 해당 task-id의 timer가 running이면 자동으로 end 호출.

구현 방법: 훅 스크립트에서 `python3 memory/task-timer.py end <task_id>` 호출.
이미 completed인 경우 task-timer.py가 무시하도록 방어 로직 필요 (이미 있는지 확인 후).

**주의**: 훅 위치 확인 필요. `~/.claude/hooks/` 또는 `settings.json`에서 경로 확인.

## 추가: task-timer.py 방어 로직

`task-timer.py end`가 이미 completed인 task에 대해 호출되면:
- 현재 동작 확인 (에러? 무시? 덮어쓰기?)
- **기대 동작**: 이미 completed면 조용히 무시 (멱등성 보장)
- 멱등성이 없으면 추가

## 문서화

### 수정 사항을 아래 문서에 반영:
- `DIRECT-WORKFLOW.md`: 워크플로우 순서 변경 + 주석으로 이유 설명
- `memory/specs/anu-guide.md` 또는 관련 문서: .done 프로토콜 안전망 설명 추가 (있는 경우)

## 테스트
1. **task-timer.py end 멱등성 테스트**: completed 상태의 task에 end 재호출 → 에러 없이 무시되는지
2. **pyright 체크**: 수정한 파일 전부 에러 0건
3. **워크플로우 순서 검증**: DIRECT-WORKFLOW.md의 step 번호가 순차적이고 빈번호 없는지
4. **훅 동작 테스트**: .done 파일 생성 시 timer auto-end가 동작하는지

## 완료 기준
- [ ] DIRECT-WORKFLOW.md: task-timer end 순서 변경 (.done 직후)
- [ ] DIRECT-WORKFLOW.md: Step 1 timer start 중복 제거
- [ ] dispatch.py: 변경 사항 없거나 최소 수정 (timer start는 유지)
- [ ] 훅에 안전망 추가: .done 감지 시 timer auto-end
- [ ] task-timer.py: end 멱등성 보장
- [ ] pyright 에러 0건
- [ ] 테스트 통과

## task-timer
- task_id: task-316.1
- 완료 시: `python3 /home/jay/workspace/memory/task-timer.py end task-316.1`
