# 📊 InsuWiki 프로젝트 상태 대시보드

> **마지막 업데이트**: 2026-02-25 12:51  
> **현재 단계**: ✅ 하이브리드 RAG 시스템 (Option F) 백엔드 + 프론트엔드 통합 완료

---

## 📈 진행 현황 (Overall Progress)

```mermaid
pie title Project Completion
    "작업 완료" : 100
    "진행 중" : 0
    "대기 중" : 0
```

## 🚥 시스템 상태 (System Health)

| 구분 | 상태 | 비고 |
| :--- | :---: | :--- |
| **Auth (Firebase)** | 🟢 | 정상 작동 (Google) |
| **Storage (G-Drive)** | 🟢 | 정상 작동 (OAuth2 적용 완료) |
| **Database (Firestore)** | 🟢 | RAG 전용 컬렉션 추가 (`jobs`, `gemini_file_cache`, `insurance_metadata`) |
| **Backup (GCS)** | 🟢 | Cloud Functions (04:00 KST) 자동 백업 |
| **Deployment (Vercel)** | 🟢 | 정상 작동 (master 자동 배포) |
| **Editor (TipTap)** | 🟢 | `[[` 자동완성 근본 원인 수정 완료 |
| **Search (Fuse.js + es-hangul)** | 🟢 | 한글 초성 검색 + AI 매직 검색 + 약관 PDF 탭 3탭 체계 |
| **Share Target (PWA)** | 🟢 | My 노트 저장 위치 버그 수정 완료 |
| **Trash (휴지통)** | 🟢 | `/trash` 페이지 신규 구현 완료 |
| **RAG (Long-Context PDF)** | 🟢 | Cloud Functions V2 → Gemini File API 롱 컨텍스트 파이프라인 완성 |
| **AI Polling UI** | 🟢 | SearchModal 약관 PDF 탭 + useAIPolling 훅 (3분 타임아웃 방어) |

---

## 🛠️ 최근 완료된 작업 (Recent Achievements)

### 🧠 하이브리드 RAG 시스템 전체 완성 (260225)

> Task 48 — `docs/tasks/task00048-260225-00.41-notebooklm-drive-integration.md`  
> 회의록: `docs/meetings/260225-00.41-notebooklm-drive-integration-agent-meeting.md`

**[Phase 0 PoC]**
- [x] **Gemini Vision API (2.5-flash) + File API** 조합으로 보험료 표 파싱 오차율 0% 달성
- [x] `responseMimeType: "application/json"` 강제화로 JSON 규격 출력 안정화
- [x] Plan B (Google Sheets 수동 입력) 폐기 확정

**[백엔드 인프라]**
- [x] Firestore 컬렉션 스키마 정의: `jobs` (10분 TTL), `gemini_file_cache` (48시간 TTL), `insurance_metadata`
- [x] `firestore.rules`에 보안 규칙 및 TTL 가이드라인 반영
- [x] `functions/src/ragQuery.ts`: Cloud Functions V2 롱 컨텍스트 워커 (`timeoutSeconds: 540`)
  - Google Drive 다운로드 → Gemini File 업로드 → Cache Hit/Miss 판별 → LLM 추론 → 상태 업데이트
- [x] `POST /api/ai/query`: Job 문서 생성 및 즉시 jobId 응답 (Vercel 타임아웃 우회)
- [x] `GET /api/ai/status`: 폴링 상태 조회 API
- [x] `POST /api/ai/invalidate-cache`: 원본 갱신 시 캐시 강제 삭제 웹훅

**[프론트엔드 통합]**
- [x] `hooks/useAIPolling.ts`: 4초 폴링 + 3분 타임아웃 방어 커스텀 훅
- [x] `components/search/InsurancePDFQuery.tsx`: 회사→상품 선택 드롭다운, 스켈레톤 로딩, 에러 UI
- [x] `SearchModal` / `SearchInput`: 약관 PDF 탭 3탭 체계로 확장 (`insurance` 모드 추가)
- [x] TypeScript 빌드 오류 없음 확인 

### ✏️ 문서 변경 이력(History) 복구 UX 개선 (260224 23:10)

> task00047 관련

- [x] **[UX]** 복구 시 안심형 메시지 및 `[♻️ 복구됨]` 뱃지 추가
- [x] **[BUG FIX]** Squash 로직이 복원 리비전을 덮어쓰던 문제 수정 (`isRestore=true` 플래그)

### 🤖 AI 설정(API 키) UI/UX 개선 (260224 22:50)

- [x] **[UX]** AISettingsModal GlobalHeader 이동, 마스킹, Ping 테스트, 모델 드롭다운

### 📱 모바일 서브네비바 UX 개선 (260224)

- [x] **[UX]** 서브네비바 2줄 레이아웃, GlobalHeader 통합

---

## 📌 현재 확인된 이슈 / 다음 과제

| 우선순위 | 항목 | 상태 |
| :--- | :--- | :--- |
| 🔴 높음 | **Step 3: Query Router 구현** (`classifyQuery()` A/B/C/AMBIGUOUS 분기) | 다음 세션 착수 예정 |
| 🔴 높음 | **Step 5: Vector 인덱싱 파이프라인** (`insurance_chunks` + Gemini Embedding) | 다음 세션 착수 예정 |
| 🔴 높음 | `Cloud Functions 배포` (`firebase deploy --only functions`) | 미실행 |
| 🟡 중간 | `insurance_chunks.embedding` 벡터 인덱스 Firestore Console 설정 | Step 5 전에 수행 |
| 🟡 중간 | `insurance_metadata` 초기 데이터 시딩 | 시딩 스크립트 작성 필요 |
| 🟡 중간 | **Step 9: insurance_tables** 구현 (Gemini Vision ETL or Sheets 동기화) | Phase 0 결과 기반 |
| ⚪ 낮음 | 관리자 모드 통합 페이지 구현 | 별도 세션 예정 |
