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

크라우니 오피스 마인드맵 punch #2 — 노드 추가(Tab/Enter) + 키보드

개요

판정표(spec/마인드맵기능-판정표.md) punch #2: 키 가이드 패널이 Tab=자식/Enter=형제/Space=접기/ Delete=삭제/⌥arrows=이동을 "광고"만 하고 componentDidMount 부재로 실제 keydown 리스너 0(장식). 실제 노드 추가 + 키보드 활성으로 구현. 앱 번들 무수정, §21 installMapBridge 확장 + 한선씨 정본 신설.

무엇을 했는지

  • 한선씨 정본 bundle/office/bridge/마인드맵편집.한선(신규): 자식/형제 parentId 계산·노드삭제
(하위트리·루트금지)·선택이동(트리 탐색 ←부모/→첫자식/↓다음/↑이전)·키 라우팅(편집중 vs 비편집 분기). hanseonc_high 자체시험 30/30. (마인드맵모델.한선 punch#1은 20/20 그대로 무회귀.)
  • crownyBridge.js §21 확장(installMapBridge 내부만):
  • 노드 CRUD: nextMapId/addChild(Tab)/addSibling(Enter, 대상 뒤 splice)/deleteNode/navigateSel/
  • toggleCollapse/commitEditing. 모두 setState 로 새 nodes 커밋 → 3레이아웃/방사형/트리·엣지 자동 정합.
  • window 캡처 keydown(onMapKeydown): 마인드맵편집.한선 키라우팅() 미러. ⌘/Ctrl(⌘1~9)은 양보,
  • 처리 키만 stopImmediatePropagation 로 셸 선점. 편집중 Enter=편집확정(요소 blur 양보)·일반 화살표/ 문자=네이티브 편집 양보·⌥화살표/Tab=커밋 후 구조조작.
  • 리스너 게이트: syncMapKeyListener 가 fixup 폴링(150ms)에서 findModuleRoot() 기준 부착/해제
  • (모듈 벗어나면 리스너 완전 해제).
  • 새 노드 자동 편집 포커스(fixup) + stale focusId 클리어(선택 이동 시 포커스 하이재킹 방지).
  • ★핵심 함정 수리(라이브 실측): 앱 DCLogic 리스트 reconciliation 이 한 렌더 늦게 적용 — 노드
  • 추가 직후엔 sc-for 목록에 새 행 DOM 이 안 생기고(모델은 4자식인데 DOM 3행), 다음 setState 에서야 4번째 행 생성. fixup 은 setState 를 안 해 새 노드가 영영 안 보였음 → scheduleReflow(추가/삭제 직후 다음 틱 재setState, 멱등)로 팔로업 렌더 강제 → 새 노드 즉시 표시·편집 가능.

    게이트 결과 (전부 PASS)

    • hanseonc_high 마인드맵편집.한선 30/30 / ./CrownyAI 3초 생존 ✓
    • CDP(:9333) 실측: ①b0 선택+Tab→자식 추가(11→12, 부모 b0, b0자식 4, 새노드 선택) ②Enter→형제
    (12→13, n2 부모 root) ③새 노드 auto-focus+편집("새 노드"→"편집된새노드") 영속 ④화살표 선택이동 (→ root→b0, ↓ b0→b0c0, ← b0c0→b0) ⑤모듈 벗어나면 리스너 해제(bound false)+키 비활성(카운트 불변) ⑥트리정합: 추가 2노드가 우측맵/방사형/트리 3레이아웃 모두 배선
    • 문서 회귀 27/27 PASS (회귀실행.sh, 2회 확인)
    • 마인드맵 #1 무회귀: 시드 노드 라벨 편집 영속 + 3레이아웃 보존 + 레이아웃 전환 정상

    관련 파일

    • /Users/ef/crownybrowser/bundle/office/bridge/마인드맵편집.한선 (신규, punch#2 정본 30/30)
    • /Users/ef/crownybrowser/bundle/office/bridge/crownyBridge.js (§21 확장)
    • /Users/ef/crownybrowser/bundle/office/bridge/마인드맵모델.한선 (punch#1, 무변 20/20)
    • CDP 하네스(스크래치패드): mm_cdp_test.js

    잔여 이슈

    • punch #3(노드 삭제 UI·⌘. 접기 키보드)·#4(재부모화 ⌥←→↑↓+드래그)·#5(방사형/트리 접기 통일)·
    #6(줌팬)·#7(색)·#8(아웃라인 변환)·#9(슬라이드/시트 내보내기) 미착수.
    • dist/CrownyAI.app 내 bridge 사본 동기화는 배포 make 단계(SSOT=bundle/).