{
 "ticket": "U84 #121",
 "generatedAt": "2026-10-28T16:43:42.593832+08:00",
 "startedAt": "2026-10-28T16:43:40.177192+08:00",
 "purpose": "评测框架/机械指标/成本模型/记录格式与回归门本地确定性验证；真实模型评测按票面口径受阻",
 "exitCode": 0,
 "testCount": 19,
 "reports": [
  {
   "name": "study.aieval.EvaluatorSpiTest",
   "tests": "6",
   "failures": "0",
   "errors": "0",
   "skipped": "0",
   "time": "0.036",
   "file": "target/surefire-reports/TEST-study.aieval.EvaluatorSpiTest.xml"
  },
  {
   "name": "study.aieval.LatencyContextGateTest",
   "tests": "5",
   "failures": "0",
   "errors": "0",
   "skipped": "0",
   "time": "0.144",
   "file": "target/surefire-reports/TEST-study.aieval.LatencyContextGateTest.xml"
  },
  {
   "name": "study.aieval.MetricsAndGateTest",
   "tests": "8",
   "failures": "0",
   "errors": "0",
   "skipped": "0",
   "time": "0.024",
   "file": "target/surefire-reports/TEST-study.aieval.MetricsAndGateTest.xml"
  }
 ],
 "results": [
  {
   "name": "clean-test",
   "command": [
    "/Users/gaochao/develop/maven-3.9.9/bin/mvn",
    "-B",
    "-q",
    "clean",
    "test"
   ],
   "exitCode": 0,
   "runnerExitCode": 0,
   "timedOut": false,
   "failure": null,
   "cleanupError": null,
   "observed": [
    "U84 blockedSemantics=PASS blocked!=failed blocked!=passed",
    "U84 credentialGate=PASS anyCredential=false present=0",
    "U84 latencyPoints=PASS firstMs=82 totalMs=94 semantics=measured-on-stub",
    "U84 contextBudget=PASS window=8000 maxChunks=17 arithmetic=true",
    "U84 streamTiming=PASS elapsedMs=25 order=preserved",
    "U84 gate=PASS 6/6>=0.9 true 5/6>=0.8 true 4/6>=0.8 false empty=false",
    "U84 recordFormat=PASS lines=2 jsonl=true",
    "U84 dataset=PASS cases=6 authzDenied=2 kbBlocks=11",
    "U84 kbAcl=PASS blocks=11 confidential=1",
    "U84 fabricatedCitation=PASS fabricated=detected honest=clean",
    "U84 citationCoverage=PASS good=true bad=false none=skip",
    "U84 costModel=PASS perCall=0.02 tokenized=0.0018",
    "U84 usage=PASS prompt=1200 completion=300 total=1500",
    "U84 relevancyYes=PASS score=1 invocations=1",
    "U84 relevancyNo=PASS score=0",
    "U84 factChecking=PASS yesPass=true noPass=false",
    "U84 relevancyPrompt=PASS rendered=true",
    "U84 judgeStrictness=PASS paddedYes=true chineseNo=true",
    "U84 spiPath=PASS invocations=1 network=false"
   ]
  }
 ],
 "observations": [
  "U84 blockedSemantics",
  "U84 citationCoverage",
  "U84 contextBudget",
  "U84 costModel",
  "U84 credentialGate",
  "U84 dataset",
  "U84 fabricatedCitation",
  "U84 factChecking",
  "U84 gate",
  "U84 judgeStrictness",
  "U84 kbAcl",
  "U84 latencyPoints",
  "U84 recordFormat",
  "U84 relevancyNo",
  "U84 relevancyPrompt",
  "U84 relevancyYes",
  "U84 spiPath",
  "U84 streamTiming",
  "U84 usage"
 ],
 "environment": {
  "os": "macOS-27.2-arm64-arm-64bit",
  "arch": "arm64",
  "javaVersion": "openjdk version \"21.0.11\" 2026-04-21 LTS",
  "maven": "Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)",
  "dependencies": {
   "spring-ai-client-chat": [
    "2.0.2"
   ],
   "spring-ai-commons": [
    "2.0.2"
   ],
   "spring-ai-model": [
    "2.0.2"
   ],
   "spring-boot": [
    "4.0.9"
   ],
   "spring-core": [
    "7.0.10"
   ]
  }
 },
 "files": {
  "README.md": "426415c5d4c35bf88959742b89f6e1d21b54e119cdfc1750dbdeea3a99fd6645",
  "pom.xml": "2dcd84072fbde7e54884cb2a1c2a737deda51076c269a40aea6dcdb794b642c2",
  "run.py": "af32e38eee404b6babdd046a15ed1acbb6a0047522ded6cb4a5fcf7d8ff0d6f9",
  "src/main/java/study/aieval/CredentialGate.java": "a387689f8fb33a2127604933dbdefda3e34a93dbf9531a26b07dde49126f7150",
  "src/main/java/study/aieval/EvalDataset.java": "dc7a37de6bcafda9327d2e9fb9d21c6b4e7abdc0c7c4a2d465224463390c623d",
  "src/main/java/study/aieval/EvalScriptedChatModel.java": "d02f1b909b1f33044c7ac9a3c5fb73444263d28ca8624ec7a4b9fa3498999a1b",
  "src/main/resources/dataset/platform-handbook.md": "04e955a6d8db863aff4e329140fbb6edfd92f78fd51f27e1304f1525f2a20988",
  "src/main/resources/dataset/public-faq.md": "891d04bfca7a37dbc0b0f1106ff3208ee8365883599f09b9bda9ac8c506a1017",
  "src/test/java/study/aieval/EvaluatorSpiTest.java": "dc6f2e91b8c050dccede899016481166e1e2ebbc05160e603666d8dff2dc7ad5",
  "src/test/java/study/aieval/LatencyContextGateTest.java": "4ad3eeccd981ea06d15a60ceb34888a1d534d3a6afc8ee86eac98e9f21c134a6",
  "src/test/java/study/aieval/MetricsAndGateTest.java": "008fc9aa0ca728cca0c061ee25f3b855c7a831962883124805c924766d01300d"
 },
 "credentialGate": {
  "queriedAt": "2026-10-28T16:43:40.182022+08:00",
  "variables": [
   "OPENAI_API_KEY",
   "ANTHROPIC_API_KEY",
   "DASHSCOPE_API_KEY",
   "DEEPSEEK_API_KEY",
   "MOONSHOT_API_KEY",
   "ZHIPUAI_API_KEY",
   "GOOGLE_API_KEY"
  ],
  "present": [],
  "localInferencePort": null,
  "state": "受阻",
  "reason": "未检测到任何 LLM 凭据（7 个环境变量均未设置）且本机无本地推理服务（11434/1234 未监听）：真实模型效果/引用失真/越权实测/上下文/延迟/成本全线受阻。受阻仍待验证，不以替身结果宣称方向完成。恢复路径：设置任一凭据后重跑 python3 labs/spring-ai-eval/run.py，记录格式与门禁判定无需改动。"
 },
 "moduleBoundaries": {
  "eval-lab": "Evaluator SPI 用替身 judge 驱动真实执行路径；机械指标（引用覆盖率、越权口径、成本算术、回归门）为确定性计算。所有替身回答是脚本，不产生真实评测分数。"
 },
 "limits": [
  "真实模型效果、引用失真、越权实测、上下文超限形态、延迟分布（P50/P99）、真实账单：全部受阻（无凭据），本入口如实报告且不宣称。",
  "替身 judge 的 yes/no 只验证执行路径与判定分支，不证明真实 judge 的判定质量。",
  "评测集为与 U82/U83 同源的合成数据（6 用例、11 段知识块），不冒充真实业务分布。",
  "成本模型是单位化算术（每调用/token 单价 × 数量），缺真实定价与 token 计量，不是账单。",
  "judge 偏差（LLM-as-judge 的系统性误差）未实测，只做机制论证。",
  "Micrometer 指标导出未运行。"
 ]
}
