Pack 1 Phase 0 구현 체크리스트
기반 ADR: 0001~0006 전체 · Pack 1 Spec
개요
Pack 1 Phase 0 (4주, 56 eng-day) 착수·진행·종결 체크리스트. 2명 풀스택 병렬 가정. Go/No-Go 관문 명확.
착수 전 필수 (Phase 0 시작 전 완료)
🔴 ADR 0005 §10 Fail-Closed 2건 (Chair 결정)
- 사이버 배상책임보험 10억+ 가입 (4주·연 500~800만)
- 수임약정서·DPA 법률자문 완료본 배포 (4주·200만 자문비)
🔴 ADR 0006 Chair 우선 실행 1 (Amended 2026-04-20)
- AI·데이터 전문 변호사 자문 확보 (300만~700만, 2건 의견서)
- 공공누리 유형 확인 (국가법령정보·법고을 등 공공 판례 DB)
- 변호사법 §109·AI 가이드라인 서면 의견서 (면책 자료)
엘박스 스타터 계약 체결 — Chair 2026-04-20 "서비스는 엘박스와 독립" 방침 반영, retracted.
🟡 준비 작업 (병행 가능)
- 국가법령정보센터 DRF API 키 발급 (1~2일)
- Ko-LegalQA 100문제 변호사 섭외 (시니어 2명·주니어 1명, 예산 600만 중 Pack 1 분)
- Gemini API quota 상향 요청 (Vertex AI)
- Vertex AI Vector Search 인덱스 권한 설정
- Document AI (OCR) API 활성화
- 팀 구성 확정 (풀스택 2명·ML 1명·디자인 0.5명·변호사 자문 1명)
- Phase 0 seed 사무소 섭외 (dogfood 변호사 3명 + beta tenant 5개소)
- Monitoring·Pagerduty·Slack 알림 채널 구축
Phase 0 Week-별 진행 (4주)
Week 1 — 기초 인프라
엔지니어링 (P12·P17 영역, ~14 eng-day) — 13 eng-day 완료 (자율 세션 2026-04-20):
-
apps/web/lib/ai/provider.tsAiProvider인터페이스 신설 (2 ed) ✅ -
lib/ai/providers/gemini.tsGeminiProvider구현 (3 ed) ✅ -
lib/ai/client.ts→ providers 배럴 래퍼 리팩터 (기존 호출 0 수정) (1 ed) ✅ -
embeddingVersion필드 Day 0 유틸 + 규약 문서 (Firestore seed 는 실제 RAG 구현 시점) ✅ -
assertTenantFilter3중 방어:- Layer 1 런타임
guardedAdminCollectionGroup·guardedClientCollectionGroup+ 유닛 테스트 ✅ - Layer 2 ESLint
no-restricted-syntax+ 기존 7건 마이그레이션 ✅ - Layer 3 Sentry 알림 (Sentry 연결 선행 → Phase 1)
- Layer 1 런타임
-
assertEmbeddingVersion유닛 테스트 (silent corruption 방어) ✅ - Cloud Logging 구조화 로그 인프라 (
lib/logging/logger.ts) ✅
품질 (P15 영역):
- Ko-LegalQA v0.1 (Pack 1 기준 40문제 + 조문 30) 변호사 작성 착수
- Ragas 설치 ·
tools/eval/디렉토리 (1 ed) -
tools/eval/citation_validator.py스켈레톤 (국가법령정보 API 연동) (1 ed)
Week 2 — 계산 엔진 + 비식별화
계산 엔진 (P12 영역, ~12 eng-day) — 전체 완료:
-
apps/web/app/(workspace)/cases/[caseId]/_lib/debt-settlement.ts순수 함수 엔진- 법정충당 A방식 (이자→원본, 제477·479조) (3 ed) ✅
- 법정이율 코드 상수 테이블
lib/legal/statutory-rates.ts(1 ed) ✅ - KST 일할 계산 (
lib/utils/date-diff.ts, 초일불산입·말일산입 4조합) (2 ed) ✅ - 지정충당 (
appropriationOverride) 처리 (민법 제476조) (1 ed) ✅ - 정수 원·Math.floor 절사 (원미만) (1 ed) ✅
- 엔진 단위 테스트 17 케이스 (윤년·경계일·과납·지정충당·Error 검증 등) (3 ed) ✅
-
fast-checkproperty test 7 invariant × ~1,200 랜덤 (1 ed) ✅
비식별화 (P12·P7 영역, ~10 eng-day) — 3단계 완료:
- 1단 정규식
apps/web/lib/ai/redaction.ts(주민번호·계좌·전화·금액 광역화) + fail-closed (2 ed) ✅ - 2단 NER (Gemini zero-shot) — Chair 승인 후 착수 예정 (3 ed)
- 3단 재식별 스캐너
lib/ai/reidentification-scanner.ts— 패턴 탐지 (k-anonymity 집계는 Phase 1) (3 ed) ✅ - 4단 수동 검토 큐 UI (사무소 변호사만, 사무원 차단) — Week 3 UI 세션 (2 ed)
- 기존
cases/_lib/ai-helpers.ts:maskPII는 호환성 유지 (단순 마스킹)
Week 3 — 사건 상세 UI + CSV 파서
사건 상세 "채권계산" 탭 (디자인·풀스택, ~10 eng-day) — 대부분 완료 (2026-04-20 밤샘):
- 탭 추가 (
CaseDetailClient.tsx+_tabs/DebtSettlementTab.tsx) ✅ - 3뷰 토글 (요약·계산표·청구취지) ✅
- CSV 가져오기 모달 + Server Action 연결 ✅
- 스냅샷 저장 + 10건 목록 + diff 2개 비교 ✅
- 시맨틱 토큰 준수 · 반응형 · 접근성 (aria-label·sr-only·role) ✅
- 인라인 편집 테이블 ✅ (2026-04-20, PR #245) — 계산표 뷰 행별 연필 아이콘 →
AddRecoveryModal연동. 키보드 네비·완전 inline 고도화는 Phase 1 후속
CSV 파서 (Phase 0: 국민·카카오뱅크·토스뱅크 3개, ~6 eng-day) — 전체 완료:
-
_lib/bank-csv-parsers/BankAdapter인터페이스 + csv-utils + classifier + dedupe (1 ed) ✅ - KookminAdapter · KakaoBankAdapter · TossBankAdapter 3개 구현 (3 ed) ✅
- 적요 규칙 기반 분류 (성명·키워드·월 조합) (1 ed) ✅
- 중복 해시 dedupe (거래일+금액+적요 djb2 해시) (1 ed) ✅
- 파서 → 엔진 bridge (
csv-to-settlement-bridge.ts) ✅
CSV 모달 UI — 완료 (PR #238, 2026-04-20):
- 은행 드롭다운 · 채무자명 · 붙여넣기 · 10행 미리보기 ✅
-
importBankCsvActionServer Action · sourceHash 중복 방어 ✅ -
appropriationOverride자동 매핑 (이자·원금 키워드) ✅
Week 4 — 생성·PDF·Audit + 통합 테스트
청구취지 생성 (결정론 템플릿, AI 0, ~4 eng-day) — 완료 (PR #237, 2026-04-20):
- 3 프리셋 로직 (청구취지 · 준비서면 계산표 · CSV)
_lib/settlement-output/✅ - UI 클립보드 복사 버튼 (청구취지 · 계산표) · CSV 다운로드 링크 ✅
별지 계산서 PDF (~3 eng-day) — print CSS 로 선제 대응 (PR #244):
- A4 세로 7열 (거래일·적요·차변·대변·잔액·이자 기산일·이율 근거) ✅
- 수기 메모 여백·검토·결재 도장란 (P9 요구) ✅
- 정식 PDF 라이브러리 (@react-pdf/renderer vs pdf-lib) Chair 판단 후 교체
스냅샷 시스템 (~3 eng-day) — 완료 (PR #240·#241, 2026-04-20):
-
SettlementSnapshotSchemaZod +assertCurrentEngineVersion+SnapshotStaleError✅ -
computeSettlementDiff+summarizeDiff유틸 ✅ -
createSettlementSnapshotActionServer Action + 목록 onSnapshot 구독 ✅ - 스냅샷 2개 선택 → diff 4 카드 + 요약 한 줄 UI ✅
Audit 로그 (~3 eng-day) — 스키마 완료:
- Zod 5종 (ai·rag·docSign·winrate·redaction)
lib/audit/types.ts✅ - 보존 기간 매트릭스 (
AUDIT_RETENTION_DAYS) ✅ -
writeAuditLogServer Action + WORM 경로 (Chair 승인 후)
Feature Flag·킬스위치 (~1 eng-day):
-
features.infraHardening.debtSettlementFirestore metadata ✅ (2026-04-20, PR #248·#250) - Feature flag seed 스크립트 + dry-run ✅ (
scripts/seed-infra-debt-settlement.ts, PR #248) -
isDebtSettlementEnabled헬퍼 + 3개 Server Action 킬 스위치 ✅ (2026-04-21, PR #251)
통합·dogfood 테스트 (~5 eng-day):
- 내부 변호사 3명 dogfood 시작
- Ko-LegalQA v0.1 (100문제) CI 통과 확인
- Ragas 품질 측정 (Faithfulness 0.85+·Citation Precision 0.95+)
- End-to-End E2E 테스트: 사건 생성 → 대여·변제 입력 → 계산 → 스냅샷 → 청구취지 → PDF
Go/No-Go 관문 (Phase 0 종료)
All AND 조건 충족 시에만 Phase 1 진입:
정량 지표
- 대여금 계산 정확도 99.5%+ (10 단위 테스트 + property test 불변식 0 위반)
- 내부 변호사 3명 dogfood 주 3회+
- 엑셀 병행 이탈률 70%+ (dogfood 변호사 설문)
- Ko-LegalQA v0.1 Faithfulness 0.85+
- Citation Precision 0.95+ (hard gate, non-negotiable)
- Retrieval Recall@10 0.85+
- 편집률 중앙값 < 0.35
정성 점검
- 비식별화 4단 End-to-End 정상 작동 · 회로차단기 fail-closed 발동 확인
- Audit 로그 완결성 (5종 WORM 저장 검증)
-
assertTenantFilterCI 0건 우회 (PR 이력 확인) -
embeddingVersion미필터 silent corruption 방어 테스트 통과 - 재식별 스캐너 공공 판례 샘플 1% 수동 검토 통과
- 변호사 과실 배상 보험 가입 확인
- 수임약정서 표준 조항 법률자문 완료본 배포 준비
- 3건 외부 법률자문 의견서 수령 (공공누리·민간 계약·변호사법 §109)
법적·절차
- 변협 연수 pilot 1곳 (서울·경기 지역변회) 접촉
- 개인정보위 사전 협의 (비공식 간담회) 타진
- 별지 계산서 PDF 법원 제출 샘플 변호사 승인
첫 PR 순서 (Week 1 시작)
권장 머지 순서 (작은 PR 단위, 의존성 순):
PR #1 — AiProvider 인터페이스 (독립적)
apps/web/lib/ai/provider.ts신설interface AiProvider+ProviderIdtype- 단위 테스트 없음 (인터페이스만)
- 리뷰 포인트: ADR 0004 §4 Firebase AI Logic 단일 · ADR 0005 §2 정합
PR #2 — GeminiProvider + 배럴 래퍼 (PR #1 후)
lib/ai/providers/gemini.ts구현lib/ai/index.ts배럴 — 기존generateLegalDoc등 함수는 얇은 래퍼로 유지- 단위 테스트 (mock Gemini 응답)
- 리뷰: CLAUDE.md "use server" 원칙 · Server Action 시그니처 유지
PR #3 — embeddingVersion 필드 + seed
- Firestore 3개 컬렉션 확장
- seed 스크립트
scripts/seed-embedding-version.ts --dry-run필수 (CLAUDE.md 정책) - 기존 문서
"gemini-text-embedding-004"백필
PR #4 — assertTenantFilter 3중 방어
- 유닛 테스트 + CI AST 파서 + 런타임 Sentry
scripts/check-tenant-filter.ts추가- GitHub Actions
.github/workflows/tenant-filter.yml
PR #5 — 법정이율 상수 테이블
apps/web/lib/legal/statutory-rates.ts- 민사 5%·소촉법 12% (2019.6.1~)·상사 6%·이자제한 20%
- 단위 테스트
PR #6 — 계산 엔진 (순수 함수)
_lib/debt-settlement.ts- 10 단위 테스트 + fast-check property test
- Firebase 의존 0 확인 (CLAUDE.md)
PR #7 — 비식별화 4단
- 4개 작은 PR 로 쪼개기:
- #7a 정규식 1단 (fail-closed)
- #7b NER 2단 (Gemini zero-shot)
- #7c 재식별 스캐너 3단
- #7d 수동 검토 큐 UI (사무원 차단)
PR #8 — 사건 상세 UI (채권계산 탭)
- 인라인 편집 테이블 · 3뷰 토글 · 시맨틱 토큰
PR #9~12 — CSV 파서 3개 은행 어댑터 + 모달
PR #13 — 청구취지 결정론 템플릿
PR #14 — 별지 계산서 PDF
PR #15 — 스냅샷 시스템
PR #16 — Audit 로그 5종
PR #17 — Feature Flag 킬스위치
각 PR 조건:
- 크기 ≤ 500 LOC
- 작업 단위별 분리 (CLAUDE.md Git 컨벤션)
pnpm type-check·pnpm lint·pnpm test로컬 통과- ADR 근거 주석 필수 (PR 설명에)
- Co-Authored-By: Claude Opus 4.7 필수 (CLAUDE.md)
리스크 대응 플레이북
| 리스크 | 대응 |
|---|---|
| 법고을 공식 협약 지연 (9~12개월) | Phase 0 는 조문·법령 단독으로 진행 가능. 판례 본문 RAG 는 협약 성사 후 Phase 1+ |
| Gemini API 가격 인상 | 모델 티어링 (Flash-Lite 전환) · 소버린 전환 준비 가속 |
| 계산 엔진 엣지 케이스 발견 | features.infraHardening.debtSettlement 킬스위치 원격 롤백 |
| RAG 품질 저하 (Faithfulness 0.85 미달) | Phase 0 Week 4 품질 게이트에서 발견 · Phase 1 연기 |
| 콜드 스타트 누적 8~12초 | 핵심 RAG 경로 Cloud Run min=1 warm pool ($40/월) |
| 변호사 신뢰 붕괴 (Mata 재현) | 사건번호 재조회 자동 삭제 · DocSignGate 3단 체크 |
Phase 0 완료 후
Phase 1 (~12M) 착수 조건
- Phase 0 Go/No-Go 전 관문 통과
- 법고을 공식 협약 진척도 점검 (성사 시 공공 판례 RAG 도입)
- 개인정보위 비공식 간담회 완료
- Ko-LegalQA Phase 1 확장 300문제 변호사 섭외
- 팀 확장 (ML 엔지니어 2명·디자이너 1명)
Phase 1 주요 작업 요약
- B방식 정식 도입
- 지연손해금 자동 기산
- 시나리오 A/B
- AI 적요 분류 (weight 1)
- 공탁 이벤트 타입
- 시효 중단 플래그 연동
- 은행 5개 추가 (신한·하나·우리·농협·IBK) + 커스텀 템플릿
/legacyPhase 0~2 완성- 세대 간 지식 이전 kill feature
- DPIA 1차 수행 (Phase 1 말 18M)
관련 문서
- Pack 1 Product Spec
- 기능 정의서 5종
- 화면 설계서
- 데이터 모델
- ADR 0001~0006 전체