Skip to content

하단 복귀 바를 메인 탭으로 — 앱을 다시 켠 첫 화면에서 쓰다 만 기록으로 돌아가기 (2026-09-01)

  • 기간: 2026-09-01 (세션 1개, 오너 보고 원문: "현재 일지탭에서 세션 수정하다가 앱 끄면, 다시 돌아왔을떄 일지탭 하단에 '마저 수정하기' 풀 블리드바가 뜨는데, 그거 메인텝에서 뜨게 해줄 수 있어?")
  • 랜딩: PR #1092(Phase 1·2, 5e932867) — 마이그레이션 없음, Vercel 자동 배포
  • 설계서: 없음(소규모 UX 변경 — 분석·Phase 계획은 이슈 #1088 본문)
  • 정본: 노출 규칙 = src/react/mobileApp.tsxresumeBar 게이트(셸 MobileTabsRegion) · 문구 = src/react/barbelicCopy.tsMOBILE_SHELL_COPY.resumeWorkout / resumeWorkoutEdit
  • 도구: 없음
  • 게이트: tests/react/workoutFlowDraftSafety.test.mjs — "mobile container wires completed-session editing and home-tab resume"
  • 버그리포트: 없음(결함 수리가 아니라 디자인 계약 변경)
  • 계약: src/react/ui/mobile/styles/base/nav.css 복귀 바 주석 — "작성을 시작한 탭에서만"(2026-07-31) → "메인 탭에서만"(이슈 #1088)

Phase 현황

Phase내용상태
Phase 1복귀 바 노출 조건을 메인 탭 전용으로 교체✅ PR #1092 (5e932867)
Phase 2완료 기록 수정 초안이면 바 문구를 "마저 수정하기"로 분기✅ PR #1092 (5e932867)

1. 배경

기록을 쓰다가(또는 지난 기록을 고치다가) 화면을 벗어나면 초안이 기기에 남고, 화면 하단에 마저 기록 작성하기 바가 떠서 이어갈 수 있다. 이 바는 2026-07-31 디자인 전달본에서 작성을 시작한 탭에서만 뜨는 계약으로 들어왔다.

같은 불편은 이미 한 번 걸러진 적이 있다. 이슈 #887 Phase 2에서 부팅 시 진행 중이던 운동이 있어요 확인 팝업을 넣으면서, 코드 주석에 "종전에는 이어하기 바가 시작했던 탭에서만 보여서 복원 성공과 소실을 구별할 수 없었다"고 적었다. 팝업은 재실행 직후 한 번만 묻고, 그 팝업을 닫은 뒤의 상태는 종전 그대로였다.

2. 문제 제기

일지에서 기록을 고치다 앱을 끄면, 다시 켠 첫 화면에는 아무 표시가 없다

유저 A가 일지 탭에서 지난 운동 기록을 열어 수정하다 앱을 껐다. 다시 켜면 확인 팝업이 뜨고, "지금은 아니고 나중에" 뜻으로 바깥을 눌러 닫는다. 이때 남아야 할 마저 기록 작성하기 바는 일지 탭에만 있고, 앱이 처음 여는 메인 탭 하단에는 아무것도 없다. A는 일지 탭으로 직접 옮겨 가기 전까지 고치던 내용이 사라진 줄 안다.

증거:

  • 노출 조건이 "지금 보는 탭 == 작성·수정을 시작한 탭" 한 줄이었다 — src/react/mobileApp.tsx, const resumeBar = … && tab === workoutOriginTab.
  • 시작한 탭은 편집기를 열 때 기록되고(appController.tsxcaptureWorkoutOriginTab), 일지에서 수정을 열면 calendar가 된다.
  • 그 값이 기기에 보관된 초안 봉투에 함께 저장돼(workoutDraftStore.ts) 앱을 껐다 켜도 복원되므로, 재실행 후에도 바는 일지 탭 전용으로 남았다.

3. 해결 방안

원칙 (오너 결정 D1·D2, 2026-09-01)

결정선택지결과
D1 — 바를 어디에 띄우나(A) 메인 + 시작한 탭 / (B) 메인 탭에서만 / (C) 모든 탭(B) 메인 탭에서만 채택. (A)는 세션 제안이었으나 오너가 (B) 선택 — 하단 바를 한 곳에만 둔다. (C)는 피드·그룹 등 모든 탭 하단을 54px씩 계속 덮어 기각.
D2 — 문구를 구분하나(A) 항상 "마저 기록 작성하기" / (B) 수정 중이면 "마저 수정하기"(B) 분기 채택. 메인 탭에는 무엇을 하다 나왔는지 보여주는 문맥이 없어 문구가 유일한 단서다.

접근

노출 판단은 종전대로 셸(MobileTabsRegion)이 단독으로 소유한다. CSS(:has() 등)로 숨기는 방식은 2026-07-31 주석이 명시적으로 금지하고 있어 그대로 지켰다 — 바뀐 것은 조건식 하나다.

문구 분기는 "완료한 기록을 고치는 중"이라는 사실이 이미 편집기 의도(workoutEditorIntent)에 있으므로, 새 상태를 만들지 않고 파생값 하나(editingCompletedSession)를 셸까지 내려보냈다.

4. 적용한 내용

Phase 1 — 메인 탭 전용 노출 (#1092)

  • src/react/mobileApp.tsxresumeBar 게이트를 tab === workoutOriginTabtab === "home"으로 교체. 셸 영역이 더 이상 workoutOriginTab을 보지 않으므로 그 배선을 걷어냈다.
  • src/react/ui/mobile/styles/base/nav.css — 노출 계약 주석을 새 규칙으로 갱신(구 계약은 날짜와 함께 한 줄 남김).
  • tests/react/workoutFlowDraftSafety.test.mjs — 게이트 계약 앵커·테스트 이름 재조준, tests/audit/pending-changes.json에 수정 사유 등재.

Phase 2 — 수정 초안 문구 분기 (#1092)

  • src/react/controllers/workoutDraftController.tseditingCompletedSession(완료 기록 + 수정 모드) 파생.
  • src/react/appController.tsxsrc/react/mobileApp.tsxsrc/react/ui/mobile/shell/MobileShell.tsxresumeEditing 한 값으로 전달, 바 라벨만 갈아 끼운다.
  • src/react/barbelicCopy.tsresumeWorkoutEdit: "마저 수정하기" 신설(문구는 공용 상수 강제 규칙 유지).

주요 결정과 그 근거

  • 하단 크롬 높이는 손대지 않았다. 메인 탭은 초안이 있는 동안 탭바 55 + 바 54 = 109px가 되는데, 이는 평소 오늘 운동 시작 바가 있을 때와 같은 값이라 여백 사상표(--bottom-chrome-h)를 그대로 쓴다.
  • 수정을 마치거나 취소하고 나올 때 돌아가는 탭은 종전대로 작성·수정을 시작한 탭이다(일지에서 시작했으면 일지). 이번 변경은 노출 위치만 다룬다.

작업 중 드러난 것

  • 이 "시작한 탭에서만" 규칙은 버그가 아니라 디자인 전달본이 넣은 계약이었다(nav.css 주석 + v61 전달 커밋). 계약을 바꾸는 변경이므로 주석·계약 테스트를 함께 갱신해야 회귀 그물이 새 규칙을 지킨다.
  • 노출 조건에서 workoutOriginTab을 빼면 셸까지 내려오던 그 값이 미사용이 된다. 미사용 코드 게이트에 걸리므로 배선(컨텍스트 키 → 리전 props → 호출부)을 같은 커밋에서 함께 정리했다.

5. 적용 결과

항목전 → 후
초안이 남은 상태에서 메인 탭 하단 복귀 바없음 → 있음
초안이 남은 상태에서 일지(시작한) 탭 하단 복귀 바있음 → 없음(오너 결정 D1=B)
완료 기록 수정 초안일 때 바 문구마저 기록 작성하기마저 수정하기
메인 탭 하단 크롬 높이(초안 있을 때)55px → 109px(= 시작 바가 있을 때와 동일)
로컬 게이트npm run check 전 단계 통과(단위 2290건) · CI Repository checks 성공

검증은 자동 증거까지다(계약 테스트 + 로컬·CI 게이트). 바가 실제로 그려진 모습·애니메이션 등 눈으로 볼 품질은 확인하지 않았다.

6. 이번 개선으로 향상된 것

앱을 다시 켠 첫 화면에서 쓰다 만 기록으로 돌아갈 수 있다

부팅 확인 팝업을 닫아도 되돌아갈 길이 첫 화면에 남는다. 어느 탭에서 쓰다 나왔든 복귀 지점이 한 곳(메인 탭)으로 고정돼, 사용자가 "어느 탭에서 시작했더라"를 기억할 필요가 없다.

남아 있는 것이 "새 기록"인지 "지난 기록 수정"인지 문구로 구분된다

문맥이 없는 메인 탭에서도 무엇을 하다 나왔는지 한 줄로 알 수 있다.

구조적으로 남는 것

  • 복귀 바 노출 규칙의 정본이 셸 한 곳(MobileTabsRegion)이라는 점은 그대로다 — CSS는 계속 노출 판단에 관여하지 않는다.
  • 새 규칙이 계약 테스트로 고정돼, 다음 디자인 전달본이 조건식을 되돌리면 게이트가 잡는다.

남은 것

  • 없음. 노출 위치·문구 외의 동작(수정 종료 후 돌아가는 탭 등)은 이번 범위 밖이며 그대로 둔다.