# task-1967+1 보고서: 인슈로 코드 vs 문서 ��수조사

**작성자**: 비슈누 (개발4팀장)
**작성일**: 2026-04-20
**검증 레벨**: critical (전수조사)
**코드 수정**: 없음 (감사/검증 전용)

---

## SCQA

**S**: 인슈로 3문서(checklist.md)에서 [x] 체크된 항목이 58건 존재한다. 기능 항목 47건, 게이트/프로세스 항목 11건이 검증 대상이다.

**C**: 보고서에 "완료"로 표기되어 있지만 실제 코드가 없거나, main 브랜치에 미반영된 항목이 존재한다. task-1962-dev1 브랜치(Phase 4 AI 자동화 4종)가 main 미반영이며, C6(OAuth 토큰 암호화) 코드가 전체 코드베이스에 없다.

**Q**: 58건의 [x] 항목 중 실제 코드가 없는 항목은 몇 건이며, 심각도는 어떠한가?

**A**: 기능 47건 중 적발 16건(34.0%). CRITICAL 5건(M3 subprocess미전환, C6 OAuth암호화없음, C1/C2/C4 Phase4 main미반영), WARNING 11건(스텁 2 + 부분구현 9). 정상구현 31건(66.0%).

---

## 1. 전체 통계

- **전체 [x] 항목 수**: 58건
  - 기능 항목: 47건 (코드 검증 대상)
  - 게이트/프로세스 항목: 11건 (G0-1~3, G1-1~4, G2-3~6, G3-1~6, G4-5~6, CP-3)
- **기능 항목 판정**:
  - 정상구현: 31건 (66.0%)
  - 부분구현: 9건 (19.1%)
  - 미구현: 5건 (10.6%)
  - 스텁만: 2건 (4.3%)
- **적발 총계**: 16건 (부분구현 9 + 미구현 5 + 스텁만 2)
- **적발률**: 34.0% (16/47)

---

## 2. 적발 목록 (CRITICAL — 미구현 5건)

### CR-1. M3. AI 호출 방식 통일 (subprocess→API)
- **체크리스트 위치**: Phase 1, line 43
- **grep 결과**: `ai_parser.py`와 `anu_provider.py` 모두 `subprocess.run(["claude", "-p", ...])` CLI 방식 그대로 유지
- **판정**: 미구현
- **심각도**: CRITICAL
- **근거**: Anthropic Python SDK 또는 HTTP API 방식으로의 전환이 전혀 이루어지지 않음. subprocess CLI 의존은 성능/안정성/비용 추적 모두에 악영향

### CR-2. C6. OAuth 토큰 관리 (AES-256-GCM 암호화)
- **체크리스트 위치**: Phase 4, line 244
- **grep 결과**: 전체 코드베이스에서 `AES`, `aes-256-gcm`, `encrypt`, `decrypt`, `Fernet`, `cryptography` 키워드 0건
- **판정**: 미구현
- **심각도**: CRITICAL (보안)
- **근거**: OAuth 토큰이 평문 저장되거나, 관리 체계 자체가 없음. 보안 핵심 항목

### CR-3. C1(Phase4). ThreadAuto 통합 — main 미반영
- **체크리스트 위치**: Phase 4, line 228
- **grep 결과**: main 브랜치에 `/api/insuro/ai/thread-auto` 엔드포인트 없음
- **판정**: 미구현 (main 기준)
- **심각도**: CRITICAL
- **근거**: task/task-1962-dev1 브랜치에만 스텁 API 존재, main 미반영

### CR-4. C2(Phase4). 티스토리 자동 업로드 — main 미반영
- **체크리스��� 위치**: Phase 4, line 231
- **grep 결과**: main에 `/api/insuro/ai/tistory-upload` 없음. UI 레이블("tistory-blog")만 존재
- **판정**: 미구현 (main 기준)
- **심각도**: CRITICAL
- **근거**: task/task-1962-dev1 브랜치에만 스텁 엔드포인트 존재, main 미반영

### CR-5. C4(Phase4). 스케줄링/배치 실행 — main 미반영
- **체크리스트 위치**: Phase 4, line 237
- **grep 결과**: main에 `/api/insuro/ai/schedule` 없음
- **판정**: 미구현 (main 기준)
- **심각도**: CRITICAL
- **근거**: task/task-1962-dev1 브랜치에만 스텁 존재

---

## 3. 적발 목록 (WARNING — 부분구현 7건 + 스텁 2건)

### WR-1. M5. Dashboard 깨진 라우트 수정
- **체크리스트 위치**: Phase 0, line 26
- **grep 결과**: Dashboard.tsx(343줄) 파일은 존재하나 routes.ts에 lazy import 및 라우트 등록 없음
- **판정**: 스텁만 (고아 파일)
- **심각도**: WARNING
- **근거**: 어떤 URL로도 접근 불가능한 고아 파일 상태

