# 8-1 · 18-2 교차검증 이력 · 2026-11-14

세션 `2dfaf3de-579c-44e1-83d9-b44f27111604`에 연결된 Aja 실행 22건이다. 작성 모델은 Claude Fable 5.2이고 검토 모델은 다른 계열인 `azure/gpt-5.4-mini`(1차)와 `azure/gpt-6.1-sol`(2차 이후)이다. 판정은 전달한 검토 자료의 범위에 한정한다. `cross-review --accept`는 쓰지 않았고, 모든 판정을 그대로 적는다.

| 시각 | 검토 범위 | 검토 모델 | 판정 | Aja 실행 ID | Aja 기록 USD |
| --- | --- | --- | --- | --- | ---: |
| 15:06:05 | 8-1 DP 핵심(민감도·회계·AUROC 상한·DP-SGD 호환성) | `azure/gpt-5.4-mini` | FIX_REQUIRED | `4f86f4ca-bb11-4289-89f0-7cf2e77def10` | 0.014740 |
| 15:06:05 | 18-2 2단 Fail-Safe Gate(Gate B 수학과 커널) | `azure/gpt-5.4-mini` | FIX_REQUIRED | `2b156a55-f3cd-4f4f-8a8d-699359d32abe` | 0.015907 |
| 15:06:06 | 18-2 DUR 규칙 엔진과 MIMIC-IV 사상 | `azure/gpt-5.4-mini` | FIX_REQUIRED | `5decf2b7-d931-479e-9c7d-d298b1018ab7` | 0.014937 |
| 15:06:10 | 8-1 TSTR/TRTR 판정과 프라이버시 게이트, 실측 대조 | `azure/gpt-5.4-mini` | UNCLEAR | `3f1320da-d050-4195-a7ed-87ec6d3455d3` | 0.021457 |
| 15:09:22 | 8-1 TSTR/TRTR 판정과 프라이버시 게이트, 실측 대조 | `azure/gpt-6.1-sol` | PASS | `cab36461-fad2-45dc-922d-734e36e06915` | 0.034420 |
| 15:09:29 | 18-2 DUR 규칙 엔진과 MIMIC-IV 사상 | `azure/gpt-6.1-sol` | FIX_REQUIRED | `32225076-e835-431d-a3ba-f57d90fe2b8c` | 0.029794 |
| 15:09:37 | 18-2 2단 Fail-Safe Gate(Gate B 수학과 커널) | `azure/gpt-6.1-sol` | FIX_REQUIRED | `e353f210-38a7-4c4e-86a1-c14e4fa82e5e` | 0.035130 |
| 15:17:00 | 8-1 DP 핵심(민감도·회계·AUROC 상한·DP-SGD 호환성) | `azure/gpt-6.1-sol` | FIX_REQUIRED | `40a64817-7f5a-42e2-9ca1-f7a63ad9dc1e` | 0.040912 |
| 15:19:49 | 8-1 TSTR/TRTR 판정과 프라이버시 게이트, 실측 대조 | `azure/gpt-6.1-sol` | FIX_REQUIRED | `cb264ff4-25fa-4856-b49f-6d58e5f7cc16` | 0.029946 |
| 15:19:56 | 8-1 DP 핵심(민감도·회계·AUROC 상한·DP-SGD 호환성) | `azure/gpt-6.1-sol` | FIX_REQUIRED | `b11d90d2-c088-4b1a-be69-670301ccd1c1` | 0.031360 |
| 15:21:35 | 8-1 TSTR/TRTR 판정과 프라이버시 게이트, 실측 대조 | `azure/gpt-6.1-sol` | PASS | `a17a361c-05e7-4ca1-be7b-2f5e043796b9` | 0.032316 |
| 15:21:48 | 8-1 DP 핵심(민감도·회계·AUROC 상한·DP-SGD 호환성) | `azure/gpt-6.1-sol` | FIX_REQUIRED | `85834e34-0105-4462-910a-bf2b1fb92c75` | 0.032230 |
| 15:22:36 | 8-1 DP 핵심(민감도·회계·AUROC 상한·DP-SGD 호환성) | `azure/gpt-6.1-sol` | PASS | `fa1a5995-733d-4471-9d0e-4656a22cfdca` | 0.030352 |
| 15:32:55 | 18-2 감사 커널의 fail-closed와 감사 로그 | `azure/gpt-6.1-sol` | FIX_REQUIRED | `51dd2184-f8a3-4120-b32c-e820aaeb2b60` | 0.026396 |
| 15:32:59 | 18-2 Gate B와 drift 감시의 수학 | `azure/gpt-6.1-sol` | FIX_REQUIRED | `7fa17931-48c7-4699-9cc1-5d44e9a1b6c6` | 0.028948 |
| 15:33:03 | 18-2 DUR 규칙 엔진과 MIMIC-IV 사상 | `azure/gpt-6.1-sol` | FIX_REQUIRED | `87081e6a-738b-44f1-a223-9df9a2007e9b` | 0.031974 |
| 15:38:29 | 18-2 감사 커널의 fail-closed와 감사 로그 | `azure/gpt-6.1-sol` | FIX_REQUIRED | `f5f90e14-faec-45bc-b9fa-20203bc12f01` | 0.024800 |
| 15:38:31 | 18-2 DUR 규칙 엔진과 MIMIC-IV 사상 | `azure/gpt-6.1-sol` | FIX_REQUIRED | `1a3dd382-ea2b-49d1-acb5-6dcbaec32226` | 0.027640 |
| 15:38:32 | 18-2 Gate B와 drift 감시의 수학 | `azure/gpt-6.1-sol` | PASS | `49d99939-3dd7-4aac-883c-46e5bd53b2e2` | 0.027706 |
| 15:39:40 | 18-2 DUR 규칙 엔진과 MIMIC-IV 사상 | `azure/gpt-6.1-sol` | FIX_REQUIRED | `027efbd3-a57c-4dd8-8316-4c18e40d2936` | 0.025724 |
| 15:39:52 | 18-2 감사 커널의 fail-closed와 감사 로그 | `azure/gpt-6.1-sol` | PASS | `0b140e55-5eb2-4291-8260-ef7e205be864` | 0.026484 |
| 15:40:54 | 18-2 DUR 규칙 엔진과 MIMIC-IV 사상 | `azure/gpt-6.1-sol` | PASS | `71ded456-2751-42f8-b450-530652a39b97` | 0.029802 |

