보드 시작 시 없는 종목 자동 등록 — 커스텀 종목 공유 공백에서 이름 승계까지 (2026-08-31)
- 기간: 2026-08-30 ~ 08-31 (1세션, #926 후속 점검에서 공백 확인 → 오너가 방향 결정: "매칭이 안 되는 종목이 있으면 유저 새로운 커스텀 종목으로 등록하는 게 맞을 것 같음" — 이슈 #945)
- 랜딩: PR #949(
4ae4f99a) — 서버 작업 없음(기존create_custom_exercise재사용), Vercel 배포 청크 마커 실측 — 종결(08-31 오너 지시로 실기기 확인 게이트 폐지 — 자동 검증으로 닫음, 이슈 [반영완료]) - 설계서: 없음(단일 트랙 — 분석·D1~D3 결정은 이슈 #945 쓰레드)
- 정본:
mobileApp.tsxonGroupBoardStart 자동 등록 선행 패스 ·measureSemantics.tsinferRecordingFieldsFromSets·group-props.md§4 시작 바 항 - 게이트:
groupBoardCustomRegister.test.mjs— 추정 규칙 단위 7케이스 + 시작 핸들러·안내 없음 소스 앵커 - 계약: 서버의 "같은 소유자·같은 이름 재등록 = 기존 행 반환"이 중복 생성 방지의 근거(반복 시작 안전)
1. 배경 · 2. 문제 제기
A가 자기만 쓰는 커스텀 종목(예: "밴드 풀아파트")을 화이트보드에 올리면 보드는 그룹원 모두에게 잘 보인다. 그런데 B가 "이 운동으로 시작"을 누르면 — 앱이 B의 종목 목록에서 번호로, 다음 이름으로 찾아보고, 둘 다 실패하면 그 종목만 빼고 시작하며 안내 문구 한 줄만 띄웠다. A가 공유한 운동을 B가 온전히 따라할 수 없었다(#831의 "정규화 후속 ⑤"로 남아 있던 보류).
3. 해결 방안 (오너 결정 D1~D3, 2026-08-30)
- D1 기록 항목은 보드 세트의 값 종류로 추정 — 시간만 → 시간, 거리만 → 거리, 둘 다 → 거리+시간, 그 외 → 무게·횟수 기본.
- D2 복합종목의 구성 동작이 없을 때도 같은 방식으로 자동 등록(세트 정보가 없어 무게·횟수 기본).
- D3 별도 안내 없이 조용히 등록·시작. 등록 실패(오프라인 등) 종목만 기존 "빼고 시작" 안내로 남긴다.
4. 적용한 내용
- 시작 핸들러에 자동 등록 선행 패스: 어느 경로로도 못 잇는 이름을 모아(같은 정규화 이름은 1회) 커스텀 종목으로 등록하고, 받은 번호를 매칭 맵에 합류 — 아래 기존 매칭·프리필 로직이 그대로 잇는다. 추정 함수
inferRecordingFieldsFromSets는 공용 모듈로 반출해 단위 테스트. - 반복 시작 안전: 서버가 같은 이름 재등록에 기존 종목을 돌려줘 같은 보드를 여러 번 시작해도 종목이 하나만 생긴다.
5. 적용 결과
| 항목 | 전 | 후 |
|---|---|---|
| B에게 없는 종목이 든 보드 시작 | 해당 종목 제외 + 안내 문구 | B 목록에 자동 등록 + 세트까지 채워 시작 |
| 같은 보드 반복 시작 | — | 종목 1개 유지(서버 이름 중복 방지) |
| 등록 실패(오프라인) | — | 기존 동작으로 대체(빼고 시작 + 안내) |
실앱 왕복(타 계정 보드 시작)은 자동 게이트 밖 — 사용 중 발견 시 재오픈으로 처리(08-31 게이트 폐지).
6. 이번 개선으로 향상된 것 · 남은 것
커스텀 종목이 많은 그룹에서도 보드 공유가 온전히 동작한다 — B의 목록에 본인이 만들지 않은 종목이 생기는 부작용은 종목 관리에서 삭제 가능(오너 인지 하에 채택). 남은 것 없음 — 이슈 #945 [반영완료] 닫음(08-31).