### WR-2. C3. 네이버 AI원스탑
- **체크리스트 위치**: Phase 4, line 234
- **grep 결과**: AiOnestop.tsx에 "2026년 하반기 출시 예정" 안내만 표시
- **판정**: 스텁만 (UI 플레이스홀더)
- **심각도**: WARNING (의도된 미구현 가능성 있음 — S1에서 "출시 예정 표시"로 이미 처리)
- **근거**: 단, 체크리스트에 [x]로 되어 있어 혼동 유��

### WR-3. M6. `as any` 캐스트 정리
- **체크리스트 위치**: Phase 1, line 47
- **grep 결과**: AdminSubscriptions.tsx 0건(클린), Settings.tsx에 17건 잔존
- **판정**: 부분구현
- **심각도**: WARNING
- **근거**: types.ts에 정의된 테이블(`user_cpa_links` 등)에 대해서도 `as any` 캐스트 미제거

### WR-4. P5. 채널 제한 구현
- **체크리스트 위치**: Phase 2, line 95
- **grep 결과**: 백엔드 `allowed_channels` 검증 구현됨, 프론트 UI 비활성화/잠금 안내 없음
- **판정**: 부분구현
- **심각도**: WARNING
- **근거**: 서버사이드 집행은 정상이나 UX 안내 부재 — 사용자가 403 에러만 받게 됨

### WR-5. F1. Free 사용자 AI 맛보기 (월 5회)
- **체크리스트 위치**: Phase 2, line 117
- **grep 결과**: 백엔드 429 집행 O, 프론트 배너에 "이번 달 {remainingCount}/5회" 표시하나 실제 소진 횟수를 DB에서 조회하지 않아 항상 "5/5회" 고정
- **판정**: 부분구현
- **심각도**: WARNING
- **근거**: 카운트다운 실시간 추적 로직 없음

### WR-6. D3. 인슈위키 기여 랭킹 시스템 설계
- **체크리스트 위치**: Phase 3, line 174
- **grep 결과**: 서버 API(`/api/insuro/wiki/contributions`, `/api/insuro/wiki/rankings`) 존재, 프론트엔드 UI 미구현
- **판정**: ��분구현
- **심각도**: WARNING
- **근거**: 백엔드만 있고 프론트 표시 없음 — "설계"로 한정하면 정상일 수 있으나 사용 불가 상태

### WR-7. CP-1. 경쟁사 비교 콘텐츠/랜딩 요소 구현
- **체크리스트 위치**: Phase 3, line 189
- **grep 결과**: Intro.tsx에 3사 언급하는 텍스트 설명 존재, 독립 비교 테이블/컴포넌트 없음
- **판정**: 부분구��
- **심각도**: WARNING
- **근거**: 인라인 텍스트 수준, 전용 비교 랜딩 섹션 미구현

### WR-8. AU-1 감사 로그 (G2-6 교차 검증)
- **체크리스트 위치**: Phase 2, line 122 (AU-1은 [ ]지만 G2-6은 [x])
- **grep 결과**: Supabase Edge Function(`generate-content`) 경유 시 `token_usage_log` INSERT. Python 서버(`main.py`) 경유 시 로깅 없음
- **판정**: 부분구현
- **심각도**: WARNING
- **근거**: 이중 경로 중 하나(Edge Function)에서만 감사 로그 기록

### WR-9. H4. KeywordAnalysis 3탭 완성
- **체크리스트 위치**: Phase 4, line 251
- **grep 결과**: 탭이 4개 존재. 첫 번째 탭(검색량 조회)만 실제 동작, 나머지 3개는 PremiumLocked 플레이스홀더
- **��정**: 부분구현
- **심각도**: WARNING
- **근거**: 무료 사용자에게는 잠금 UI만 보이고, 프리미엄에서도 실기능 1개만 동작

### WR-10. C7. 콘텐츠 팩토리 파이프라인 통합
- **체크리스트 위치**: Phase 4, line 254
- **grep 결과**: D→B→A 3단계 워크플로우 구현됨, 각 단계는 시뮬레이션("MVP: 시뮬레이션" 주석), C(채널 발행) 단계 미구현
- **판정**: 부분구현 (MVP 시뮬레이션)
- **심각도**: WARNING
- **근거**: 4단계(D→B→A→C) 중 C 미구현, A/B/D도 시뮬레이션 수준