22건 합계 **$0.612975**, 건당 평균 **$0.027863** (8-1 9건 $0.267734, 18-2 13건 $0.345241). 금액은 하네스 기록의 `metering.provider_credit.charged_usd`다.

최종본에 대한 판정은 다섯 범위 모두 PASS다: 8-1 DP 핵심 `fa1a5995`, 8-1 판정·게이트 `a17a361c`, 18-2 Gate B·drift 수학 `49d99939`, 18-2 커널·감사 로그 `0b140e55`, 18-2 규칙 엔진 `71ded456`. 18-2의 Gate B 수학 범위는 그 뒤의 수정(원장 검증기, 규칙 엔진, 3.1절·5절 문장)이 건드리지 않은 발췌와 `conformal.py`에 대한 판정이다.

## 검토 자료

설계서 두 개가 각각 근거 합계 한도(32,768바이트)를 넘어 통째로 보낼 수 없었다. 원문을 절 단위로 그대로 옮긴 발췌를 만들고 해당 코드와 묶어 보냈다. 발췌 머리말에 원문의 SHA-256을 적는다.

- 8-1: 발췌 A(1.3절 DP-SGD 호환성, 2.1–2.6절) + `synth8/dp.py`, `synth8/generator.py`. 발췌 B(0절, 3.1–3.5절, 3.7절, 4절) + 실행 요약(`python3 -B -m synth8.digest`가 실행 문서에서 배열만 빼고 기계적으로 만든다), `evidence/synth8-audit.json`, `evidence/synth8-calibration.json`.
- 18-2: 발췌 A1(0절, 4.1–4.4절, 4.6–4.7절) + `dispense18/conformal.py`. 발췌 A2(4.5절, 5절) + `dispense18/kernel.py`, `dispense18/ledger.py`. 발췌 B(0절, 3절, 7절) + `dispense18/rules.py`, `evidence/dispense18-audit.json`.

## 지적과 조치

1차 검토 모델(`gpt-5.4-mini`)의 지적 가운데 실제 불일치는 18-2 품목 사상 하나였고 나머지는 문장을 정밀하게 고치는 데 썼다. 실제 결함은 대부분 2차 이후 모델(`gpt-6.1-sol`)이 찾았다.

