← 목록
AI 2026-07-18 3KB 읽기 3분

크라우니 오피스 그래프 punch #1 — DIAGRAMS hoist + 도형 라벨 편집

개요

크라우니 오피스 그래프(다이어그램/순서도 에디터, draw.io 계열) 모듈의 편집 모델 부재를 해소. 도형 본체가 renderVals 내부 로컬 const DIAGRAMS{}(4스텐실)라 편집 불가였던 것을 state.gShapes/gConn(스텐실 키·id 부여)로 hoist하고 도형 라벨 contentEditable 편집을 영속화. 앱 번들 무수정 — crownyBridge.js 신규 §25 installGraphBridge 몽키패치(§19~§24 무간섭).

무엇을 했는지

  • 그래프모델.한선 정본(bundle/office/bridge/): 도형 스키마(id|kind|label|x|y|w|h|fill|diamond)·
라벨 writeback·스텐실별 세트·커넥터 모델·인스펙터 파생·빈 다이어그램 가드. hanseonc_high 컴파일+run 27/27 PASS.
  • crownyBridge.js §25 installGraphBridge(순수 추가, 라인 1~13131 백업과 byte-identical):
  • DIAGRAMS(4스텐실) → state.gShapes/gConn hoist(스텐실 키·id). sel(number)·tool·stencil·fills
  • 원본 계약 보존(원본 renderVals 공존 안전, 플랜 §24 교훈).
  • renderVals 몽키패치(buildGraphVals 모델 구동·원본 style 1:1) — 도형/마름모/실린더/핸들/커넥터/
  • 채우기/스텐실전환 무회귀. __crownyGraphPatched 가드·서명멱등·상한없는 폴링.
  • 도형 라벨 span contentEditable writeback(gShapes[stencil][id].label) — §22/§23 setText 강제정합.
  • 적대검증에서 잡은 실버그(수리 완료)

    • 커넥터 오분류→라벨 오염: 도형 판별을 children[0]=SPAN으로만 하면 커넥터 div
    (<div>{{label}}</div>→sc-interp span)도 SPAN-first라 매칭 → fixup이 커넥터 5개 라벨을 도형 라벨로 덮어씀(CDP 격리실측 확인). 도형=5자식(span+핸들4)·커넥터=1자식으로 판별 수리. 수리 후 커넥터(빈 라인·"아니오"·"예") 원본과 일치 재확증.

    CDP 실측(:9333, before/after)

    • BEFORE: 6도형 모델구동 렌더(renderedCount=6·patched=True), connectors=7 — 로컬 const 아님 증명.
    • 라벨편집 f2→"★편집★ 동기화": 렌더 반영·f4 독립 불변.
    • 스텐실 네트워크(4)→순서도 복귀: 편집 모델·렌더 잔존(BACK.f2RenderedPersist=True).
    • 무회귀: sel=3 인스펙터(충돌?/마름모/x68%·y27%/110×66)·핸들 4·채우기편집 ok·커넥터 7.
    • 4스텐실 전환 보존: 6/3/5/4 도형·7/6/1/6 커넥터, renderedCount 정확 일치.
    • 문서 회귀 27/27 PASS(그래프는 신규 §25, 무영향).

    관련 파일

    • bundle/office/bridge/crownyBridge.js §25(13134~13456, +324줄, 880678바이트)
    • bundle/office/bridge/그래프모델.한선(정본, 27/27)
    • spec/그래프기능-판정표.md(punch #1)
    • 백업: 백업/crownyBridge-그래프착수-0718-1811.js.bak

    잔여 이슈

    • dist/CrownyAI.app 미러 미동기(패키징 단계 — SSOT=bundle/, 검증도 bundle 대상).
    • 후속 punch: #2 도형 드래그·#3 리사이즈·#4 추가/삭제(id키 fills 재보정)·#5 커넥터 앵커·
    #6 키보드(V/R/O/D/C/⌘G)·#7 정렬·#9 줌·#11 SVG 내보내기.