### WR-11. T3. 통합 테스트 + E2E
- **체크리스트 위치**: Phase 4, line 263
- **grep 결과**: Vitest smoke 테스트 + Python pytest 통합 테스트 존재, Playwright/Cypress 등 E2E 프레임워크 미적용
- **판정**: 부분구현
- **심각도**: WARNING
- **근거**: 통합 테스트는 있으나 진정한 E2E 테스트 없음

---

## 4. 정상구현 목록 (33건)

| 항목 | 검증 결과 |
|------|-----------|
| C1. 테스트 계정 하드코딩 제거 | AuthForm.tsx useState("") 빈 초기값, 하드코딩 없음 |
| C2. AdminGuide isAdmin | useIsAdmin() 훅 + !isAdmin 차단 로직 확인 |
| C3. AdminCrmConfig isAdmin | C2와 동일 패턴 적용 확인 |
| C4. CustomerChat 인증 강화 | 토큰 만료 체크 + 5회 실패 시 5분 잠금 구현 |
| S1. H2/H3 출시 예정 시기 | "2026년 하반기 출시 예정입니다." 텍스트 확인 |
| M1. Supabase 타입 보완 | 45개+ 테이블 Row/Insert/Update 타입 정의 |
| M2. 월 필터 동적화 | DB에서 month_key 동적 조회 Select UI 확인 |
| M4. Naver API CORS 프록시 | /api/insuro/naver/search 프록시 엔드포인트 확인 |
| H6. DigitalNamecard CTA | handleStartChat → 토큰 생성 → /chat 이동 |
| H7. /api/ai/generate 스텁 해소 | 플랜 검증+모델 allowlist+사용량 제한+실 AI 호출 |
| T1. 테스트 인프라 | 30개 라우트 smoke 테스트 + vitest.config.ts |
| P1. 플랜 시드 5단계 | migration 3개로 sort_order 1~5 배정 |
| P2. 플랜 검증 미들웨어 | require_plan() FastAPI Depends 12+ 엔드포인트 적용 |
| P3. AI 모델 allowlist | PLAN_MODEL_ALLOWLIST + plan_ai_models 이중 구조 |
| P4. 사용량 제한 집행 | check_usage_limit() + 429 반환 |
| A1. 콘텐츠 프리셋 UI | CONTENT_PRESETS 블로그/SNS/제안서 3종 |
| A2. LockedFeatureOverlay | 블러+오버레이+PlanUpgradeDialog CTA |
| A3. FeatureGate | planFeatureMap.ts + FeatureGate 선언적 컴포넌트 |
| A4. PlanUpgradeDialog | DB 동적 로드 + normalisePlanTier |
| H5. CrmPipeline DnD | dnd-kit 3개 패키지 + DndContext 구현 |
| K1. AI 코파일럿 상담 | CopilotPanel + CrmMessenger 통합 |
| B1. 인포키워드 잠금 UI | FeatureGate + blur 처리 |
| B2. 인포키워드 백엔드 | /api/keywords/analyze + /result/{job_id} |
| B3. 인포키워드 접근 제어 | require_plan("맥스") 적용 |
| D1. 인슈위키 소개 페이지 | InsuWikiIntro.tsx 248줄 |
| D2. 인슈위키 FOMO | setInterval 카운터 + 성과 카드 |
| P6. CRM PlanGuard | CRM 5개 페이지 전부 PlanGuard 적용 |
| P7. 100명 한정 잠금 | SELECT FOR UPDATE + useRemainingSeats |
| CP-2. 차별화 섹션 | Intro.tsx "5가지 차별화" 카드 UI |
| C5. AutomationStepper | 3단계 워크플로우 시각화 |
| T2. 성능 최적화 | React.lazy 전 페이지 적용 + Suspense |

---

## 5. 게이트/프로세스 항목 판정 (11건)

게이트 항목은 "테스트 결과" 또는 "프로세스 수립" 성격이므로, 관련 기능 코드의 존재 여부로 간접 판정합니다.

| 항목 | 판정 | 근거 |
|------|------|------|
| G0-1. CRITICAL 4건 grep 검증 | 정상 | C1~C4 모두 코드 확인 |
| G0-2. 브라우저 접근 테스트 | 정상 | isAdmin 체크 코드 존재 |
| G0-3. Phase 0 완료 승인 | 정상 | 프로세스 항목 |
| G1-1~G1-4 Phase 1 게이트 | 정상 | 관련 코드 모두 존재 |
| G2-3. 무료→프로 403 | 정상 | require_plan 미들웨어 확인 |
| G2-4. 모델 변조 거부 | 정상 | PLAN_MODEL_ALLOWLIST 확인 |
| G2-5. 사용량 초과 429 | 정상 | check_usage_limit 확인 |
| G2-6. 감사 로그 기록 | WARNING | Edge Function만 기록, Python 서버 미기록 |
| G3-1~G3-6 Phase 3 게이트 | 정상 | 관련 기능 코드 모두 확인 |
| G4-5. ThreadAuto 포스팅 | WARNING | main 미반영 |
| G4-6. 파이프라인 E2E | WARNING | 시뮬레이션 수준 |
| CP-3. 경쟁사 모니터링 | 미확인 | 프로젝트 내 관련 문서 없음 |

