# InsuWiki 양방향 동기화 Level 3 수정 — 5건 버그 + 데이터 재동기화

## ★★★ 핵심 원칙 ★★★
InsuWiki Firestore가 source of truth. 대시보드 데이터가 틀려있음. Firestore 기준으로 대시보드 데이터를 맞춰야 함.

## BUG 1 (Critical): do_POST global 변수 선언 누락

**파일**: `/home/jay/workspace/dashboard/server.py` Line 5249 부근

**현재**:
```python
def do_POST(self):
    global _wiki_entries, _wiki_loaded, _wiki_sync_status
    # ❌ _wiki_statuses 누락!
```

**수정**:
```python
def do_POST(self):
    global _wiki_entries, _wiki_loaded, _wiki_sync_status, _wiki_statuses
```

## BUG 2 (Critical): sync-firestore 핸들러 global 누락

**파일**: `/home/jay/workspace/dashboard/server.py` Line 6349, 6355 부근

**현재**: `/api/wiki/sync-firestore` 핸들러 내에서 `_wiki_loaded = False`, `_wiki_sync_status = ...` 할당 시 global 선언 없음

**수정**: 핸들러 진입 시 global 선언 추가
```python
if self.path == "/api/wiki/sync-firestore":
    # global 선언 필요한 변수들 확인 후 추가
```

주의: Python에서 함수 내 중첩 블록의 global은 함수 최상위에서 선언해야 함. do_POST 최상위의 global 선언에 포함되어 있으면 BUG 1 수정으로 같이 해결될 수 있음. 확인 필요.

## BUG 3 (High): 데이터 불일치 → Firestore 기준 재동기화

**데이터 현황**:
- wiki-entries.json: 219건 (정제 추출 결과)
- wiki-statuses.json: 16건만 상태 기록 (나머지 203건은 상태 미지정)
- wiki-sync-status.json: 105건만 sync 기록

**수정**: Firestore에서 현재 승인 상태를 읽어와서 wiki-statuses.json 갱신
- `/home/jay/workspace/dashboard/data/wiki-statuses.json`
- `/home/jay/workspace/dashboard/data/wiki-sync-status.json`

방법:
1. Firestore documents 컬렉션에서 insight 기반 문서 조회
2. 각 문서의 status (approved/rejected/draft) 확인
3. wiki-statuses.json에 반영
4. wiki-sync-status.json에 doc_id 매핑 갱신

★ Firestore 접근은 `/home/jay/projects/insuwiki/` 프로젝트의 Firebase Admin SDK 사용 가능.
Firebase 서비스 계정: `/home/jay/.config/gcloud/service-accounts/insuwiki-j2h-fa603f4f75f5.json`
★ Firestore 프로젝트 ID 확인 필요: `/home/jay/projects/insuwiki/firestore.rules` 또는 `.firebaserc` 참조

## BUG 4 (High): DASHBOARD_API_URL 환경변수

**파일**: `/home/jay/projects/insuwiki/nextapp/.env.local`

**확인**: `DASHBOARD_API_URL` 변수가 설정되어 있는지 확인
- InsuWiki와 대시보드가 같은 서버(100.76.130.39)에서 실행 중이면 `http://localhost:8000` OK
- 다른 서버면 실제 IP 필요

**관련 코드**: `/home/jay/projects/insuwiki/nextapp/src/app/api/wiki/insights/[id]/review/route.ts` Line 6, 121

## BUG 5 (Medium): approve 핸들러 entry 미발견 시 처리

**파일**: `/home/jay/workspace/dashboard/server.py` Line 6533 부근

**현재**: entry가 _wiki_entries에 없으면 404 반환 → 콜백 중단

**수정**: entry가 없어도 statuses/sync_status는 업데이트. 404 대신 로깅 후 진행.
```python
entry = next((e for e in _wiki_entries if e.get('id') == entry_id), None)
# entry가 없어도 상태 업데이트는 진행
_wiki_statuses[entry_id] = new_status
# wiki-statuses.json 저장
```

## 검증 시나리오
1. **Global 변수**: approve API 호출 후 같은 세션에서 /api/wiki/stats 호출 → 승인 카운트가 즉시 증가하면 성공
2. **Sync global**: sync-firestore 호출 후 같은 세션에서 /api/wiki/stats 호출 → synced 카운트 변경 반영되면 성공
3. **데이터 정합성**: Firestore의 approved 문서 수 == 대시보드 wiki-statuses.json의 approved 수 → 일치하면 성공
4. **콜백 정상**: InsuWiki review API에서 승인 → 대시보드 API 로그에 콜백 수신 확인
5. **Entry 미발견**: 존재하지 않는 entry_id로 approve 호출 → 200 반환 + 상태 저장되면 성공
6. **기존 기능**: 대시보드 InsuWiki탭 전체 기능 정상 동작
