---
task_id: task-2420
type: plan
scope: task
created: 2026-05-03
updated: 2026-05-03
status: completed
---

# 계획서: task-2420 — InsuRo Helper Edge ohmymanager floating button fix

**task**: task-2420
**목표**: Edge에서 `mmlfcp.ohmymanager.com` 접속 시 InsuRo Helper 플로팅 버튼이 정상 표시되도록 와일드카드 매칭 통일 + 진단 로그 추가 + 회귀 테스트
**승인**: 회장 2026-05-03 "Edge에서 floating button 안 됨"
**근거**: `/home/jay/workspace/memory/tasks/task-2420.md`, Codex G1 게이트 PASS (5 risks, critical=False)

---

## 목표

1. **와일드카드 통일**: manifest.json + content.js 모두 `*.ohmymanager.com` 서브도메인 모두 매칭
2. **진단 로그 추가**: content.js 진입 시점에 host/version 콘솔 로그 출력 → 회장 시연 시 "미주입 vs 정책 미표시" 구분 가능
3. **JWT 사유 명시**: JWT 미설정/만료 시 console.warn으로 사유 출력
4. **회귀 테스트**: host-matcher 단위 테스트 5+ 시나리오 (피싱 도메인 차단 포함)
5. **회장 confirm**: Edge에서 직접 시연 (빌드 + reload + console 로그 + 버튼 표시)

## 범위

### 포함
- `extension/manifest.json` matches/host_permissions/web_accessible_resources 와일드카드 변경
- `extension/lib/host-matcher.js` 신규 (ESM/UMD 호환 호스트 매칭 유틸)
- `extension/content.js` 호스트 분기 로직을 host-matcher 사용으로 변경 + 진단 로그 + JWT 사유 로그
- `extension/__tests__/host-matching.test.ts` 신규 (5+ 시나리오 vitest)

### 제외 (다음 페이즈 이후)
- 백엔드 (`/home/jay/projects/InsuRo/server/**`) 무변경
- Frontend (`src/pages/CompositeDesign.tsx` 등) 무변경
- SPA 라우팅 hashchange 재렌더 (현재 fixed-position 버튼이라 즉시 치명적 아님 — 별도 task 권장)

## Root Cause 정밀 진단 (실제 코드 확인 결과)

회장 task의 가설("manifest matches 서브도메인 미매칭")은 **틀림** — manifest.json은 이미 `https://mmlfcp.ohmymanager.com/*`를 명시.

진짜 fix 포인트:
1. **content.js:9 하드코딩 화이트리스트** — `host === "mmlfcp.ohmymanager.com"`이라 다른 서브도메인에서 분기 미작동
2. **진단 로그 부재** — "Console 로그 0건"은 미주입 증거가 아닌 단순히 console.log를 안 쓴 결과
3. **회장 다음 시연을 위한 진단 가능성** — host/version/JWT 사유 로그 필수

## 위임 계획

- MT-1 (엔키, 백엔드): host-matcher.js 신규 + manifest.json 와일드카드
- MT-2 (엔키, 백엔드): content.js 호스트 분기 통일 + 진단/JWT 로그
- MT-3 (닌기르수, 테스터): host-matching.test.ts 5+ 시나리오
- MT-4 (이쉬타르 또는 마르둑): 빌드 + 회장 시연용 사이드로드 가이드

## 검증 기준

- vitest: `cd /home/jay/projects/InsuRo && npm test -- extension/__tests__/host-matching.test.ts` → PASS
- 빌드: `cd /home/jay/projects/InsuRo && npm run build` → 성공
- node syntax: `node --check /home/jay/projects/InsuRo/extension/content.js` → 성공
- node syntax: `node --check /home/jay/projects/InsuRo/extension/lib/host-matcher.js` → 성공
- 회장 Edge 시연: console에 `[InsuRo Helper] content.js loaded on: mmlfcp.ohmymanager.com version: 0.4.0` 출력 + 플로팅 버튼 표시
