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

CrownyAI 헤드리스 검증 표면 (M1)

개요

클로드 세션이 웹 검증을 Chrome headless 대신 CrownyAI(WKWebView)로 수행하도록, CROWNY_VERIFY_OUT=<디렉토리> 환경변수 기반 원샷 검증 모드를 신셸에 추가했다. 포커스 무탈취(Accessory 정책 + 화면밖 창), file:// 지원, 로드 완료 시 6종 산출물 수집 후 VERIFY_DONE 기록 + 자동 종료. 비검증 모드 회귀 0(전부 env 게이트).

계약 (M3 래퍼 의존)

CROWNY_VERIFY_OUT 하위:
  • dom.html = documentElement.outerHTML
  • text.txt = body.innerText
  • measure.json = #__MEASURE__ data-json 원문(엔티티 해제), 없으면 {}
  • meta.json = {"url","title","ok":true|false[,"error"]}
  • console.json = console.error/window.onerror 배열(베스트에포트)
  • shot.png = WKWebView takeSnapshot → PNG
  • VERIFY_DONE = OK | ERROR: <사유> → 1초 뒤 terminate

수정/신규 파일

  • 신규 native/crowny-ai-verify.m — 검증 로직 전량(caVerifyMode/OutDir/InstallConsoleHook/
RegisterTarget/Target/OnFinish/OnFail/ArmWatchdog). ASCII 심볼만.
  • native/crowny-ai.h — 섹션 7 검증 표면 API 선언 추가.
  • native/Makefile — AI_SRC 에 crowny-ai-verify.m 추가.
  • native/crowny-ai-main.m — main() Accessory 정책 분기, initWithApp 검증모드 창 화면밖+orderBack,
applicationDidFinishLaunching 대상등록+워치독무장, activateIgnoringOtherApps 4곳 게이트.
  • native/crowny-ai-content.m — makeWebView 콘솔후킹 주입, createTabWithURL file:// loadFileURL,
didFinishNavigation→caVerifyOnFinish, handleLoadFailure→caVerifyOnFail, activate 2곳 게이트.
  • 한선씨 동반 native/검증표면.한선 — 로직 흐름 미러(STRICT 컴파일 OK, 자체시험 18/18 ALL_PASS).

실측 증거

  • 빌드: make ai 에러0, 신규 경고0(기존 property-ivar·cbButlerTextHeight 경고만). 689K.
  • 설치: install-ai-app.sh ad-hoc 재서명 OK. 실행번들 strings: CROWNY_VERIFY_OUT=1·VERIFY_DONE=1·
measure.json=1·__crownyVerifyConsole=2.
  • 실측 A (https://game.crowny.org/): ~3s VERIFY_DONE=OK, dom.html 25808B(title·game·crowny 실컨텐츠),
shot.png PNG 1280x703 RGBA, meta ok:true, text 3894B, 프로세스 자동 종료.
  • 실측 B (file:// + #__MEASURE__): ~2s OK, measure.json = 심은 JSON 그대로(&apos;/&amp;'/& 엔티티 해제 확인),
file:// loadFileURL 로 로드, 자동 종료.
  • 포커스: Accessory 정책 + 화면밖(-20000,-20000) orderBack — Dock 아이콘·가시창 없음. 기존 8개 사용자
인스턴스(4h+ 상주) 무접촉, 검증 프로세스 orphan 0.

잔여/주의

  • file:// 로드가 이제 loadFileURL 사용(검증모드 무관 일반 개선 — content.m 타 경로와 동일 관례, 회귀 아님).
  • meta.json title 은 file:// 에서 빈 문자열 가능(WKWebView title KVO 지연) — dom.html 에는 존재. 비차단.
  • settings.m 의 activate 1곳은 검증 원샷 경로 미도달이라 미게이트(로그인/설정 UI 진입 시만).