# InsuRo 생보 "이어서 캡처" 실패 수정 — task-2883 (MERGED #159, 260803)

## 증상
확장에서 "생보 이어서 캡처" 클릭 시 화면 감지·스크랩은 정상(보험사 9·담보 4·보험료셀 36)인데도 항상 default 에러 문구 표시: "지금은 캡처할 수 없어요. 잠시 후 다시 시도해주세요."

## 근본원인 (회장 콘솔 실사 + 봇 진단으로 확정)
`content.js`의 `saveLifeMatrixToSession`/`loadLifeMatrixFromSession`이 **content script에서 `chrome.storage.session`을 직접 호출**. 그런데 `chrome.storage.session` 기본 access level = `TRUSTED_CONTEXTS`(백그라운드 전용) → content script 접근 시 예외 → `captureLifeMatrixToSession` 예외 → `.catch` → default 메시지. 확장 어디에도 `setAccessLevel` 호출 없었음.

**교훈(재사용 패턴)**: MV3 확장에서 content script가 session storage를 쓰려면 background에서 `chrome.storage.session.setAccessLevel({ accessLevel: "TRUSTED_AND_UNTRUSTED_CONTEXTS" })` 선행 필수. 안 하면 조용히 예외.

## 해결 (dev2-team 토르, sonnet)
- `extension/background.js` (+41): `enableSessionStorageForContentScripts()` — setAccessLevel 호출을 typeof/존재 가드 + try/catch + promise rejection 흡수로 감쌈(미지원/mock no-op). **3지점 호출**: top-level(SW 로드) · `onInstalled` · `onStartup`. module.exports 노출.
- `extension/content.js` (+5/-1): 캡처 실패 catch에 `console.error` 로깅 추가(사용자 문구·흐름 불변).
- `extension/__tests__/task-2883-session-access-level.test.ts` (신규 +191, 4테스트).
- diff: 3 files +236/-1, 전부 extension/ 범위. additive·extension-only.

## ANU 독립검증 (GREEN)
- clean /tmp worktree(CI parity): extension suite 24 files/505 tests PASS, 전체 73 files/1073 tests PASS, 회귀 0.
- CI(원격 PR #159): 11 checks 전부 SUCCESS, mergeState=CLEAN.
- tsc WARN 2건(content.js 191 `_lastMmlfcpTrace`, 2888 `snapshot`)은 pre-existing 미사용 변수(origin/main에도 존재, 변경 라인 무관).

## 상태
- **MERGED**: PR #159 스쿼시 머지(아누), mergeCommit d8e46ae, 2026-08-03 00:24 KST. 원격 브랜치 삭제, 로컬 main ff-sync.
- **새 확장 zip 전송 완료**: `InsuRo-extension-task2883-260803.zip`(v0.4.1, __tests__ 제외) → 회장 Telegram.
- **회장 rollout 대기**: 확장 재설치(load unpacked) 후 "생보 이어서 캡처" 재시도 → 이번엔 "생보 담보를 이어서 담았어요" 성공 메시지 뜨는지 실증 필요(봇 환경엔 확장 로드 Chrome 없어 수동 실증 불가).

관련: [[project_insuro_life_matrix_phaseA_task2880_260731]] (생보 3대질병 Phase A/B), task-2882(생보 감지 옵션텍스트 우선).
