크라우니 오피스 문서편집기 — 히스토리(버전) 실스냅샷 시스템 (punch #8)
개요
크라우니 오피스 문서(Docs) 편집기 우패널 "히스토리" 탭이 하드코딩된 4건(verDefs)만 보여주고
"이 버전 복원" 버튼은 onClick 자체가 없어 죽어있던 문제(spec/문서기능-판정표.md punch #8)를
해결. 브릿지 1~7차(서식/상태바/실행취소/찾기/삽입/개요/댓글)와 동일 패턴으로
crownyBridge.js에 이어붙였다. 앱 번들(bundle/office/app/index.html) 무수정, 네이티브
(crowny-browser.m/crowny-shell.m/Makefile) 무수정.
무엇을 했는지
- 실측 우선: bundle/office/app/index.html이 4.2MB 번들 로더(DCLogic)라 정적 grep이
win/cdp평가.js)로 라이브 window.__dcRegistry.ModuleDocs의
Logic.toString()/html을 직접 덤프해 실제 상태·템플릿(verDefs/verSel/restoreStyle) 확인.
이 버전 복원 div는 부모 카드의 onClick="{{v.select}}"만 상속(클릭해도 재선택 no-op)
— 자체 핸들러 전무 확인.
- 한선씨 정본
bundle/office/bridge/버전이력.한선신규 작성: 스냅샷 레코드
"id|시각|라벨|글자수" 직렬화, 상한 50(가장 오래된 것부터 폐기), 자동트리거판정
(경과시간≥2분 OR 글자변화≥200자 — 자동저장복구.한선 "더티/간격" 게이트 확장),
자동인접병합판정(버전비교.한선 변경량 발상 단순화), 복원선택유효, 복원백업스냅샷추가
(데이터 손실 방지). hanseonc_high 컴파일 + crownyc run 자체시험 24/24 PASS
(VM 함정 1건 발견·문서화: 추가(배열,값)은 제자리변경(in-place)이라 별칭 변수도 함께
갱신됨 — 순수함수 가정 금지, 테스트 케이스명 복원백업_배열추가는제자리변경_별칭도갱신).
- crownyBridge.js 섹션 12 추가: 프레임워크가 소유한 verDefs 4건 정적 렌더를 섹션
input 이벤트 즉시 체크 + 5초 배경 폴링(유휴 상태 시간트리거 커버)
- 복원: 클릭 시 ①현재 상태를 "복원 전 백업" 라벨로 먼저 커밋 ②flushHistory() →
restoreHTML() → commitSnapshot()(섹션 6, punch #3 재사용)으로 실행취소 스택에도
하나의 undo 단계로 연동 — ⌘Z로 복원 자체를 되돌릴 수 있음
- 실행취소(punch #3) 스택과 완전 분리된 별도 저장소(VERSIONS_* 전역)실측 검증 (CDP :9333, before/after)
- 초기: 시딩 스냅샷 1건("자동 저장 · 99단어")
- 편집1 + "현재 버전 저장" 클릭 → 카드 2건 (수동 저장 추가 확인)
- 편집2 + 저장 클릭 → 카드 3건
- 가장 오래된 스냅샷 선택 → 복원버튼 노출(
display:none→block실측) → 복원 클릭 →
innerHTML 실제 변경(474자→428자, 시딩 버전 내용으로 복원) + 카드 4건(백업 자동 추가,
라벨 "복원 전 백업" 확인)
- ⌘Z 디스패치 →
innerHTML이 복원 직전 상태(474자)로 정확히 롤백
undoRestoredToPreRestoreContent: true)
- 회귀 1~7차 전부 정상: B서식 적용/상태바 실측(101단어·369자, 하드코딩 아님)/실행취소·재실행
- 게이트:
CrownyBrowser네이티브 프로세스 3초 생존(PID 불변) 확인, native/*.m·Makefile·
관련 파일
/Users/ef/crownybrowser/bundle/office/bridge/crownyBridge.js— 섹션 12(히스토리 스냅샷),
/Users/ef/crownybrowser/bundle/office/bridge/버전이력.한선— 신규, 정본, 자체시험 24/24/Users/ef/crownybrowser/spec/문서기능-판정표.md— punch #8 원 판정 근거/Users/ef/crownybrowser/spec/오피스-개발계획.md— Phase 1-A 착수 순서(§7 히스토리 스냅샷)
잔여 이슈
- 자동인접병합판정(정본에 구현됨, JS
applyVersionMergeAndCap에서 사용)은 짧은 테스트
- 다중 사용자 저자 표시 없음(로컬 단일 세션 가정, 댓글모델의 "나"와 동일 관례) — 실제 협업
- Phase 1-A punch list 잔여: #9 키보드 단축키 배선, #10 툴바 드롭다운 3종(스타일/폰트/크기).