{
 "ticket": "U79 #116",
 "startedAt": "2026-10-27T20:33:05.617643+08:00",
 "finishedAt": "2026-10-27T20:33:18.234664+08:00",
 "input": "CASE_DB_PASSWORD=<空密码通过环境变量> python3 labs/order-flow/run.py",
 "exitCode": 0,
 "environment": {
  "jdk": "openjdk version \"21.0.11\" 2026-04-21 LTS\nOpenJDK Runtime Environment (build 21.0.11+11-LTS)\nOpenJDK 64-Bit Server VM (build 21.0.11+11-LTS, mixed mode, sharing)",
  "maven": "Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)\nMaven home: /Users/gaochao/develop/maven-3.9.9\nJava version: 21.0.11, vendor: BellSoft, runtime: /Library/Java/JavaVirtualMachines/liberica-jdk-21.jdk/Contents/Home\nDefault locale: zh_CN_#Hans, platform encoding: UTF-8\nOS name: \"mac os x\", version: \"27.2\", arch: \"aarch64\", family: \"mac\"",
  "os": "macOS-27.2-arm64-arm-64bit",
  "arch": "arm64",
  "python": "3.9.6",
  "dependencies": {
   "tomcat-embed-core": "11.0.27",
   "spring-boot": "4.0.9",
   "spring-webmvc": "7.0.10",
   "spring-tx": "7.0.10",
   "spring-jdbc": "7.0.10",
   "HikariCP": "7.0.2",
   "mybatis-spring-boot-starter": "4.0.1",
   "mybatis": "3.5.19",
   "mybatis-spring": "4.0.0",
   "mysql-connector-j": "9.7.0",
   "nimbus-jose-jwt": "10.4",
   "spring-security-oauth2-resource-server": "7.0.8",
   "junit-jupiter": "6.0.3"
  }
 },
 "reports": [
  {
   "name": "study.orderflow.OrderFlowHttpTest",
   "tests": "17",
   "failures": "0",
   "errors": "0",
   "skipped": "0"
  },
  {
   "name": "study.orderflow.StartupFailureTest",
   "tests": "2",
   "failures": "0",
   "errors": "0",
   "skipped": "0"
  }
 ],
 "testCount": 19,
 "results": [
  {
   "name": "jdk",
   "command": [
    "/Library/Java/JavaVirtualMachines/liberica-jdk-21.jdk/Contents/Home/bin/java",
    "-version"
   ],
   "exitCode": 0,
   "runnerExitCode": 0,
   "timedOut": false,
   "failure": null,
   "cleanupError": null,
   "observed": []
  },
  {
   "name": "maven",
   "command": [
    "/Users/gaochao/develop/maven-3.9.9/bin/mvn",
    "-version"
   ],
   "exitCode": 0,
   "runnerExitCode": 0,
   "timedOut": false,
   "failure": null,
   "cleanupError": null,
   "observed": []
  },
  {
   "name": "test",
   "command": [
    "/Users/gaochao/develop/maven-3.9.9/bin/mvn",
    "-B",
    "-ntp",
    "-q",
    "-f",
    "/Users/gaochao/Documents/面试/software-engineering-study/labs/order-flow/pom.xml",
    "clean",
    "test"
   ],
   "exitCode": 0,
   "runnerExitCode": 0,
   "timedOut": false,
   "failure": null,
   "cleanupError": null,
   "observed": [
    "U79 healthyPath=PASS tenantFromClaim=PASS amount=37.50 stockAfter=7 mysql=8.4.7",
    "U79 probes=PASS liveness=UP readiness=UP",
    "U79 logRedaction=PASS includeHeaders=false includePayload=false includeQueryString=false",
    "U79 validation400=PASS fields=sku,quantity",
    "U79 noToken401=PASS",
    "U79 badToken401=PASS case=expired",
    "U79 badToken401=PASS case=wrongIssuer",
    "U79 badToken401=PASS case=wrongAudience",
    "U79 missingSubjectFailsClosed409=PASS not401=true",
    "U79 writeOnlyGet403=PASS",
    "U79 crossTenant=PASS crossRead=404 selfRead=200 createConflict=409",
    "U79 noScope403=PASS",
    "U79 duplicateSerial=PASS orders=1 stockDeduct=2",
    "U79 keyConflict409=PASS",
    "U79 concurrentDuplicate=PASS threads=12 ok200=9 conflict409=3 orders=1 effects=1",
    "U79 concurrentDistinct=PASS threads=16 ok=8 rejected=8 stockAfter=0",
    "U79 midFailureRollback=PASS deductedThenRolledBack stock=10 idemRows=0 orders=1",
    "U79 exceptionTranslation=PASS duplicateKeyIsIntegrityViolation=true",
    "U79 lockTimeout503=PASS viaQueryTimeout elapsedMs=5026",
    "U79 cleanup=PASS ownDbDropped=true ownDbRemaining=0",
    "U79 missingConfigFail=PASS bindsValidationAtStartup=true",
    "U79 badDbReadinessDown=PASS livenessUp=true portListensButNotServing=true"
   ]
  },
  {
   "name": "dependency",
   "command": [
    "/Users/gaochao/develop/maven-3.9.9/bin/mvn",
    "-B",
    "-ntp",
    "-q",
    "-f",
    "/Users/gaochao/Documents/面试/software-engineering-study/labs/order-flow/pom.xml",
    "dependency:list",
    "-DoutputFile=/dev/stdout"
   ],
   "exitCode": 0,
   "runnerExitCode": 0,
   "timedOut": false,
   "failure": null,
   "cleanupError": null,
   "observed": []
  }
 ],
 "artifacts": {
  "pom.xml": "43306240816354f57cb81e7de1dad57f2acd987d327d850a5f3d94268b77cd49",
  "run.py": "a689b779a1b0f1c69679ac74a9624feaf59ed5c0b2f0d0b1167cdc2e26b5ba23",
  "README.md": "c379e6222edfac0c6526fd2fe7c004a94218b4a84ccebef1e765eca24e24ae02",
  "src/main/resources/application.properties": "42858dc9d4fbf4914119a1a3a2426657ed31ae6614c1d9287aeacf4abbec5dbe",
  "src/main/resources/mapper/OrderMapper.xml": "f32a882834cd1b862b5e90ecd6cfa6d17a887e6fa92a778c701ff3aeb12b5423",
  "src/main/java/study/orderflow/OrderFlowApp.java": "76de5a69f34175b61290fca8b28239687517e27e83aab29b98a71df3716ba8b6",
  "src/main/java/study/orderflow/OrderProperties.java": "0139b65b80d84d6509fc315e33c9eb505d3d627b4e4c8ba84ae76efd21d276d1",
  "src/main/java/study/orderflow/config/DbReadyIndicator.java": "1e116a2d624815263ad400c5998a8001923c914dd64ec53b23995d3c324a2209",
  "src/main/java/study/orderflow/config/ResourceSecurityConfig.java": "4a4ca7e4dc5df185a68c7cae774bb37b9ee38a8a1d7a039c3b2fa674a4e735ee",
  "src/main/java/study/orderflow/config/WebObservationConfig.java": "b2d57492dd483f245cd39f4ed1bf50768e27aef4141f5e9ae1b3b71cb8078ce4",
  "src/main/java/study/orderflow/mapper/OrderMapper.java": "cce6bd2d18e7108b4298c2399a0be5320fc70db60dc4bfc0946d7bfb131b65dd",
  "src/main/java/study/orderflow/service/OrderService.java": "57eaede8f84027e4925f015126cea88fcd0d06a164cfd687cb1a2f21c612356c",
  "src/main/java/study/orderflow/web/CreateOrderRequest.java": "4f719df7443e22025d4b838cc46434a8039d94b2f96a503f121e98122648760e",
  "src/main/java/study/orderflow/web/OrderBusinessException.java": "5b20cc0e81633b75a6684913e573b579b48090831329632d71f361b0d12b7112",
  "src/main/java/study/orderflow/web/OrderController.java": "17d4e66be953d4884a7cc6ee24a625f55dd6b30417d4069c563153534e45e975",
  "src/main/java/study/orderflow/web/OrderErrorAdvice.java": "5c217ec96189b88805ff7355e5c05c3c19a27a8b05c1ce9d7aba189c66505cd8",
  "src/main/java/study/orderflow/web/OrderResponse.java": "88231f40a9d42d82cf329f0997d3ee6b40ccf9c7fd258be0c7fba1f65f12a54c",
  "src/test/java/study/orderflow/LabFixtures.java": "22381495300a513a6296e682ed5df009da6ffbd0e4af9ad9d64ca35366daa7cf",
  "src/test/java/study/orderflow/OrderFlowHttpTest.java": "22809cb90b00f1efe8f9327e03204c6405f4a848cf65ffac233e74643c38f401",
  "src/test/java/study/orderflow/StartupFailureTest.java": "c9de574a0e8cca7169eea58b8f5322d2e6957c08abd66230d47b7e87cc12bc8a"
 },
 "logs": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u79/run-tfolov4q",
 "cleanup": {
  "processes": "本入口创建的进程组已回收；测试 JVM 与 JDK HttpClient 均在用例内关闭",
  "database": "仅创建并 DROP 自己的 study_u79_* 专用库；入口不建删其他库、不改全局配置",
  "externalServices": "本机 MySQL 8.4.7（DBngin，由用户启动）只读连接与专用库；测试结束后服务保持运行"
 },
 "limits": [
  "消息投递/outbox/死信与恢复归 U80，未运行",
  "观测指标/负载/部署/迁移/回滚归 U81，未运行",
  "MySQL MVCC/锁深机制/复制/备份恢复归 U52（未实施），只使用条件 UPDATE、行锁与超时的最小事实",
  "MyBatis 一级/二级缓存、BATCH/Cursor 未启用/未运行；本票只验证事务内会话复用与异常转换",
  "锁超时观察是应用侧语句超时先到；服务器 innodb_lock_wait_timeout 分支未运行",
  "生产 TLS、真实 IdP、多实例部署、连接池生产容量、网络分区、OS 崩溃/断电未运行",
  "安全负例使用真实签名的合成 token（HS256 对称密钥仅实验）；DPoP/多 issuer/introspection 组合未运行"
 ]
}
