# A-0 진단빌드 — chromium 실로드 preflight (ANU 자동검증, self-smoke 전 de-risk)

**작성**: 아누 2026-07-18 KST. GPT 피드백 #10(key 없이 경로기반 자동 ID = 실증 전 가정) + 회장 지시("2번: 아누가 먼저 chromium 자동 로드검증")에 따라 **회장 Edge self-smoke 전에 아누가 직접 실 브라우저 로드 가능성을 de-risk.**

## 대상
- 산출물: `dist-diagnostic/` (task-2787+3 재생성)
- tree hash (15파일): `ed0f691715544c5177b208906647865744e749ad4cf53df12c46c66d4738f33e`
- 브랜치: `task/task-2787+2-dev5` · git HEAD: `2d90e5a`
- 브라우저: Google Chrome for Testing **147.0.7727.15** (Chromium 계열, Edge와 동일 엔진)

## 검증 방법 (2 독립 신호)
1. **manifest 구조 유효성** — `chrome --headless=new --pack-extension=dist-diagnostic` (auto-gen key).
2. **key 없는 실 unpacked 로드** — `--headless=new --load-extension=dist-diagnostic --remote-debugging-port` 후 CDP `/json`으로 타겟·서비스워커·확장 ID 조회. 포트는 node가 free port 사전할당(초기 fixed-port 충돌 false-negative 교정).

## 결과 — 로드 성공 (VERIFIED)
1. **manifest 유효**: pack 성공, `dist-diagnostic.crx` 생성(31,935 B) = Chrome이 스키마 승인. 커스텀 top-level `INSURO_DIAG_FLAG`는 미지 키로 무시(거부 아님).
2. **key 없이 unpacked 로드 성공**:
   - CDP 타겟에 **`service_worker: chrome-extension://nihdkknlcbakmplkiploolihohajoibp/background.js`** 등장 = background.js 서비스워커 **정상 등록·구동**.
   - Chrome 렌더러 로그에 동일 ID **BLESSED_EXTENSION 컨텍스트** 생성(컴포넌트 확장 3종과 별개).
3. **경로기반 ID 실증 (GPT "가정" → 사실)**:
   - `SHA256(abs_path)[:32]` → a–p 매핑 = `nihdkknlcbakmplkiploolihohajoibp`.
   - Chrome 실측 ID와 **정확히 일치(MATCH: True)**. → key 없이 **폴더 경로로 결정적 ID 생성**. 다른 폴더(production)면 다른 ID → 자연 구분 확인.
4. **차단성 에러 0**: 확장 관련 `Manifest parse error`/`Failed to load extension`/`Invalid` 없음. (로그의 `bind() failed`는 debugging-port 충돌로 확장과 무관·CDF 재실행으로 해소.)

## 판정
- **DIAGNOSTIC_UNPACKED_LOAD_VERIFIED (Chrome 147 headless=new)** · **PATH_BASED_ID_VERIFIED** · **NO_KEY_LOAD_OK**.
- task-2787+3의 "invalid dummy key 제거로 Edge 로드 차단 위험 제거" 판단 = **실증 통과**. self-smoke가 key 문제로 막힐 위험 제거됨.

## 남은 (self-smoke에서 확인) — 이번 preflight 범위 아님
- 서비스워커 **런타임 콘솔 에러 0**은 chrome://extensions "Errors" 패널로 회장 self-smoke 때 육안 확인(딥 SW-console 스캔은 raw-ws 필요 → 범위 제외).
- 실 ohmymanager transport·ProductPremiums 캡처·matrix·화면총액 정합·활성 user_coverages 식별 = **데이터 계약 검증**(self-smoke 본론, 여기서 미검증).
- relay 무결성 = 여전히 `DIAGNOSTIC_ONLY_UNAUTHENTICATED_CHANNEL`(로드 검증과 무관).

## 회장 로드 절차 (Edge/Chrome 동일)
1. 기존 InsuRo 일반 확장 **비활성화/제거**(한 번에 하나만).
2. `edge://extensions` → 개발자 모드 → "압축 해제된 항목 로드" → **로드 폴더 = 위 tree hash `ed0f69…`와 동일한 dist-diagnostic** (다르면 재빌드본 → 회장께 재고정 안내).
3. 이름에 `[DIAGNOSTIC_DO_NOT_PUBLISH]` 표시 확인 · "Errors" 0 확인 · 서비스워커 active 확인.
