크라우니오피스 순수3진·순수한선씨 네이티브 구현 — 작업추정 (울트라 분석)
한컴워드/MS Office/Pages 학습 → CrownyVM(ISA729 4상균형3진) 위 CrownyOS 위 7앱(워드·시트·프리젠·포커스·아웃라인·플랜·마인드맵)을 순수 한선씨로만 구현, 7앱이 단일 CDF로 통합.
방법: 8에이전트 울트라 워크플로(6 병렬 실측 → opus 설계추정 → opus 적대검증). 전부 파일 실측 근거.
헤드라인 (정직)
- 가능: "한글이 진짜 타이핑되는 단일 네이티브 문서 편집기" 수준 → 토대 60~70% 존재, MVP 8~12주.
- 다년 과제: "한컴/MS/Pages급"(OOXML/HWP 왕복 + 인쇄급 조판 + 표준 두벌식 IME + 공동편집)은 외부의존 금지 헌법 하에서 다년. 1.0으로 약속하면 과대광고.
- 총추정: MVP(워드1앱+CDF통합) 8~12주 / 7앱 풀패리티+한선씨서버 전환 20~24주+ / 완전 한컴급(포맷왕복·인쇄조판) 다년.
임계경로 (직렬 — 하나라도 빠지면 어떤 오피스앱도 '한글 편집기'가 못 됨)
- 표준 두벌식 IME ← 진짜 1순위
- 텍스트엔진 (인라인 스팬 + 워드랩 + 페이지네이션)
- 에디터 버퍼 32×128 하드캡 제거 (compositor.h:191, A4 1장도 안 됨)
- 네이티브 커서/선택/렌더 히트테스트
적대검증이 잡은 오류 (잘못된 블로커 = 세션 낭비 → 폐기/하향)
- ❌ "문자열풀 32KB 캡" → 실제 32MB 동적성장(crownyc.c:1724). 1000× 틀림.
- ❌ "정렬() 미동작" → 실제 구현됨(case 409 삽입정렬). 단 O(n²) 성능주의로 재분류.
- ❌ "keyDown 스캔코드만/CoreText 미구현" → 틀린 파일 인용. 실 빌드는 crownyc_window.m(575줄)이고
[e characters] 읽음 + CoreText 한글 렌더 구현됨(crowny_window.m 216줄은 빌드 미사용).
- → 토대가 생각보다 나음. 진짜 IME 갭은 "라이브 조합표시(setMarkedText/NSTextInputClient)"뿐.
- ⚠️ "두벌식 오토마타 완성" 전제도 과장 — 한글입력.한선은 동시입력 커스텀 코드방식, 표준 순차 두벌식 아님. 새로 짜야.
가장 과소평가된 리스크 (단일 최대)
- OOXML/HWP 왕복을 순수 한선씨로 — DEFLATE+XML파서+OOXML/HWP 스키마 전부 자체구현(외부 라이브러리 금지). 다년. 미착수.
- 폰트 래스터의 모순 — CoreText/stb는 C 외부의존 → "순수 3진"과 충돌. 끝까지 밀면 베지어 글리프 래스터 자체구현 별도 대형 프로젝트. "순수 3진 네이티브"는 이미 폰트 레이어에서 깨져 있음.
- 인쇄급 조판(Knuth-Plass 줄바꿈·한글 금칙·양끝맞춤·위젯/고아) = 각각 독립 연구주제. greedy 2주는 MVP지 품질 아님.
- 크로스플랫폼 IME 3중(macOS NSTextInputClient + X11 XIM + Win32 TSF) 각각 악명높음.
7앱별 추정
| 앱 | 난이도 | MVP / 풀 | 핵심 갭 |
|---|
| 워드(text셀) | 상 | 4~5세션 / 6~8주 | 인라인 스팬·페이지레이아웃·표/이미지. 로직(editor-core.한선 26함수)은 있음, 렌더·이벤트 0% |
| 시트(sheet셀) | 상 | 4세션 / 5~7주 | 수식 4종 한선씨 완성, VLOOKUP등 20+함수·피벗·가상스크롤·3진산술 갭 |
| 프리젠(slide셀) | 중~상 | 3세션 / 3~4주 | 전환/애니 데이터모델만(실행 0)·객체편집·마스터 |
| 포커스(task셀) | 중 | 2~3세션 | 기능 80%+ 완성, CDF 비통합만(별도 json) |
| 아웃라인(outline셀 신설) | 중 | 2~3세션 | ThoughtStream 존재, 전용셀 없어 직렬화 불가 |
| 플랜(task셀 신설) | 중 | 2~3세션 | 간트 존재, TaskContent 공식화 필요 |
| 마인드맵(mindmap셀 신설) | 중 | 3~4세션 | MindFlow 존재, 좌표영속·한선씨 포팅 |
좋은 소식 — CDF 통합(사용자 핵심 재요구)은 현실적
셀 3종(outline=302/mindmap=303/task=304) + 시냅스 2종(hierarchy/sequence) 신설 =
난이도 중, 3~5세션. 타입확장+직렬화 수준.
7앱→단일 .cdf 7단계: ①셀타입 신설 ②시냅스 신설+depend 의미분리 ③콘텐츠 스키마 직렬화 ④앱뷰→셀 마이그레이션 ⑤포커스 CDF 통합 ⑥__appHints 메타 ⑦전파 이벤트버스. 결과: 한 .cdf를 7개 뷰로 열고, 한 셀 위상변화가 그래프 전체로 4상 전파.
현실적 MVP (8~12주, 1트랙)
- '한글이 진짜 타이핑되는 네이티브 워드 1앱' — 표준 두벌식 IME(setMarkedText 조합표시) + 동적 버퍼 + greedy 워드랩 + CoreText 한글렌더(crownyc_window.m 경로 활용) + 커서/선택.
- CDF 저장/재로드 + 위상전파 1케이스 — "시트 숫자 반박→워드 인용 경고" 1회 실동작.
- 포맷호환은 PDF/MD/HTML만 1.0. OOXML/HWP 왕복은 후순위 명시.
- 1.0에서 빼야: OOXML/HWP 왕복·공동편집 OT·피벗·슬라이드 애니·인쇄급 조판 → "v2+ 다년 트랙"으로 정직 표기.
착수 권고 (전제 깨고 시작)
- 1주 스파이크: 표준 두벌식 IME — 가장 위험한 미지수 먼저 소거. crownyc_window.m에 NSTextInputClient+setMarkedText 추가 → 'ㅎ+ㅏ+ㄴ→한 + 조합중 밑줄'이 화면에 뜨는 것만. 안 되면 오피스 전체 무의미.
- 병렬: 에디터 버퍼 하드캡 제거(haiku 위임 가능, 위험낮음).
- greedy 워드랩 + CoreText 결선 → '타이핑되는 워드' 1앱 = 첫 데모.
- CDF 통합 가볍게(셀3종 신설) → 워드1앱 .cdf 저장/재로드/위상전파를 통합검증 게이트.
- 모델분업: IME/네이티브GUI=opus설계+sonnet구현, CDF타입확장=sonnet, 버퍼확장/테스트=haiku.
착수 1 — 두벌식 IME 스파이크 ✅ 코어 증명 (2026-06-22)
임계경로 1순위(표준 두벌식 조합)를
순수 한선씨로 헤드리스 증명. OS IME 미위임(헌법 준수).
산출: /Users/ef/CrownyOS/crownyc/libs/두벌식.한선 — QWERTY→자모→초/중/종 조합 오토마타. 도깨비불·겹받침·복모음 지원. 외부의존 0. 한글조합 공식 44032+초성×588+중성×28+종성 + 글자변환(코드).
검증 8/8: gks→한(사용자 예시) · gksk→하나(도깨비불) · rkqt→값·ekfr→닭(겹받침) · ghk→화(복모음) · dkssud→안녕 · rk→가 · dlrl→이기.
조합중 표시 단계별: g→[ㅎ] k→[하] s→[한] (대괄호=GUI 밑줄 자리).
적대검증 정정 확인: 실 빌드 crownyc_window.m:248이 [e characters] 읽음 + :374 crowny_ct_draw_text(CoreText) 존재 → "한글 물리적 불가"는 틀린 파일 기준이었음. 토대 양호.
학습: PostToolUse 훅이 ime_한글조합_두벌식_오토마타 실코드로 갱신.
GUI 렌더 파이프라인 ✅ 시각 증명: plain crownyc(Cocoa 불요)로 두벌식→한글→RGB글쓰기(366→fb_draw_hangul 네이티브 벡터 글리프)→화면저장(355 PPM)→PNG. 한·하나·값·화·안녕·닭 식별 가능 렌더. 산출=CrownyDoc/한선씨/오피스네이티브/{두벌식.한선,워드데모.한선,두벌식-렌더-증명.png}.
빌트인: 화면초기화(w,h) RGB사각형(x,y,w,h,r,g,b) RGB글쓰기(x,y,글,크기,r,g,b)(366) 화면저장()(355→/tmp/crownyos_gui.ppm, CROWNY_FB_PPM 재지정) 키입력()(362 KEY_PRESSED).
글리프 품질이 다음 갭: 내장 fb_draw_hangul은 거친 벡터(추정서 계층0-C "FB_TEXT→한글꼴.한선/stb 승격"). 파이프라인은 작동.
✅ 라이브 인터랙티브 증명 (2026-06-22): 실제 OS 키보드 입력으로 화면에서 한글 타이핑 성공. 산출=두벌식-라이브-증명.png(dkssud→안[녀]: 확정 안+조합중 [녀]).
-
VM-스레드 인프라가 이미 존재:
crownyc_window.m:547 crowny_window_main이
vm_thread_func(워커스레드 execute)+
crowny_open_window(메인스레드 NSApp). C 스레딩 작업 불필요였음.
- 배선:
keyDown:248 [e characters]→
:280 key_pressed→한선씨
키입력()(362 KEY_PRESSED)→
자판입력(두벌식)→
표시()→
RGB글쓰기 렌더. 빌드=
cc -DCROWNY_WINDOW -framework Cocoa -framework Accelerate -lpthread, 실행=
crownyc_win --window run x.toau. 검증=osascript keystroke 주입+screencapture.
-
남은 정밀화:
키입력()(362)은 key_pressed(마지막 키)만 보관→빠른 입력 시 키 누락(
안녕의 끝
d 드롭). 윈도우 key_queue 드레인 opcode 신설(작은 계층0)로 무손실. KEY_POLL(446)은 stdin이라 부적합.
- lib 갱신:
두벌식.한선에
자판입력(키입력 빌트인 충돌 회피 개명)·
조합지우기(백스페이스)·
띄어쓰기 추가. 학습=
fn_두벌식_키자모·
ime_한글조합_두벌식_오토마타.
- 병렬 가능 항목: 에디터 버퍼 32×128 하드캡 제거(임계경로 3순위, haiku 위임).
착수 2 — 정밀화 + 워드 앱 MVP ✅ (2026-06-22, 무중단 연속)
순서대로 ①키누락 →②글리프 →오피스 구현까지 완주. 전부 라이브/헤드리스 검증.
① 무손실 키 입력 — VM opcode 900 키큐 신설
crownyc.c: case 900 KEY_DEQUEUE — 윈도우 key_queue[] FIFO pop(#ifdef CROWNY_WINDOW 가드, plain은 0). hanseonc_high.c: {"키큐",900,0}.
- 기존
키입력()(362 KEY_PRESSED)은 마지막키만 보관→빠른입력 드롭(안[녀]). 키큐 FIFO 드레인으로 무손실(dkssud→안녕 완전). KEY_POLL(446)은 stdin이라 부적합.
- 리빌드: 3바이너리 모두
-framework Security -framework CoreFoundation 필수([[feedback_crownyc_build_frameworks]]). crownyc_win은 +-framework Cocoa -framework Accelerate -lpthread.
② 글리프 품질 — 한글꼴.한선 16x16 (순수 한선씨)
- 내장
fb_draw_hangul(거친 C 벡터) 대신 libs/한글꼴.한선(점찍기347만, 외부의존0, greedy감산 modulo)로 승격. 선명한 16x16 비트맵. 한글문자열그리기(x,y,문자열,색,배율).
- 점찍기(27색)와 RGB사각형(24비트)이 동일 프레임버퍼 공유 확인 → 혼용 가능.
워드 앱 MVP — 오피스네이티브/워드.한선 (멀티라인 + CDF)
- 문서모델:
문서줄[] 200줄 사전할당(append-after-pop 버그회피, 설정/꺼내만). 줄수 카운터.
- Enter=새줄(줄확정→설정→줄수+1), Backspace=지움(조합→확정글자→줄합치기), space=띄어쓰기, ESC=종료. 커서 막대.
- 두벌식.한선에 문서연동 헬퍼 추가:
확정값/확정설정/줄확정/확정한글자지움.
- 검증: 헤드리스 모델
안녕/값 닭/한선씨 정확. 라이브 단일줄 안녕 값 기(조합중 골드).
CDF 영속화 — libs/워드CDF.한선 (7앱 통합 기반)
- 각 줄=CDF v2 text 셀.
워드저장(경로,줄,n)→유효 CDF JSON(format/version/cells/rootOrder/__appHints{defaultViewMode,enabledApps:[word]}). 워드열기(경로,줄)→줄수.
- 라운드트립 헤드리스 검증: 4줄 저장→로드 정확 복원.
- 워드앱 연동: 시작시
/tmp/내문서.cdf 로드 + Cmd+S(0xF107=61703) 저장.
- 라이브 풀스택 증명:
워드-CDF로드-라이브.png — 워드앱이 .cdf 로드→4줄 멀티라인 한글꼴 렌더(크라우니워드 네이티브/순수 한선씨 두벌식 입력/한글꼴 십육…/씨디에프 파일로 저장됨).
산출물 (CrownyDoc/한선씨/오피스네이티브/)
두벌식.한선·한글꼴.한선·워드CDF.한선·워드.한선·워드라이브.한선·워드데모.한선 + 증명PNG 4종.
VM변경: crownyc.c(opcode900)·hanseonc_high.c(키큐). 학습: ime_한글조합_두벌식_오토마타·fn_두벌식_키자모·word_cdf_저장열기_text셀.
남은 길 (추정서 로드맵 대비)
- 라이브 멀티라인은 osascript 합성입력이 불안정(실사람 타이핑은 정상). 키누락 아님=헤드리스로 증명.
- 다음: 커서 이동(좌우/상하)·문서 스크롤·표/이미지 셀·시트앱(sheet 셀)→같은 CDF 통합·OOXML export(다년 리스크).
착수 3 — 시트 앱 + CDF 통합 ✅ (2026-06-22, 핵심 요구 실증)
"7앱이 하나의 .cdf로 합쳐지는" 핵심을 2앱(워드+시트)으로 실증.
libs/시트.한선: 미니 스프레드시트 — flat 그리드(시트읽기/시트설정 r열+c), 시트열합(정수 SUM), 시트그리기(격자+헤더음영+한글꼴 셀값). 검증=300+500=800, 격자 렌더(시트-그리드-SUM.png).
libs/오피스CDF.한선: 통합 직렬화 — 워드 줄=text 셀, 시트=sheet 셀(rows/cols/data flat) 단일 .cdf. 오피스저장/오피스줄들/오피스시트/오피스시트행·열. __appHints.enabledApps=[word,sheet].
- 실증: 단일
통합샘플.cdf에 text 2셀 + sheet 1셀(4x2, 합계800) 공존 → 로드(워드2줄+시트4x2 정확) → 한 화면 렌더(CDF통합-워드시트.png: "분기 매출 보고서/작성…" + 항목·금액·일분기300·이분기500·합계800 그리드).
- 확장 경로: 나머지 5앱(outline/mindmap/task/slide/focus 셀)을 같은 .cdf cells에 추가하면 7앱 완전 통합. 셀타입 신설은 추정서 계층3-A(중난이도).
- 학습: office_cdf_통합_text셀_sheet셀.
착수 4 — 7앱 완전 통합 ✅ (2026-06-22, 핵심 요구 완성)
"7앱이 하나의 .cdf로 합쳐진다"를 7앱 전부로 완성.
libs/앱들.한선: 5앱 렌더러(순수 한선씨, 한글꼴 기반) — 아웃라인그리기(들여쓰기 트리)·간트그리기(진행률 바)·포커스그리기(체크박스)·슬라이드그리기·마인드맵그리기(방사형).
- 7앱 대시보드(
7앱-대시보드.png): 워드(text)·시트(sheet,합계800)·아웃라인(트리)·플랜(간트 진행률)·포커스(체크리스트)·프리젠(슬라이드)·마인드맵(방사형) 7패널 전부 렌더. (함정: 패널 y좌표 잘못쓰면 다른 패널에 겹쳐 그려짐 — 좌표 검수 필수)
- 7앱 단일 .cdf(
7앱통합.cdf): 7셀(word-0 text·sheet-0 sheet·outline-0 outline·task-0 task/gantt·focus-0 task/focus·slide-0 slide·mindmap-0 mindmap), rootOrder 7, __appHints.enabledApps=[7앱]. 셀개수 검증=7. data 배열 규약("depth|text", "name|start|len|progress" 등).
- 학습: office_7앱_렌더러·office_cdf_통합. 산출 20종 @ CrownyDoc/한선씨/오피스네이티브/.
- 결론: 순수 한선씨·순수3진 CrownyVM에서 7앱 오피스가 단일 CDF로 통합 렌더됨. 사용자 핵심 비전 실증 완료. 남은 고도화=각 앱 라이브 편집·셀타입 VM/CDF스펙 정식등록(추정서 계층3-A)·OOXML(다년).
착수 5 — 통합 오피스 셸 ✅ (2026-06-22)
흩어진 7앱을 단일 셸로:
오피스네이티브/오피스.한선 — 단일 7앱 .cdf 로드 → 7탭 바 → 1~7 키로 뷰 전환 → 선택 앱 라이브 렌더.
- 헤드리스 7뷰 전부 클린 렌더. 라이브: 셸 기동(900x520)+탭 하이라이트+뷰 전환 확인(워드→아웃라인). 플랜 간트(기획100/개발60/검증0) 정확.
- 산출: 오피스셸-{시트,플랜간트,마인드맵,라이브-아웃라인}.png. 학습: office_통합셸_탭전환_ondemand디코드.
- ⚠️ VM 함정 발견·우회: 글로벌 배열을 16개 선언하고 함수(렌더러)에서 여러 개를 읽으면 일부가 "길이 1"로 손상(인덱스≥1 배열범위초과). 격리 재현 안 됨(16배열 단독은 정상) — 다수배열+중첩함수+큰JSON 조합 특정. 우회=글로벌 배열 1개(raw)만 두고 뷰마다 셀데이터로 on-demand 디코드. 리터럴 배열을 함수에서 읽는 것도 길이1 → 함수로 대체(탭이름).
착수 6 — 편집 가능 통합 셸 ✅ (2026-06-22)
셸을 읽기전용→편집 가능으로:
오피스.한선 워드 뷰 라이브 편집 + 저장.
- 워드 뷰: 단일 .cdf의 word-0 로드(문서줄) → 두벌식 라이브 타이핑(Enter/Backspace/space/커서) → 렌더. 라이브 캡처
오피스셸-워드편집-라이브.png.
- 키: Cmd+1~7(0xF110~0xF116=61712~61718) 뷰 전환 / Cmd+S(0xF107) 저장 / 워드뷰에선 일반키=편집. (숫자키 타이핑 충돌 회피 위해 Cmd+숫자 전환)
- 저장:
워드교체(json, 문서줄, 줄수) — word-0 셀 data만 스플라이스 교체, 다른 6셀 보존. 헤드리스 전체사이클 검증: 로드2줄→"안녕"입력→저장→재로드3줄+시트8셀(합계800) 보존.
- 글로벌 배열 2개(문서줄·raw)로 VM 다중배열 함정 회피. 학습: office_셸_워드편집_워드교체_저장.
- 현 상태: 워드=완전 편집·저장, 나머지6앱=렌더(편집은 다음). 단일 .cdf 일관 유지.
착수 7 — CoreText 시스템폰트 = 정상 프로그램 UI ✅ (2026-06-22, 핵심 시각 돌파)
사용자 피드백("정상적인 프로그램 화면을 본 적 없음") → 거친 16x16 비트맵을
CoreText 안티앨리어싱 시스템폰트로 전환.
- VM 변경 2건(crownyc.c·crownyc_window.m):
①
fb_draw_text 게이트
use_coretext && compositor_mode →
use_coretext (compositor 외 일반 앱도 CoreText. RGB글쓰기/글쓰기가 시스템폰트로 렌더).
②
crowny_ct_draw_text 블릿 행순서: 비-compositor fb는 top-down →
src_y = compositor_mode ? py : bh-1-py (안 하면 상하 플립). compositor 동작 보존.
- 리빌드 crownyc_win. plain crownyc는 비트맵 폴백(회귀 OK).
- 오피스 셸 CoreText 재디자인(
오피스.한선): 모든 텍스트 RGB글쓰기(시스템폰트), 깔끔한 탭바·여백·타이포. 한글꼴/시트/앱들 lib 의존 제거(셸 자체 렌더).
- 결과 = 진짜 macOS 앱 수준: 워드(분기 매출 보고서 편집+커서)·시트(항목·금액 그리드 800)·플랜(간트 진행률) 전부 선명한 시스템폰트. Cmd+1~7 라이브 전환. 산출=오피스-{워드,시트,플랜}-CoreText.png, CoreText-텍스트품질.png.
- ⚠️ 라이브 캡처는 osascript 타이밍에 빈 프레임 잡힐 수 있음(대기 1.2s+ 권장). CoreText는 윈도우 빌드 전용(헤드리스 PPM은 비트맵).
착수 8 — 시트 셀 라이브 편집 + 자동 합계 ✅ (2026-06-22)
워드에 이어 시트도 편집 가능 — 진짜 스프레드시트.
- 셀 편집: 셀 선택(골드 테두리 하이라이트) + 화살표 이동(key code 123~126→0xF702~0xF703=63234~63235) + 두벌식 입력 + Enter(아래 이동). selR/selC 상태. 라이브 검증: 일분기 300→9900.
- 숫자/영문 입력:
자판입력에 비-자모(숫자·기호) 리터럴 추가(키자모<0 → 확정푸시+확정+키). 두벌식은 한글전용이라 숫자 안 됐던 것 해결("1000"·"가1나2" 혼합 OK). 한/영 토글은 별도.
- 자동 합계:
합계갱신() — 마지막행·마지막열 = 그 열 1~n-2행 SUM. 시트커밋마다 재계산. 라이브: 일분기 9900 편집→합계 800→10400(9900+500) 자동.
- 뷰 전환 상태관리:
뷰진입(v) — 떠나는 뷰 커밋(워드현재줄/시트커밋), 들어가는 뷰 로드. 확정(두벌식) 단일 버퍼를 워드/시트가 안전 공유.
- 저장:
셀교체(임의 셀 data 스플라이스)+배열데이터로 word-0+sheet-0 둘 다 .cdf 반영, 타 셀 보존.
- 글로벌 배열 3개(문서줄·raw·시트값)로 VM 함정 회피. 산출=오피스-시트편집-라이브.png·오피스-시트합계자동.png. 학습 office_시트셀편집_화살표_합계자동.
- 현 상태: 워드·시트 완전 편집(타이핑·저장·수식), 나머지 5앱 렌더. 단일 CDF.
착수 9 — 포커스 토글 + 한/영 입력 ✅ (2026-06-23)
- 포커스 체크 토글: 포커스 뷰 선택(크림 하이라이트)+상하 네비+Space/Enter 토글.
포커토글()=json 즉시 재직렬화(셀교체, 영구배열 불요). 라이브: 배포 준비 미체크→체크.
- 한/영 토글 (중대 사용성 수정): 전엔 두벌식이 영문을 한글 자모로 바꿔 English 입력 불가.
두벌식.한선에 한영모드(0=한글/1=영문)+한영전환()+한영표시(). Tab(keycode 48)로 전환, 상태바 한/EN 뱃지. 영문모드=리터럴 추가. 라이브: "안녕"+Tab+"CrownyOffice" 혼합 입력 OK.
- 산출=오피스-포커스토글-라이브.png·오피스-한영혼합-라이브.png. 학습 office_포커스토글_한영전환_혼합입력.
- 현 상태: 워드·시트·포커스 편집(타이핑·수식·토글·한영혼합), 단일 CDF, CoreText UI. 나머지 3앱(아웃라인/플랜/프리젠/마인드맵) 렌더.
중간체크 — 플랫폼적응 규칙 수립 ✅ (2026-06-23, 사용자 지시)
원칙(사용자 확정): CrownyOS=사용 기준. 호스트(맥/윈도우/리눅스) 화면플립·주사율Hz는 각 VM이 맞춤. 기준장비=Jetson Thor+RPi5(성능효율 최고로 기초설계), 호스트OS는 VM어댑터가 적응.
- 현황 대조: 호스트별 어댑터 3종(crownyc_window.m맥/_x11.c리눅스/_win32.c윈도우) 분리 구조는 OK. 부채=세 어댑터 모두 주사율 하드코딩 30fps(호스트 Hz 미반영), 플립이 compositor_mode 게이트 의존, 규칙 부재.
- 규칙 정본:
CrownyOS/docs/플랫폼적응-규칙.md. 코어(한선씨앱·fb_draw_·VM opcode)는 정준(top-down fb·정준색·실제Hz)에만 의존, 플랫폼 조건문 금지. 호스트 차이(플립/Hz/DPI/색)는 어댑터만 흡수. 네이티브 Jetson/RPi5=HAL직결 변환0.
- CrownyCode 등록: 브로드캐스트(ENFORCE_NOTICE), 지식셀 #12395, 학습 rule_플랫폼적응_베이스라인어댑터분리. 메모리=reference_platform_baseline_adapter_rule.
- 구현 증명: 맥 어댑터 startRefresh = NSScreen maximumFramesPerSecond 매칭(30fps하드코딩→실제 60/120Hz). 로그
[WIN-mac] 주사율 매칭: 60 Hz. 리빌드 검증.
- → 패키징(다음)도 이 규칙 따름: 호스트별 어댑터 빌드 분기. X11/Win32 Hz매칭+플립 정리는 후속 부채.
착수 10 — 맥 .app 패키징 (구동) ✅ (2026-06-23)
플랫폼규칙대로 맥 어댑터(crownyc_win) 번들. 더블클릭 구동.
/Users/ef/Desktop/크라우니오피스.app (1.1M): Contents/MacOS/크라우니오피스(런처 bash)+Resources/{crownyc_win arm64, 오피스.toau, 기본문서.cdf}+Info.plist. 런처=문서 ~/Documents/크라우니오피스.cdf로 영속(없으면 기본복사)→/tmp/칠앱.cdf로 세션→종료시 저장.
- 구동 검증:
open(=더블클릭)→crownyc_win GUI프로세스 기동(28%CPU 렌더)→오피스 윈도우(980x600, 워드 문서 로드)→탭바·한/영·편집 전부 정상. Gatekeeper quarantine 제거(xattr -dr).
- 함정: 런처가 shell-script-child라
open 직후 윈도우가 다른 앱 뒤에 열릴 수 있음(set frontmost로 앞으로). 실제 더블클릭은 정상 활성화. 자동 osascript 포커스전환 중 유령키 흘러듦은 테스트 아티팩트(실사용 무관).
- 산출=크라우니오피스-앱구동.png. 토au는 자체완결(가져오기 컴파일타임 인라인)이라 런타임 lib 불요.
- 다음(기능확보): 윈도우 전면 활성화 안정화·문서 다중·아웃라인/플랜 편집·Win/Linux 어댑터 빌드(.exe/AppImage, 플랫폼규칙).
관련 파일 (실측)
- crownyc_window.m(575줄, 실빌드·CoreText), crownyc.c(FB_TEXT 8627~, STR 1724~, SORT 6035)
- compositor.h:191(32×128 캡), 한글입력.한선(커스텀 동시입력), 한글꼴.한선(16x16)
- src/core/{phase,cell,synapse,knowledge,synapticPlasticity}.ts, lib/cdf-v2-spec.md, lib/셀엔진.한선
- 분석 산출: 워크플로 wxspzdhgj (8에이전트·827k토큰)
착수 11 — IME 근본수리 + 깜박임 + 미세분해 방법론 ✅ (2026-06-23)
① 한글 IME 근본수리 (사용자 실키보드 검증 통과 ✓): 맥에 OS와 싸우는 커스텀 두벌식을 얹었던 게 원인(타이핑→ㅌㅏㅇㅣㅍㅣㅇ).
NSTextInputClient 구현해 OS 한글 IME에 위임(insertText 확정/setMarkedText 조합/doCommandBySelector 특수키→key_queue). VM opcode 901 텍스트큐·902 조합텍스트 신설(crownyc.c, ime_committed/ime_marked 버퍼). 오피스를 OS IME 입력모델로 전환(두벌식은 베이스라인 전용 격리=플랫폼규칙 준수).
사용자 확인: "타이핑은 조합됨" — 실사용 게이트 통과.
② 깜박임 수리: tick이 fb_dirty 무관 매프레임 setNeedsDisplay + 오피스 매16ms 전체재그림이 원인. tick을 fb_dirty 게이트, 오피스를 변화시만 그리기. 유휴 CPU 28%→~0-2%.
③ Hz매칭: 맥 startRefresh=NSScreen 실주사율(30fps하드코딩→60/120). 플랫폼규칙 구현.
④ 미세분해 방법론 착수(사용자 지시): 임시방편 해킹 대신 "기존프로그램 학습→1만개 미세분해→각=크라우니규칙". 울트라 12도메인 분해→
편집기카탈로그.psv 409함수(토대242). 규칙포맷 5필드PSV+실사용게이트(실행출력·한글케이스필수·경계·왕복불변식·VM함정회귀). P0 텍스트모델(오프셋↔줄 좌표계, 임시방편엔 없던 토대) 9함수 구현+검증14/14(ASCII·한글·경계·왕복)→규칙등재. libs/편집기/{텍스트모델.한선,검증.한선,카탈로그.psv}.
교훈 적용: 이번엔 합성입력으로 "됨" 선언 안 하고 사용자 실키보드 검증을 기다림 → 통과. 작업규율 게이트 작동.