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

크라우니 오피스 브릿지 2차 — 실행취소/재실행 스택 (punch #3)

개요

spec/문서기능-판정표.md punch #3(실행취소↺·재실행↻ — 툴바 정적 div, onClick 없음)을 crownyBridge.js(즉시층)에 자체 스냅샷 스택으로 배선. 앱 번들(bundle/office/app/index.html) 무수정, 브릿지 1차(서식+상태바)에 이어붙임.

무엇을 했는지

  1. 자체 스냅샷 LIFO 스택execCommand('undo')는 브릿지가 만드는 서식 DOM 조작(section 2)·
MutationObserver 재렌더 방어(section 5)와 섞이면 불안정해질 소지가 있어(스펙 지시대로 실측 판단), contenteditable innerHTML 스냅샷 배열 방식 채택. - 입력/서식 변경 → 400ms 디바운스로 커밋(연속 타이핑 병합), 상한 100단계 - 새 편집 커밋 시 redo스택 항상 무효화 - undo/redo는 커서 위치를 문자 오프셋으로 저장 후 최선노력 복원(TreeWalker)
  1. 버튼 배선 — 툴바 ↺(data-dc-tpl="2")·↻(data-dc-tpl="3") 정적 div에 capture 클릭 리스너.
재실행 버튼 색상(#8A7E6F 활성/#C9BCA4 비활성 — 앱이 이미 쓰는 색 그대로 재사용)을 redo스택 상태와 실시간 동기화.
  1. 단축키 — ⌘Z=실행취소, ⌘⇧Z/⌘Y=재실행(ctrlKey도 허용, 플랫폼 무관). 편집영역에
포커스/선택이 있을 때만 반응하는 keydown 리스너 신규 등록(모듈에 keydown 자체가 없었음).
  1. 한선씨 정본 미러bridge/편집이력.한선 신규(자기완결, crowny-word 도구/실행취소.한선
LIFO 스택 규약을 이식 + 상한/redo무효화 정책 계층 추가). hanseonc_high 컴파일+crownyc run 자체시험 11/11 PASS(push·undo·redo·새편집후redo·상한초과절삭·상한이하무변화 등).

실측 (Chrome CDP :9333, file:///.../bundle/office/app/index.html)

최초 재주입 시도에서 이전 세션이 남긴 구버전 브릿지가 페이지에 여전히 상주해 있어 가드플래그만 리셋하고 재주입하면 리스너가 이중 등록되는 테스트 아티팩트를 발견(서식 B 클릭이 두 번 토글되어 겉보기엔 무변화). location.reload()로 완전히 새 상태를 만든 뒤 현재 crownyBridge.js를 단 1회만 주입해 재검증 — 이후 전부 클린 결과:

  • A→B→C 순차 입력(각 400ms 디바운스 대기) 후 실행취소 2회 → 본문에 A만 남음(B·C 제거,
innerHTML 마커 diff로 확인)
  • 재실행 1회 → B 복원(A+B, C는 여전히 없음)
  • 재실행 후 새 편집(D) 삽입 → 재실행 버튼 비활성색으로 전환 + 재실행 클릭이 no-op
(redo스택 무효화 확인, C가 다시 나타나지 않음 — stale redo 아님)
  • ⌘Z(keydown 디스패치)로 D 제거, ⌘⇧Z로 D 복원 — 단축키 경로도 클린 세션에서 확인
  • 회귀 없음: 상태바가 여전히 실시간 단어/글자수 표시(99단어 · 325자 등, 하드코딩
아님), B 버튼 클릭 시 선택 텍스트에 실제 <b>Crowny</b> 태그 적용(execCommand 1회 호출만 확인, 버튼 자기토글이 아닌 진짜 서식)

게이트

  • 편집이력.한선: hanseonc_high 컴파일 성공 + crownyc run 11/11 PASS
  • make ai: 네이티브 파일 무수정이라 "Nothing to be done"(기존 바이너리 그대로, 에러 0)
  • ./CrownyAI 3초 생존 확인(기동 후 pgrep으로 생존 확인, 정상 종료 처리)

관련 파일

  • /Users/ef/crownybrowser/bundle/office/bridge/crownyBridge.js — section 6(실행취소/재실행
스택) 신규 + section 2/5에 scheduleHistoryCommit() 훅 추가
  • /Users/ef/crownybrowser/bundle/office/bridge/편집이력.한선 — 신규, 한선씨 정본 미러
  • /Users/ef/crownybrowser/spec/문서기능-판정표.md — punch #3 근거(판정표)
  • /Users/ef/crownybrowser/spec/오피스-개발계획.md — "두뇌 연결" § punch list

잔여 이슈

  • 판정표 punch list의 나머지 항목(찾기 실동작, 삽입 3종, 개요 동기화, 댓글 CRUD, 히스토리
스냅샷 시스템, 드롭다운 3종)은 여전히 미착수 — 순서대로 다음 세션 대상.
  • undo/redo 커서 복원은 문자 오프셋 기반 최선노력(TreeWalker) — 복잡한 서식 경계(표/이미지
삽입 등, 아직 미구현)가 붙으면 재검증 필요.
  • 크라우니코드: lookup HIT 0건 / MISS 2건(검색 "실행취소 재실행 스택", "undo redo
snapshot") / learn 1건(오피스_실행취소재실행_스냅샷스택 추가).
  • 한선씨 동반 훅이 파일 전체 단위 crownyBridge.한선을 요구했으나, 이 디렉토리는 이미
기능 도메인별 미러 관례(punch #1/#2 = 문서통계.한선, punch #3 = 편집이력.한선)를 쓰고 있어 그 패턴을 따름(전체파일 통짜 미러는 기존 미러와 중복).