← 목록
AI 2026-07-12 9KB 읽기 9분

크라우니AI 기본 서비스 8종 탑재 + 학습래칫 (2026-07-12)

개요

빌드큐 1~8 서비스(아카데미·광고스튜디오·코드생태계·세일즈·커머스·자동화·카피·뉴스레터)를 전수 현황체크 후, "쓸수록 똑똑해지는" 학습래칫을 탑재하고 크라우니AI(CrownyBrowser) 기본 서비스로 배선했다. 울트라 오케스트레이션(정찰 3병렬 + 구현 4갈래 Workflow, sonnet 위임).

1. 현황 체크 (실측)

  • 8종 전부 game.crowny.org:9775 1차 라이브: 페이지 7~12KB + 엔진 API 종단 200 (한선씨 엔진 SSOT — spawnSync stdin/stdout).
  • academy:9865(전용)·edu:9650(crownyc) 정상. 전용포트 2~8(ad:9956, code:9900, sales:9957, auto:9902, copy:9958, letter:9959)은 Phase2 미착수(DOWN).

2. 학습래칫 (crowny-game — sonnet 위임, 종단검증 PASS)

  • 한선씨/서비스학습.한선 (SSOT 신규): 기록/조회/피드백/통계, 2그램 유사도(≥60%)+score≥2 캐시 서빙, PSV 회전(500줄·저score 우선 축출). 데이터=data/학습/<svc>.psv.
  • src/learn.js: 7개 엔진 POST 래핑(조회 HIT=캐시 즉답 learned:true / MISS=엔진 후 기록, learn_id 주입) + POST /api/learn/feedback + GET /api/learn/stats + GET /api/ai/manifest.
  • 종단 실측: learn_id 발급 → 피드백 ×2(score 2) → 동일입력 재요청 learned:true 캐시 HIT. 8페이지 회귀 200.
  • ⚠ 입력() 프라임리드 더미줄: 이 엔진에서는 오히려 첫 줄을 삼킴(실측) — 더미줄 없이 순차 입력()이 정답. 파일 헤더에 문서화됨.
  • 상세: CrownyDoc 2026-07-12-crowny-game-학습래칫.md

3. 크라우니AI 탑재 (CrownyBrowser)

정찰 핵심 발견 (울트라 3병렬)

  • 라이브 런처 SSOT = src/앱목록.psv + ObjC 네이티브 grid (appListEntries+launcherCardRects). src/런처앱.한선·런처렌더.sh는 죽은 코드(구 PPM 경로) — 수정해도 무반영.
  • PSV에 행만 추가하면 클릭 → routeCrownyAppURL nil → 빈 탭 (조용한 무동작). 스키마+코드 동시 변경 필수.
  • 북마크 기본값(defaultBookmarks)은 2026-07-12 GUI 재구축 때 의도적으로 비워짐 → 이번 작업에서 불건드림.
  • 시작페이지 SSOT = bundle/start/index.한선 (index.html은 생성물).

구현 (계약: 이름|url:<URL>|-|-|-|설명 — toau경로 자리 url: 접두)

