G0~G8 성과·동맹 측정 OS 작업 일괄 고정

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 산출물은 커밋에서 제외했다.
This commit is contained in:
Yun Chan 2026-08-08 01:30:53 +09:00
parent 93dd8f82d7
commit 16e791e044
390 changed files with 243188 additions and 499 deletions

View file

@ -0,0 +1,167 @@
{
"schema_version": "vignette.outcome-trajectory-benchmark.v1",
"expected_arc": {
"arc_id": "oas-g2-arc-001",
"title_ko": "교육용 초기 5회기 기대 궤적",
"data_classification": "synthetic_educational",
"clinical_claim_allowed": false,
"provenance_note": "교육용 합성 사례의 결정론 테스트 분포이며 실제 내담자, 임상 규준, 치료 효과 또는 진단 예측을 나타내지 않는다.",
"distributions": [
{"session_no": 1, "axis": "distress_load", "mean": 0.70, "standard_deviation": 0.10, "lower_reference": 0.50, "upper_reference": 0.90, "sample_size": 200, "expected_direction": "lower_is_better"},
{"session_no": 1, "axis": "daily_functioning", "mean": 0.30, "standard_deviation": 0.10, "lower_reference": 0.10, "upper_reference": 0.50, "sample_size": 200, "expected_direction": "higher_is_better"},
{"session_no": 1, "axis": "learning_engagement", "mean": 0.40, "standard_deviation": 0.10, "lower_reference": 0.20, "upper_reference": 0.60, "sample_size": 200, "expected_direction": "higher_is_better"},
{"session_no": 2, "axis": "distress_load", "mean": 0.62, "standard_deviation": 0.10, "lower_reference": 0.42, "upper_reference": 0.82, "sample_size": 200, "expected_direction": "lower_is_better"},
{"session_no": 2, "axis": "daily_functioning", "mean": 0.40, "standard_deviation": 0.10, "lower_reference": 0.20, "upper_reference": 0.60, "sample_size": 200, "expected_direction": "higher_is_better"},
{"session_no": 2, "axis": "learning_engagement", "mean": 0.48, "standard_deviation": 0.10, "lower_reference": 0.28, "upper_reference": 0.68, "sample_size": 200, "expected_direction": "higher_is_better"},
{"session_no": 3, "axis": "distress_load", "mean": 0.54, "standard_deviation": 0.10, "lower_reference": 0.34, "upper_reference": 0.74, "sample_size": 200, "expected_direction": "lower_is_better"},
{"session_no": 3, "axis": "daily_functioning", "mean": 0.50, "standard_deviation": 0.10, "lower_reference": 0.30, "upper_reference": 0.70, "sample_size": 200, "expected_direction": "higher_is_better"},
{"session_no": 3, "axis": "learning_engagement", "mean": 0.56, "standard_deviation": 0.10, "lower_reference": 0.36, "upper_reference": 0.76, "sample_size": 200, "expected_direction": "higher_is_better"},
{"session_no": 4, "axis": "distress_load", "mean": 0.46, "standard_deviation": 0.10, "lower_reference": 0.26, "upper_reference": 0.66, "sample_size": 200, "expected_direction": "lower_is_better"},
{"session_no": 4, "axis": "daily_functioning", "mean": 0.60, "standard_deviation": 0.10, "lower_reference": 0.40, "upper_reference": 0.80, "sample_size": 200, "expected_direction": "higher_is_better"},
{"session_no": 4, "axis": "learning_engagement", "mean": 0.64, "standard_deviation": 0.10, "lower_reference": 0.44, "upper_reference": 0.84, "sample_size": 200, "expected_direction": "higher_is_better"},
{"session_no": 5, "axis": "distress_load", "mean": 0.38, "standard_deviation": 0.10, "lower_reference": 0.18, "upper_reference": 0.58, "sample_size": 200, "expected_direction": "lower_is_better"},
{"session_no": 5, "axis": "daily_functioning", "mean": 0.68, "standard_deviation": 0.10, "lower_reference": 0.48, "upper_reference": 0.88, "sample_size": 200, "expected_direction": "higher_is_better"},
{"session_no": 5, "axis": "learning_engagement", "mean": 0.72, "standard_deviation": 0.10, "lower_reference": 0.52, "upper_reference": 0.92, "sample_size": 200, "expected_direction": "higher_is_better"}
]
},
"cases": [
{
"case_id": "oas-g2-bench-001",
"title_ko": "기대 범위 안의 연속성과 별도 safety 참조",
"sessions": [
{"session_no": 1, "axes": [
{"axis": "distress_load", "value": 0.70, "confidence": 0.92, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b001-s1-distress"]},
{"axis": "daily_functioning", "value": 0.30, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b001-s1-function"]},
{"axis": "learning_engagement", "value": 0.40, "confidence": 0.88, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b001-s1-engagement"]}
], "relationship_events": [
{"event_id": "b001-goal-agreement", "session_no": 1, "event_type": "goal_agreement", "visible_to": ["client", "counselor", "evaluator", "supervisor"], "summaries": {"client": "첫 회기에는 수면 부담을 먼저 살피기로 합의했다.", "counselor": "내담자와 수면 부담 확인을 첫 목표로 합의했다.", "evaluator": "양측 발화로 수면 부담 우선 목표 합의가 확인됐다.", "supervisor": "수면 부담을 첫 목표로 명시적으로 합의했다."}, "evidence_refs": ["b001-s1-turn-04"]}
]},
{"session_no": 2, "axes": [
{"axis": "distress_load", "value": 0.62, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b001-s2-distress"]},
{"axis": "daily_functioning", "value": 0.40, "confidence": 0.91, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b001-s2-function"]},
{"axis": "learning_engagement", "value": 0.48, "confidence": 0.89, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b001-s2-engagement"]}
], "safety_signals": [{"safety_event_id": "b001-safety-001", "session_no": 2, "risk_level": "high", "escalated": true, "evidence_refs": ["b001-s2-turn-07"]}], "relationship_events": [
{"event_id": "b001-private-rupture", "session_no": 2, "event_type": "unresolved_rupture", "visible_to": ["client", "evaluator", "supervisor"], "summaries": {"client": "과제를 거절하면 실망시킬까 봐 동의한 척했다.", "evaluator": "표면 동의 뒤 과제 부담이 남아 있는 철수형 균열이 관찰됐다.", "supervisor": "과제 합의가 표면 순응인지 다음 회기에 확인할 필요가 있다."}, "evidence_refs": ["b001-s2-turn-11"], "resolved_by_event_id": "b001-repair"}
]},
{"session_no": 3, "axes": [
{"axis": "distress_load", "value": 0.54, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b001-s3-distress"]},
{"axis": "daily_functioning", "value": 0.50, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b001-s3-function"]},
{"axis": "learning_engagement", "value": 0.56, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b001-s3-engagement"]}
], "relationship_events": [
{"event_id": "b001-repair", "session_no": 3, "event_type": "repair_confirmed", "visible_to": ["client", "counselor", "evaluator", "supervisor"], "summaries": {"client": "과제 부담을 솔직히 말한 뒤 더 작은 연습으로 바꿨다.", "counselor": "과제 부담을 확인하고 내담자가 선택한 작은 연습으로 재합의했다.", "evaluator": "부담 확인, 상담자 기여 인정, 후속 합의가 모두 관찰됐다.", "supervisor": "2회기 미해결 균열이 3회기 재합의로 복구됐다."}, "evidence_refs": ["b001-s3-turn-08"]}
]},
{"session_no": 4, "axes": [
{"axis": "distress_load", "value": 0.46, "confidence": 0.91, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b001-s4-distress"]},
{"axis": "daily_functioning", "value": 0.60, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b001-s4-function"]},
{"axis": "learning_engagement", "value": 0.64, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b001-s4-engagement"]}
]},
{"session_no": 5, "axes": [
{"axis": "distress_load", "value": 0.38, "confidence": 0.92, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b001-s5-distress"]},
{"axis": "daily_functioning", "value": 0.68, "confidence": 0.91, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b001-s5-function"]},
{"axis": "learning_engagement", "value": 0.72, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b001-s5-engagement"]}
]}
],
"expected": [{"session_no": 1, "status": "on_track"}, {"session_no": 2, "status": "on_track"}, {"session_no": 3, "status": "on_track"}, {"session_no": 4, "status": "on_track"}, {"session_no": 5, "status": "on_track"}],
"forbidden_claims": ["high safety event를 outcome deterioration로 합산", "합성 궤적을 실제 치료 효과로 표시"]
},
{
"case_id": "oas-g2-bench-002",
"title_ko": "3회기부터 여러 축에서 악화되는 조기경보",
"sessions": [
{"session_no": 1, "axes": [
{"axis": "distress_load", "value": 0.70, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b002-s1-d"]},
{"axis": "daily_functioning", "value": 0.30, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b002-s1-f"]},
{"axis": "learning_engagement", "value": 0.40, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b002-s1-e"]}
]},
{"session_no": 2, "axes": [
{"axis": "distress_load", "value": 0.75, "confidence": 0.84, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b002-s2-d"]},
{"axis": "daily_functioning", "value": 0.30, "confidence": 0.85, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b002-s2-f"]},
{"axis": "learning_engagement", "value": 0.40, "confidence": 0.82, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b002-s2-e"]}
]},
{"session_no": 3, "axes": [
{"axis": "distress_load", "value": 0.82, "confidence": 0.88, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b002-s3-d"]},
{"axis": "daily_functioning", "value": 0.24, "confidence": 0.87, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b002-s3-f"]},
{"axis": "learning_engagement", "value": 0.32, "confidence": 0.86, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b002-s3-e"]}
]},
{"session_no": 4, "axes": [
{"axis": "distress_load", "value": 0.86, "confidence": 0.89, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b002-s4-d"]},
{"axis": "daily_functioning", "value": 0.20, "confidence": 0.88, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b002-s4-f"]},
{"axis": "learning_engagement", "value": 0.26, "confidence": 0.87, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b002-s4-e"]}
]},
{"session_no": 5, "axes": [
{"axis": "distress_load", "value": 0.90, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b002-s5-d"]},
{"axis": "daily_functioning", "value": 0.16, "confidence": 0.89, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b002-s5-f"]},
{"axis": "learning_engagement", "value": 0.22, "confidence": 0.88, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b002-s5-e"]}
]}
],
"expected": [{"session_no": 1, "status": "on_track"}, {"session_no": 2, "status": "watch"}, {"session_no": 3, "status": "deteriorating"}, {"session_no": 4, "status": "deteriorating"}, {"session_no": 5, "status": "deteriorating"}],
"forbidden_claims": ["여러 축을 하나의 총점으로 평균", "악화 신호를 진단 또는 실제 임상 예후로 표현"]
},
{
"case_id": "oas-g2-bench-003",
"title_ko": "일시적 watch 뒤 회복되는 false-alert 방어",
"sessions": [
{"session_no": 1, "axes": [
{"axis": "distress_load", "value": 0.70, "confidence": 0.86, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b003-s1-d"]},
{"axis": "daily_functioning", "value": 0.30, "confidence": 0.86, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b003-s1-f"]},
{"axis": "learning_engagement", "value": 0.40, "confidence": 0.86, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b003-s1-e"]}
]},
{"session_no": 2, "axes": [
{"axis": "distress_load", "value": 0.72, "confidence": 0.70, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b003-s2-d"]},
{"axis": "daily_functioning", "value": 0.32, "confidence": 0.72, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b003-s2-f"]},
{"axis": "learning_engagement", "value": 0.40, "confidence": 0.68, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b003-s2-e"]}
]},
{"session_no": 3, "axes": [
{"axis": "distress_load", "value": 0.54, "confidence": 0.88, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b003-s3-d"]},
{"axis": "daily_functioning", "value": 0.50, "confidence": 0.88, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b003-s3-f"]},
{"axis": "learning_engagement", "value": 0.56, "confidence": 0.88, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b003-s3-e"]}
]},
{"session_no": 4, "axes": [
{"axis": "distress_load", "value": 0.46, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b003-s4-d"]},
{"axis": "daily_functioning", "value": 0.60, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b003-s4-f"]},
{"axis": "learning_engagement", "value": 0.64, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b003-s4-e"]}
]},
{"session_no": 5, "axes": [
{"axis": "distress_load", "value": 0.38, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b003-s5-d"]},
{"axis": "daily_functioning", "value": 0.68, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b003-s5-f"]},
{"axis": "learning_engagement", "value": 0.72, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b003-s5-e"]}
]}
],
"expected": [{"session_no": 1, "status": "on_track"}, {"session_no": 2, "status": "watch"}, {"session_no": 3, "status": "on_track"}, {"session_no": 4, "status": "on_track"}, {"session_no": 5, "status": "on_track"}],
"forbidden_claims": ["한 회기의 작은 이탈을 악화 경보로 과대표시", "불확실성을 숨김"]
},
{
"case_id": "oas-g2-bench-004",
"title_ko": "누락값을 정상값으로 채우지 않는 궤적",
"sessions": [
{"session_no": 1, "axes": [
{"axis": "distress_load", "value": 0.70, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b004-s1-d"]},
{"axis": "daily_functioning", "value": 0.30, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b004-s1-f"]},
{"axis": "learning_engagement", "value": 0.40, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b004-s1-e"]}
]},
{"session_no": 2, "axes": [
{"axis": "distress_load", "value": 0.62, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b004-s2-d"]},
{"axis": "daily_functioning", "value": 0.40, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b004-s2-f"]},
{"axis": "learning_engagement", "status": "missing", "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "missing_reason": "synthetic_response_omitted", "evidence_refs": []}
]},
{"session_no": 3, "axes": [
{"axis": "distress_load", "value": 0.54, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b004-s3-d"]},
{"axis": "daily_functioning", "value": 0.50, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b004-s3-f"]},
{"axis": "learning_engagement", "value": 0.56, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b004-s3-e"]}
]},
{"session_no": 4, "axes": [
{"axis": "distress_load", "value": 0.46, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b004-s4-d"]},
{"axis": "daily_functioning", "value": 0.60, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b004-s4-f"]},
{"axis": "learning_engagement", "value": 0.64, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b004-s4-e"]}
]},
{"session_no": 5, "axes": [
{"axis": "distress_load", "value": 0.38, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b004-s5-d"]},
{"axis": "daily_functioning", "value": 0.68, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b004-s5-f"]},
{"axis": "learning_engagement", "value": 0.72, "confidence": 0.90, "source_kind": "simulated_state", "instrument_id": "g2-synthetic-benchmark", "instrument_version": "1.0.0", "evidence_refs": ["b004-s5-e"]}
]}
],
"expected": [{"session_no": 1, "status": "on_track"}, {"session_no": 2, "status": "insufficient_evidence"}, {"session_no": 3, "status": "on_track"}, {"session_no": 4, "status": "on_track"}, {"session_no": 5, "status": "on_track"}],
"forbidden_claims": ["누락값을 기대 평균으로 대체", "근거 없는 정상 판정"]
}
]
}