docs(spec): promote F7 AI-primary due date

신규 spec 파일 추가 (구현 결과 반영). dogfood-feedback.md 의 F7
헤더 🔬 drafting → 🚀 promoted 로 갱신. F1 spec 의 후속 리스트에
F7 링크 추가.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit was merged in pull request #11.
This commit is contained in:
altair823
2026-04-26 13:07:06 +09:00
parent 723dccd61d
commit 579450ef4f
3 changed files with 49 additions and 2 deletions

View File

@@ -816,7 +816,9 @@ slice §1.3 종료 조건 ("크래시 0회") 와 별개로, **"데이터 손실
---
## F7. Due Date 규칙 파서가 합성 표현을 first-match-wins 로 오인 (🔬 drafting)
## F7. Due Date 규칙 파서가 합성 표현을 first-match-wins 로 오인 (🚀 promoted)
**진행 상태:** 🚀 promoted (D AI-primary 채택) → `docs/superpowers/specs/2026-04-26-f7-ai-primary-due-date.md`
**발견:** 2026-04-26 v0.2.1 dogfood 첫 사이클. 본문에 `"내일 모레"` 가 들어간 노트가 due_date = 내일 (today + 1) 로 추출됨. 사용자 의도는 "모레" 또는 "이틀 안" 정도의 모호 표현.

View File

@@ -39,12 +39,13 @@
## 후속 (별 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; 가장 가까운 / 가장 명확한 등 옵션)
- 다중 매칭 처리 (현재는 first-match-wins; 가장 가까운 / 가장 명확한 등 옵션) — F7 으로 일부 해결
- AI 매칭 confidence 표시 (medium 일 때 사용자에게 "확실하지 않음" 힌트)
- 시각 표시 옵션 (D-day 카운터 등)

View File

@@ -0,0 +1,44 @@
# F7 AI-Primary Due Date Spec (Promoted)
**Extracted from:** `2026-04-25-dogfood-feedback.md` F7
**Plan:** `docs/superpowers/plans/2026-04-26-f7-ai-primary-due-date.md`
**Status:** 🚀 promoted — implemented 2026-04-26
## 결정 (mini-brainstorm 결과)
| 결정 | 값 | 근거 |
|------|-----|------|
| Flow 반전 | AI 우선 + rule 은 prompt 후보 힌트 | F7 D 채택 |
| AI 실패 시 fallback | 없음 (due_date null) | 단순화, setDueDate ambiguity 회피 |
| 후보 주입 | `parseAllCandidates` 가 모든 high+medium 매치를 prompt 에 list 로 주입 | AI 종합 판단 |
| `parseDueDate` 보존 | YES (backward compat, 후속 spec 에서 deprecate 결정) | 비파괴 |
| schema 변경 | 없음 | 기존 컬럼 재사용 |
| confidence DB 저장 | 미저장 | F7 §C 후속 |
| PROMPT_VERSION | 3 (semantic 변경) | hints 추가 |
## 범위 (PR 안에 포함됨)
- `src/main/services/dueDateParser.ts``parseAllCandidates` 신규 + 기존 `parseDueDate` 보존 (overlapping-span suppression 포함)
- `src/main/ai/prompt.ts``buildPrompt(rawText, todayKst, candidates)` 확장, `PROMPT_VERSION = 3`
- `src/main/ai/InferenceProvider.ts``GenerateInput.dueDateCandidates: ParseResult[]`
- `src/main/ai/LocalOllamaProvider.ts` — pass-through
- `src/main/ai/AiWorker.ts` — flow 반전 (rule.iso ?? ai → ai.dueDate ?? null), `dueDateSource: 'ai' | 'none'` + `candidatesCount` 로깅
- 테스트 — `parseAllCandidates` 7 + AiWorker flip 1 + 신규 candidates 주입 검증 1, LocalOllamaProvider sig 동기화
## 동작 변화 요약
| 입력 | 기존 (F1) | 신규 (F7) |
|------|----------|----------|
| `'내일 회의'` + AI=`'2026-12-31'` | `'2026-04-27'` (rule 우선) | `'2026-12-31'` (AI 우선) |
| `'내일 모레 회의'` + AI=`null` | `'2026-04-27'` (rule first-match) | `null` (AI 가 ambiguous 인지) |
| `'월말 마감'` + AI=`'2026-04-30'` | `'2026-04-30'` (rule null → AI) | `'2026-04-30'` (AI) |
| 매치 없음 + AI=`null` | `null` | `null` |
| AI 실패 (3 retry exhausted) | `markAiFailed` (due_date 그대로) | `markAiFailed` (due_date 그대로 — 별 fallback 없음) |
## 후속 (F7 §C / D / E 의 다른 부분)
- F7 §C: confidence + matched span 을 DB 에 저장 + UI `?` 표시
- F7 §A·B (즉시 화이트리스트 + 충돌 감지) — D 채택으로 사실상 자연 해결
- E (rule 폐기): `parseAllCandidates` deprecate 가 별 단계
- AI uptime / 수용률 데이터 1주 누적 후 D 의 안정성 평가
- `parseDueDate` 의 deprecate 시점: `parseAllCandidates` 로 모든 호출 마이그레이션 후