← 목록
AI 2026-07-24 4KB 읽기 5분

크라우니AI 웹검증 도구 구축 — Chrome 대신 크라우니AI가 기본 검증 브라우저

개요

클로드 세션의 웹 검증(디자인대조 등)이 지금까지 Google Chrome headless(--dump-dom)에 의존했던 것을, 크라우니AI(자체 브라우저, WKWebView)를 기본 검증 엔진으로 전환. Chrome은 자동 폴백으로 강등.

무엇을 했는지 (모듈 4개)

M1 — 크라우니AI 검증표면 (ObjC, 신셸)

  • 신규 native/crowny-ai-verify.m + main/content/헤더/Makefile 수정, make ai 재빌드 + install-ai-app.sh 설치 완료.
  • CROWNY_VERIFY_OUT=<디렉토리> env로 기동하면 검증 모드: URL 로드 → dom.html(outerHTML)·text.txt(innerText)·measure.json(#__MEASURE__ data-json)·shot.png(WKWebView takeSnapshot)·console.json·meta.json 덤프 → VERIFY_DONE 마커 → 자동 종료(20s 워치독).
  • 포커스 무탈취: Accessory 정책 + 화면밖 창 + activate 호출 게이트. 사용자 상주 인스턴스 무접촉.
  • file:// 지원(loadFileURL). 한선씨 동반 native/검증표면.한선 (STRICT 0경고, 자체시험 18/18).

M2 — 한선씨 판정코어

  • /Users/ef/CrownyBrowser/tools/검증판정.한선검증판정.toau (STRICT 0경고).
  • 입력: CROWNY_VERIFY_MEASURE(measure.json)·CROWNY_VERIFY_SPEC(규격.psv, 기본=디자인규격.psv)·CROWNY_VERIFY_SUBSET(콤마구분, 공백금지).
  • 출력: PASS|셀렉터|속성|기대|실측 / FAIL|…|오차 / SKIP|… / 판정|티·옴·타|P|F|S. 경계값(|실측-기대|==오차)=PASS.
  • 픽스처 티/타/옴 3종 + null·서브셋·기본경로 실측 통과. 학습DB add 완료.

M3 — 래퍼 도구

  • ~/.claude/scripts/크라우니AI검증.shdump / text / shot / measure / open / status.
  • measure = 측정JS 주입 → 크라우니AI 렌더 실측 → 한선씨 판정코어. 티=exit 0.

M4 — 기존 검증정본 배선 전환

  • /Users/ef/CrownyBrowser/tools/디자인대조.sh 엔진 스위치: 기본=크라우니AI, CROWNY_VERIFY_BROWSER=chrome으로 강제 Chrome, 크라우니AI 실패(앱없음/타임아웃/ERROR/빈 measure) 시 자동 Chrome 폴백(+stderr 고지).
  • 출력·exit 계약 불변 → PostToolUse 훅 디자인대충게이트.sh 회귀 0 (파이프 시뮬레이션으로 확인).
  • python3 비교부는 유지(의도적): M2의 SKIP-on-missing 의미론이 기존 FAIL-on-missing 게이트 계약과 달라 게이트 파손 위험 → 측정 획득부만 교체. 백업 디자인대조.sh.bak-크라우니AI배선전.

종단 실측 (메인 세션 직접 재검증 포함)

  • status 7/7 OK · dump https://game.crowny.org/ → DOM 19KB 실컨텐츠 + PNG 1280×703 · measure _스모크.html → 판정|티|27|0|0 (훼손본 → FAIL·exit 1) · 디자인대조.sh 크라우니AI vs Chrome 판정 바이트 동일 · 훅 경로 FAIL 주입 형식 불변.

발견한 함정 (신규 2건)

  1. WKWebView loadFileURL 부모디렉토리 제한: /tmp 임시 HTML이 절대경로 file:// CSS를 참조하면 무에러로 CSS 미로드 → 실측치 완파(.tabbar 1301). 측정 임시파일은 원본과 같은 디렉토리에 생성해야 함. Chrome은 이 제한 없음.
  2. bash 한글 변수명(macOS bash 3.2): CROWNYAI검증= 대입이 command not found — ASCII 변수명 필수.

관련 파일

  • 앱: /Users/ef/CrownyBrowser/native/crowny-ai-verify.m (+main/content/h/Makefile), 동반 native/검증표면.한선
  • 판정: /Users/ef/CrownyBrowser/tools/검증판정.한선·.toau
  • 도구: ~/.claude/scripts/크라우니AI검증.sh
  • 배선: /Users/ef/CrownyBrowser/tools/디자인대조.sh (백업 .bak-크라우니AI배선전)

잔여 이슈

  • 스크린샷 축 ~/.claude/scripts/디자인갭검증.sh는 아직 Chrome(--screenshot) — 크라우니AI검증.sh shot으로 교체 가능(후속).
  • 라이브(이미 떠있는) 인스턴스에서의 즉시 DOM 회수는 미지원 — 검증은 원샷 전용 인스턴스 방식. 필요 시 adoptTab 계열 IPC 확장 후보.
  • console.json은 베스트에포트(에러 후킹 수준).