8월 7일까지 워킹트리에만 남아 있던 미커밋 작업을 커밋한다. 여러 사본 폴더(worktree·clone)에 흩어져 있던 중간 스냅샷을 정리하기 전에 원본을 git 이력으로 고정하는 것이 목적이다. - contracts/routes/services: measurement, outcome_trajectory, rupture_repair, deliberate_practice, calibration_transfer, supervision_research, multimodal_alliance, continuous_improvement 계열 신규 모듈과 테스트 - infra/db/init: 07~16 마이그레이션(측정 기반~calibration transfer 실행) - apps/web: 세션 리뷰 카드·관리 화면·E2E 스펙 추가 - docs/ops: G0~G8 라이브 통합·배포·롤백 증거 문서와 evidence JSON/PNG - scripts: smoke·ledger·릴리스 에이전트·NAS 프리뷰 운영 스크립트 engine.public 로그 .bak과 apps/web/test-results 산출물은 커밋에서 제외했다.
64 lines
4.1 KiB
Markdown
64 lines
4.1 KiB
Markdown
# G5 Calibration Mirror & Transfer — 라이브 통합 증거
|
|
|
|
> 기준일: 2026-08-06 KST
|
|
> 판정: **내부 제품 게이트 통과**
|
|
> 데이터 경계: benchmark는 교육용 합성 데이터이며 실제 인구집단 능력·위험·임상 결과를 주장하지 않는다.
|
|
|
|
## 1. 구현 경계
|
|
|
|
- 학습자는 외부 수행 관측을 보기 전에 역량·practice block별 성공 확률과 확신도를 revision으로 기록한다.
|
|
- 명시적으로 잠근 prediction history는 불가역이며, lock 뒤 revision은 API와 DB trigger가 모두 거부한다.
|
|
- 외부 수행 관측은 learner self-report와 분리된 runtime/evaluator 관점에서만 reveal된다.
|
|
- 역량별 calibration error, 95% bounded interval, over/underconfidence, baseline→recent 오차 변화를 총점 없이 계산한다.
|
|
- context, relationship style, difficulty, expression, scenario/phrase family가 달라지는 unseen transfer suite를 사용한다.
|
|
- 훈련 문구 암기와 undercoverage는 성공률이 높아도 transfer verification을 차단한다.
|
|
- subgroup drift는 최소 표본과 불확실성을 함께 표시하고 synthetic educational signal로만 취급한다.
|
|
|
|
## 2. 합성 benchmark와 자동 검증
|
|
|
|
| 증거 | 결과 |
|
|
|---|---|
|
|
| G5 core/store/API focused | `41 passed` |
|
|
| benchmark | 4 cases, expectation accuracy `1.0` |
|
|
| reveal 오염 차단 | post-lock contamination rejection `1` |
|
|
| 반복 보정 | baseline MAE `0.667` → recent MAE `0.267`, `improved` |
|
|
| 미지 전이 | 4/4 unseen varied cases, transfer verified |
|
|
| 암기 해킹 | memorized phrase false verification `0` |
|
|
| 합성 subgroup drift | max rate gap `0.667`, `drift_flagged`, 비임상 고지 |
|
|
| G5 UX | learner/teacher desktop+mobile `4/4 passed` |
|
|
| G1~G5 + 기존 회기 리뷰 | desktop/mobile `62/62 passed` |
|
|
| 웹 계약 | typecheck·production build 통과 |
|
|
|
|
## 3. 실제 API·DB 흐름
|
|
|
|
`scripts/smoke-calibration-transfer-api.py`를 DB와 engine이 모두 ready인 API 인스턴스에 실행했다.
|
|
산출물은 `docs/ops/evidence/calibration-transfer-live-api-2026-08-06.json`이다.
|
|
|
|
- 실제 회기 durable turn UUID 2개를 자기예측과 외부 수행 관측의 근거로 사용했다.
|
|
- prediction revision의 동일 제출은 같은 ID를 반환했고 변경 payload는 `409`였다.
|
|
- prediction history를 명시적으로 잠근 뒤 동일 lock 재시도는 같은 ID를 반환했다.
|
|
- 잠금 뒤 두 번째 revision은 DB 불변식까지 도달해 `422`로 거부됐다.
|
|
- 독립 내부 토큰으로 runtime 수행 관측을 기록했다. 동일 제출은 같은 ID, 변경 payload는 `409`였다.
|
|
- 학습자 projection은 `learner`, 동일 cohort 교수자는 `supervisor`를 반환했다.
|
|
- 다른 학습자는 대상 조회 `403`, 교차 cohort 교수자는 `404`였다.
|
|
- 모든 read model은 총점 없이 `clinical_claim_allowed=false`를 유지했다.
|
|
- `calibration-mirror-g5@1.0.0`, `unseen-transfer-g5@1.0.0` 측정 도구를 각 construct로 분리해
|
|
영구 measurement catalog에 등록했다.
|
|
|
|
라이브 증거 식별자:
|
|
|
|
- session: `e3e07503-7033-41ea-808b-89bab82d86f1`
|
|
- prediction history: `31552615-8910-4543-b1e3-540867c15ba4`
|
|
- prediction revision: `f7990785-ee83-4e7b-acde-6810068f5a5e`
|
|
- prediction lock: `9f90a933-b23f-4627-8bae-02782c2cfa39`
|
|
- performance observation: `1ff98bee-41cb-4317-a345-b21b820b818e`
|
|
|
|
## 4. 자기주도·교수자 UX 종료 조건
|
|
|
|
- 학습자는 예측 revision을 검토한 뒤 불가역 lock의 의미에 명시 동의해야만 외부평가 reveal을 진행한다.
|
|
- 오차·95% 구간·과신/과소신·반대근거와 다음 메타인지 연습을 역량별로 읽는다.
|
|
- 전이 카드는 네 변주 축 coverage와 암기 문구 차단 사유를 보여주며 성공률 하나로 숙련을 선언하지 않는다.
|
|
- 교수자는 cohort learner projection과 append-only correction만 사용할 수 있고 prediction/lock/evaluator write는 받지 않는다.
|
|
- API 불가·관측 부족·합성 drift를 각각 degraded, insufficient evidence, synthetic signal로 명시한다.
|
|
|
|
이 증거로 G5 내부 제품 게이트를 닫고 G6 Supervision & Research OS를 BUILD로 승격한다.
|