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

크라우니 오피스 아웃라인 punch #4 — 체크박스(완료 토글)

개요

아웃라인(Outline) 모듈에서 상태 배지는 "표시"만 실작동하고(완료=초록/진행 중=주황/대기=회색) 필터(미완료)·카운트(완료 N)도 이미 status 를 소비(live)했으나, status 를 바꾸는 인터랙션이 전무했다. punch #4 는 crownyBridge.js §23(installOutlineBridge)에 체크박스 주입 + 상태배지 클릭 + Space/⌘Enter 키로 status 완료↔미완료 토글을 얹고, 그 파급이 배지·미완료필터·완료카운트로 즉시 흐르게 했다. 앱 번들(index.html) 무수정 · 런타임 몽키패치. punch #1(hoist/주제편집)~#3(들여쓰기/이동) 위에 얹음.

무엇을 했는지

  • toggleStatus(self, id): 완료→직전상태 복원(node.prevStatus, 없으면 '진행 중'), 미완료→완료
(직전상태 기억 = 대기↔완료 왕복 보존). 섹션(parentId='')은 no-op(배지 display:none). setState(nodes.slice())로 새 nodes 커밋 → 배지/미완료필터/완료카운트 즉시 재렌더(파급).
  • 인터랙션 표면 2종(fixupNow 배선):
· 상태배지 클릭 = 기존 프레임워크 요소(status셀 children[1].children[0]) 재배선(주입 아님) → 클릭 토글. · 체크박스 주입 = topic셀(children[0])에 append(주제 인덱스 불변 → topicElOf 안전) + flex order:-1 로 시각적 최좌단. checked=status==='완료'(✓ 초록). 재렌더로 지워지면 다음 fixup(150ms) 자가치유 재주입. 섹션은 체크박스 없음.
  • 키보드: 비편집 선택 상태 Space = 완료 토글. ⌘Enter/Ctrl+Enter = 완료 토글(⌘ 양보 가드보다 먼저,
편집 중이면 네이티브 양보). 아웃라인 활성 중에만 게이팅(기존 syncOutlineKeyListener 재사용).
  • prevStatus 필드: seedNodes 에 prevStatus:'' 추가(왕복 복원용).
  • window API(CDP·회귀): __crownyOutlineToggleStatus / __crownyOutlineStatus / __crownyOutlineDone /
__crownyOutlineItemCount.

게이트 결과

  • 한선씨 정본 아웃라인상태.한선: hanseonc_high 컴파일 + crownyc run 30/30 PASS
(상태술어·완료토글전이·이전보존·왕복무손실·필터통과·카운트파급(항목8/완료2→3)·상태설정·가드).
  • 문서 회귀 27/27 PASS(회귀하니스.js — 시트/슬라이드/맵/포커스/문서 무영향).
  • 아웃라인 CDP 라이브 검증 19/19 PASS(:9333):
· BEFORE 진행중배지·완료2/항목8·체크박스 주입(완료항목 ✓, 섹션 없음) · ①배지클릭→완료 전환+배지 '완료' 갱신 ·④완료카운트 2→3 ·①체크박스 ✓ 반영 · ②재클릭(체크박스)→미완료 복귀(진행 중=prevStatus)+카운트 3→2+체크 해제 · ③미완료 필터에서 완료 토글 항목(s21) 즉시 은닉+필터중 카운트 증가 · ⑤Space 토글(대기→완료)·⌘Enter 토글(완료→대기 복원) · 무회귀 #1 주제편집 writeback·#2 추가/삭제·#3 들여쓰기/내어쓰기. (./CrownyAI 는 GUI 셸 점유로 CDP 라이브검증 대체 — 바이너리·앱번들 무수정.)

before/after 증명 (핵심)

  • s111 배지클릭: status 진행 중 → 완료, counts "8개 항목 · 완료 2" → "8개 항목 · 완료 3", 체크박스 ✓
  • s111 재클릭: status 완료 → 진행 중(prevStatus 복원), counts → "완료 2", 체크 해제
  • s21 미완료필터 완료토글: visibleIds 에서 s21 즉시 제거(필터 파급)

관련 파일

  • /Users/ef/crownybrowser/bundle/office/bridge/crownyBridge.js §23 (11304→11388줄, punch #4)
  • /Users/ef/crownybrowser/bundle/office/bridge/아웃라인상태.한선 (신규 정본, 30/30)
  • dist 미러 동기화: dist/CrownyAI.app/Contents/Resources/office/bridge/{crownyBridge.js,아웃라인상태.한선} (md5 일치)
  • 백업: 백업/crownyBridge-아웃라인4착수-0718-1342.js.bak
  • 판정표: /Users/ef/crownybrowser/spec/아웃라인기능-판정표.md (punch #4)

무수정 확인

앱번들 index.html(07-14)·crowny-browser.m·crowny-shell.m·Makefile(07-12~17)·§19~§22 무수정. 바이너리 무수정.

잔여 이슈 (후속 punch)

  • #5 드래그 재정렬 · #6 자동번호 · #7 colVis 실소비 · #8 폴드배지 실계수 · #9 맵/문서 연동.