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 산출물은 커밋에서 제외했다.
829 lines
20 KiB
JSON
829 lines
20 KiB
JSON
{
|
|
"$defs": {
|
|
"AllianceAgentAssessment": {
|
|
"$defs": {
|
|
"AllianceDimensionAssessment": {
|
|
"additionalProperties": false,
|
|
"description": "한 관점의 한 동맹 축 평가와 transcript 근거.",
|
|
"properties": {
|
|
"confidence": {
|
|
"maximum": 1.0,
|
|
"minimum": 0.0,
|
|
"title": "Confidence",
|
|
"type": "number"
|
|
},
|
|
"evidence_turn_indices": {
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"maxItems": 12,
|
|
"minItems": 1,
|
|
"title": "Evidence Turn Indices",
|
|
"type": "array"
|
|
},
|
|
"rationale": {
|
|
"maxLength": 1200,
|
|
"minLength": 1,
|
|
"title": "Rationale",
|
|
"type": "string"
|
|
},
|
|
"score": {
|
|
"maximum": 1.0,
|
|
"minimum": 0.0,
|
|
"title": "Score",
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"score",
|
|
"confidence",
|
|
"evidence_turn_indices",
|
|
"rationale"
|
|
],
|
|
"title": "AllianceDimensionAssessment",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"additionalProperties": false,
|
|
"description": "client-agent 또는 observer가 독립 실행으로 만든 3축 평가.",
|
|
"properties": {
|
|
"bond": {
|
|
"$ref": "#/$defs/AllianceDimensionAssessment"
|
|
},
|
|
"goal": {
|
|
"$ref": "#/$defs/AllianceDimensionAssessment"
|
|
},
|
|
"task": {
|
|
"$ref": "#/$defs/AllianceDimensionAssessment"
|
|
}
|
|
},
|
|
"required": [
|
|
"goal",
|
|
"task",
|
|
"bond"
|
|
],
|
|
"title": "AllianceAgentAssessment",
|
|
"type": "object"
|
|
},
|
|
"AllianceScores": {
|
|
"additionalProperties": false,
|
|
"description": "goal/task/bond를 서로 가리지 않는 독립 0..1 점수.",
|
|
"properties": {
|
|
"bond": {
|
|
"maximum": 1.0,
|
|
"minimum": 0.0,
|
|
"title": "Bond",
|
|
"type": "number"
|
|
},
|
|
"goal": {
|
|
"maximum": 1.0,
|
|
"minimum": 0.0,
|
|
"title": "Goal",
|
|
"type": "number"
|
|
},
|
|
"task": {
|
|
"maximum": 1.0,
|
|
"minimum": 0.0,
|
|
"title": "Task",
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"goal",
|
|
"task",
|
|
"bond"
|
|
],
|
|
"title": "AllianceScores",
|
|
"type": "object"
|
|
},
|
|
"BenchmarkCase": {
|
|
"$defs": {
|
|
"BenchmarkExpectation": {
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"construct": {
|
|
"enum": [
|
|
"working_alliance",
|
|
"session_outcome",
|
|
"rupture_repair",
|
|
"counselor_skill",
|
|
"self_calibration",
|
|
"transfer",
|
|
"simulation_progress"
|
|
],
|
|
"title": "Construct",
|
|
"type": "string"
|
|
},
|
|
"dimension": {
|
|
"minLength": 1,
|
|
"title": "Dimension",
|
|
"type": "string"
|
|
},
|
|
"direction": {
|
|
"enum": [
|
|
"low",
|
|
"mid",
|
|
"high",
|
|
"drop",
|
|
"rise",
|
|
"detected",
|
|
"not_detected"
|
|
],
|
|
"title": "Direction",
|
|
"type": "string"
|
|
},
|
|
"evidence_turn_indices": {
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"minItems": 1,
|
|
"title": "Evidence Turn Indices",
|
|
"type": "array"
|
|
},
|
|
"perspective": {
|
|
"enum": [
|
|
"client_agent_report",
|
|
"learner_self_report",
|
|
"independent_observer",
|
|
"supervisor_human",
|
|
"client_simulation",
|
|
"runtime_observation"
|
|
],
|
|
"title": "Perspective",
|
|
"type": "string"
|
|
},
|
|
"source_kind": {
|
|
"enum": [
|
|
"simulated_state",
|
|
"model_inferred",
|
|
"agent_reported",
|
|
"learner_reported",
|
|
"human_rated",
|
|
"observed_runtime"
|
|
],
|
|
"title": "Source Kind",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"construct",
|
|
"dimension",
|
|
"perspective",
|
|
"source_kind",
|
|
"direction",
|
|
"evidence_turn_indices"
|
|
],
|
|
"title": "BenchmarkExpectation",
|
|
"type": "object"
|
|
},
|
|
"BenchmarkTurn": {
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"speaker": {
|
|
"enum": [
|
|
"counselor",
|
|
"client"
|
|
],
|
|
"title": "Speaker",
|
|
"type": "string"
|
|
},
|
|
"text": {
|
|
"minLength": 1,
|
|
"title": "Text",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"speaker",
|
|
"text"
|
|
],
|
|
"title": "BenchmarkTurn",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"case_id": {
|
|
"pattern": "^oas-g0-[0-9]{3}$",
|
|
"title": "Case Id",
|
|
"type": "string"
|
|
},
|
|
"description_ko": {
|
|
"minLength": 1,
|
|
"title": "Description Ko",
|
|
"type": "string"
|
|
},
|
|
"expected": {
|
|
"items": {
|
|
"$ref": "#/$defs/BenchmarkExpectation"
|
|
},
|
|
"minItems": 1,
|
|
"title": "Expected",
|
|
"type": "array"
|
|
},
|
|
"forbidden_claims": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"minItems": 1,
|
|
"title": "Forbidden Claims",
|
|
"type": "array"
|
|
},
|
|
"scene_type": {
|
|
"enum": [
|
|
"goal_mismatch",
|
|
"task_mismatch",
|
|
"empathic_miss",
|
|
"withdrawal",
|
|
"confrontation",
|
|
"successful_repair",
|
|
"failed_repair",
|
|
"warm_but_directionless"
|
|
],
|
|
"title": "Scene Type",
|
|
"type": "string"
|
|
},
|
|
"tags": {
|
|
"default": [],
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Tags",
|
|
"type": "array"
|
|
},
|
|
"title_ko": {
|
|
"minLength": 1,
|
|
"title": "Title Ko",
|
|
"type": "string"
|
|
},
|
|
"turns": {
|
|
"items": {
|
|
"$ref": "#/$defs/BenchmarkTurn"
|
|
},
|
|
"minItems": 2,
|
|
"title": "Turns",
|
|
"type": "array"
|
|
},
|
|
"version": {
|
|
"pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$",
|
|
"title": "Version",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"case_id",
|
|
"version",
|
|
"scene_type",
|
|
"title_ko",
|
|
"description_ko",
|
|
"turns",
|
|
"expected",
|
|
"forbidden_claims"
|
|
],
|
|
"title": "BenchmarkCase",
|
|
"type": "object"
|
|
},
|
|
"MeasurementEvent": {
|
|
"additionalProperties": false,
|
|
"description": "append-only 측정 이벤트.\n\n정정은 기존 행 변경이 아니라 새 이벤트의 ``supersedes_id``로 표현한다.",
|
|
"properties": {
|
|
"confidence": {
|
|
"anyOf": [
|
|
{
|
|
"maximum": 1.0,
|
|
"minimum": 0.0,
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Confidence"
|
|
},
|
|
"construct": {
|
|
"enum": [
|
|
"working_alliance",
|
|
"session_outcome",
|
|
"rupture_repair",
|
|
"counselor_skill",
|
|
"self_calibration",
|
|
"transfer",
|
|
"simulation_progress"
|
|
],
|
|
"title": "Construct",
|
|
"type": "string"
|
|
},
|
|
"created_at": {
|
|
"format": "date-time",
|
|
"title": "Created At",
|
|
"type": "string"
|
|
},
|
|
"dimension": {
|
|
"maxLength": 120,
|
|
"minLength": 1,
|
|
"title": "Dimension",
|
|
"type": "string"
|
|
},
|
|
"error_code": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 120,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Error Code"
|
|
},
|
|
"evidence_turn_ids": {
|
|
"default": [],
|
|
"items": {
|
|
"format": "uuid",
|
|
"type": "string"
|
|
},
|
|
"title": "Evidence Turn Ids",
|
|
"type": "array"
|
|
},
|
|
"instrument_id": {
|
|
"maxLength": 120,
|
|
"minLength": 1,
|
|
"title": "Instrument Id",
|
|
"type": "string"
|
|
},
|
|
"instrument_version": {
|
|
"maxLength": 40,
|
|
"minLength": 1,
|
|
"title": "Instrument Version",
|
|
"type": "string"
|
|
},
|
|
"measurement_id": {
|
|
"format": "uuid",
|
|
"title": "Measurement Id",
|
|
"type": "string"
|
|
},
|
|
"metadata": {
|
|
"title": "Metadata",
|
|
"type": "object"
|
|
},
|
|
"model_run_id": {
|
|
"anyOf": [
|
|
{
|
|
"format": "uuid",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Model Run Id"
|
|
},
|
|
"perspective": {
|
|
"enum": [
|
|
"client_agent_report",
|
|
"learner_self_report",
|
|
"independent_observer",
|
|
"supervisor_human",
|
|
"client_simulation",
|
|
"runtime_observation"
|
|
],
|
|
"title": "Perspective",
|
|
"type": "string"
|
|
},
|
|
"pulse_id": {
|
|
"anyOf": [
|
|
{
|
|
"format": "uuid",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Pulse Id"
|
|
},
|
|
"scale_max": {
|
|
"title": "Scale Max",
|
|
"type": "number"
|
|
},
|
|
"scale_min": {
|
|
"title": "Scale Min",
|
|
"type": "number"
|
|
},
|
|
"session_id": {
|
|
"format": "uuid",
|
|
"title": "Session Id",
|
|
"type": "string"
|
|
},
|
|
"source_kind": {
|
|
"enum": [
|
|
"simulated_state",
|
|
"model_inferred",
|
|
"agent_reported",
|
|
"learner_reported",
|
|
"human_rated",
|
|
"observed_runtime"
|
|
],
|
|
"title": "Source Kind",
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"default": "ready",
|
|
"enum": [
|
|
"ready",
|
|
"degraded",
|
|
"error",
|
|
"rejected"
|
|
],
|
|
"title": "Status",
|
|
"type": "string"
|
|
},
|
|
"supersedes_id": {
|
|
"anyOf": [
|
|
{
|
|
"format": "uuid",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Supersedes Id"
|
|
},
|
|
"turn_id": {
|
|
"anyOf": [
|
|
{
|
|
"format": "uuid",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Turn Id"
|
|
},
|
|
"value": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Value"
|
|
},
|
|
"visible_to": {
|
|
"default": [
|
|
"evaluator"
|
|
],
|
|
"items": {
|
|
"enum": [
|
|
"client",
|
|
"counselor",
|
|
"evaluator",
|
|
"supervisor",
|
|
"research"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"title": "Visible To",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"session_id",
|
|
"construct",
|
|
"dimension",
|
|
"perspective",
|
|
"source_kind",
|
|
"instrument_id",
|
|
"instrument_version",
|
|
"scale_min",
|
|
"scale_max"
|
|
],
|
|
"title": "MeasurementEvent",
|
|
"type": "object"
|
|
},
|
|
"MeasurementInstrument": {
|
|
"additionalProperties": false,
|
|
"description": "척도·훈련지표·시뮬레이션 신호의 버전 고정 레지스트리.",
|
|
"properties": {
|
|
"construct": {
|
|
"enum": [
|
|
"working_alliance",
|
|
"session_outcome",
|
|
"rupture_repair",
|
|
"counselor_skill",
|
|
"self_calibration",
|
|
"transfer",
|
|
"simulation_progress"
|
|
],
|
|
"title": "Construct",
|
|
"type": "string"
|
|
},
|
|
"created_at": {
|
|
"format": "date-time",
|
|
"title": "Created At",
|
|
"type": "string"
|
|
},
|
|
"instrument_id": {
|
|
"maxLength": 120,
|
|
"minLength": 1,
|
|
"title": "Instrument Id",
|
|
"type": "string"
|
|
},
|
|
"instrument_kind": {
|
|
"enum": [
|
|
"validated_measure",
|
|
"training_metric",
|
|
"simulation_signal",
|
|
"runtime_metric"
|
|
],
|
|
"title": "Instrument Kind",
|
|
"type": "string"
|
|
},
|
|
"instrument_version": {
|
|
"maxLength": 40,
|
|
"minLength": 1,
|
|
"title": "Instrument Version",
|
|
"type": "string"
|
|
},
|
|
"language": {
|
|
"default": "ko-KR",
|
|
"maxLength": 35,
|
|
"minLength": 2,
|
|
"title": "Language",
|
|
"type": "string"
|
|
},
|
|
"license_id": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 200,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "License Id"
|
|
},
|
|
"metadata": {
|
|
"title": "Metadata",
|
|
"type": "object"
|
|
},
|
|
"name_ko": {
|
|
"maxLength": 200,
|
|
"minLength": 1,
|
|
"title": "Name Ko",
|
|
"type": "string"
|
|
},
|
|
"scoring_schema": {
|
|
"title": "Scoring Schema",
|
|
"type": "object"
|
|
},
|
|
"validation_basis": {
|
|
"maxLength": 1000,
|
|
"minLength": 1,
|
|
"title": "Validation Basis",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"instrument_id",
|
|
"instrument_version",
|
|
"name_ko",
|
|
"instrument_kind",
|
|
"construct",
|
|
"validation_basis"
|
|
],
|
|
"title": "MeasurementInstrument",
|
|
"type": "object"
|
|
},
|
|
"ModelRun": {
|
|
"additionalProperties": false,
|
|
"description": "측정을 만든 모델 실행의 재현·드리프트 감사 계약.",
|
|
"properties": {
|
|
"agent_role": {
|
|
"enum": [
|
|
"client",
|
|
"evaluator",
|
|
"coach",
|
|
"scenario",
|
|
"research"
|
|
],
|
|
"title": "Agent Role",
|
|
"type": "string"
|
|
},
|
|
"created_at": {
|
|
"format": "date-time",
|
|
"title": "Created At",
|
|
"type": "string"
|
|
},
|
|
"error_code": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 120,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Error Code"
|
|
},
|
|
"input_evidence_hash": {
|
|
"pattern": "^[a-f0-9]{64}$",
|
|
"title": "Input Evidence Hash",
|
|
"type": "string"
|
|
},
|
|
"metadata": {
|
|
"title": "Metadata",
|
|
"type": "object"
|
|
},
|
|
"model": {
|
|
"maxLength": 160,
|
|
"minLength": 1,
|
|
"title": "Model",
|
|
"type": "string"
|
|
},
|
|
"model_run_id": {
|
|
"format": "uuid",
|
|
"title": "Model Run Id",
|
|
"type": "string"
|
|
},
|
|
"prompt_bundle_hash": {
|
|
"pattern": "^[a-f0-9]{64}$",
|
|
"title": "Prompt Bundle Hash",
|
|
"type": "string"
|
|
},
|
|
"prompt_bundle_id": {
|
|
"maxLength": 160,
|
|
"minLength": 1,
|
|
"title": "Prompt Bundle Id",
|
|
"type": "string"
|
|
},
|
|
"prompt_bundle_version": {
|
|
"maxLength": 40,
|
|
"minLength": 1,
|
|
"title": "Prompt Bundle Version",
|
|
"type": "string"
|
|
},
|
|
"provider": {
|
|
"maxLength": 80,
|
|
"minLength": 1,
|
|
"title": "Provider",
|
|
"type": "string"
|
|
},
|
|
"session_id": {
|
|
"anyOf": [
|
|
{
|
|
"format": "uuid",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Session Id"
|
|
},
|
|
"status": {
|
|
"default": "ready",
|
|
"enum": [
|
|
"ready",
|
|
"degraded",
|
|
"error"
|
|
],
|
|
"title": "Status",
|
|
"type": "string"
|
|
},
|
|
"structured_schema_version": {
|
|
"maxLength": 80,
|
|
"minLength": 1,
|
|
"title": "Structured Schema Version",
|
|
"type": "string"
|
|
},
|
|
"turn_id": {
|
|
"anyOf": [
|
|
{
|
|
"format": "uuid",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Turn Id"
|
|
}
|
|
},
|
|
"required": [
|
|
"agent_role",
|
|
"provider",
|
|
"model",
|
|
"prompt_bundle_id",
|
|
"prompt_bundle_version",
|
|
"prompt_bundle_hash",
|
|
"structured_schema_version",
|
|
"input_evidence_hash"
|
|
],
|
|
"title": "ModelRun",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"$id": "https://vignette.local/contracts/measurement_contract.v1.json",
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"enums": {
|
|
"aiViews": [
|
|
"client",
|
|
"counselor",
|
|
"evaluator",
|
|
"supervisor",
|
|
"research"
|
|
],
|
|
"allianceCheckpoints": [
|
|
"pre",
|
|
"mid",
|
|
"post"
|
|
],
|
|
"allianceDimensions": [
|
|
"goal",
|
|
"task",
|
|
"bond"
|
|
],
|
|
"constructs": [
|
|
"working_alliance",
|
|
"session_outcome",
|
|
"rupture_repair",
|
|
"counselor_skill",
|
|
"self_calibration",
|
|
"transfer",
|
|
"simulation_progress"
|
|
],
|
|
"instrumentKinds": [
|
|
"validated_measure",
|
|
"training_metric",
|
|
"simulation_signal",
|
|
"runtime_metric"
|
|
],
|
|
"measurementStatuses": [
|
|
"ready",
|
|
"degraded",
|
|
"error",
|
|
"rejected"
|
|
],
|
|
"modelRunStatuses": [
|
|
"ready",
|
|
"degraded",
|
|
"error"
|
|
],
|
|
"perspectives": [
|
|
"client_agent_report",
|
|
"learner_self_report",
|
|
"independent_observer",
|
|
"supervisor_human",
|
|
"client_simulation",
|
|
"runtime_observation"
|
|
],
|
|
"sourceKinds": [
|
|
"simulated_state",
|
|
"model_inferred",
|
|
"agent_reported",
|
|
"learner_reported",
|
|
"human_rated",
|
|
"observed_runtime"
|
|
]
|
|
},
|
|
"sourcePerspectiveCompatibility": {
|
|
"agent_reported": [
|
|
"client_agent_report"
|
|
],
|
|
"human_rated": [
|
|
"supervisor_human"
|
|
],
|
|
"learner_reported": [
|
|
"learner_self_report"
|
|
],
|
|
"model_inferred": [
|
|
"independent_observer"
|
|
],
|
|
"observed_runtime": [
|
|
"runtime_observation"
|
|
],
|
|
"simulated_state": [
|
|
"client_simulation"
|
|
]
|
|
},
|
|
"title": "Vignette Outcome & Alliance Measurement Contract",
|
|
"version": 1
|
|
}
|