← 목록
기타 2026-07-21 4KB 읽기 5분

크라우니 오피스 문서 검토 도구 — 맞춤법 + 변경추적

개요

워드 대체 갭인 문서 검토 도구 2종을 크라우니AI 오피스 문서(WKWebView contenteditable, ModuleDocs)에 장착. 앱 번들 무수정 — crownyBridge.js 몽키패치(§28) + native 맞춤법 설정만. 문서 회귀 27/27 무회귀(2회 재확인).

무엇을 했는지

① 맞춤법 (native + bridge)

  • native crowny-ai-content.m makeWebView: WKWebView 에 setContinuousSpellCheckingEnabled:YES +
setGrammarCheckingEnabled:YES 를 NSInvocation(respondsToSelector 가드 + @try)로 활성 → macOS 네이티브 연속 맞춤법(빨간 물결 밑줄 + 우클릭 제안). 미노출 OS 에서도 크래시 없이 스킵.
  • bridge ensureSpellcheck(): 편집영역에 spellcheck="true" + lang="ko" 보장(멱등, schedule 틱).
  • 실측(CDP): spellcheck 속성 "true", __crownyReviewSpellcheckOn() true.
  • 한계: WKWebView 는 밑줄 렌더/제안을 macOS NSSpellChecker 에 위임 — 한국어 맞춤법 정확도는 시스템
사전에 의존(자체 한글 맞춤법엔진 아님). @page margin-box 류처럼 WebKit 내부 렌더라 픽셀 캡처는 불가, 속성/설정 활성 여부로 검증.

② 변경추적 (bridge §28)

  • beforeinput 가로채기(격리: trackOn 아니면 즉시 return = 순수 no-op). 삽입=<ins>(밑줄/녹색 #1F7A4D),
삭제=취소선 <del>(#B23B3B, 내용 보존). 마크는 저자·시각 data 속성(data-au/data-ts) + title 툴팁.
  • 수락/거부(개별=마크 hover ✓/✗ 컨텍스트 툴바 · 전체=툴바 ✓/✗): 문서검토.한선 처리결정 진리표
(삽입+수락=유지 / 삽입+거부=제거 / 삭제+수락=제거 / 삭제+거부=유지).
  • 저자 = 로그인명(브릿지 최선노력: __crownyUser/localStorage), 없으면 "나". CAAccount→JS 주입은
후속(native 맞춤법 외 무수정 원칙). __crownyOfficeSetAuthor(name) 훅 노출.
  • 영속: 마크는 편집영역 innerHTML → native cdf 본문 저장/복원에 자동 영속. 추적 ON/OFF 는
@@SEC:모듈@@ review 키(OFFICE_MODULE_KEYS 등록).
  • 격리: reviewTick() = §27 docRefTick 관용구 미러 — 저비용축(툴바/스펠체크/토글 동기화)은 항상,
무거운축(마크 컨텍스트 툴바)은 trackOn 이거나 마크 실존 시에만(단일 querySelector 게이트). 미사용 문서 = 순수 no-op → §10 개요 재어서트 예산 무영향(회귀27 결정성 보호).

실측 (CDP :9333, Input 도메인 = 실키보드 등가 beforeinput)

  • 삽입: Input.insertText('검토삽입')<ins data-crowny-ci="1" data-au="나" data-ts=.. underline green>검토삽입</ins>,
평문 누출 0.
  • 삭제: 가시 텍스트 "Crowny Office" offset4 Backspace → <del data-crowny-cd="1" .. line-through red>w</del>
정확히 1글자.
  • 수락: 삽입 마크 수락 → 마크 제거·텍스트 유지. 거부: rejectAll → 삭제 마크 0·원문 복원.
  • undo 정합: ⌘Z → 방금 거부(언랩) 복원되어 마크 2건 재출현.

게이트 결과

  • 문서검토.한선 자가검증 24/24 (추적토글·마크종류·저자표시·삽입/삭제마크·처리결정 진리표·맞춤법대상).
  • make ai 빌드 성공(exit 0, 경고1=사전존재 crowny-ai-butler.m unused-function, 회귀 아님). CrownyAI 3초 생존.
  • 문서 회귀 27/27 PASS × 2회(결정성 확인).
  • crownyBridge.js 16143줄(온전, +418), JS 문법 OK.

관련 파일

  • bundle/office/bridge/crownyBridge.js §28 (변경추적/맞춤법, +418줄), schedule() reviewTick 배선, OFFICE_MODULE_KEYS review 키
  • bundle/office/bridge/문서검토.한선 (신규, 상태기계+맞춤법 대상판정 정본, 24/24)
  • native/crowny-ai-content.m makeWebView (맞춤법 연속검사 활성 — 설정만)

잔여 이슈

  • CAAccount(로그인명) → 오피스 WKWebView JS 주입(현재 "나" 폴백). native 맞춤법 외 무수정 원칙이라 후속.
  • insertParagraph(Enter) 추적은 <ins><br></ins> 최소 대응 — 블록 분할 추적은 후속.
  • 한글 맞춤법 정확도 = macOS 시스템 사전 의존(자체 한글 엔진 미연결).