2026-08-09 PulseUp 작업일지입니다. 오늘은 6건의 작업을 진행했습니다.

EMOM Stress SET1→SET2 종료 벨 미재생 수정

현상/기능

  • EMOM Stress에서 Set1→Set2 전환 시 벨이 안 남(Set2→다음 Move Set1은 남)

작업

  • 동일 MOVE SET 연속에서 `suppressCountdownBell`로 종료 벨을 막고 있었다. KEEP_VIDEO는 유지하고 벨 억제만 제거해 SET마다 벨이 나도록 했다(MULTI/SINGLE)

인트로 플로우 도식 PNG → 인라인 SVG (구형 L/R → A/B/C/D)

현상/기능

  • 가운데 카운터 영역 도식이 이미지인지 — 예전 L/R 표기로 되어 있음

작업

  • `renderer/circuits/shared/`(신규), , (신규)
  • 도식은 `assets/workout-diagram.png`·`workout-diagram5.png`를 `<img>`로 붙이던 구조였고 라벨이 구형 L1~R6이었다. 현행 구역 코드로 그리는 인라인 SVG 생성기로 교체. 랩 순서(A1→A2→A3→B3→B2→B1 / C1→C2→C3→D3→D2→D1)와 배치는 기존 도식 그대로이고, 화면 모드별 캡션을 추가 — 3화면 A·C=LEFT / B·D=RIGHT, 5화면 LEFT OUT·LEFT IN·RIGHT IN·RIGHT OUT. Electron 오프스크린 캡처로 두 모드 실측 확인, 테스트 5건 추가. 기존 PNG 2장은 미사용 상태로 남겨둠
  • **요청(추가)** 가운데 좌우 화살표를 3배 두껍게, A/B/C/D 라벨 색을 각각 rgb(229,231,222)·(213,216,201)·(204,206,196)·(190,191,186)으로
  • **내용(추가)** 전·후반 경계 좌우 화살표만 굵기 6→18(`FLOW_STROKE_WIDTH * 3`)로 올리고 전용 화살촉 마커를 분리해 머리 크기도 함께 키웠다(화살표 폭도 156으로 확대). 구역 라벨·화면 캡션은 `ZONE_LABEL_COLORS`에서 색을 받는다. 열 내 화살표·ㄷ자 연결선은 기존 굵기·흰색 유지. 테스트 2건 추가

IntroCircuitKind 카테고리+방식 명명 정리

현상/기능

  • IntroCircuitKind를 더 명확하게 모두 변경 (방법 Loop와 혼동 제거)

작업

  • multi/single play-service
  • `'stress'|'loop'|'emom'|'amrap'` → `'main-stress'|'main-loop'|'emom-stress'|'emom-loop'|'amrap'`로 교체. 인트로 수집/프리뷰/preload/렌더러 SET·RND 표시만 갱신했고 모듈 `circuitType`·재생 로직은 그대로. COMBO Loop는 Main Loop와 같은 half-lap이라 `main-loop` 매핑 유지

EMOM Stress 인트로 C/D 누락 수정

현상/기능

  • EMOM Stress 인트로가 정상적으로 뜨지 않음 — 다른 경로(Loop/AMRAP 등)는 변경하지 말 것

작업

  • `circuits/shared/`, `circuits/shared/`
  • EMOM Stress는 SET(=round)에 A–D가 모두 있는데 Loop용 반전 수집(`emom`)으로 가 C/D가 빠졌다. `resolveIntroCircuitKind`만 stress method/`emom-stress`일 때 stress 계열로 보내 첫 SET 전체(12)를 싣게 했고, Loop·AMRAP·MAIN 분기는 유지했다. 테스트 6건 추가. (이후 IntroCircuitKind 명명 정리로 `emom-stress` 값 사용)

AMRAP 인트로 C/D 영상 누락 수정

현상/기능

  • 3/5화면 AMRAP 실행 시 인트로에 C/D 영상이 안 나옴 — 인트로는 다른 운동과 동일하게 처리

작업

  • `circuits/shared/`, `circuits/shared/intro-play/`, `circuits/shared/intro-play/`
  • AMRAP 인트로만 Stress처럼 첫 메인 라운드(A/B)만 수집해 후반 C/D가 비어 있었다. `collectIntroPlayGridSequences`를 서킷→라운드 정렬 맵으로 정리해 AMRAP도 Loop/EMOM과 같은 `collectHalfLapIntroGridSequences`(전반+후반 두 랩)를 쓰게 하고, AMRAP 라운드 정렬(`sortAmrapDisplaySequences`, Stress lap 순서)을 추가했다. `collectAmrapIntroSequences` 시그니처도 Loop/EMOM과 동일하게 맞췄다. 테스트 4건 추가

메뉴 icon DB 문자열만으로 Lucide 표시

현상/기능

  • menu 테이블 icon만 넣으면 Lucide 아이콘이 나오게 하고, CalendarDays뿐 아니라 모든 Lucide 아이콘에 적용

작업

  • 수동 레지스트리 대신 `lucide-reacticons` 동적 조회로 전환. PascalCase/kebab-case 지원, 구 MUI식 별칭(`FitnessCenter` 등) 유지. Sidebar는 `getMenuIconComponent`만 사용
  • **Web** · `utils/`, `layouts/components/`