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

CrownyDoc Office — 모듈 간 변환·연결 브리지 (module-bridge)

개요

office-design 설계명세.json의 crossModuleFeatures 중 과제 지정 5건을 구현: mind→outline(뷰 전환), mind가지→plan작업 내보내기, mind→slide 초안, outline→slide 변환, 문서 에디터 /시트 /마인드맵 라이브 블록 임베드.

무엇을 했는지

  • module-bridge.js: 위쪽 절반은 순수 함수(DOM 비의존, Node 하네스 가능) — treeToOutlineLines,
subtreeToPlanTasks, treeToSlideStructure, outlineLinesToSlideStructure, docindexUpsert 등. 아래쪽 절반은 브라우저 배선 — 실존 API만 호출(CrownyOffice.mindmap.save, CrownyOffice.slide.addSlide/addText, CrownyOffice.editor.onChange, CrownyOffice.sheet.getData). window.CrownyShell이 아직 없거나 늦게 로드돼도 최대 10초 폴링 후 registerCommand로 4개 커맨드(bridge.mindToOutline/bridge.branchToPlan/ bridge.mindToSlide/bridge.outlineToSlide) 등록.
  • 가지→플랜 내보내기는 지시대로 /plan 서버(iframe, plan-tab.js) 미접촉 — crowny-docindex
(localStorage, {id,title,module,mtime,meta}) 엔티티 + crowny-localplan-<id> 로컬 문서로만 구현.
  • 문서 블록 임베드는 editor-core.js 미수정 — CrownyOffice.editor.onChange(cb) 공개 훅만 사용해
캐럿 앞 텍스트가 /시트 ·/마인드맵 로 끝나면 contenteditable=false 미리보기+"열기" 블록으로 치환.
  • 병렬로 다른 세션이 만든 outline.js를 사후 확인 — CrownyOutlineData.STORAGE_KEY = 'mindmap-doc',
노드 스키마 {id,text,parent,children} 동일 확인. 설계 가정(같은 저장소·같은 트리 포맷 공유)이 실제 구현과 일치해 module-bridge.js 수정 불필요.
  • module-bridge.한선 동반 작성 — 같은 DFS/가지작업목록/슬라이드구조 로직을 병렬배열(g_text/g_parent)로
재귀 구현. "함수 재호출 배열 지역변수 함정"(2026-07-13 VM 트랩) 회피를 위해 자식목록을 별도 배열-반환 헬퍼로 분리하지 않고 재귀 함수 안에 인라인 스캔(스칼라만 사용)으로 처리.

검증

  • node --check module-bridge.js OK.
  • Node 하네스(26 assert, /private/tmp/.../scratchpad/module-bridge-test.js) 26/26 PASS —
트리 순회, 가지→작업 변환, 맵→슬라이드 구조, 아웃라인→슬라이드 파이프라인 일치성, docindex 안전 폴백, CrownyOffice 부재 시 크래시 없는 null 반환까지 커버.
  • CROWNY_STRICT=1 ./hanseonc_high module-bridge.한선 → 594토큰/2021큐브, STRICT 경고 0.
  • ./crownyc run 자체시험 6/6 PASS, 스택 비움(clean exit).
  • ~/.claude/scripts/crownycode-learn.sh search 사전 조회 — 기존 패턴 MISS(신규 로직 확인 후 작성).

관련 파일

  • /Users/ef/CrownyDoc/한선씨/정적/module-bridge.js
  • /Users/ef/CrownyDoc/한선씨/정적/module-bridge.한선
  • 참조(읽기 전용): mindmap.js, outline.js, slide-core.js, editor-core.js, plan-tab.js, common.js
  • 검증 스크립트(임시): /private/tmp/claude-501/-Users-ef/c96e50c5-c067-41f3-bf44-38a58a7faa23/scratchpad/module-bridge-test.js

잔여 이슈

  • CrownyShell(registerModule/registerCommand/gotoModule) 자체가 아직 어느 세션에서도 구현되지 않은
상태로 확인됨(전수 grep 결과 0건) — module-bridge.js는 폴링으로 안전 대기하도록 설계했으나, 실제 등록/커맨드팔레트 동작은 CrownyShell 구현체가 배선된 뒤에만 라이브 검증 가능.
  • 문서 블록 임베드는 텍스트 노드 캐럿(anchorNode.nodeType===3)만 처리하는 단순 구현 — 트리거 직후
캐럿이 element 노드에 있는 예외 케이스는 스킵(안전 우선, 크래시 없음).
  • 슬라이드 생성 시 addText는 title/content 텍스트만 채움 — 실제 master placeholder 좌표 자동배치는
slide-core.js의 향후 API 확장 필요(현재는 고정 좌표 60,40 / 60,140).