| 과제 | 지적 | 조치 |
| --- | --- | --- |
| 8-1 | 빈 Poisson 배치에서 `noisy_mean`이 잡음 없는 빈 출력을 낸다(표집 여부 노출) | `clipped_sum`·`noisy_mean`이 공개 차원을 인자로 받아 항상 전 좌표에 잡음을 더한다. 시험 추가 |
| 8-1 | 모든 잡음 개수가 하한 아래면 `_postprocess`가 0으로 나눈다 | 그 실현값에서는 공개 사전분포(영평균·단위 공분산·균등 가중)로 복귀 |
| 8-1 | G0가 잠재 차원을 자료에서 읽어 빈 데이터셋에서 실패한다(한 행 데이터셋의 이웃과 구별됨) | 차원을 공개 설정으로 전달. 빈 자료와 한 행 자료가 같은 모양의 잡음 통계·원장을 내는지 시험 |
| 8-1 | `calibrate_sigma`의 "최소 잡음 배수" 주장이 탐색 구간 끝에서 거짓 | 계약을 정정(하한이 이미 만족하면 그대로 반환, 상한에서 미달이면 구간 밖으로 보고) |
| 8-1 | 2.5절의 $q=B/n$이 비공개 행 수에 의존 | $q$, $B$를 공개 상수로 고정하고 $n_{\text{ref}}$를 공개 참조 크기로 정의 |
| 8-1 | 2.2절 셀 평균 잡음 식이 합 잡음만 반영 | 합 잡음과 개수 잡음을 나눠 적고 근사임을 명시. 실행기가 두 항을 모두 낸다 |
| 8-1 | 0절이 정답 사례를 다섯이라고 과장 | 정답 사례 넷과 측정 대상(G0) 하나로 정정 |
| 8-1 | 후처리 비용 0, 원장 변환식, AUROC 상한의 적용 범위, 공발현 정규화의 "무관" 표현, 호환성 분류의 강제 여부가 모호 | 각 문장을 정확한 조건으로 다시 썼다(후처리 입력의 범위, 닫힌 식과 격자 최소화의 관계, 인접 자료 검정 한정, DP 통계 의존, 설계 규칙이며 현재 코드는 강제하지 않음) |
| 18-2 | 품목 사상이 문서(gsn/ndc/formulary)보다 좁게 GSN만 구현 | 세 식별자를 모두 보고 충돌하면 미매핑 |
| 18-2 | B3가 stratum 범주에서도 품목 조건부 $\alpha$를 주장. 사건에 정상 조제의 자동 통과가 포함 | 품목 범주(품목 조건부 $\alpha$)와 stratum 범주(보정 구성 가중 평균 $\alpha$, 품목별 $\alpha/w_y$)로 나누고 사건을 `AUTO_PASS` ∧ $E\ne y$로 정정 |
| 18-2 | B2의 Beta 지배 논증이 원자 분포에서 틀림, iid 가정 누락 | $F^{-1}(U)$ 표현으로 다시 증명하고 가정을 명시 |
| 18-2 | 고정 보정표를 재사용한 p-value에는 Ville 부등식을 쓸 수 없다 | 온라인 conformal p-value(`DriftMonitor`: 채점 뒤 기준에 추가)로 교체. 절단 구현은 $0<\epsilon\le1$의 supermartingale로 서술하고 격자를 검증 |
| 18-2 | 가림·반사·신뢰도·점수의 유효 범위 미검사, 음수 tick 인정 | 범위 밖 값은 예외로 재검수. 경계 사례 9건 추가 |
| 18-2 | 시간 초과가 보고된 tick만 본다 | 하네스의 범위로 명시하고 커널 밖 watchdog과 하류 인터록을 요구사항으로 추가 |
| 18-2 | `mimic_patient`가 날짜만 비교, 수치의 float 손실, 역전 구간이 CLEAR, 타임스탬프 앞 10글자만 검사, 소수 연령 절삭, `Decimal` 기본 28자리 반올림 | 전체 타임스탬프 비교, 정확 왕복 검사, 역전 구간 예외, 허용 형식 정규식, 정수 연령만, 120자리 문맥과 `Inexact` → UNKNOWN |
| 18-2 | `Ledger.open`이 head 없이 열림, `create(existing=[])` 허용, 비정수·불리언 논리 시계 | head 필수, 빈 기존 원장도 거부, 추가와 검증 모두 정수 시계만 |
| 18-2 | 3.1절이 참조 구현에 없는 보조 원천을 구현된 것처럼 서술 | 참조 구현이 읽는 열과 설계상 원천을 구분해 적음 |

