한선씨 앱 생태계 — NFD정리·풀폭·두벌식·앱확장·Win포팅 (울트라 5에이전트)
5건 빌드 전부 성공(통합 synthesis만 529 일시과부하로 미실행 → 메인이 직접 검증).
① NFD 자모 정리
메모백엔드.한선nfc정규화()(U+1100~11C2 자모→음절, 44032+초×588+중×28+종) + 메모추가/메모로드 적용페이지배선.pyunicodedata.normalize('NFC')렌더 방어층- 검증: NFD 8자모→NFC "크라우니", 기존 NFD메모 로드시 정규화
② 앱탭 풀폭 리사이즈
crowny-browser.mCrownyAppView 800×600고정→_webContainer전체채움. CW/CH env로 뷰어렌더.sh→그 캔버스 렌더. NSViewFrameDidChange 0.18s 디바운스 재렌더, 드래그중 비트맵 스트레치.메모앱.한선CW/CH 읽어 폭 파생- 검증: 1280×820창 앱탭 1280×712 렌더(풀폭)
③ US키보드 두벌식 라이브
crowny-browser.m+크라우니앱뷰어.musKeyToJamo()US QWERTY→호환자모, keyDown 한글모드+라틴→한글조합기→음절커밋, Ctrl+Space 한영토글, 조합세션 BS 역분해- 검증: 실 keyDown
rkskek→가나다. 헤드리스 단위 ㄱㅏㄴㅏㄷㅏ→가나다
④ crowny://app 앱 생태계
- 신규: 계산기앱.한선(+계산기상태.한선 상태기계)·시계앱.한선(체계 date)·할일앱.한선(PSV TODO/DONE)
앱목록.psv레지스트리(메모|계산기|시계|할일), 렌더스크립트 각각- 검증: 계산기 1+2=3(/tmp/계산기_result.png), 시계 실시간, 할일 6항목 뱃지
⑤ Windows WebView2 app탭 포팅
win/crowny_app_view_win.{h,c}— 이식형 PPM디코더(Mac 27/27 검증, 1200×760 파싱) + Win32 GDI(P6→24bpp BGR DIB top-down→StretchDIBits, WM_LBUTTONDOWN→이벤트루프, WM_CHAR→키입력, CreateProcessW 파이프)crowny_browser_win.ccrowny://app 분기(WebView2 put_IsVisible FALSE 탭교체), build.bat 디코더검증+컴파일추가- 실기빌드 잔여(windows.h 필요). Win은 WM_CHAR가 NFC 완성형 직접전달→NFD함정 없음