# task-2954 · InsuRo 실손 세대지식 설계사 노출 MVP (B: 배선)

## 배경 (사실)
- silson 세대지식 = 표준약관 1차출처로 확정 완료(PR#214 MERGED `2ccc121`). 그러나 **런타임 배선 0 = 휴면**(analysis_bridge 비테스트 호출부 0·main.py silson router 미등록).
- **codex ↔ ANU 합의**: 병목은 지식이 아니라 **배선**. 우선순위 **B(배선) → A(판례)**.
- 기존 증권분석 파이프라인 **이미 라이브**: 프론트 `src/pages/PolicyAnalysis.tsx`(라우트 `src/config/routes.ts:333`) / 서버 analyze-policy 엔드포인트(`server/main.py:6973·7027·7074·7099·7223`). 응답 스키마 = `meta + coverages`뿐, silson 미부착.
- `server/silson/analysis_bridge.py`: `attach_generation`(증권 header로 세대 판별, 보장개시일 없으면 contract_date fallback+`date_source` 기록) / `describe_for_analysis`(보장분석 UI용 평탄화 dict, `plan_type_resolution` 포함) — 호출부 0.
- 용도 = **설계사 참고용**(고객 자동판정 아님, gating 경로 무관).
- repo `/home/jay/projects/InsuRo`, origin/main `2ccc121`.

## 목표
기존 증권분석 결과에 **silson 세대 요약 1블록**을 부착해, 설계사가 `PolicyAnalysis` 화면에서 즉시 세대/보장/근거를 확인하게 한다. **새 화면·새 제품 만들지 말 것.**

## 작업
### 1. 백엔드 — silson_summary 부착
- analyze-policy 결과 스키마에 `silson_summary` 추가. 증권 header(가입일/계약일)로 `attach_generation` 호출 → 세대 판별. `describe_for_analysis`로 세대 지식 요약(MRI·통원한도·자기부담·입원한도·3대비급여 등 주요값 + 약관 출처).
- **계약일 fallback 시 `date_source="contract_date"` 를 응답에 노출**(확정판정 오인 방지). 세대 판별 불가 시 명시적 "판별 불가".
- gating(고객 자동판정) 경로는 **건드리지 않는다**(이건 설계사 참고 경로).

### 2. 프론트 — PolicyAnalysis 세대 블록
- 결과 카드에 실손 세대 블록 렌더: 세대명·주요 보장·근거 출처(표준약관/task-2953)·**고정 고지문 "설계사 참고용입니다. 실제 증권·약관을 확인하세요."**
- 1세대 등 `verification_notice` 있는 레코드는 그 안내문안 그대로 표시.

### 3. 리스크 가드 (codex 지적 3)
- **PII**: silson_summary 응답/로그에 고객 PII 최소화(세대 지식은 PII 아님, 증권 식별정보 로그 자제).
- **금소법**: 참고용 고지 고정, 고객 자동판정 아님 명확.
- **운영**: 계약일 fallback을 확정처럼 표시 금지(date_source caveat).

### 4. 테스트
- 백엔드 단위: attach_generation 세대 판별(경계일 포함)·fallback date_source. 프론트 렌더 스냅샷.
- 회귀 통과. build PASS.

### 5. 배포
- **실배포 HOLD** — build PASS까지만. CF Pages/서버 재기동은 **회장 최종 go 후**.

## 원칙
- Surgical. 기존 증권분석 로직·gating 무변경. silson 데이터 값 무변경(이미 확정본).
- **머지 금지** — PR까지. ANU 검증 + 회장 보고 후 머지, 배포는 별도 회장 go.

## 완료 조건
- **PR**(백엔드+프론트) + 회귀·build PASS + 실브라우저 스크린샷(PolicyAnalysis에 세대블록 표시).
- `memory/reports/task-2954.md` + `memory/events/task-2954.done` + ANU 콜백(envelope ≤3900 bytes): task_id·pr_number·build결과·스크린샷경로.
