# 📊 InsuWiki 프로젝트 상태 대시보드

> **마지막 업데이트**: 2026-02-25 19:50  
> **현재 단계**: ✅ 하이브리드 RAG (대안 F) 파이프라인 Cloud Functions 배포 성공 및 AI 검색 인프라 확보 — 질의 라우팅(Query Router) 구현 예정

---

## 📈 진행 현황 (Overall Progress)

```mermaid
pie title Project Completion
    "작업 완료" : 100
    "진행 중" : 0
    "대기 중" : 0
```

## 🚥 시스템 상태 (System Health)

| 구분 | 상태 | 비고 |
| :--- | :---: | :--- |
| **Auth (Firebase)** | 🟢 | 정상 작동 (Google) |
| **Storage (G-Drive)** | 🟢 | RAG 소스 원본 동기화 완료 |
| **Database (Firestore)** | 🟢 | `jobs`, `gemini_file_cache` 등 V2 스키마 및 TTL 적용 완비 |
| **AI (Gemini)** | 🟢 | `2.5-flash` RAG 기능 (Flash/Pro) 100% 검증 |
| **Functions (GCP)** | 🟢 | 2세대 롱컨텍스트 워커 타임아웃/시크릿 해결, 배포 성공 |
| **Deployment (Vercel)** | 🟢 | 정상 작동 (master 자동 배포) |
| **Editor (TipTap)** | 🟢 | `[[` 자동완성 근본 원인 수정 완료 |
| **Search (Fuse.js + es-hangul)** | 🟢 | 한글 초성 검색 완벽 지원 |

---

## 🛠️ 최근 완료된 작업 (Recent Achievements)

### 🚀 하이브리드 RAG (대안 F) 파이프라인 및 백엔드 인프라 완비 (260225 19:50)

> 관련 스펙: `docs/specs/260225-Insuwiki-rag-spec-update.md`

- [x] **[INFRA]** Firestore 및 Cloud Functions (2nd Gen) 스키마/엔드포인트 연동
  - `jobs`, `gemini_file_cache`, `insurance_metadata` V2 스키마 정의 및 TTL(Time To Live) 정책 반영 (10분/48시간 자동 소각 체제)
  - Vercel API 라우터 단에서 Polling 기반 `POST /api/ai/query`를 제공하여 사용자 무한 대기 연결 붕괴(timeout) 방지
- [x] **[BACKEND]** 서버리스 롱 컨텍스트 RAG (`processInsuranceQuery`) 워커 구축 완료
  - 10초 타임아웃을 우회하는 최대 9분 실행 보장 인프라 구성 (V2 `timeoutSeconds: 540`, `1GiB`)
  - Google Drive 연동 → Gemini File API 병렬 업로드 및 48시간 캐싱 → Gemini 2.5 Flash 기반 추론 과정 완비
- [x] **[TROUBLESHOOTING]** Firebase 배포 10초 타임아웃 및 Secret Manager 연동 해결
  - Google ADC로 인한 메타데이터 서버 지속 룩업(Timeout) 현상을 분석하고 `FUNCTIONS_DISCOVERY_TIMEOUT` 30초 확대 적용 스크립트(`deploy-with-creds.ps1`) 작성
  - `.env.local` 파싱을 통한 Firebase Secret Manager(`GEMINI_API_KEY`, `YOUTUBE_API_KEY`) CLI 자동 주입 파이프라인 구축 및 최종 배포 100% 성공 보장
- [x] **[FEATURE]** YouTube 채널 시딩 및 자동화 파이프라인 시작
  - `seedYoutubeChannels.ts` 개발 및 초기 수동 시딩 완료 (보험명의정닥터, ins-king)
  - 6시간 간격의 Cloud Scheduler 트리거 (`crawlYoutubeChannels`) 함수 배치 완료



### ♻️ 문서 변경 이력(History) 복구 UX 개선 (260224 23:10)

> 관련 이슈: [문서 복원(Restore)] 시 유실 우려 안심 메시지 제공 및 복원본 스쿼시 버그 해결

- [x] **[UX/UI IMPROVEMENT]** 복구 불안감 해소를 위한 사용자 안내 강화
  - 복구 버튼 클릭 시 노출되는 `window.confirm` 메시지에 "현재 작성 중인 최신 내용도 히스토리에 안전하게 백업된다"는 안심형 문구 명시
  - 이력 리스트 상에서 '복구를 통해 생성된 리비전'임이 잘 식별되도록 **`[♻️ 복구됨]`** 인디고 색상 뱃지 추가 노출
- [x] **[BACKEND BUG FIX]** 복원 리비전 분리 저장 (Squash 회피)
  - 5분 이내 연속 편집 시 히스토리를 합쳐서 덮어쓰는(Squash) 로직이 복원(Restore) 시에도 오작동하여 복원된 이력을 갈아엎던 버그 수정
  - 복원 전용 플래그(`isRestore=true`)를 통해 **복원으로 생성된 기록은 스쿼시 로직을 무조건 우회**하여 늘 독립적인 새 버전으로 시간선에 깔끔히 적재되도록 트랜잭션 수호 완료
  - 커밋: `예정`

### 🤖 AI 설정(API 키) UI/UX 개선 및 Ping 테스트 연동 (260224 22:50)

> 관련 이슈: [AI 설정 모달] 전역 렌더링 이동 및 모델 지원 목록 선택 드롭다운 구현

