# task-2892 보고서 — 생보 3대질병 진단비 연속 사다리 전면 교체 (Lv.3, dev1)

## Situation
InsuRo 상담이력 화면의 생보 3대질병 진단비 섹션은 기존 "91% 리드 배너 + 2계단 카드 + 근거표"(task-2888 v2) 구조였다. 회장이 새 목업(`/home/jay/.cokacdir/workspace/autoset/life_optionC2_mock.png`)으로 "하나의 연속 사다리" 설계를 **승인**하며 전면 교체를 지시했다(손보 계단식과 컨셉 완전 통일).

## Complication
- 손보 계단식(최고 Max→최저 min→2사→3사)과 생보 대체(암 단독 대체→3대질병 전체 대체)를 **하나의 6단 연속 사다리**로 합치고, 상단에 5열 비교표, 우측에 최고 Max 기준 4개 누적 직각화살표를 얹어야 한다.
- 손보 랭킹 수치는 반드시 손보 계단식(RpPresentation)과 **동일 소스**여야 하며(재계산 금지), 생보 대체 수치는 기존 계약(life_matrix/composite) 재사용, webapp-only(서버·확장·DB 무변경), exact 원(반올림 금지), "절감" 금지, SVG 견고성(겹침 방지).

## Question
승인 목업대로 비교표+6단 사다리+4누적화살표를 구현하되, 손보 로직 무변경·기존 테스트 회귀 0·시각 겹침 0을 어떻게 보장할 것인가?

## Answer (구현)
팀장(헤르메스) 설계·분배·통합, 팀원 3명 병렬 위임(Wave 방식).

### 변경 파일 (allowed_resources 내 — webapp-only)
| 파일 | 변경 | 담당 |
|---|---|---|
| `src/lib/lifeThreeCritical.ts` | 신규 뷰모델 `computeLifeStaircaseView`(비교표+6단+4화살표) 추가. 기존 export 무변경. `computeStaircase`(rpPresentation) 재사용 | 불칸 |
| `src/lib/__tests__/lifeThreeCritical.test.ts` | 신규 유닛테스트 7케이스 append | 불칸 |
| `src/components/composite/LifeThreeCriticalDiff.tsx` | **전면 교체** — 비교표 + 6단 SVG 사다리 + 4 직각 누적화살표. RpPresentation.STAIR_LAYOUT 양식 통일 | 이리스 |
| `src/components/composite/__tests__/LifeThreeCriticalDiff.test.tsx` | 신 구조 컴포넌트 테스트 11케이스 재작성 | 이리스 |
| `src/components/composite/ConsultationHistoryView.tsx` | `analysisMatrix={record.analysis_matrix}` 1줄 추가 | 이리스 |
| `tests/e2e/composite-design-vpath.spec.ts` | 케이스 C 신 구조 testId 재작성 + strict-mode 방지 | 아르고스 |

### 핵심 설계 결정
- **손보 4단(최고 Max/최저 min/2사/3사)**: `computeStaircase({matrix: analysisMatrix, composite, paymentYears})`의 `steps[].monthlyTotal`+`companyLabel`만 추출 → 손보 계단식과 100% 동일 수치. yearTotalDiff는 20 강제 문제로 사용 안 하고 자체 `years`(null-aware)로 재계산.
- **생보 대체 2단**: cancer_life = triple.total − cancerMonthDiff, three_life = triple.total − totalMonthDiff. `computeLifeThreeCriticalView` 재사용(로직 중복 0).
- **비교표**: 손보3사최저=triple 배정, 생보사기준최저=담보별 argmin(회사 다를 수 있음), 생보1사=단일 최저 생보사(헤더 회사명 1회·셀 보험료만). 생보1사가 담보별최저보다 비싸면 ▲ 빨강 정직 표기. 가입한도=analysisMatrix amount(만원 단위).
- **4 누적화살표**: 전부 최고 Max 기준, 계단식 벌림·흰 글박스(색 테두리).

