---
name: project-insuro-life-matrix-phasea-task2880
description: InsuRo 생보 3대질병 Phase A(task-2880) 캡처·저장 계약 완료·아누 독립검증 MERGE-READY, Phase B 대기
metadata:
  type: project
---

# InsuRo 생보 3대질병 진단비 Phase A — task-2880 (dev2/오딘, 2026-07-31)

손보 복합설계 저장 계약에 **생보 3대질병(암·뇌혈관·허혈성심장) matrix**를 별도 슬롯(`life_matrix`)로 얹는 작업. Phase A = **캡처·저장 계약까지**(표시·차액계산은 Phase B). 생보 캡처는 손보와 동일 — 오마이매니저 상단 `#selInsuranceType` 드롭다운(F=손보/LF=생보) 값만 다름.

## 구현 (7파일, branch `task/task-2880-dev2`, commit 6cccc3f, base be40a02)
- 확장(프레이야): `content.js`(+185/-5) `isSelInsuranceTypeLife`/`captureLifeMatrixToSession`(scrapeMmlfcpMatrix **재사용**, 신규 스크래퍼 0), "🧬 생보 3대질병 이어서 캡처" 버튼(명시클릭만), `handleConsentSaveClick` async 전환→누적 life_matrix를 단일 페이로드에 조건부 첨부 후 clear. `ingest.js`(+10) taint-guard(createOpaqueValue), null이면 canonical 키 생략(byte 불변). **background.js/manifest 무수정**(allowed 밖).
- 서버(토르): `consultation_history_v1.py` schema `life_matrix: AnalysisMatrix|None`(재사용), migration **016**(015=rls_route_only 이미 존재→016 조정), routes life_matrix persist/응답(별도 슬롯, ok_only 필터는 손보 overall_status 기준 유지).

## 아누 독립검증 (전부 GREEN)
- HEAD/base 일치, 7파일 정확히 allowed_resources 내부, **background.js/manifest 무수정 실증(git diff)**.
- 골든 `ohmy_ppd_v2.golden.json` **byte 불변**(git diff 빈결과) — 재생성 회피 성공.
- vitest 498 pass(golden 포함), pytest 898 pass / 1 fail.
- 유일 실패 `test_cors_fail_closed_when_ext_origin_unset` = **pilot .env 오염**(worktree 루트 `.env`가 EXT origin set). 아누 직접 apples-to-apples 재현: `.env` 있으면 FAIL / 치우면 PASS. 실패 테스트파일 우리 diff에 없음 → **회귀 0 실증**. doctrine [[feedback-regression-verify-clean-worktree-not-polluted]] 정확히 일치.
- QC=WARN(scope/tdd/claude_md WARN, 5 gate_results 전부 PASS·l1_smoketest PASS).

## 상태: MERGE-READY (merge_policy=none → 머지는 ANU 권한). Phase B·미결 이관
- **생보 셀렉터 live 확인 미실시**(자격증명 부재) → 헤임달/실브라우저 라이브 QA 권장.
- 결합 골든(손보+생보) 미추가 → Phase B 검토.
- supabase/migrations 016 미러 필요 여부(014/015는 미러 존재) → 배포 시 판단.
- owner 전환 시 storage.session 잔존 life_matrix 엣지 → Phase B.
- 복원 태그 `restore-260729-pre-life` 존재(되돌리기 가능).
- **Phase B** = 웹앱 차액계산·3사 결과 아래 표시 + 2-캡처 UX. Phase A 머지 후 발주 예정.

---

## Phase B (task-2881, PR #156) — MERGED (2026-07-31 18:18 KST, ANU 스쿼시 머지)
- **웹앱 차액 계산·표시 완료**. 6파일 +985줄 **전부 additive**(webapp-only, 서버/확장/config/api.ts/integrations 무변경).
- 신규: `src/lib/lifeThreeCritical.ts`(computeLifeThreeCriticalDiff — 담보별 argmin·손보배정 매칭·**exact 차액**, 반올림 0, life_matrix 없으면 null=placeholder) + `LifeThreeCriticalDiff.tsx`(순수렌더, null→접힌 details 플레이스홀더, "차액"만 "절감" 0) + 배선(`ConsultationHistoryView`의 `<RpPresentation>` **바로 아래** 형제삽입) + lib/component 테스트 21개 + e2e 케이스 C.
- **아누 독립검증(전부 GREEN)**: diff 범위 정확(forbidden paths 무변경), base=origin/main #155, tsc CLEAN, **vitest 1066 pass/72 files(1045→+21, 회귀 0)**, **e2e 3 passed(케이스 A/B 회귀 0 + 신규 C)**, "절감" UI 0건(금지주석만), 반올림함수 0건.
- merge commit `ed76645`, 로컬 main ff 동기화, 워크트리·원격/로컬 브랜치 정리, `.done.acked`. main 미보호(required 없음), `diagnostic`(full-matrix pytest)만 비게이팅 잔류(이 PR python 0파일 무관).
- **머지 = 코드까지만**. 실제 기능 노출 미완: 회장 배치 rollout 필요 → ① supabase 마이그레이션 016 적용(life_matrix 컬럼) ② 새 확장 재설치(생보 캡처) ③ 손보→생보 2-캡처로 차액 확인 ④ **웹앱 CF Pages 배포**(`wrangler pages deploy`). ①②③은 회장이 하겠다고 명시(20260731 대화). CF Pages 배포는 프로덕션 outward → 회장 지시 대기.
- 복원 태그 `restore-260729-pre-life` 유지.
