# [Lv.2] 생보 감지 수정 — 값코드(LF) 대신 옵션 텍스트("생보")로 판정 + 메시지 문구

## allowed_resources
```yaml
allowed_resources:
  paths:
    - "extension/content.js"
    - "extension/__tests__/**"
  forbidden_paths:
    - "src/**"
    - "server/**"
    - ".github/**"
    - "extension/manifest.json"
    - "extension/background/**"
  commands: ["npx vitest","git"]
  merge_policy: "none"
  ttl_hours: 8
```
> ★ merge_policy=none. base=현 origin/main(#155 Phase A 생보 캡처 존재). 이 감지·문구 수정만.

## 배경 (회장 실사용 버그)
"생보 이어서 캡처" 클릭 시 "화면을 생손보(LF)로 전환한 뒤 다시 시도해주세요" 메시지. 회장 지적: **"생손보(LF)"가 아니라 "생보"**로 조회하는 게 맞는데 잘못 체크하는 듯.
- 원인: content.js가 생보 판정을 **`#selInsuranceType.value === "LF"`** 하드코딩(라인 ~431 isSelInsuranceTypeLife, ~239 매핑). 오마이매니저 생보 선택 시 실제 value가 "LF"가 아닐 수 있음(UNVERIFIED). 손보는 value "F"로 정상 작동 확인됨.
- 오마이매니저 상단 "**생손보 유형**" 드롭다운 옵션 텍스트 = **손보 / 생보**(회장 확인). FA가 "생보" 선택.

## 작업
### 1. 생보 판정 = 옵션 텍스트 기반(robust)
- `#selInsuranceType`의 **선택된 옵션 텍스트**(`sel.options[sel.selectedIndex]?.text`)가 **"생보"를 포함**하면 생보로 판정. "손보" 포함이면 손보.
- 값 코드(LF/F)는 **fallback**으로만 유지(text 우선). 즉 `isLife = optionText.includes("생보") || value === "LF"`, `isNonLife = optionText.includes("손보") || value === "F"`.
- insurance_type 저장값도 이 판정과 정합(생보/손보 문자열). 기존 F/LF value 로직은 fallback으로 남기되 text 우선.
- **이유**: value 코드가 환경마다 다를 수 있으니 화면 표시 텍스트로 판정하면 확실. 손보(F) 기존 동작 회귀 0.

### 2. 사용자 메시지 문구 (기술용어 제거)
- 라인 ~501 "화면을 생손보(LF)로 전환한 뒤 다시 시도해주세요." → **"오마이매니저 상단 '생손보 유형'에서 '생보'를 선택한 뒤 다시 시도해주세요."**
- "생손보(LF)" 같은 개발자 용어·값코드 노출 제거. 사용자는 "생보"만 보게.

## 제약
- content.js(+테스트) 만. 손보 캡처·저장·consent·egress·taint-guard·life_matrix 라우팅 로직 불변. **판정 기준(text 우선)과 메시지 문구만** 수정. manifest 불변.

## 검증
- `npx vitest run extension/__tests__/` 전체 PASS(회귀 0). 신규/갱신: 옵션텍스트 "생보"→생보 판정 / "손보"→손보 / value fallback(LF/F) 유지 / 메시지 문구에 "생보" 안내·"생손보(LF)" 부재.

## 완료 (★ 순서 B)
- 변경 = extension/content.js(+테스트) 만.
- **dev6 금지** — dev2. 커밋 → push → finish-task **foreground 1회** → .done 즉시 종료. **background wait 금지.** ANU 검증·머지·새 확장빌드 전송은 ANU.

## goal_assertions (auto-generated)
- `npx vitest run extension/__tests__/`