대상내용
src/앱목록.psvurl: 규약 주석 + 8종 행 append
src/서비스카드.한선 (신규, 한선씨 동반 SSOT)서비스행파싱·런처레이아웃(cols=3 적응높이)·URL래핑판정 4상(hybrid=티 raw/전용=옴 crowny://web 래핑/standalone=타 미표시/로컬=음). CROWNY_STRICT 컴파일+실행 10/10 PASS. 학습: 런처서비스카드_PSV파싱_레이아웃_4상래핑
native/crowny-browser.m①appListEntries url: 파싱 ②mouseDown isLauncher url 디스패치(#ifdef CROWNY_HYBRID raw / #else crowny://web 래핑) ③launcherCardRects cols=3 적응높이(최소64) ④launcherAccentForApp 8색(골드·러스트코랄·틸·앰버·바이올렛·스틸블루·플럼·포레스트) ⑤학습배지: dispatch_once 비동기 NSURLSession manifest fetch(game.crowny.org→127.0.0.1:9775 폴백, 5s)→캐시→drawRect "지능 N·활용 M"(카드高≥80만)
native/crowny-browser-standalone.murl: 행 필터 2지점(saAppListRow/saAppListEntries — WebKit0·M4없음이라 미표시). make standalone 클린
bundle/start/index.한선 → index.html 재생성.tiles wrap화 + 8종 타일 + .svc-badge + manifest fetch 배지 스크립트(node --check PASS, 디자인대조 4/0)

검증 (실측)

  • 3변종 빌드 클린(기본·Universal·Crowny-Full + standalone).
  • CrownyAI.app 바이너리 mv 교체(서명캐시 함정 회피) → 재기동(PID 88153).
  • 스크린샷 육안 PASS: 런처 17카드(로컬9+서비스8) 3열 정상, 8색 구분, 학습배지 라이브(카피 "지능 1·활용 2" = 실 학습데이터, 광고스튜디오 "지능 2").
  • URL 열기 E2E PASS: https://game.crowny.org/academy → 새 웹탭 WKWebView 완전 렌더.
  • 잔여: 좌표 실클릭 E2E(cliclick/Quartz 부재 — 클릭 경로는 소스검수+한선씨 SSOT로 보강), 시작페이지 브라우저 내 육안(생성물 검증은 완료).

크라우니코드 비중

  • lookup HIT 0 / MISS 3 / learn 3건 (서비스학습_PSV_2그램캐시_회전, 런처서비스카드_PSV파싱_레이아웃_4상래핑, 시작페이지_서비스타일_매니페스트배지)
  • 신규 도메인로직이라 LLM 1회 생성 → 전량 학습DB 등록(다음부터 토큰0 재구축 가능)

관련 파일

  • /Users/ef/crowny-game/{한선씨/서비스학습.한선, src/learn.js, server.js, data/학습/}
  • /Users/ef/CrownyBrowser/{src/앱목록.psv, src/서비스카드.한선, native/crowny-browser.m, native/crowny-browser-standalone.m, bundle/start/index.한선}

잔여 이슈

  1. 좌표 실클릭 E2E 자동화(cliclick 설치 또는 pyobjc) — 기지 한계.
  2. 전용포트 Phase2(ad:9956 등 독립 서비스 스핀업) 미착수 — 빌드큐 유지.
  3. /api/sales 프리픽스에 pipeline.js CRUD 동거 — 학습 래핑 분리 검토.
  4. 회전 500줄은 소규모 스트레스만 실측(3줄 오버라이드) — 대규모 부하는 분석상 안전.
  5. index.html.bak(구 premium-v1) 스테일 백업 정리 검토.
  6. 아카데미 카드 배지 "지능 0" — academy는 GET 커리큘럼이라 학습 미래핑(정상). 채점 API 래핑은 academy.crowny.org 트랙에서 검토.

2차 — 잔여작업 완주 (같은 날)

  1. 실클릭 E2E PASS: cliclick 설치 → 런처 커머스 카드 실좌표 클릭 → 새 웹탭 game.crowny.org/commerce 완전 렌더 스크린샷 실증. (System Events click은 커스텀 NSView 미전달 — cliclick이 정답)
  2. 전용포트 Phase2 라이브(무추가데몬): server.js DEDICATED_PORTS — 같은 앱이 6포트 추가 리슨, 루트만 서비스 페이지 재작성. ad:9956/code:9900(→/build)/sales:9957/auto:9902/copy:9958/letter:9959. 게이트웨이 라우트·포트 레지스트리 기예약분과 1:1. 6도메인 Host 라우팅 200 + 전용포트 경유 API·학습층(learn_id) 실측. 동반 SSOT=한선씨/전용포트.한선(10/10).
  3. sales 래핑 오염 분리: wrap()이 SERVICES api 서브경로만 개입 — /api/sales의 pipeline.js CRUD 비개입(401 1.2ms 즉답). 동반 SSOT=한선씨/learn.한선(15/15, 핵심 회귀 포함).
  4. 회전 부하 실측: 550건→정확 500줄 캡(저score·오래된순 축출). 풀상태 지연 기록 218ms/조회 138ms(36KB). 읽기=버퍼파일읽기 경로(64KB 캡 무관). 관찰: 1KB 출력×500줄=~500KB 시 바이트스캔 지연 증가 가능 — 필요 시 MAXLINES 또는 byte캡 조정.
  5. index.html.bak(구 premium-v1 스테일) 삭제.

남은 잔여 (사용자 절차)

  • 6도메인 공개 HTTPS: cert SAN 확장(abti certbot expand → stunnel conf 재생성 — feedback_stunnel_gen_san_gap). 게이트웨이 8080 Host 라우팅은 이미 200.

3차 — HTTPS 마감 (사용자 승인 후)

  • 실측 결과 6도메인 전부 기존 cert SAN에 이미 포함(ad/code/auto/copy=crownybus.com, sales/letter=crownybus.com-ext) — certbot expand 불필요했음.
  • 공개 HTTPS 종단 6/6: https://{ad,code,sales,auto,copy,letter}.crowny.org → 200, ssl_verify=0. letter POST 학습층(learn_id)·game manifest https까지 실측.
  • 잔여 이슈 0 — 빌드큐 1~8 고도화 트랙 전체 마감.

4차 — 오답서빙 실사고 수리 (사장님 지적 "적용된 게 심히 이상")

사고: 조회의 2그램 60% 유사매칭 캐시가 다른 입력의 응답을 통째 대체 서빙 — copy id1(크라우니학습래칫 테스트 레코드, feedback으로 score2)이 "신뢰+구매+크라~" 계열 입력 전부에 서빙돼 무엇을 물어도 같은 답 반복. 18:28의 "캐시 HIT PASS" 보고가 실은 이 오답서빙이었음(learned:true 플래그만 보고 내용 미대조 — 허위기록.sh 소급 등록). 수리(근본): ①대체 서빙 전면 폐지 — 엔진이 항상 응답 생성(결정론이라 캐시 이득 0, 심지어 캐시 138ms>엔진 23ms) ②기록=정확키 upsert(같은 키 hits+1=활용 집계) ③입력키에 필드명 포함(k=v, 교차충돌 방지) ④조회=정확일치 디버그용 ⑤오염 데이터 초기화. 학습층 역할 재정의 = 활용집계+품질피드백+배지(манifest 불변 — 런처·시작페이지 배지 무영향). 검증: 엔진 CLI 6/6(upsert·유사키 무개입·피드백·통계), learn.한선 16/16(필드충돌 회귀 포함), 라이브 — 크라우니클래스 입력→크라우니클래스 응답(9회 언급), 반복→id 동일·hits 증가, 다른 제품→별개 id·정확 반영, 8페이지·manifest·피드백·게이트웨이 회귀 200. 메모리: feedback_유사캐시_대체서빙_오답사고.md — 캐시 서빙=정확키만, 검증=플래그 아닌 응답내용 대조.