# task-1599.1 완료 보고서: Firebase Rules + Indexes 배포

## SCQA

**S**: InsuWiki 프로젝트(insuwiki-j2h)의 firestore.rules와 firestore.indexes.json이 로컬에서 수정되었으나 Firebase에 배포되지 않은 상태였다.

**C**: 미배포로 인해 앱에서 "Missing or insufficient permissions" 에러가 발생하여 Wiki 탭의 문서 접근이 불가능했다.

**Q**: Firestore Rules/Indexes를 배포하여 권한 에러를 해소하고, 앱의 정상 동작을 복구할 수 있는가?

**A**: Rules와 Indexes 모두 성공적으로 배포 완료. Indexes 배포 시 벡터 인덱스 형식 오류 2건(treeAh→flat 변경, 3072차원 초과)을 발견하여 자체 수정 후 배포. 대시보드 서비스도 재시작하여 active(running) 상태 확인. 총 4단계 모두 성공.

## 작업 수행 내역

### 1. Firestore Rules 배포
- 명령: `firebase deploy --only firestore:rules`
- 결과: `firestore.rules compiled successfully` → `released rules firestore.rules to cloud.firestore`
- 판정: **성공**

### 2. Firestore Indexes 배포
- 명령: `firebase deploy --only firestore:indexes --force`
- 결과: `deployed indexes in firestore.indexes.json successfully for (default) database`
- 판정: **성공** (중간 오류 2건 수정 후)

### 3. 배포 확인
- 명령: `firebase firestore:indexes`
- 결과: JSON 인덱스 목록 정상 반환 (documents, insurance_chunks, youtube_knowledge 등)
- 판정: **성공**

### 4. 대시보드 서비스 재시작
- 명령: `systemctl --user restart dashboard.service`
- 결과: `Active: active (running)` (PID 782535, 포트 8000)
- 판정: **성공**

## 발견 이슈 및 해결

### 자체 해결 (2건)
1. **벡터 인덱스 vectorConfig 형식 오류** — `treeAh: {}` → `flat: {}` 수정
   - 상세: Firestore가 `flat` 키를 요구하나 기존 파일은 `treeAh` 사용. insurance_chunks, youtube_knowledge 2개 벡터 인덱스 수정.
2. **embeddings 3072차원 벡터 인덱스 플랫폼 제한 초과** — 해당 인덱스 항목 제거
   - 상세: Firestore 벡터 인덱스 최대 dimension은 2048. embeddings 컬렉션의 vector 필드(3072차원) 인덱스를 indexes.json에서 제거 후 배포 성공.

### 범위 외 미해결 (1건)
1. **embeddings 3072차원 벡터 검색 대안 필요** — 범위 외 사유: embeddingMatching.ts에서 3072차원 벡터 검색을 사용할 경우, Vertex AI Vector Search 등 별도 벡터 DB 마이그레이션이 필요. 이는 아키텍처 변경 사항으로 별도 태스크 필요.

## 수정 파일 목록

- `/home/jay/projects/insuwiki/firestore.indexes.json` — vectorConfig 형식 수정(flat), embeddings 3072차원 인덱스 제거

## 앱 접속 테스트

Wiki 탭 문서 표시 및 "Missing or insufficient permissions" 에러 해소 여부는 수동 확인 필요 (Rules 배포 후 권한 규칙이 적용되므로 해소 예상).

## 모델 사용 기록
- 팀원: 불칸 / 작업 내용: Firebase Rules+Indexes 배포 및 오류 수정 / 사용 모델: sonnet / 정당성: -

## QC 자동 검증

- **전체 결과**: PASS (5 PASS, 7 SKIP)
- **TRUST 5차원**: T(Tested)=PASS, R(Readable)=PASS, U(Unified)=PASS, S(Secured)=PASS, T(Trackable)=PASS
- file_check: PASS (6,159 bytes)
- data_integrity: PASS
- critical_gap: PASS
- spec_compliance: PASS
- duplicate_check: PASS (최대 유사도 12.2%)
- test_runner: SKIP (관련 테스트 파일 0개)
- tdd_check: SKIP (파일 변경 없음)
- pyright_check: SKIP (Python 파일 없음)
- style_check: SKIP
- scope_check: SKIP
- schema_contract: SKIP
