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

크라우니 오피스 슬라이드 punch #6 — 발표자 타이머 실동작

개요

발표자 뷰/슬라이드쇼의 정지된 하드코딩 타이머("04:32")를 실제 카운트업 타이머(시작/일시정지/리셋)로 배선했다. crownyBridge.js §20(installSlideBridge) 확장만으로 구현 — 앱 번들 index.html 무수정.

무엇을 했는지

  • 한선씨 정본 bundle/office/bridge/슬라이드타이머.한선 신규(상태기계: 초→MM:SS/HH:MM:SS 포맷·1초 틱 누적·시작/정지(일시정지=경과보존)/리셋(0복귀·재생유지)). hanseonc_high 자체시험 15/15 PASS.
  • ⚠ 균형삼진 산술 함정 확증·회피: hanseonc_high 나눗셈=자연반올림(59/60→1), 나머지=균형모듈로(59%60-1, |r|≤|b|/2). 시간 단위엔 나머지floor(a,b)(0..b-1 정규화) + 몫(a,b)=(a-r)/b(정확분할)로 내림 강제. 이 함정을 못 피하면 포맷(59)이 "01:0-1"로 깨짐(실제 발생 → 수리).
  • JS 브릿지 punch #6(§20 installSlideBridge 끝에 추가): timer{elapsed,running,userPaused,intervalId} + fmtTime(Math.floor/유클리드 %로 한선씨 1:1 이식) + 발표자 뷰 타이머 그룹 탐색(findTimerEls: "일시정지/재개"+"리셋" span 그룹→ previousElementSibling=표시 div) + wireTimerControls(멱등 guard=data-crowny-timer) + 250ms 자동 폴링(timerAuto: 발표자뷰 가시||슬라이드쇼 활성이면 auto-start, 벗어나면 setInterval 정리=누수방지).
  • 슬라이드쇼 오버레이 바에 경과시간 readout(data-crowny-elapsed) 추가 — 발표자 뷰 타이머와 동일 elapsed 구동(정합). buildOverlay + slideshow.elapsedEl 필드만 확장(punch#5 무영향).
  • 프로그램 경로 노출: __crownyTimerState/Start/Pause/Reset/Set/Fmt(CDP 실측용).
  • 게이트 결과 (전량 PASS)

    1. hanseonc_high 슬라이드타이머.한선 15/15 / ./CrownyAI 3초 생존 ALIVE.
    2. CDP :9336 실측 14/14: before=원본 하드코딩 "04:32"(브릿지 미주입) → after=발표자 진입 시 "00:00" 실시간 카운트업. ①시작후 elapsed>0(00:03, interval 활성)·표시 DOM 정합 ②일시정지 멈춤(interval 정리)·라벨 "재개" 전환·재개 재증가 ③리셋 00:00 ④발표 벗어남 interval 정리 ⑤포맷 60=01:00·3661=01:01:01·5=00:05 + 슬라이드쇼 자동시작/오버레이 경과표시/종료 정리.
    3. 문서 회귀 27/27 PASS + 슬라이드 #1~#5 무회귀 5/5(캔버스 writeback·노트편집·드래그재정렬·레이아웃적용·슬라이드쇼 재생/다음/블랙/종료).

    관련 파일

    • bundle/office/bridge/슬라이드타이머.한선 (정본, 신규)
    • bundle/office/bridge/crownyBridge.js §20 installSlideBridge(punch #6 블록 추가 + buildOverlay elapsed readout)
    • dist/CrownyAI.app/Contents/Resources/office/bridge/crownyBridge.js (SSOT 동기화 — 패키지 앱은 Resources 사본을 우선 로드)
    • 판정표: spec/슬라이드기능-판정표.md "발표 타이머(04:32)=없음" 해소

    잔여 이슈

    • punch #7(전환 효과 실적용)·#8~#10(도형삽입/테마색/시트연결) 미착수.
    • 타이머 경과는 앱 세션 내 메모리 상태 — cdf 저장/복원엔 미포함(현 스코프 밖).