### 발견 이슈 및 해결
1. **각주 비교기준 오문구(헤르메스 육안 리뷰 발견)**: 이리스 초안 각주가 "비교 기준=3개회사 복합설계 대비"였으나, 4개 누적화살표는 전부 **최고 Max** 기준이고 승인 목업 각주도 "최고 Max 대비" → 코드 동작·목업과 모순. 팀장이 "오른쪽 누적 화살표 4개 = 전부 최고 Max 대비 총액 차액"으로 교정 + 컴포넌트/e2e 테스트 동기화(커밋 ec42bbe).
2. **가입한도 단위 버그(스크린샷 육안 발견)**: "5,000원"으로 렌더(5천만원 담보가 5천원처럼 오해) → "5,000만"(만원 단위)로 수정.
3. **누적화살표 라벨 겹침(스크린샷 육안 발견)**: 4개 흰 글박스가 상단에 몰려 충돌 → cumulativeSrcOffset을 계단식(26/58/90/122)으로 벌려 비겹침(커밋 ab7b145).
   - ★ 2·3번은 e2e 텍스트 어서션은 통과했으나 **스크린샷 육안으로만** 검출 — 육안 검증의 필요성 재확인.

## 테스트 결과
- `npx tsc --noEmit` → **0 에러**
- `npx vitest run` → **1112 passed / 73 files / 0 failed** (기존 대비 회귀 0. 신규 unit 7 + component 11)
- e2e `케이스 C: 생보 3대질병 차액 섹션 렌더` → **1 passed** (신 구조 비교표/6단/4화살표 testId 검증, strict-mode 방지)

## L1 스모크테스트 결과
- 서버 재시작: 해당없음(정적 컴포넌트·webapp-only, 서버 무변경)
- API 응답 확인: 해당없음(서버 무변경, mock 라우팅으로 e2e 검증)
- **스크린샷**: `tests/e2e/screenshots/vpath/c-life-staircase.png`(e2e 케이스 C 재생성) — 팀장 육안 검증 **PASS**. 비교표 가입한도 "5,000만/2,000만/2,000만", 6단 단조감소 사다리(73,000→72,000→70,000→68,000→59,000→52,000, 실회사명·손보 파랑/생보 초록 뱃지·색상 하강화살표), 4 누적화살표 계단식 비겹침(−720,000/−1,200,000/−3,360,000/−5,040,000) — 승인 목업과 정합.

## 머지 판단
- **머지 필요**: Yes (단, merge_policy=none — ANU 독립검증 후 머지·배포)
- **브랜치**: `task/task-2892-dev1`
- **워크트리 경로**: `/home/jay/projects/InsuRo/.worktrees/task-2892-dev1`
- **PR**: https://github.com/Jeon-Jonghyuk/InsuRo/pull/172
- **머지 의견**: tsc 0·vitest 1112/0 회귀 0·e2e 케이스 C PASS·스크린샷 육안 정합. webapp-only(서버/확장/DB 무변경), 기존 손보 로직 무변경(computeStaircase 재사용). 충돌 위험 낮음(base=origin/main 764acd0). ANU 독립검증(clean worktree)·스크린샷 육안·CF Pages 배포(`source /home/jay/workspace/.env.keys → wrangler pages deploy dist --project-name insuro --branch main`) 권한은 ANU.

## 모델 사용 기록
- 불칸(백엔드/로직): sonnet — 순수 계산 로직
- 이리스(프론트/SVG): sonnet — React/SVG 렌더 + 육안 교정
- 아르고스(테스터): sonnet — e2e 재작성
- 헤르메스(팀장): opus — 설계/분배/통합/육안 리뷰/각주 교정(1줄 컴플라이언스 fix)
- haiku 미사용(전부 로직/렌더/분석 성격).

## 커밋
- `032e99f` 불칸: 뷰모델 computeLifeStaircaseView + 유닛테스트
- `a1f406a` 이리스: 컴포넌트 전면 교체 + CHV prop + 컴포넌트 테스트
- `0dffb9d` 아르고스: e2e 케이스 C 신 구조 재작성
- `ec42bbe` 헤르메스: 각주 비교기준 교정(최고 Max 대비) + 테스트 동기화
- `ab7b145` 이리스: 가입한도 만원 단위 + 누적화살표 계단식 비겹침(육안 교정)

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

