# task-2885 보고서 — e2e 케이스 C를 생보 계단식 testId로 정렬 (microfix)

## Situation (상황)
task-2884가 `LifeThreeCriticalDiff` 컴포넌트를 옛 테이블(testId `life-three-critical-section` 등)에서
**계단식 2시나리오**(baseline → cancer_only → all_three)로 재설계하며 testId 체계가 바뀌었다.
그러나 e2e `tests/e2e/composite-design-vpath.spec.ts`의 **케이스 C**(553행~)가 옛 testId를 그대로
`waitFor`하여 CI에서 20s TIMEOUT 실패했다(ANU 독립검증이 확정한 유일 회귀). 단위테스트(1085 pass)·tsc·server는 GREEN.

## Complication (문제)
- 케이스 C만 옛 testId(`life-three-critical-section`, `life-critical-row-cancer/cerebro/ischemic`,
  `life-three-critical-total`, `life-three-critical-year-total`)를 기다려 실패.
- 소스 컴포넌트는 이미 올바름(변경 금지) — e2e 단정만 미갱신.
- 공유 브랜치(`task/task-2884-dev1`)에 이어서 커밋하므로 scope-guard가 task-2884 파일(server/src)을
  오탐 차단할 위험 존재.

## Question (핵심 질문)
케이스 C 단정을 새 계단식 testId로 정렬하여, 컴포넌트/소스 불변 상태에서 e2e 회귀 0으로 만들 수 있는가?

## Answer (해결)
케이스 C의 단정 블록(676~698행)만 새 testId 가시성 + exact 값 단정으로 교체. 다른 케이스·소스 불변.

### 새 testId 매핑 및 exact 값 (mock 기준, computeLifeStaircase 로직으로 직접 계산·검증)
- `life-staircase-section` — 섹션 루트
- `life-staircase-baseline` — 손보 3사 복합 총액 = **57,000원** (triple_best.total)
- `life-staircase-diff-cancer_only` — 차액 **5,000원** (암진단비만 행복생명 25,000 대체)
- `life-staircase-step-cancer_only` — 생보사 **행복생명**, 신총액 **52,000원**
- `life-staircase-diff-all_three` — 차액 **8,000원** (3대질병 모두 행복생명 합 49,000 대체)
- `life-staircase-step-all_three` — 생보사 **행복생명**, 신총액 **49,000원**
- "절감" 단어 부재 확인 유지, legacy link POST 0회 유지.

계산 검증(순수 함수 `computeLifeStaircase`):
- baseline = triple_best.total = 57,000
- cancer_only: 57,000 − 30,000(손보 암) + 25,000(행복생명 암) = 52,000, 차액 5,000
- all_three: 후보 L1(행복생명) 합 25,000+14,000+10,000 = 49,000 최저 → 57,000 − 57,000 + 49,000 = 49,000, 차액 8,000

## 수정/생성 파일 목록
- `tests/e2e/composite-design-vpath.spec.ts` (수정, 1 file changed, +32 −16) — 케이스 C 단정 블록만
- `memory/events/task-2885.worktree-base.json` (생성) — 공유 브랜치 scope-guard base_sha=784d544(이전 브랜치 HEAD) 명시

## 테스트 결과
### L1 스모크테스트
- **서버 재시작**: 성공 — playwright webServer가 `npm run dev`(Vite 5.4.21, :8080) 자동 기동, ready 확인
- **e2e 실행**: `npx playwright test tests/e2e/composite-design-vpath.spec.ts --workers=1`
  - **3 passed (13.0s)** — 케이스 A(5.0s) / 케이스 B(2.7s) / 케이스 C(3.3s) 전부 PASS
  - 케이스 A/B **회귀 0**, 케이스 C 통과
- **스크린샷**: `tests/e2e/screenshots/vpath/c-life-staircase.png` (계단식 육안 확인 완료),
  `tests/e2e/screenshots/vpath/c-full.png`
  - 스크린샷 검증: baseline 57,000원 → −5,000원(행복생명 52,000원, 20년납 1,200,000원)
    → −8,000원(행복생명 49,000원, 20년납 1,920,000원). "절감" 없음, 직각 화살표.
- (kakao integrity / 403 console error는 기존 무해 노이즈 — 무시 지시됨)
- browser_close: playwright 자체 관리(테스트 종료 시 정리), 잔존 dev 서버 프로세스 없음

### grep 검증
- 새 testId 9곳 반영 확인, 케이스 C 내 옛 testId 0건.

## 버그 유무
- 없음. surgical 단일 파일 e2e 정렬. 소스/컴포넌트 불변.

## 머지 판단
- **머지 필요**: Yes (단, merge_policy=none → **ANU가 PR #160 재검증·머지·배포** 담당)
- **브랜치**: task/task-2884-dev1 (ba5927a, origin push 완료)
- **워크트리 경로**: /home/jay/projects/InsuRo/.worktrees/task-2884-dev1
- **머지 의견**: e2e 3/3 GREEN, 회귀 0, 변경은 e2e 테스트 파일 1개로 additive·test-only.
  scope-guard base_sha=784d544로 오탐 방지. 안전하게 머지 가능.

## 모델 사용 기록
- 이리스(프론트엔드/e2e): sonnet — 단일 파일 단정 블록 교체 (Edit + grep 검증)
- 팀장(헤르메스): computeLifeStaircase 계산 검증, e2e 실행, scope base 설정, 통합/검토

## 발견 이슈 및 해결
1. **worktree node_modules 부재(24K, .vite만)** → main 저장소 node_modules(907M) 심볼릭 링크로 e2e 실행 환경 구성.
   임시 백업 디렉토리(node_modules.localvite)는 실행 후 제거, git status 클린 유지.
2. **공유 브랜치 scope-guard 오탐 리스크** → `memory/events/task-2885.worktree-base.json`에
   base_sha=784d544(이전 브랜치 HEAD) 명시. finish-task scope diff가 spec 1개만 검증(PASS).

## 비고
- 디자인팀 호출 불필요(테스트 정렬 작업).
- 컴포넌트/서버/확장 무변경. 완료 후 background wait 없이 종료 — ANU가 후속 재검증·머지·배포.

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

