# task-2844 보고서 — [test-only] PR-E2 e2e 정합

- **작업자**: 오딘(dev2 팀장) + 헤임달(QA)
- **작업 유형**: test-only (앱/소스 변경 0)
- **프로젝트**: InsuRo (`/home/jay/projects/InsuRo`)
- **브랜치**: `task/task-2843-dev2` (PR #122, 이어서 커밋 — 새 PR 없음)
- **워크트리**: `/home/jay/projects/InsuRo/.worktrees/task-2843-dev2`
- **완료일**: 2026-07-23

## Situation (상황)
PR-E2(task-2843)가 웹앱 `CompositeDesign`/`CrmCustomers`를 서버 V 읽기 엔드포인트(`GET /api/insuro/consultation-history/v1`)로 의도적 재배선. 레거시 인-웹앱 캡처/매칭/reassign/tab_compare UI는 확장이 담당하도록 웹앱에서 미탑재. 그 결과 기존 e2e spec 2종이 폐기된 레거시 흐름을 테스트하여 CI e2e-test가 실패 중이었음(앱은 정상, 테스트가 낡음).

## Complication (문제)
- `composite-design-phase3.spec.ts`(시나리오 1~4: 캡처 자동매칭 dialog/link/reassign) — 전부 OBSOLETE.
- `composite-design-phase5-tab.spec.ts`(시나리오 5~7: tab_compare amber 카드·trigger/tab_compare 분리) — 전부 OBSOLETE.
- 폐기 시 `CrmCustomers`의 V 상담이력 조회 흐름에 대한 E2E 커버리지 갭 발생.

## Question (핵심 질문)
폐기 spec을 제거하되 CRM V-path 조회 커버리지를 어떻게 보전하고, 앱 소스 변경 0으로 전체 e2e를 통과시킬 것인가?

## Answer (해결)
1. **폐기 spec 2개 삭제** (`git rm`): 파일 전체가 obsolete이므로 파일 단위 삭제.
2. **신규 `crm-customers-vpath.spec.ts` 작성** (423 lines): `composite-design-vpath.spec.ts`의 mock 패턴(Supabase localStorage 세션 주입 + context.route Supabase mock + page.route 절대 URL mock)을 격리 재사용.
   - `rest/v1/customers` mock을 generic catch-all 이후(LIFO) 등록 → 고객 카드 렌더 확보.
   - **케이스 A(flag ON/200)**: `/crm/customers` → "ohmy history" 버튼 클릭 → `{name}의 상담이력` 다이얼로그 → `ConsultationHistoryView` 렌더(`분석 매트릭스`/`보험사 2곳`), legacy reassign POST 0회.
   - **케이스 B(flag OFF/403)**: 동일 흐름 → `상담이력 기능이 준비 중입니다.` 안내, `분석 매트릭스` hidden, legacy reassign POST 0회.
3. **README 갱신**: 삭제 파일 참조 제거 + V-path 재배선 검증으로 개요/구조 최소 수정.
4. `composite-design-vpath.spec.ts`는 수정하지 않음(그대로 유지). 앱 소스(`src/`/`server/`/`extension/`) 변경 0.

## 생성/수정/삭제 파일
- 삭제: `tests/e2e/composite-design-phase3.spec.ts` (742줄), `tests/e2e/composite-design-phase5-tab.spec.ts` (604줄)
- 신규: `tests/e2e/crm-customers-vpath.spec.ts` (423줄)
- 수정: `tests/e2e/README.md` (±16줄)
- diff --stat: 4 files changed, 433 insertions(+), 1352 deletions(-)

## 테스트 결과 (팀장 독립 재검증)
- `npx tsc --noEmit`: **클린 (exit 0, e2e 포함)**
- `npx playwright test tests/e2e/`: **7 passed, 0 failed (19.2s)**
  - composite-design-vpath.spec.ts: 2/2 (회귀 없음)
  - crm-customers-vpath.spec.ts: 2/2 (신규)
  - keyword-analysis-info-generate.spec.ts: 3/3 (회귀 없음)
- 삭제 파일 코드 참조 0건 (vpath spec 내 주석 언급 1건만 — 무해).

### L1 스모크테스트 결과
- 서버 재시작: **해당없음** (playwright webServer가 `npm run dev` 자동 기동 — Vite v5.4.21, localhost:8080)
- API 응답 확인: **해당없음** (test-only, 실 API 호출 없음 — page.route mock)
- 스크린샷: `tests/e2e/screenshots/crm-vpath/{a-1-mounted,a-2-record-rendered,b-1-mounted,b-2-disabled-empty}.png`
- 실브라우저 E2E: **chromium 7 tests 실행 → 전부 pass** (실제 페이지 마운트 + 버튼 클릭 + 다이얼로그 렌더 + POST 카운터 0 검증)
- console error(kakao SDK integrity, 케이스 B 의도된 403)는 예상된 것으로 테스트 통과에 영향 없음.

## 발견 이슈 및 해결
- `tests/e2e/utils/api-mock.ts` + `tests/e2e/fixtures/*.html`: 삭제된 phase3/phase5 spec에서만 쓰이던 자원으로 현재 dead code 추정. **본 task 범위(spec 2개 삭제 + 신규 spec + README) 밖**이라 손대지 않음. 필요 시 별도 후속 정리 태스크 권장.

## 머지 판단
- **머지 필요**: Yes (PR #122에 이어서 — ANU가 원격 독립검증·머지)
- **브랜치**: `task/task-2843-dev2`
- **워크트리 경로**: `/home/jay/projects/InsuRo/.worktrees/task-2843-dev2`
- **머지 의견**: 변경 범위 `tests/e2e/**` 만(scope-guard OK), tsc 클린, 전체 e2e 7/7 pass. 앱 소스 변경 0. 회귀 없음. merge_policy=none이므로 ANU가 PR #122 최종 검증·머지.

## 모델 사용 기록
- 헤임달(QA): sonnet (test spec 작성/삭제/검증 — 코딩 작업)
- 팀장(오딘, opus): 설계/분배/검토 + tsc·playwright 독립 재검증

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