---

## 6. 별도 브랜치 검증

### task/task-1962-dev1
- **main 머지 여부**: X (미반영)
- **변경 내용**: Phase 4 AI 자동화 API 4종 스텁 (thread-auto, tistory-upload, naver-onestop, schedule) + 테스트 350줄
- **영향**: C1(Phase4), C2(Phase4), C4(Phase4) 3건이 이 브랜치 때문에 main 미반영
- **조치 필요**: PR 머지 또는 체크리스트 [x] → [ ] 수정

### task/task-1964-dev1
- **main 머지 여부**: 부분 반영
- **반영된 항목**: conversation_summaries migration, SummaryTab.tsx, 요약 API 3종
- **미반영 항목**: 대화 요약 API 테스트 7건 (커밋 0b77983)
- **영향**: CS-1~CS-3 체크리스트는 [ ]이므로 일관성 있음. 다만 코드는 이미 main에 머지됨

---

## 7. 심각도 분류 요약

### CRITICAL (5건) — 핵심 기능인데 코드 없음
1. **M3**: AI subprocess→API 미전환 (성능/안정성/비용 추적 불가)
2. **C6**: OAuth 토큰 AES-256-GCM 암호화 미구현 (보안 취약)
3. **C1(P4)**: ThreadAuto main 미반영
4. **C2(P4)**: 티스토리 자동 업로드 main 미반영
5. **C4(P4)**: 스케줄링/배치 main 미반영

### WARNING (11건) — 스텁/부분구현/main미반영
1. **M5**: Dashboard.tsx 고아 파일 (라우트 미등록)
2. **C3**: 네이버 AI원스탑 스텁만 (의도적 가능성)
3. **M6**: as any 17건 잔존 (Settings.tsx)
4. **P5**: 채널 제한 프론트 UI 안내 없음
5. **F1**: 무료 월 5회 카운트다운 실시간 추적 없음
6. **D3**: 위키 랭킹 프론트 UI 미구현
7. **CP-1**: 경쟁사 비교 인라인 텍스트만
8. **AU-1/G2-6**: 감사 로그 Python 서버 경로 미기록
9. **H4**: KeywordAnalysis 실기능 1탭만
10. **C7**: 파이프라인 시뮬레이션 수준 + C단계 미구현
11. **T3**: E2E 테스트 프레임워크 미적용

### INFO — 의도된 미구현
- **C3(네이버 AI원스탑)**: S1에서 "출시 예정" 표시를 [x]로 처리했으므로, C3의 [x]는 체크리스트 기재 오류 가능성

---

## 8. 주요 권고사항

1. **즉시 조치**: task/task-1962-dev1 브랜치의 main 머지 또는 체크리스트 [x] → [ ] 수정 (CR-3~5)
2. **보안 우선**: C6 OAuth 토큰 암호화 구현 착수 (CR-2)
3. **기술부채**: M3 subprocess→API 전환 계획 수립 (CR-1)
4. **체크리스트 정합성**: C3(네이버 AI원스탑)의 [x] 표기 재검토
5. **프론트 UX 보완**: P5 채널 제한 UI, F1 사용량 카운트다운 보완

---

## 모델 사용 기록

| 팀원 | 역할 | 모델 | 작업 |
|------|------|------|------|
| 카르티케야 | 백엔드 | sonnet | Phase 0-1 검증 (14항목) |
| 사라스바티 | 프론트엔드 | sonnet | Phase 2 검증 (11항목) |
| 락슈미 | UX/UI | sonnet | Phase 3 검증 (12항목) |
| 하누만 | 테스터 | sonnet | Phase 4 + 브랜치 검증 (10+2항목) |

---

## 발견 이슈 및 해결
- 이슈 없음 (감사/검증 전용 작업, 코드 수정 금지)

## L1 스모크테스트 결과
- 서버 재시작: 해당없음 (검증/감사 작업, 코드 수정 없음)
- API 응답 확인: 해당없음
- 스크린샷: 해당없음

## 머지 판단
- 머지 필요: No (코드 수정 없음)
- 브랜치: N/A
- 워크트리 경로: N/A
- 머지 의견: 검증/감사 전용 작업으로 코드 변경 없음
