# task: Task ID 번호 점프 수정 + 채번 로직 방어 코드 추가

## 배경 (긴급)
task-1182.1(5팀) 검증 테스트에서 task-9991.1~9993.1을 task-timers.json에 생성.
dispatch.py의 채번 로직이 `max(모든 task ID) + 1`이라, 이후 모든 task가 9994~10001로 채번됨.
정상적으로는 task-1183.1이 되어야 했음.

## 근본 원인
`dispatch.py:294` — `next_num = int(max(nums)) + 1`
- task-timers.json의 모든 키를 float으로 파싱 후 max() → 테스트 ID 9991~9993이 max가 됨
- 방어 로직 없음: 비정상적으로 큰 ID, 테스트 ID 등을 필터링하지 않음

## 수정 사항

### Phase 1: 데이터 복구 (즉시)
task-timers.json에서 9991~10001 범위의 task 엔트리를 1183~1193으로 리넘버링:
- task-9991.1 → task-1183.1 (5팀 테스트 — completed이면 그대로 유지해도 OK)
- task-9992.1 → task-1184.1
- task-9993.1 → task-1185.1
- task-9994.1 → task-1186.1
- task-9995.1 → task-1187.1
- task-9996.1 → task-1188.1
- task-9997.1 → task-1189.1
- task-9998.1 → task-1190.1
- task-9999.1 → task-1191.1
- task-10000.1 → task-1192.1
- task-1193.1 → task-1193.1

리넘버링 대상 파일들 (각 task ID에 대해):
1. `memory/task-timers.json` — 키 이름 변경
2. `memory/tasks/task-XXXX.1.md` — 파일명 + 내용 내 task ID
3. `memory/reports/task-XXXX.1.md` — 파일명 + 내용 내 task ID
4. `memory/events/task-XXXX.1.*` — .done, .done.acked, .done.clear 등
5. `memory/checkpoints/task-XXXX.1.md` — 있으면
6. `memory/meetings/task-XXXX.1-*.md` — 있으면
7. `teams/*/task-XXXX.1-*.md` — 팀 산출물 파일
8. `memory/daily/*.md` — 일일 로그 내 task ID 참조

⚠️ **memory/events/task-XXXX.1.done.acked 파일은 rename만, 삭제 금지** (히스토리 보존)
⚠️ 현재 running 상태인 task-1193.1은 리넘버링 시 주의 (3팀 진행 중)

### Phase 2: 채번 로직 방어 (dispatch.py 수정)
`dispatch.py:284-295` 수정:
1. **비정상 ID 필터링**: task ID가 현재 max + 1000 이상이면 무시 (테스트 ID 방지)
2. **또는** 카운터 파일 분리: `memory/.task-counter` 같은 별도 파일에 현재 시퀀스 저장, max() 대신 카운터 기반 채번
3. **테스트 ID 네임스페이스**: 검증용 task는 `task-test-*` 같은 별도 prefix 사용하도록 task-timer.py에 테스트 전용 모드 추가
4. 어떤 방식이든 **기존 task ID가 이런 점프를 유발할 수 없도록** 방어

### Phase 3: 문서화
- `memory/specs/task-id-convention.md` 생성: task ID 채번 규칙, 테스트 ID 규칙, 방어 로직 설명
- 사고 경위 기록: task-1182.1 검증 테스트 → 9991~9993 생성 → 채번 점프

### Phase 4: 테스트
- 비정상 큰 ID가 있을 때 정상 채번되는지 테스트
- 기존 테스트 회귀 확인

## 주의사항
- task-timers.json 수정 시 lock 파일 사용 (기존 locking 메커니즘 준수)
- 리넘버링 스크립트는 일회성이므로 팀 디렉토리에 보관 OK
- 현재 running 중인 task-1193.1(3팀)은 완료 전에 rename하면 .done 매칭 실패 가능 → **이 task는 완료 후 수동 rename하거나, rename 후 .done 감지 로직에서 매핑 처리**
