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

CrownyAI GUI 재구축 — 스펙 + 반복오류 로그 (2026-07-12)

★ 반복오류의 근본 원인 (이걸 먼저 인정)

  • 나는 헤드리스라 실행 중인 GUI를 볼 수 없다. PPM 앱은 렌더→PNG→이미지로 볼 수 있지만, AppKit 크롬(탭/주소창/틀/새창)은 앱이 창을 띄워야만 존재해서 내가 검증 불가.
  • 그 결과: 크롬을 고치고 "됐다"고 했지만 사장님 화면에선 안 바뀜(탭 정렬·새창 메뉴·글씨 묻힘 등). = "했다고 하고 안 됨"의 정체.
  • 처방(합의 필요): 크롬 변경은 1개씩 → 사장님이 스크린샷 → 내가 조정. 내가 "됐다" 단정 금지, 스크린샷으로만 확정.

반복오류 목록 (같은 실수 재발 방지 — 계속 추가)

  1. 픽셀 샘플링만으로 "정상" 판정 → PNG 육안 필수([[feedback_GUI검증_이미지육안_픽셀샘플금지]]).
  2. 헤드리스로 크롬 검증 불가한데 "됐다" 주장 → 스크린샷 루프 강제.
  3. 6300줄 crowny-browser.m 여러 작업 동시편집 → 회귀. 한 번에 한 작업, 빌드+배포 확인.
  4. 실행 중 앱은 옛 바이너리/옛 렌더 캐시 → 변경 후 반드시 "완전 종료+재실행" 안내.
  5. 말 너무 길고 병렬 에이전트 남발 → 짧게, 필요할 때만.

완료 (2026-07-12, 빌드검증)

  • 전용 PPM 앱 GUI 전면 중단: crowny://app/* → 웹 시작페이지 리다이렉트(런처+9앱+터미널PPM 미생성). 앱 .한선 소스는 재구축 참조용 디스크 보존.
  • 북마크바 제거(bmH=0), 기본 즐겨찾기 비움.
  • 결과: CrownyAI = 깨끗한 범용 웹브라우저(WKWebView). 네이티브 PTY 터미널은 파일 메뉴로 유지.

재구축 스펙 (합의 후 착수)

1. 글씨체(typeface) — 크롬 전체

  • 현재: systemFont(중구난방). 목표: 통일된 1벌.
  • 후보: Pretendard(크라우니 표준, 한글+라틴) / SF Pro / 사장님 지정. ※webfont CSP 무관(네이티브라 시스템 설치 폰트 사용).
  • 적용점: 탭 라벨·주소창·메뉴·북마크(재도입 시)·다이얼로그.

2. 틀(frame/chrome) 재설계

  • 타이틀바: FullSizeContentView 페어링 누락(CHR-01) 수정 → 정렬 근본.
  • 탭바: 라벨·닫기X 4px 겹침(CHR-07) + 오버플로 새탭버튼 겹침(CHR-06) 수정. 세로 정렬 재계산.
  • 새 창(⌘N): 탭바/네비/뒤로앞으로 없는 미니창(CHR-02) → 메인 크롬 상속.
  • 리사이즈 핸들러(windowDidResize) 부재(LAY-07) → 추가해 리사이즈 시 재배치.
  • 디자인 토큰: 크라우니 SSOT(--bg #FAF9F7·골드 #C9A961, 다크 #0A0908).

3. CrownyOS GUI(전용 앱) — 별도 트랙

  • FB_MAX(VM 캔버스 상한) 근본 처방: 정적배열→동적 malloc(P0-2, VM 회귀 게이트 필수).
  • 아이콘 프리미티브 신설(현재 0). 글자폭추정→실 CIF advance.
  • 앱 재작성은 스케일+센터 패턴(계산기/시계 참조) — 단 전용 재개는 사장님 결정 후.

다음 단계 (순서)

  1. 사장님: CrownyAI 완전종료+재실행 → 더미 앱 사라지고 웹만 깨끗한지 확인(삭제 검증).
  2. 글씨체 확정(1벌 지정) → 크롬 전체 적용(1커밋) → 스크린샷 확인.
  3. 틀 1요소씩(타이틀바→탭바→새창→리사이즈) → 각 스크린샷 확인.
  4. 전용 CrownyOS GUI 재구축은 위 완료 후 별도.

★ 규율 강제력 적대검증 (2026-07-12 사장님 지적)

  • 발견(정직): 내가 "메모리에 박았다"는 규율은 강제력 0. MEMORY.md/feedback 파일 = 배경 컨텍스트(system-reminder)라 Fable이 원리적으로 무시 가능. settings.json 훅 배선 0건이었음.
  • 크라우니코드가 작동한 이유: 규칙을 훅(PreToolUse/PostToolUse 등, 하네스가 강제)으로 배선. "[한선씨 동반 필수]"가 내 의지와 무관하게 뜨는 게 증거. 메모리(조언)≠훅(강제).
  • 처방(진짜 도구화): ~/.claude/scripts/디자인대충게이트.sh 생성 → settings.json PostToolUse(Write|Edit) 배선. 디자인 HTML 저장 시 자동으로 디자인대조.sh 실행, 규격 FAIL이면 "[디자인 대충 FAIL]"을 additionalContext로 강제 주입(무시불가). 자가테스트 통과(위반 HTML→FAIL 정확 검출).
  • 교훈: 앞으로 "규율을 세운다"=메모리 메모가 아니라 훅/enforce 스크립트로 강제 배선해야 실효. 메모리는 보조.