# G3 Rupture & Repair Lab — 라이브 통합 증거 > 기준일: 2026-08-07 KST > 판정: **내부 제품 게이트 통과** > 데이터 경계: 고유 `dev:e2e` fixture만 보존하며 축어록·이메일·내부 토큰은 이 문서와 JSON 증거에 기록하지 않는다. ## 1. 구현 경계 - `app.rupture_episode`, `app.rupture_observation_event`, `app.rupture_reconciliation_revision`, `app.rupture_safety_reference`는 append-only 원장이다. - 텍스트·SSE·음성은 모두 durable 상담자/내담자 턴 UUID가 생긴 뒤 같은 공용 finalizer 런타임 감지 경계를 탄다. 2026-08-07 실 DB 실행은 이 가운데 텍스트 `submit_turn` 경로를 직접 증명했다. SSE·음성은 공용 훅 구조와 회귀 테스트 범위이며 이번 실 DB smoke가 각 transport를 별도로 호출한 증거는 아니다. - fast-loop 경고는 후속 durable turn pair로 `missed`, `partial`, `resolved`, `not_applicable` 중 하나로 재조정되며, safety는 참조만 하고 파열 분류 feature로 사용하지 않는다. - Scenario Director는 case/session/turn 기반으로 4~6턴 간격의 조건부 행동 cue를 선택한다. 9종 taxonomy·scenario UUID·선택 provenance는 engine metadata에만 있고, 가상내담자 prompt에는 자율성을 보존하는 cue만 전달한다. safety escalation에서는 선택과 engine 호출을 모두 중단한다. - 학습자와 교수자는 역할별 read model만 보며, 교수자 정정은 기존 관측을 수정하지 않고 supersede한다. ## 2. 자동 benchmark와 런타임 검증 | 증거 | 결과 | |---|---| | 합성 benchmark | 11 cases, 9 rupture types 전건 포함 | | 유형 탐지 | macro-F1 `1.0` | | 복구 상태 | accuracy `1.0`; missed/partial/resolved 포함 | | critical miss | `0` | | judge gaming | `0` | | 암기 문구 false resolution | `0` | | Scenario Director | 결정론·희소 주입·9종 순환·safety 중단·prompt/SSE 누출 차단 `11 passed` | | G3 scenario/runtime/store/core + session persistence | 부모 통합 재검증 `107 passed` | | G0~G8 계약·store·runtime 묶음 | `251 passed` | | 리뷰 UX | G3/G2/G1/session-review desktop+mobile `50/50 passed` | | 자동 runtime live smoke | 실제 `submit_turn`/공용 finalizer callback으로 3 episode·10 observations·3 reconciliations, missed/partial/resolved, learner/teacher projection 통과 | ## 3. 기존 실제 API·DB write 경계 `scripts/smoke-rupture-repair-api.py`를 DB와 engine이 모두 ready인 별도 API 인스턴스에 실행했다. 산출물은 `docs/ops/evidence/rupture-repair-live-api-2026-08-06.json`이다. - 실제 회기를 시작하고 모델 응답을 받은 뒤 종료했다. - 리뷰 응답이 상담자·내담자 durable turn UUID 2개를 노출하는지 확인했다. - 독립 내부 토큰을 가진 evaluator 경계로 관측을 추가했다. - 같은 관측 제출은 같은 episode/observation ID를 반환했고, 같은 idempotency key의 변경 payload는 `409`였다. - 동일 cohort 교수자는 조회할 수 있었고, 다른 학습자와 교차 cohort 교수자는 `404`였다. - 교수자 정정은 append-only observation으로 추가됐다. 같은 제출 재시도는 같은 ID, 변경 payload는 `409`였다. - 최종 학습자 read model은 `requested_view=counselor`, `clinical_claim_allowed=false`, `current_status=resolved`를 반환했고 총점 필드는 없었다. 이 smoke는 내부 write endpoint의 인증·멱등·RLS·교수자 정정 계약을 증명한다. 관측을 수동 POST했으므로 learner turn에서 detector가 자동 기동되는 증거로는 사용하지 않는다. 라이브 증거 식별자: - session: `85db5d45-8bf5-41e3-a3e6-39d86f95b277` - episode: `6ec0d355-26b1-4b49-ae14-5faa12fdd19c` - first observation: `94769626-5bc2-4a3e-84a6-15b63cf62e5d` - teacher correction: `aa45a871-f637-4b4f-9ff1-08f3c04f9524` ## 4. learner turn 자동 runtime chain 실 DB 증거 `scripts/smoke-rupture-runtime-auto.py`를 로컬 개발 PostgreSQL에 실행했고 결과를 `docs/ops/evidence/rupture-runtime-auto-live-2026-08-07.json`에 보존했다. - 실제 `sessions.submit_turn` → `turn_runtime.finalize_completed_turn` 공용 hook을 진입점으로 사용했다. - 외부 client engine과 fast evaluator만 결정론 seam으로 교체했다. rupture observation/reconciliation endpoint와 store append 함수는 smoke에서 호출하지 않았다. - 첫 learner turn의 정규화 평가가 durable counselor/client UUID와 함께 저장된 뒤 callback이 `rupture.detected → onset`을 자동 기록했다. - `missed`는 후속 repair turn 없이 실제 `end_session` callback으로, `partial`과 `resolved`는 두 번째 실제 learner turn callback으로 reconciliation했다. - 실 DB에는 3개 episode, 10개 append-only observation, 3개 reconciliation revision, 5개 structured learner-turn evaluation이 남았다. observation의 세션 밖 evidence turn 참조는 0건이었다. - fast/deep 각 1개씩, 세션당 2개의 `rupture-runtime-deterministic` model-run provenance를 확인했다. - 실제 read route에서 학습자는 `requested_view=counselor`, 교수자는 `requested_view=supervisor`였고 세 상태 모두 `status_source=deep_reconciliation`, `clinical_claim_allowed=false`, 총점 필드 없음이었다. 자동 증거 식별자: - missed session/episode: `132a3d88-4b05-40a3-ba07-2da50cbca320` / `9902f04c-0bdf-4a69-915c-9a60545b350f` - partial session/episode: `fb0bde41-45ca-45ca-bc83-0781fad93c8b` / `b0bf99da-fd48-42f2-869c-4aa3cda858c3` - resolved session/episode: `5361948f-233d-46ed-874e-f173a3415159` / `a9d69f08-ed33-48d5-b374-66753558c8b5` 재현: ```powershell C:\Users\encep\AppData\Local\Programs\Python\Python311\python.exe -X utf8 ` scripts\smoke-rupture-runtime-auto.py ` --out docs\ops\evidence\rupture-runtime-auto-live-2026-08-07.json ``` ## 5. UX 종료 조건 - 회기 리뷰는 유형·현재 상태·불확실성·근거/반대근거·fast→deep provenance를 독립적으로 보여준다. - 안전 신호는 파열 점수나 상태와 합치지 않고 별도 경계로 유지한다. - durable turn UUID를 이용해 근거 장면으로 이동할 수 있다. - 학습자는 로컬 자기주도 repair practice checklist를 사용할 수 있다. - 교수자만 append-only correction을 제출할 수 있고 재시도 UUID를 유지한다. - 데이터가 없거나 API가 일시 불가하면 임상적 정상으로 위장하지 않고 명시적인 empty/degraded 상태를 표시한다. 이 증거로 G3 텍스트 learner-turn 자동 원장 경계를 포함한 내부 제품 게이트를 닫는다. 개별 SSE/음성 transport의 실 DB 자동 detector smoke, 물리 마이크·공개 WSS·장시간 음성 증거는 이 실행 범위가 아니며 후자는 G7 Multimodal Alliance의 별도 외부 증거 게이트가 소유한다.