## 약관AI Phase 1 — 인프라 + 보안 강화

### 프로젝트 경로 (절대경로 사용)
/home/jay/projects/insuwiki/

### 작업 개요
InsuWiki 약관AI의 인프라 최적화 + 보안 최소 방어선 구축.

### 담당 파일
- firestore.indexes.json — ANN 인덱스 전환
- firestore.rules — 보안 규칙 강화
- nextapp/src/lib/security/ — 새 디렉토리 (rateLimiter.ts, injectionFilter.ts)
- nextapp/src/lib/cache/ — 새 디렉토리 (queryCache.ts)
- nextapp/src/types/firestore.ts — 타입 추가
- nextapp/src/lib/ai/versionFilter.ts — 새 파일 (버전 필터 유틸리티)
- functions/src/pdfIndexing.ts — 메타데이터 저장 부분만 (effectiveDate.end 자동 설정)
  ※ 청킹 로직(splitIntoChunks 등)은 1팀 담당. 절대 건드리지 말 것!

### 작업 1: CL-2 버전 관리
1. effectiveDateRange.end 필수화: 새 약관 인덱싱 완료 시 동일 productId 기존 문서에 end date 자동 설정 (Firestore 트랜잭션).
2. insurance_metadata에 generationType 필드: 'gen1'|'gen2'|'gen3'|'gen4'.
3. 버전 필터 유틸리티: nextapp/src/lib/ai/versionFilter.ts — 현행 버전만/시점 지정 필터 함수. (1팀이 vector-search에서 import해서 사용)
4. firestore.ts 타입 업데이트.

### 작업 2: CL-3 ANN + 캐싱
1. firestore.indexes.json: flat:{} → algorithm: TREE_AH, dimension: 768.
2. nextapp/src/lib/cache/queryCache.ts: 캐시 키 = 쿼리해시+productId+버전, TTL 24시간, Firestore query_cache 컬렉션.
3. firestore.ts에 QueryCache 타입 추가.

### 작업 3: CL-6 보안
1. Rate Limiting (nextapp/src/lib/security/rateLimiter.ts): 분 10/시간 100/일 500 쿼리. uid + IP 이중 제한. 429 반환.
2. 인젝션 방어 (nextapp/src/lib/security/injectionFilter.ts): 영문+한국어 패턴. 오탐 방지 화이트리스트. 200자 이상 지시문 의심.
3. firestore.rules: query_cache, rate_limits 서버 전용.

### 주의사항
- 1팀이 pdfIndexing.ts(청킹), vector-search/route.ts(검색), answerValidator.ts(필터) 수정 중.
- pdfIndexing.ts는 메타데이터 관련만. 청킹 함수 절대 금지.
- vector-search/route.ts 절대 금지. 버전 필터는 versionFilter.ts로 분리.