크라우니 오피스 그래프 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 내보내기.