club_groups (신설)
id uuid PK
club_id uuid FK → clubs
name text ≤ 20자
sort_order int 실력 순위, 0 = 최상위
target_size int? nullable
is_active bool
club_members (+2 컬럼)
auto_group_id uuid? FK → club_groups
manual_group_id uuid? FK → club_groups
effective = manual_group_id ?? auto_group_id (NULL = 미배정)
club_regular_meets (클린 브레이크)
✕ participation_group_label text (삭제)
✕ participation_group_expected_size int (삭제)
✓ participation_group_id uuid FK → club_groups
— 그 모임의 실제 로스터 = 그 조의 실제 멤버 목록sort(club_elo DESC, matches DESC, joined ASC) → fill by sort_order up to target_size (수동 고정 인원이 자리 차지)전원: 활동 멤버 × 참석률 / 조: 조 현원 × 참석률Σ 모임별 예상전원제: max(모임별) / 조별: Σ 조 정원SHIPPED 2026-08-14 (migration 00476). club_groups + auto/manual 배정 + 재편성 트리거가 라이브 — 세 축(배정 방식 B · 재편성 시점 B · 순위 기준 A)은 club-groups.rules.ts가 직접 인용하는 확정 결정 기록이고, §5 화면 목업은 실제 shipped 화면(ClubGroupsSection · RegroupPreview · MemberActionModal/MemberGroupModal · ranking-tab 조별 토글)을 그린 것이다.
packages/app/src/domain/rules/club-groups.rules.tspackages/features/clubs/src/settings/club-groups-section.tsxpackages/features/clubs/src/settings/regroup-preview.tsxpackages/features/clubs/src/members/member-modals.tsxpackages/features/clubs/src/club-detail/ranking-tab.tsxpackages/features/clubs/src/club-members-screen.tsxpackages/app/src/domain/rules/tier.config.ts