Skip to content

화이트보드 완료 소급 링크 — 컷오버 전 수행 세션 보드 귀속 (2026-08-31)

  • 기간: 2026-08-31 (1세션, 오너 재보고 "완료한 사람들 내역이 안 뜨네" → 지시 "이전 세션 소급 진행")
  • 랜딩: PR #1027 (6658362d) — 마이그레이션 20260831220000 Production db push + per-board 프로브 실측
  • 설계서: 없음 — 분석·계획 = 이슈 #875 스레드(08-31 재보고 분석 코멘트)
  • 정본: supabase/migrations/20260831220000_group_board_completion_backfill_links_v1.sql(group_board_session_links + get_group_board_day_sessions_v1 재발행) · docs/data/brid.md 계보 규약 소급 예외 절
  • 도구: Management API read-only 프로브(계보 세션 0건·후보 종목 대조) · 마이그레이션 전문 DO-raise 드라이런(백필 3건·postcheck까지 원자 롤백 실측)
  • 게이트: supabase/tests/database/group_board_completion_lineage.test.sql plan 7→8 (링크 세션 표시 L6 + 비링크 local:* 제외 유지)
  • 버그리포트: BUG-051
  • 계약: 완료 판정 정본은 계보 접두 그대로 — 링크 테이블은 컷오버 전 세션 소급 전용, 새 행을 쓰는 경로 없음

1. 배경

#880 컷오버(08-29)로 보드 완료 = "보드의 '운동으로 시작' 버튼으로 시작해 완료한 세션"이 됐고, 그 전 세션은 소급 없음으로 안내됐다. 오너가 08-31에 재보고: 화이트보드 운동을 완료한 사람들 내역이 하단에 안 뜬다.

2. 문제 제기

Production 실측으로 세 겹이 확인됐다: ① group-board: 출처 세션 0건(전 기간) ② 컷오버 이후 새 보드 0장 — 새 판정으로 잡힐 세션이 아직 없음 ③ 완료 0명일 때 화면은 안내 없이 빈 공간. 코드 체인(버튼→발급→저장→표시)은 유닛·pgTAP·e2e로 온전 — 문제는 버그가 아니라 소급 공백. 그런데 세션 id가 source_ref에서 파생되는 구조(#879)라 출처 문자열을 뒤에서 고치는 소급은 불가능하다.

3. 해결 방안

  • 원칙(오너 지시 08-31): 이전 세션을 소급한다. 규모가 작다(현존 보드 3장).
  • 접근: 정체성은 불변으로 두고 "이 보드의 완료"라는 연결만 담는 group_board_session_links를 신설, 규칙(컷오버 전 보드 × 그 그룹 멤버 × 같은 날짜 완료 세션 × 보드 종목과 exercise_id 겹침)으로 일회성 백필. 완료 행 RPC는 계보 접두 ∪ 링크 합집합. 종목 겹침 조건이 원래 #875의 오집계 2종(아침 러닝·타 그룹 세션)을 그대로 배제한다 — 드라이런으로 랜딩 전 확정.
  • 기각: source_ref 재작성(id 파생·FK 11곳 파급으로 정체성 파괴) · 판정 상시 완화(오너 지시는 소급까지 — 앞으로의 정본은 계보 유지).

4. 적용한 내용

  • 링크 테이블: definer RPC 전용(RLS + authenticated revoke), 새 쓰기 경로 없음. 백필은 마이그레이션 안 일회성 insert(빈 DB에선 0건).
  • RPC 재발행: 칼로리 원자(20260831150000)판 본문 기준 + 링크 유니온. payload·contract_version(1)·멤버십·차단·테이크다운·상한 유지 — 클라이언트 무변경.
  • 작업 중 드러난 것: session_exercises.exercise_id가 text 컬럼(uuid 캐스팅 불가, lower 텍스트 대조로) · 세션-보드 대조는 이름이 아니라 exercise_id로 해야 표기 차이(사이드/덤벨 레터럴 레이즈)를 관통한다.

5. 적용 결과

항목후 (Production 실측)
마블오후반 08-26 완료 인원0명2명 (acetuna·chewie_park — 아침 러닝은 제외 유지)
마블 역도반 08-28 완료 인원0명1명 (chewie_park)
필앤주 08-26 완료 인원0명0명 (타 그룹 세션 오집계 배제 유지 — 정상)
계보 세션(group-board:*)0건0건 (변화 없음 — 소급은 링크로, 정체성 무변경)

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

  • 컷오버 이전에 보드 운동을 수행한 완료가 화면에 복원됐다 — "판정 규칙 변경 + 소급 불가" 조합이 만든 빈 화면 해소.
  • 데이터 소급 마이그레이션의 표준 절차 확립: 전문 DO-raise 드라이런으로 백필 건수·postcheck까지 랜딩 전에 Production 실데이터로 확정.

남은 것

  • 계보 발급(버튼 경로)의 Production 실사용 실증 — 컷오버 후 아직 버튼으로 시작한 세션이 0건이라, 첫 실사용 세션이 완료 행에 서는 것을 프로브로 확인하면 계보 체인의 마지막 실증이 끝난다.
  • 완료 0명일 때의 빈 상태 안내 문구(왜 비었는지 화면이 설명하지 않음) — 오너 판단 대기, 별도 소품.