# F1 Due Date Spec (Promoted)

**Extracted from:** `2026-04-25-dogfood-feedback.md` F1
**Plan:** `docs/superpowers/plans/2026-04-26-f1-due-date.md`
**Status:** 🚀 promoted — implemented 2026-04-26

## 결정 (mini-brainstorm 결과)

| 결정 항목 | 값 | 근거 |
|----------|-----|------|
| 매칭 우선순위 | 규칙 파서 우선 → AI 응답 폴백 | 결정론적 매칭 우선 |
| 모호 표현 (월말, 주말, 퇴근 전) | 규칙은 medium confidence + iso=null, AI 위임 | false positive 회피 |
| 라벨 슬롯 | NoteCard 의 summary 와 tags 사이 인라인 (`📅 YYYY-MM-DD`) | 시각 노이즈 최소 |
| 만료 표시 | 회색 + 취소선 (라벨만, 본문 무수정) | slice §1.1 카피 정책 |
| 사용자 편집 | HTML date input, 클릭 → 편집 | 표준 UX |
| 시각 단위 / 음력 / 반복 일정 | 미지원 | F1 §Out |
| 만료 자동 처리 | 없음 (시각만) | dogfood 후 결정 |
| 별도 뷰 / 정렬 | 없음 | 후속 |
| Migration v2 backfill | NULL 기본 | 비파괴 |
| Pre-migration snapshot | `<dbFile>.pre-v<N>.bak` (F6-L1 follow-up #4) | 마이그레이션 결함 회수 |

## 범위 (PR 안에 포함됨)

- `src/main/db/migrations/m002_due_date.ts` (신규)
- `src/main/db/migrations/index.ts` 수정 (`latestVersion` 추가, m002 등록)
- `src/main/db/index.ts` 수정 (pre-migration 스냅샷 — F6-L1 후속 #4 반영)
- `src/main/services/dueDateParser.ts` (신규, 14 규칙)
- `src/main/ai/schema.ts` 수정 (`due_date` 필드 추가, AiResponse 확장)
- `src/main/ai/prompt.ts` 수정 (`PROMPT_VERSION = 2`, `todayKst` 인자)
- `src/main/ai/InferenceProvider.ts` 수정 (`GenerateInput.todayKst`)
- `src/main/ai/LocalOllamaProvider.ts` 수정 (todayKst 패스)
- `src/main/ai/AiWorker.ts` 수정 (parseDueDate + AI 병합 + `now()` 주입)
- `src/main/repository/NoteRepository.ts` 수정 (`updateAiResult.dueDate?`, `setDueDate`, hydrate)
- `src/main/ipc/inboxApi.ts` 수정 (`inbox:setDueDate` 핸들러)
- `src/preload/index.ts` 수정 (`setDueDate` expose)
- `src/shared/types.ts` 수정 (`Note.dueDate`, `Note.dueDateEditedByUser`, `InboxApi.setDueDate`)
- `src/renderer/inbox/components/NoteCard.tsx` 수정 (`DueDateBadge` 컴포넌트 + onSave)
- 테스트 신규/확장: migrations, parser, schema, repo, AiWorker — 약 +44 단위 테스트

## 후속 (별 spec 또는 후속 항목 후보)

- **F7 AI-primary due_date flow** (🚀 promoted 2026-04-26) → `docs/superpowers/specs/2026-04-26-f7-ai-primary-due-date.md` — 본 spec 의 "rule 우선 → AI fallback" 흐름을 "AI 우선 + rule 은 prompt 후보 힌트" 로 반전. `'내일 모레'` first-match-wins 한계 해소
- 별도 due 뷰 / 정렬 / 필터
- 만료 자동 처리 (자동 done 또는 자동 알림)
- 시각 단위 (오후 3시, 23:30 등) 처리
- 음력 / 절기
- 반복 일정 (매주 월요일, 매월 1일 등)
- 외부 캘린더 연동 (Google / Apple Calendar)
- 다중 매칭 처리 (현재는 first-match-wins; 가장 가까운 / 가장 명확한 등 옵션) — F7 으로 일부 해결
- AI 매칭 confidence 표시 (medium 일 때 사용자에게 "확실하지 않음" 힌트)
- 시각 표시 옵션 (D-day 카운터 등)
