# task-2787+3 — A-0 진단빌드 preflight micro-fix (WAR 제거 + invalid key 제거)

## 레벨
Lv.2 (진단 빌드 transform 2개 수정 + 회귀). **same-branch(task/task-2787-dev5) 계속 커밋. 코드+테스트+worktree 커밋+ANU 보고까지. PR·merge·배포·운영활성화 금지.**

## 단일 소스
`memory/reports/task-2787+2-preflight-consensus-260718.md`(ANU↔Codex 합의) + `memory/tasks/task-2787+2.md`.

## 배경 (ANU↔Codex 합의)
A-0 진단빌드(task-2787+2) preflight에서 2개 수정 필요 확정: (1)진단 manifest의 `web_accessible_resources`(inject.js)가 MAIN content_script 로드와 **중복**(불필요 표면) (2)진단 manifest `key`가 **의도적 invalid 더미**라 Edge unpacked 로드가 **실패할 수 있음**(build-diagnostic.mjs:158-165 dev 주석이 인정) → self-smoke 자체 차단 위험.

## allowed_resources
```yaml
allowed_resources:
  paths:
    - "extension/scripts/build-diagnostic.mjs"
    - "extension/__tests__/diagnostic_build.test.ts"
    - "memory/reports/task-2787+3.md"
  forbidden_paths: ["src/**","server/**","supabase/**","**/migrations/**",".github/**",".env*","extension/inject.js","extension/content.js","extension/background.js","extension/manifest.json"]
  new_file_limit: 0
  commands: ["git","npm","node","npx"]
  merge_policy: "none"
  ttl_hours: 6
```
※ dist-diagnostic/은 build-diagnostic.mjs 재실행으로 재생성(산출물, 직접 편집 금지).

## 구현 요구
### R1. 진단 manifest WAR(inject.js) 제거
- `build-diagnostic.mjs` transform에서 **진단 manifest에 inject.js를 `web_accessible_resources`로 추가하지 않는다**(MAIN world content_script가 이미 로드 → 중복·불필요 페이지 공개 표면). 다른 주입 경로(chrome.scripting/runtime.getURL/dynamic import/fetch) 미참조 확인.

### R2. invalid dummy key 제거
- transform에서 진단 manifest `key` 더미 문자열(`...INSURO-DIAGNOSTIC-DUMMY-KEY`) **부여 제거**. production 혼동 방지는 이미 있는 `name`/`version_name` DIAGNOSTIC 마커로 충분(unpacked 빌드는 key 없어도 경로기반 자동 id가 production과 구분). → Edge unpacked 로드 실패 위험 제거.

### R3. 재빌드 + 테스트
- build-diagnostic.mjs 재실행으로 `dist-diagnostic/` 재생성.
- `diagnostic_build.test.ts`에 추가 assert: 진단 manifest에 **`web_accessible_resources`의 inject.js 부재** + **`key` 필드 부재**. 기존 assert(POST no-op·storage AST 0·플로팅버튼 제거·publish name 마커·MAIN 엔트리·flag ON) 전부 유지.

### R4. 무변경 (건드리지 말 것)
- POST no-op·storage neuter·플로팅버튼 제거·name `DIAGNOSTIC_DO_NOT_PUBLISH`·version_name 마커·소스 manifest production-safe·sanitize allowlist·리스너(진단 인터셉터 필수 기능, 위험경로 0) 전부 유지.

## 검증 (ANU가 재실행)
- `npx vitest run extension/__tests__/diagnostic_build.test.ts` PASS.
- 전체 `npx vitest run` = 이전 카운트(전체 431 / extension 48) 무손상 유지(±신규 assert만).
- 재생성된 dist-diagnostic manifest에 WAR-inject·key 부재 확인.

## goal_assertions
- `npx vitest run extension/__tests__/diagnostic_build.test.ts`
- `npx vitest run`

## STOP_REPORT 조건
WAR/key 제거가 진단 빌드 기능(캡처·summary)을 깨뜨림 · dist 재생성 불가 · 유효 key가 오히려 필요(회장 결정 필요) · forbidden 파일 수정 필요.

## 산출물 & 보고 (PR 없음)
1. same-branch 커밋. PR 금지.
2. 보고: transform diff / 재생성 manifest(WAR·key 부재 증거) / vitest 카운트 / MATCH·GAP.
3. 봇 종료 전 ANU callback(envelope만·UTF-8 ≤3900B).

## 금지
PR·merge·배포·운영활성화 · 서버/DB/CRM/UI 수정 · inject/content/background/소스manifest 수정 · 자동전송/push · 실고객 저장 · 신규 파일.