사이드바 개인화 시스템 — 스펙

서류작성 메뉴 = 변호사가 카탈로그(571종)에서 선택 · 운영도구 = 공통고정 (Jason 컨펌 2026-06-23)

핵심 개념

선택 풀legal_doc_catalog 571종 = 변호사가 골라 담는 메뉴 카탈로그
개인화서류작성('기능') 그룹만. 운영도구(고객관리·AR·브레인·보고서·설정)는 전원 공통 고정
구조 적합✓ shell.tsx에서 '기능' 그룹과 운영도구가 이미 코드상 분리 → 최소변경 가능

1DB — 사용자·서류 매핑

현황user_identities(email PK)만 존재, 사용자 설정 테이블 없음
신규user_doc_selections (mig 0050): email FK · doc_id(catalog.id) FK · pinned · sort_order · 복합PK(email,doc_id)
중요doc_name 아닌 doc_id 참조(카탈로그 개편에도 안 깨짐)
fallback선택 행 없으면 in_scope='core'(P0 9종) 기본세트 노출 → 신규 변호사 빈 화면 방지

2사이드바 동적 렌더

현황shell.tsx NAV_ITEMS 전부 하드코딩(서버렌더)
변경'기능' children만 상수에서 분리 → 렌더 시 legal_doc_catalog ⨝ user_doc_selections (by email)로 동적 생성. 나머지 노드는 상수 유지
그룹카탈로그의 tab/feature_group로 그룹 구조 유지(평면화 아님)
범위WorkspaceShell에 docNav 인자 1개 추가하는 최소변경

3메뉴 편집 (설정)

기능카탈로그 브라우즈 → 서류 추가/제거/정렬. 언제든 수정·교체
뱃지작성가능(AI 빌드됨, 현재 2종) / 준비중(메뉴엔 올라가나 작성기능 대기)
수요신호'준비중'을 많이 고른 서류 = 다음 작성AI 개발 우선순위. user_doc_selections group by로 자동 집계(별도 작업 불요)

4온보딩 선택 화면

시점회원가입 시 "자주 쓰는 서류를 고르세요" → 초기 사이드바 구성
UX그룹별 카탈로그 + 체크박스, 건너뛰기 시 core 기본세트
재사용3번 편집화면과 동일 컴포넌트 → 온보딩은 그 wrapper
개발 순서 (안전 우선):
① mig 0050 + fallback 렌더 (기존과 동일하게 보임) ② 설정 편집화면 (기존 변호사도 즉시 사용) ③ 작성가능/준비중 뱃지 + 수요집계 ④ 온보딩 선택화면 (가입 플로우)
온보딩을 마지막에 두는 이유: 가입 플로우를 늦게 건드려 리스크↓, 설정 편집부터 깔면 기존 유저가 바로 혜택. 블로커 없음 — 전부 shell.tsx+신규 마이그레이션, daemon 무관.