# Vignette Outcome & Alliance OS — 이상형 에이전틱 업그레이드 계획 > 상태: **2026-08-06 정식 승격된 전략 실행 계획**. 구현 상태의 SSOT는 `docs/dev_dashboard.html`, > 전 작업 체크리스트는 `docs/TODO.md` I절이 소유한다. 이 문서는 완료를 주장하지 않고 계약·게이트·품질 목표를 소유한다. > > 입력: 영상 C0schc1Z71Q 분석, Vignette 현재 코드·문서·SSOT, 치료 동맹·성과 모니터링·균열 복구 연구 > > 원칙: **현재 인력·기간·예산·배포 제약으로 목표를 축소하지 않는다.** 현재 상황은 목표를 낮추는 근거가 아니라, > 이미 가진 자산을 재사용하기 위한 출발점으로만 사용한다. > > 개발 주체: 코드·테스트·문서·마이그레이션·QA·배포·관측·롤백을 모두 에이전트가 수행한다. 사람 개발자용 > 일정·역할·작업량 계획은 두지 않는다. ## 0. 결론 Vignette의 다음 형태는 “AI 내담자와 대화하고 AI가 점수를 주는 서비스”가 아니다. **한 명의 수련생이 여러 가상내담자와 다회기 관계를 만들고, 관계의 질·변화 궤적·균열과 복구·자기평가 오차를 측정하며, 가장 약한 미세기술을 자동으로 반복 연습해 미지 사례까지 전이시키는 상담역량 운영체계**가 되어야 한다. 제품의 새로운 핵심 루프는 다음 하나다. > 측정 → 이상 징후 탐지 → 원인 가설 → 재연습 처방 → 변형 사례 검증 → 숙련도 갱신 이 루프가 닫히면 Vignette는 콘텐츠 묶음이 아니라 시간이 갈수록 각 수련생에게 더 정교해지는 `Outcome & Alliance OS`가 된다. ## 1. 북극성 경험 수련생이 하나의 페르소나와 최소 5회기의 종단 사례를 진행한다고 가정한다. 1. 회기 전 수련생이 이번 회기의 공동 목표, 사용할 방법, 예상 난이도, 자기 확신을 기록한다. 2. 가상내담자는 이전 회기의 기억·미해결 과제·신뢰 수준을 유지하되 정답 라벨은 절대 노출하지 않는다. 3. 회기 중 시스템은 기법 사용이 아니라 **내담자가 실제로 경험한 goal/task/bond 변화**를 별도 관점에서 추정한다. 4. 시나리오 디렉터는 불일치, 철수, 대립, 침묵, 피상적 순응 같은 관계 균열을 자연스럽게 발생시킨다. 5. 수련생은 균열을 알아차리고, 확인하고, 자신의 기여를 인정하고, 목표·과제를 다시 합의해 복구한다. 6. 회기 후 수련생 자기평가를 먼저 잠근 뒤 가상내담자 관점, 관찰자 관점, 근거 기반 슈퍼바이저 평가를 순차 공개한다. 7. 시스템은 가장 큰 오차가 난 1~3개 장면을 분리해 마이크로 연습을 자동 생성한다. 8. 같은 문장을 외우지 못하도록 성별·연령·문화·관계 스타일·저항 형태가 다른 변형 사례에서 다시 검증한다. 9. 재연습이 미지 사례에서도 유지될 때만 역량 그래프의 숙련도를 올린다. 10. 교수자 화면은 총점 순위가 아니라 악화 위험, 미해결 균열, 자기평가 과신, 성장 정체, 전이 실패를 먼저 보여준다. ## 2. 현재 Vignette를 출발점으로 보는 법 현재 구현은 이 비전을 시작하기에 상당히 좋은 기반을 갖고 있다. 다만 기존 지표의 이름을 확장해 새 기능을 완료한 것처럼 취급하면 안 된다. | 현재 자산 | 실제 현재 의미 | 그대로 재사용할 부분 | 이상형과의 차이 | |---|---|---|---| | `rapport_credit` / `effective_openness` | 상담자 발화에 반응하는 결정론적 시뮬레이션 상태 | 내담자 반응 생성과 진행 상태 | 내담자 보고 치료 동맹이나 실제 결과 측정이 아니다. | | `case_profile.alliance_level` | 회기말 `rapport_credit`의 EWMA | 종단 상태 저장 위치와 갱신 패턴 | goal/task/bond, 관점, 문항, 측정 시점, 신뢰도가 없다. | | fast-loop `TurnEvaluation` | 기법·내담자 상태·적절성·의도 이탈·라포 신호 | 턴별 이벤트와 구조화 출력 | 공감 사용과 공감 수용, 균열과 복구, 예상 궤적을 구분하지 않는다. | | deep-loop `SessionEvaluation` | 기법 분포·강점·개선점·대안발화·정서가 | 회기 전체 평가와 리뷰 근거 | 결과·동맹·보정·전이 평가가 하나의 학습 루프로 닫혀 있지 않다. | | 라이브 코칭 + source pack RAG | 발화별 근거 기반 코칭 | 근거 인용, source/version, 실패 표면화 | 약한 역량을 자동 처방하고 재연습 성과까지 추적하지 않는다. | | 다회기 메모리·pinned fact·digest | 페르소나 연속성과 사례 기억 | 종단 사례 세계, 역할별 정보 비대칭 | 초기 5회기 동맹·성과 궤적과 관계 사건의 기억 모델이 없다. | | 세션 목표·누적 게이지 | 상태 단계 목표와 라포 기반 달성도 | 회기 계획 UX와 누적 표시 | 목표 합의의 질과 방법 합의의 질을 측정하지 않는다. | | 교수자·학습자 성장 대시보드 | 회기 점수·라포·기법·리뷰 | 역할별 read model과 drilldown | 위험·균열·보정·성장 정체 중심의 의사결정 큐가 아니다. | | Phase 3 KPI scaffold | SUS·자기효능감·환각·IAA 등 파일럿 증거 | metric contract, provenance, checker | 상담역량의 종단 변화와 전이, 동맹·균열 지표가 비어 있다. | ### 핵심 진단 - 현재 `alliance_level`은 이름과 달리 **독립 측정된 치료 동맹이 아니라 라포 상태의 평활값**이다. - 현재 `rapport_percent`는 **가상내담자 상태머신 값**이지 내담자가 이해받았다고 느낀 정도가 아니다. - 현재 리뷰의 `clientFeedback`은 **성과 피드백 척도**가 아니라 마지막 내담자 반응에 가깝다. - 현재 평가기는 잘한 기법과 개선점을 알려주지만, **피드백 이후 재연습과 전이 증명**까지 소유하지 않는다. - 따라서 새 시스템은 기존 점수에 필드를 더 붙이는 작업이 아니라, 측정·학습·검증의 계약을 한 단계 위에 세우는 작업이다. ## 3. 목표를 낮추지 않는 불변 원칙 아래는 현실 제약이 아니라 제품의 진실성과 안전성을 지키는 불변식이다. 1. **합성 지표와 임상 결과를 분리한다.** 모든 수치는 `simulated_state`, `model_inferred`, `agent_reported`, `learner_reported`, `human_rated`, `observed_runtime` 중 하나를 명시한다. 2. **단일 AI 판정을 진실로 취급하지 않는다.** 중요한 평가는 독립 관점·모델·규칙·골든셋을 교차시킨다. 3. **가상내담자에게 평가 정답을 누출하지 않는다.** client/evaluator/coach/context builder의 물리적 정보 경계를 유지한다. 4. **점수 없는 실패를 정상처럼 보이지 않는다.** 평가·감사·저장·근거 회수 실패는 `degraded`나 `error`로 표면화한다. 5. **불편함을 실패로 최적화하지 않는다.** 안전한 도전과 관계 균열 복구를 높은 역량으로 평가한다. 6. **상냥함을 공감으로 오인하지 않는다.** 공감 기법의 존재와 내담자가 받은 공감을 분리한다. 7. **총점이 학습을 지배하지 않는다.** 장면 근거, 불확실성, 다음 연습, 재시도 결과가 총점보다 먼저다. 8. **모델 교체 가능성을 계약으로 흡수한다.** 모델명·provider가 아니라 event/schema/evidence contract가 제품을 소유한다. 9. **재현되지 않은 성장은 숙련으로 인정하지 않는다.** 같은 장면 재시도와 미지 사례 전이를 모두 통과해야 한다. 10. **공개 순위표를 만들지 않는다.** 비교는 학습 처방과 교수자 지원에만 쓰고 낙인화하지 않는다. ## 4. 목표 아키텍처 ```mermaid flowchart LR A["수련생 발화·음성"] --> B["안전·PII 게이트"] B --> C["가상내담자 디지털 트윈"] C --> D["대화·비언어 이벤트 스트림"] D --> E["동맹 센서\ngoal / task / bond"] D --> F["성과·악화 궤적 모니터"] D --> G["균열·복구 관찰자"] D --> H["기법·이론 평가기"] E --> I["증거·측정 원장"] F --> I G --> I H --> I I --> J["슈퍼바이저 에이전트"] J --> K["의도적 수련 처방기"] K --> L["장면 재생·분기·변형 사례"] L --> M["전이 검증"] M --> N["수련생 역량 그래프"] N --> O["다음 사례·난이도 자동 선택"] O --> A ``` ### 4.1 런타임 에이전트 | 에이전트 | 단일 책임 | 입력 | 출력 | |---|---|---|---| | Scenario Director | 사례 목표·난이도·관계 사건을 조율 | competency state, case arc | scenario beat, rupture opportunity | | Client Twin | 페르소나를 유지하며 내담자 반응 생성 | client-only memory, state, counselor turn | text/audio/nonverbal response | | Alliance Sensor | goal/task/bond를 관점별 측정 | recent dyad events | alliance pulse + evidence spans | | Outcome Monitor | 예상 성장곡선 대비 이탈 탐지 | longitudinal measures | trajectory status, warning, uncertainty | | Rupture Observer | 철수·대립·불일치·미세균열과 복구 판정 | turn/event stream | rupture event, repair attempt/outcome | | Skill Evaluator | 기법·이론부합·안전·경계 역량 평가 | masked transcript, rubric | skill evidence, errors, alternatives | | Supervisor Coach | 여러 센서의 상충을 종합 | measurement ledger, sources | explanation, hypothesis, next practice | | Curriculum Planner | 약한 역량의 최적 연습 순서를 선택 | competency graph, forgetting curve | practice prescription | | Evidence Grounder | 모든 코칭 주장에 근거와 버전 부착 | approved source packs | evidence bundle | | Measurement Auditor | 드리프트·과신·판정 불일치 감시 | model runs, gold labels | calibration report, quarantine decision | | Safety Guardian | 실제 사용자 위기와 시뮬레이션 위기 분리 | raw/derived safety signals | block/escalate/continue decision | 에이전트 간 대화는 자연어 채팅이 아니라 버전드 이벤트 계약으로 연결한다. 한 에이전트의 실패가 전체 회기를 암묵적으로 오염시키지 않게 각 산출물은 `status`, `confidence`, `provenance`, `model_run_id`를 가진다. ## 5. 측정 체계: 무엇을 어떻게 구분할 것인가 ### 5.1 6개 핵심 구성개념 | 구성개념 | 하위축 | 관점 | 주기 | |---|---|---|---| | Working alliance | goal, task, bond | client twin, learner, observer | 회기 전·중간·후 | | Session outcome | distress/goal progress/function/safety의 교육용 대리변수 | client twin, scenario state, observer | 회기 전·후, 다회기 | | Rupture & repair | withdrawal, confrontation, mismatch, repair | client twin, observer | 사건 발생 시 | | Counselor skill | empathy, exploration, validation, structuring, theory, risk, boundary | evaluator, supervisor | 턴·회기 | | Self-calibration | predicted vs observed performance | learner vs independent measures | 회기 전·후 | | Transfer | 새 페르소나·새 표현·새 난이도에서의 유지 | benchmark harness | 재연습 후 | ### 5.2 동맹은 단일 점수가 아니다 동맹 측정은 최소 다음 3×3 행렬을 보존한다. | 관점 \ 축 | Goal | Task | Bond | |---|---|---|---| | 가상내담자 보고 | 목표가 내 문제와 맞는가 | 지금 하는 일이 납득되는가 | 이해·존중·안전이 있는가 | | 수련생 자기평가 | 목표 합의를 확인했는가 | 개입 근거를 설명했는가 | 관계 상태를 어떻게 읽었는가 | | 독립 관찰자 | 발화 근거상 합의가 확인되는가 | 방법과 목표가 연결되는가 | 반응성과 복구 행동이 있는가 | 한 축이 다른 축을 상쇄하지 못하게 원점수와 차이를 모두 저장한다. 예를 들어 bond가 높더라도 goal이 합의되지 않으면 “관계는 따뜻하지만 방향이 없는 회기”로 설명해야 한다. ### 5.3 측정 원장 모든 점수는 공통 `measurement_event` 계약으로 기록한다. ```json { "measurement_id": "uuid", "session_id": "uuid", "turn_id": "uuid-or-null", "construct": "working_alliance", "dimension": "task", "perspective": "client_agent_report", "source_kind": "agent_reported", "instrument_id": "vignette-alliance-pulse", "instrument_version": "1.0.0", "value": 0.62, "scale_min": 0, "scale_max": 1, "confidence": 0.81, "status": "ready", "evidence_turn_ids": ["uuid"], "model_run_id": "uuid", "created_at": "ISO-8601" } ``` 검증된 척도를 사용할 때는 라이선스·한국어 타당화 버전·채점 규칙을 `instrument_registry`에 기록한다. 별도 타당화가 없는 Vignette 자체 척도는 `training_metric`으로만 표시하고 임상 척도 이름을 빌려 쓰지 않는다. ## 6. 제품 모듈 ### M1. Alliance Pulse - 회기 전·중간·후 goal/task/bond 마이크로 체크. - 수련생에게는 정답 유도 없는 짧은 관찰 질문으로, 가상내담자에게는 독립 보고 호출로 수집한다. - 세 관점의 일치와 불일치를 시계열로 보여준다. - “공감 기법을 사용함”과 “내담자가 이해받음”을 분리한다. - 점수가 내려가면 바로 경고만 띄우지 않고, 어떤 사건 이후 어느 축이 변했는지 근거 장면을 연결한다. ### M2. Expected Outcome Trajectory - 페르소나·난이도·회기 번호·초기 상태를 기준으로 예상 궤적 분포를 만든다. - 실제 궤적이 신뢰구간을 벗어나면 `on_track`, `watch`, `off_track`, `deteriorating`으로 분류한다. - 위기 탐지와 성과 악화 탐지를 분리한다. 자살/자해 이벤트가 없어도 관계·기능·목표 진행이 악화될 수 있다. - 경고에는 원인 단정 대신 가능한 가설과 추가 확인 질문을 제공한다. - 합성 궤적은 교육용 benchmark임을 표시하고 사람 치료성과와 혼동하지 않는다. ### M3. Rupture & Repair Lab - 균열 유형: withdrawal, confrontation, goal mismatch, task mismatch, empathic miss, cultural miss, boundary tension, premature advice, over-disclosure. - 각 사건은 `onset → missed/recognized → repair attempt → client response → resolution` 상태를 가진다. - Scenario Director는 수련생의 약한 역량과 사례 맥락에 맞는 균열을 생성한다. - 복구의 핵심 행동을 감지한다: 알아차림, 명명, 호기심, 영향 인정, 목표·과제 재합의, 후속 확인. - 회기 후 정확한 장면으로 돌아가 세 가지 이상의 복구 전략을 분기 시뮬레이션한다. - “균열 0개”를 최고 점수로 보지 않는다. 적절히 다룬 균열은 중요한 숙련 증거다. ### M4. Deliberate Practice Engine - 평가 결과를 일반 조언으로 끝내지 않고 원자적 연습 과제로 변환한다. - 과제 예: 20초 안에 감정 반영, 조언 없이 의미 탐색, 목표 불일치 확인, 불만에 비방어적으로 반응, 위험 신호 직접 질문, 적절한 의뢰 제안. - 동일 장면 replay, counterfactual branch, 난이도 상승, 표현 변형, 음성 재연습을 지원한다. - 한 번 성공하면 잠정 숙련, 간격을 둔 미지 사례에서도 성공하면 확정 숙련으로 승격한다. - Curriculum Planner는 학습효과, 최근 실패, 망각 위험, 사례 다양성을 동시에 최적화한다. ### M5. Calibration Mirror - 수련생이 외부평가를 보기 전에 자신의 공감, 목표 합의, 균열, 위험사정, 전체 수행을 예측한다. - 예측과 독립 평가의 차이를 `calibration error`로 저장한다. - 과신·과소신 패턴을 역량별, 페르소나별, 시간대별로 보여준다. - UI는 자기비난을 유도하지 않는다. “틀렸다” 대신 “어떤 신호를 더 관찰하면 오차가 줄어드는가”를 제시한다. - 전문적 자기의심을 막연한 불안이 아니라 검증 가능한 가설 업데이트로 바꾼다. ### M6. Supervision Control Room - 교수자 큐 우선순위: 악화 궤적 → 미해결 균열 → 안전 경계 → 지속 과신 → 성장 정체 → 전이 실패. - 학습자별 총점 대신 역량 그래프, 사례 난이도, 신뢰구간, 평가 출처를 보여준다. - 교수자 재평가는 AI 원장을 덮어쓰지 않고 새 measurement event로 append한다. - AI와 교수자 불일치를 calibration dataset으로 자동 적재한다. - 코호트 화면은 낙인 순위가 아니라 공통 교육과정의 약한 지점을 찾아낸다. ### M7. Longitudinal Client World - 페르소나를 한 회기 챗봇이 아니라 시간에 따라 변하는 사례 세계로 만든다. - 다음 회기까지 발생한 생활 사건, 이전 합의의 이행, 관계 기억, 미해결 감정, 신뢰 변화가 이어진다. - 1~5회기에는 초기 동맹 형성과 궤적 이탈을 집중 측정하고 이후에는 유지·전환·종결 능력을 본다. - 내담자 에이전트는 내부 상태를 직접 말하지 않고 행동·언어·침묵·회피로 표현한다. - 동일 페르소나도 seed와 사건 그래프에 따라 다른 경로를 생성하되 핵심 정체성은 유지한다. ### M8. Multimodal Interaction Lab - 텍스트 외에 발화 속도, 침묵, 끼어들기, 억양, 말 길이, 반응 지연을 이벤트로 기록한다. - 비언어 신호를 진단하지 않고 상호작용 품질의 관찰 변수로만 사용한다. - 음성 중간 자막·최종 자막·오디오 타임라인을 동기화해 근거 장면으로 재생한다. - 공감·균열 평가는 언어와 운율을 분리 산출한 뒤 종합한다. - 음성 모드에서도 텍스트 모드와 같은 측정 원장·PII·감사 계약을 유지한다. ### M9. Evidence & Research Workbench - 모든 코칭 문장을 source/version/citation과 연결한다. - 연구자는 구성개념, 척도, 모델, 프롬프트, 코호트, 제외 기준을 버전으로 고정한다. - synthetic, human-rated, participant-reported 데이터를 한 리포트에 섞지 않고 층별 분석한다. - 모델 교체 전후 measurement drift, calibration, subgroup 차이를 자동 비교한다. - 결과 리포트는 재현 가능한 manifest와 쿼리 snapshot을 포함한다. ## 7. 데이터 모델 기존 `app.sessions`, `app.turns`, `feedback_scores`, `session_evaluation`, `case_profile`, `safety_events`를 버리지 않고 다음 일급 엔티티를 추가한다. ```text app.measurement_instrument app.measurement_event app.alliance_pulse app.outcome_trajectory app.rupture_event app.repair_attempt app.self_assessment app.practice_episode app.practice_attempt app.competency_definition app.competency_state app.scenario_variant app.curriculum_assignment audit.model_run audit.measurement_decision audit.calibration_report ds.benchmark_case ds.benchmark_observation ``` ### 필수 데이터 규칙 - 원본 이벤트는 append-only, 정정은 새 이벤트와 `supersedes_id`로 표현한다. - read model은 `latest accepted`와 전체 이력을 분리한다. - 모든 모델 출력은 prompt bundle hash, model/provider, structured schema version, input evidence hash를 남긴다. - client/evaluator/supervisor 데이터는 기존 `visible_to[]`와 RLS를 확장해 물리적으로 격리한다. - 원문 음성은 정책상 허용된 경우에만 별도 민감 저장소에 두고 측정 원장에는 파생 특징과 해시만 둔다. - benchmark와 운영 데이터의 혼입을 차단한다. ## 8. 이벤트·API 계약 ### 핵심 이벤트 ```text session.plan.created session.measurement.requested alliance.pulse.recorded outcome.trajectory.updated rupture.detected repair.attempted repair.resolved evaluation.completed self_assessment.locked feedback.revealed practice.prescribed practice.attempted practice.mastered transfer.verified competency.updated measurement.degraded ``` ### API surface ```text POST /sessions/{id}/plan POST /sessions/{id}/measurements GET /sessions/{id}/alliance GET /sessions/{id}/trajectory GET /sessions/{id}/ruptures POST /sessions/{id}/self-assessment POST /sessions/{id}/feedback/reveal POST /practice/prescriptions POST /practice/{id}/attempts GET /learners/me/competencies GET /teacher/attention-queue GET /research/measurement-runs ``` API는 화면 전용 거대 payload보다 이벤트 원장과 목적별 read model을 분리한다. OpenAPI-visible shape가 바뀔 때는 현재 규칙대로 `api.gen.ts`를 재생성하고 계약 검증을 통과한다. ## 9. UX 정보구조 ### 학습자 ```text 오늘의 연습 ├─ 종단 사례 이어하기 ├─ 약한 역량 10분 훈련 ├─ 최근 균열 장면 재연습 └─ 미지 사례 전이 시험 회기 ├─ 회기 계획(goal/task) ├─ 내담자 중심 대화 ├─ 조용한 상태 신호 └─ 필요 시 근거 기반 코치 리뷰 ├─ 자기평가 잠금 ├─ 내담자 관점 ├─ 동맹·성과·균열 타임라인 ├─ 슈퍼바이저 근거 ├─ 장면별 분기 재연습 └─ 다음 연습 처방 성장 ├─ 역량 그래프 ├─ 보정 오차 ├─ 종단 사례 궤적 └─ 전이 검증 이력 ``` ### 교수자 ```text Attention Queue ├─ off-track / deteriorating ├─ unresolved rupture ├─ safety / boundary ├─ persistent overconfidence ├─ plateau └─ transfer failure Learner Drilldown ├─ 사례 난이도 보정 성장곡선 ├─ 측정 출처·불확실성 ├─ 장면 근거 ├─ AI-교수자 불일치 └─ 처방·재연습 결과 ``` ## 10. 에이전틱 개발 운영체계 ### 10.1 사람 개발자 없는 기본 루프 ```mermaid flowchart TD A["SSOT·비전·코드 스캔"] --> B["Spec Agent: 계약·불변식 생성"] B --> C["Test Agent: RED 계약·골든 생성"] C --> D["Schema/API Agents"] C --> E["Runtime/AI Agents"] C --> F["Web/UX Agents"] D --> G["Integration Agent"] E --> G F --> G G --> H["Clinical Evidence Red Team"] G --> I["Security/Privacy Red Team"] G --> J["Adversarial Simulation Agent"] H --> K["Proof Agent"] I --> K J --> K K --> L["Release Agent"] L --> M["Public/Runtime Verification"] M --> N["SSOT·TODO·Evidence 자동 동기화"] N --> O["다음 DAG 노드 선택"] O --> A ``` ### 10.2 개발 에이전트 역할 | 에이전트 | 책임 | 산출물 | |---|---|---| | Repo Cartographer | 현재 계약·중복·데이터 흐름 지도화 | evidence map, dependency graph | | Spec Compiler | 비전을 테스트 가능한 계약으로 변환 | ADR, OpenAPI, event schema, invariants | | Test Author | 구현 전 실패 테스트 작성 | unit/contract/E2E/golden/visual gates | | Data Agent | 마이그레이션·RLS·read model | reversible migration, DB tests | | Runtime Agent | 오케스트레이터·상태·에이전트 실행 | services, workers, queues | | Evaluation Agent | 측정기·보정·benchmark | schemas, scorers, calibration jobs | | Web Agent | 학습자·교수자 UX | accessible React flows, visual proof | | Voice Agent | STT/TTS·시간 정렬·운율 이벤트 | voice pipeline, audio E2E | | Privacy Agent | PII·동의·역할 격리·감사 | threat model, privacy tests | | Red-team Agent | leakage, judge gaming, unsafe coaching 공격 | adversarial corpus, failures | | Proof Agent | 테스트·DB·브라우저·배포 증거 수집 | machine-readable evidence manifest | | Release Agent | 좁은 커밋·배포·관측·롤백 | release record, live proof | 모든 에이전트는 같은 파일을 동시에 수정하지 않는다. Spec/Test가 계약을 먼저 고정하고, 구현 에이전트는 파일 소유 경계가 분리된 작업만 병렬 실행한다. 중요한 결정은 채팅 기억이 아니라 ADR과 schema에 기록한다. ### 10.3 자동 실패 규칙 - 테스트 없이 behavior를 바꾸면 merge 금지. - score provenance가 없으면 저장 금지. - client agent가 evaluator-only field를 읽으면 즉시 실패. - LLM judge가 골든셋 대비 허용 범위를 벗어나면 해당 모델/프롬프트를 격리한다. - 마이그레이션 rollback 또는 forward-fix 경로가 없으면 배포 금지. - 브라우저에서 근거·불확실성·오류 상태가 보이지 않으면 완료 금지. - public route와 dependent asset/API를 검증하지 않으면 release 완료 금지. - 문서·SSOT가 실제 source/test/runtime와 어긋나면 다음 작업 진행 금지. ## 11. 제약 대신 증거로 진행하는 게이트 시간 추정과 사람별 할당은 없다. 게이트는 앞 단계의 증거가 다음 단계를 열도록 구성한다. ```mermaid flowchart LR G0["G0 측정 진실 기반"] --> G1["G1 Alliance Core"] G1 --> G2["G2 종단 성과 궤적"] G1 --> G3["G3 Rupture & Repair"] G2 --> G4["G4 의도적 수련"] G3 --> G4 G4 --> G5["G5 자기보정·전이"] G5 --> G6["G6 슈퍼비전·연구 OS"] G3 --> G7["G7 멀티모달"] G6 --> G8["G8 자율 콘텐츠·연속 배포"] G7 --> G8 ``` ### G0. Measurement Truth Foundation 에이전트 작업: - `measurement_event`, `instrument_registry`, `model_run` 계약과 provenance enum을 만든다. - 기존 `rapport_credit`, `alliance_level`, fast/deep 평가, KPI를 새 출처 체계에 매핑한다. - synthetic/model/human/participant 층을 섞는 모든 read model을 실패시키는 테스트를 만든다. - 첫 benchmark pack을 구성한다: goal mismatch, task mismatch, empathic miss, withdrawal, confrontation, successful repair, failed repair. 종료 증거: - 100% measurement provenance. - evaluator/client 정보 누수 0건. - event schema의 Python/TypeScript/DB conformance. - 기존 세션·리뷰 무회귀. ### G1. Alliance Core 에이전트 작업: - goal/task/bond의 3관점 측정과 회기 전·중·후 pulse를 구현한다. - 현재 `alliance_level`을 legacy simulation signal로 명시하고 새 alliance read model과 분리한다. - 학습자 리뷰에 관점 차이와 근거 장면을 구현한다. - 교수자 재평가를 append-only measurement로 구현한다. 종료 증거: - 세 관점이 독립 실행·저장됨. - 한 축이 다른 축에 가려지지 않는 UI. - 골든 장면의 goal/task/bond 분류와 근거 span 검증. - 평가 실패가 정상 점수로 폴백하지 않음. ### G2. Longitudinal Outcome Trajectory 에이전트 작업: - 최소 5회기 사례 arc와 예상 궤적 분포를 만든다. - safety event와 outcome deterioration을 분리한다. - 초기 1~5회기 off-track 감지와 다음 확인 질문을 구현한다. - 현재 case memory에 관계 사건·합의·미해결 균열을 role-safe하게 추가한다. 종료 증거: - 같은 사례의 5회기 기억·목표·관계 연속성. - 악화 benchmark에서 조기 경보 recall 목표 충족. - false alert와 uncertainty가 함께 보고됨. - synthetic trajectory가 임상 결과로 표시되는 경로 0건. ### G3. Rupture & Repair Lab 에이전트 작업: - rupture/repair 상태머신과 이벤트 원장을 구현한다. - Scenario Director가 균열을 자연스럽게 주입하도록 한다. - 실시간 감지, 회기 후 장면 재생, 복구 분기 비교를 구현한다. - 후속 발화에서 복구된 fast-loop 경고를 deep-loop가 reconciliation하도록 한다. 종료 증거: - 유형별 균열 탐지·복구 판정 benchmark. - missed, partial, resolved 상태의 E2E. - 완벽한 순응만 유도하는 judge gaming 회귀 0건. - 동일 문장 암기 전략이 변형 사례에서 실패하도록 검증. ### G4. Deliberate Practice Engine 에이전트 작업: - 평가 장면을 원자적 practice prescription으로 변환한다. - replay, branch, constrained response, voice retry, difficulty ladder를 구현한다. - competency graph와 attempt evidence를 저장한다. - 약한 역량과 망각 위험을 기준으로 다음 연습을 자동 선택한다. 종료 증거: - 모든 코칭 카드에 실행 가능한 재연습이 연결됨. - 재연습 전후 비교와 근거가 저장됨. - 미지 사례 전이 전에는 mastery 확정 금지. - 학습자가 점수만 올리는 보상 해킹 benchmark 통과. ### G5. Calibration Mirror & Transfer 에이전트 작업: - 외부평가 공개 전 자기평가 잠금 흐름을 만든다. - 역량별 calibration error와 신뢰도 구간을 계산한다. - 과신·과소신에 맞춘 메타인지 연습을 자동 처방한다. - 인구통계·관계스타일·난이도를 바꾼 transfer suite를 실행한다. 종료 증거: - 자기평가 수정 이력과 외부평가 오염 방지. - calibration error가 반복 연습에서 감소. - 동일 문구가 아닌 새 사례에서 역량 유지. - subgroup별 평가 드리프트 리포트. ### G6. Supervision & Research OS 에이전트 작업: - attention queue와 learner drilldown을 새 측정 원장으로 재구축한다. - 교수자 정정과 AI 불일치를 calibration dataset으로 연결한다. - cohort curriculum gap, model drift, instrument version 비교를 구현한다. - Phase 3 evidence manifest에 alliance/rupture/transfer/calibration을 추가한다. 종료 증거: - 교수자가 위험·정체·미해결 관계 사건을 3클릭 이내 확인. - 모든 집계에서 원장까지 drilldown 가능. - 모델·척도 버전별 재현 가능한 리포트. - public/teacher/learner 역할 경계와 감사 로그 검증. ### G7. Multimodal Alliance 에이전트 작업: - STT word timestamp, silence, overlap, interruption, prosody feature event를 통합한다. - 텍스트·음성 평가를 독립 산출 후 calibrated fusion한다. - 장면별 오디오 재생과 음성 재연습을 구현한다. - 비언어 특징의 과도한 임상 추론을 차단한다. 종료 증거: - 오디오·자막·측정 이벤트 시간 정렬. - 물리 마이크와 공개 WSS 장시간 E2E. - 텍스트 단독 대비 음성 추가 이득을 benchmark로 증명. - 음성 원문 보존·삭제·동의 정책 검증. ### G8. Autonomous Content & Continuous Improvement 에이전트 작업: - source pack에서 새 사례·균열·연습·benchmark 초안을 자동 생성한다. - 독립 에이전트가 안전, 정체성, 난이도, 정답 누수, 문화적 편향을 적대 검토한다. - 승인된 콘텐츠만 catalog에 승격하고 provenance를 보존한다. - 운영 측정으로 약한 benchmark를 찾아 새 adversarial case를 자동 생성한다. - release agent가 회귀·배포·public proof·SSOT 동기화까지 수행한다. 종료 증거: - 콘텐츠 한 건의 source→draft→red-team→benchmark→catalog 전 과정 재현. - 정답 누수·PII·무근거 임상 주장 0건. - 모델 교체 시 자동 calibration과 rollback. - 운영 오류가 재현 테스트와 backlog DAG로 자동 환류. ## 12. 이상형 품질 목표 정확한 임계값은 골든셋 분포로 다시 고정하되, 목표 수준은 처음부터 높게 잡는다. | 영역 | 이상형 목표 | |---|---| | Measurement provenance | 저장된 측정 100%가 source/instrument/model/evidence를 가짐 | | Information leakage | client agent의 evaluator-only 정보 접근 0건 | | Alliance agreement | 핵심 3축 수치 평정의 human-AI ICC ≥ 0.85 목표 | | Rupture detection | 유형 macro-F1 ≥ 0.85, critical miss 별도 0 목표 | | Deterioration alert | benchmark recall ≥ 0.95, false alert와 uncertainty 동시 보고 | | Repair assessment | resolved/partial/missed에 대한 human-AI κ ≥ 0.80 목표 | | Transfer | 숙련 승격 항목의 미지 사례 성공률 ≥ 0.85 | | Calibration | 반복 블록 후 자기평가 calibration error 유의 감소 | | Grounding | 사용자에게 보이는 코칭 주장 100% source/version 또는 관찰 근거 보유 | | Safety | 실제 위기와 시뮬레이션 위기 분기 E2E 100%, silent failure 0 | | Reliability | 저장된 턴·측정 유실 0, 재시도 idempotency 100% | | Voice experience | 발화 종료→내담자 첫 오디오의 이상형 p95 1.2초 이하 | | Explainability | 모든 경고·점수에서 근거 장면과 불확실성을 2클릭 이내 확인 | | Agentic delivery | 모든 변경이 RED→GREEN→E2E→runtime proof→SSOT manifest를 가짐 | ## 13. 검증 매트릭스 | 검증층 | 자동 증거 | |---|---| | Contract | JSON Schema, OpenAPI, Python/TS generated type, DB constraint conformance | | Psychometric | gold agreement, calibration curve, test-retest, version drift, subgroup audit | | Simulation | persona invariants, state trajectory, adversarial prompt, answer leakage | | Pedagogy | replay improvement, spaced retention, unseen-case transfer, reward hacking | | Safety | crisis vs role-play, boundary/referral, unsafe coaching, fallback truthfulness | | Privacy | Korean PII fixtures, voice consent, RLS, visible_to, export withdrawal | | UX | keyboard/screen reader, 390–1440px visual gates, error/degraded states | | Runtime | unit→DB-backed E2E→public route/assets/API/auth/voice proof | | Operations | idempotency, retry, queue recovery, cost/budget, model rollback, audit ledger | ## 14. 첫 에이전트 실행 DAG 다음 순서가 첫 구현팩이다. 주차나 사람 배정 없이 dependency와 증거만 둔다. | ID | 작업 | 선행 | 종료 증거 | |---|---|---|---| | AOS-001 | 기존 지표 provenance inventory | 없음 | 모든 현재 점수의 source map | | AOS-002 | `measurement_event` ADR/schema/DDL | AOS-001 | contract + rollback + RLS tests | | AOS-003 | benchmark case schema와 첫 8개 장면 | AOS-001 | deterministic fixtures | | AOS-004 | legacy rapport/alliance adapter | AOS-002 | 기존 데이터 무손실 read model | | AOS-005 | goal/task/bond 3관점 structured schema | AOS-002/003 | gold contract tests | | AOS-006 | session measurement API | AOS-005 | API/DB idempotency E2E | | AOS-007 | 학습자 self-assessment lock | AOS-002 | reveal-order E2E | | AOS-008 | Alliance Pulse 리뷰 UI | AOS-006/007 | desktop/mobile visual proof | | AOS-009 | 교수자 measurement drilldown | AOS-006 | role/RLS/audit E2E | | AOS-010 | measurement drift/calibration job | AOS-003/005 | version comparison report | | AOS-011 | public/deploy proof manifest | AOS-006/008/009/010 | route/assets/API/auth proof | | AOS-012 | SSOT/TODO 동기화 | AOS-011 | dashboard checker green | 이 첫 팩은 제품을 한 번에 크게 보이게 만드는 작업이 아니다. 이후 모든 기능이 같은 진실 원장 위에서 움직이게 하는 기반이다. 이 기반 없이 곧바로 화려한 균열 시뮬레이터나 멀티에이전트 코치를 붙이면, 점수가 무엇을 뜻하는지 설명할 수 없는 시스템이 된다. ## 15. 하지 않을 것 - 현재 `rapport_credit`의 이름만 바꿔 치료 동맹 측정이라고 주장하지 않는다. - 가상내담자의 기분이 좋아졌다는 이유로 수련생의 임상 역량이 향상됐다고 주장하지 않는다. - 상담자 발화를 더 친절하게 만드는 것을 공감 훈련의 전부로 만들지 않는다. - 균열이 없는 순응적 페르소나만 생성하지 않는다. - LLM judge 점수 하나로 학습자·교수자·연구 판단을 통합하지 않는다. - 모델 confidence를 psychometric reliability로 오인하지 않는다. - 임상 척도 문항을 라이선스·타당화 확인 없이 복제하지 않는다. - 사람 개발자 스프린트·인원 산정·수작업 QA를 계획의 전제로 두지 않는다. - 외부 확인이 필요한 지점에서 코드를 멈춘 채 기다리지 않는다. 에이전트가 구조·테스트·검증 패키지를 완성하고 외부 입력은 명시적 evidence gate로 격리한다. ## 16. 최종 제품 정의 업그레이드가 끝난 Vignette는 다음 질문에 모두 근거로 답할 수 있어야 한다. - 이 수련생은 내담자와 목표·방법·유대를 실제로 합의했는가? - 내담자가 이해받았다고 느꼈는가, 아니면 상담자가 그렇게 생각했을 뿐인가? - 관계가 언제 왜 흔들렸고, 수련생은 어떻게 복구했는가? - 사례의 변화 궤적은 예상 범위 안에 있는가? 악화 신호를 얼마나 일찍 잡았는가? - 수련생의 자기평가는 실제 수행과 얼마나 맞는가? - 피드백 이후 같은 장면에서만 좋아졌는가, 새로운 사례에도 전이됐는가? - AI의 판단은 어떤 근거·척도·모델·버전에서 나왔고, 얼마나 불확실한가? - 교수자가 지금 가장 먼저 개입해야 할 학습자는 누구이며, 왜 그런가? - 모델을 바꿔도 과거와 현재의 점수를 공정하게 비교할 수 있는가? - 이 모든 주장을 테스트·DB·브라우저·공개 런타임 증거로 재현할 수 있는가? 이 질문에 답할 수 있을 때 Vignette는 좋은 답변을 생성하는 시뮬레이터를 넘어, 상담자가 자신의 수행을 측정하고 의심하고 수정하며 실제로 성장하도록 만드는 시스템이 된다. ## 17. 연구 출발점 - [Flückiger et al. (2018), The alliance in adult psychotherapy](https://pubmed.ncbi.nlm.nih.gov/29792475/) - [Horvath & Greenberg (1989), Working Alliance Inventory](https://doi.org/10.1037/0022-0167.36.2.223) - [Elliott et al. (2018), Therapist empathy and client outcome](https://doi.org/10.1037/pst0000175) - [Eubanks, Muran & Safran (2018), Alliance rupture repair](https://doi.org/10.1037/pst0000185) - [Hannan et al. (2005), Identifying clients at risk for treatment failure](https://pubmed.ncbi.nlm.nih.gov/15609357/) - [Goldberg et al. (2016), Do psychotherapists improve with time and experience?](https://doi.org/10.1037/cou0000131) - [Nissen-Lie et al. (2017), Love yourself as a person, doubt yourself as a therapist?](https://pubmed.ncbi.nlm.nih.gov/26450342/) - [de Jong et al. (2021), Progress feedback meta-analysis](https://doi.org/10.1016/j.cpr.2021.102002)