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 그대로(
'/&→'/& 엔티티 해제 확인),
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 진입 시만).