배경
#134 에서 펫 신원 등록의 기준 프레임↔영상 동일 출처 게이트(frames_from_video)를 추가하되, challenge 를 AI 오탐으로 제거한 전례에 따라 측정 없이 하드 리젝을 켜지 않고 섀도 모드로 배포했다(2026-07-29, enroll-pet-identity v23, FRAMES_FROM_VIDEO_ENFORCE=false).
오탐 소지: 클라 프레임 추출 시각이 Gemini 의 1fps 영상 샘플링 순간과 어긋나면 정상 사용자의 영상도 false 판정이 나올 수 있다(구조적 요인은 seizeh/pmdartae38c22에서 정수 초 격자 1/2/3/4s 로 제거 — 베타 측정 중 추출 격자 변경 금지, 측정 오염). 정상 사용자는 프레임을 자기 영상에서 뽑으므로 이 게이트의 거절은 대부분 오탐이고, 거절 비용이 크다(신원 등록 실패 → 사진 게이트 게시글 작성 전면 차단, 재심 경로 없음).
측정 — 표본은 개인 사용자 베타에서 나온다
날짜 기준이 아니라 이벤트 기준: purpose='pet_identity' AND result='pass' 행(성공 등록당 1행, v23~) 30건 도달 시 판단한다. 30건이면 오탐률이 0%대인지 수십%대인지 가르는 데 충분하다. 유입은 개인 사용자 클로즈드 베타(launch-checklist.md §6 — 업체 파일럿에서는 이 표본이 안 나옴).
select
count(*) filter (where fail_reason = 'frames_not_from_video_shadow') as false_verdicts,
count(*) as total,
round(100.0 * count(*) filter (where fail_reason = 'frames_not_from_video_shadow')
/ nullif(count(*), 0), 1) as false_pct
from photo_verifications
where purpose = 'pet_identity' and result = 'pass'
and created_at >= '2026-07-29';
_shadow 접미사는 강제 전환 후의 실제 거절 행(result='fail', fail_reason='frames_not_from_video')과의 영구 구분자다.
수용 리스크 (결정 기록)
클로즈드 베타 동안 섀도 윈도우 = 실제 노출 창이다 — 프레임 바꿔치기 구멍이 열린 채 실사용자가 돌아간다. 테스터가 신원 확인된 범위(섭외 업체·지인)라 노출 대비 측정 가치가 크다고 판단하고 수용한다(2026-07-29). 오픈 베타로 넓히기 전에 enforce 전환 여부 재검토 필수.
전환 절차
- 표본 30건 도달 시 위 쿼리로 오탐률 확인.
- 오탐률이 수용 가능하면(false 행의
ai_reason 을 직접 읽고 실제 오탐인지 표본 검토) FRAMES_FROM_VIDEO_ENFORCE=true + 재배포.
- 전환 직전에 게이트 로직을 순수 함수로 추출하면서 Deno 테스트 추가(false → 거절 회귀 테스트). Edge Function 층은 현재 자동 테스트 0건.
- 오탐률이 높으면: false 행 ai_reason 으로 원인 분류 후 프롬프트/추출 방식 조정 → 섀도 재측정.
백업 경로(일정 리스크 대비): 스토어 심사·테스터 유입이 늦어 발표 2주 전까지 표본이 안 모이면, 단말 1종 자가 표본 n=30 으로 중간 검증표를 먼저 만든다(베타 데이터와 배타적 선택 아님).
관련: #134, #136, seizeh/pmdart#212(거절 사유 한글 메시지 — 전환 시 자동 활성화), launch-checklist.md §6·§7
배경
#134 에서 펫 신원 등록의 기준 프레임↔영상 동일 출처 게이트(
frames_from_video)를 추가하되, challenge 를 AI 오탐으로 제거한 전례에 따라 측정 없이 하드 리젝을 켜지 않고 섀도 모드로 배포했다(2026-07-29, enroll-pet-identity v23,FRAMES_FROM_VIDEO_ENFORCE=false).오탐 소지: 클라 프레임 추출 시각이 Gemini 의 1fps 영상 샘플링 순간과 어긋나면 정상 사용자의 영상도 false 판정이 나올 수 있다(구조적 요인은 seizeh/pmdart
ae38c22에서 정수 초 격자 1/2/3/4s 로 제거 — 베타 측정 중 추출 격자 변경 금지, 측정 오염). 정상 사용자는 프레임을 자기 영상에서 뽑으므로 이 게이트의 거절은 대부분 오탐이고, 거절 비용이 크다(신원 등록 실패 → 사진 게이트 게시글 작성 전면 차단, 재심 경로 없음).측정 — 표본은 개인 사용자 베타에서 나온다
날짜 기준이 아니라 이벤트 기준:
purpose='pet_identity' AND result='pass'행(성공 등록당 1행, v23~) 30건 도달 시 판단한다. 30건이면 오탐률이 0%대인지 수십%대인지 가르는 데 충분하다. 유입은 개인 사용자 클로즈드 베타(launch-checklist.md §6 — 업체 파일럿에서는 이 표본이 안 나옴)._shadow접미사는 강제 전환 후의 실제 거절 행(result='fail', fail_reason='frames_not_from_video')과의 영구 구분자다.수용 리스크 (결정 기록)
클로즈드 베타 동안 섀도 윈도우 = 실제 노출 창이다 — 프레임 바꿔치기 구멍이 열린 채 실사용자가 돌아간다. 테스터가 신원 확인된 범위(섭외 업체·지인)라 노출 대비 측정 가치가 크다고 판단하고 수용한다(2026-07-29). 오픈 베타로 넓히기 전에 enforce 전환 여부 재검토 필수.
전환 절차
ai_reason을 직접 읽고 실제 오탐인지 표본 검토)FRAMES_FROM_VIDEO_ENFORCE=true+ 재배포.백업 경로(일정 리스크 대비): 스토어 심사·테스터 유입이 늦어 발표 2주 전까지 표본이 안 모이면, 단말 1종 자가 표본 n=30 으로 중간 검증표를 먼저 만든다(베타 데이터와 배타적 선택 아님).
관련: #134, #136, seizeh/pmdart#212(거절 사유 한글 메시지 — 전환 시 자동 활성화), launch-checklist.md §6·§7