{
 "ticket": "U33 #70",
 "startedAt": "2026-10-27T12:20:17.902848+08:00",
 "finishedAt": "2026-10-27T12:20:33.764128+08:00",
 "input": "python3 labs/remote-client/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.0.1\", arch: \"aarch64\", family: \"mac\"",
  "os": "macOS-27.0.1-arm64-arm-64bit",
  "arch": "arm64",
  "python": "3.9.6",
  "dependencies": {
   "feign": {
    "spring-cloud-openfeign-core": "5.0.4",
    "spring-web": "7.0.10",
    "feign-core": "13.6.1",
    "feign-hc5": "13.6.1",
    "httpclient5": "5.5.2",
    "spring-boot": "4.0.9"
   },
   "resilience": {
    "spring-cloud-circuitbreaker-resilience4j": "5.0.3",
    "resilience4j-circuitbreaker": "2.3.0",
    "resilience4j-timelimiter": "2.3.0",
    "resilience4j-retry": "2.3.0",
    "resilience4j-bulkhead": "2.3.0",
    "spring-boot": "4.0.9",
    "h2": "2.4.240"
   }
  }
 },
 "reports": [
  {
   "name": "study.remoteclient.feign.FeignClientLabTest",
   "tests": "13",
   "failures": "0",
   "errors": "0",
   "skipped": "0"
  },
  {
   "name": "study.remoteclient.feign.FeignConfigurationTest",
   "tests": "6",
   "failures": "0",
   "errors": "0",
   "skipped": "0"
  },
  {
   "name": "study.remoteclient.feign.HttpServiceClientLabTest",
   "tests": "1",
   "failures": "0",
   "errors": "0",
   "skipped": "0"
  },
  {
   "name": "study.remoteclient.resilience.BulkheadLabTest",
   "tests": "1",
   "failures": "0",
   "errors": "0",
   "skipped": "0"
  },
  {
   "name": "study.remoteclient.resilience.CircuitBreakerStateMachineTest",
   "tests": "1",
   "failures": "0",
   "errors": "0",
   "skipped": "0"
  },
  {
   "name": "study.remoteclient.resilience.DeadlineCompositionHttpTest",
   "tests": "1",
   "failures": "0",
   "errors": "0",
   "skipped": "0"
  },
  {
   "name": "study.remoteclient.resilience.DecorationOrderTest",
   "tests": "2",
   "failures": "0",
   "errors": "0",
   "skipped": "0"
  },
  {
   "name": "study.remoteclient.resilience.DurableRecoveryHttpTest",
   "tests": "2",
   "failures": "0",
   "errors": "0",
   "skipped": "0"
  },
  {
   "name": "study.remoteclient.resilience.IdempotentRecoveryHttpTest",
   "tests": "3",
   "failures": "0",
   "errors": "0",
   "skipped": "0"
  },
  {
   "name": "study.remoteclient.resilience.ResiliencePolicyTest",
   "tests": "2",
   "failures": "0",
   "errors": "0",
   "skipped": "0"
  },
  {
   "name": "study.remoteclient.resilience.SpringCloudCircuitBreakerLabTest",
   "tests": "1",
   "failures": "0",
   "errors": "0",
   "skipped": "0"
  },
  {
   "name": "study.remoteclient.resilience.TimeLimiterLabTest",
   "tests": "2",
   "failures": "0",
   "errors": "0",
   "skipped": "0"
  }
 ],
 "testCount": 35,
 "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-feign",
   "command": [
    "/Users/gaochao/develop/maven-3.9.9/bin/mvn",
    "-B",
    "-ntp",
    "-q",
    "-f",
    "/Users/gaochao/Documents/面试/software-engineering-study/labs/remote-client/feign/pom.xml",
    "clean",
    "test"
   ],
   "exitCode": 0,
   "runnerExitCode": 0,
   "timedOut": false,
   "failure": null,
   "cleanupError": null,
   "observed": [
    "U33 feignConfiguredTimeout=PASS transportResponseMs=1000 feignReadMs=100 socketTimeout=true slowAttempts=1 recovered=true attempts=3",
    "U33 feignOptionalDecoder=PASS present=true empty204=true malformedRejected=true recovered=true attempts=4",
    "U33 feignExplicitPool=PASS maxTotal=1 maxPerRoute=1 acquireMs=100 blockedBeforeSend=true recovered=true attempts=3",
    "U33 feignConfiguredNoHiddenRetry=PASS status503=true transportRetries=disabled attempts503=1 recovered=true attempts=3",
    "U33 feignCustomErrorDecoder=PASS business422=ItemRejected businessAttempts=1 rate429Attempts=2 recovered=true attempts=5",
    "U33 feignResponseEntityDecoder=PASS status200=true header=true empty204=true malformedRejected=true recovered=true attempts=5",
    "U33 httpServiceClient=PASS restClientProxy=true item=item-7 attempts=1",
    "U33 feignReadTimeout=PASS attempts=1 effects=1 readTimeoutMs=250 root=SocketTimeoutException writeCommitted=true",
    "U33 feignEncoder=PASS jsonBody=true invalid400=true recovered=true attempts=3",
    "U33 feignHiddenRetrySuppressed=PASS status503=ServiceUnavailable attempts=1 readTimeoutMs=250 defaultRetryIntervalMs=1000 reason=intervalExceedsResponseTimeout",
    "U33 feignContract=PASS creationFailed=true requestsBeforeValidCall=0 recovered=true",
    "U33 feignConnect=PASS root=ConnectException status=-1 requestNotSent=true",
    "U33 feignBinding=PASS path=/items/42 headerToken=synthetic item=item-42 attempts=1",
    "U33 feignProxy=PASS hc5=true",
    "U33 feignRetryWrite=PASS attempts=3 effects=3 duplicateEffect=true",
    "U33 feignHiddenRetry=PASS status503=ServiceUnavailable attempts=2 readTimeoutMs=2000 responseTimeoutSuppression=false",
    "U33 feignPostStatusRetry=PASS status503=ServiceUnavailable defaultAttempts=2 defaultEffects=2 disabledAttempts=1 disabledEffects=1 recovered=true",
    "U33 feignRetryer=PASS retryAfter502Attempts=3 plain500Attempts=1 maxAttempts=3",
    "U33 feignErrors=PASS status400=BadRequest attempts400=1 status429=TooManyRequests attempts429=2 hiddenRetry429=true status500=InternalServerError attempts500=1 retryAfter502=RetryableException attemptsRetryAfter=1 neverRetry=true",
    "U33 feignPool=PASS calls=2 distinctRemotePorts=1 reused=true"
   ]
  },
  {
   "name": "test-resilience",
   "command": [
    "/Users/gaochao/develop/maven-3.9.9/bin/mvn",
    "-B",
    "-ntp",
    "-q",
    "-f",
    "/Users/gaochao/Documents/面试/software-engineering-study/labs/remote-client/resilience/pom.xml",
    "clean",
    "test"
   ],
   "exitCode": 0,
   "runnerExitCode": 0,
   "timedOut": false,
   "failure": null,
   "cleanupError": null,
   "observed": [
    "U33 timeLimiterFuture=PASS timeout=TimeoutException timeoutMs=100 cancelled=true effectBeforeTimeout=true",
    "U33 timeLimiter=PASS api=executeCompletionStage timeout=TimeoutException timeoutMs=100 workMs=300 effectAfterTimeout=true cancelRunningFutureIgnored=true",
    "U33 scbFallback=PASS failure=IllegalStateException:boom wrapper=java.util.concurrent.ExecutionException open=CallNotPermittedException openWrapper=CallNotPermittedException recovered=ok",
    "U33 idempotentRecovery=PASS stableKeyAttempts=2 effects=1 committed=true",
    "U33 idempotentStatus=PASS committedStatus=COMMITTED unknownStatus=UNKNOWN",
    "U33 idempotentRecovery=PASS newKeyAttempts=3 effects=3 duplicateEffect=true",
    "U33 durableRecovery=PASS unknownToCommitted=true pendingAfterReopen=true recoveredEffects=1 repeatRecoveryEffects=1 restart=graceful-close-reopen",
    "U33 durableConcurrent=PASS duplicateRequests=12 recoveryRequests=1 state=COMMITTED effects=1",
    "U33 deadlineComposition=PASS order=Retry-CB-TimeLimiter-Bulkhead totalMs=700 attemptMs=500 timeoutMs=400 failedSends=1 insufficientRejected=true recoveredThroughChain=true availablePermits=1",
    "U33 cbStateMachine=PASS closedThenOpen failedCalls=2 failureRate=100.0 notPermitted=1 halfOpenFailureReopens=true halfOpenSuccessCloses=true",
    "U33 bulkhead=PASS maxConcurrentCalls=1 rejected=true availableAfter=1",
    "U33 decorationOrder=PASS retryOutsideCbFailedCalls=3",
    "U33 decorationOrder=PASS cbOutsideRetryFailedCalls=1",
    "U33 timeWindow=PASS clock=controlled expiredFailure=true windowSeconds=1 minimum=2 slowSuccessOpened=true failureRate=0.0 slowRate=50.0",
    "U33 retryPolicy=PASS exponentialMs=20-40 allowedAttempts=3 ignoredAttempts=1 recovered=ok"
   ]
  },
  {
   "name": "dependency-feign",
   "command": [
    "/Users/gaochao/develop/maven-3.9.9/bin/mvn",
    "-B",
    "-ntp",
    "-q",
    "-f",
    "/Users/gaochao/Documents/面试/software-engineering-study/labs/remote-client/feign/pom.xml",
    "dependency:list",
    "-DoutputFile=/dev/stdout"
   ],
   "exitCode": 0,
   "runnerExitCode": 0,
   "timedOut": false,
   "failure": null,
   "cleanupError": null,
   "observed": []
  },
  {
   "name": "dependency-resilience",
   "command": [
    "/Users/gaochao/develop/maven-3.9.9/bin/mvn",
    "-B",
    "-ntp",
    "-q",
    "-f",
    "/Users/gaochao/Documents/面试/software-engineering-study/labs/remote-client/resilience/pom.xml",
    "dependency:list",
    "-DoutputFile=/dev/stdout"
   ],
   "exitCode": 0,
   "runnerExitCode": 0,
   "timedOut": false,
   "failure": null,
   "cleanupError": null,
   "observed": []
  }
 ],
 "artifacts": {
  "pom.xml": "db9d3bfe36b6ab348808749de0c003975a5e98385dab2467e66c771c9d652d0a",
  "run.py": "2e7a4b732345b3c36d2b71795ae234574fe3cb4546fcf780d7fc6c1302e7338b",
  "README.md": "2f0de5ac87d146e1fb7e7df93b672cfc1b7882b394c9331653572e526f8c563e",
  "feign/pom.xml": "8a3db0a77562c61b5a8a167f6d28238a9ba9466d2a0d2b208a2e5d72ce736ba2",
  "resilience/pom.xml": "e504c9d2ed191e8434d2942e1416cf8665e35c8007215460dadb1aef90b9a4a2",
  "feign/src/main/java/study/remoteclient/feign/DeadItemApi.java": "73e92f64923235e77921489aec469589e010e24c5d8abfac9ee5910eb373d498",
  "feign/src/main/java/study/remoteclient/feign/FeignLabApplication.java": "6e0def41cd5ee26b7cc6dd375717dbb2985c849de5c3161755fa97c8b105c0b6",
  "feign/src/main/java/study/remoteclient/feign/Item.java": "faedc78a989085fbead32f4ee3a69fc4064b52ee2cab7b9bc4aa3ba3dfc5f159",
  "feign/src/main/java/study/remoteclient/feign/ItemApi.java": "1df42fe915a34cf5fb741305b929b876a6629c81917e195248b9dbb5a96135ab",
  "feign/src/main/java/study/remoteclient/feign/RetryItemApi.java": "beafee95e1be9925267f6673ab4d021451402da6de0412035fef76ba9b0683a6",
  "feign/src/main/java/study/remoteclient/feign/ShortItemApi.java": "c6139f130c740bef9800bcd8375dc259a11492bd1461c30d95c0ec6a2adc6857",
  "feign/src/main/java/study/remoteclient/feignconfig/RetryClientConfig.java": "22f2e57367af5d42d64cf1acd3edfd77a4323824c3f6e1fb40ec2b86420b4064",
  "feign/src/test/java/study/remoteclient/feign/FeignClientLabTest.java": "e483564454ee511f925b5731f4dce3dc542ada22530b40ca655705e763b104d0",
  "feign/src/test/java/study/remoteclient/feign/FeignConfigurationTest.java": "ec92a46e68ef842705e51c72df449c728500d52500b7960d8d8fbf23858e22e8",
  "feign/src/test/java/study/remoteclient/feign/HttpItemApi.java": "bd285e6510bcc1f8d4830d132672b889bdb775a949b9c8ff4276e312a410fd7f",
  "feign/src/test/java/study/remoteclient/feign/HttpServiceClientLabTest.java": "e6d7771e1d0a5928311b73b32f23f22dc5ee6bc58005a6e0c3d0fb779d6e74a9",
  "feign/src/test/java/study/remoteclient/feign/LoopbackUpstream.java": "f6d60c95ab29f24cbd167fc895ff33c5052cae271f23e2e9a0bfe5aad354cd5a",
  "resilience/src/main/java/study/remoteclient/resilience/ResilienceLabApplication.java": "b1126ec7cc3d0deb5cbc91a3f19f74e4b54b6e40527e3f4e57baf163cb5f2ff5",
  "resilience/src/test/java/study/remoteclient/resilience/BulkheadLabTest.java": "731975f97aa3619068122c990ff0286b6633237902576cb5a6554a6de78beea5",
  "resilience/src/test/java/study/remoteclient/resilience/CircuitBreakerStateMachineTest.java": "72e8e64a33b3d3cbf9ba162aba565c0e8abdd0147920c4ad0ced4b9e52767b59",
  "resilience/src/test/java/study/remoteclient/resilience/DeadlineCompositionHttpTest.java": "1ad87e16153b21759ae7827958559e7a0bc6bbfc380700348bd4cddad85be99d",
  "resilience/src/test/java/study/remoteclient/resilience/DecorationOrderTest.java": "c0a52787a18341880c03b07211f237de96ac9d0d83e1b4686ff12edcc3a4b8bf",
  "resilience/src/test/java/study/remoteclient/resilience/DurableRecoveryHttpTest.java": "035dca008c58e9df05dec0366439c44b01e755c28b1728ff2dbbf99ec9a02a75",
  "resilience/src/test/java/study/remoteclient/resilience/DurableUpstream.java": "1c19d91d623130bbeac45b9638455f9af3241418d24cee216cf11bc8e593d436",
  "resilience/src/test/java/study/remoteclient/resilience/IdempotentRecoveryHttpTest.java": "371154bb208650bc01ea327e8ecf20204022fdffa56f41081b5525cfbef5141b",
  "resilience/src/test/java/study/remoteclient/resilience/IdempotentUpstream.java": "b001dcb8c2e5f4fee0b85f31d72bb72811fe4ffb75578e32115764af5c28f8f9",
  "resilience/src/test/java/study/remoteclient/resilience/ResiliencePolicyTest.java": "aa9029d3ef70c9640778cb0646bc5606bb3c1e0ced14e237371d93ec0e44b315",
  "resilience/src/test/java/study/remoteclient/resilience/SpringCloudCircuitBreakerLabTest.java": "6a2c760d02102929f843e89dbd7f85c419e7365a7454e5a9a80491c461f1db2e",
  "resilience/src/test/java/study/remoteclient/resilience/TimeLimiterLabTest.java": "fe58720692a6dbe3e74bd367dcf789087ce06f08b301fc29f4e5536959c60708"
 },
 "logs": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u33/run-19cuccl3",
 "cleanup": {
  "processes": "本入口创建的进程组已回收；HttpServer、测试 JVM 与 JDK HttpClient 均在用例内关闭",
  "externalServices": "无外部服务；只使用 127.0.0.1 随机端口与进程内合成数据"
 },
 "limits": [
  "loopback HTTP 与受控上游；无真实注册中心、无 LB 集群、无生产网关",
  "未启用 TLS/mTLS、跨进程网络分区或容量压测",
  "未运行 OpenFeign 内建 CircuitBreaker 集成、Sentinel 组合；SCB默认线程池隔离舱经过调用但未专项验证容量/排队/拒绝",
  "H2持久恢复仅本机优雅关闭重开与显式事务回滚；无OS进程强杀、断电、多实例租约与外部业务效果原子性证明",
  "HC5连接池1连接/100ms获取等待已验证；keep-alive、生产容量/TLS/代理重发未运行",
  "时间窗口使用可控Clock验证秒桶淘汰，慢调用与退避用真实耗时；共享deadline只在本进程，不代表跨服务传播",
  "未运行 Micrometer/Prometheus 导出、Feign 客户端尝试指标与告警",
  "R4j 默认窗口/默认 Retry 间隔等默认值只做源码核对，实验使用自定义小参数"
 ]
}
