2026-07-14 PulseUp 작업일지입니다. 오늘은 9건의 작업을 진행했습니다.
Electron 앱 최종점검
현상/기능
- 운동 로직·운동 세션 단일 로그·ANT+ 심박·Vimeo 정지 복구와 기타 Electron 기능의 최종 작동 및 최적화 점검
작업
- 7개 운동 방식의 재생 계약과 로그·심박·영상·HTTP/IPC/TLS·창/전원 수명주기를 정적 분석하고 50개 테스트 및 3개 TypeScript 구성을 검증. LAN 무인증 제어, 전역 TLS 우회, 영상 pause/큐 제어, 심박 세션 귀속·백프레셔, 로그 종료 정합성을 우선 수정 항목으로 분류하고 Canvas 보고서로 정리
- **분석** · , `workout_exercises_logic.md`
리모컨 앱 완전 종료
현상/기능
- 리모컨의 앱 종료 버튼으로 Electron 창뿐 아니라 백그라운드 프로세스와 연결 자원까지 완전히 종료
작업
- 릴레이 종료 명령을 메인 프로세스 공통 종료 경로로 전달하고 WebSocket·HTTP 서버·ANT+·로그 자원을 정리한 뒤 모든 창을 제거하도록 구현. 정상 종료가 지연되면 제한 시간 후 `app.exit(0)`으로 프로세스를 확실히 종료하는 안전장치 추가
COMBO-Stress SET 단일 타이머
현상/기능
- A1/A2/A3 세 운동을 각각 분할 재생하지 않고 동시에 표시한 상태에서 SET 설정 시간만큼 타이머를 한 번만 실행
- 모든 SET의 설정 휴식을 실행하고 SET 4 휴식 뒤 MOVE 사이 물보충 적용
- 확정된 COMBO-Stress 실행 규칙 문서화 및 회귀 방지
작업
- 같은 MOVE·SET의 운동 3개를 하나의 블록으로 묶어 workout plan 시간 또는 기존 분할 시간 합계로 단일 타이머를 실행하고, 처리 후 세 시퀀스를 한 번에 넘기도록 수정. 기존 저장 데이터에는 마지막 SET 휴식을 실행 중 보정
- SET 4를 포함한 모든 SET 뒤에 휴식 시퀀스를 생성하고, A/B/C MOVE는 마지막 SET 휴식 후 물보충을 추가하며 마지막 D MOVE는 물보충 없이 Cool Down으로 이동하도록 저장 순서와 시간 합계를 수정
- 3개 영상 동시 표시·SET별 단일 타이머·모든 SET 휴식·마지막 MOVE 물보충 생략 규칙을 반영하고, SET 시간 합계·휴식/물보충 생성·Electron 단일 타이머 및 기존 데이터 휴식 보정 테스트를 추가
- **Web**
- **문서/Test** · `workout_exercises_logic.md`
운동 완료 리모컨 초기화 및 최종 로그 전송
현상/기능
- 운동 전체 종료 후 리모컨의 이전/다음 버튼이 남지 않고 초기 인트로/운동 시작 상태로 복귀
- 운동 로그를 하나의 세션 파일로 유지하고 로그 보내기 시 최종 파일 하나만 전송
- 완료 상태 초기화 및 최종 로그 단일 선택 회귀 방지
작업
- Electron 세션 상태 폴링 결과를 리모컨 UI 상태에 동기화하여 `completed` 또는 진행 후 `ready`가 감지되면 종료 안내와 함께 초기 버튼 상태로 전환
- 기존 운동 세션 단일 파일 수집을 유지하면서 심박 진단 JSON 추가 업로드를 제거하고, 수집 후보 중 최종 운동 로그 한 파일만 한 번 업로드하도록 변경
- completed/ready 상태 매핑과 복수 후보에서 최종 로그 하나만 선택하는 단위 테스트 추가
- **Web**
- **Test**
COMBO-Stress 구간 전환 휴식
현상/기능
- 운동 실행 시 DS와 COMBO 사이, COMBO와 CD 사이의 두 휴식시간을 각각 30초로 설정
- COMBO 구간 휴식 규칙 문서화 및 회귀 방지
작업
- `workout-modules/circuits/combo-stress/`
- 공통 5초 구간 전환은 다른 운동에서 유지하고 COMBO-Stress 세션에서만 DS→Main 및 Main→CD 전환 시퀀스를 30초로 생성하도록 전용 판별 모듈 추가
- 두 구간의 30초 휴식을 실행 흐름에 명시하고 COMBO와 다른 운동의 전환 시간 분기 테스트 추가
- **문서/Test** · `workout_exercises_logic.md`
COMBO-Loop 저장 및 Electron 재생
현상/기능
- Totalexercises에서 COMBO-Loop 저장 시 RND 고정 A→B→C→D 순환 구조 반영
- COMBO-Loop를 기존 운동과 분리된 전용 파일로 재생
- COMBO-Loop 화면 표기와 실행 규칙 반영
- COMBO-Loop 판별·순서·재생·네비게이션·전환 회귀 방지
작업
- 기존 Loop 저장 생성기가 각 RND에서 3영상 MOVE를 A/B/C/D 순으로 생성하고 MOVE 사이 휴식·RND 사이 물보충·마지막 RND 물보충 생략을 적용함을 확인하고, 4 RND 전체 순서·시간 합계·연속 sequence 테스트 추가
- `*`
- 판별·순서·메인 재생·모듈·네비게이션·30초 전환 정책을 독립 구현. RND별 A→D MOVE에서 3개 영상을 동시 표시하고 단일 타이머를 실행하며 휴식/물보충과 다음·이전 MOVE 단위 이동을 연결
- `counterMode=combo-loop`에서 `RND x/n`, `MOVE y/n`을 표시하고 DS/Main/CD 30초 전환, MOVE 단일 타이머, 휴식·물보충 순서를 문서화
- 전용 모듈 선택, RND/MOVE 계산, 3영상 단일 타이머, 블록 이동, 30초 전환을 검증하는 테스트 5개 추가
- **Web**
- **Renderer/문서** · , `workout_exercises_logic.md`
- **Test** · `*.`
COMBO-Loop 타이틀 분기
현상/기능
- COMBO-Loop 실행 시 화면 타이틀이 COMBO (Stress)로 표시되는 문제 확인 및 수정
작업
- Main 프로세스는 Loop로 정상 분기됐지만 Renderer의 방식 판별에서 `metadata.circuitType`이 누락된 원인을 수정. `combo-loop` counterMode와 circuitType을 loop 방식으로 해석해 인트로·운동 그리드 타이틀을 `COMBO (Loop)`로 표시하고 회귀 테스트 추가
- **Renderer**
COMBO-Loop 3·5화면 MOVE 배치
현상/기능
- 3화면은 MOVE 1·2에서 A/B, MOVE 3·4에서 C/D 영상으로 전환하고 5화면은 A/B/C/D 전용 화면 유지
- 화면 모드별 COMBO-Loop 배치 규칙 명시 및 회귀 방지
작업
- 3화면의 MOVE 2→3 경계에서만 세 슬롯을 한 번 advance하고 새 RND 시작 시 A/B 큐로 복귀하도록 전용 정책 추가. 5화면에서는 advance/seek를 생략해 좌외/좌내/우내/우외 패널별 A/B/C/D 고정 배치를 유지
- 3화면 A/B→C/D 전환과 5화면 고정 배치를 문서화하고 경계 전환·RND 복귀·5화면 무전환 테스트 추가
- **문서/Test** · `workout_exercises_logic.md`
COMBO-Loop RND 사이 Water Break
현상/기능
- RND 1→2 등 라운드 전환 시 Water Break가 표시되지 않는 문제 수정
- 기존 재생 데이터에서도 RND 사이 물보충 실행, 마지막 RND→CD에서는 생략
작업
- RND별 plan의 hydration 0초가 저장된 water 시퀀스 시간을 덮어쓰던 병합 오류를 수정하여 DB에 저장된 물보충 시간을 유지
- water duration이 0으로 전달된 경우 마지막 workout plan의 설정 물보충 시간으로 런타임 보정. 마지막 RND에는 water 시퀀스가 생성되지 않는 기존 규칙을 유지하고 Web/Electron 회귀 테스트 추가
- **Web**