- [x] **[UX/UI IMPROVEMENT]** AI 설정 모달 접근성 및 편의성 강화
  - `AISettingsModal` 컴포넌트를 `GlobalHeader`로 이동하여 앱 내 어디서든 프로필 메뉴를 통해 점검 가능
  - API 키 보유 여부에 따라 입력창을 `****************` 텍스트로 마스킹하고 `[키 수정]` 버튼을 제공해 실수 방지
- [x] **[FEATURE]** Gemini API Ping 테스트 및 지원 모델 리스트업
  - 백엔드(`/api/ai/settings`)에서 저장된 키를 바탕으로 Google 모델 리스트 조회(Ping) 테스트 수행
  - 모달 렌더링 시 **🟢 연동 원활** 뱃지와 함께 **사용 가능한 AI 엔진 모델명(예: Gemini 1.5 Pro)을 드롭다운으로 표시**, 선택 기능 지원
- [x] **[BACKEND]** 키 업데이트 및 삭제 생명주기 완벽 관리
  - 백엔드에서 클라이언트에 API 원문 대신 마스킹(hasKey)과 Ping Status 데이터만 제공하도록 보안 처리
  - 빈 값을 보낼 시 Firestore DB에서 AI Key 노드 삭제 로직(`FieldValue.delete`) 구현
  - 커밋: `예정`


### � PWA 공유 중복 문서 생성 방지 및 작성자명 표시 개선 (260224 21:00)

> 관련 이슈: jonghyuk.jeon 누락 및 안효정 카드 2장 중복 생성 건

- [x] **[BUG FIX]** 문서 작성자명 강제 치환 적용
  - 구글 로그인 후 `displayName` 누락 시 할당되던 `jonghyuk.jeon`을 `전종혁`으로 변환 렌더링
  - 카드 뷰, 리스트 뷰, 문서 하단 영역 및 Revision History 아바타 이니셜(`j` → `전`)까지 강제 적용 완료
  - 커밋: `34941fa`, `ee6e851`
- [x] **[BUG FIX]** PWA 외부 공유 중복 방지 (Race Condition 해결)
  - `api/share-target` 라우터의 `saveToMyNote` 로직에 `adminDb.runTransaction()` 도입
  - 여러 공유 요청이 동시에 들어왔을 때 단일 조회-저장(Lock)으로 원천 차단
  - 커밋: `52b50e7`

### 📱 모바일 서브네비바 UX 개선 및 헤더 통합 (260224 10:30)

> `task00046` 참고
> 관련 파일: `docs/meetings/260224-10.16-mobile-subnav-ux-agent-meeting.md`

- [x] **[UX IMPROVEMENT]** 문서 상세 페이지 모바일 뷰 개편
  - 서브네비바(SubNavBar)를 2줄 레이아웃으로 변경하여 긴 제목 가시성 확보 및 버튼 터치 오류 방지
  - 모바일 목차(TOC) 토글 버튼을 제거하여 공간 확보
- [x] **[REFACTOR]** 글로벌 헤더(`GlobalHeader.tsx`) 통합
  - 헤더 영역의 개별 아이콘 버튼들 정리
  - 사용자 프로필 드롭다운 메뉴 내에 `AI 설정`, `휴지통` 링크 위치 변경
  - 커스텀 이벤트(`open-ai-settings`) 도입으로 컴포넌트 간 결합도 완화
  - 커밋: `59b1b14`

### 🗑️ 휴지통(Trash) 기능 구현 (260224 01:45)

> `task00045` 참고  
> 관련 파일: `docs/specs/document-delete-flow.md`, `docs/meetings/260224-01.24-trash-feature-agent-meeting.md`

- [x] **[NEW FEATURE]** `/trash` 페이지 신규 구현
  - `GlobalHeader.tsx`: 🗑️ 휴지통 링크 (현재는 프로필 메뉴 안으로 통합됨)
  - `app/trash/page.tsx`: 서버 컴포넌트 진입점
  - `app/trash/TrashClient.tsx`: 삭제 문서 조회 / 복원 / 영구삭제(관리자)
  - 커밋: `62afa3b`

---

## 📌 현재 확인된 이슈 / 다음 과제

| 우선순위 | 항목 | 상태 |
| :--- | :--- | :--- |
| 🔴 높음 | **관리자 모드 통합 페이지 구현** | 다음 작업 예정 |
| 🟡 중간 | Wiki 편집 권한 제한 (Vandalism Protection) | 미구현 |
| 🟡 중간 | Revision History 복원 UI | 미구현 |
| 🟢 낮음 | 데스크톱 모바일 환경 여백(padding/margin) 최적화 | 보류 |
| 🟢 낮음 | 휴지통 자동 영구삭제 (30일) | 보류 |

---

## 🔜 다음 작업 계획: 관리자 모드

**목표**: 관리자 전용 기능을 하나의 `/admin` 페이지로 통합

**포함될 기능 (예상)**:
- 전체 휴지통 관리 (현재 `/trash`의 관리자 뷰 분리)
- 사용자 관리 (role 변경, Guest → Editor 승인)
- Revision History 복원 UI
- Wiki 편집 권한 설정
- 시스템 상태 모니터링

---

## 📚 주요 산출물 현황

| 파일 | 설명 |
| :--- | :--- |
| `docs/meetings/260224-10.16-mobile-subnav-ux-agent-meeting.md` | 하위 네비게이션 UX 9-Agent 미팅록 |
| `docs/tasks/task00046-260224-10.30-mobile-subnav-ux.md` | 모바일 서브네비바 구현 Task |
| `walkthrough.md` | 커스텀 이벤트 및 레이아웃 개선 증빙 문서 |
