Skip to content

v0.18.0 전체 기능·공유 계층의 커버리지와 소유권 장부 (이슈 #1281, G05)

2026-09-10 Phase 4 배정: 사용자 요청으로 D14 D14 #1533를 DATA / Phase 4-1에 추가했다. 전체 63개·Phase 4 7개·191개 직접 의존이며 D14 선행은 D02/D04/S10/D11, 후속 직접 소비자는 R01이다. 채택 실행계획과 총괄의 최신 목록을 따른다. D11의 기존 차등 발행 인계, R01의 활성 경로 마감, R04의 전체 비용, R05의 populated 전환 검증을 보강했다. 구현·검증 완료 판정은 추가하지 않았다.

D14의 계획 소유 범위는 workout 자식 writer·engine 최소 배선과 관련 저장/원본 보호/복원/경합 검사다. 앱 실행 분류·새 경로 등록은 실제 구현 PR에서 담당자가 확인한다. 아래 생성된 파일 수·서버 객체 수·판정은 역사 스냅샷으로 그대로 보존한다.

한 문장 — 저장소가 추적하는 파일 전부(2026-09-07 main e749fe66 기준 1,923개 — G05 산출물 5개 포함)와 서버 객체(테이블 77·함수 372·cron 잡 7·Edge 함수 3·API 핸들러 4)가 어느 기능·어느 계층에 속하고, v0.18.0 의 어느 계획 ID 가 책임지며, 지금 판정이 무엇인지를 한 곳에서 보여 주는 장부다. 계획(63개 작업 지시서)은 총괄 문서가, 소유 역할·병합 순서는 HQ 운영 정본이, 보존 정책·변경 계약은 ADR이 정본이다. 이 장부는 그 세 문서가 "실제 앱 전부를 덮는지"를 기계로 확인하는 연결 장부다.

  • 이슈: #1281 (계획 ID G05, Phase 1 Step 2, 추가 범위 C01)
  • 데이터·규칙: 앱 저장소의 scripts/architecture/coverage-inventory.json. §3은 문서 분리 전에 이 파일에서 생성한 역사 스냅샷이며 손으로 수치를 고치지 않는다. 이 문서는 문서 저장소가 소유한다.
  • 검사: 앱 저장소에서 node scripts/architecture/check-coverage-inventory.mjs (요약·대조), --strict (R01/R05 종료 검사), --json. #1463 이후 앱 검사는 이 문서의 생성·동기화를 요구하지 않으며 --render는 제거됐다.
  • 갱신 책임: 규칙·제외·진입점 등록은 새 경로를 만든 담당 세션이 같은 PR 에서 한 줄 추가한다. 장부 행의 판정과 증거는 그 계층의 구현 담당 이 바꾼다(§1-3). 영역·소유 역할·통합 담당의 변경은 HQ 합의(운영 정본 §3 은 이 장부가 바꾸지 않는다).
  • 운영 개정(2026-09-07, #1313): 소유자는 계약·변경 충돌을 조율하는 책임이며 상주 머지 승인자가 아니다. 담당자가 검증 후 npm run landing:request -- --pr <N>으로 자동 큐를 사용한다. HQ 라벨·재승인을 기다리지 않는다(운영 정본 §4). 생성 절의 파일 수는 현재 추적 파일로 갱신하고 기존 판정·증거는 유지한다. G02/G03/D03·auth 후속에서 누락된 14개 경로의 분류도 보충했다.

2026-09-09 #1477 초기 작업 측정: 홍보 랜딩 영역 1개·분류 규칙 12개를 제거하고 §3을 당시 앱 작업본에서 생성했다. 아래 과거 생성부는 기준 84e2d7d의 역사 스냅샷이며, 미분류 29개·미등록 cron 2개가 변경 전후 동일하고 새 누락·장부 행 누락은 0개였다. 랜딩 코드·자산·검사는 Barbelic-landing이, 관련 문서·이력은 이 저장소가 소유한다. 이후 #1463 문서 분리와 함께 통합 PR #1484로 release·staging에 반영됐고 통합 full CI가 통과했다. 이 초기 스냅샷의 문서 동기화·누락 수치를 최종 앱의 검사 결과로 해석하지 않는다. 최신 실행 분류는 앱 코드가 담당하며, 확정된 릴리스 상태와 검증은 #1477 작업 기록에 남긴다.

1. 읽는 법

1-1. 유저 A 의 기록 하나가 지나가는 길 (샘플 추적)

장부의 "계층" 이 무엇인지는 실제 기록 한 건을 따라가면 보인다. 유저 A 가 모바일에서 스쿼트 3세트를 기록하고 완료를 누른다.

순서계층실제 파일·객체영역
① 화면uisrc/react/ui/mobile/screens/WorkoutFlow.tsxWorkoutFinish.tsx (표현만, 저장 로직 없음)workout
② 바인딩bindingsrc/react/features/active-workout/WorkoutFlowBinding.tsxfeatures/completed-workout/completedWorkoutCommands.ts (화면의 의도를 명령으로)workout
③ 컨트롤러controllersrc/react/controllers/workoutWriteController.ts (명령을 대기열에 넣고 영수증을 기다림) · pendingWorkoutSavesController.ts (기기 대기열, IndexedDB)workout · durable
④ 서비스servicesrc/react/services/domains/workoutDomain.ts · completedWorkoutWriteContract.ts · sessionWriteContractV5.ts (payload v5 조립)workout
⑤ 저장소repositorysrc/react/services/barbelicRepository.tscallMutationRpc(client, "save_session_v5", …) (Supabase 어댑터, 5,485줄 — A01 분리 대상)shell
⑥ 서버 함수·테이블rpcpublic.save_session_v5session·session_exercise·session_exercise_part·exercise_set·exercise_set_part 다섯 층 + workout_mutation_receipts (영수증)workout
⑦ 잡job저장 함수가 enqueue_user_exercise_stats_refresh_job 로 dirty range 를 남김 → pg_cron lift-guild-stats-refresh (매분) → run_user_exercise_stats_refresh_cronprocess_user_exercise_stats_refresh_jobs (또는 Edge stats-process-refresh-jobs) → user_exercise_session_rollups·user_exercise_stats·user_calendar_day_summaries·user_training_period_stats·PR 상태stats
⑧ 다시 화면rpcuiget_home_dashboard·get_calendar_day_summary·get_pr_overview 가 ⑦ 의 투영을 읽어 홈·달력·PR 화면에 표시home · calendar · pr

이 길에서 한 계층이라도 담당 없이 빠지면 그 계층의 문제는 아무도 고치지 않는다. 장부는 ①~⑧ 각각에 계획 ID·소유자·계약·검사·판정·증거를 붙인다. 위 추적으로 확인한 것: 여덟 계층 모두 §3 에 행이 있고 담당이 있다(연결 누락 0).

1-2. 영역과 계층

  • 영역(area) 은 기능 16개(운동·계획·홈·달력·PR·볼륨·카탈로그·프로필·소셜·그룹·온보딩·인증·인입·관리자·통계·기기 대기열)와 공유 runtime 8개(앱 셸·공통 UI 기반·네이티브·서비스 워커·빌드/CI·DB 플랫폼·검증 기반·문서)다. 기능 16개와 공유 8개는 필수 영역 이며 R01/R05 종료 검사 대상이다. 독립 저장소로 이전한 홍보 랜딩은 앱 장부에 별도 영역으로 유지하지 않는다.
  • 계층(layer) 은 진입점·라우트·화면·바인딩·컨트롤러·서비스·저장소·타입·API 핸들러·RPC/테이블·잡·SQL·CSS·네이티브·설정·스크립트·정책·테스트·문서·자원 20개다. 파일이 없는 계층(예: 기능 영역의 rpc)은 서버 객체 이름으로 행을 채운다.
  • 분류는 디렉터리·파일 이름 규칙 이다(첫 일치가 이김). 같은 디렉터리의 새 파일은 자동 분류되고, 새 디렉터리·새 진입점은 미분류로 드러난다. 세밀함보다 유지 가능성을 택했다 — 함수 단위 장부는 만들지 않는다(이슈 지시).

1-3. 판정의 뜻 — 파일이 연결됐다는 것은 품질이 확인됐다는 뜻이 아니다

판정누가 쓰나
유지 근거지금 구조를 그대로 두며, 그 이유가 증거 칸에 있다G05(초기) · 구현 담당
개선 진행계획 ID 가 이 계층을 바꾼다. 아직 끝나지 않았다G05(초기) · 구현 담당
검증 완료구현이 main 에 합쳐졌고 증거(PR·SHA·검사 결과)가 증거 칸에 있다 — 증거 없이는 쓸 수 없다(도구가 거부)구현 담당만
해당 없음이 영역·계층 조합은 v0.18.0 범위 밖이다G05
미확인담당은 있으나 현 상태를 확인하지 못했다누구나 — R01/R05 에서 0 이어야 한다
미배정담당이 없다누구나 — R01/R05 에서 0 이어야 한다

2026-09-07 초기 장부는 G05 가 유지 근거 / 개선 진행 / 해당 없음 만 적었다. "검증 완료" 는 각 계획 ID 담당이 랜딩 뒤 증거와 함께 바꾼다. 필수 영역에 미확인·미배정은 0 이다(도구 출력 "결과: 통과").

D10 구현 증거 — 2026-09-10, v0.18.0 release 반영

통계 영역의 정기 유지 작업은 #1418에서 원본 행 cursor·watermark, catalog pending token, 날짜 due 인덱스로 이식했다. 소유 원천은 앱의 supabase/definitions/stats/{functions,tables}/stats_maintenance_*·scan_stats_maintenance_v1이며 기존 backfill/rollover 이름은 cron/RPC 호환 문이다. D08 lease·D11 publisher 사본을 만들지 않았다.

검증은 pgTAP 51단언, 실제 연결 7회귀, 실제 cron 1회귀와 발견/처리 비용 계측으로 연결한다. 최종 precheck 6분31초·전체 pgTAP 142파일/2,804단언과 Merge Check를 통과해 앱 PR #1521이 release b62a358c에 반영됐다. 재개·실패·old/new scheduler 퇴역 계약이 D11/R04/R05 입력이다. 3,650세션 전체 계산의60초 제한 실패를 기록했고 통계 영역 전체를 검증 완료로 올리지 않으며 staging·Production 반영과 구분한다. 아래 생성 절은 기존 기준 스냅샷을 유지한다.

2. 도구 — 무엇을 잡고 언제 돌리나

검사잡는 것실패 조건
분류git ls-files 전부를 규칙·제외에 붙인다미분류 파일 ≥ 1
진입점 대조파일 목록·schema.sql 에서 HTML·부팅·SW·API 핸들러(api/**, _ 접두 제외)·Edge 함수·워크플로·pg_cron 잡을 실측 해 등록 목록과 비교등록 안 된 진입점 또는 사라진 등록 ≥ 1
장부 감사파일이 있는 (영역, 계층) 에 장부 행이 있는지, 필수 영역에 행이 있는지행 없는 계층 ≥ 1
문서 동기화§3 생성 절이 규칙 파일과 같은지다르면 실패 (--render 로 고침)
--strict위에 더해 필수 영역의 미확인·미배정≥ 1 이면 실패 — R01/R05 종료 검사

언제 돌리나:

  1. 새 경로·새 진입점을 만든 PR — 담당 세션이 PR 전에 한 번 돌려 규칙 한 줄(또는 진입점 등록)을 같은 PR 에 넣는다. npm run check 에는 넣지 않았다(이슈가 정한 대로 종료 검사 도구이며, 다른 트랙의 PR 을 분류 한 줄로 막지 않는다).
  2. 스테이징 통합 점검(운영 정본 §4-3) — 랜딩 담당자가 결과를 확인할 때 돌려 새 미분류·미등록이 쌓이지 않게 한다. HQ가 켜져 있거나 옛 landing:active 라벨이 있어야 하는 작업이 아니다.
  3. R01/R05 종료 검사--strict. 필수 영역의 미확인·미배정 0, 미분류 0, 미등록 진입점 0 이어야 종료한다. G05 는 여기까지의 목록·도구 를 완료로 보고, 앱 전체의 품질 검증 완료는 R05/R06 이 판정한다.

R01 현재 분류·소유 경계 (2026-09-11)

앱 기준 0043560d 이후 R01 분류 변경에서 기존 strict 도구를 실행했다. 분류2,880파일·근거 있는 제외41·미분류0·미등록/유령 진입점0·누락 행0·미배정/미확인0이다. 원래 분류됐던 파일의 영역/계층 변경은0이며 새로 넘겨진 경로만 분류했다. 중복/이관 후 미사용 규칙147개를 정리했고 살아 있는 코드의 품질 판정을 일괄 완료로 바꾸지 않았다. 아래 현재 표와 퇴역·호환·63개 PR/시험 대조가 R01 인계 기준이다. 뒤의 생성 절·2026-09-07 실행 목록은 당시 스냅샷이다.

영역·담당현재 파일 수계획·검증 근거현재 소비 경로 예시
운동 기록(진행 중·완료·수정·삭제) / APP(A02 구현, A01 최종 wiring)379A02 PR1354, A09 PR1394, A12 PR1378, S03 PR1363, U02 PR1523, U03 PR1520, D14 PR1551src/react/contracts/mobileWorkoutEditor.ts · src/react/contracts/mobileWorkoutFlow.ts
계획(계획 세션 편집·계획→완료 전이) / APP(A02 구현, A01 최종 wiring)66A02 PR1354, A13 PR1375, U02 PR1523, U03 PR1520src/react/controllers/planAdoptionController.ts · src/react/controllers/planAdoptionStore.ts
홈 대시보드·출석·연간 활동 / APP39A10 PR1501src/react/contracts/attendancePolicy.ts · src/react/contracts/gamificationPolicy.ts
달력·하루 상세·기록표 / APP78A10 PR1501, D06 PR1518, U04 PR1553src/react/controllers/calendarReadModelController.ts · src/react/controllers/calendarReadModelStore.ts
PR·1RM·수동 기록 지표·근력 기준 / APP142A10 PR1501, A14 PR1503, D07 PR1522src/react/controllers/prController.ts · src/react/controllers/prDashboardLoadPolicy.ts
볼륨·리포트 / APP44A10 PR1501, D06 PR1518src/react/controllers/useReportDesignData.ts · src/react/features/volume/DesktopVolumeBinding.tsx
종목 카탈로그·검색·커스텀 종목·별칭 / APP(A03 구현, A01 최종 wiring)116A03 PR1351, A14 PR1503src/react/contracts/exerciseIdentity.ts · src/react/controllers/customExerciseController.ts
프로필·신체 데이터 / APP(A03 구현, A01 최종 wiring)40A03 PR1351, A11 PR1516src/react/contracts/profile/profileBodyValidation.ts · src/react/contracts/profile/trainingStyles.ts
소셜(피드·팔로우·친구 범위·댓글·좋아요·신고·차단) / APP(A04 구현, A01 최종 wiring)98A04 PR1448, A11 PR1516src/react/features/social/MobileFeedBinding.tsx · src/react/features/social/MobileFriendScopeBinding.tsx
그룹·그룹 보드·라운지 / APP(A04 구현, A01 최종 wiring)85A04 PR1448, A11 PR1516src/react/features/group/MobileGroupBinding.tsx · src/react/features/group/MobileNotificationShellBinding.tsx
온보딩·동의 / APP26A03 PR1351, A11 PR1516, U02 PR1523, U03 PR1520src/react/features/onboarding/onboardingBinding.ts · src/react/features/onboarding/onboardingBodyValidation.ts
인증·계정 연결·계정 삭제·약관 / APP85B01 PR1346, A07 PR1365src/react/LegalDocumentOverlay.tsx · src/react/controllers/authBootstrapPolicy.ts
인입(Wodup·Motra·InBody) / APP(A05 구현, A01 최종 wiring)112I01 PR1498, D09 PR1445, A05 PR1443src/react/contracts/ports/importDto.ts · src/react/features/import/importContract.ts
관리자(카탈로그·매핑·인입 대리·운영·신고) / APP(A05 구현, A01 최종 wiring)41B01 PR1346, A05 PR1443src/react/ImpersonationOverlay.tsx · src/react/contracts/ports/adminDto.ts
통계 계산·refresh 잡·정책 / APP(A06 구현, A01 최종 wiring)232D01 PR1319, D04 PR1454, D05 PR1506, D06 PR1518, D07 PR1522, D08 PR1510, D10 PR1521, D11 PR1547src/react/controllers/statsRecoveryController.ts · src/react/controllers/statsRecoveryCoordinator.ts
기기 대기열·초안·사본·복원 / DURABLE(queue 담당)182S01 PR1320, S02 PR1349, S04 PR1369, S05 PR1374, S06 PR1385, S07 PR1377, S08 PR1350, S09 PR1502, S10 PR1442, S11 PR1499src/react/contracts/recovery/descriptor.ts · src/react/contracts/recovery/restoreCommand.ts
앱 셸(부팅·route/overlay·owner·연결·스냅샷·오류·토스트·공용 RPC 전송) / APP / PLATFORM277A01 PR1316, A06 PR1453, A07 PR1365, A08 PR1372, A15 PR1550, A16 PR1561src/react/app.tsx · src/react/app/authSessionRuntime.ts
공통 UI 기반(token·primitive·공용 스타일·아이콘·자원·디자인 전달 계약) / UI174U01 PR1317, U04 PR1553, U05 PR1565, U06 예정, U07 PR1549src/react/barbelicCopy.ts · src/react/contracts/designContract.ts
네이티브(iOS·Android·Capacitor·bridge) / PLATFORM65N01 PR1441, B02 PR1356src/react/contracts/nativeBridge.ts · src/react/vite/nativeSplash.ts
서비스 워커·오프라인·구 청크 복구 / PLATFORM7N01 PR1441src/react/vite/offlineServiceWorker.ts · src/react/vite/staleChunkRecovery.ts
환경·빌드·의존성·배포·CI·게이트 / B02 계약·담당자 검증 → Actions 자동 통합 슬롯(운영 정본 §3·§4-1)109B02 PR1356, G04 PR1315src/react/services/appResourceContract.ts
DB 플랫폼(schema·migration·랜딩·권한·원본 보호) / HQ(랜딩)380D03 PR1312, D12 PR1358, D13 PR1318src/react/services/deploymentManifest.ts · src/react/types/supabase.ts
검증 기반(테스트 감사·harness·error-case 지원) / HQ(감사자)99G02 PR1310, R02 예정, R03 예정, R04 예정, R05 예정, R06 예정
문서 사이트·프로세스·총괄·이 장부 / HQ4G01 PR1296, G05 PR1307, R01 PR1569

현재 진입점은 실제 파일과 schema.sql에서 대조했다.

  • html: index.html
  • boot: src/react/vite/main.tsx
  • serviceWorker: public/sw.js
  • api: api/account/delete.js, api/admin/deployment-manifest.ts, api/admin/impersonate.js, api/admin/users.js, api/auth/test-admin/session.js
  • edgeFunctions: stats-process-refresh-jobs, wodup-process-import-jobs, wodup-start-import
  • workflows: daily-data-backup.yml, deploy-steps.yml, policy-contract.yml, prod-smoke.yml, production-deploy.yml, release-merge-request.yml, social-login-daily-check.yml, staging-deploy.yml
  • cronJobs: barbelic-client-error-purge, barbelic-exercise-catalog-changes-prune, barbelic-exercise-usage-stats-refresh, barbelic-stats-backfill-scan, barbelic-stats-cron-history-purge, barbelic-stats-projection-compute, barbelic-stats-projection-publish, barbelic-wodup-failed-staging-purge, barbelic-wodup-import-scheduler, lift-guild-pr-overview-snapshot-rollover, lift-guild-stats-refresh

추가한 barbelic-stats-cron-history-purge는 이미 적용된 예약 작업의 등록 누락 보완이다. 실행 주기·함수·DB 권한은 변경하지 않았다. durable types/binding·본인 export·복구 UI/CSS와 I01/A16 타입의 소유/검증 행도 실제 이식 PR에 연결했다.

3. 과거 장부 스냅샷 (2026-09-09 생성 절)

<!-- coverage-ledger:generated:begin --> 생성: node scripts/architecture/check-coverage-inventory.mjs --render · 규칙 파일 scripts/architecture/coverage-inventory.json (갱신 2026-09-09) · 추적 파일 3059개 = 분류 2670 + 근거 있는 제외 360 + 미분류 29

영역 요약

영역종류필수소유 역할계획 ID파일 수판정 분포
운동 기록(진행 중·완료·수정·삭제)featureAPPA02, A09, A12, S03, U02, U03384개선 진행 11 · 유지 근거 3
계획(계획 세션 편집·계획→완료 전이)featureAPPA02, A13, U02, U0372개선 진행 10 · 유지 근거 1
홈 대시보드·출석·연간 활동featureAPPA1032개선 진행 7 · 유지 근거 2
달력·하루 상세·기록표featureAPPA10, D06, U0466개선 진행 9 · 유지 근거 2
PR·1RM·수동 기록 지표·근력 기준featureAPPA10, A14, D07123개선 진행 7 · 유지 근거 3
볼륨·리포트featureAPPA10, D0635개선 진행 6 · 유지 근거 2
종목 카탈로그·검색·커스텀 종목·별칭featureAPPA03, A14126개선 진행 10 · 유지 근거 3
프로필·신체 데이터featureAPPA03, A1127개선 진행 9 · 유지 근거 2
소셜(피드·팔로우·친구 범위·댓글·좋아요·신고·차단)featureAPPA04, A1186개선 진행 8 · 유지 근거 2
그룹·그룹 보드·라운지featureAPPA04, A1185개선 진행 8 · 유지 근거 2
온보딩·동의featureAPPA03, A11, U02, U0329개선 진행 6 · 유지 근거 2
인증·계정 연결·계정 삭제·약관featurePLATFORMB01, A07114개선 진행 10 · 유지 근거 3
인입(Wodup·Motra·InBody)featurePLATFORMI01, D09, A0595개선 진행 9 · 유지 근거 4
관리자(카탈로그·매핑·인입 대리·운영·신고)featurePLATFORMB01, A0570개선 진행 13 · 유지 근거 2
통계 계산·refresh 잡·정책featureDATAD01, D04, D05, D06, D07, D08, D10, D11173개선 진행 6 · 유지 근거 4
기기 대기열·초안·사본·복원featureDURABLES01, S02, S04, S05, S06, S07, S08, S09, S10, S11139개선 진행 5 · 유지 근거 2
앱 셸(부팅·route/overlay·owner·연결·스냅샷·오류·토스트·공용 RPC 전송)sharedAPPA01, A06, A07, A08, A15, A16234개선 진행 12 · 유지 근거 2
공통 UI 기반(token·primitive·공용 스타일·아이콘·자원·디자인 전달 계약)sharedUIU01, U04, U05, U06, U07146개선 진행 4 · 유지 근거 4
네이티브(iOS·Android·Capacitor·bridge)sharedPLATFORMN01, B0271개선 진행 4 · 유지 근거 2
서비스 워커·오프라인·구 청크 복구sharedPLATFORMN016개선 진행 1 · 유지 근거 2
환경·빌드·의존성·배포·CI·게이트sharedPLATFORMB02, G0498개선 진행 1 · 유지 근거 3
DB 플랫폼(schema·migration·랜딩·권한·원본 보호)sharedDATAD03, D12, D13344유지 근거 4 · 개선 진행 3
검증 기반(테스트 감사·harness·error-case 지원)sharedHQG02, R02, R03, R04, R05, R0682유지 근거 3 · 개선 진행 1
문서 사이트·프로세스·총괄·이 장부sharedHQG01, G05, R0133유지 근거 4

영역별 장부

<a id="workout"></a>

운동 기록(진행 중·완료·수정·삭제) (workout)

라이브 운동 → 완료 저장 → 상세·수정·삭제까지. 쓰기 계약은 docs/contracts/completed-workout-write-pipeline.md, 서버 한 문 save_session_v5/delete_session_v5.

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
라우트·탭·겹침 층0A15APP(A15 최종, 그 전 A01/A07)모바일 겹침 층 workout·session, 데스크톱 탭 search(세션 검색) — mobileApp.tsx·desktopApp.tsxdocs/contracts/workout-screen-props.md · session-screen-props.mdtests/react/navigationStore.test.mjs · workoutFlowDraftSafety개선 진행
화면(표현)25U02, U03, A12UI(표현) / APP(props·callback 배선)ui/mobile/screens/Workout*·SessionScreen, ui/desktop/screens/DesktopSearchScreen·DesktopSetProjectionParts, 공용 의미론 ui/shared/setSemantics·compositeSemantics·workoutCalculationsdocs/contracts/workout-screen-props.md · session-screen-props.mdtests/react/workoutFlow*·workoutRecord*·compositeSemantics·presentationAtomicMeasurements개선 진행
기능 바인딩(features)29A12, A15APPfeatures/active-workout/*(진입 정책·명령·WorkoutFlowBinding) · features/completed-workout/*(완료 기록 명령·편집 브리지) · features/workout/editor/*(플랫폼 공통 headless editor, A12) · features/workout/queries/*(완료 상세 화면 사본 선택자 — 친구 세션 읽기 전용 판정, A09 #1342)docs/contracts/completed-workout-write-pipeline.md · docs/contracts/workout-editor.mdtests/react/activeWorkoutCommands·activeWorkoutEntryPolicy·completedWorkoutCommands·completedWorkoutCutover·workoutEditor개선 진행
컨트롤러·스토어4A02, A12, S03APPworkoutWriteController·sessionController·sessionDetailController/Storedocs/contracts/completed-workout-write-pipeline.md · completed-session-write-source.mdtests/react/workoutWriteCommands·sessionDetailStore·completedSessionWriteSource개선 진행
서비스·도메인·매퍼19A02, S03APPdomains/workoutDomain·completedWorkoutWriteContract·sessionWriteContractV5·directWorkoutWrite·sessionModel·compositeExerciseModel·mobileWorkoutViewMappers·setPurposePolicy·kgDisplaydocs/data/session-data-model.md · docs/data/limits-registry.md · rpe-performed-intensity.mdtests/react/sessionWriteContractV5·directWorkoutWrite·completedWorkoutWritePipelineContract·limitsRegistry개선 진행
저장소·RPC 어댑터1A01, A02APP(A02 구현, A01 최종 wiring)src/react/services/domains/repositories/workoutRepository.ts(완료 기록 create/update/delete·상세 조회·직접 입력 4종) + domains/codecs/{completedWorkoutWriteCodec,workoutReceiptCodec,sessionDetailCodec,manualRecordWriteCodec}.ts → domains/repositoryPorts.ts → workoutDomaindocs/architecture/rpc-transport-domain-extraction.md §3·§4tests/react/workoutRepositoryDestination.test.mjs(가짜 transport 독립 실행 10건) · sessionDetailCodec.test.mjs(상세→편집→v5→영수증 왕복 4건) · contracts/fixtures/{sessionDetail,workoutPorts}.fixture.ts · domainRepositoryDestinations · domainPortWiring개선 진행A02(이슈 #1329): 쓰기·영수증·상세 codec 실제 이전, 공개 이름은 재수출. 남은 것 = 재수출 제거(A01/R01)·codec 기존 any 제거(A16)·통계 재계산 관측 이식(A06)
타입·DTO·계약 코드4G03, A02HQ(G03 타입 경계)types/workout·writeContracts·recording·recordingRequirementdocs/contracts/v0-18-0-adr.md §3-2tests/react/recordingRequirement·controllerBoundaries개선 진행
RPC·테이블(서버 객체)0A02, D02, S06DATA(객체) / HQ(랜딩)save_session_v5·delete_session_v5·retry_save_session_v5·get_session_detail·get_session_search · 테이블 session·session_exercise·session_exercise_part·exercise_set·exercise_set_part·workout_mutation_receipts·daily_conditionsdocs/data/rpc-catalog.md §2 · docs/contracts/user-fact-immutability.mdsupabase/tests/database/session_write_contract_v5·workout_receipt_children_v1·session_hierarchy_·user_fact_개선 진행
SQL 원천·스키마55D02, S10DATA(객체) / HQ(번호·schema.sql·랜딩)supabase/definitions/workout/** — 함수 46·표 7·뷰 1 (schema.sql 에서 추출한 도메인 원천, 이슈 #1283)docs/data/sql-definitions.mdtests/react/sqlDefinitionsContract · npm run sql:check개선 진행
스타일2U01, U07UIui/mobile/styles/screens/workout.css·session.csssrc/react/ui/DELIVERY-CONTRACT.mdtests/react/mobileCssBoundaries·deadCssGate개선 진행
스크립트·도구1G04HQscripts/audit-limit-headroom.mjs(상한선 여유 감사)docs/data/limits-registry.mdtests/react/limitsRegistry유지 근거상한선 감사 도구는 계약을 읽기만 한다 — 바꿀 계획 없음
정책 파일(버전 고정)11A12, A13APPfeatures/editing/*(운동·계획 편집기 공유 policy — 숫자 입력 셀·무게 단위·분:초·세트 타입 순서·필수 입력 판정; A13 이 만들고 A12 와 공동 소유)docs/contracts/plan-editor-model.md §2tests/react/planEditorModel개선 진행
테스트·검증 사례223G02, R01HQ(감사자)tests/react 운동 쓰기·라이브·복합·수정 검사, pgTAP 세션 계약, e2e crudRoundtrip·emptyAccountJourney·cardio, error-cases 22건tests/audit/manifest.jsonnpm run check:test-manifest · check:error-cases유지 근거행동 검사로 유지; 소스 모양 의존 검사는 G02/R01 이 정리
문서·계약문10G03HQsession-hierarchy.md · session-data-model.md · limits-registry.md · rpe-performed-intensity.md · completed-* 계약 · workout/session 화면 propsdocs 빌드유지 근거현행 계약문; G03 이 좁은 port 계약을 추가할 때 그 자리에서 개정

<a id="plan"></a>

계획(계획 세션 편집·계획→완료 전이) (plan)

계획은 session 테이블의 status = planned 행이다. 같은 save_session_v5 로 저장한다.

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
라우트·탭·겹침 층0A15APP데스크톱 계획 편집기(DesktopPlanEditor)·모바일 하루 상세의 계획 카드(달력 영역과 공유)docs/contracts/day-summary-props.mdtests/react/planRoundTripHarness개선 진행
화면(표현)4U03, A13UI / APPDesktopPlanEditor*(카드·픽커·모델)docs/contracts/desktop-screens-props.mdtests/react/desktopPlanEditorMinSecDuration·compositePlanWorkoutEntry개선 진행
기능 바인딩(features)17A13APPfeatures/plan/editor/*(계획 편집 모델 — 상태·명령·validation·view model·저장 intent, A13) · features/plan/commands/*(S03 준비) · features/workout-plan/*(계획 명령·편집 브리지) · features/plan/queries/*(계획 카드+캐시된 상세 합치기 선택자, A09 #1342)docs/contracts/plan-editor-model.md · docs/contracts/save-preparation.md §5 · docs/data/rpc-catalog.md §2 (save_session_v5 planned)tests/react/planEditorModel · planPrepare · workoutPlanCommands개선 진행
컨트롤러·스토어2A13APPplanAdoptionController/Store(계획 반영은 폐기됐고 친구 계획 열람 데이터층만 남음)docs/data/rpc-catalog.md (adopt_planned_session_v1 폐기)tests/react/planAdoptionStore개선 진행R01 에서 폐기 잔재 제거 여부 판정
서비스·도메인·매퍼3A02APPplanAdoptionProjectiontests/react/planAdoptionProjection개선 진행
저장소·RPC 어댑터1A01, A02APP(A02 구현, A01 최종 wiring)src/react/services/domains/repositories/planRepository.ts(계획 저장·삭제·상세 조회) + domains/codecs/{planWriteCodec,planDetailCodec}.ts → domains/repositoryPorts.ts → workoutDomaindocs/architecture/rpc-transport-domain-extraction.md §3·§4tests/react/planRepositoryDestination.test.mjs(가짜 transport 독립 실행 8건) · planRoundTripHarness · domainRepositoryDestinations · domainPortWiring개선 진행A02(이슈 #1329): 계획 쓰기·상세 codec 실제 이전, 새 계획 서버 id 발급·1회 재시도(주입, S05 인계) 현행 유지. 남은 것 = 재수출 제거(A01/R01)·codec 기존 any 제거(A16)
RPC·테이블(서버 객체)0A02, D02DATA / HQsave_session_v5(status planned)·delete_session_v5·get_planned_session_detail · 테이블 session(planned)·뷰 planned_session_v1docs/data/rpc-catalog.md §1·§2supabase/tests/database/planned_sets_*·session_hierarchy_guards_and_plans_v1개선 진행
SQL 원천·스키마14D02DATA(객체) / HQ(번호·schema.sql·랜딩)supabase/definitions/plan/** — 함수 13·표 0·뷰 1 (schema.sql 에서 추출한 도메인 원천, 이슈 #1283)docs/data/sql-definitions.mdtests/react/sqlDefinitionsContract · npm run sql:check개선 진행
스타일1U01, U07UIui/desktop/styles/screens/plan-editor.csssrc/react/ui/DELIVERY-CONTRACT.mdnpm run check:dead-css개선 진행
테스트·검증 사례29G02HQ(감사자)tests/react plan*·planned* , pgTAP planned_sets_*, error-cases 계획 전이 3건tests/audit/manifest.jsonnpm run check:test-manifest유지 근거행동 검사로 유지
문서·계약문1A13APPdocs/contracts/plan-editor-model.md(계획 편집 모델·adapter·플랫폼 동치 fixture·옮긴/남긴 함수·인계, 이슈 #1340)docs 빌드 · tests/react/planEditorModel·planEditorPlatformParity·desktopPlanEditorAdapter개선 진행A13 이 계획 편집 규칙을 화면 밖 한 벌로 옮긴 계약. U02/U03 화면 이식·A09 dispatcher 합류 때 §9·§12 를 갱신한다

<a id="home"></a>

홈 대시보드·출석·연간 활동 (home)

get_home_dashboard·get_home_year_activity 를 읽는 홈 탭. 하루 상세는 달력 영역과 공유한다.

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
라우트·탭·겹침 층0A10, A15APP모바일 탭 home·데스크톱 탭 homedocs/data/app-screen-rpc-contract.mdtests/react/homeBootLoadingOrder·initialLoadPath개선 진행
화면(표현)2U02, U03UIHomeScreen·DesktopHomeScreensrc/react/ui/DELIVERY-CONTRACT.mdtests/react/mobileGamificationDesignWiring개선 진행
컨트롤러·스토어1A10APPhomeDayDetailCoordinatortests/react/homeDayDetailCoordinator·homeFragmentCoordination개선 진행
서비스·도메인·매퍼2A10, A08APPmobileHomeViewMappers·homeYearActivityCachedocs/data/app-screen-rpc-contract.mdtests/react/tabDataWarming·prHomeRankHydration개선 진행
RPC·테이블(서버 객체)0A06, D06DATA / HQget_home_dashboard·get_home_year_activity · 테이블 user_calendar_day_summaries·user_training_period_statsdocs/data/rpc-catalog.md §1test/appScreenRpcContract · pgTAP home_plan_card_source_ref개선 진행
SQL 원천·스키마9D06DATA(객체) / HQ(번호·schema.sql·랜딩)supabase/definitions/home/** — 함수 9·표 0·뷰 0 (schema.sql 에서 추출한 도메인 원천, 이슈 #1283)docs/data/sql-definitions.mdtests/react/sqlDefinitionsContract · npm run sql:check개선 진행
스타일1U01, U07UIui/mobile/styles/home.cssnpm run check:dead-css개선 진행
정책 파일(버전 고정)2A10제품 정책(오너) — 코드 소유 APPcontracts/attendancePolicy·gamificationPolicydocs/product/gamification-policy.md · ADR §2 보존 정책tests/react/attendancePolicy·gamificationPolicy · pgTAP attendance_policy_v1유지 근거제품 정책은 이번 릴리스에서 바꾸지 않는다(ADR §2)
테스트·검증 사례15G02HQ(감사자)tests/react home*·attendance·gamification·tabDataWarming, pgTAP 2, error-case CASE-004tests/audit/manifest.jsonnpm run check:test-manifest유지 근거행동 검사로 유지

<a id="calendar"></a>

달력·하루 상세·기록표 (calendar)

월·일·범위 요약 RPC 와 데스크톱 기록표(log table)·즐겨찾기 그룹. 읽기 모델 구조는 docs/architecture/calendar-read-model-architecture.md.

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
라우트·탭·겹침 층0A10, A15APP모바일 탭 calendar + 층 daySummary, 데스크톱 탭 session·calendar·logtable·favgroupsdocs/contracts/day-summary-props.md · logtable-props.mdtests/react/navigationStore개선 진행
화면(표현)11U02, U03, U04UIDaySummaryScreen·CalendarCore·DaySheet·DayDetailBody·GrassCal, DesktopSession*·DesktopLogTableScreen·DesktopFavGroupsScreen·rangeViewdocs/contracts/day-summary-props.md · logtable-props.mdtests/react/dayDetailPendingSkeleton·daySummarySetPurposeBoundary개선 진행
기능 바인딩(features)1A10APPfeatures/calendar/useCalendarJournalSelectiontests/react/calendarViewSelector개선 진행
컨트롤러·스토어4A10, A08APPcalendarReadModelController/Store·logTableController/Storedocs/architecture/calendar-read-model-architecture.mdtests/react/calendarReadModelStore·calendarPendingMutationOverlay·logTableStore·logTableMonthCache개선 진행
서비스·도메인·매퍼4A10APPcalendarReadModelMapper·calendarViewSelector·mobileDayViewMappers·desktopFavoriteGroupsdocs/architecture/calendar-read-model-architecture.mdtests/react/calendarReadModelMapper·calendarExactSummaryProjection·desktopFavoriteGroups개선 진행
타입·DTO·계약 코드1G03HQtypes/calendarReadModelADR §3-5tests/react/calendarReadModelMapper개선 진행
RPC·테이블(서버 객체)0A06, D06DATA / HQget_calendar_month_summary·get_calendar_day_summary·get_calendar_range_summary·get_log_table_month·get_log_table_cell_detail·get_user_exercise_favorites·replace_user_exercise_favorites·set_user_exercise_favorite · 테이블 user_calendar_day_summaries·user_calendar_summary_dirty_dates·user_exercise_favorites·user_exercise_favorite_statesdocs/data/rpc-catalog.md §1 · app-screen-rpc-contract.mdpgTAP calendar_top_sets_effective_load · test/appScreenRpcContract개선 진행
SQL 원천·스키마25D06DATA(객체) / HQ(번호·schema.sql·랜딩)supabase/definitions/calendar/** — 함수 21·표 4·뷰 0 (schema.sql 에서 추출한 도메인 원천, 이슈 #1283)docs/data/sql-definitions.mdtests/react/sqlDefinitionsContract · npm run sql:check개선 진행
스타일2U01, U07UIui/mobile/styles/screens/day-summary.css·ui/desktop/styles/screens/session.cssnpm run check:dead-css개선 진행
테스트·검증 사례15G02HQ(감사자)tests/react calendar*·logTable*·dayDetail*, pgTAP calendar_top_sets_effective_loadtests/audit/manifest.jsonnpm run check:test-manifest유지 근거행동 검사로 유지
문서·계약문3A10APPcalendar-read-model-architecture.md · day-summary-props.md · logtable-props.mddocs 빌드유지 근거현행 계약문

<a id="pr"></a>

PR·1RM·수동 기록 지표·근력 기준 (pr)

PR 개요·종목 상세·기록 목록·수동 PR/기록 지표·근력 등급(strength standards).

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
라우트·탭·겹침 층0A10, A15APP모바일 탭 pr + 층 prDetail, 데스크톱 탭 prdocs/contracts/records-props.mdtests/react/prSelectedExerciseSplit개선 진행
화면(표현)12U02, U03, U04UIPrTools·RecordsDetail·PrcTierBadge, DesktopPr*·prDetail·DkGrass·clientStrengthFallbackdocs/contracts/records-props.md · record-metric.mdtests/react/recordsDetail*·desktopPrDetailEstimatedChart·mobilePrcTierBadgeRelocation개선 진행
컨트롤러·스토어3A10, A14APPprController·prDashboardLoadPolicy·prExerciseDeferredArchivetests/react/prExerciseFragments·catalogAndPrHotPath개선 진행
서비스·도메인·매퍼8A10, A14, A06APPprExerciseRpcAdapters·prExerciseCursorContract·prBenchmarkSets·prFavoritesCache/State·strengthStandards·mobileRecordsViewMappers·recordMetricdocs/contracts/record-metric.md · docs/data/measured-pr-state-events.mdtests/react/recordMetric*·strengthStandards·measuredPrFrontendContract · test/pr*개선 진행
RPC·테이블(서버 객체)0A06, D07DATA / HQget_pr_overview·get_exercise_pr_detail(_year)·get_exercise_pr_records·get_exercise_pr_history·save_manual_pr·delete_manual_pr·save/delete_manual_record_metric_v1·get_user_manual_records_v1 · 테이블 user_exercise_pr_events/states·user_exercise_records·user_manual_pr_records·user_manual_record_metrics·user_pr_*·exercise_strength_standards·strength_profession_standardsdocs/data/rpc-catalog.md §1·§2 · measured-pr-state-events.mdpgTAP record_metric_*·manual_record_metrics_v1·strength_standard_cutlines_v1 · test/prRecordsContractV5SqlContract개선 진행
SQL 원천·스키마50D07DATA(객체) / HQ(번호·schema.sql·랜딩)supabase/definitions/pr/** — 함수 39·표 11·뷰 0 (schema.sql 에서 추출한 도메인 원천, 이슈 #1283)docs/data/sql-definitions.mdtests/react/sqlDefinitionsContract · npm run sql:check개선 진행
스타일2U01, U07UIui/mobile/styles/screens/records.css·ui/desktop/styles/screens/pr.cssnpm run check:dead-css개선 진행
스크립트·도구8D07DATAscripts/strength-standards/*·generate-strength-*(근력 기준 참조 데이터 생성기)supabase/contracts/reference-data-tables.jsontests/react/strengthLevelFullCatalog유지 근거참조 데이터 생성기 — 바꿀 계획 없음; 재생성 시 D07 이 결과를 검토
테스트·검증 사례37G02HQ(감사자)tests/react pr*·record*·strength*, test/pr*·measuredPr*, pgTAP 3, error-cases CASE-005·006tests/audit/manifest.jsonnpm run check:test-manifest유지 근거행동 검사로 유지
문서·계약문3D07DATAmeasured-pr-state-events.md · record-metric.md · records-props.mddocs 빌드유지 근거현행 계약문

<a id="volume"></a>

볼륨·리포트 (volume)

get_volume_overview 기반 리포트(기간 버킷·연간·부위 분포·세트 스코어 밴드).

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
라우트·탭·겹침 층0A10, A15APP모바일 탭 volume/report, 데스크톱 탭 volumedocs/contracts/report-props.mdtests/react/reportScreenImportBoundary개선 진행
화면(표현)4U02, U03UIReportScreen·DesktopVolumeScreen(Parts)·grassModeldocs/contracts/report-props.mdtests/react/mobileReportHeadings·mobileAnnualReportRendering·desktopVolumeExactStats개선 진행
서비스·도메인·매퍼2A10, A06APPmobileReportViewMappers·volumeLeveldocs/contracts/report-props.mdtests/react/setScoreReportBands·reportLoadHistogram개선 진행
RPC·테이블(서버 객체)0A06, D06DATA / HQget_volume_overview(v4·v2 오버로드 병존) · 테이블 user_training_period_stats·user_exercise_period_statsdocs/data/rpc-catalog.md §1pgTAP volume_overview_internalization·volume_level_policy_v1·report_taxonomy_target_muscles개선 진행구버전 v2 오버로드 제거는 R01
SQL 원천·스키마14D06DATA(객체) / HQ(번호·schema.sql·랜딩)supabase/definitions/volume/** — 함수 7·표 2·뷰 0 (schema.sql 에서 추출한 도메인 원천, 이슈 #1283)docs/data/sql-definitions.mdtests/react/sqlDefinitionsContract · npm run sql:check개선 진행
스타일2U01, U07UIui/mobile/styles/screens/report.css·ui/desktop/styles/screens/volume.cssnpm run check:dead-css개선 진행
테스트·검증 사례12G02HQ(감사자)tests/react report*·volume*, pgTAP 3, error-case CASE-008tests/audit/manifest.jsonnpm run check:test-manifest유지 근거행동 검사로 유지
문서·계약문1A10APPreport-props.mddocs 빌드유지 근거현행 계약문

<a id="catalog"></a>

종목 카탈로그·검색·커스텀 종목·별칭 (catalog)

카탈로그 기기 사본(IndexedDB)과 증분 동기화, 검색 규칙(docs/contracts/exercise-search.md), 종목 정체성(exercise-ref.md).

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
라우트·탭·겹침 층0A15APP모바일 SetSearch(종목 선택 시트)·데스크톱 픽커docs/contracts/setsearch-props.mdtests/react/exerciseSearchListWindow개선 진행
화면(표현)1U02UISetSearchdocs/contracts/setsearch-props.md · exercise-search.mdtests/react/exerciseSearchSynonyms·aliasSearchRule1140개선 진행
기능 바인딩(features)1A09, A14APPfeatures/catalog/queries/*(홈 힌트 대비 동기화 필요 판정·순번 선택자, A09 #1342) ← controllers/screenLoadPolicyController.ts(유휴 시 카탈로그 동기화 효과). 카탈로그 자체는 resources/exerciseCatalogResource.ts(owner 범위 store)에 든다docs/architecture/owner-scoped-resource-cache.md §9 · docs/contracts/v0-18-0-domain-contracts.md §16tests/react/a09VerticalIntegration · exerciseCatalogResource · exerciseCatalogStore(정책 앵커)개선 진행
컨트롤러·스토어3A03APPcustomExerciseController/Store·searchControllerdocs/contracts/exercise-search.mdtests/react/customExerciseArchiveUi·ownedCustomExerciseArchive·exerciseSearchRanking개선 진행
서비스·도메인·매퍼8A03, A14APPdomains/catalogDomain·exerciseCatalogStore(IndexedDB 사본)·exerciseIdentity·exerciseRefAdapter·exerciseSearch(Signals)·exerciseSynonymSearch·mobileSetSearchViewMappersdocs/contracts/exercise-ref.md · exercise-search.md · docs/data/brid.mdtests/react/exerciseCatalogStore·exerciseRefInventory·exerciseIdentityHardCutover·runtimeExerciseIdentity개선 진행
저장소·RPC 어댑터2A01, A03APP(A03 구현, A01 최종 wiring)src/react/services/domains/repositories/catalogRepository.ts(서버 호출 23: 조회 2·커스텀 3·관리자 카탈로그 5·표기 5·별칭/세부 6·외부 매핑 2) + domains/catalogCodec.ts(순수 검증·변환·응답 해석) → domains/repositoryPorts.ts → catalogDomaindocs/architecture/rpc-transport-domain-extraction.md §3 · docs/contracts/v0-18-0-domain-contracts.md §16 · contracts/ports/catalogDto.tstests/react/domainRepositoryDestinations.test.mjs(행동 검사 8) · domainPortWiring.test.mjs(factory import 허용 목록·codec 순수성)개선 진행A03 #1330(2026-09-07): 옛 barbelicRepository 의 catalog 본문 0, CatalogQueryPort·CatalogWritePort 결과 타입 고정. 남은 것=검색 신호(A06)·관리자 표기 RPC 2개의 types/supabase 인자 map 등재(G03)
타입·DTO·계약 코드2G03HQtypes/exerciseIdentity·contracts/exerciseIdentitydocs/contracts/exercise-ref.mdtests/react/desktopExerciseIdentity개선 진행
RPC·테이블(서버 객체)0A03, D12DATA / HQget_exercise_catalog·get_exercise_catalog_changes·get_exercise_search_signals_v1·create_custom_exercise·set_own_custom_exercise_active · 테이블 exercises·exercise_synonyms·exercise_archetypes·exercise_catalog_changes·exercise_usage_stats·exercise_business_role_memberships·exercise_external_mappings · cron barbelic-exercise-catalog-changes-prune·barbelic-exercise-usage-stats-refreshdocs/data/rpc-catalog.md §1·§2 · exercise-naming.mdpgTAP exercise_catalog_sync_v1·exercise_search_ranking_v1·exercise_ref_v1·exercise_registration_identity_v2개선 진행
SQL 원천·스키마42D12DATA(객체) / HQ(번호·schema.sql·랜딩)supabase/definitions/catalog/** — 함수 34·표 7·뷰 0 (schema.sql 에서 추출한 도메인 원천, 이슈 #1283)docs/data/sql-definitions.mdtests/react/sqlDefinitionsContract · npm run sql:check개선 진행
스타일1U01, U07UIui/mobile/styles/screens/set-search.cssnpm run check:dead-css개선 진행
정책 파일(버전 고정)10A03제품 정책 — 코드 소유 APPdocs/policies/exercise-model/**(버전 고정)docs/policies/README.mdnpm run check:policies · check:policy-snapshots유지 근거버전 고정 정책 파일; 변경은 정책 절차
테스트·검증 사례50G02HQ(감사자)tests/react exercise*·catalog*, pgTAP exercise_·catalog_, error-cases CASE-001·037·038tests/audit/manifest.jsonnpm run check:test-manifest유지 근거행동 검사로 유지
문서·계약문6A03APPexercise-ref.md · exercise-search.md · setsearch-props.md · brid.md · exercise-identity-hard-cutover.md · exercise-naming.mddocs 빌드유지 근거현행 계약문

<a id="profile"></a>

프로필·신체 데이터 (profile)

프로필 워크스페이스·아이디(@handle)·성별·신체 지표 저장.

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
라우트·탭·겹침 층0A15APP모바일 탭 profile + 층 menu, 데스크톱 탭 profiledocs/contracts/profile-screen-props.mdtests/react/profilePropsStability개선 진행
화면(표현)2U02, U03UIProfileScreen·DesktopProfileScreendocs/contracts/profile-screen-props.mdtests/react/profilePropsStability·profileSex개선 진행
컨트롤러·스토어1A03, A11APPprofileControllertests/react/profileSex개선 진행
서비스·도메인·매퍼0A03, A07APPdomains/authProfileDomain(로그인 세션 확인 뒤 factory 호출)·services/currentInputContract(허용 키·달력 날짜·null/누락/0 공통 검사기, 인입·운동 기록 쓰기와 공유)docs/contracts/v0-18-0-domain-contracts.md §16tests/react/domainRepositoryDestinations · providerNeutralOnboardingContract · leanModelHardCut개선 진행A03 #1330: 검증 로직은 codec·중립 검사기 한 곳, 도메인 서비스는 정책(세션)만
저장소·RPC 어댑터3A01, A03APP(A03 구현, A01 최종 wiring)src/react/services/domains/repositories/profileRepository.ts(현재 프로필·workspace·온보딩 조회/완료·신체 지표·이름·사진·InBody 접점 8) + domains/profileCodec.ts(순수 검증·변환·해석) + domains/profileAvatarSigning.ts(서명 URL 좁은 helper, 소셜·그룹·통계 port 공유) → domains/repositoryPorts.ts → authProfileDomaindocs/architecture/rpc-transport-domain-extraction.md §3 · docs/contracts/v0-18-0-domain-contracts.md §16 · contracts/ports/profileDto.tstests/react/domainRepositoryDestinations.test.mjs(행동 검사 7: 다른 owner 거부·null/누락/0 구분·실제 달력 날짜·업로드 롤백·서명·InBody 해시·조회 실패 전파) · domainPortWiring.test.mjs개선 진행A03 #1330(2026-09-07): 옛 barbelicRepository 의 profile/onboarding 본문 0, ProfilePort 4·OnboardingPort 2 결과 타입 고정. 남은 것=아이디·성별 3개(A04)·camelCase 전환(A09/A12/A13)
타입·DTO·계약 코드0G03, A03HQ(G03 타입 경계) / APP(A03 DTO)contracts/ports/profileDto(ProfileRecord·SignedProfileRecord·ProfileWorkspaceRecord·OnboardingStateDto)·types/writeContracts(SaveProfileBodyMetricInput)docs/contracts/v0-18-0-domain-contracts.md §7·§16·§18tests/react/contracts(ports.fixture 컴파일)·domainRepositoryDestinations개선 진행A03 #1330: 온보딩 상태만 Dto 브랜드, 프로필 행은 서버 컬럼 이름 그대로의 열린 레코드(camelCase 전환은 A09)
RPC·테이블(서버 객체)0A03, B01DATA / HQget_profile_workspace·save_profile_body_metric·set_profile_handle_v1·set_profile_sex_v1·check_profile_handle_v1·update_profile_display_name·ensure_user_profile · 테이블 profiles·body_metricsdocs/data/rpc-catalog.md §2pgTAP profile_handle_v1·profile_sex_v1개선 진행
SQL 원천·스키마12B01DATA(객체) / HQ(번호·schema.sql·랜딩)supabase/definitions/profile/** — 함수 9·표 2·뷰 0 (schema.sql 에서 추출한 도메인 원천, 이슈 #1283)docs/data/sql-definitions.mdtests/react/sqlDefinitionsContract · npm run sql:check개선 진행
스타일1U01, U07UIui/mobile/styles/screens/profile.cssnpm run check:dead-css개선 진행
테스트·검증 사례7G02HQ(감사자)tests/react profile*, pgTAP profile_*tests/audit/manifest.jsonnpm run check:test-manifest유지 근거행동 검사로 유지
문서·계약문1A03APPprofile-screen-props.mddocs 빌드유지 근거현행 계약문

<a id="social"></a>

소셜(피드·팔로우·친구 범위·댓글·좋아요·신고·차단) (social)

프로필 피드·팔로우·친구 데이터 열람(docs/contracts/friend-access.md)·UGC 안전(신고·차단·정지).

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
라우트·탭·겹침 층0A15APP모바일 탭 feed + 층 friendSession·friendScopedocs/contracts/feed-props.md · friend-access.mdtests/react/feedSessionOverlay·friendScope개선 진행
화면(표현)4U02UIFeedScreen·FeedPost·FeedModeration·FriendScopeBardocs/contracts/feed-props.mdtests/react/feedReactions·feedPullRefresh·feedCompositeMains개선 진행
컨트롤러·스토어8A04, A11APPfeedSocialController/Store·followingController/Store·friendScopeController/Store·moderationController/Storedocs/contracts/friend-access.mdtests/react/feedSocialStore·followingStore·friendScopeStore·moderationStore개선 진행
서비스·도메인·매퍼2A04APPdomains/socialDomain·mobileFeedViewMappersdocs/contracts/feed-props.mdtests/react/followingFeed개선 진행
저장소·RPC 어댑터1A01, A04APP(A04 구현, A01 최종 wiring)src/react/services/domains/repositories/socialRepository.ts → domains/repositoryPorts.ts → 해당 domain 서비스docs/architecture/rpc-transport-domain-extraction.mdtests/react/domainRepositoryDestinations.test.mjs · domainPortWiring.test.mjs개선 진행A01 대표 실제 구현 추출·좁은 의존 port 연결. 나머지 구현/codec은 후속 담당 범위
RPC·테이블(서버 객체)0A04, B01DATA / HQget_profile_feed·get_following_*_v1·search_user_profiles_v1·follow/unfollow_user_v1·list_following_v1·block/unblock_user_v1·list_blocked_users_v1·report_content_v1·get_my_moderation_state_v1·set_session_like_v1·add/delete/list_session_comment(s)_v1 · 테이블 user_follows·user_blocks·session_likes·session_comments·content_reports·content_takedowns·user_suspensions·moderation_banned_termsdocs/contracts/friend-access.md · docs/data/rpc-catalog.mdpgTAP feed_·following_·ugc_safety_v1·profile_feed_note_entries개선 진행
SQL 원천·스키마39B01DATA(객체) / HQ(번호·schema.sql·랜딩)supabase/definitions/social/** — 함수 26·표 8·뷰 0 (schema.sql 에서 추출한 도메인 원천, 이슈 #1283)docs/data/sql-definitions.mdtests/react/sqlDefinitionsContract · npm run sql:check개선 진행
스타일1U01, U07UIui/mobile/styles/screens/feed.cssnpm run check:dead-css개선 진행
테스트·검증 사례29G02HQ(감사자)tests/react feed*·following*·friend*·moderation*, pgTAP feed_·following_·ugc_safety, error-case CASE-018tests/audit/manifest.jsonnpm run check:test-manifest유지 근거행동 검사로 유지
문서·계약문2A04APPfriend-access.md · feed-props.mddocs 빌드유지 근거현행 계약문

<a id="group"></a>

그룹·그룹 보드·라운지 (group)

그룹 생성·초대·보드(계획 공유)·공지·채팅·완료 계보.

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
라우트·탭·겹침 층0A15APP모바일 탭 group(보드·라운지·작성기)docs/contracts/group-props.mdtests/react/groupScreens개선 진행
화면(표현)3U02UIGroupScreen·GroupComposer·groupBoardPrefilldocs/contracts/group-props.mdtests/react/groupBoardPercentPrefill·groupBoardDateNav개선 진행
컨트롤러·스토어3A04, A11APPgroupController/Storedocs/contracts/group-props.mdtests/react/groupInteractionsStore·groupBoard*Roundtrip개선 진행
서비스·도메인·매퍼1A04APPdomains/groupDomaintests/react/groupBoardCustomRegister·groupTextSafety개선 진행
저장소·RPC 어댑터1A01, A04APP(A04 구현, A01 최종 wiring)src/react/services/domains/repositories/groupRepository.ts → domains/repositoryPorts.ts → 해당 domain 서비스docs/architecture/rpc-transport-domain-extraction.mdtests/react/domainRepositoryDestinations.test.mjs · domainPortWiring.test.mjs개선 진행A01 대표 실제 구현 추출·좁은 의존 port 연결. 나머지 구현/codec은 후속 담당 범위
RPC·테이블(서버 객체)0A04, B01DATA / HQcreate_group_v1·invite_to_group_v1·respond_group_invite_v1·list_my_groups_v1·get_group_board_v1·get_group_board_day_sessions_v1·get_group_lounge_v1·get_group_member_session_v1·add/delete_group_board_comment_v1·set_group_board_like_v1·add_group_notice_v1·add/delete_group_chat_message_v1·save_session_v5(group_id) · 테이블 groups·group_members·group_invites·group_notices·group_chat_messagesdocs/contracts/group-props.md · rpc-catalog.mdpgTAP groups_v1·groups_v2_interactions·group_ownership_v1·group_ugc_safety_v1·group_board_completion_lineage개선 진행
SQL 원천·스키마36B01DATA(객체) / HQ(번호·schema.sql·랜딩)supabase/definitions/group/** — 함수 26·표 5·뷰 0 (schema.sql 에서 추출한 도메인 원천, 이슈 #1283)docs/data/sql-definitions.mdtests/react/sqlDefinitionsContract · npm run sql:check개선 진행
스타일1U01, U07UIui/mobile/styles/screens/group.cssnpm run check:dead-css개선 진행
테스트·검증 사례39G02HQ(감사자)tests/react group*, pgTAP group*, error-cases 그룹 보드 6건tests/audit/manifest.jsonnpm run check:test-manifest유지 근거행동 검사로 유지
문서·계약문1A04APPgroup-props.mddocs 빌드유지 근거현행 계약문

<a id="onboarding"></a>

온보딩·동의 (onboarding)

get_onboarding_state·complete_onboarding·동의 요건. 중단하면 처음부터(오너 결정 2026-08-20).

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
라우트·탭·겹침 층0A15, A07APP셸 게이트(온보딩 미완료 → 온보딩 화면) — sharedShell.tsx·ShellGatesdocs/contracts/onboarding-props.md · shell-frames.mdtests/react/desktopOnboarding·profileProvisioning개선 진행
화면(표현)2U02, U03UIOnboardingScreen·DesktopOnboardingdocs/contracts/onboarding-props.mdtests/react/desktopOnboarding개선 진행
기능 바인딩(features)3A03, A11APPfeatures/onboarding/*(명령·프로필 계약·신체 검증)docs/data/onboarding-data-model.mdtests/react/onboardingCommands·onboardingBodyValidation개선 진행
RPC·테이블(서버 객체)0A03, B01DATA / HQget_onboarding_state·complete_onboarding·withdraw_user_consent · 테이블 profiles·user_consentsdocs/data/onboarding-data-model.md · rpc-catalog.md §2pgTAP onboarding_profile_contract·barbelic_legal_v4개선 진행
SQL 원천·스키마12B01DATA(객체) / HQ(번호·schema.sql·랜딩)supabase/definitions/onboarding/** — 함수 11·표 1·뷰 0 (schema.sql 에서 추출한 도메인 원천, 이슈 #1283)docs/data/sql-definitions.mdtests/react/sqlDefinitionsContract · npm run sql:check개선 진행
스타일1U01, U07UIui/mobile/styles/screens/onboarding.cssnpm run check:dead-css개선 진행
테스트·검증 사례9G02HQ(감사자)tests/react onboarding*·desktopOnboarding·profileProvisioning, pgTAP onboarding_profile_contract, error-case CASE-009tests/audit/manifest.jsonnpm run check:test-manifest유지 근거행동 검사로 유지
문서·계약문2A03APPonboarding-data-model.md · onboarding-props.mddocs 빌드유지 근거현행 계약문

<a id="auth"></a>

인증·계정 연결·계정 삭제·약관 (auth)

소셜 로그인(Apple·Google·Kakao)·네이티브 인증 교환·계정 삭제(Vercel API)·법적 문서 불변 게이트.

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
라우트·탭·겹침 층0A07, A15APP셸 인증 게이트·OAuth 콜백 경로·층 legaldocs/contracts/shell-frames.md · docs/platform/social-auth.mdtests/react/authDegradedBootstrap·authOAuthCallbackPolicy개선 진행A07 #1335: 부팅 순서(기기 흔적 → 로컬 채택 → 오류 전송 owner 바인딩)는 app/authSessionRuntime.ts
화면(표현)4U02, U03UILegalDocumentOverlay·legalDocuments·AccountDeleteFlow·accountDeletionCopydocs/contracts/shell-frames.mdtests/react/legalDocumentContent·uiCopy개선 진행
컨트롤러·스토어4A07APPapp/authSessionRuntime(부팅·복원·이벤트 구독·재시도, 이슈 #1335)·authBootstrapPolicy·authSessionRevision(owner runtime 위 변환 어댑터)·authResumePolicy·socialIdentityControllerdocs/architecture/owner-auth-connectivity-lifecycle.md · docs/platform/social-auth.mdtests/react/authSessionRuntime·authSessionFailurePolicy·authPkceHardCut·authConnectivityCoordination·authDegradedBootstrap·authResume.test·authResume.browser · tests/auth/*개선 진행A07 #1335: 인증 runtime 을 controller 밖으로(app/authSessionRuntime.ts), 세 사건(만료·로그아웃·삭제) reason, 5xx≠인증 실패 행동 검사
서비스·도메인·매퍼19A07, B01APP / PLATFORMsupabaseAuth·auth/providers/{apple,google,kakao}·socialAuthFlow·socialIdentityLinking·nativeAuthSessionPolicy·authSignOutPolicy·accountDeletionClient·auth/{authErrors,nativeAuthTransactions,accountDeletionResult,impersonationSession}·domains/authProfileDomain·legalDocumentContentdocs/contracts/auth-account-api.md · docs/platform/social-auth.md · social-login-rollout-runbook.mdtests/auth/socialOAuthProviders·socialIdentityLinking·androidNativeAuthContract·iosNativeAuthContract·nativeAuthTransactions·nativeAuthCallbackBridge·authErrors·accountDeletionResult·impersonationSession개선 진행
타입·DTO·계약 코드1G03HQtypes/authADR §3-2tests/react/controllerBoundaries개선 진행
서버 API 핸들러(Vercel)5B01PLATFORMapi/auth/_shared.js(공용 경계: 본문·응답·호출자 검증·시간 제한·로그, 이슈 #1331)·api/account/delete.js(+_apple.js·_kakao.js 공급자 연결 해제)·api/auth/test-admin/session.js(e2e 전용, Production ref 차단)docs/contracts/auth-account-api.md · app-role-privileges.md · error-cases/CASE-017tests/auth/serverApiShared·accountDeleteApi·testAdminSessionApi·accountDeletionProviderDisconnect · tests/react/localAuthAdminE2eSafety개선 진행B01 계약·테스트 완료(#1331); 실 provider 호출은 R02·R05
RPC·테이블(서버 객체)0B01DATA / HQcomplete_native_social_login·complete_native_social_identity_link·is_lift_guild_admin·auth.users 삭제 cascade · 테이블 lift_guild_adminsdocs/contracts/app-role-privileges.md · identity-passing.mdpgTAP auth_user_delete_cascade·account_deletion_residue_scan·app_role_privilege_rules_v1개선 진행
SQL 원천·스키마4B01DATA(객체) / HQ(번호·schema.sql·랜딩)supabase/definitions/auth/** — 함수 2·표 1·뷰 0 (schema.sql 에서 추출한 도메인 원천, 이슈 #1283)docs/data/sql-definitions.mdtests/react/sqlDefinitionsContract · npm run sql:check개선 진행
스타일1U01, U07UIui/mobile/styles/screens/legal-doc.cssnpm run check:dead-css개선 진행
스크립트·도구3B01PLATFORMcheck-legal-document-immutability·check-social-provider-config·generate-apple-client-secretdocs/platform/social-auth.mdnpm run check:legal-documents유지 근거게이트·운영 도구; 바꿀 계획 없음
테스트·검증 사례54G02HQ(감사자)tests/auth 6, tests/react auth*, pgTAP auth_user_delete_cascade·account_deletion_residue_scan, error-cases CASE-003·007·012·013·017tests/audit/manifest.jsonnpm run check:test-manifest유지 근거행동 검사로 유지
문서·계약문7B01PLATFORMcontracts/auth-account-api.md(이슈 #1331 정본) · social-auth.md · social-login-rollout-runbook.mddocs 빌드개선 진행B01 계약 문서 추가(#1331)
정적 자원12B01PLATFORM(법적 문서는 오너 승인)public/legal/*(약관·개인정보 v1~v4, 불변)·public/account/delete.html·icons/barbelic-kakao-icon.pngnpm run check:legal-documents(불변 게이트)scripts/check-legal-document-immutability.mjs유지 근거발행된 법적 문서는 불변; 새 버전만 추가

<a id="import"></a>

인입(Wodup·Motra·InBody) (import)

Wodup JSONL(비동기 잡·Edge 워커)·Motra xlsx·InBody. 정본 docs/data/import-pipeline.md·wodup-import-async-jobs.md.

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
라우트·탭·겹침 층0A11, B01APP / PLATFORM관리자 셸 인입 탭(DesktopAdminImport·DesktopAdminMotraImport, 관리자 영역)과 프로필의 InBody 인입docs/data/import-pipeline.mdtests/react/adminImportOnBehalf개선 진행
기능 바인딩(features)1I01PLATFORMfeatures/wodup/wodupImportRunnerdocs/data/wodup-import-async-jobs.mdtests/react/wodupImportRunner개선 진행
컨트롤러·스토어2I01, A05PLATFORMwodupImportController·motraImportControllerdocs/data/import-pipeline.mdtests/react/wodupImportController·motraImportController·wodupImportPollCadence개선 진행
서비스·도메인·매퍼7I01, A05PLATFORMdomains/importDomain·domains/codecs/wodupImportCodec·domains/codecs/motraImportCodec·wodupJsonlUpload·motraXlsxBlocks·motraNormalizedUpload·inbodyImportdocs/data/import-pipeline.md · docs/policies/wodup-replaytests/react/wodupJsonlUpload·motraXlsxBlocks·inbodyImport·readImportContractHardCut·importRepositoryDestinations개선 진행A05 #1406(2026-09-09): 옛 services/wodupImportBatchAdapter.ts 는 domains/codecs/wodupImportCodec.ts 로 이동(사본 0). 파서(wodupJsonlUpload·motraNormalizedUpload·inbodyImport)는 I01 소유로 그대로
저장소·RPC 어댑터1A01, A05APP(A05 구현, A01 최종 wiring)src/react/services/domains/repositories/importRepository.ts(Wodup 업로드·시작·조회 + Motra 기입 4) + domains/codecs/wodupImportCodec.ts(배치 행·엣지 시작 응답 decoder·잡 단계 변환표)·motraImportCodec.ts → importDomain → lazyFeatureDomain → barbelicApi(ImportPort, 결과 contracts/ports/importDto.ts)docs/architecture/rpc-transport-domain-extraction.mdtests/react/importRepositoryDestinations.test.mjs(행동 검사 14: pending/running/부분 성공/failed/succeeded·불량 응답·전송 오류·다른 owner·재조회 identity·Motra 동기 완료) · domainRepositoryDestinations · domainPortWiring개선 진행A05 #1406(2026-09-09): 옛 barbelicRepository 의 Wodup/Motra 본문 0, A01 의 옛 Repository 타입 참조 0, ImportPort 결과 unknown 5→0(잡 DTO: phase 가 완료를 말한다·Motra 는 동기 완료). 남은 것=파서·identity 재설계(I01), durable 잡 소비자(D09), 진행 상태 resource 구독(A11)
타입·DTO·계약 코드2G03HQtypes/import(서버 행 모양) · contracts/ports/importDto(A05 잡·시작·Motra 결과 DTO)ADR §3-2tests/react/readImportContractHardCut개선 진행A05 #1406(2026-09-09): ImportPort 결과 타입 고정(importDto). 행 모양 types/import 는 G03 유지
RPC·테이블(서버 객체)0D09, I01DATA / HQenqueue_wodup_import_batch·stage_wodup_import_batch·import_wodup_batch_to_canonical·mark_wodup_import_batch_{uploaded,failed}_v1·import_motra_workouts_v1·import_inbody_body_metrics · 테이블 wodup_import_batches/rows/sessions/sets/exercises·wodup_exercises·wodup_session_timing_materializations·inbody_import_batches·external_exercise_interpretations(_components) · cron barbelic-wodup-failed-staging-purgedocs/data/wodup-import-async-jobs.md · import-pipeline.mdpgTAP wodup_import_*·wodup_barbelic_coexistence·motra_import_v1·import_readonly_brid_issuance개선 진행
Edge 함수·cron 잡4D09, I01DATA(잡) / PLATFORM(Edge 배포)Edge wodup-start-import(업로드 확정 → 워커 호출)·wodup-process-import-jobs(_shared/wodup-import-worker·wodup-normalizer)docs/data/wodup-import-async-jobs.mdtests/react/wodupStartImportFunction·wodupNormalizer·wodupComplexImportWorker·wodupImportWorkerProgress개선 진행
SQL 원천·스키마33D09, I01DATA(객체) / HQ(번호·schema.sql·랜딩)supabase/definitions/import/** — 함수 23·표 10·뷰 0 (schema.sql 에서 추출한 도메인 원천, 이슈 #1283)docs/data/sql-definitions.mdtests/react/sqlDefinitionsContract · npm run sql:check개선 진행
스크립트·도구4I01PLATFORMscripts/motra-import/*(Motra xlsx 변환 도구·매핑)scripts/motra-import/README.mdtests/react/motraXlsxBlocks유지 근거운영 도구; I01 이 parser 경계를 바꿀 때 함께 검토
정책 파일(버전 고정)6I01PLATFORMdocs/policies/wodup-replay/**docs/policies/README.mdnpm run check:policies유지 근거버전 고정 정책 파일
테스트·검증 사례36G02HQ(감사자)tests/react wodup*·motra*·inbody, test/wodup*, pgTAP wodup_·motra_tests/audit/manifest.jsonnpm run check:test-manifest유지 근거행동 검사로 유지
문서·계약문2I01PLATFORMimport-pipeline.md · wodup-import-async-jobs.mddocs 빌드유지 근거현행 정본

<a id="admin"></a>

관리자(카탈로그·매핑·인입 대리·운영·신고) (admin)

독립 셸 /admin/(barbelic-docs 가 main 푸시마다 배포). 공개 게이트는 운영 정본 §4-5.

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
진입점(HTML·부팅·SW 등록)5B01, B02PLATFORMadmin/index.htmlvite/admin/main.tsx·AdminStandaloneRoot·adminShellView·adminCatalogStoredocs/process/deployment-pipeline.md 관리자 셸 절 · 운영 정본 §4-5tests/react/adminStandaloneShell·adminRoute개선 진행
라우트·탭·겹침 층1B01PLATFORMdesktopAdminTabs(관리자 탭 9)tests/react/adminRoute개선 진행
화면(표현)14U03UIDesktopAdmin*(12)·AdminSidebar·ImpersonationOverlaydocs/contracts/desktop-screens-props.mdtests/react/adminAllExercisesOrder·adminCustomExercisesPage·adminExerciseSynonymPanel개선 진행
기능 바인딩(features)1A05APPfeatures/admin/DesktopAdminFeaturetests/react/adminUiWriteContract개선 진행
컨트롤러·스토어2A05APPadminController·adminMappingPageControllerdocs/data/admin-health-report.mdtests/react/adminMappingPageController·adminHealthReport개선 진행
서비스·도메인·매퍼8A05, B01APP / PLATFORMdomains/adminComposition(앱 그래프 밖)·adminImpersonationClient/Guard(일반 앱, B01) — 본인 데이터 내보내기는 domains/adminDomain(일반 앱, 내보내기만 남음). 관리자 브라우저 화면·카탈로그 어댑터는 v0.17.7(#1463)부터 Barbelic-docs/admindocs/contracts/identity-passing.md(임퍼서네이션)tests/react/adminImpersonationGuard·adminMappingPageService·adminSynonymRepository·adminAtomicCatalogOperations개선 진행A05 #1406(2026-09-09): 관리자 함수를 일반 파사드에서 제거, 본인 내보내기는 좁은 port(userDataExportRepositoryPort)로. v0.17.7 분리(#1463)와 합쳐 관리자 파사드는 앱에 두지 않음(2026-09-10 main 반영). 임퍼서네이션 client/guard 는 B01 소유 그대로
저장소·RPC 어댑터2A01, A05APP(A05 구현, A01 최종 wiring)src/react/services/domains/repositories/adminRepository.ts(신고 3·유저 검색·운영 점검표+엣지 배포 확인) + domains/codecs/adminModerationCodec.ts, 조립 domains/adminComposition.ts(앱 진입점 그래프 밖; 소비자 e2e CASE-018·Barbelic-docs/admin) — port 계약 contracts/ports/adminPorts.ts·adminDto.tsdocs/architecture/rpc-transport-domain-extraction.mdtests/react/adminRepositoryDestinations.test.mjs(행동 검사 7: 신고 큐 decode·42501 전파·불량 응답 거부·조치/정지 입력·검색 상한·점검표 표본) · adminBundleBoundary.test.mjs(앱 진입점 모듈 그래프에 관리자 모듈 0) · domainPortWiring개선 진행A05 #1406(2026-09-09): 옛 저장소의 관리자 본문 0, 일반 파사드(barbelicApi)의 관리자 함수 0, 앱 빌드 청크에 관리자 RPC 이름 0(빌드 grep + 모듈 그래프 검사). v0.17.7(#1463) 이후 관리자 브라우저 화면·카탈로그 매핑 읽기는 Barbelic-docs/admin 소유(앱에 관리자 진입점·파사드 없음). 남은 것=Barbelic-docs/admin 이 앱의 adminRepository 를 소비하도록 연결
타입·DTO·계약 코드3G03HQtypes/admin(점검표 모양) · contracts/ports/adminDto·adminPorts(A05 관리자 port 3종·본인 내보내기 port)ADR §3-2tests/react/adminUiWriteContract개선 진행A05 #1406(2026-09-09): AdminPort(신고·운영·유저 검색)·UserDataExportPort 신설 — 앱 쪽 구현은 adminRepository(조립 adminComposition), 관리자 화면 파사드는 Barbelic-docs/admin 몫
서버 API 핸들러(Vercel)3B01PLATFORMapi/admin/users.js·api/admin/impersonate.js(+_shared.js 관리자 전용 — 공용 경계는 api/auth/_shared.js)docs/contracts/auth-account-api.md §2-3 · identity-passing.md · app-role-privileges.mdtests/auth/adminApi·impersonationSession · tests/react/adminImpersonationGuard개선 진행B01 계약·테스트 완료(#1331); 다른 쓰기 경계의 열람 세션 판정은 A05
RPC·테이블(서버 객체)0B01, A05DATA / HQ운영 정본 §4-5 의 관리자 함수 15개(admin_*·mark_wodup_import_batch_*_v1get_admin_mapping_page·get_admin_operations_checklist·get_admin_content_reports_v1·admin_search_users_v1 · 테이블 lift_guild_admins운영 정본 §4-5(관리자 게이트) · admin-health-report.mdpgTAP admin_synonym_editor·admin_wodup_import_on_behalf개선 진행
SQL 원천·스키마12B01DATA(객체) / HQ(번호·schema.sql·랜딩)supabase/definitions/admin/** — 함수 12·표 0·뷰 0 (schema.sql 에서 추출한 도메인 원천, 이슈 #1283)docs/data/sql-definitions.mdtests/react/sqlDefinitionsContract · npm run sql:check개선 진행
스타일1U01, U07UIui/desktop/styles/desktop-admin.cssnpm run check:dead-css개선 진행
설정·빌드·CI1B02PLATFORMvite.admin.config.mjs(산출물 dist-admin, docs 사이트가 /admin/ 로 배포)docs/process/deployment-pipeline.mdnpm run build:admin개선 진행
테스트·검증 사례23G02HQ(감사자)tests/react admin* 17·synonymWriteReference, pgTAP admin_*tests/audit/manifest.jsonnpm run check:test-manifest유지 근거행동 검사로 유지
문서·계약문1B01PLATFORMadmin-health-report.mddocs 빌드유지 근거현행 문서

<a id="stats"></a>

통계 계산·refresh 잡·정책 (stats)

세션 rollup → 기간·PR·근력 투영. dirty range 잡·pg_cron·Edge 워커. 정책(e1rm·max-reps·set-purpose)은 버전 고정 파일.

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
컨트롤러·스토어2D11, A10DATA / APPstatsRecoveryController·statsRecoveryCoordinator(통계 반영 대기·복구 UX)docs/data/stats-refresh-jobs.mdtests/react/statsRecoveryCoordinator개선 진행
서비스·도메인·매퍼2A06, D11APP / DATAdomains/statsDomain·statsReconciliationdocs/data/stats-refresh-dirty-events.mdtests/react/statsReconciliation·statsCentralizationPhase*개선 진행
저장소·RPC 어댑터1A01, A06APP(A06 구현, A01 최종 wiring)src/react/services/domains/repositories/statsRepository.ts → domains/repositoryPorts.ts → 해당 domain 서비스docs/architecture/rpc-transport-domain-extraction.mdtests/react/domainRepositoryDestinations.test.mjs · domainPortWiring.test.mjs개선 진행A01 대표 실제 구현 추출·좁은 의존 port 연결. 나머지 구현/codec은 후속 담당 범위
RPC·테이블(서버 객체)0D01, D04, D05, D06, D07, D08, D10, D11DATA(객체) / HQ(랜딩)enqueue/process_user_exercise_stats_refresh_jobs·run_user_exercise_stats_refresh_cron·run_user_exercise_stats_backfill_scan_cron·run_user_pr_overview_snapshot_rollover·refresh_exercise_usage_stats_v1 · 테이블 user_exercise_stats(_refresh_jobs)·user_exercise_session_rollups·user_exercise_strength_*·user_exercise_max_rep_observations·user_exercise_set_score_states·user_stats_refresh_state·stats_refresh_event_types·*_policy_versions·strength_estimation_* · cron lift-guild-stats-refresh·barbelic-stats-backfill-scan·lift-guild-pr-overview-snapshot-rolloverdocs/data/stats-refresh-jobs.md · stats-refresh-dirty-events.md · ADR §3-4pgTAP stats_refresh_·set_score_·e1rm_*·max_rep_estimation_policy_v1·effective_load_stats_v1 · test/userExerciseStatsIntegrity개선 진행
Edge 함수·cron 잡1D08, D11DATAEdge stats-process-refresh-jobs(잡 처리 워커) + pg_cron 3docs/data/stats-refresh-jobs.mdtests/react/statsRefreshJobs·statsRefreshStatementTimeoutContract개선 진행
SQL 원천·스키마76D01, D04, D05, D08, D10, D11DATA(객체) / HQ(번호·schema.sql·랜딩)supabase/definitions/stats/** — 함수 46·표 16·뷰 1 (schema.sql 에서 추출한 도메인 원천, 이슈 #1283)docs/data/sql-definitions.mdtests/react/sqlDefinitionsContract · npm run sql:check개선 진행
스크립트·도구3D07DATAcheck-policies·check-policy-snapshot-immutability·generate-universal-rep-curvedocs/policies/README.mdnpm run check:policies유지 근거정책 게이트·생성기
정책 파일(버전 고정)19D07제품 정책 — 코드 소유 DATAdocs/policies/{e1rm,max-reps,set-purpose}/**(버전 고정)docs/policies/README.md · ADR §2npm run check:policies · check:policy-snapshots · test/e1rmPolicy유지 근거수치 정책은 이번 릴리스에서 바꾸지 않는다(ADR §2)
테스트·검증 사례64G02, D01HQ(감사자) / DATA(동치 검증)tests/react stats*·setScore*, test/e1rm*·maxRep*·strength*, pgTAP stats_refresh_·set_score_·e1rm_·volume_tests/audit/manifest.jsonnpm run check:test-manifest유지 근거D01 이 동치 검증 계약을 추가한다
문서·계약문5D01DATAstats-refresh-jobs.md · stats-refresh-dirty-events.md · docs/policies/README.mddocs 빌드유지 근거현행 정본; D01 이 DAG 계약을 추가

<a id="durable"></a>

기기 대기열·초안·사본·복원 (durable)

IndexedDB 대기열(pending saves)·초안 체크포인트·기기 사본(own data replica)·플러시.

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
컨트롤러·스토어6S04, S05, S08DURABLE(queue 담당)pendingWorkoutSavesController/Store·workoutDraftController/Store·ownDataReplicationControllerdocs/data/workout-draft-protection.md · ADR §3-1tests/react/pendingWorkoutOutboxStates·pendingQueueHeadPoison·workoutDraftStore·ownDataReplicationJob·outboxClaimSuccessor(스토어 포트 배선·의도 행 변환·카드)개선 진행S04(#1334, 2026-09-08): pendingWorkoutSavesStoreprepareSuccessor 포트로 결과 미상 생성 기록의 수정·삭제 의도 행을 준비된 행으로 바꾼 뒤 생성 행을 지운다 — outboxClaimSuccessor 8/8(docs/contracts/outbox-claim-successor.md §5)
서비스·도메인·매퍼35S01, S02, S07, S10, S11DURABLEpendingWorkoutSaves·pendingWorkoutMutationFlush·workoutLocalCacheDb·workoutDraftCache/Checkpoint/StorageMarker·ownDataReplica·ownDataReplicationJob·durableMutationIdentity·legacyClientKeyspaceADR §3-1(outbox 원자 전이·claim·fence) · §3-3(충돌 사본)tests/react/pendingWorkoutSaves·pendingWorkoutMutationFlush·workoutLocalCacheMigration·workoutDraftCheckpoint·ownDataReplica·outboxAtomicReplace·outboxReplacePlan·outboxAtomicity.browser(실제 Chromium)·idbAdapter·outboxRowIndex·mirrorPlan·outboxTimeout.browser·outboxMirrorRecovery.browser·outboxCost.browser·idbVersionPin.browser(S07)·outboxClaimPlan·outboxClaimSuccessor·outboxClaim.browser(실제 Chromium 두 탭)·e2e CASE-039/040(실제 v0.17.1 번들 탭 공존)개선 진행S02(#1325, 2026-09-07): 교체·합치기가 IDB 트랜잭션 하나 — 메모리 실패 주입 6/6·실제 Chromium 8 시나리오 8/8(docs/contracts/outbox-atomic-replace.md §5) · S04(#1334, 2026-09-08): 행 단위 claim·fence·ACK 비교 후 교체·후속 행·의도 행 — 순수 계획기 5/5·메모리 두 탭 8/8·실제 Chromium 두 탭 4/4·CASE-040 3/3(옛 v0.17.1 탭 전송 중 + 새 탭 후속)·CASE-039 v0.17.1 재실측 통과(docs/contracts/outbox-claim-successor.md §7) · S07(#1337, 2026-09-08): owner/target 메모리 카탈로그·키 스캔 재검사·미러 v2(행별 키·tombstone·세대)·IDB 공통 adapter — 1000행 드레인 152.8초 → 6.1초, 실제 Chromium 복구 매트릭스 7/7·timeout 3/3(docs/contracts/outbox-storage-index-mirror.md §5·§6)
RPC·테이블(서버 객체)0S08, S06DATA / HQsave/get/clear_workout_draft_checkpoint_v1(v2 호환 래퍼)·*_workout_draft_checkpoint_v2·retire_workout_draft_checkpoint_operation_v1·clear_empty_workout_draft·clear_saved_workout_draft · 테이블 workout_draft_checkpoints·workout_draft_checkpoint_fences(순번·은퇴 펜스, 이슈 #1326)·workout_mutation_receipts(영수증)docs/data/workout-draft-protection.mdpgTAP workout_draft_checkpoints_v1·workout_draft_checkpoint_commit_guard_v1·workout_draft_checkpoint_fence_v2개선 진행
SQL 원천·스키마9S08, S06DATA(객체) / HQ(번호·schema.sql·랜딩)supabase/definitions/durable/** — 함수 7·표 2·뷰 0 (schema.sql 에서 추출한 도메인 원천, 이슈 #1283; 펜스 표·v2 함수는 이슈 #1326)docs/data/sql-definitions.mdtests/react/sqlDefinitionsContract · npm run sql:check개선 진행
스크립트·도구1S11DURABLEscripts/data-copy/user-fact-tables.mjs(매일 사본 워크플로가 부름).github/workflows/user-data-copy.ymlworkflow 실행 기록개선 진행S11 이 completeness·checksum 을 붙인다
테스트·검증 사례79G02, S01HQ(감사자)tests/react pending*·workoutDraft*·ownData*, pgTAP workout_draft_*, error-cases CASE-011·015·029tests/audit/manifest.jsonnpm run check:test-manifest유지 근거S01 이 재현 fixture 를 추가
문서·계약문9S01DURABLEworkout-draft-protection.mddocs 빌드유지 근거현행 정본; S01 이 codec 계약을 추가

<a id="shell"></a>

앱 셸(부팅·route/overlay·owner·연결·스냅샷·오류·토스트·공용 RPC 전송) (shell)

거대 셸·거대 Repository 가 여기 있다. A01 이 분리 경계를 만들고 A15 가 얇은 셸로 끝낸다(운영 정본 §3).

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
진입점(HTML·부팅·SW 등록)6A15, B02APP / PLATFORMindex.htmlvite/main.tsx·AppRoot·mobileRoot·desktopRoot·AppErrorBoundarydocs/contracts/shell-frames.md · branch-workflow sentinel(index.html)tests/react/appErrorBoundary·viteServices·initialLoadPath개선 진행
라우트·탭·겹침 층6A15, A07APP(A15 최종; 그 전 A01/A07)app.tsx·appController.tsx(2,545줄)·mobileApp.tsx(2,093줄)·desktopApp.tsx(1,175줄)·sharedShell.tsx·hostLoadingContextdocs/contracts/shell-frames.md · 운영 정본 §3(앱 컨트롤러 통합 담당)tests/react/appContainer·navigationStore·homeFragmentBoundaries·uiBoundaryLeaks개선 진행
화면(표현)13U01, U02, U03UIui/shared/gates/*(오류·호스트·로딩·임퍼서네이션·셸 게이트)·MobileShell*·bottomChrome·DesktopShellFrames·DesktopSidebar·TabSkeletons·DesktopLoadingOverlaydocs/contracts/shell-frames.md · bottom-chrome-clearance.mdtests/react/bottomChromeClearanceContract·hiddenPaneGateGuards·modalRootPortal개선 진행
기능 바인딩(features)3A07, A15APPfeatures/connectivity/OfflineStatusBinding·features/toast/ToastBindingtests/react/connectivityAppAdapter개선 진행A07 #1335: 연결 상태는 app/connectivityRuntimeHost 가 owner scope 에 묶어 공급
컨트롤러·스토어31A01, A07, A08APP(A01 → A07)resources/resourceStore(owner 범위 조회 캐시 정본, 이슈 #1338)·resources/useResourceSnapshot·app/ownerRuntime(세대·취소 신호·자원 등록, 이슈 #1335)·app/ownerStoreSetHost·app/connectivityRuntimeHost·remoteDataController.ts(3,503줄)·remoteStatus·navigationController/Store·ownerScopeController·ownerStores(Context)·connectivity*·screenLoadPolicyController·screenPolicyBinding·keyedRequestQueue·toastController/Storedocs/architecture/owner-scoped-resource-cache.md · docs/architecture/owner-auth-connectivity-lifecycle.md · 운영 정본 §3 · ADR §3-5tests/react/resourceStore·ownerRuntime·ownerStoreSetHost·ownerStores·ownerSwitchFixture·connectivity*·remoteStatusBootSnapshotGuard·keyedRequestQueue·screenRpcHotPath개선 진행A07 #1335: owner 세대 정본 하나(4 → 1 카운터), 떠나는 순서(보존 → 폐기 → 무효화 → 새 세트) 계약, 연결 조립을 owner 자원으로. A08 #1338: ResourceCachePort 의 실제 구현 하나(resourceStore, 행동 13건) — 소비자 취소와 요청 취소 분리, owner 떠남 = 캐시 자동 폐기, 세션 상세 경로가 첫 소비자(ref 5개·loading state 손 동기화 제거). 남은 손 리셋(resetRemoteUserData)은 A09~A11 이 각 화면을 resource 로 옮기며 줄인다
서비스·도메인·매퍼27A01, A08, A16APPbarbelicApi(파사드)·barbelicShared·barbelicMappers·barbelicViewMappers·barbelicNav·mobileExperienceViewMappers·desktopExperienceViewMappers·bootReadModelCache·appShellSnapshot*·appError*·appPerformanceBudgets·tabSwitchLatencyProbe·userErrorPolicy·runtimeGymData·domains/index·lazyFeatureDomaindocs/architecture/domain-service-boundaries.md · data-loading-strategy.mdtests/react/frontendImportBoundaries·lazyServiceBoundaries·leanPublicApiSurface·appShellSnapshot*·bootReadModelCache개선 진행
저장소·RPC 어댑터10A01, A06, A02, A03, A04, A05APP(A01 최종 export 정리, A16 잔여 제거)barbelicRepository.ts(5,485줄, Supabase 어댑터·RPC 호출 전부)·screenRpcAdapters/Contracts/Freshness/PayloadMetrics·readModelQueryCache·readModelObservability·runtimeSchemaValidationdocs/architecture/domain-service-boundaries.md · docs/data/app-screen-rpc-contract.md · ADR §3-2tests/react/repository·screenRpcContracts·rpcContractsAndConventions·rpcSurfaceHygieneContract·mutationRpcGate · test/rpcContractVersioning개선 진행
타입·DTO·계약 코드30G03, A16HQ(G03)types/common·controllers·desktopUi·mobileUi·reactComponents·screenRpc·global.d.tsADR §3-2·§3-5npm run check:ts-boundary-gate · tests/react/controllerBoundaries개선 진행
RPC·테이블(서버 객체)2A06, G03APP / HQ화면 RPC 계약 문서(docs/data/rpc-catalog.md·app-screen-rpc-contract.mdrecord_client_error_event · 테이블 client_error_events · cron barbelic-client-error-purgedocs/data/app-screen-rpc-contract.mdtest/appScreenRpcContract · pgTAP client_error_events개선 진행
SQL 원천·스키마3A06DATA(객체) / HQ(번호·schema.sql·랜딩)supabase/definitions/shell/** — 함수 2·표 1·뷰 0 (schema.sql 에서 추출한 도메인 원천, 이슈 #1283)docs/data/sql-definitions.mdtests/react/sqlDefinitionsContract · npm run sql:check개선 진행
설정·빌드·CI2B02B02 계약·담당자 검증 → Actions 자동 통합 슬롯app-config.js(런타임 환경값)·dual-key-baseline.jsondocs/platform/environment-separation-runbook.mdtests/react/appConfigEnv · npm run check:dual-key개선 진행
스크립트·도구1A16APPscripts/check-dual-key-tolerance.mjs(camel/snake 이중 키 허용 기준선)dual-key-baseline.jsonnpm run check:dual-key개선 진행A16 이 기준선을 0 으로 내린다
테스트·검증 사례89G02HQ(감사자)tests/react app*·connectivity*·screenRpc*·boundary 검사, test/appScreenRpc·onDemand·largeData, pgTAP client_error_events, error-cases CASE-010·014tests/audit/manifest.jsonnpm run check:test-manifest유지 근거행동 검사로 유지
문서·계약문11G03, A15HQ / APPdomain-service-boundaries.md · data-loading-strategy.md · observability-logging.md · shell-frames.md · bottom-chrome-clearance.mddocs 빌드유지 근거현행 정본; A15 완료 시 §Next Extraction 절을 정리

<a id="ui-platform"></a>

공통 UI 기반(token·primitive·공용 스타일·아이콘·자원·디자인 전달 계약) (ui-platform)

CSS scope·token 의 소유는 U01 계약 → U07 정리(운영 정본 §3). 디자인 전달 계약은 src/react/ui/DELIVERY-CONTRACT.md.

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
화면(표현)29U01UIui/shared/icons·useListWindow·useDebouncedSearchQuery·numericInputSelection·ui/mobile/lib(Modal·ListOverlay·SearchField·sheetDrag·slideBack·keyboardInset·pullRefresh·BrandRow)·ui/desktop/lib(DkOverlay·bgThemes·dateTimeInputs·saveNodeAsImage)·DesktopWidgets·barbelicCopy · ui/shared/primitives/*(U01 신규, 기존 화면 이식은 U02/U03)src/react/ui/DELIVERY-CONTRACT.md · DEGRADED-UX-PRESENTATION-CONTRACT.md · docs/contracts/ui-primitives-props.mdtests/react/designDeliveryPrimitives·modalRootPortal·numericInputEditing · tests/react/uiPrimitives · tests/browser/u01개선 진행U01 #1289: 작은 primitive v1·오류 gate 버튼 3개 연결, 신규 Node 10/10·Edge 16/16. 기존 화면 이식은 U02/U03
타입·DTO·계약 코드2U01UI / APP(마커 등록은 APP)contracts/designContract.ts(semantic marker) · contracts/ui-primitives-props.ts(React 독립 ViewModel)AGENTS.md §8 · ui-primitives-props.mdtests/react/designContract · tests/react/contractsImportBoundaries · check:types유지 근거마커 계약은 유지; 새 마커는 그 자리에서 추가
스타일10U01, U07UI(U01 계약 → U07 정리)ui/mobile/styles/base/*(tokens·core·primitives·nav·overlays)·styles.css·ui/desktop/styles/desktop.css·ui/shared/styles/{app-host,shell}.css · ui/shared/styles/ui-primitives.css운영 정본 §3(CSS scope·token) · 이 장부 §4 · docs/contracts/ui-visual-foundation.mdtests/react/mobileCssBoundaries·backgroundTokens·viewportTiers · npm run check:dead-css · tests/browser/u07검증 완료U07 #1532: intrinsic 소유 화면 통합·미사용 scaffold 제거, 기존 layer/플랫폼 token 유지. U07 Chromium 10/10·U03 29/29·U02 22/22·U01 16/16, 원본 대비 12개 화면/폭 computed style 차이 0. U04 이후 native·safe-area 최종 검증은 U06
설정·빌드·CI2U07UIdead-css-baseline.json·src/react/ui/delivery-manifest.jsondocs/process/design-codex-transfer-contract.mdnpm run check:dead-css · tests/react/deadCssGate검증 완료U07 #1532: deadByFile은 이미 0, 0→0 유지. baseline 재생성·동적 예외 확대 없음; import와 빌드에 없는 scaffold만 삭제
스크립트·도구1U07UIscripts/check-dead-css.mjsdead-css-baseline.jsonnpm run check:dead-css유지 근거U07 #1532: 기존 dead CSS 양방향 gate 통과·구현 유지. 문자열 사용 검사는 entry 도달성을 증명하지 않으므로 scaffold 삭제는 import/빌드 근거 병행
테스트·검증 사례26G02HQ(감사자)tests/react CSS 경계·디자인 계약·뷰포트, e2e bottom-clearance·dock-geometry·viewport-matrix · tests/react/uiPrimitives · tests/browser/u01tests/audit/manifest.jsonnpm run check:test-manifest유지 근거행동 검사로 유지
문서·계약문7U01UIui/README.md · DELIVERY-CONTRACT.md · DEGRADED-UX-PRESENTATION-CONTRACT.md · desktop-screens-props.md · viewport-tiers.md · ui-primitives-props.md · ui-visual-foundation.mddocs 빌드유지 근거U01 #1289: props/접근성·token/layer/scope 계약 v1, U02/U03/U07/U06 인계
정적 자원68U05UIui/shared/assets(종목 그림 png/webp)·ui/desktop/assets(빈 상태·아바타·브랜드)·ui/mobile/assets·public/fonts·public/iconsdocs/process/brand-identity.mdtests/react/staticAssetDelivery개선 진행U05 가 초기 번들 비용에서 자원 로딩을 본다

U07 #1532 보충(2026-09-10): 전체 장부 재생성 없이 CSS/config/script 담당 행과 신규 tests/browser/u07 분류를 갱신했다. 현재 ui-platform test 분류는 40개(U01/U03/U07 및 기존 검사)이며 위 26개는 기존 G02 감사 시점 수치다. U07은 3개 테스트/서버 설정 파일·10개 브라우저 사례를 추가했다. 검증·한계·후속 인계. 전체 inventory의 기존 미분류·다른 영역 entry/장부 누락은 전역 통과로 보고하지 않는다.

<a id="native"></a>

네이티브(iOS·Android·Capacitor·bridge) (native)

브리지 계약 docs/contracts/native-bridge.md·src/react/contracts/nativeBridge.ts. 스토어 제출은 docs/platform/app-store-submission.md.

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
진입점(HTML·부팅·SW 등록)1N01PLATFORMvite/nativeSplash.ts(스플래시 해제 시점)docs/contracts/native-bridge.mdtests/react/nativeSplashOwnership개선 진행
타입·DTO·계약 코드1N01, G03PLATFORMcontracts/nativeBridge.tsdocs/contracts/native-bridge.mdtests/auth/androidNativeAuthContract·iosNativeAuthContract개선 진행
네이티브(iOS·Android)61N01PLATFORM(iOS 빌드는 오너 Mac)android/**(MainActivity·NativeBridge·NativeAuth*·SecureStore·AppEnvironment)·ios/**(AppDelegate·MainViewController·Info.plist·PrivacyInfo)docs/contracts/native-bridge.md · docs/platform/{android,ios}-setup.mdtests/auth 네이티브 계약 2 · tests/react/iosStoreSubmissionContract개선 진행
설정·빌드·CI1N01, B02PLATFORMcapacitor.config.jsondocs/platform/ios-setup.mdnpm run ios:sync / android:sync개선 진행
테스트·검증 사례2G02HQ(감사자)tests/react nativeSplashOwnership·iosStoreSubmissionContracttests/audit/manifest.jsonnpm run check:test-manifest유지 근거행동 검사로 유지
문서·계약문5N01PLATFORMnative-bridge.md · android-setup/release.md · ios-setup.md · app-store-submission.mddocs 빌드유지 근거현행 정본

<a id="sw"></a>

서비스 워커·오프라인·구 청크 복구 (sw)

public/sw.js(빌드 없는 정적 파일) + 등록 조건 offlineServiceWorker.ts + 지연 청크 복구.

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
진입점(HTML·부팅·SW 등록)3N01PLATFORMpublic/sw.js(정적, 빌드 없음)·vite/offlineServiceWorker.ts(등록 조건)·vite/staleChunkRecovery.ts(지연 청크 복구)vercel.json /sw.js no-cache 헤더tests/react/offlineServiceWorker·staleChunkRecovery개선 진행
테스트·검증 사례2G02HQ(감사자)tests/react offlineServiceWorker·staleChunkRecovery, error-case CASE-010tests/audit/manifest.jsonnpm run check:test-manifest유지 근거행동 검사로 유지
정적 자원1N01PLATFORMpublic/offline.html(Capacitor errorPath)capacitor.config.json유지 근거정적 대체 페이지

<a id="build"></a>

환경·빌드·의존성·배포·CI·게이트 (build)

Vite·Vercel·package·워크플로·check:* 게이트. 공용 설정은 B02 계약·담당자 검증 후 Actions 자동 통합 슬롯 사용(운영 정본 §3·§4-1).

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
설정·빌드·CI29B02B02 계약·담당자 검증 → Actions 자동 통합 슬롯(운영 정본 §3·§4-1)vite.config.mjs·vercel.json·package(-lock).json·tsconfig*.json·eslint.config.mjs·기준선 json·.github/workflows/*(6)·composite action 2·PR 템플릿·public/manifest.webmanifest·robots.txt·sitemap.xmldocs/process/deployment-pipeline.md · branch-workflow.md sentinel · environment-separation-runbook.mdnpm run check:deployment · check:tsconfig · tests/react/deploymentPipeline·ciScopePolicy·remoteReleaseContract개선 진행
스크립트·도구33B02, G04PLATFORM / HQscripts/check-*(utf8·brand·eslint·deployment·typescript 4종·unused)·ci-local·ci-scope-policy·ci-wait·typescript-*-contractdocs/process/ci-local.md · docs/gates/*tests/react/ciLocal·eslintGate·typescriptTooling·typescriptUnusedGate유지 근거게이트 도구는 유지; G04 가 성능 예산 게이트를 추가
테스트·검증 사례24G02, G04HQtests/react ci*·deploymentPipeline·typescript*, test/performanceBudgets, e2e/profile/*(성능 프로파일), pgTAP ops_observabilitytests/audit/manifest.jsonnpm run check:test-manifest유지 근거G04 가 계측 기준선을 고정
문서·계약문12B02HQdocs/gates/*(5) · environment-separation-runbook.mddocs 빌드유지 근거현행 정본

<a id="db-platform"></a>

DB 플랫폼(schema·migration·랜딩·권한·원본 보호) (db-platform)

테이블 77·함수 372·트리거 99·정책 90·pg_cron 7. 랜딩 절차 docs/process/migration-landing.md, 원본 불변 docs/contracts/user-fact-immutability.md.

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
서비스·도메인·매퍼1D13HQ(랜딩)services/deploymentManifest.ts(EXPECTED_LATEST_MIGRATION, renumber 가 갱신)docs/process/migration-landing.mdnpm run check:deployment · migrations:check유지 근거랜딩 절차의 기계 갱신 대상
타입·DTO·계약 코드1G03, D03HQtypes/supabase.ts(생성 타입)docs/data/supabase-type-strategy.mdtests/react/supabaseTypeStrategy개선 진행
SQL 원천·스키마244D03, D12, D13DATA(객체) / HQ(번호·schema.sql·랜딩)supabase/migrations/*(173, 불변)·schema.sql(39,577줄 실제 상태 덤프)·seed_dummy_account.sql·supabase/definitions/**(도메인 원천 462파일·registry·rules·exceptions, 이슈 #1283) · 테이블 77·함수 372·트리거 99·정책 90·뷰 3·cron 7docs/process/migration-landing.md · docs/data/supabase-migration-strategy.md · ADR §5npm run check:migrations · schema:snapshot --check · db:preflight · pgTAP 108파일 · npm run sql:check개선 진행D03 이 도메인 원천·생성기·drift gate 를, D12 가 모델·index·제약을, D13 이 populated DB 안전성을 맡는다
설정·빌드·CI10D03, D13DATAsupabase/config.toml·supabase/contracts/user-fact-columns.json(원본 등급 목록)·reference-data-tables.jsondocs/contracts/user-fact-immutability.mdtests/react/userFactColumnsContract유지 근거계약 목록은 새 컬럼마다 같은 PR 에서 등재
스크립트·도구39D13DATA(D13) — 운영 정본 §3scripts/migrations/*(renumber·landing-lock·db-preflight·loss-audit·schema snapshot·user-fact 보호 생성기)·git-hooks/pre-push·check-supabase-migrations·check-supabase-remote-schemadocs/process/migration-landing.mdtests/react/landingPreflightGate·schemaSnapshotContract·migrationScope개선 진행
테스트·검증 사례38G02, D13HQ(감사자) / DATApgTAP 권한·원본 보호·표면 위생, tests/react schema*·appRolePrivileges·userFactColumns, test/runtimeSchemaValidation·supabaseRemoteSchemaFinalStatetests/audit/manifest.jsonnpm run check:test-manifest유지 근거행동 검사로 유지
문서·계약문11D03DATAsupabase/README.md · LEGACY_PATCHES.md · supabase-migration-strategy.md · supabase-type-strategy.md · user-fact-immutability.md · app-role-privileges.md · identity-passing.mddocs 빌드유지 근거현행 정본

<a id="verification"></a>

검증 기반(테스트 감사·harness·error-case 지원) (verification)

테스트 manifest·e2e harness·error-case 정책 파일. 기능별 테스트는 각 영역의 test 계층에 있다. R02~R06(통합 검증·리허설·릴리스)은 파일을 소유하지 않고 이 기반과 각 영역의 증거를 소비한다.

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
설정·빌드·CI6G02HQ(감사자)tests/audit/manifest.json·pending-changes.json·playwright*.config.mjs(3)docs/gates/test-audit.md · AGENTS.md §9npm run check:test-manifest유지 근거감사자만 manifest 를 갱신
스크립트·도구3G02HQcheck-test-manifest·check-error-case-registrydocs/gates/test-audit.mdnpm run check:test-manifest · check:error-cases유지 근거게이트 유지
테스트·검증 사례68G02HQe2e/support/*(harness·설정·오류 감시)·error-cases/support/*(정책·fixture)·tests/support/*·tests/react/support/*·errorCase*/e2eHarness* 검사docs/testing/browser-full-stack-e2e.md · e2e-crud-roundtrip.mdnpm run ci:local개선 진행G02 가 clock·UUID·scheduler 재현성을 붙인다
문서·계약문5G02HQdocs/testing/*docs 빌드유지 근거현행 문서

<a id="docs"></a>

문서 사이트·프로세스·총괄·이 장부 (docs)

VitePress 사이트(barbelic-docs)·프로세스 정본·이 장부와 검사 도구.

계층파일계획 ID변경 소유자주요 소비자·객체현행 계약기존 검사판정구현 PR/SHA·검증 증거
설정·빌드·CI7G01HQdocs/.vitepress/*·docs/package(-lock).json·docs/vercel.json·docs/scripts/build-admin.mjs(관리자 셸을 /admin/ 로 싣는 빌드)docs/process/deployment-pipeline.md 관리자 셸 절docs npm ci && build유지 근거문서 사이트 빌드; 관리자 셸 배포 경로는 운영 정본 §4-5
스크립트·도구2G05, R01HQ(G05)scripts/architecture/check-coverage-inventory.mjs·coverage-inventory.json(이 장부의 규칙·데이터)이 문서 §2node scripts/architecture/check-coverage-inventory.mjs · tests/react/coverageInventory유지 근거G05 산출물; R01/R05 가 --strict 로 종료 검사
테스트·검증 사례1G05HQtests/react/coverageInventory.test.mjsnpm test유지 근거도구 행동 검사
문서·계약문23G01, G05, R01HQREADME.md · AGENTS.md · docs/index·README·agents · docs/process/(10) · docs/product/ · ADR · 이 장부운영 정본 §3(총괄·운영 정본·ADR 은 HQ)docs 빌드유지 근거현행 정본; R01 이 오래된 문장을 정리

진입점·잡 등록 대조

종류등록(장부)실제 발견미등록사라짐
html22
boot22
serviceWorker11
api44
edgeFunctions33
workflows66
cronJobs79barbelic-stats-projection-compute, barbelic-stats-projection-publish

근거 있는 제외

규칙파일 수근거소유
^docs/updates/192작업 기록·총괄 문서 — 실행되지 않는 역사·계획 자료. 총괄(roadmap)의 갱신은 HQ 가 통합한다HQ
^bug-report/85버그 리포트 — 역사 자료(형식 정본 bug-report/README.md)HQ
^docs/(ko/)?archive/19보관 문서 — 현행 계약이 아니다HQ
^docs/ko/20한국어 번역 사본 — 원본 문서가 영역에 연결돼 있다HQ
^supabase/legacy/29옛 patch 파일 — 실행하지 않는 참고 자료(AGENTS.md §5, supabase/LEGACY_PATCHES.md)DATA
^supabase/wodup_exercises_mapping_import_20260615/92026-06 일회성 Wodup 매핑 인입 자료 — 현행 파이프라인이 아니다PLATFORM
`^src/react/ui/(CHANGE-NOTES(-archive)?PR-DRAFTHANDOFF-vite-export).md$`4
^\.claude/1로컬 개발 도구(Claude 앱) 설정 — 제품·빌드에 쓰이지 않는다HQ
^supabase/\.branches/1Supabase CLI 상태 파일DATA

미분류 (규칙 추가 필요)

  • docs/contracts/button-system.md
  • docs/contracts/training-style-props.md
  • e2e/group-design-notifications.spec.mjs
  • e2e/profile-design-settings.spec.mjs
  • e2e/report-design-detail.spec.mjs
  • src/react/contracts/profile/profileBodyValidation.ts
  • src/react/contracts/profile/trainingStyles.ts
  • src/react/controllers/notificationStore.ts
  • src/react/controllers/notificationTargetStore.ts
  • src/react/controllers/useReportDesignData.ts
  • src/react/services/domains/codecs/reportDesignCodec.ts
  • src/react/services/domains/profileSettingsCodec.ts
  • src/react/services/domains/reportDesignDomain.ts
  • src/react/services/domains/repositories/groupDesignRepository.ts
  • src/react/services/domains/repositories/reportDesignRepository.ts
  • src/react/ui/mobile/screens/TrainingStyleScreen.tsx
  • src/react/ui/mobile/styles/screens/training-style.css
  • supabase/tests/database/report_design_distributions_v1.test.sql
  • supabase/tests/database/stats_isolated_publication_v1.test.sql
  • supabase/tests/database/stats_worker_cancellation_progress.test.sql
  • supabase/tests/database/strength_projection_dirty_suffix_v1.test.sql
  • tests/react/designBranchWorkoutFeedInteractions.test.mjs
  • tests/react/notificationIntegration.test.mjs
  • tests/react/prExerciseStaleData.browser.mjs
  • tests/react/profileDesignIntegration.test.mjs
  • tests/react/profileDocumentLifecycle.test.mjs
  • tests/react/promotion.test.mjs
  • tests/react/releaseLanding.test.mjs
  • tests/react/writeFailureSafariRecovery.test.mjs

<!-- coverage-ledger:generated:end -->

4. 공용 자원의 소유권과 계약 변경 통지 절차

운영 정본 §3 의 "통합 담당(최종 병합자)" 은 여기서 바꾸지 않는다. 이 절은 그 표를 실제 파일·객체 단위 로 정밀화하고, CSS scope 와 native bridge 두 행을 파일까지 내려 적고, 바꾸기 전에 누구에게 알리는지를 절차로 고정한다.

4-1. 공용 파일 (실측 2026-09-07)

자원실제 파일분리 경계를 먼저 만드는 담당새 목적지통합 담당(운영 정본 §3 그대로)바꾸기 전 통지 대상
앱 컨트롤러·셸src/react/appController.tsx(2,545줄; 운영 정본 §3 의 .jsx 표기는 정정 대상) · mobileApp.tsx · desktopApp.tsx · app.tsx · sharedShell.tsxA01 → A07feature 담당(A09~A14)이 features/**A15A01/A07 담당 이슈 + 그 화면 영역 담당
원격 데이터 컨트롤러src/react/controllers/remoteDataController.ts(4,092줄) · remoteStatus.tsA01 → A07A08(resource cache) · A09~A11A15A07/A08 담당
거대 Repositorysrc/react/services/barbelicRepository.ts(5,485줄) · screenRpcAdapters.ts · screenRpcContracts.tsA01A02~A06 도메인 repositoryA01(최종 export) → A16(잔여 제거)A01 담당 + 그 도메인 담당
파사드·매퍼src/react/services/barbelicApi.ts · barbelicMappers.ts · barbelicViewMappers.ts · mobileExperienceViewMappers.ts · desktopExperienceViewMappers.tsA01도메인별 codec(A02~A06)A01A01 담당
기기 대기열src/react/services/pendingWorkoutSaves.ts · pendingWorkoutMutationFlush.ts · workoutLocalCacheDb.ts · src/react/controllers/pendingWorkoutSavesStore.ts · pendingWorkoutSavesController.tsS01S02 → S04 → S07 같은 담당 계열queue 담당(현재 S 순서)S 계열 담당 + S05/S06
타입·DTO·계약 코드src/react/types/**(16) · src/react/contracts/**(5)G03feature 담당은 좁은 port 만G03G03 담당(#1282)
배포 manifestsrc/react/services/deploymentManifest.ts(EXPECTED_LATEST_MIGRATION)migrations:renumber 가 기계 갱신해당 PR 담당이 생성·검증, 자동 큐에서 통합손으로 고치지 않는다
웹 부팅·빌드·의존성 sentinelindex.html · app-config.js · vite.config.mjs · vite.admin.config.mjs · package.json · package-lock.json · tsconfig*.json · .github/workflows/**B02필요한 담당이 PR 본문에 sentinel 사유배정된 소유자 검증 → Actions 자동 통합 슬롯(§4-1 ②)소유 역할 담당, 충돌·범위 변경만 HQ(#1279)
테스트 감사 manifesttests/audit/manifest.json담당은 pending-changes.json 신고만감사자(G02)G02 담당(#1280)
총괄·운영 정본·ADR·이 장부의 규칙docs/updates/2026-09-07-…roadmap.md · docs/process/v0-18-0-hq-operations.md · docs/contracts/v0-18-0-adr.md · scripts/architecture/coverage-inventory.json담당은 갱신안을 이슈 댓글로; 규칙 파일은 새 경로 한 줄만 직접HQ(규칙 파일은 G05 → HQ)HQ
관리자 셸운영 정본 §4-5 의 감시 경로B01A05B01B01 + 관리자 게이트 라벨

4-2. DB object — 영역별 테이블·함수 소유

SQL object(함수·정책·트리거·뷰)는 D03의 supabase/definitions/<domain>/** registry별로 도메인 담당이 바꾼다. 번호·schema.sql은 해당 PR 담당이 생성·검증하고, 랜딩은 Actions 자동 큐가 직렬 실행한다(운영 정본 §3·§4). 같은 object나 공용 파일의 계약·변경 순서가 충돌할 때 HQ가 조율한다. registry 이전에 조사한 아래 도메인 경계와 테이블 77개 소유 분류는 유지한다.

영역테이블대표 함수·잡object 담당(계획 ID)
workout · plansession · session_exercise · session_exercise_part · exercise_set · exercise_set_part · workout_mutation_receipts · daily_conditions · 뷰 completed_session_v1 · planned_session_v1save_session_v5 · delete_session_v5(_engine) · retry_save_session_v5 · get_session_detail · get_session_search · get_planned_session_detailD02(영수증 세대) · S10(복구) · A02(codec)
home · calendar · volumeuser_calendar_day_summaries · user_calendar_summary_dirty_dates · user_training_period_stats · user_exercise_period_stats · user_exercise_favorites · user_exercise_favorite_statesget_home_dashboard · get_home_year_activity · get_calendar_* · get_log_table_* · get_volume_overview · *_user_exercise_favorite(s)D06(기간·달력 projection) · A06(query codec)
pruser_exercise_pr_events · user_exercise_pr_states · user_exercise_records · user_manual_pr_records · user_manual_record_metrics · user_pr_exercise_summary_snapshots · user_pr_overview_snapshot_headers · user_pr_overview_rollover_state · pr_overview_projection_control · exercise_strength_standards · strength_profession_standardsget_pr_overview · get_exercise_pr_* · save/delete_manual_pr · *_manual_record_metric_v1 · cron lift-guild-pr-overview-snapshot-rolloverD07(PR·e1RM checkpoint) · D10(rollover 탐색)
statsuser_exercise_stats · user_exercise_stats_refresh_jobs · user_exercise_session_rollups · user_exercise_strength_daily/observations/states · user_exercise_max_rep_observations · user_exercise_set_score_states · user_stats_refresh_state · stats_refresh_event_types · strength_estimation_curve_points/curve_versions/integer_lookup_snapshots/policy_versions · max_rep_estimation_policy_versions · set_purpose_policy_versions · 뷰 user_exercise_stats_refresh_job_observabilityenqueue/process_user_exercise_stats_refresh_jobs · run_*_cron · cron lift-guild-stats-refresh · barbelic-stats-backfill-scanD01(DAG) · D04(dirty scope) · D05(rollup) · D08(worker·lease) · D11(전환)
catalogexercises · exercise_synonyms · exercise_archetypes · exercise_catalog_changes · exercise_usage_stats · exercise_business_role_memberships · exercise_external_mappingsget_exercise_catalog(_changes) · get_exercise_search_signals_v1 · create_custom_exercise · cron barbelic-exercise-*A03(codec) · D12(모델·index)
profile · onboardingprofiles · body_metrics · user_consentsget_profile_workspace · save_profile_body_metric · set_profile_*_v1 · get_onboarding_state · complete_onboarding · withdraw_user_consent · ensure_user_profileA03 · B01(계정 생애주기)
socialuser_follows · user_blocks · session_likes · session_comments · content_reports · content_takedowns · user_suspensions · moderation_banned_termsget_profile_feed · get_following_*_v1 · follow/unfollow_user_v1 · block/unblock_user_v1 · report_content_v1 · *_session_comment(s)_v1A04 · B01(권한)
groupgroups · group_members · group_invites · group_notices · group_chat_messagescreate_group_v1 · invite_to_group_v1 · get_group_*_v1 · *_group_board_comment_v1 · *_group_chat_message_v1A04 · B01
auth · adminlift_guild_admins (+ auth.users cascade)complete_native_social_login · complete_native_social_identity_link · is_lift_guild_admin · admin_*(15) · get_admin_*B01
importwodup_import_batches/rows/sessions/sets/exercises · wodup_exercises · wodup_session_timing_materializations · inbody_import_batches · external_exercise_interpretations · external_exercise_interpretation_componentsenqueue/stage/import_wodup_* · mark_wodup_import_batch_*_v1 · import_motra_workouts_v1 · import_inbody_body_metrics · Edge wodup-* · cron barbelic-wodup-failed-staging-purgeD09(durable 소비자) · I01(parser·identity) · A05(codec)
durableworkout_draft_checkpoints · workout_draft_checkpoint_fences*_workout_draft_checkpoint_v1(v2 호환 래퍼) · *_workout_draft_checkpoint_v2 · retire_workout_draft_checkpoint_operation_v1 · clear_*_workout_draftS08
shell · db-platformclient_error_events · user_fact_historyrecord_client_error_event · cron barbelic-client-error-purge · 원본 보호 트리거(user_fact_*)B02(관측) · D13(원본 보호·랜딩 도구)

바꾸기 전 규칙(ADR §5·원본 불변 계약 그대로): 유저 원본 등급 컬럼을 UPDATE/DELETE 하는 문장은 수리 티켓 없이 쓰지 않는다. 새 컬럼은 같은 PR 에서 supabase/contracts/user-fact-columns.json 에 등급을 등재한다. 같은 함수를 두 트랙이 재발행하면 나중 랜딩이 재조립한다(랜딩 절차).

4-3. CSS scope — 파일 단위 소유

scope파일어디서 실리나소유바꾸기 전 통지
tokensrc/react/ui/mobile/styles/base/tokens.css(layer(tokens))styles.css 매니페스트 → mobileRoot.tsx 즉시U01(계약) → U07(정리)UI 역할 전체 + 그 token 을 쓰는 화면 영역
base(공통 규칙·primitive·nav·overlay)base/core.css · primitives.css · nav.css · overlays.css(layer(base))위와 같음U01 → U07UI 역할 전체
shared shell(호스트·프레임)src/react/ui/shared/styles/shell.css · app-host.css · src/react/vite/vite-scaffold.cssvite/main.tsx 즉시(두 플랫폼 공통)U01 · A15(프레임 배선)UI + APP(A15)
desktop basesrc/react/ui/desktop/styles/desktop.cssdesktopRoot.tsx 즉시U01 → U03UI
mobile screenui/mobile/styles/home.css(즉시) · screens/{day-summary,feed,group,legal-doc,onboarding,profile,records,report,session,set-search,workout}.css(화면과 같은 suspense 경계에서 지연 로드)mobileRoot.tsx 지연 import그 화면 영역 담당 + U02(표현)그 영역 담당
desktop screenui/desktop/styles/screens/{plan-editor,pr,session,volume}.css · desktop-admin.cssdesktopRoot.tsx 즉시 · 관리자 셸그 화면 영역 담당 + U03그 영역 담당
문서·법적public/legal/legal.css · docs/.vitepress/theme/custom.css정적B01(법적 문서 불변) · HQ(docs)

지키는 검사: tests/react/mobileCssBoundaries.test.mjs(모바일 루트는 루트 소유·공용·홈 스타일만 즉시 로드, 화면 스타일은 같은 suspense 경계에서), check:dead-css(안 쓰는 선택자 기준선 dead-css-baseline.json, U07 이 0 으로), backgroundTokens. 규칙: 새 화면 CSS 는 screens/ 에 파일을 만들고 지연 import 로 싣는다 — styles.css 매니페스트에 넣지 않는다. token·base 를 바꾸면 U01 담당 이슈에 통지하고 check:dead-css 기준선을 같은 PR 에서 갱신한다.

4-4. native bridge — 메시지 단위 소유

방향계약웹 쪽AndroidiOS소유
웹 → 네이티브 (12종)startSocialLogin · persistNativeAuthSession · restoreNativeAuthSession · clearNativeAuthSession · nativePkceStorage · appleAccountDeletionReauth · workoutActive · splashState · sessionDownloadImage · shareFile (+ 버전 별칭 …V1)src/react/services/barbelicNav.ts(BarbelicNativeMessage) · src/react/contracts/nativeBridge.ts · vite/nativeSplash.ts · services/auth/providers/*android/app/src/main/java/com/dekerd/barbelic/NativeBridge.kt(handleMessage) · NativeAuthTransaction.kt · SecureStore.ktios/App/App/MainViewController.swift · AppDelegate.swiftN01(PLATFORM) — 계약문 docs/contracts/native-bridge.md
네이티브 → 웹 (이벤트)barbelic:native-auth · barbelic:native-session-persist · barbelic:native-auth-complete · __barbelicNativeEnvironment(오프라인 페이지)services/nativeAuthSessionPolicy.ts · authOAuthCallbackPolicy.tsNativeAuthCallbackMailbox.kt · MainActivity.ktMainViewController.swiftN01 + A07(인증 lifecycle)
환경capacitor.config.json(webDir dist-vite · errorPath offline.html · iOS limitsNavigationsToAppBoundDomains) · android/app/build.gradle · ios/App/App/Info.plist · PrivacyInfo.xcprivacyN01 · B02(빌드)

지키는 검사: tests/auth/androidNativeAuthContract.test.mjs · iosNativeAuthContract.test.mjs(두 플랫폼 구현이 계약문의 메시지·콜백 형식을 따르는지) · tests/react/nativeSplashOwnership. 규칙: 메시지를 추가·변경하면 계약문 → 웹 타입 → Android → iOS 네 곳을 한 PR 에서 바꾸고, 못 바꾸는 플랫폼(iOS 빌드는 오너 Mac)이 있으면 옛 메시지를 한 릴리스 동안 함께 받는다(ADR §5 호환 경계). N01 담당 이슈에 통지한다.

4-5. 계약 변경 통지 절차

"계약" 은 §3 각 행의 "현행 계약" 칸에 적힌 문서·타입·RPC 시그니처·CSS token·bridge 메시지다. 바꾸는 쪽이 아래 여섯 단계를 지킨다. 절차의 강제력은 이 장부(미분류·미등록 탐지)·앵커 테스트·랜딩 큐에서 온다.

  1. 바꾸기 전에 장부에서 소유자와 소비자를 확인한다. §3 의 행(변경 소유자·주요 소비자)과 §4-1~4-4 의 통지 대상을 본다. 소유자가 자기 역할이 아니면 자기 이슈가 아니라 그 소유 역할의 이슈에 먼저 댓글 을 남긴다.
  2. 통지 댓글 형식(자기 이슈와 소유 역할 이슈 둘 다, 같은 턴):
    계약 변경 통지 (YYYY-MM-DD)
    자원: <파일·객체·메시지 이름>  ·  장부 행: <영역>/<계층>
    지금 계약: <문서·시그니처·버전>
    바뀌는 것: <한 줄>  ·  이유: <한 줄>
    영향 소비자: <§3 주요 소비자 중 실제로 닿는 것>
    호환: <한 릴리스 동안 옛 형태도 받음 / 즉시 교체(사유)>
    PR: #N  ·  세션: <sessionId>
  3. 공용 파일이면 자동 통합 큐를 사용한다. §4-1의 sentinel·공용 설정·schema.sql·배포 manifest를 만지는 담당자는 PR 본문에 sentinel 사유를 적고 검증 후 npm run landing:request -- --pr <N>으로 요청한다. 실제 계약·소유권 충돌은 HQ 조정 이슈에 알리되 일상적인 랜딩에 HQ 라벨·재승인을 요구하지 않는다.
  4. PR 본문 "호환 영향" 절 에 통지 댓글 링크와 옛 형태의 제거 조건(어느 릴리스 뒤)을 적는다. 관리자 셸 번들에 실리는 공용 코드가 Production 에 없는 함수를 부르게 되면 운영 정본 §4-5 라벨(admin-hold/admin-compat-confirmed)을 붙인다.
  5. 머지 뒤 장부를 갱신한다. 새 경로·진입점·cron 잡은 규칙 파일에 한 줄(같은 PR). 그 행의 판정·증거는 구현 담당이 바꾼다("검증 완료" 는 PR·SHA·검사 결과와 함께). 현재 앱에서 --strict를 실행하고 이 문서의 현재 분류 표를 문서 PR에서 갱신한다. 앱은 문서를 읽거나 생성하지 않는다.
  6. 통지 없이 바뀐 것을 잡는 방법: 파일을 옮기면 미분류·미사용 규칙으로, 진입점·cron 을 추가하면 미등록으로 도구가 알린다. 함수 시그니처는 rpcSurfaceHygieneContract·rpcContractsAndConventions·pgTAP 이, bridge 는 tests/auth 계약 검사가, CSS 는 mobileCssBoundaries·dead-css 가 깨진다. 깨진 검사를 완화해서 지나가지 않는다(AGENTS.md §9).

5. 원 보고서 31개 · 추가 범위 C01–C08 · 63개 ID 와 영역의 대응

5-1. 보고서 항목 → 영역

총괄 문서 §11 의 F01~F30 + F07b(31개)가 어느 영역·계층에 닿는지. 연결 이슈는 총괄 문서가 정본이며 여기서는 영역만 붙인다.

보고서개선사항닿는 영역 · 계층실제 구현·시험 근거
F01Outbox 교체 원자성durable(controller·service) · native(sw)S01 PR1320, S02 PR1349, S04 PR1369, N01 PR1441, R02 예정, R05 예정
F02동시 저장 generation 경합workout(rpc) · stats(rpc) · db-platform(sql)D01 PR1319, D02 PR1352, R02 예정, R05 예정
F03Dirty scope·증분 통계stats(rpc·job) · calendar/home/volume(rpc)D01 PR1319, D04 PR1454, D05 PR1506, D06 PR1518, D07 PR1522, D11 PR1547, R04 예정, R05 예정
F04Projection 다중 작성자stats(rpc·job)D01 PR1319, D05 PR1506, D06 PR1518, D07 PR1522, D11 PR1547
F05전역 worker 의 사용자 간 잠금stats(job)D01 PR1319, D08 PR1510, D11 PR1547, R04 예정, R05 예정
F06Wodup 자동 복구·완료 정합import(job·rpc)D01 PR1319, D09 PR1445, D11 PR1547, I01 PR1498, R05 예정
F07충돌 사본·명시 복구와 merge 정책durable(service·rpc) · docs(ADR §3-3)G01 PR1296, S06 PR1385, S09 PR1502, S10 PR1442, R02 예정
F07b충돌 재전송 ID 의 비영속성durable(service)S01 PR1320, S06 PR1385, R02 예정
F08실제 domain repository 분리shell(repository) → 기능 16개(service·repository)G03 PR1311, A01 PR1316, A02 PR1354, A03 PR1351, A04 PR1448, A05 PR1443, A06 PR1453, A16 PR1561, B01 PR1346, I01 PR1498, R01 PR1569
F09Resource cache·lifecycle 분리shell(controller·service) · auth(controller)G03 PR1311, A07 PR1365, A08 PR1372, A09 PR1394, A10 PR1501, A11 PR1516, A16 PR1561, B01 PR1346, N01 PR1441, R01 PR1569
F10197-field renderCtx·shellshell(route)G03 PR1311, A07 PR1365, A09 PR1394, A10 PR1501, A11 PR1516, A15 PR1550, R01 PR1569
F11gymData/ref/dataTick 중복 상태shell(service runtimeGymData·controller)G03 PR1311, S08 PR1350, A07 PR1365, A08 PR1372, A09 PR1394, A10 PR1501, A11 PR1516, A15 PR1550, A16 PR1561
F12any·범용 타입·DTO 경계shell(types) · 기능 영역 types 계층 전부G03 PR1311, S01 PR1320, S03 PR1363, A01 PR1316, A02 PR1354, A03 PR1351, A04 PR1448, A05 PR1443, A06 PR1453, A12 PR1378, A13 PR1375, A16 PR1561, B01 PR1346, I01 PR1498, R01 PR1569
F13camel/snake·legacy 내부 관용shell(script check-dual-key·repository)G03 PR1311, S01 PR1320, S03 PR1363, A01 PR1316, A02 PR1354, A03 PR1351, A04 PR1448, A05 PR1443, A06 PR1453, A12 PR1378, A13 PR1375, A16 PR1561, I01 PR1498, R01 PR1569
F14공통 headless editor·입력 상태workout·plan(binding·controller) · ui-platform(ui)G03 PR1311, S08 PR1350, A12 PR1378, A13 PR1375, U02 PR1523, U03 PR1520, U06 예정
F15예외 기반 prepareworkout·plan(service)S03 PR1363, A12 PR1378, A13 PR1375
F16Outbox/UI/retry 책임 혼합durable(controller) · shell(controller)G03 PR1311, S04 PR1369, S05 PR1374, A09 PR1394, R02 예정
F17전체 큐 조회·mirror·indexdurable(service)S01 PR1320, S04 PR1369, S07 PR1377, N01 PR1441, R02 예정, R04 예정
F18이름 추정 이력pr·catalog(service)A14 PR1503
F19Feed 의존 이력·반복 findsocial(controller) · pr(service)A14 PR1503, U04 PR1553, R04 예정
F20실제 viewport 가상화ui-platform(ui useListWindow) · calendar·pr(ui)U04 PR1553, R04 예정
F21고정 canvas/zoom 대응 구조ui-platform(css) · nativeU03 PR1520, U06 예정, U07 PR1549, N01 PR1441
F22Token·primitive·플랫폼 일관성ui-platform(css·ui)U01 PR1317, U02 PR1523, U03 PR1520, U06 예정, U07 PR1549
F23실제 bundle/초기 실행 비용build(config) · ui-platform(asset) · shell(entry)G04 PR1315, U05 PR1565, B02 PR1356, R04 예정
F24SQL 원천·migration·wrapper 구조db-platform(sql·script)G01 PR1296, D03 PR1312, D11 PR1547, D12 PR1358, D13 PR1318, R01 PR1569
F25소스 모양 대신 행동 검사verification · 각 영역 test 계층G02 PR1310, D03 PR1312, R01 PR1569
F26Clock·UUID·scheduler·줄바꿈 재현성verification(test) · durable(service)G02 PR1310, S08 PR1350, R02 예정
F27Repair/rollover 전역 탐색stats(rpc·job)D01 PR1319, D10 PR1521, D11 PR1547, D12 PR1358, R04 예정
F28사본 검증·실제 복구durable(script data-copy·service) · build(config user-data-copy.yml)S10 PR1442, S11 PR1499, D13 PR1318, I01 PR1498, R03 예정, R05 예정, R06 예정
F29관측·혼합 부하·운영 증거build(test ops_observability·performanceBudgets) · shell(service)G04 PR1315, S11 PR1499, D08 PR1510, B02 PR1356, R04 예정, R05 예정, R06 예정
F30미사용 코드·잘못된 이름·오래된 문서docs · 각 영역 doc 계층 · 제외 목록(§3 근거 있는 제외)G01 PR1296, U07 PR1549, B02 PR1356, R01 PR1569, R06 예정

5-2. 추가 범위 C01–C08 → 영역

추가 범위내용책임닿는 영역실제 구현·시험 근거
C01전체 기능·공유 계층 커버리지G05이 장부 전체G05 PR1307, G01 PR1296, G03 PR1311, R01 PR1569, R05 예정, R06 예정
C02전체 DB 모델·제약·index·대표 쿼리D12db-platform(sql) + 기능 영역 rpc 행의 테이블 목록D12 PR1358, D03 PR1312, D04 PR1454, R04 예정, R05 예정
C03populated DB migration·잠금·backfill·재개D13db-platform(sql·script)D13 PR1318, D02 PR1352, D03 PR1312, D09 PR1445, R05 예정
C04CSS cascade·scope·override·중복U07ui-platform(css) + 기능 영역 css 행 12개U07 PR1549, U01 PR1317, U02 PR1523, U03 PR1520, U04 PR1553, U06 예정, R01 PR1569
C05서버 API·인증·계정·관리자 권한B01auth(api·rpc) · admin(api·rpc) · profile/social/group/onboarding(rpc)B01 PR1346, A07 PR1365, A03 PR1351, A05 PR1443, R02 예정, U06 예정
C06네이티브·SW·업데이트 생애주기N01native · swN01 PR1441, S01 PR1320, S07 PR1377, S08 PR1350, U03 PR1520, U06 예정, R02 예정, R05 예정
C07전체 인입·파일 처리I01import 전 계층I01 PR1498, A05 PR1443, A11 PR1516, D09 PR1445, S10 PR1442, R03 예정, R04 예정, U06 예정
C08환경·빌드·의존성·자원 경계B02build · admin(config) · native(config) · shell(config)B02 PR1356, G04 PR1315, U05 PR1565, R04 예정, R05 예정, R06 예정

5-3. 63개 ID → 영역

R01 현재 registry의 area/ledger planIds 합집합과63개 실행 목록을 대조해 누락0을 확인했다. 각 구현 SHA·담당 시험·예정6개는 최종 대조표를 따른다. 아래2026-09-07 설명의 파일 수는 역사 기록이다.

§3 의 계획 ID 칸을 모으면 63개 ID 전부가 적어도 한 영역에 붙는다(도구로 확인, 2026-09-07). 파일을 소유하지 않는 ID 는 다음과 같이 읽는다.

  • R02·R03·R04·R05·R06 — 통합 검증·리허설·릴리스. verification 영역의 계획 ID 로 붙였고, 각 영역 test 행의 증거를 소비한다.
  • G02·G03·G04 — 검증 기준선·타입 경계·성능 예산. 파일보다 계약을 소유하며 types·test 계층 행에 나타난다.
  • A15·U02·U03·U07 — 여러 영역의 route·ui·css 행에 동시에 나타난다. 통합 담당(운영 정본 §3)은 바뀌지 않는다.

6. 실행 계층 목록 (손으로 적은 부분)

§3 가 파일 수와 판정을 생성한다면, 이 절은 파일 이름만으로는 보이지 않는 라우트·진입점·잡 을 적는다. 실측 2026-09-07, main 3fdefeb3.

6-1. 라우트

플랫폼겹쳐 뜨는 층정의 위치
모바일home · feed · calendar · volume(리포트) · pr · search · profile · groupworkout · session · prDetail · daySummary · friendSession · friendScope · menu · legalcontrollers/navigationStore.ts(초기 탭은 URL 에서) · app.tsx/mobileApp.tsx
데스크톱home · session · calendar · logtable · favgroups · pr · volume · search · profile · admin오버레이(DkOverlay)·로딩 오버레이desktopApp.tsx
관리자(독립 셸)종목 전체·커스텀·세부·매핑·인입·Motra 인입·그룹·운영·신고추가 모달desktopAdminTabs.ts · vite/admin/adminShellView.ts

6-2. 진입점

종류실제영역
HTMLindex.html(앱, Vercel dist-vite) · admin/index.html(관리자, docs 사이트 /admin/)shell · admin
부팅src/react/vite/main.tsxAppRootmobileRoot/desktopRoot · vite/admin/main.tsxAdminStandaloneRootshell · admin
서비스 워커public/sw.js(정적) — 등록 조건 vite/offlineServiceWorker.tssw
API 핸들러(Vercel)api/account/delete.js · api/admin/impersonate.js · api/admin/users.js · api/auth/test-admin/session.js(로컬 e2e 전용) — _ 접두 파일은 공용 모듈auth · admin
Edge 함수(Supabase)wodup-start-import · wodup-process-import-jobs · stats-process-refresh-jobs (배포는 deploy.yml functions 잡)import · stats
워크플로deploy.yml(main=staging / production 레인) · policy-contract.yml(PR 검사: verify·migration-smoke·browser-journeys·viewport-matrix) · landing-queue.yml(라벨 병합 큐) · prod-smoke.yml(수동) · external-auth-smoke.yml(매일 Kakao) · user-data-copy.yml(매일 사본)build
네이티브android/app/src/main/java/com/dekerd/barbelic/MainActivity.kt · ios/App/App/AppDelegate.swift (Capacitor webDir: dist-vite)native

6-3. pg_cron 잡 (7)

주기부르는 함수영역
lift-guild-stats-refresh매분run_user_exercise_stats_refresh_cron(25)stats
lift-guild-pr-overview-snapshot-rollover매분run_user_pr_overview_snapshot_rollover(10)stats(pr 투영)
barbelic-stats-backfill-scan매시run_user_exercise_stats_backfill_scan_cron(50)stats
barbelic-exercise-usage-stats-refresh매시 23분refresh_exercise_usage_stats_v1()catalog
barbelic-exercise-catalog-changes-prune매일 03:40prune_exercise_catalog_changes_v1()catalog
barbelic-client-error-purge매일 04:17purge_client_error_events_v1()shell
barbelic-wodup-failed-staging-purge매일 04:27purge_wodup_import_failed_staging_v1()import

cron 잡 이름은 도구가 schema.sql 에서 실측해 등록 목록과 대조한다. 새 잡을 추가한 마이그레이션은 같은 PR 에서 등록 목록에 이름을 넣는다.

6-4. 기존 검사·계약의 재사용 목록

장부는 새 검사를 만들지 않고 아래 기존 게이트를 각 행의 "기존 검사" 칸에 연결했다.

게이트명령지키는 것
프런트 import 경계tests/react/frontendImportBoundaries.test.mjsUI → controller → api → domain → repository 흐름, 모바일/데스크톱 분리
타입 경계npm run check:ts-boundary-gate · check:ts-scopesuppression 금지·경계 어댑터
이중 키 허용 기준선npm run check:dual-keycamel/snake 잔재(A16 이 0 으로)
죽은 CSS 기준선npm run check:dead-css안 쓰는 선택자(U07 이 0 으로)
테스트 감사 manifestnpm run check:test-manifest등재 테스트 수정·삭제 신고
error-case 등록npm run check:error-cases38건의 관찰 요건·정리 격리
마이그레이션·배포check:migrations · check:deployment · schema:snapshot --check · db:preflight번호·스냅샷·랜딩
원본 불변tests/react/userFactColumnsContract · pgTAP user_fact_*유저 원본 등급 목록·DML 가드
법적 문서·정책 불변check:legal-documents · check:policies · check:policy-snapshots발행본 불변
배포 후check:remote-schema · smokeProduction 대조
화면 RPC 계약test/appScreenRpcContract · tests/react/screenRpcContracts계약 버전·페이로드

7. 인계

7-1. G03 (#1282) — 실제 도메인·공유 계층 목록

  • 도메인 경계 입력: §3 의 기능 영역 16개가 곧 도메인 후보다. 각 영역의 types·service·repository·rpc 행이 지금 port 가 어디에 흩어져 있는지(대부분 shell/repositorybarbelicRepository.tsshell/service 의 파사드)와 목적지 담당(A02~A06)을 적는다. G03 은 여기서 feature 별 좁은 port 를 정의하고 generic 하나로 묶지 않는다.
  • 시간대·정밀도·null/0·외부 provider·native bridge 의 계약 소유자: 시간대·날짜는 calendar·home·stats 의 rpc 행(D06·A06), 수치 정밀도·단위는 workout(A02·kgDisplay·setPurposePolicy)과 stats(D01·정책 파일), 입력 중 문자열/null/0 은 workout·plan 의 binding·controller 행(A12·A13), 외부 provider 는 auth service 행(A07·B01), native bridge 는 §4-4(N01). G03 은 이 담당을 계약문에 명시한다.
  • 라우트·overlay: §6-1. app shell(A15) 의 route/overlay 계약은 shell/route 행.
  • 읽을 파일 순서: 이 문서 §1-1(샘플 추적) → §3 영역별 표(해당 영역만) → docs/architecture/domain-service-boundaries.mddocs/data/rpc-catalog.md.

7-2. D12(미게시)·D13 (#1287) — DB 전수 범위

  • 테이블 77개의 영역 배정은 §4-2 표. 뷰 3·트리거 99·정책 90·함수 372 는 schema.sql 실제 상태 덤프(npm run schema:snapshot --check 로 고정)에서 같은 영역 규칙으로 읽는다 — D03 registry 가 생기면 registry 의 도메인 폴더가 §4-2 를 대체하고, 이 장부는 registry 를 가리키도록 갱신한다.
  • D12: 각 테이블·뷰·공개 RPC 를 "유지 근거 또는 수정·시험 증거" 에 연결하는 작업의 출발점이 §3 의 rpc 행(영역 16개)이다. D12 가 판정을 갱신한다(§1-3).
  • D13: migration 실행·검증 도구(scripts/migrations/**, supabase/tests/**)는 db-platform/script·test 행이며 D13 소유(운영 정본 §3). populated DB 위험 분류는 §4-2 의 테이블 목록 전부를 대상으로 한다 — 누락된 DB 영역을 추측하지 않는다.

7-3. R01 · R05 — 종료 검사

  • 명령: node scripts/architecture/check-coverage-inventory.mjs --strict. 종료 조건: 미분류 0 · 미등록 진입점 0 · 사라진 등록 0 · 장부 행 없는 계층 0 · 필수 영역의 미확인·미배정 0 · 문서 동기화 통과.
  • R01 은 퇴역 코드·테스트·문서를 정리하면서 규칙·제외 목록을 같이 줄인다(안 쓰는 규칙은 도구가 알린다). R05 는 각 필수 영역의 판정이 "유지 근거" 또는 "검증 완료(증거 포함)" 인지 센다 — "개선 진행" 이 남아 있으면 그 계획 ID 가 끝나지 않은 것이다.
  • 원 보고서 31개 + C01–C08 대응은 §5. 목록에 이슈가 연결된 사실과 품질 검증 완료를 같은 칸에 적지 않는다.

7-4. HQ 갱신안 (총괄·운영 정본은 HQ 가 통합)

  1. 총괄 §12 G05 행·Phase 1 집계·§7 장부 행·G05 카드 상태 — G05 PR 에서 적용(HQ 역할). 후속 G03/D12/D13/R01/R05 이슈에는 이 장부 §7 을 댓글로 인계.
  2. 운영 정본 §3 "앱 컨트롤러" 행의 src/react/appController.jsxsrc/react/appController.tsx — G05 PR 에서 한 단어 정정으로 적용하고 HQ 이슈(#1279)에 통지.
  3. package.json에 별칭 check:coverage-inventory 추가 — G05 PR은 당시 HQ 통합 슬롯 규칙에 따라 이 파일을 만지지 않았다. 후속 담당자는 배정된 범위와 검증을 확인하고 자동 큐로 통합한다. npm run check에는 넣지 않는다 — R01/R05 종료 검사와 staging 통합 점검에서 돌린다.

8. 조사 중 확인한 정정 사항

  • 운영 정본 §3 의 "앱 컨트롤러" 행이 적은 src/react/appController.jsx 는 실제 파일이 src/react/appController.tsx 다(2026-09-07 실측). G05 PR 에서 한 단어만 정정했다(통합 담당·절차는 손대지 않음).
  • docs/architecture/domain-service-boundaries.md 의 "Next Extraction Steps" 가 말하는 domains/catalogRepository.ts 등은 아직 없다 — A02~A06 의 목적지이며 장부는 존재하는 파일만 센다.
  • get_volume_overview 는 v4 와 구버전 v2 오버로드가 병존한다(docs/data/rpc-catalog.md). 제거는 R01.
  • test/(26파일)와 tests/react/(338파일) 두 테스트 루트가 병존한다. 장부는 둘 다 영역에 붙였고, 통합 여부는 G02/R01 판단이다.

A11 증거 인계 (2026-09-10, #1419)

이번 기록은 기존 생성 장부의 숫자나 다른 트랙의 완료 판정을 덮어쓰지 않는다. A11 구현·검증 기록의 후보와 병합 상태를 따른다.

장부 영역실제 구현 대응증거·잔존 담당
profile binding/resourcefeatures/profile/profileFeatureBinding.ts, profileResource.tsprofileFeatureBinding/profileResource 회귀. 온보딩·계정 삭제는 기존 A03/B01 경로 유지.
social binding/resourcefeatures/social/{feedResource,followingStore,feedSocialStore,friendScopeStore,moderationStore}.ts 및 React adapterfeedResource/socialResourceLifecycle: 중복 조회·페이지·확정 쓰기·권한·계정 전환. 화면 행 mapper는 A16.
group/notificationfeatures/group/*Store.ts, groupController/groupDesignAdaptergroupResourceLifecycle·기존 그룹/알림 회귀. 서버 권한·보드 저장 직렬화 유지.
import resourcefeatures/import/{importJobResource,importFeatureBinding}.ts공용 job 관찰 6건. 원문/파서/worker는 I01/D09, Wodup 기능 자동 검증은 #1478 제외.
공통 owner 조립tests/react/featureResourceAssembly.test.mjs3회 반복 계정 전환·dispose 후 listener 잔여 0.

A16/UI: legacy AnyRecord·행 mapper·props 투영을 리소스 사본으로 오인하여 지우지 않는다. R04: 단위 검사에서 같은 키 두 소비자=1조회, 피드 창 최대200행, 그룹128/친구96/인입8 캐시 항목 상한을 제공한다. 실제 긴 이력·모바일 프레임·메모리·Production 지연은 미측정이다. G05/R01: 경로 이전과 아래 제거 목록만 반영하며 필수 영역 전체를 검증 완료로 올리지 않는다.

D06 기간·달력 구현 증거 (2026-09-10)

#1416, 앱 기준 a1d462a8(D05 #1506 포함), release/v0.18.0 반영 완료(앱 PR #1518, 5b16a162). 작업 기록필드·영향 계약을 연결한다. 위 생성 장부의 역사 집계 숫자를 전체 재검증 결과로 바꾸지 않는다.

영역·계층소유·현행 변화행동 증거
stats/volume/calendar · SQL종목 기간·훈련 기간·달력 각 완성 행 assembler와 계산 writer 1개. writer 장부·schema/registry/model·forward migration 동기화동일 canonical full 비교 66행 차이 0, 경계·삭제·복합·평균 검증
stats · 작업/세대 경계D04 source 영향 + 완료된 D07 영향. PR/e1RM/checkpoint/applied writer는 소유하지 않음미완료/세대 불일치 거부, 실제 worker 실패 후 기존 applied 유지·재시도 full 수렴
stats/calendar · 테스트D06 DB 10건과 별도 writer 장부 검사, 출석·shared-set·시간·신원 pgTAP 재조준작은 append에서 세 표 물리 쓰기 123→11, 이전 연도 ctid 유지, 원본 33,127행 업그레이드 보존

브라우저/viewport·staging/Production 검증은 이번 D06의 release 통합과 별개다. D07의 실제 listed 연결은 명시 adapter를 교체하는 계약이며 D06의 새 선행이 아니다.

D07 순차 계산 구현 증거 (2026-09-10)

#1417, 앱 PR #1522 / e2833deerelease/v0.18.0 반영 완료. D05·D06·U03·D10 포함, 운영 미배포. 작업 기록, 체크포인트 계약에 구현·검증과 release 통합 상태를 기록한다. 위 역사 집계 수치는 변경하지 않는다.

영역·계층소유·현행 변화행동 증거
stats/pr·strength·score · SQL검증된 일자 상태로 PR·e1RM·최대반복수·점수 suffix 재생. full/fallback은 같은 정책 엔진과거 full SQL 5개와 비교, 같은 날·과거 변경·수동 기준·복합·null 상태 동치
stats · D06 영향재생 전후 실제 날짜·종목 변화, 공유 점수의 요청 밖 구성 종목 포함실제 소비 함수 전달·무변경 빈 목록·수동 기준 영향·불완전 결과 거부
stats · 세대/발행일자 캐시 1개 표 추가, 계산 중 비공개·종류별 seed 세대·원자 발행손상·정책/출처/세대 불일치 full 수렴, 대용량 발행·취소 보존, 원본 33,127행 업그레이드 보존
stats · 비용최신 반복수 4세트의 관측 쓰기 범위 축소DELETE/INSERT/UPDATE 240/244/488→0/4/8. 과거 수정 전체 시간 1,527→2,326ms 증가도 함께 기록

별도 D07/D06 DB 레인을 Precheck와 승격 full CI의 DB 검사에 연결한다. 브라우저·승격 full CI·staging/Production 검증은 이번 release 통합의 완료 근거에 포함하지 않는다.

U03 Desktop editor·intrinsic layout 증거 (2026-09-10)

#1421, 앱 PR #1520 · c1af78e8 release/v0.18.0 통합. Production 미반영. 작업 기록. 기존 생성 장부의 전체 영역 검증 상태·역사 집계를 바꾸지 않는다.

영역/계층변경·제거 경로증거
workout/plan 화면DesktopWorkoutEditorAdapter/useDesktopEditorModel, 계획 A13·완료 A12 분리; backfill extra 상태/조립 제거desktopWorkoutEditorParity/Units 및 실제 U02 어댑터 비교
workout 저장·복구Desktop save lifecycle, S08 snapshot publication·owner fence, S09 useRecoveryPanel typed 소비desktopWorkoutEditorLifecycle, completedWorkoutEditCutover, 실제 지연 저장/복구 browser
UI host/CSScanvas width/height·zoom floor·resize handler 삭제, Grid/container·document scrolltests/browser/u03: viewport/실제zoom/keyboard, root style mutation 13→0
입력 초안shared formatted/performance raw 왕복 재검증workoutEditorFormattedInputs, raw 2분+3.초 보존

공유 controller/save/cache·raw parser의 최소 보완은 U02 담당과 커밋 단위로 교환했다. U07은 selector 인계, U06/N01/R04는 미실행 native 조합을 소비한다. 관리자 UI는 독립 저장소이므로 U03 앱 변경에 포함하지 않는다.

U02 — 모바일 운동·계획·복구 연결 증거 (2026-09-10)

#1420, 앱 PR #1523 · b0fa93ecrelease/v0.18.0에 반영됐다. Production 미반영. 작업 기록. 위 workout/plan의 모바일 입력 표면은 모바일 편집 연결 계약에 따라 A12/A13 typed view/command와 S08/A09 저장 수명으로 전환했다. RecoveryScreen은 S09 RecoveryPanelProps를 기존 recordsTool 스택에 연결한다. 이 행은 홈/프로필/리포트 등 다른 모바일 화면 전체를 완료로 바꾸지 않는다.

대상현재 경계증거
운동 입력·편집·완료mobileWorkoutEditor, mobileWorkoutFlow, mobileInputDraftmobileWorkoutEditor, mobileEditorInputLifecycle, mobileWorkoutFlowLifecycle 단위 검사
계획 입력·저장mobilePlanEditor, A13tests/browser/u02/mobile.spec.mjs: raw/IME/0, kg/lb/%, 분:초/km, 복합, 추가/삭제/재정렬
초안·지연 응답S08 IndexedDB 및 A09 저장 수명실제 모바일 binding으로 새로고침/취소, queued 완료 재진입 뒤 늦은 영수증
보관·복구S09 owner runtime + typed 화면목록/미리보기/확인/충돌 재확인/완료, 320/390/430px 검사

검증한 브라우저는 Chromium이며 서버 응답은 통제된 fixture다. Production 쓰기나 native OS 키보드/뒤로가기 전체를 검증했다고 집계하지 않는다. 배포 여부는 앱 PR/작업 기록으로 확인한다.

D11 — 통계 계산·세대 게시 통합 증거 (2026-09-10)

#1422, 앱 PR #1547 · d058cbb7release/v0.18.0에 반영됐다. Production 미배포. 작업 기록에서 오너 지시의 추가 precheck 생략·개별 검사·Merge Check·병합 상태를 확인한다. 이 절은 D11 소유 경계의 증거이며 G05 전체 영역의 완료 상태를 바꾸지 않는다.

대상현재 경계증거
단계 계산·게시D05 → D07 → D06 → snapshot, 공통 engine/publisher. 18개 출력·owner/source/policy/anchor/generation 완료 게이트D11 실제 DB의 누락·stale·원자성·실패 backoff 검사
변경 행 게시계산 행의 출처와 owner 게시 세대 분리, 요약 membership으로 최신·직전 조회안정된 동일 원본의 재사용 16표 I/U/D 0·전체 JSON/ctid 보존, 실제 수정/삭제의 무관 15표 행 보존
full/부분 동치동일 canonical ID·정책·anchor, 실제 full/증분 계산·게시 후 shadow rollback12개 원본 상태·11개 실제 incremental, 수치/논리 키/PR 근거/4종 DTO 차이 0·외부 비노출
이관·첫 계산full 기본, owner 첫 full, 구 processing/failed/pending scope·attempts 보존실제 migration 이관·중단·재실행, populated 원본 33,127행 보존
v5/A06/A10/A11저장/조회 공개 서명은 adapter, requested/applied/stale 의미 유지기존 영수증·동시 저장·DTO·freshness 회귀와 660세션 수렴 검사

Production cohort 설정·배포·승격 full CI는 R05/R06에서 확인한다. 하위 계산 함수의 privileged 서명은 남아 있으며 활성 worker·유지보수 진입점이 공통 orchestration을 사용한다.

A15 기능별 binding 증거 (2026-09-10)

#1531의 실제 feature/화면/route 소유와 실행 증거는 적용 기록통합 계약 §10에 있다. 실제 206필드 공용 context를 제거했고 신규 미분류 65경로를 앱 실행 목록에 등록했다. 생성 절의 역사 수치·영역 전체 판정은 바꾸지 않았다. runtime 1벌과 feature 구독/해제를 보존하며 A16/U05/R01의 잔여 경계를 연결한다. 앱 PR #1550의 merge 290eadb9가 release/v0.18.0에 포함됨을 확인했다. precheck 3,579 pass/0 fail/88 조건부 skip과 Merge Check 성공을 확인했으며 Production 검증 완료로 올리지 않는다.

D14 — 세션 원본 변경 행 저장 증거 (2026-09-10)

#1533, 앱 PR #1551 · 576dae9brelease/v0.18.0에 반영됐다. Production 미배포. 저장 계약, 작업 기록·원시 지표. 이 절은 D14 소유 경계의 구현 증거이며 G05 전체 검증이나 R01/R04/R05 완료로 집계하지 않는다.

대상현재 경계·제거한 비용행동 증거
세션 원본 writertyped 후보의 정규화 후 실제 변경만 UPDATE. 무조건 +10000 위치 이동 제거메모/동일 내용 자식 UPDATE 21→0, 무게 한 칸 21→1. 26개 시나리오의 ID별 DML·미변경 JSON/ctid·출처 보존
단위·파생 계산트리거와 writer가 같은 typed core 사용, 실제 영향 자식만 재투영반올림·null/누락·숨긴 원본·체중/배율·복합 동치. 기존 성공 23개는 과거 writer 최종 값과 동일
위치·실패·복원실제 이동 행만 빈 양의 위치로 먼저 이동, 원래 검증/보호/영수증/세대 유지앞 삽입/큰 위치값 3개 기존 실패→성공. 중간 실패 전체 롤백·stale/owner/ID/인입 read-only·replay·복원 후 편집
이관·필수 게이트함수 migration 2개, 새 원본 열·데이터 일괄 수정 없음. 새 D14 DB 검사를 precheck/승격 DB 레인에 연결populated 8,854원본 보존·중단/재실행. precheck 3,572 pass·pgTAP 143파일/2,825 assert·큰 이력 수렴 통과, Merge Check 성공

R01은 활성 v5 writer/trigger 경계와 남은 전체 payload 검증을, R04는 고정 fixture의 전후 DML/WAL/시간을 전체 workload 비용과 구분해 소비한다. R05는 두 함수 migration의 populated 증거를 실제 전체 release upgrade와 결합한다. D11의 계산·게시와 완료 저장 enqueue는 이 변경에서 생략하지 않았다.