**task-2007 완료 보고** **task-2007: InsuRo 리쿠르팅 전환 CTA 구현 (RC-1~2)** **핵심 결과** RC-1(CTA 변형 3종: 직접형/질문형/성과형)과 RC-2(세션당 2회 상한, 동일 기능 중복 금지, 24시간 쿨다운)를 구현하여 PR #7로 머지 완료. vitest 10/10 통과, tsc 에러 0건, Vite 빌드 성공. Gemini High 1건(쿨다운 로직 오류) 수정 반영. ## 수정 파일 | 파일 | 변경 내용 | grep 검증 | 상태 | |------|-----------|-----------|------| | src/lib/ctaExposurePolicy.ts (NEW) | CTA 노출 정책 유틸리티 (RC-2) | grep "CTA_MAX_PER_SESSION" OK | verified | | src/components/LockedFeatureOverlay.tsx | CTA 변형 3종 + 노출 정책 통합 (RC-1) | grep "CTA_VARIANTS\|ctaVariant\|ctaType" OK | verified | | tests/cta-exposure-policy.test.ts (NEW) | 노출 정책 테스트 10건 | grep "canShowCta\|recordCtaExposure" OK | verified | ## 완료 시그니처 - `cta.*variant|CTA_VARIANTS|ctaType` @ `src/components/` — 확인 (8개 매칭) - `session.*cta|cta.*count|CTA_MAX` @ `src/` — 확인 (3개 매칭) ## 테스트 결과 - vitest: 10/10 통과 (cta-exposure-policy.test.ts) - 기존 **발견/해결 이슈 3건** 1. **쿨다운 타임스탬프 즉시 기록 → 세션 2회 상한 무력화** — 쿨다운을 상한 도달 시에만 기록하도록 변경 (Gemini High) 2. **JSON.parse 런타임 에러 위험** — safeParseArray 헬퍼 함수로 try-catch 래핑 (Gemini Medium) 3. **기존 insuro_upgrade_prompt_count와 ctaExposurePolicy 이중 카운팅** — 기존 로직 제거, ctaExposurePolicy로 일원화 (Gemini Medium)