# task-2993 (DRAFT — 회장 승인 대기) — 인슈위키 임베딩 의미공간 통일 (768 ko-sroberta 단일화)

status: DRAFT / 미발사
근거: ANU 독립검증 (task-2992 수집) 2026-08-21 KST
base: origin/master = d5859a94ab941d65e0b331245d75e4f1b3e0a38c

## 배경 — t2989/PR#5 로 해결되지 않은 것

t2989(PR #5)는 3072차원 오염원 **4곳 중 1곳**(crawlYoutubeChannels.ts)만 차단했다.
ANU 가 master 전수 스윕한 결과 나머지가 그대로 남아 있다.

### 생산자 (벡터 write)
| 파일 | 모델 | 차원 | t2989 조치 |
|---|---|---|---|
| functions/src/crawlYoutubeChannels.ts | gemini-embedding-001 | 3072 | PR#5 로 제거됨 |
| functions/src/generateYoutubeChannelInsight.ts | gemini-embedding-001 | 3072 | 미조치 |
| functions/src/embeddingMatching.ts | gemini-embedding-001 | 3072 | 미조치 |
| nextapp/src/app/api/ai/index-wiki/route.ts | gemini-embedding-001 | 3072 | 미조치 |
| functions/src/pdfIndexing.ts | text-embedding-004 | 768 | 미조치 (차원만 우연히 일치) |

### 소비자 (질의 임베딩)
| 파일 | 모델 | 차원 |
|---|---|---|
| nextapp/src/app/api/ai/vector-search/route.ts:357 | text-embedding-004 | 768 |
| nextapp/src/app/api/admin/insurance/terms/[productId]/search/route.ts:55 | text-embedding-004 | 768 |
| nextapp/src/hooks/useSemanticSearch.ts:31 | gemini-embedding-001 | 3072 |

## 핵심 위험 — 단순 미전환보다 나쁘다

1. **의미공간 혼입**: t2989 이 `insurance_chunks` 303건을 ko-sroberta 768 로 재색인했는데,
   `pdfIndexing.ts` 는 여전히 text-embedding-004 768 을 **같은 컬렉션에** 쓴다.
   차원이 같아 fail-closed 가 걸리지 않으므로 **두 개의 호환 불가 768 공간이 조용히 섞인다.**
2. **소비자 불일치**: 질의는 text-embedding-004 768, 문서는 ko-sroberta 768.
   차원이 맞아 에러가 없고 결과도 나오지만 **유사도가 무의미**.
3. 현재 GEMINI_API_KEY 폐기로 미발현. **키 복구 순간 조용히 틀린 검색 결과** → 금소법 리스크.

## 범위
- 생산자·소비자 전 8지점을 ANU 로컬 임베딩 서비스(ko-sroberta-multitask, 768)로 통일
- 컬렉션별 재색인 + 혼입 벡터 판별/무효화 (차원만으로는 구별 불가 → provenance 필드 필요)
- fail-closed: 모델 provenance 불일치 시 write 거부

## 선행 조건
- PR #5 머지 (회장 waive 결정 대기)
- 로컬 임베딩 서비스 가용성 확인 (loopback 전용 — Cloud Functions 에서 도달 불가 → 아키텍처 결정 필요)

## ★ 미해결 설계 질문 (위임 전 회장/ANU 결정 필요)
Cloud Functions(서버리스)는 jay 로컬 loopback 임베딩 서비스에 **도달할 수 없다.**
t2989 이 crawlYoutubeChannels 에서 임베딩을 아예 제거한 것도 그래서다.
→ 나머지 생산자도 같은 방식(임베딩 제거 + 로컬 배치가 채움)으로 갈지,
   아니면 임베딩 서비스를 외부 노출(인증 포함)할지 **아키텍처 결정 선행**.