교차검증 이전의 자체 검수에서 찾은 것 하나를 함께 적는다. 18-2 초안 커널은 감사 원장이 연결되지 않으면 commit을 성공으로 돌려주었고 본 벤치마크가 그 경로로 돌고 있었다. 원장 미연결을 commit 실패로 바꾸고, 대량 판정 10,200건을 사슬에 commit한 뒤 감사기가 그 사슬을 독립적으로 다시 만들어 head를 대조하게 했다.

조치 뒤 8-1의 시나리오 판정과 18-2의 벤치마크 판정은 바뀌지 않았다. 바뀐 것은 8-1 증거의 회계 블록(빈 배치 검사, 개수 잡음 항), 18-2 증거의 drift 감시·경계 사례·기록 사슬이다.

## 사이트 요약 파일 검토 (추가 4건)

사이트 통합 규약(`site-data/README.md`)에 따라 낸 `evidence/synth8-summary.json`, `evidence/dispense18-summary.json`을 각 감사 파일과 묶어 검토했다. 요약의 영·한 문구는 사이트에 그대로 실리고 수치는 감사 파일의 경로로 채워진다. 두 감사 파일에는 표시용 값(`benchmark`)만 더했고 기존 키와 판정은 그대로다.

| 시각 | 검토 범위 | 검토 모델 | 판정 | Aja 실행 ID | Aja 기록 USD |
| --- | --- | --- | --- | --- | ---: |
| 16:11:53 | 8-1 사이트 요약 문구와 감사 파일의 일치, 첫 검토 | `azure/gpt-6.1-sol` | FIX_REQUIRED | `c457fa54-1c5f-4bf5-abcd-f1fe6b1cb5c0` | 0.023040 |
| 16:12:24 | 8-1 사이트 요약 문구와 감사 파일의 일치, 최종 | `azure/gpt-6.1-sol` | PASS | `f1f9e067-1b0f-49d0-9bac-5312816015b7` | 0.021810 |
| 16:11:51 | 18-2 사이트 요약 문구와 감사 파일의 일치, 최종 | `azure/gpt-6.1-sol` | PASS | `a5e4fea8-c7ba-4e6f-8cc8-55d272f24015` | 0.020266 |
| 16:16:51 | 8-1 사이트 요약, 구조 상한 문장을 보정 증거에 연결한 뒤 재확인 | `azure/gpt-6.1-sol` | PASS | `f27504d6-f314-4b3b-8f74-57e85c70efe2` | 0.024400 |

네 건 합계 $0.089516. 앞의 22건과 합치면 26건 $0.702491이다. 8-1 첫 검토의 지적은 "실자료 학습 대비"라는 표현이 합성 입력만 쓴 결과를 실제 자료 성능으로 읽히게 한다는 것이었고, "같은 가상 세계의 기준 표로 학습한 모델 대비"로 고쳤다. 그 뒤 사이트 규약에 `extra` 문서가 생겨, 8-1 요약의 기준 생성기 구조 상한 문장을 `evidence/synth8-calibration.json`의 수치에 연결하고 한 번 더 확인했다. 두 요약 모두 최종본이 PASS다(검토 뒤 요약에는 이 표의 검토 행만 더했다).

## 범위

- 검토 대상은 발췌 안의 주장, 묶어 보낸 코드, 실행 요약·감사 결과의 상호 일치다. 설계서의 나머지 절(8-1의 1.1–1.2절·2.7절, 18-2의 1–2절·6절·8–9절)과 보내지 않은 모듈(`synth8/metrics.py`·`privacy.py`의 최종본, `dispense18/matcher.py`·`bench.py`·`audit.py`)은 단위 시험과 독립 감사가 다룬다.
- 실제 코호트·실제 영상 평가, G1 학습, 임상 타당성, 감사자 서명은 검토 대상이 아니다.
