# [Lv.3] 웹앱 조합표시 개선 — 코드→이름(담보/고객) + 20년 총절감 강조

## allowed_resources
```yaml
allowed_resources:
  paths:
    - "src/pages/CompositeDesign.tsx"
    - "src/components/composite/**"
    - "src/lib/**"
    - "src/**/__tests__/**"
    - "tests/e2e/**"
  forbidden_paths:
    - "server/**"
    - "extension/**"
    - ".github/**"
    - "src/config/api.ts"
    - "src/integrations/**"
  commands: ["npx vitest","npx tsc","git"]
  merge_policy: "none"
  ttl_hours: 16
```
> ★ merge_policy=none. base=현 origin/main. 신규 브랜치. 서버 변경 0.

## 배경 (회장 파일럿 피드백 — 조합표시는 작동, 4개 개선)
insuro.biz 복합설계 상담이력에 1·2·3사 최적조합이 뜬다(보험사명·절감률 정상). 회장 요구 4:
1. **담보명·고객명이 코드로 떠서 안 보임** — a001 등 담보코드, 헤더 000000111041(plan_id) → 사람이 읽는 이름으로.
2. **절감액 더 강조**.
3. **20년 총 납입보험료 기준 절감액을 크게** 추가.
4. **폰트 위계**: 20년 총절감 폰트 > 월절감/월보험료 폰트(강조).

## 데이터 (실측 확인 — 전부 가용)
- **담보명**: `GET /api/insuro/composite-coverages`(인증) → `[{coverage_cd, coverage_name, guide_amount, coverage_seq}]`. `coverage_cd → coverage_name` 매핑.
- **고객명**: V레코드 `reference_id`(=customers.id) → customers.name(실측=홍길동). 웹앱이 `supabase.from("customers")`(기존 CrmCustomers 패턴, RLS=본인 agent_id) 로 id→name 조회. (PII 최소: 이름만.)
- **20년**: 계산엔진에 납입기간 없음. `query_condition`=age/gender/insurance_type/plan_id(만기 미저장). **20년=240개월 기준** 월절감 × 240 = 20년 총 절감액.

## 작업
1. **담보명 표시**: composite-coverages 카탈로그 1회 fetch → 헤더 담보 태그(`a001·10,000만원`) + "담보별 배정"의 담보코드를 **coverage_name**으로. 카탈로그에 없는 코드는 코드 fallback(끊기지 않게).
2. **고객명 표시**: 상담이력 카드 헤더에 **고객 이름(홍길동)** 표시(reference_id→customers.name 조회). plan_id는 부가정보로 유지 가능하나 주 표시는 고객명. 조회 실패/이름없음 → graceful(코드/생략).
3. **20년 총 절감액(강조·신규)**: 각 조합(2사/3사)에 **20년 총 납입보험료 절감액 = 월절감 × 240** 을 **큰 폰트로** 표시(예: "20년 총 8,196,480원 절감"). 이게 회장 핵심 강조 항목.
4. **폰트 위계**: 20년 총절감 > 월보험료 > 월절감 순으로 폰트 크기·강조(색/굵기). 절감은 눈에 확 띄게.
5. task-2855 절감 정직표기(>0 절감/=0 동일/<0 비쌈) 유지 — 20년 총절감도 부호 정직(음수면 "비쌈"/생략).

## 검증
- `npx tsc` 클린. 단위/컴포넌트: 담보코드→이름 매핑(카탈로그 mock)·미존재코드 fallback / 고객명 조회 렌더·실패 graceful / 20년 총절감=월절감×240 계산·큰 폰트 렌더 / 폰트 위계. 기존 조합·vpath e2e 회귀 0.

## 완료 (★ 순서 B)
- 변경 = src/ (+tests/e2e) 만. 서버/확장 불변.
- **dev6 금지** — dev1. 커밋 → push → finish-task **foreground 1회** → .done 즉시 종료. **background+wait 금지.** ANU 검증·Codex 검토·머지·CF Pages 배포는 ANU.

## goal_assertions (auto-generated)
- `npx tsc`
