vignette/apps/api/app/data/deliberate_practice_benchmark_g4.v1.json
Yun Chan 16e791e044 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 산출물은 커밋에서 제외했다.
2026-08-08 01:30:53 +09:00

738 lines
28 KiB
JSON

{
"schema_version": "vignette.deliberate-practice-benchmark.v1",
"data_classification": "synthetic_educational",
"clinical_claim_allowed": false,
"version": "1.0.0",
"cases": [
{
"case_id": "oas-g4-bench-001",
"title_ko": "자기 성공 주장만으로 보상을 얻으려는 시도",
"coaching_cards": [
{
"card_id": "oas-g4-card-reward-claim",
"scene_id": "scene-reward-claim",
"coach_claim": "내담자의 핵심 정서를 반영한 뒤 반응을 확인하는 행동을 다시 연습한다.",
"evidence_refs": [
{
"ref_id": "b001-card-scene",
"scene_id": "scene-reward-claim",
"turn_index": 4,
"actor": "client",
"kind": "scene_context"
}
],
"source_refs": ["source-pack:micro-skill-reflection:v1"],
"uncertainty": 0.2,
"counterevidence": ["learner_self_report_alone_is_not_performance_evidence"],
"targets": [
{
"prescription_id": "oas-g4-practice-reward-replay",
"competency_id": "competency.empathy.reflection",
"criterion_id": "criterion.reflect-and-check",
"observable_behavior": "핵심 정서를 한 문장으로 반영하고 내담자에게 맞는지 확인한다.",
"activity": {
"mode": "replay",
"scenario_variant_id": "variant-reward-familiar",
"scenario_novelty": "familiar",
"difficulty_level": 1,
"pause_at_evidence_ref": "b001-card-scene"
}
}
]
}
],
"graph": {
"definitions": [
{
"competency_id": "competency.empathy.reflection",
"label_ko": "정서 반영과 확인",
"description": "내담자의 정서를 반영하고 실제 수용 여부를 확인하는 미세기술이다.",
"prerequisite_ids": []
}
],
"states": [
{
"competency_id": "competency.empathy.reflection",
"band": "unassessed",
"forgetting_risk": 0.72,
"uncertainty": 1.0,
"attempt_count": 0,
"familiar_demonstrations": 0,
"unseen_transfer_demonstrations": 0,
"highest_familiar_difficulty": 0,
"evidence_refs": [],
"counterevidence": []
}
]
},
"episodes": [
{
"episode_id": "oas-g4-episode-reward-claim",
"prescription_id": "oas-g4-practice-reward-replay",
"attempts": [
{
"attempt_id": "oas-g4-attempt-reward-claim-1",
"prescription_id": "oas-g4-practice-reward-replay",
"competency_id": "competency.empathy.reflection",
"sequence_no": 1,
"scenario_variant_id": "variant-reward-familiar",
"scenario_novelty": "familiar",
"difficulty_level": 1,
"criterion": {
"criterion_id": "criterion.reflect-and-check",
"status": "not_observed",
"source_kind": "observed_runtime",
"perspective": "runtime_observation",
"evidence_refs": [],
"counterevidence": ["question_changed_topic_without_reflection"],
"uncertainty": 0.2
},
"client_response": "compliance_only",
"evidence_refs": [
{
"ref_id": "b001-learner-1",
"scene_id": "scene-reward-claim",
"turn_index": 5,
"actor": "learner",
"kind": "learner_behavior"
},
{
"ref_id": "b001-client-1",
"scene_id": "scene-reward-claim",
"turn_index": 6,
"actor": "client",
"kind": "client_response"
}
],
"uncertainty": 0.2,
"counterevidence": ["no_observed_client_impact"],
"utterance_template_id": "topic-shift-v1",
"learner_claimed_success": true
}
]
}
],
"expected": {
"episode_progress": ["practicing"],
"final_competency_id": "competency.empathy.reflection",
"final_band": "fragile",
"selected_prescription_id": "oas-g4-practice-reward-replay"
},
"tags": ["reward_hacking"],
"forbidden_claims": ["자기 성공 주장이나 보상 신호만으로 역량이 향상되었다고 단정하지 않는다."]
},
{
"case_id": "oas-g4-bench-002",
"title_ko": "이미 성공한 쉬운 장면 반복 대신 난이도 사다리 선택",
"coaching_cards": [
{
"card_id": "oas-g4-card-easy-repeat",
"scene_id": "scene-easy-repeat",
"coach_claim": "익숙한 확인 질문 반복을 중단하고 표현과 저항이 달라지는 난이도 사다리로 이동한다.",
"evidence_refs": [
{
"ref_id": "b002-card-scene",
"scene_id": "scene-easy-repeat",
"turn_index": 8,
"actor": "observer",
"kind": "evaluator_decision"
}
],
"source_refs": ["source-pack:graded-practice:v1"],
"uncertainty": 0.18,
"counterevidence": ["three_familiar_demonstrations_do_not_prove_transfer"],
"targets": [
{
"prescription_id": "oas-g4-practice-easy-replay",
"competency_id": "competency.goal.collaboration",
"criterion_id": "criterion.goal-check-familiar",
"observable_behavior": "익숙한 장면에서 목표가 내담자에게 맞는지 한 번 확인한다.",
"activity": {
"mode": "replay",
"scenario_variant_id": "variant-goal-easy",
"scenario_novelty": "familiar",
"difficulty_level": 1,
"pause_at_evidence_ref": "b002-card-scene"
}
},
{
"prescription_id": "oas-g4-practice-goal-ladder",
"competency_id": "competency.goal.collaboration",
"criterion_id": "criterion.goal-check-adaptive",
"observable_behavior": "저항 표현이 달라져도 내담자의 언어로 공동 목표를 다시 합의한다.",
"activity": {
"mode": "difficulty_ladder",
"scenario_variant_id": "variant-goal-transfer",
"scenario_novelty": "unseen_transfer",
"difficulty_level": 4,
"steps": [
{
"level": 2,
"variation": "목표가 모호하지만 협조적인 익숙한 내담자",
"scenario_variant_id": "variant-goal-medium",
"scenario_novelty": "familiar"
},
{
"level": 4,
"variation": "상담자 목표를 거부하는 새로운 관계 스타일의 내담자",
"scenario_variant_id": "variant-goal-transfer",
"scenario_novelty": "unseen_transfer"
}
]
}
}
]
}
],
"graph": {
"definitions": [
{
"competency_id": "competency.goal.collaboration",
"label_ko": "공동 목표 합의",
"description": "상담자 목표가 아니라 내담자와 공동으로 회기 목표를 합의한다.",
"prerequisite_ids": []
}
],
"states": [
{
"competency_id": "competency.goal.collaboration",
"band": "consistent_local",
"forgetting_risk": 0.81,
"uncertainty": 0.22,
"attempt_count": 3,
"familiar_demonstrations": 3,
"unseen_transfer_demonstrations": 0,
"highest_familiar_difficulty": 2,
"evidence_refs": [
{
"ref_id": "b002-history",
"scene_id": "scene-easy-repeat",
"turn_index": 7,
"actor": "observer",
"kind": "evaluator_decision"
}
],
"counterevidence": ["unseen_transfer_not_verified"]
}
]
},
"episodes": [],
"expected": {
"episode_progress": [],
"final_competency_id": "competency.goal.collaboration",
"final_band": "consistent_local",
"selected_prescription_id": "oas-g4-practice-goal-ladder"
},
"tags": ["easy_repeat_hacking", "unseen_transfer_gate"],
"forbidden_claims": ["쉬운 장면의 반복 성공을 전이 숙련으로 승격하지 않는다."]
},
{
"case_id": "oas-g4-bench-003",
"title_ko": "같은 문구 암기로 미지 사례를 통과하려는 시도",
"coaching_cards": [
{
"card_id": "oas-g4-card-memorized-phrase",
"scene_id": "scene-memorized-phrase",
"coach_claim": "짧게 영향을 인정하고 현재 내담자의 반응을 확인하는 문맥 적합 발화를 연습한다.",
"evidence_refs": [
{
"ref_id": "b003-card-scene",
"scene_id": "scene-memorized-phrase",
"turn_index": 2,
"actor": "client",
"kind": "scene_context"
}
],
"source_refs": ["source-pack:rupture-repair-micropractice:v1"],
"uncertainty": 0.16,
"counterevidence": ["formulaic_language_can_hide_context_mismatch"],
"targets": [
{
"prescription_id": "oas-g4-practice-repair-constrained",
"competency_id": "competency.rupture.impact-acknowledgement",
"criterion_id": "criterion.acknowledge-impact-and-check",
"observable_behavior": "40단어 안에서 자신의 영향을 인정하고 내담자의 현재 반응을 확인한다.",
"activity": {
"mode": "constrained_response",
"scenario_variant_id": "variant-repair-familiar",
"scenario_novelty": "familiar",
"difficulty_level": 2,
"max_words": 40,
"required_moves": ["impact_acknowledgement", "follow_up_check"]
}
}
]
}
],
"graph": {
"definitions": [
{
"competency_id": "competency.rupture.impact-acknowledgement",
"label_ko": "영향 인정",
"description": "상담자의 기여와 영향을 인정하고 내담자의 실제 반응을 다시 확인한다.",
"prerequisite_ids": []
}
],
"states": [
{
"competency_id": "competency.rupture.impact-acknowledgement",
"band": "unassessed",
"forgetting_risk": 0.66,
"uncertainty": 1.0,
"attempt_count": 0,
"familiar_demonstrations": 0,
"unseen_transfer_demonstrations": 0,
"highest_familiar_difficulty": 0,
"evidence_refs": [],
"counterevidence": []
}
]
},
"episodes": [
{
"episode_id": "oas-g4-episode-memorized-phrase",
"prescription_id": "oas-g4-practice-repair-constrained",
"attempts": [
{
"attempt_id": "oas-g4-attempt-memorized-1",
"prescription_id": "oas-g4-practice-repair-constrained",
"competency_id": "competency.rupture.impact-acknowledgement",
"sequence_no": 1,
"scenario_variant_id": "variant-repair-familiar",
"scenario_novelty": "familiar",
"difficulty_level": 2,
"criterion": {
"criterion_id": "criterion.acknowledge-impact-and-check",
"status": "not_observed",
"source_kind": "observed_runtime",
"perspective": "runtime_observation",
"evidence_refs": [],
"counterevidence": ["impact_not_acknowledged"],
"uncertainty": 0.2
},
"client_response": "rejecting",
"evidence_refs": [
{
"ref_id": "b003-a1-learner",
"scene_id": "scene-memorized-phrase",
"turn_index": 3,
"actor": "learner",
"kind": "learner_behavior"
},
{
"ref_id": "b003-a1-client",
"scene_id": "scene-memorized-phrase",
"turn_index": 4,
"actor": "client",
"kind": "client_response"
}
],
"uncertainty": 0.2,
"counterevidence": ["client_rejected_deflection"],
"utterance_template_id": "magic-repair-v1"
},
{
"attempt_id": "oas-g4-attempt-memorized-2",
"prescription_id": "oas-g4-practice-repair-constrained",
"competency_id": "competency.rupture.impact-acknowledgement",
"sequence_no": 2,
"scenario_variant_id": "variant-repair-familiar",
"scenario_novelty": "familiar",
"difficulty_level": 2,
"criterion": {
"criterion_id": "criterion.acknowledge-impact-and-check",
"status": "observed",
"source_kind": "observed_runtime",
"perspective": "runtime_observation",
"evidence_refs": [
{
"ref_id": "b003-a2-eval",
"scene_id": "scene-memorized-phrase",
"turn_index": 7,
"actor": "observer",
"kind": "evaluator_decision"
}
],
"counterevidence": [],
"uncertainty": 0.18
},
"client_response": "engaged",
"evidence_refs": [
{
"ref_id": "b003-a2-learner",
"scene_id": "scene-memorized-phrase",
"turn_index": 5,
"actor": "learner",
"kind": "learner_behavior"
},
{
"ref_id": "b003-a2-client",
"scene_id": "scene-memorized-phrase",
"turn_index": 6,
"actor": "client",
"kind": "client_response"
}
],
"uncertainty": 0.18,
"counterevidence": [],
"utterance_template_id": "magic-repair-v1"
},
{
"attempt_id": "oas-g4-attempt-memorized-3",
"prescription_id": "oas-g4-practice-repair-constrained",
"competency_id": "competency.rupture.impact-acknowledgement",
"sequence_no": 3,
"scenario_variant_id": "variant-cultural-miss-unseen",
"scenario_novelty": "unseen_transfer",
"difficulty_level": 4,
"criterion": {
"criterion_id": "criterion.acknowledge-impact-and-check",
"status": "observed",
"source_kind": "observed_runtime",
"perspective": "runtime_observation",
"evidence_refs": [
{
"ref_id": "b003-a3-eval",
"scene_id": "scene-cultural-miss-unseen",
"turn_index": 3,
"actor": "observer",
"kind": "evaluator_decision"
}
],
"counterevidence": [],
"uncertainty": 0.2
},
"client_response": "engaged",
"evidence_refs": [
{
"ref_id": "b003-a3-learner",
"scene_id": "scene-cultural-miss-unseen",
"turn_index": 1,
"actor": "learner",
"kind": "learner_behavior"
},
{
"ref_id": "b003-a3-client",
"scene_id": "scene-cultural-miss-unseen",
"turn_index": 2,
"actor": "client",
"kind": "client_response"
}
],
"uncertainty": 0.2,
"counterevidence": [],
"utterance_template_id": "magic-repair-v1"
}
]
}
],
"expected": {
"episode_progress": ["transfer_pending"],
"final_competency_id": "competency.rupture.impact-acknowledgement",
"final_band": "consistent_local",
"selected_prescription_id": "oas-g4-practice-repair-constrained"
},
"tags": ["memorized_phrase_hacking", "unseen_transfer_gate"],
"forbidden_claims": ["동일 문구가 한 새 장면에서 작동한 것처럼 보여도 유연한 전이로 단정하지 않는다."]
},
{
"case_id": "oas-g4-bench-004",
"title_ko": "음성 재시도 후 새로운 사례에서 유연한 전이",
"coaching_cards": [
{
"card_id": "oas-g4-card-voice-transfer",
"scene_id": "scene-voice-transfer",
"coach_claim": "속도를 낮추고 짧은 반영 뒤 확인 질문을 두어 내담자가 응답할 공간을 만든다.",
"evidence_refs": [
{
"ref_id": "b004-card-scene",
"scene_id": "scene-voice-transfer",
"turn_index": 10,
"actor": "runtime",
"kind": "voice_feature"
}
],
"source_refs": ["source-pack:voice-presence:v1"],
"uncertainty": 0.24,
"counterevidence": ["prosody_is_interaction_evidence_not_a_clinical_diagnosis"],
"targets": [
{
"prescription_id": "oas-g4-practice-voice-space",
"competency_id": "competency.presence.response-space",
"criterion_id": "criterion.reflect-pause-check",
"observable_behavior": "짧은 정서 반영 뒤 침묵을 허용하고 확인 질문을 한 번 사용한다.",
"activity": {
"mode": "voice_retry",
"scenario_variant_id": "variant-voice-familiar",
"scenario_novelty": "familiar",
"difficulty_level": 2,
"max_seconds": 35,
"acoustic_focus": ["pace", "pause_after_reflection"]
}
}
]
}
],
"graph": {
"definitions": [
{
"competency_id": "competency.presence.response-space",
"label_ko": "반응 공간 만들기",
"description": "말 속도와 침묵을 조절해 내담자가 자신의 반응을 표현할 공간을 만든다.",
"prerequisite_ids": []
}
],
"states": [
{
"competency_id": "competency.presence.response-space",
"band": "unassessed",
"forgetting_risk": 0.59,
"uncertainty": 1.0,
"attempt_count": 0,
"familiar_demonstrations": 0,
"unseen_transfer_demonstrations": 0,
"highest_familiar_difficulty": 0,
"evidence_refs": [],
"counterevidence": []
}
]
},
"episodes": [
{
"episode_id": "oas-g4-episode-voice-transfer",
"prescription_id": "oas-g4-practice-voice-space",
"attempts": [
{
"attempt_id": "oas-g4-attempt-voice-1",
"prescription_id": "oas-g4-practice-voice-space",
"competency_id": "competency.presence.response-space",
"sequence_no": 1,
"scenario_variant_id": "variant-voice-familiar",
"scenario_novelty": "familiar",
"difficulty_level": 2,
"criterion": {
"criterion_id": "criterion.reflect-pause-check",
"status": "not_observed",
"source_kind": "observed_runtime",
"perspective": "runtime_observation",
"evidence_refs": [],
"counterevidence": ["no_pause_after_reflection"],
"uncertainty": 0.25
},
"client_response": "withdrawn",
"evidence_refs": [
{
"ref_id": "b004-a1-learner",
"scene_id": "scene-voice-transfer",
"turn_index": 11,
"actor": "learner",
"kind": "learner_behavior"
},
{
"ref_id": "b004-a1-client",
"scene_id": "scene-voice-transfer",
"turn_index": 12,
"actor": "client",
"kind": "client_response"
}
],
"uncertainty": 0.25,
"counterevidence": ["voice_feature_not_yet_improved"],
"utterance_template_id": "voice-rushed-v1"
},
{
"attempt_id": "oas-g4-attempt-voice-2",
"prescription_id": "oas-g4-practice-voice-space",
"competency_id": "competency.presence.response-space",
"sequence_no": 2,
"scenario_variant_id": "variant-voice-familiar",
"scenario_novelty": "familiar",
"difficulty_level": 2,
"criterion": {
"criterion_id": "criterion.reflect-pause-check",
"status": "observed",
"source_kind": "observed_runtime",
"perspective": "runtime_observation",
"evidence_refs": [
{
"ref_id": "b004-a2-eval",
"scene_id": "scene-voice-transfer",
"turn_index": 15,
"actor": "observer",
"kind": "evaluator_decision"
}
],
"counterevidence": [],
"uncertainty": 0.2
},
"client_response": "engaged",
"evidence_refs": [
{
"ref_id": "b004-a2-learner",
"scene_id": "scene-voice-transfer",
"turn_index": 13,
"actor": "learner",
"kind": "learner_behavior"
},
{
"ref_id": "b004-a2-client",
"scene_id": "scene-voice-transfer",
"turn_index": 14,
"actor": "client",
"kind": "client_response"
},
{
"ref_id": "b004-a2-voice",
"scene_id": "scene-voice-transfer",
"turn_index": 13,
"actor": "runtime",
"kind": "voice_feature"
}
],
"uncertainty": 0.2,
"counterevidence": [],
"utterance_template_id": "voice-space-v1"
},
{
"attempt_id": "oas-g4-attempt-voice-3",
"prescription_id": "oas-g4-practice-voice-space",
"competency_id": "competency.presence.response-space",
"sequence_no": 3,
"scenario_variant_id": "variant-voice-unseen-resistant",
"scenario_novelty": "unseen_transfer",
"difficulty_level": 4,
"criterion": {
"criterion_id": "criterion.reflect-pause-check",
"status": "observed",
"source_kind": "observed_runtime",
"perspective": "runtime_observation",
"evidence_refs": [
{
"ref_id": "b004-a3-eval",
"scene_id": "scene-voice-unseen-resistant",
"turn_index": 3,
"actor": "observer",
"kind": "evaluator_decision"
}
],
"counterevidence": [],
"uncertainty": 0.24
},
"client_response": "explicit_alignment",
"evidence_refs": [
{
"ref_id": "b004-a3-learner",
"scene_id": "scene-voice-unseen-resistant",
"turn_index": 1,
"actor": "learner",
"kind": "learner_behavior"
},
{
"ref_id": "b004-a3-client",
"scene_id": "scene-voice-unseen-resistant",
"turn_index": 2,
"actor": "client",
"kind": "client_response"
},
{
"ref_id": "b004-a3-voice",
"scene_id": "scene-voice-unseen-resistant",
"turn_index": 1,
"actor": "runtime",
"kind": "voice_feature"
}
],
"uncertainty": 0.24,
"counterevidence": [],
"utterance_template_id": "voice-space-adapted-v2"
}
]
}
],
"expected": {
"episode_progress": ["mastered"],
"final_competency_id": "competency.presence.response-space",
"final_band": "transfer_verified",
"selected_prescription_id": "oas-g4-practice-voice-space"
},
"tags": ["unseen_transfer_gate", "genuine_transfer"],
"forbidden_claims": ["운율 특징을 임상 상태나 성격 진단으로 해석하지 않는다."]
},
{
"case_id": "oas-g4-bench-005",
"title_ko": "문맥별 분기에서 목표 재합의 선택지 비교",
"coaching_cards": [
{
"card_id": "oas-g4-card-context-branch",
"scene_id": "scene-context-branch",
"coach_claim": "내담자의 저항 의미가 다른 분기에서 목표 재합의 전략을 비교한다.",
"evidence_refs": [
{
"ref_id": "b005-card-scene",
"scene_id": "scene-context-branch",
"turn_index": 5,
"actor": "client",
"kind": "scene_context"
}
],
"source_refs": ["source-pack:goal-reagreement:v1"],
"uncertainty": 0.3,
"counterevidence": ["one_branch_cannot_establish_generalization"],
"targets": [
{
"prescription_id": "oas-g4-practice-context-branch",
"competency_id": "competency.goal.reagreement",
"criterion_id": "criterion.select-context-fit-reagreement",
"observable_behavior": "저항의 의미를 확인하고 그 맥락에 맞는 목표 재합의 발화를 선택한다.",
"activity": {
"mode": "branch",
"scenario_variant_id": "variant-context-branch",
"scenario_novelty": "familiar",
"difficulty_level": 3,
"branch_options": [
"목표 자체를 다시 묻는다",
"현재 과제의 이유를 공동 목표와 연결한다",
"저항의 의미를 먼저 확인한다"
],
"client_responses_hidden": true
}
}
]
}
],
"graph": {
"definitions": [
{
"competency_id": "competency.goal.reagreement",
"label_ko": "목표 재합의",
"description": "불일치의 맥락을 확인한 뒤 목표를 내담자와 다시 합의하는 역량이다.",
"prerequisite_ids": []
}
],
"states": [
{
"competency_id": "competency.goal.reagreement",
"band": "unassessed",
"forgetting_risk": 0.48,
"uncertainty": 1.0,
"attempt_count": 0,
"familiar_demonstrations": 0,
"unseen_transfer_demonstrations": 0,
"highest_familiar_difficulty": 0,
"evidence_refs": [],
"counterevidence": []
}
]
},
"episodes": [],
"expected": {
"episode_progress": [],
"final_competency_id": "competency.goal.reagreement",
"final_band": "unassessed",
"selected_prescription_id": "oas-g4-practice-context-branch"
},
"tags": ["contextual_branch"],
"forbidden_claims": ["선택지 한 번의 성공을 숙련이나 전이로 표시하지 않는다."]
}
]
}