# task-2023: InsuRo 온보딩 후반 (OB-4~7)

## S - Situation
InsuRo 온보딩 위자드(OB-1~3)가 구현 완료되어 3단계 위자드 + 상태 머신 + PostHog 기본 계측이 동작 중이다.

## C - Complication
온보딩 후반부 기능(A/B 테스트 인프라, AI 콘텐츠 연동, 이탈 방지 리마인드, 퍼널 이탈 지점 측정)이 부재하여 온보딩 효과를 측정하거나 최적화할 수 없었다.

## Q - Question
OB-4(A/B 테스트), OB-5(AI 생성), OB-6(리마인드), OB-7(PostHog 퍼널)을 구현하여 온보딩 전환율을 데이터 기반으로 개선할 수 있는가?

## A - Answer
4개 기능 모두 구현 완료. 서버 API 3개(A/B 배정, AI 생성, 리마인드 체크) + 프론트 A/B 분기 + 퍼널 이벤트 5종 추가. 테스트 8건 전체 통과.

---

## 작업 내용

### OB-4: Show-First A/B 테스트 인프라
- `POST /api/insuro/onboarding/ab-assign` — MD5 해시 기반 50:50 무작위 배정, profiles.ab_test_group 필드 저장
- `GET /api/insuro/onboarding/ab-metrics` — 그룹별 완료율 지표 조회
- 프론트: 컴포넌트 마운트 시 A/B 배정 API 호출, 그룹별 위자드 분기

### OB-5: F1 통합 AI 생성 연동
- `POST /api/insuro/onboarding/ai-generate` — haiku 모델 경량 AI 생성 (blog/sns/proposal 프리셋), F1 카운터 차감
- 프론트: show_first 그룹은 Step 3에서 실시간 AI 콘텐츠 생성, control 그룹은 정적 미리보기 유지
- 로딩 스피너 UI 표시

### OB-6: 이탈 방지 리마인드
- `POST /api/insuro/onboarding/check-remind` — 미완료 사용자 리마인드 기록 (24시간 쿨다운, 최대 3회)
- onboarding_reminds 테이블 기록 + PostHog `onboarding_remind_sent` 이벤트

### OB-7: PostHog 퍼널 이탈 지점 측정
- useAnalytics에 5개 이벤트 타입 추가: `onboarding_funnel_enter`, `onboarding_funnel_drop`, `onboarding_ab_assigned`, `onboarding_ai_generated`, `onboarding_remind_shown`
- OnboardingWizard: 단계 변경마다 퍼널 진입/이탈 이벤트 추적
- useOnboardingRedirect: 리다이렉트 시 퍼널 진입 이벤트

### 추가: 머지 충돌 해결
- `src/App.tsx` — task/task-2020-dev6 브랜치 코드 채택 (커스텀 PostHogProvider + PageViewTracker)
- `server/analytics.py` — task/task-2020-dev6 브랜치 코드 채택 (확장된 PII 필터 + SUPPORTED_EVENTS)

---

## 수정 파일 목록

| 파일 | 변경 내용 | grep 검증 | 상태 |
|------|-----------|-----------|------|
| server/main.py:1769 | OB-4 A/B 배정 API | grep "ab-assign" OK (2건) | verified |
| server/main.py:1814 | OB-4 A/B 지표 API | grep "ab-metrics" OK | verified |
| server/main.py:1849 | OB-5 AI 생성 API | grep "ai-generate" OK | verified |
| server/main.py:1913 | OB-6 리마인드 API | grep "check-remind" OK | verified |
| server/main.py:10 | import hashlib 추가 | verified |
| server/main.py:15 | timedelta import 추가 | verified |
| server/analytics.py | 머지 충돌 해결 + SUPPORTED_EVENTS 확장 | grep "onboarding_remind_sent" OK | verified |
| src/App.tsx | 머지 충돌 해결 (PostHogProvider + PageViewTracker) | verified |
| src/hooks/useAnalytics.ts | 5개 이벤트 타입 추가 | grep "onboarding_funnel_enter" OK (2건) | verified |
| src/pages/OnboardingWizard.tsx | A/B 분기 + AI 생성 연동 + 퍼널 이벤트 | grep "ab-assign" OK, grep "ai-generate" OK | verified |
| src/hooks/useOnboardingRedirect.ts | 퍼널 진입 이벤트 추가 | grep "onboarding_funnel_enter" OK | verified |
| server/tests/test_onboarding_ob4_7.py | 서버 테스트 8건 | 신규 생성 | verified |
| src/hooks/__tests__/useAnalytics.test.ts | OB-7 이벤트 테스트 추가 | grep "onboarding_funnel_enter" OK | verified |

---

## 테스트 결과
- pytest: **8 passed, 0 failed** (server/tests/test_onboarding_ob4_7.py)
- pyright 신규 에러: 0건 (기존 slowapi 타입 이슈 1건은 작업 범위 외)

---

## L1 스모크테스트 결과
- 서버 재시작: 성공 (uvicorn port 8099)
- API 응답 확인:
  - `GET /api/status` → 200 `{"status":"ok"}`
  - `POST /api/insuro/onboarding/ab-assign` (미인증) → 401 `{"detail":"Missing or invalid authorization"}`
  - `POST /api/insuro/onboarding/ai-generate` (미인증) → 401 `{"detail":"Missing or invalid authorization"}`
  - `POST /api/insuro/onboarding/check-remind` (미인증) → 401 `{"detail":"Missing or invalid authorization"}`
  - OpenAPI 엔드포인트 등록 확인: 5개 온보딩 관련 경로 모두 등록됨
- 스크린샷: 해당없음 (백엔드 API 작업 중심)

---

## 발견 이슈 및 해결

1. **머지 충돌 (App.tsx, analytics.py)**: task/task-2020-dev6 브랜치와의 충돌. dev6 버전이 더 완전하므로 해당 코드 채택.
2. **pyright 타입 오류 3건**: Supabase SDK의 `JSON` 타입이 `dict.get()` 호출과 호환되지 않음. `dict()` 래핑 + `type: ignore[union-attr]` 주석으로 해결.
3. **테스트 실패 (FastAPI mock 패턴)**: `patch("main.verify_jwt")`가 FastAPI Depends와 호환되지 않음. `app.dependency_overrides` 패턴으로 전환하여 해결.

---

## 모델 사용 기록
- 루(백엔드): sonnet — OB-4/5/6 API 구현
- 브리짓(프론트): sonnet — OB-4/5/7 프론트엔드
- 모리건(테스터): sonnet — 테스트 작성
- 다그다(팀장): opus — 설계/분배/통합/QC/pyright 수정

---

## 머지 판단
- **머지 필요**: Yes
- **브랜치**: task/task-2023-dev3
- **워크트리 경로**: /home/jay/workspace/projects/insuro/.worktrees/task-2023-dev3
- **머지 의견**: 테스트 8건 전체 통과. 기존 코드 변경 최소화 (하단 추가 중심). pyright 신규 에러 0건. 머지 권장.

---

## 완료 시그니처 검증
- [x] `grep "ab_test\|show_first\|A/B" src/` → 10건 (3개 파일)
- [x] `grep "remind\|이탈.*방지" server/` → 45건 (3개 파일)

## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회

