WS-I 크롬 확장 완료 — center.balerion.cloud iframe 오버레이
PR #11 (OPEN·MERGEABLE, 머지는 PM) · 브랜치 feat/ws-i-extension · 2026-07-05
BLUF
키퍼 어드민 등 폐쇄 외부 전산 위에 콕핏(center.balerion.cloud/app)을 iframe 오버레이로 얹는 MV3 크롬 확장 신규. DC 원형을 계승하되 셀렉터 실패 폴백과 frame-ancestors 프레이밍 정책을 추가해 실전 취약점을 제거.
DC 원형 대비 개선 (핵심)
- 신뢰성 역전 — 우하단 FAB를 즉시·무조건 마운트 → 사이드바 주입 실패해도 항상 기동. (원형은 주입 성공 시에만 진입점 → 해시 깨지면 조용히 죽음)
- 셀렉터 다중전략 —
nav[class*=sc-]/aside nav ul/[role=navigation]폴백 →sc-aa3c1307정확 해시 의존 제거 (ADR-001 line 77 실현) - 오버레이 드로어 — host
<main>스왑 대신 host 무관 고정 오버레이 - 설정/확장 — chrome.storage 옵션(기본 center.balerion.cloud/app/, 테넌트 경로), 툴바 activeTab 원클릭, 추가 도메인 동적 등록
프레이밍 정책 (frame-ancestors)
deploy/Caddyfile(WS-C 소유)에 frame-ancestors 'self' https://admin.keeperplatform.com chrome-extension: append + -X-Frame-Options. 전면개방 금지 — 키퍼 어드민 + 확장 컨텍스트만. WS-C 재배포 후 발효.
검증 (증거 기반)
| 항목 | 결과 |
|---|---|
| 확장 주입/폴백 (jsdom) | 13/13 |
| 콕핏 screenHash | 9/9 |
| 프론트 회귀 | 84 (기존 75 유지) |
| 백엔드 회귀 | 134 |
| 콕핏 build | OK |
| 실브라우저 (Playwright 독립 Chromium) | 사이드바+FAB 주입 / 폴백(FAB only) / 라이브 콕핏 iframe 실로드(title="다이렉트마켓 콜센터") / 탭→#screen 갱신 |
PM 확인 / 미배포 주의
- Caddyfile frame-ancestors는 WS-C 재배포해야 실적용. 테넌트 도메인 추가 시 allowlist 확장.
cockpit/src/App.tsx해시 수신 1블록 append (F/G의 Console.tsx 접촉과 무관).- 확장 테스트는 콕핏 build 오염 회피 위해
extension/자체 vitest(cd extension && npm test)로 분리. - 스토어 배포 비범위(개발자 모드 로드 —
extension/README.md). DC 레포 무수정.