ADR 0053: 표준 사건명 2층 라벨
배경
CEO 디렉티브 (2026-06-11): "민사 5분야 14종으로 한정하지 않고 실무에 사용되는 전분야를 포섭 가능했으면 한다. 라벨 불일치 문제는 제법 장애가 되는 문제."
ADR 0052 (general-civil) 가 목록 외 민사 사건의 등록 경로를 열었지만, 구조적 한계가 남는다:
- general-civil 내부가 비정형. 채무부존재확인·해고무효확인·근저당권말소가 전부 같은 라벨 → 유형별 통계·사무소 기억 매칭·exemplar selection 에서 라벨의 정보 가치가 0 이 된다. CEO 가 지적한 "라벨 불일치" 의 실체.
- 유형을 "빌려" 등록하는 오염은 여전히 가능. 전용 유형 14종의 경계 사건 (예: 계약 손배 vs 불법행위 손배) 은 라벨 선택 자체가 모호하다.
- 자동화 층의 라벨 공간을 늘리는 것은 답이 아니다. Pack 1개 = 약 10 PR (청구취지·시효·계산·서식·E2E). 전분야 × Pack 수준 자동화는 비현실적이고, 한 줄 본질 ("자기 데이터로 자기 AI") 은 자동화가 아니라 데이터 라벨 정합 을 먼저 요구한다.
핵심 관찰: 실무 전분야를 포섭하는 분류 체계는 이미 존재한다 — 법원 재판사무의 표준 사건명 (대여금·양수금·건물인도·소유권이전등기·채무부존재확인 …). 변호사가 매일 쓰는 어휘라 학습 비용이 0 이고, 사건번호·소장에서 AI 가 자동 추출할 수 있다.
결정
1. 라벨을 2층으로 분리
| 층 | 필드 | 라벨 공간 | 역할 |
|---|---|---|---|
| 자동화층 | recoveryType (CaseDomainType) | 민사 15종 활성 (불변) | 청구취지·시효·이자계산·도메인 필드·서식 선택 |
| 분류층 | standardCaseName (신규, 선택) | 법원 표준 사건명 사전 (~300종) + 자유 입력 | RAG 검색·사무소 기억 매칭·통계·승격 시그널 |
두 층은 독립이다. 분류층은 모든 사건 (전용 유형 포함) 에 달 수 있고, 자동화층은 기존 의미·동작 100% 유지 (additive optional — 마이그레이션 불요).
2. 표준 사건명 사전 — 큐레이션 자산
- 위치:
packages/business-logic/src/cases/standard-case-names.ts(pure, firebase-admin 의존 0) + deep export./cases/standard-case-names. ADR 0030 T7 패턴 — Client Component 가 직접 import (자동완성 UI). - 구조:
name(고유) ·group(금전·부동산·임대차·노동·가사·상속·회사· 행정·조세·집행보전·확인 등 실무 분야 그룹) ·aliases(통칭 — 예: 건물인도 ↔ 건물명도) ·domainTypeHint(전용 유형 매핑 — 대여금→debt 등 확신 매핑만). - 사전은 법원 내부 코드의 사본이 아니라 큐레이션 자산. 자유 입력을 항상 허용하므로 사전 누락이 등록을 막지 않는다 (ADR 0052 의 "목록 = 한계" 오인 재발 방지). 누락 사건명은 분포 집계로 드러나 사전에 후속 편입.
domainTypeHint값 ⊂CIVIL_CASE_DOMAIN_TYPES는 web 측 parity 테스트가 검증 (pure 파일이 mutation 파일create.ts를 import 하지 않기 위한 구조 — 2026-04-29 client bundle 사고 클래스 차단).
3. 입구 — 위저드 Step 1 사건명 검색 + AI prefill
- Step 1 (유형 선택) 상단에 "사건명으로 찾기" 자동완성: 사건명 선택 시
standardCaseName설정 +domainTypeHint로 유형 카드 자동 제안 (무매핑 → general-civil 제안). 라벨 불일치를 입구에서 차단. - AI prefill:
CasePrefillResponse에standardCaseName추가 — 소장·계약서 업로드 시 사건명까지 자동 제안. - 사건 상세에서 사후 편집 가능 (
updateCaseFields경로).
4. 활용 — RAG 쿼리 토큰
buildRelatedMemoryQuery · buildRagContextQuery 에 standardCaseName 토큰
추가. PII 무전파 원칙 적합 — 표준 분류 용어는 유형·서면·금액 bucket 과
같은 등급 (당사자명·금액 리터럴 아님).
5. 승격 closed-loop
scripts/aggregate-standard-case-name-stats.ts — general-civil 사건의
사건명 분포를 tenantDoc.stats.standardCaseNames 로 30일 롤링 집계 → ops
표면. 다음 Pack 승격 대상을 데이터가 지목 (ADR 0052 비범위 "수요 검증"
의 측정 장치).
6. 스키마 변경 지점 (additive optional)
apps/web/types/case.tsCase.standardCaseName?apps/web/app/(workspace)/cases/_lib/schemas.tsCasePayloadSchemapackages/business-logic/src/cases/create.tsCreateCaseInputSchema(.strict()라 web/pkg 동시 변경 필수)apps/web/lib/cases/schemas.ts위저드 Step 스키마- 사건 상세 SSR 직렬화 화이트리스트 (initialCase) — drift 시 silent 누락 (2026-05-05 사고 클래스) 주의
비범위 (후속 판단)
- 전분야 Pack 자동화 — 분포 데이터 누적 후 승격 의사결정 (본 ADR 은 측정 장치까지만).
- 형사 활성화 — dormant 유지 (2026-06-01 결정 불변). 사전도 민사·가사· 행정·집행 범위.
- 기존 사건 일괄 backfill —
--dry-run시드 스크립트 제공, 실행은 선택 (recoveryType→대표 사건명 추정 매핑).
영향
- 목록 외 사건의 라벨 정보 가치 복원 — "general-civil 한 바구니" 해소.
- 사무소 기억 매칭·RAG 검색의 분류 해상도 상승 (전용 유형 사건 포함).
- Pack 승격 우선순위가 추측에서 측정으로 전환.