크라우니 오피스 개발 계획 (2026-07-14 사장님 확정 순서)
확정 순서: ①문서 완성 → ②저장/출력 안정화 → ③슬라이드·시트·그래프·마인드맵 연결(끌어오기) 안정화
→ ④시트→슬라이드→마인드맵→포커스→아웃라인→플랜→그래프 순 구현완료.
대원칙 (플랫폼 헌장 정합 — 모든 Phase 공통)
UI = 웹기술(HTML/CSS/JS) 순수, React 프레임워크는 점진 제거
실행 = 로컬 상주 (crowny://office, file://) — 오프라인·즉시·로컬퍼스트
데이터 = 한선씨 엔진 (crowny-word 133 + CrownyDoc 한선씨 오피스 ~73)
저장 = cdf(CWDv2 정본, 손실없는 왕복) / 내보내기 html·docx·pdf·md
브릿지 = 갭A (UI↔엔진) — UI 나중에 바꿔도 엔진·저장 계층 재사용
공통 완성 기준 5축(모든 모듈이 이 게이트를 통과해야 "완성"): ①기능 완전성 ②무버그(회귀 하니스) ③취약점 보완 ④사이즈(반응형) 대응 ⑤플랫폼 변경 대응.
Phase 1 — 문서(Docs) 완성 【현재·최우선】
목표:
문서 하나만으로 완결된 워드프로세서. "추가로 꼭 필요한 기능 없음" 수준까지.
1-0. 기능 전수 실측 (착수 즉시)
현재 React 문서 편집기 인벤토리(라이브 확인) — 각 항목 실작동/데모 판정:
- 툴바: 실행취소·재실행 / 스타일드롭다운 / 폰트(Pretendard) / 크기 / B I U S / 링크 / 표 / 이미지 / 페이지보기 / 찾기(⌘F) / 공유
- 사이드: 문서 개요(OUTLINE, 제목 계층)
- 우패널: 스타일(제목1 ⌘⌥1·제목2·본문·코드·인용) / 서식 / 댓글 / 히스토리
- 상태바: 페이지·단어·글자 수 / 언어 / 저장상태 / 키 가이드
→
표: 항목 × {실작동/데모/없음} 산출이 1-A의 입력.
1-A. 기능 완전성 (없으면 채움)
| 영역 | 필수 기능 | crowny-word 자산 |
|---|
| 편집 | 입력·선택·커서·멀티캐럿·실행취소/재실행 | 편집기코어(37)·편집연산(16)·멀티캐럿블록·실행취소·커서선택 |
| 서식 | 문자(B/I/U/S·색·크기)·문단(정렬·간격·목록)·스타일 | 문자서식확장·문단서식확장·스타일시트·서식런·다단계목록 |
| 구조 | 제목계층·목차·개요·섹션·머리글/바닥글·페이지 | 목차생성·개요문서지도·섹션다단·머리글바닥글·페이지뷰·문단배치 |
| 삽입 | 표·이미지·링크·도형·각주/미주·책갈피 | 표고급·표스타일·이미지개체·하이퍼링크·도형글상자·각주미주·책갈피참조 |
| 검토 | 찾기/치환·맞춤법·변경추적·댓글·통계 | 찾기고급·검색치환·맞춤법기초·주석변경추적·문서통계확장 |
1-B. 무버그
- 문서 E2E 회귀 하니스(입력→서식→구조→삽입→저장→재열기 시나리오 자동)
- 각 편집 연산 후 상태 불변식 검사(단어수·개요·커서 일관성)
1-C. 취약점 보완
- file:// 샌드박스 경계(로컬파일 무단접근 차단)
- 브릿지 입력검증(JS↔네이티브 메시지 화이트리스트·크기제한)
- 저장 파일명 sanitize(경로탈출)·붙여넣기 HTML 살균(XSS)
1-D. 사이즈(반응형) 대응
- 창 리사이즈 시 편집영역·사이드·우패널 재배치(오늘 신셸 리사이즈 패턴)
- 최소폭에서 사이드/우패널 접힘, 모바일폭(390) 드로어
1-E. 플랫폼 변경 대응
- UI가 순수 웹이라 WKWebView(맥)/WebView2(윈)/WebKitGTK(리눅스) 공통 동작 확인
- 브릿지 계약을 플랫폼 무관 JSON으로(네이티브 3벌이 같은 메시지 처리)
- 게이트: 문서 E2E 시나리오 5축 전항 PASS
Phase 2 — 저장/출력 관리 안정화
- cdf(CWDv2) 정본 저장/열기 — 지금 html 저장을 cdf로 승격(crowny-word CWD포맷v2 연결). 재열기 시 편집상태 완전복원.
- 자동저장·복구(자동저장복구.한선) / 버전·비교(버전비교.한선)
- 내보내기: HTML(HTML왕복)·DOCX(DOCX파일)·PDF(PDF텍스트+인쇄준비)·MD(마크다운왕복)·RTF(RTF내보내기)
- 문서 라이브러리(~/Documents/CrownyOffice/ + 메타)·최근문서 실데이터
- 게이트: cdf 왕복 무손실 + 5포맷 내보내기 실측 + 자동복구 시나리오
Phase 3 — 모듈 연결(끌어오기) 안정화
문서에서 검증된
브릿지(갭A)를 슬라이드·시트·그래프·마인드맵으로 확장. 이 Phase는
데이터 왕복 배선까지(기능 구현은 Phase 4).
- A1 브릿지 프로토콜(window.crownyBridge) 범용화 / A2 모듈별 상태 추출·주입
- 각 모듈: 앱 데이터 ↔ 한선씨 엔진 포맷 어댑터 스켈레톤
- 자산: 시트(15)·슬라이드(14) 엔진 + 마인드맵/그래프 엔진 실측·보강
- 게이트: 4모듈 각각 "열기→편집 흉내→저장→재열기" 왕복 성립
Phase 4 — 모듈별 구현완료 (순서 고정)
시트 → 슬라이드 → 마인드맵 → 포커스 → 아웃라인 → 플랜 → 그래프
각 모듈은 Phase 1과 동일한
완성 5축(기능/무버그/취약점/반응형/크로스플랫폼)을 반복 통과해야 "구현완료".
| 순서 | 모듈 | 핵심 기능 | 자산 |
|---|
| 1 | 시트 | 셀·수식·서식·차트·정렬 | 시트엔진·수식파서·셀서식·시트차트·표계산정렬 |
| 2 | 슬라이드 | 슬라이드·레이아웃·템플릿·발표 | 슬라이드엔진·템플릿·도구모음 |
| 3 | 마인드맵 | 노드·연결·레이아웃 | (엔진 실측·보강) |
| 4 | 포커스 | 태스크·오늘·요약 | (신규 데이터모델) |
| 5 | 아웃라인 | 계층 항목·접기 | 개요문서지도 재사용 |
| 6 | 플랜 | 간트·일정·작업 | (신규 데이터모델) |
| 7 | 그래프 | 데이터 시각화 | 시트차트·차트문자렌더 |
진행 원칙
- 각 Phase는 이전 Phase 게이트 통과 후 착수(문서가 무버그로 완성돼야 저장 안정화, 그래야 연결).
- 매 단계 실측(라이브 앱 왕복) 후 CrownyDoc 갱신 + 스냅샷.
- 서브에이전트 위임 시 이 계획서 + 갭목록(2026-07-14-오피스-React연결-갭목록) 참조 주입.
- 현재 위치: Phase 1 착수 직전 (저장/열기 1차 html 완료 → cdf 승격은 Phase 2).
【확정】 두뇌 연결 = 한선씨 엔진 브릿지 (2026-07-14 사장님 결정)
문서 편집기 실측(spec/문서기능-판정표.md): 실작동 5 / 데모 8 / 없음 15 — UI는 정교하나 로직 대부분 껍데기. 앱은 self-contained 번들(무수정)·커스텀 템플릿 엔진(DCLogic).
디자인 유지 + crowny-word 한선씨 엔진 브릿지 연결로 두뇌 이식.
브릿지 2계층 (crownybrowser 확립 패턴: 한선씨 정본 + 네이티브/JS 미러)
[즉시층] crownyBridge.js (셸이 WKUserScript로 오피스탭에 주입)
- 앱의 죽은 버튼(div)에 리스너 부착 / contenteditable 이벤트 훅
- 서식(Selection/execCommand)·단어수·커서 등 실시간 반응
- 앱 번들 무수정(껍데기 위에 로직을 얹음)
[엔진층] 한선씨 VM (crownyc run) — 셸이 호출, JS와 메시지 왕복
- 저장(cdf/CWDv2)·변환(docx/pdf/md)·구조연산·통계·맞춤법·버전
- 정본 로직 SSOT (crowny-word 133 + CrownyDoc 오피스 ~73)
- 성능 원칙: 매 키입력=즉시층(JS), 무거운/영속 연산=엔진층. 정본 규칙은 한선씨, JS는 그 미러(주소창위젯 한선씨/ObjC 미러와 동일 패턴).
- 브릿지 계약(window.crownyBridge): 플랫폼 무관 JSON → 맥 WKScriptMessageHandler / 윈 WebView2 postMessage / 리눅스 동일. UI·엔진 분리라 UI 나중에 순수화해도 엔진 재사용.
Phase 1-A 착수 순서 (판정표 punch list)
- 서식 적용 + 상태바 실시간(파급 최대) ← 첫 구현
- 실행취소/재실행 스택 3. 찾기 실동작 4. 삽입 3종(표/이미지/링크)
- 개요 동기화 6. 댓글 CRUD 7. 히스토리 스냅샷 8. 단축키 배선 9. 드롭다운 3종
【완료】 Phase 1-A punch 10/10 (2026-07-16)
①서식 ②상태바 ③실행취소 ④찾기/바꾸기 ⑤삽입3종(표·이미지·링크) ⑥개요동기화 ⑦댓글CRUD ⑧히스토리스냅샷 ⑨단축키통합 ⑩드롭다운3종 — 전부 CDP 실측+실셸 육안 검증, 회귀 없이 누적.
- 브릿지: crownyBridge.js ~2000줄(앱 무수정, WKUserScript 주입). 한선씨 정본 7종(문서통계·편집이력·찾기치환·삽입개체·댓글모델·버전이력·키맵·툴바선택).
- 인프라: WKWebView inspectable(CROWNY_INSPECT env) — 실셸 키/이벤트 정밀검증 수단.
- 잔여(1-B~E): 무버그(회귀 하니스 자동화)·취약점(붙여넣기 살균·file 샌드박스)·반응형·크로스플랫폼 게이트. ⌘⌥1 앱셸 레이스 미세잔류(inspectable로 정밀진단 예정).
- 다음: 1-B~E 게이트 → Phase 2(cdf 저장/출력).
【완료】 Phase 1 문서(Docs) 완성 (2026-07-16)
- 1-A punch 10/10 (서식·상태바·실행취소·찾기·삽입·개요·댓글·히스토리·단축키·드롭다운)
- 1-B 무버그: 회귀하니스 27/27 PASS(진짜버그 찾기상태추적 수리). 자동 회귀 보호.
- 1-C 취약점: 붙여넣기XSS·이미지상한·파일명 방어(22/22 차단), file샌드박스·CSS주입 안전.
- 1-D 반응형: 팝오버 뷰포트클램프·툴바 가로스크롤·<900 개요/우패널 접힘.
- 1-E 크로스플랫폼: Cmd↔Ctrl·CSS Highlight게이트·폰트폴백 감사 통과. 브릿지 크로스 계약 문서화.
- 산출: crownyBridge.js ~2700줄(앱무수정)+한선씨정본 11종+회귀/반응형 하니스+리포트 3종. 배포 1.0.2.
- 게이트 5축 전항 통과 → Phase 1 완료. 다음 Phase 2(cdf 저장/출력 안정화).
【완료】 Phase 2 — 자동저장·복구 (2026-07-17)
- crownyBridge.js §13(8초 폴링 더티게이트) + native caAutosave 채널(save/check/discard,
cdf 엔진 재사용, 임시파일→rename) + 복구 배너("복구할 문서가 있습니다" [복구]/[삭제]).
- ⌘S 정식 저장 성공 시 같은 문서의 autosave 스냅샷 자동 정리(중복 복구 안내 방지).
- 한선씨 정본: bundle/office/bridge/자동복구.한선(자동저장복구.한선·살균정책.한선 재사용,
자체시험 23/23).
- 실셸 실측: 편집→스냅샷 생성(ls 확인)→kill -9→재기동→복구 배너 등장→[복구]→내용 복원
(screencapture)→⌘S→스냅샷 정리 확인. 회귀 하니스 27/27 유지, make ai 에러0·경고0.
- 버그 발견·수정: native→JS 전달에 atob()만 쓰면 UTF-8(한글) mojibake — Uint8Array+
TextDecoder('utf-8')로 정식 디코딩하도록 수정, 재검증 완료.
- 문서: /Users/ef/CrownyDoc/projects/2026-07-17-오피스-자동저장복구-Phase2.md
- 잔여: cdf 왕복은 아직 본문 HTML 통짜(구조 분해 전, 1단계 방침 그대로 상속) — 후속 Phase 2
심화(버전·비교) 및 여러 오피스 탭 동시편집 시 문서별 키 충돌 가능성은 후속 검토.
【완료】 Phase 2 — 내보내기 4종(MD·RTF·DOCX·PDF) (2026-07-17)
- bundle/office/bridge/내보내기.한선(신규, 111함수) — HTML→블록튜플배열(자체 파서, 위치기반
런상태로 굵게/기울임/밑줄 보존) → 포맷별 조립. crowny-word 엔진 이식 재사용: 마크다운왕복·
RTF내보내기·DOCX파일·DOCX조각·PDF텍스트(원본 무수정). 자체시험 30/30 PASS.
- native: caExportOfficeDocumentFormat:ext:label:(공용) + 4개 셀렉터(Markdown/RTF/DOCX/PDF),
File>내보내기 서브메뉴로 HTML 포함 5종 노출.
- 실측: file/textutil/unzip+xmllint/qlmanage로 4포맷 전부 진짜 유효 파일 확인(docx=실제
"Microsoft Word 2007+"+textutil 텍스트추출 성공, pdf=Quick Look 썸네일 렌더 성공).
make ai 에러0·경고0, 3초 생존, 회귀 27/27 유지.
- 문서: /Users/ef/CrownyDoc/projects/2026-07-17-오피스-내보내기4종-Phase2.md
- 잔여: 표 셀 내부 서식·중첩목록·이미지는 1단계 범위 밖. 마우스 조작 메뉴클릭 GUI E2E는
다세션 공유 데스크톱 안전상 미실시(엔진 CLI 경로는 native와 동일 NSTask 배선으로 완전 실측) —
사람 육안 확인 1회 권장.
- 게이트: cdf 왕복 무손실(Phase2 앞서 완료) + 5포맷 내보내기 실측 + 자동복구(Phase2 앞서 완료)
→ Phase 2 전항 충족.
【완료】 Phase 2 저장/출력 안정화 (2026-07-17)
- cdf(CWDv2) 정본 저장/열기: 6섹션 컨테이너+본문HTML 무손실 왕복+메타. 정본 문서저장.한선17/17.
- 자동저장·복구: .autosave/제목.cdf 8초 원자적 쓰기, kill후 복구배너→복원, ⌘S시 정리. 자동복구.한선23/23.
- 내보내기 5종: HTML·MD·RTF·DOCX·PDF (crowny-word 엔진 연결+HTML→문서모델 파서). 실파일 유효성 검증(file/unzip/xmllint/qlmanage). 내보내기.한선30/30.
- 문서 라이브러리: 홈 최근문서=실데이터(~/Documents/CrownyOffice 스캔), 카드클릭 열기(런타임 후킹으로 앱무수정 유지). 문서목록.한선37/37.
- 부수: 상태바 하단고정, 긴문서 스크롤 보강.
- 회귀 하니스 27/27 유지 전구간. 배포 1.0.7.
- Phase 2 완료 → 저장/출력 계층 닫힘. 다음 Phase 3(슬라이드·시트·그래프·마인드맵 연결).