# 브레인스토밍: 카카오톡 대화 정제 — 대시보드 InsuWiki 탭

**날짜**: 2026-04-12
**선택 대안**: A — 올인원 탭 확장
**승인 상태**: 제이회장님 확정

---

## 확정된 설계

### UX 흐름
```
InsuWiki 탭 상단 "카카오톡 정제" 섹션
  ↓
[1] 파일 업로드 (드래그앤드롭 + 파일 선택)
  ↓
[2] 날짜 범위 자동 감지 → 포함된 월 목록 표시
  ↓
[3] 1달 단위 선택 (드롭다운/체크박스)
  ↓
[4] "정제 시작" 클릭
  ↓
[5] 서버 subprocess로 pipeline-v2 백그라운드 실행
    - 프로그레스바 (서버 로그 polling, 탭 이동 후 복귀 시에도 표시)
    - 현재 처리 단계 표시 (스레드 분리 → Haiku 필터 → Sonnet 추출)
  ↓
[6] 완료 → 결과 리뷰 화면
    - 이상 항목 (confidence=low, 폴백 처리) ⚠️ 하이라이트
    - 정상 항목 랜덤 확인 가능
  ↓
[7] 제이회장님 수동 승인 → "Sync 이전"으로 반영
  ↓
[8] 이후 기존 흐름 (승인 → Sync 완료 → Firestore)
```

### 핵심 기능 상세

**업로드 + 날짜 감지:**
- txt 파일 업로드 시 서버에서 카카오톡 날짜 패턴 파싱
- "2026년 1월 ~ 2026년 4월" 같은 범위 표시
- 1달 단위 선택 UI

**백그라운드 실행:**
- server.py에서 subprocess로 `pipeline-v2 --use-llm --batch-size 20` 실행
- 진행 상태를 로그 파일에 기록, 프론트엔드가 2초마다 polling
- 프로그레스바 + 단계 텍스트 표시

**ID 연번 관리:**
- 기존 최대 번호(현재 insight-645) 이후부터 자동 부여
- 산출물 파일명에 타임스탬프 포함: `insights_v2_20260412_2008.json`, `insights_20260412_2008/insight-646.md`, `graph_20260412_2008.json`

**중단/복구:**
- 중간 결과를 배치 단위로 저장 (50 스레드마다)
- 서버 재시작 시 → "이어서 정제" 옵션 제공
- "취소" 버튼 → 이미 처리된 건 보존, 나머지 중단 → 나중에 "이어서 정제" 가능

**동시 정제 방지:**
- 정제 진행 중 "정제 시작" 버튼 비활성화
- "정제 작업 진행 중" 메시지 표시

**정제 이력 테이블:**
- 날짜, 파일명, 선택 기간, 추출 건수, 상태 (진행중/완료/취소/실패)
- 중복 업로드 시 경고 (같은 기간 이미 정제됨)

**기존 산출물 보호:**
- 업로드된 txt만 정제, 기존 데이터 재처리 안 함
- 새 산출물은 기존 번호 이후 연번, 별도 타임스탬프 파일로 구분

---

## spec-reviewer 검토 결과

| 차원 | 점수 |
|------|------|
| 완전성 | 6/6 ✅ |
| 일관성 | 5/5 ✅ |
| 명확성 | 4/4 ✅ |
| 실현가능성 | 4/4 ✅ |
| 테스트가능성 | 3/4 ⚠️ (81분 E2E 테스트 비용) |

## 필수 보완 반영
1. ✅ 정제 중단/복구: 중간 결과 저장 + "이어서 정제"
2. ✅ 동시 정제 방지: 락 + "정제 작업 진행 중" 메시지
3. ✅ 부분 취소: 처리된 건 보존 + 나머지 중단 + 이어서 작업 가능

## 참조
- 기존 파이프라인: `/home/jay/projects/insuwiki/scripts/kakao_knowledge/knowledge_extractor_v2.py` (946줄)
- 작업 체인: task-1554(설계) → 1576(첫 실행) → 1577(스레드 분리) → 1579(최종 실행)
- 현재 산출물: insight-001~645 (645개 마크다운) + graph.json
- 대시보드 데이터 소스: server.py:139 `_WIKI_ENTRIES_PATH`
