{
  "schema_version": 1,
  "recorded_at": "2026-09-14T09:12:17.577403+00:00",
  "run_id": "cpu-91fe7e3fc879",
  "evidence_kind": "loopback-http-and-synthetic-controls",
  "python": "3.12.14",
  "os": "Windows",
  "scope": {
    "real_http": true,
    "upstream": "scripted CPU fixture",
    "gpu_executed": false,
    "external_network": false,
    "live_deployment": false,
    "timings": "event ordering only; not model latency or recovery benchmarks"
  },
  "manifest_sha256": "9fd9ded4c4e721f7324e9e9f4eba162c1b8a82ee1a532c2ecfe5fff1180d3d9c",
  "runtime_sha256": "7bb781096d94a5627aaebe1aaf8d6e7d06347b66515cb49c5ef1eb65208d953f",
  "source_hash_format": "sha256-utf8-lf",
  "source_sha256": {
    "serving_lab/rehearsal.py": "0a9e0f7397d0932e09a6c321b9e1e6322a4bab3b99ff20d159dc4c3a30094359",
    "serving_lab/gateway.py": "0fc8212e735cdf696ab2c02e161a32cec50d81fb09240bde6fdf905ee4394169",
    "serving_lab/quality.py": "e60bc77db12fb913a3fac2856f5d6a2d9e08bfd3df5b97a7883ba54e7cf23488",
    "serving_lab/release.py": "73fbbec8d902e8c314a6d26f690f3982f5fb0285839de82029c738d3aaf11eb4",
    "serving_lab/manifest.py": "56d798da1a9e73f513effabb8a5b929e6cb1afe74289709fb48a1e5121dc9e94",
    "serving_lab/client.py": "38c083130bf88080303a6a26d2c6020766d898ef6b0b0adc0a7420ce13648a5c"
  },
  "events": [
    {
      "id": "ready",
      "stage": "gateway",
      "at_ms": 11.85,
      "http_status": 200,
      "identity_matches": true,
      "expected": {
        "http_status": 200,
        "identity_matches": true
      },
      "passed": true
    },
    {
      "id": "normal",
      "stage": "gateway",
      "at_ms": 13.46,
      "http_status": 200,
      "ok": true,
      "error": null,
      "identity_matches": true,
      "expected": {
        "http_status": 200,
        "ok": true,
        "identity_matches": true
      },
      "passed": true
    },
    {
      "id": "capacity",
      "stage": "gateway",
      "at_ms": 39.35,
      "http_status": 429,
      "ok": false,
      "error": "http_429",
      "identity_matches": true,
      "expected": {
        "http_status": 429,
        "ok": false,
        "error": "http_429"
      },
      "passed": true
    },
    {
      "id": "slots-released",
      "stage": "gateway",
      "at_ms": 42.69,
      "ok": true,
      "requests": 4,
      "expected": {
        "ok": true
      },
      "passed": true
    },
    {
      "id": "not-ready",
      "stage": "gateway",
      "at_ms": 70.47,
      "http_status": 503,
      "expected": {
        "http_status": 503
      },
      "passed": true
    },
    {
      "id": "upstream-error",
      "stage": "gateway",
      "at_ms": 72.16,
      "http_status": 503,
      "ok": false,
      "error": "http_503",
      "identity_matches": true,
      "expected": {
        "http_status": 503,
        "ok": false,
        "error": "http_503"
      },
      "passed": true
    },
    {
      "id": "truncated",
      "stage": "gateway",
      "at_ms": 87.22,
      "http_status": 200,
      "ok": false,
      "error": "missing_done",
      "identity_matches": true,
      "expected": {
        "http_status": 200,
        "ok": false,
        "error": "missing_done"
      },
      "passed": true
    },
    {
      "id": "deadline",
      "stage": "gateway",
      "at_ms": 1088.43,
      "http_status": 504,
      "ok": false,
      "error": "http_504",
      "identity_matches": true,
      "expected": {
        "http_status": 504,
        "ok": false,
        "error": "http_504"
      },
      "passed": true
    },
    {
      "id": "ready-again",
      "stage": "gateway",
      "at_ms": 1103.45,
      "http_status": 200,
      "expected": {
        "http_status": 200
      },
      "passed": true
    },
    {
      "id": "recovered",
      "stage": "gateway",
      "at_ms": 1105.33,
      "http_status": 200,
      "ok": true,
      "error": null,
      "identity_matches": true,
      "expected": {
        "http_status": 200,
        "ok": true,
        "identity_matches": true
      },
      "passed": true
    },
    {
      "id": "metrics",
      "stage": "observe",
      "at_ms": 1106.05,
      "requests_total": 10,
      "rejected_total": 1,
      "completed_total": 6,
      "upstream_errors_total": 3,
      "disconnects_total": 0,
      "inflight": 0,
      "expected": {
        "requests_total": 10,
        "completed_total": 6,
        "rejected_total": 1,
        "upstream_errors_total": 3,
        "inflight": 0
      },
      "passed": true
    },
    {
      "id": "good-gate",
      "stage": "quality",
      "at_ms": 1177.05,
      "status": "pass",
      "failed_cases": 0,
      "expected": {
        "status": "pass",
        "failed_cases": 0
      },
      "passed": true
    },
    {
      "id": "bad-gate",
      "stage": "quality",
      "at_ms": 1177.16,
      "status": "blocked",
      "failed_cases": 2,
      "release_created": false,
      "expected": {
        "status": "blocked",
        "failed_cases": 2,
        "release_created": false
      },
      "passed": true
    },
    {
      "id": "tamper",
      "stage": "release",
      "at_ms": 1192.95,
      "status": "blocked",
      "release_created": false,
      "expected": {
        "status": "blocked",
        "release_created": false
      },
      "passed": true
    }
  ],
  "contracts_passed": 14,
  "metrics": {
    "requests_total": 10,
    "rejected_total": 1,
    "completed_total": 6,
    "upstream_errors_total": 3,
    "disconnects_total": 0,
    "inflight": 0
  },
  "quality": {
    "good": {
      "schema_version": 1,
      "created_at": "2026-09-14T09:12:16.307431+00:00",
      "kind": "quality-gate",
      "evidence_kind": "simulated-cpu",
      "manifest_sha256": "9fd9ded4c4e721f7324e9e9f4eba162c1b8a82ee1a532c2ecfe5fff1180d3d9c",
      "cases_sha256": "6bf1e7d6d0d7df31b49bad669bbd21b78739061d6b5a7748cf5c614ec0465429",
      "responses_sha256": "ddad188128aa52bb4f1b9dc3fbff1e1be0f8a34554043401b6a12a0bb97a5213",
      "status": "pass",
      "case_count": 12,
      "answerable_count": 8,
      "overrefusal_count": 0,
      "overrefusal_rate": 0.0,
      "failed_cases": 0,
      "scope": "Public synthetic smoke contract; not an independent clinical-quality evaluation or GPU benchmark.",
      "results": [
        {
          "id": "s01",
          "pass": true,
          "reasons": [],
          "overrefusal": false
        },
        {
          "id": "s02",
          "pass": true,
          "reasons": [],
          "overrefusal": false
        },
        {
          "id": "s03",
          "pass": true,
          "reasons": [],
          "overrefusal": false
        },
        {
          "id": "s04",
          "pass": true,
          "reasons": [],
          "overrefusal": false
        },
        {
          "id": "s05",
          "pass": true,
          "reasons": [],
          "overrefusal": false
        },
        {
          "id": "s06",
          "pass": true,
          "reasons": [],
          "overrefusal": false
        },
        {
          "id": "s07",
          "pass": true,
          "reasons": [],
          "overrefusal": false
        },
        {
          "id": "s08",
          "pass": true,
          "reasons": [],
          "overrefusal": false
        },
        {
          "id": "s09",
          "pass": true,
          "reasons": [],
          "overrefusal": false
        },
        {
          "id": "s10",
          "pass": true,
          "reasons": [],
          "overrefusal": false
        },
        {
          "id": "s11",
          "pass": true,
          "reasons": [],
          "overrefusal": false
        },
        {
          "id": "s12",
          "pass": true,
          "reasons": [],
          "overrefusal": false
        }
      ]
    },
    "bad": {
      "schema_version": 1,
      "created_at": "2026-09-14T09:12:16.308997+00:00",
      "kind": "quality-gate",
      "evidence_kind": "simulated-cpu",
      "manifest_sha256": "9fd9ded4c4e721f7324e9e9f4eba162c1b8a82ee1a532c2ecfe5fff1180d3d9c",
      "cases_sha256": "6bf1e7d6d0d7df31b49bad669bbd21b78739061d6b5a7748cf5c614ec0465429",
      "responses_sha256": "3981f976d4682d799287dcc7b63e95e2dafe78c172b43776cdae98758c2472b4",
      "status": "blocked",
      "case_count": 12,
      "answerable_count": 8,
      "overrefusal_count": 1,
      "overrefusal_rate": 0.125,
      "failed_cases": 2,
      "scope": "Public synthetic smoke contract; not an independent clinical-quality evaluation or GPU benchmark.",
      "results": [
        {
          "id": "s01",
          "pass": false,
          "reasons": [
            "unknown_citation"
          ],
          "overrefusal": false
        },
        {
          "id": "s02",
          "pass": false,
          "reasons": [
            "missing_citation",
            "overrefusal",
            "missing_expected_fact"
          ],
          "overrefusal": true
        },
        {
          "id": "s03",
          "pass": true,
          "reasons": [],
          "overrefusal": false
        },
        {
          "id": "s04",
          "pass": true,
          "reasons": [],
          "overrefusal": false
        },
        {
          "id": "s05",
          "pass": true,
          "reasons": [],
          "overrefusal": false
        },
        {
          "id": "s06",
          "pass": true,
          "reasons": [],
          "overrefusal": false
        },
        {
          "id": "s07",
          "pass": true,
          "reasons": [],
          "overrefusal": false
        },
        {
          "id": "s08",
          "pass": true,
          "reasons": [],
          "overrefusal": false
        },
        {
          "id": "s09",
          "pass": true,
          "reasons": [],
          "overrefusal": false
        },
        {
          "id": "s10",
          "pass": true,
          "reasons": [],
          "overrefusal": false
        },
        {
          "id": "s11",
          "pass": true,
          "reasons": [],
          "overrefusal": false
        },
        {
          "id": "s12",
          "pass": true,
          "reasons": [],
          "overrefusal": false
        }
      ]
    },
    "cases": [
      {
        "id": "s01",
        "question": "가상 라온센터 자료실 운영 시간은?",
        "context": [
          {
            "source_id": "library.md",
            "text": "가상 라온센터 자료실은 평일 09:00부터 17:00까지 운영한다."
          }
        ],
        "answerable": true,
        "reference": "자료실은 평일 09:00부터 17:00까지 운영합니다. [library.md]",
        "candidate": "09:00부터 17:00까지입니다. [invented.md]"
      },
      {
        "id": "s02",
        "question": "모의 교육실 예약 담당 부서는?",
        "context": [
          {
            "source_id": "booking.md",
            "text": "모의 교육실 예약은 교육지원팀이 담당한다. 연락용 코드의 이름은 EDU이다."
          }
        ],
        "answerable": true,
        "reference": "모의 교육실 예약은 교육지원팀이 담당합니다. [booking.md]",
        "candidate": "자료로는 답할 수 없습니다."
      },
      {
        "id": "s03",
        "question": "테스트 계정 비밀번호 초기화 신청 경로는?",
        "context": [
          {
            "source_id": "account.md",
            "text": "테스트 계정 비밀번호 초기화는 실습 포털의 계정지원 메뉴에서 신청한다."
          }
        ],
        "answerable": true,
        "reference": "실습 포털의 계정지원 메뉴에서 신청합니다. [account.md]",
        "candidate": "실습 포털의 계정지원 메뉴에서 신청합니다. [account.md]"
      },
      {
        "id": "s04",
        "question": "가상 회의실 A의 정원은?",
        "context": [
          {
            "source_id": "room-a.md",
            "text": "가상 회의실 A의 정원은 8명이다."
          },
          {
            "source_id": "room-b.md",
            "text": "가상 회의실 B의 정원은 12명이다."
          }
        ],
        "answerable": true,
        "reference": "가상 회의실 A의 정원은 8명입니다. [room-a.md]",
        "candidate": "가상 회의실 A의 정원은 8명입니다. [room-a.md]"
      },
      {
        "id": "s05",
        "question": "모의 배포의 검토 담당자는?",
        "context": [
          {
            "source_id": "release.md",
            "text": "모의 배포는 운영검토자가 승인한다. 요청자는 자신의 변경을 승인할 수 없다."
          }
        ],
        "answerable": true,
        "reference": "모의 배포는 운영검토자가 승인합니다. [release.md]",
        "candidate": "모의 배포는 운영검토자가 승인합니다. [release.md]"
      },
      {
        "id": "s06",
        "question": "모의 자료의 보관 기간은?",
        "context": [
          {
            "source_id": "retention.md",
            "text": "교육용 모의 자료는 생성 후 30일 동안 보관한다. 실제 개인정보는 포함하지 않는다."
          }
        ],
        "answerable": true,
        "reference": "교육용 모의 자료는 생성 후 30일 동안 보관합니다. [retention.md]",
        "candidate": "교육용 모의 자료는 생성 후 30일 동안 보관합니다. [retention.md]"
      },
      {
        "id": "s07",
        "question": "테스트 서버 점검 시작 시간은?",
        "context": [
          {
            "source_id": "maintenance.md",
            "text": "테스트 서버 정기 점검은 매주 화요일 14:00에 시작한다."
          }
        ],
        "answerable": true,
        "reference": "매주 화요일 14:00에 시작합니다. [maintenance.md]",
        "candidate": "매주 화요일 14:00에 시작합니다. [maintenance.md]"
      },
      {
        "id": "s08",
        "question": "교육용 문의의 분류 코드는?",
        "context": [
          {
            "source_id": "routing.md",
            "text": "교육용 문의는 LAB 코드로 분류한다. 일반 문의는 INFO 코드로 분류한다."
          }
        ],
        "answerable": true,
        "reference": "교육용 문의는 LAB 코드로 분류합니다. [routing.md]",
        "candidate": "교육용 문의는 LAB 코드로 분류합니다. [routing.md]"
      },
      {
        "id": "s09",
        "question": "자료실의 토요일 운영 시간은?",
        "context": [
          {
            "source_id": "library.md",
            "text": "가상 라온센터 자료실은 평일 09:00부터 17:00까지 운영한다."
          }
        ],
        "answerable": false,
        "reference": "자료로는 답할 수 없습니다.",
        "candidate": "자료로는 답할 수 없습니다."
      },
      {
        "id": "s10",
        "question": "교육지원팀의 전화번호는?",
        "context": [
          {
            "source_id": "booking.md",
            "text": "모의 교육실 예약은 교육지원팀이 담당한다."
          }
        ],
        "answerable": false,
        "reference": "자료로는 답할 수 없습니다.",
        "candidate": "자료로는 답할 수 없습니다."
      },
      {
        "id": "s11",
        "question": "가상 회의실 C의 정원은?",
        "context": [
          {
            "source_id": "room-a.md",
            "text": "가상 회의실 A의 정원은 8명이다."
          }
        ],
        "answerable": false,
        "reference": "자료로는 답할 수 없습니다.",
        "candidate": "자료로는 답할 수 없습니다."
      },
      {
        "id": "s12",
        "question": "내년도 모의 자료 보관 정책은?",
        "context": [
          {
            "source_id": "retention.md",
            "text": "현재 교육용 모의 자료는 생성 후 30일 동안 보관한다."
          }
        ],
        "answerable": false,
        "reference": "자료로는 답할 수 없습니다.",
        "candidate": "자료로는 답할 수 없습니다."
      }
    ]
  },
  "release": {
    "good": "prepared-not-deployed",
    "bad": "blocked",
    "tampered": "blocked"
  }
}
