# task-2960 · InsuRo 배포 (origin/main `d381e57` — 증권분석 표 + 실손계산기 + 실손 세대블록)

## 배경
- 회장 배포 승인. origin/main head **`d381e570765f`** (PR#218 증권분석 Phase1b + PR#219 실손계산기 머지 완료). 그 앞 누적 머지분(PR#213~217 실손 약관/배선)도 포함.
- 배포 = **Cloudflare Pages(프론트) + 서버 재기동(백엔드)**. 둘 다 필요(analysis_table·silson_summary·실손계산기 API가 백엔드에 있고 프론트가 호출).

## 배포 절차 (검증된 방법)
### 1. 프론트 (Cloudflare Pages)
```
cd /home/jay/projects/InsuRo
git fetch origin && git checkout main && git reset --hard origin/main   # d381e57 최신화(dirty 없으면)
npm run build
set -a; source /home/jay/workspace/.env.keys; set +a   # CLOUDFLARE_API_TOKEN
export CLOUDFLARE_ACCOUNT_ID=36fe4098936e0a1489e8516cb2dee2d8
npx wrangler pages deploy dist --project-name insuro --branch main
```
- 반영 확인: `curl -s https://insuro.biz/ | grep -o 'index-[^"]*\.js'` 해시 변경.

### 2. 백엔드 (서버 재기동)
- `insuro-api.service`(systemd) 기준 서버가 origin/main 최신 코드로 기동되도록 재기동. 서버 실행 위치·pull 절차는 기존 배포 관행 따름. 재기동 후 `curl` 헬스체크.

## Smoke 테스트 (필수 — 실브라우저 or curl)
1. **증권분석**: PDF 업로드 → **합산 보장현황이 대구분 표**로 렌더(실손→…→미분류, 회사별 열, UNKNOWN 규칙).
2. **실손계산기**: 도구/분석 메뉴에 노출 → 세대+영수증 항목 입력 → 예상 수령액 계산 + 고지문. 1세대는 "계산 불가" 분기.
3. **실손 세대블록**: 증권분석 결과에 세대+혜택 요약(silson_summary) 표시.
4. 콘솔 에러 0(실손계산기·증권분석 기인).

## 원칙
- **되돌림 가능성 확보**: 배포 전 현재 라이브 index 해시 기록(롤백 참조). 프론트는 재배포로 롤백 가능.
- 실손계산기는 **설계사용 참고 추정 도구**(고객 직접 자동판정 아님) — 고지문 라이브 확인.
- 배포 중 서버 다운 시 즉시 롤백·회장 보고.

## 완료 조건
- 프론트 배포 성공(insuro.biz 해시 변경) + 서버 재기동 + smoke 3종 PASS + 스크린샷.
- `memory/reports/task-2960.md`(배포 전/후 해시·smoke 결과) + `.done` + ANU 콜백.

## goal_assertions (auto-generated)
- `curl -s https://insuro.biz/ | grep -o 'index-[^"]*\.js'`
