본문으로 건너뛰기

ADR 0047 — 형사 portal Policy B (redacted) / C (opt-in) 평가 baseline

Status: Proposed — Pack 6.10 (Policy A, ADR 0046) 의 production 운영 후 Policy B / C 채택 여부를 결정할 측정 기준 정의.

배경

ADR 0046 Policy A (형사 사건 portal 자체 비노출) 가 Pack 6.10 + 6.13 layer 로 ship 됨:

  • 발급 시점: createPortalToken 패키지 함수가 criminal-* 거부
  • 사용 시점: validateTokenAction 도착 시점 case doc fetch + criminal-* 거부
  • UI: PortalLinkDialog 가 형사 사건 시 disabled Button

Policy A 는 가장 보수적인 default-safe 선택. 그러나 의뢰인 (피의자) 이 자기 사건 진행 상황을 자체 조회 못 하는 trade-off — 변호인 1:1 채널 부담.

ADR 0046 마지막 단락은 "production 운영 6개월 + 사용자 피드백 후 Policy B / C 별도 ADR" 이라고 명시. 본 ADR 은 그 평가의 baseline 정의.

검토 대상 정책 (ADR 0046 요약)

정책의뢰인 portal 노출PII 위험변호인 부담운영 복잡성
A (현재 ship)완전 차단0高 (1:1 채널)0
B (redacted)단계·죄명만 노출낮음中 (redact 로직)
C (opt-in)변호인 case-by-case 토글변호인 책임中 (UI + audit)

Baseline 측정 항목

Pack 6 production 6개월 이후 다음 데이터를 수집:

1. 사용량 (사무소 형사 사건 누적)

측정 항목목적Firestore 경로
형사 사건 총 등록 수 (tenant 별)Pack 6 도입 효과 측정tenants/{tid}/cases where recoveryType in criminal-*
portal 토큰 발급 시도 + 거부 카운트Policy A 가 실제로 막은 양activity log type=portal_token_blocked_criminal (신규 필요)
validateToken 도착 거부 카운트legacy 토큰 또는 우회 시도 양console.warn 로그 → ops 텔레메트리

2. 변호인 피드백 (signal 채널)

채널측정
ops/feedback FAB submissions"형사 사건 portal" 키워드 검색 → 요청 수
변호인 1:1 인터뷰 (분기)"의뢰인이 형사 사건 진행상황을 직접 묻나요?" 정성
support 문의 로그"포털 형사" 관련 문의 빈도

3. 보안 incident (Policy A 검증)

측정목표
형사 PII (criminalCoreFacts·정과·구속 사실) 의뢰인 외부 유출0 건 (Policy A 효과)
portal 토큰 누출 사고형사 사건 비대상이라 의도하지 않은 노출 0
법정 비공개 사건 portal 노출0 건

결정 트리

6개월 후 평가:

1. 형사 사건 등록 < 100 건/사무소 → Policy A 유지 (활용도 낮음)
2. 변호인 피드백 < 5 건 / 6개월 → Policy A 유지 (수요 적음)
3. 변호인 피드백 ≥ 5 건 + 의뢰인 자체조회 요청 명시

3-A. 피해자 PII 우려 안 거론 → Policy C 권장 (변호인 토글)
3-B. 피해자 PII 우려 거론 → Policy B 권장 (redacted)
4. 보안 incident 발생 → Policy A 강화 (외부 reviewer 추가)

Policy B (redacted) 권장 구현 가이드

채택 시:

  1. 신규 필드: caseData.portalRedaction?: { hidden: ("coreFacts"|"aggravated"|"detained")[] } — 변호인이 case-by-case 마스킹 선택
  2. portal view: criminalPhase + chargeName + (마스킹된) coreFacts 만 표시
  3. PII regex redact: 피해자 이름·금액 등 추정 정규식 — false positive 위험
  4. e2e: 형사 portal 진입 시 redact 동작 + 누출 0 검증

Policy C (opt-in) 권장 구현 가이드

채택 시:

  1. 신규 필드: caseData.criminalPortalEnabled?: boolean — 변호인이 사건 별 토글
  2. createPortalToken 분기: criminal-* + enabled=true → 발급 허용
  3. validateTokenAction 분기: 동일 검사 — fail-safe close 유지
  4. UI: CriminalInfoSection 에 "의뢰인 포털 활성화" 토글 + 경고 안내
  5. audit log: 토글 변경 사건 모두 활동 로그 + ops 알림

한 줄 본질 정합

의뢰인이 자기 사건 데이터에 접근하는 권리 vs 형사 PII 의 위험. 데이터 활용 (한 줄 본질) 자체가 침해되지 않으면서 사용자 가치 ↑ path 모색.

Policy A 가 default-safe 이라는 점에서 한 줄 본질의 "사무소가 자기 데이터로 자기 AI 학습" 에는 영향 0. Policy B/C 는 의뢰인 surface 확장이지 학습 자산 surface 확장 아님 — 본질 침해 없는 UX 확장 layer.

후속 작업

  • 이 ADR 의 측정 항목을 ops dashboard 의 "Pack 6 portal" 위젯에 자동 수집 (Pack 6.16)
  • 6개월 시점에 본 ADR 의 결정 트리로 정책 평가
  • 채택 시 Pack 6.20+ 에서 B/C 구현 ADR 신설

참고

  • ADR 0045 — Pack 6 형사 사건 도메인 정의
  • ADR 0046 — 형사 portal PII 노출 정책 (Policy A 선정)
  • Pack 6.10 — Policy A 발급 시점 구현 (PR #2355)
  • Pack 6.13 — Policy A 도착 시점 layer (PR #2357)