# task-637.2 완료 보고서: TODO 소급 동기화 + 대시보드 검증 (Phase 2)

## SCQA

**S**: task-637.1에서 `utils/todo_sync.py` 구현 + `notify-completion.py` 연동이 완료되어, 태스크 완료 시 todo.json sub_items이 자동 동기화되는 체계가 구축되었다. 소급 동기화 1차 실행(602건 스캔 → 2건 매칭)도 완료됨.

**C**: 604건 완료 태스크 중 todo.json에 매칭된 것은 고유 6건(task_id 기준)뿐이다. 나머지 598건은 todo.json 이슈와 연결되어 있지 않아, 수동 매칭 후보 파악과 대시보드 정상 표시 확인이 필요했다.

**Q**: 자동 동기화된 데이터가 정확하고, 대시보드에 정상 반영되며, 미매칭 항목의 후속 조치 경로가 명확한가?

**A**: retroactive_sync 재실행으로 추가 동기화 0건 확인(이미 완료). done=true 6건, done=false 2건 수동 검증 모두 실제 상태와 일치. 대시보드 `load_todo()`는 매 요청마다 디스크 직접 읽기(캐시 없음)로 즉시 반영 확인. 테스트 97건 전수 PASS (test_todo_sync 10건 + test_dispatch 82건 + test_notify_completion 5건). 미매칭 62건에 키워드 후보 제안 완료.

## 수행 내역

### 2-1. 수동 매칭 후보 목록 생성
- `python3 utils/todo_sync.py retroactive` 재실행: total_synced=0 (추가 동기화 없음)
- 604건 completed tasks 분석: 6 고유 task_id만 todo.json에 매칭
- 미완료 sub_items 90건 중 62건에 키워드 기반 후보 task_id 제안
- 산출물: `memory/reports/todo-unmatched.md` (147줄)

### 2-2. 대시보드 연동 확인
- `dashboard/server.py` load_todo() (line 756-768): 매 요청시 `memory/todo.json` 직접 로드, 캐시 없음
- `/api/todo` 엔드포인트 (line 996-1008): project 필터 + include_done 파라미터 지원
- 결론: todo_sync.py가 todo.json 수정 → 대시보드 즉시 반영. 캐시 무효화 불필요.

### 2-3. 최종 검증
**수동 검증 (8건)**

done=true 샘플 (6건) — 모두 OK:
- task-415.1 (issue-001): timers=completed, .done.clear 아카이브 존재
- task-416.1 (issue-001): timers=completed, .done.clear 아카이브 존재
- task-434.1 (issue-007): timers=completed, .done.clear 아카이브 존재
- task-492.1 (issue-010): timers=completed, .done.clear 아카이브 존재
- task-497.1 (issue-011): timers=completed, .done.clear 아카이브 존재
- task-499.1 (issue-012): timers=completed, .done.clear 아카이브 존재

done=false 샘플 (2건) — 모두 OK:
- issue-001 "AI 프로바이더 결정": task_id=null, timers 미등록, .done 없음
- issue-002 "Lovable AI Gateway 의존성 제거": task_id=null, timers 미등록, .done 없음

**테스트 결과**
- `tests/test_todo_sync.py`: 10건 PASS / 0건 FAIL
- `tests/test_dispatch.py`: 82건 PASS / 0건 FAIL
- `scripts/tests/test_notify_completion.py`: 5건 PASS / 0건 FAIL
- 합계: **97건 PASS / 0건 FAIL**

## 생성/수정 파일 목록
- 생성: `memory/reports/todo-unmatched.md` (미매칭 현황 리포트)
- 생성: `memory/reports/task-637.2.md` (본 보고서)
- 수정: 없음 (todo.json 포함 기존 파일 변경 없음)

## 발견 이슈 및 해결

### 자체 해결 (0건)
코드 변경 없는 검증/분석 작업으로 수정 대상 없음.

### 범위 외 미해결 (3건)
1. **todo.json 매칭율 극히 낮음 (6/604 = 1%)** — 범위 외 사유: todo.json이 프로젝트 단위 로드맵이고, task-timers.json은 전체 시스템 태스크를 포함하기 때문. 대부분의 시스템/인프라 태스크는 todo 이슈와 무관. 구조적 문제가 아닌 의도된 설계.
2. **issue-015~023 sub_items에 task_id 필드 누락** — 범위 외 사유: issue-015 이후 수동 추가된 이슈들로 task_id 필드가 초기화되지 않음. 동기화 시 task_id=None은 null과 동일 처리되므로 기능 영향 없음. 향후 이슈 생성 시 task_id 필드 포함 권장.
3. **issue-007 Remotion Phase 관련 유력 후보 존재** — 범위 외 사유: task-436.3, task-436.4가 Phase 2-1, 2-2와 키워드 유사도 0.80+ 이나, done=false→done=true 변경은 금지사항. 수동 검토 후 `link` 명령 사용 권장.

## QC 자동 검증
- overall: **PASS** (3 PASS, 7 SKIP)
- file_check: PASS (보고서 4232 bytes)
- data_integrity: PASS (task-637.2 status=running, 정상)
- critical_gap: PASS (CRITICAL 이슈 없음)
- api_health/test_runner/tdd_check/schema_contract/pyright_check/style_check/scope_check: SKIP (코드 변경 없는 검증 작업)
