{
 "ticket": "U68 #105",
 "generatedAt": "2026-10-28T23:47:59.860541+08:00",
 "startedAt": "2026-10-28T23:47:57.998092+08:00",
 "purpose": "AI 生成代码的审查/验证/修正工具链：编译、测试、API 核实、敏感扫描、任务卡验收",
 "exitCode": 0,
 "testCount": 20,
 "reports": [
  {
   "name": "study.aidev.GeneratedReviewTest",
   "tests": "10",
   "failures": "0",
   "errors": "0",
   "skipped": "0",
   "time": "0.356"
  },
  {
   "name": "study.aidev.SensitiveScanTest",
   "tests": "5",
   "failures": "0",
   "errors": "0",
   "skipped": "0",
   "time": "0.031"
  },
  {
   "name": "study.aidev.task.RefundPolicyTaskTest",
   "tests": "5",
   "failures": "0",
   "errors": "0",
   "skipped": "0",
   "time": "0.005"
  }
 ],
 "results": [
  {
   "name": "clean-test",
   "command": [
    "/Users/gaochao/develop/maven-3.9.9/bin/mvn",
    "-B",
    "-q",
    "clean",
    "test"
   ],
   "exitCode": 0,
   "observed": [
    "U68 counterRace=PASS generated=19885 fixed=80000",
    "U68 nullContract=PASS generated=NPE fixed=explicit-illegal",
    "U68 intOverflow=PASS generated=-2147483596 fixed=long-correct overflowExplicit=true",
    "U68 parallelCount=PASS fixed=stable generated=unspecified",
    "U68 monthEnd=PASS generated=2026-03-02 fixed=2026-02-28",
    "U68 sqlInjection=PASS generated=concatenated fixed=placeholder",
    "U68 apiVerify=PASS exists=true invented=rejected deprecated=flagged",
    "U68 retryBudget=PASS generated=unbounded fixed=3-attempts",
    "U68 floatAndIndex=PASS generated=wrong fixed=guarded",
    "U68 moneyPrecision=PASS generated=wrong fixed=exact",
    "U68 taskGeneratedCaught=PASS doubleComparison=true refundedWrong=true",
    "U68 taskWindow=PASS day0=true day7=true day8=false future=false",
    "U68 taskAmount=PASS scale=2 exact=true value=10.01",
    "U68 taskIllegal=PASS nullOrder=true negative=true",
    "U68 taskIdempotent=PASS refunded=false",
    "U68 privateKeyAndPassword=PASS blocks=2",
    "U68 treeScan=PASS findings=1 targetSkipped=true",
    "U68 secretShapes=PASS rules=[aws-access-key, github-token, internal-ip, jdbc-with-password, openai-style-key]",
    "U68 cleanFile=PASS findings=0",
    "U68 dlpBoundary=PASS evasiveUndetected=true rules=7"
   ]
  }
 ],
 "observations": [
  "U68 apiVerify",
  "U68 cleanFile",
  "U68 counterRace",
  "U68 dlpBoundary",
  "U68 floatAndIndex",
  "U68 intOverflow",
  "U68 moneyPrecision",
  "U68 monthEnd",
  "U68 nullContract",
  "U68 parallelCount",
  "U68 privateKeyAndPassword",
  "U68 retryBudget",
  "U68 secretShapes",
  "U68 sqlInjection",
  "U68 taskAmount",
  "U68 taskGeneratedCaught",
  "U68 taskIdempotent",
  "U68 taskIllegal",
  "U68 taskWindow",
  "U68 treeScan"
 ],
 "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": {
   "junit-jupiter": "6.0.3",
   "spring-boot": "4.0.9",
   "spring-core": "7.0.10"
  }
 },
 "files": {
  "README.md": "f57f52c9a421fa81c8df16225a202e40a94699b37e731287fda0acf7bc306cfd",
  "pom.xml": "676e52a2be45601406775c3fc3f9cb72161accb9bcff93f71c72d297953caa50",
  "run.py": "5cb440c89f8a097ff76d34ed2fd77f85d3a68fb7aa961715fd0ba58e9f682c0a",
  "src/main/java/study/aidev/apicheck/ApiCheckVerifier.java": "466d94b1c15a0d6f9aecab66ac061592ce32ed57231982153cb14565e43827a0",
  "src/main/java/study/aidev/generated/FixedSnippets.java": "2e894adb2341fa6cd43b66ba2eede920d4b61fbb4e10dc4a5edd3ab0e0c525d1",
  "src/main/java/study/aidev/generated/GeneratedSnippets.java": "d47eb9161f173d18fe0a4ddd53cba9f25a6045e344a72eee5fa482ba5dda47c1",
  "src/main/java/study/aidev/sensitive/SensitiveScanner.java": "837c7c8d9c99494afb2a5918cfa9b5e12572f565d5e331ca71c6c3126f9f57cc",
  "src/main/java/study/aidev/task/RefundPolicy.java": "e0d267a46c36fe306a41a2eb9ec8be05bac8da82c064579e3579e17c48b7f634",
  "src/test/java/study/aidev/GeneratedReviewTest.java": "a5babd8bc63d265e9ac62376fab71c3851545b72cd130432bd425512116880fd",
  "src/test/java/study/aidev/SensitiveScanTest.java": "e0ec321506df07126b9fca01d8e302fb597856158f0acf728363674b067504bb",
  "src/test/java/study/aidev/task/RefundPolicyTaskTest.java": "6fb056d8910e8bdcb26998fee14aa6b0d945717da3afc3103b0762fee287768a",
  "tasks/ledger-refund-generated.md": "f477bd61589ba25a0c23d32141bc26166d26e6f17ad8a68d72c8383e01128ca6",
  "tasks/ledger-refund-task.md": "0a4cbdb9d010614b84e632a1c9a10b483ca94e3eec642e3c2af37e4ad468c9f2"
 },
 "credentialGate": {
  "variables": [
   "OPENAI_API_KEY",
   "ANTHROPIC_API_KEY",
   "DASHSCOPE_API_KEY",
   "DEEPSEEK_API_KEY",
   "MOONSHOT_API_KEY",
   "ZHIPUAI_API_KEY",
   "GOOGLE_API_KEY"
  ],
  "present": [],
  "state": "受阻",
  "reason": "未检测到任何 LLM 凭据：真实模型生成质量、提示词效果与\"模型是否会犯这些错误\"不可验证（受阻）；本实验的生成样本是人工构造的教学样本，不是任何真实模型的输出。"
 },
 "generatedSampleDeclaration": "tasks/ledger-refund-generated.md 与 GeneratedSnippets.java 中的错误代码均为人工构造的教学样本，不代表任何真实模型（含 Claude）的输出质量，也不构成对模型的评测。",
 "repoSecretScan": {
  "rules": 6,
  "hits": []
 },
 "limits": [
  "真实模型生成质量与提示词效果受阻（无凭据）；本票不评测任何模型，只验证审查工具链。",
  "生成样本是人工构造的教学样本，错误类型取自真实代码评审中的常见类别（金额精度、溢出、月末、null 契约、SQL 拼接、无界重试、竞态、浮点比较、越界）。",
  "敏感扫描是本地正则最低防线；base64、拆分拼接、图片内文字等变形不在规则内（已用反例断言其盲区）。",
  "API 核实只验证类/方法存在性、签名与弃用标记；不验证文档语义、线程安全或行为正确性。",
  "依赖核实只比对依赖树版本，不检查 CVE、许可或传递依赖冲突。"
 ]
}
