2026-07-22 PulseUp 작업일지입니다. 오늘은 7건의 작업을 진행했습니다.
SINGLE water break 다음 영상 재생
현상/기능
- water break일 때 다음 영상이 메인에서 재생되게 할 것
작업
- rest KEEP_VIDEO만 직전 MOVE 유지. water break는 `keepMainVideo=false`로 다음 MOVE(C1 등)를 메인에서 재생·position label 표시. SET 사이 rest 동작은 유지
SINGLE Stress MOVE 전환 영상 교체
현상/기능
- MOVE 1→2로 진행해도 영상은 A1만 계속 재생됨
작업
- SINGLE에서 같은 Stress 그룹 내 A1→A2 MOVE 전환도 MULTI용 `KEEP_VIDEO`로 보내 영상이 안 바뀌던 문제를 수정. SINGLE은 position/lap이 바뀌면 실제 position으로 broadcast하고, 동일 MOVE SET만 KEEP_VIDEO. renderer move 키는 position 우선·Vimeo ID 정규화로 URL 형식 차이에도 A2를 찾도록 보강
SINGLE Stress bulk preload 차단
현상/기능
- SINGLE 화면 1개인데 Stress 로그에 타임라인 프리로드 6개 — 실제로 6개 로드되는지, 1개면 충분
작업
- SINGLE renderer는 `workout-play-preload` IPC를 구독하지 않아 bulk preload 6건은 원래 화면에 반영되지 않았으나 main은 MULTI용 로직으로 IPC·로그를 계속 발생. `allowsBulkPreload=false`(usesGridQueue)일 때 timeline/group/CD bulk preload를 생략하고, 물보충 `isVideoPreload`도 `selectStressGroupBroadcastSequences`로 MOVE 1개만 전송
SINGLE Stress 동일 MOVE 영상 유지
현상/기능
- Main Stress A1 SET1→SET2→SET3(MOVE 1/6)처럼 MOVE가 같으면 같은 영상을 계속 재생 — SET/휴식마다 재로딩하지 않음
작업
- 영상 pool 키를 round·sequence가 아닌 MOVE(`exercise_id`+`position`+`video`) 기준으로 통일하고, 타임라인도 MOVE당 1개만 유지. 동일 MOVE SET/휴식은 videoPool 갱신 생략. Stress 같은 그룹 내 A2 전환도 `KEEP_VIDEO`여도 MOVE가 다르면 index·영상 교체. rest/water 구간 position label은 현재 MOVE(A1 등) 유지 표시
SINGLE Stress 물보충 표시 복구
현상/기능
- SINGLE main-training stress A/B 실행 후 물보충 구간이 정상 표시되지 않음
작업
- `renderer/single/`
- 물보충 중 main이 보내는 `isVideoPreload` IPC를 SINGLE renderer가 일반 sequence로 처리해 헤더가 `Main`으로 덮이고 타이머·영상 상태가 깨지던 문제 수정. preload는 다음 슬롯만 갱신하고, `KEEP_VIDEO` 물보충·휴식은 메인 영상(B1 등) 유지·다음 그룹(C1)은 작은 preview 슬롯에만 표시. Water Break 세그먼트·카운트다운은 유지
SINGLE 영상 무한 반복 재생
현상/기능
- SINGLE 영상이 클립 길이만큼 한 번만 재생되고 멈추는 문제 — 운동 시간 동안 계속 반복되어야 함
작업
- `renderer/single/`, `renderer/components/`
- SINGLE embed URL을 MULTI grid와 동일한 `background=1&loop=1&autopause=0`으로 재정의해 player 자체 무한 반복을 보장. `VideoPlayer`에 `buildEmbedUrl` 확장점을 추가하고 MULTI 기본 embed는 기존 그대로 유지. embed 파라미터 회귀 테스트 추가(6건 통과)
SINGLE/MULTI 영상 renderer 초기화 복구
현상/기능
- 재수정 후에도 영상이 안 나오고 초기 화면에 머무는 문제 원인 규명·수정
- SINGLE/MULTI 분리 후 두 모드 모두 영상 renderer가 생성되지 않는 문제 수정
- renderer listener 등록 전 `workout-play-ready` 등 초기 IPC 이벤트 유실 방지
- DOM 준비 전후 초기화와 mode별 ready 채널 계약 검증
작업
- `main/`
- renderer 파일 로그에서 `Unable to load preload script: module not found./preload/presentation-api-contract.js` 확인. Electron 기본 sandbox preload는 로컬 모듈 require가 불가한데 preload가 SINGLE/MULTI 분리로 다중 파일 구조가 되며 로드 실패 → presentation API 미노출이 원인. presentation 창 `webPreferences`에 `sandbox: false`를 추가해 해결 (contextIsolation/nodeIntegration 보안 설정은 유지)
- `renderer/`, `renderer/single/`, `renderer/multi/`
- 동적 import 완료 전에 `DOMContentLoaded`가 지나가 entry 초기화가 영구 누락되던 race를 수정. DOM이 이미 준비됐으면 즉시, 로딩 중이면 이벤트에서 한 번만 renderer를 생성하도록 공통 순수 유틸리티 적용
- `preload/*-`, `preload/`, `main/`, `main/presentation/`
- `did-finish-load`를 준비 완료로 간주하지 않고 SINGLE/MULTI entry가 listener 등록 후 `presentation-renderer-ready`를 명시적으로 전송하도록 변경. registry는 해당 신호를 받은 뒤 보관 이벤트를 flush
- 관련 회귀 테스트 11건 통과, main/preload/renderer 전체 TypeScript 빌드 성공
- **Test** · `renderer/`, `preload/`