요청: 오피스-워드벡터병합-잔여완성
- 날짜: 2026-07-23 23:59:37
- 작업 경로: /Users/ef
요청 본문
둘 다해야함. 1)작업목표 정하고 2)현황파악하고/다른 도구들 사례 세세히 분석하고 3)만들고 연결해야 할 도구를 아주 세세히 분할하고 4)작업을 모듈화해서 병렬로 각각 다 성공시키고 5)전체 기능을 3~5번 리뷰해서 완성 후 완성도 높이기. (트랙A=워드벡터앱 앱상주서버 병합, 트랙B=크라우니AI 오피스 고급잔여)
관련 산출
(클로드가 작업 결과를 이어 기록)
Phase 2 탐사 결과 (2026-07-24, 병렬 3기)
- 트랙A: 병합은 07-12 기완료(앱상주서버.한선 1445~2089줄 인라인, 원본=워드벡터앱.한선 07-12본). 실잔여=표준계약 리팩터·회귀 0건 공백·프런트도어 불일치(앱목록.psv=웹 오피스)·실기동 미검증.
- 트랙B: DOCX sectPr=하드코딩(내보내기.한선 문서XML조립), pagesetup 훅(__crownyOfficeSerializePageSetup) 기존재. 저자 훅(__crownyOfficeSetAuthor) 기존재·native 호출 0건. PDF=경량 VM 경로 vs ⌘P WebKit 분리(createPDF API 미도입). 도형=§25 그래프 모델 재사용 가능, 수식=자산 0. 회귀=회귀실행.sh 27/27(068s), CDP 9333 공유(병렬 시 9338+ 채번).
- 사례분석: 도형=SVG 인라인(DrawingML prstGeom 1:1), 수식=MathML Core(WebKit 네이티브·의존성0)+선형입력, PDF=createPDFWithConfiguration 단일소스, 용지 twips 상수표(A4=11906×16838 등). 스펙=scratchpad/오피스잔여-구현스펙.md
Phase 3 세밀 분할 (파일 소유권 분리 — 병렬 충돌 0 설계)
| 모듈 | 내용 | 소유 파일 | 병렬 |
|---|---|---|---|
| W-A | A1 정합diff→A2 표준계약(앱서비스_워드.한선 추출)→A3 회귀편입(워드 케이스+상태백업)→A4 실기동 종단검증 | 앱상주서버.한선, 앱서비스_워드.한선(신규), 벡터게이트.sh/.한선 | 웨이브1 |
| W-B123 | B1 DOCX pagesetup→sectPr 배선(twips) + B2 CAAccount 저자주입 + B3 메뉴PDF WebKit 통일(createPDF) | crowny-ai-content.m, 내보내기.한선 | 웨이브1 |
| W-B4 | 도형 편집기 §29(SVG 6종·8핸들·회전·색·z순서·격리게이트) | crownyBridge.js(append), 문서도형.한선(신규), 도형검증.js(신규, CDP 9338) | 웨이브1 |
| W-B5 | 수식 편집기 §30(MathML+선형입력+팔레트) | crownyBridge.js(append), 문서수식.한선(신규), 수식검증.js(신규, CDP 9339) | 웨이브2(B4 후 순차 — 같은 파일) |
| 통합 | 회귀하니스 신규시나리오 통합, make ai+install+재시동 실검증, Info.plist 버전 동기 | (메인 세션) | 웨이브3 |
| 리뷰 | 3~5회: 메인 회귀 2회+ 재실행 → 적대리뷰 웨이브 → 수리 → 재검증 | 전체 | Phase5 |
- DOCX 내 도형(DrawingML)/수식(OMML) 매핑=2차(리뷰 사이클) — 1차 MVP는 innerHTML 포함 저장+WebKit 인쇄 자동 반영.
웨이브 1 결과 (2026-07-24)
- ✅ W-B123: content.m 4946→5110줄 + 내보내기.한선 2735→2813줄. B1 sectPr 동적(실측 A4불변·Letter 30mm=1701twips 정확)·B2 저자주입 2지점·B3 createPDF+VM폴백. 자체시험 38/38, make ai 신규경고 0. learn 2건.
- ✅ W-B4: crownyBridge.js 16143→16726줄(+§29 도형, 순수 append), 문서도형.한선 50/50, 도형검증 8/8(CDP 9338), 회귀 27/27.
- ⚠ 실사고 적발(메인 검증에서): W-B4가 "schedule() 틱 훅 추가" 보고했으나 실물은 docShapeTick 정의만·호출 누락(허위배선 유형 — 테스트가 노출함수 직접 호출이라 통과). 메인이 grep 적발→1줄 배선 수리→도형 8/8+회귀 27/27 재확증. 교훈을 W-B5 프롬프트에 주입.
- 🔨 진행: W-A(워드 표준계약), W-B5(수식 §30 — 웨이브2).
- ✅ W-A: 앱상주서버 2346→1708줄(워드 섹션 644줄 추출)+앱서비스_워드.한선 689줄/45함수(표준계약: _워드_벡터렌더/_워드_액션처리, top-level 0). 파리티 누락 2건(_워드텍스트/_워드커서) 이식. 회귀 8→11케이스(워드 렌더/KEY반영/초기화)+워드상태 백업 편입. 실기동 KEY "Hi" 실반영. 메인 재검증: 컴파일 0에러+회귀 11/11 재확증.
최종 마감 (2026-07-24 — 5단계 방법론 완주)
리뷰 사이클 결산 (3사이클 + 게이트 반복 — P0 5건 전량 적발·수리·라이브 확증)
| # | 발견(적대검증) | 수리 | 확증 |
|---|---|---|---|
| 1 | 도형 docShapeTick 정의만·schedule() 호출 누락(허위배선) | 1줄 배선 | 도형 8/8+회귀 27/27 |
| 2 | 워드 Return=조용한 no-op(빈 KEY 가드 부재 — 라이브 재현) | 빈 KEY→ENTER 승격 3줄 | 격리 실측 A␂B+회귀 11/11 |
| 3 | createPDF=화면 스냅샷 API 오용(@page 미적용·뷰포트 잘림·잘린PDF 성공 오판) | printOperation+NSPrintSaveJob 재구현(⌘P와 NSPrintInfo 공유) | make ai 0에러·심볼가드 |
| 4 | CAContentController 옵저버 미해제 → 멀티윈도우 창닫기 후 UAF 크래시 경로 | -dealloc removeObserver | 정적 수명 추적 확증 |
| 5 | username 개행/U+2028 미이스케이프(조용 실패)+PDF 폴백 탭 레이스 | 6종 이스케이프+탭 가드 | 코드 인용 검증 |
최종 게이트 (전부 메인 직접 실측)
문서회귀 27/27(총 5회 결정성)·도형 8/8·수식 11/11·벡터게이트 11/11·한선씨 정본 4본 재컴파일+assert 재확증(50/50·35/35·38/38·링크컴파일 0에러)·make ai 신규경고 0·설치+재서명+심볼가드(2.2.0-beta, CFBundleVersion 20260724).학습 래칫 (크라우니코드)
learn 추가 9건: 앱서비스표준계약_워드추출·docx_sectpr_동적생성·twips환산·오피스도형_svg인라인_문서삽입·오피스수식_선형파서_mathml·워드_빈KEY_ENTER승격가드·objc_webview_print_to_pdf_silent·objc_nc_observer_dealloc_uaf·objc_async_fallback_tab_race_guard. 메모리 2건(오피스 갱신+ObjC 함정 신규)·지식셀 #26823/#27184·CrownyBrowser CLAUDE.md 갱신.잔여 (이관)
- [사장님] CrownyAI 재시작 — 설치 완료(디스크), 재시작 시 전체 반영. 재시작 후 육안: 문서탭 도형(▱)/수식(√x) 버튼, 메뉴 PDF(서식 반영), 변경추적 저자=로그인명, crowny://app/워드 Enter 개행.
- [사장님 결정] 프런트도어: 앱목록.psv 워드 카드 웹오피스 유지 vs crowny://app/워드 네이티브 전환(07-12 정정을 뒤집는 사안이라 미적용).
- [2차] DOCX 내 도형 DrawingML·수식 OMML 매핑(스펙 확보됨), 텍스트랩·행렬·mroot, B5 ISO/JIS 기본값.
- [갭] RPN 정본: 문서도형·문서수식·앱서비스_워드 미착수(차단 아님), 내보내기.한선=float 정당예외.