{
  "ticket": "U35 #72",
  "status": "passed",
  "startedAt": "2026-10-27T21:33:44.056160+08:00",
  "finishedAt": "2026-10-27T21:33:58.141144+08:00",
  "input": "python3 labs/cloud-adapters/run.py",
  "exitCode": 0,
  "environment": {
    "os": "macOS-27.2-arm64-arm-64bit",
    "arch": "arm64",
    "python": "3.9.6",
    "declaredVersions": {
      "spring-boot": "4.0.9",
      "spring-cloud": "2025.1.4",
      "java": "21"
    },
    "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\"",
    "dependencies": {
      "org.springframework.cloud:spring-cloud-starter-consul-discovery": "5.0.4",
      "org.springframework.cloud:spring-cloud-starter-consul": "5.0.4",
      "org.springframework.cloud:spring-cloud-consul-core": "5.0.4",
      "org.springframework.boot:spring-boot-starter-validation": "4.0.9",
      "org.springframework.boot:spring-boot-validation": "4.0.9",
      "org.hibernate.validator:hibernate-validator": "9.0.2.Final",
      "jakarta.validation:jakarta.validation-api": "3.1.1",
      "org.jboss.logging:jboss-logging": "3.6.3.Final",
      "com.fasterxml:classmate": "1.7.3",
      "org.springframework.boot:spring-boot-restclient": "4.0.9",
      "org.springframework.boot:spring-boot-http-client": "4.0.9",
      "org.apache.httpcomponents:httpclient": "4.5.14",
      "commons-codec:commons-codec": "1.19.0",
      "org.apache.httpcomponents:httpcore": "4.4.16",
      "org.springframework.cloud:spring-cloud-consul-discovery": "5.0.4",
      "org.springframework.cloud:spring-cloud-starter-loadbalancer": "5.0.4",
      "org.springframework.cloud:spring-cloud-loadbalancer": "5.0.4",
      "io.projectreactor:reactor-core": "3.8.8",
      "org.reactivestreams:reactive-streams": "1.0.4",
      "io.projectreactor.addons:reactor-extra": "3.6.2",
      "org.springframework.boot:spring-boot-starter-cache": "4.0.9",
      "org.springframework.boot:spring-boot-cache": "4.0.9",
      "org.springframework:spring-context-support": "7.0.10",
      "com.stoyanr:evictor": "1.0.0",
      "org.springframework.cloud:spring-cloud-starter-consul-config": "5.0.4",
      "org.springframework.cloud:spring-cloud-consul-config": "5.0.4",
      "org.springframework.cloud:spring-cloud-commons": "5.0.4",
      "org.springframework.security:spring-security-crypto": "7.0.8",
      "org.springframework.cloud:spring-cloud-starter-vault-config": "5.0.3",
      "org.apache.httpcomponents.client5:httpclient5": "5.5.2",
      "org.apache.httpcomponents.core5:httpcore5-h2": "5.3.6",
      "org.slf4j:slf4j-api": "2.0.20",
      "org.apache.httpcomponents.core5:httpcore5": "5.3.6",
      "org.springframework.cloud:spring-cloud-starter": "5.0.4",
      "org.springframework.cloud:spring-cloud-context": "5.0.4",
      "org.bouncycastle:bcprov-jdk18on": "1.85.2",
      "org.springframework.cloud:spring-cloud-vault-config": "5.0.3",
      "org.springframework:spring-web": "7.0.10",
      "org.springframework:spring-beans": "7.0.10",
      "tools.jackson.core:jackson-databind": "3.1.7",
      "tools.jackson.core:jackson-core": "3.1.7",
      "com.fasterxml.jackson.core:jackson-annotations": "2.21",
      "org.springframework.vault:spring-vault-core": "4.0.4",
      "org.springframework:spring-context": "7.0.10",
      "org.springframework:spring-aop": "7.0.10",
      "org.springframework:spring-expression": "7.0.10",
      "org.jspecify:jspecify": "1.0.1",
      "org.springframework.boot:spring-boot-starter-webmvc": "4.0.9",
      "org.springframework.boot:spring-boot-starter": "4.0.9",
      "org.springframework.boot:spring-boot-starter-logging": "4.0.9",
      "ch.qos.logback:logback-classic": "1.5.38",
      "ch.qos.logback:logback-core": "1.5.38",
      "org.apache.logging.log4j:log4j-to-slf4j": "2.25.5",
      "org.apache.logging.log4j:log4j-api": "2.25.5",
      "org.slf4j:jul-to-slf4j": "2.0.20",
      "org.springframework.boot:spring-boot-autoconfigure": "4.0.9",
      "jakarta.annotation:jakarta.annotation-api": "3.0.0",
      "org.yaml:snakeyaml": "2.5",
      "org.springframework.boot:spring-boot-starter-jackson": "4.0.9",
      "org.springframework.boot:spring-boot-jackson": "4.0.9",
      "org.springframework.boot:spring-boot-starter-tomcat": "4.0.9",
      "org.springframework.boot:spring-boot-starter-tomcat-runtime": "4.0.9",
      "org.springframework.boot:spring-boot-web-server": "4.0.9",
      "org.apache.tomcat.embed:tomcat-embed-core": "11.0.27",
      "org.apache.tomcat.embed:tomcat-embed-el": "11.0.27",
      "org.apache.tomcat.embed:tomcat-embed-websocket": "11.0.27",
      "org.springframework.boot:spring-boot-tomcat": "4.0.9",
      "org.springframework.boot:spring-boot-http-converter": "4.0.9",
      "org.springframework.boot:spring-boot": "4.0.9",
      "org.springframework.boot:spring-boot-webmvc": "4.0.9",
      "org.springframework.boot:spring-boot-servlet": "4.0.9",
      "org.springframework:spring-webmvc": "7.0.10",
      "org.springframework.boot:spring-boot-starter-actuator": "4.0.9",
      "org.springframework.boot:spring-boot-starter-micrometer-metrics": "4.0.9",
      "org.springframework.boot:spring-boot-micrometer-metrics": "4.0.9",
      "org.springframework.boot:spring-boot-micrometer-observation": "4.0.9",
      "org.springframework.boot:spring-boot-actuator-autoconfigure": "4.0.9",
      "org.springframework.boot:spring-boot-actuator": "4.0.9",
      "org.springframework.boot:spring-boot-health": "4.0.9",
      "io.micrometer:micrometer-observation": "1.16.8",
      "io.micrometer:micrometer-commons": "1.16.8",
      "io.micrometer:micrometer-jakarta9": "1.16.8",
      "io.micrometer:micrometer-core": "1.16.8",
      "org.hdrhistogram:HdrHistogram": "2.2.2",
      "org.latencyutils:LatencyUtils": "2.0.3",
      "org.springframework.boot:spring-boot-starter-test": "4.0.9",
      "org.springframework.boot:spring-boot-test": "4.0.9",
      "org.springframework.boot:spring-boot-test-autoconfigure": "4.0.9",
      "com.jayway.jsonpath:json-path": "2.10.0",
      "jakarta.xml.bind:jakarta.xml.bind-api": "4.0.5",
      "jakarta.activation:jakarta.activation-api": "2.1.4",
      "net.minidev:json-smart": "2.6.0",
      "net.minidev:accessors-smart": "2.6.0",
      "org.ow2.asm:asm": "9.7.1",
      "org.assertj:assertj-core": "3.27.7",
      "net.bytebuddy:byte-buddy": "1.17.8",
      "org.awaitility:awaitility": "4.3.0",
      "org.hamcrest:hamcrest": "3.0",
      "org.junit.jupiter:junit-jupiter": "6.0.3",
      "org.junit.jupiter:junit-jupiter-api": "6.0.3",
      "org.opentest4j:opentest4j": "1.3.0",
      "org.junit.platform:junit-platform-commons": "6.0.3",
      "org.apiguardian:apiguardian-api": "1.1.2",
      "org.junit.jupiter:junit-jupiter-params": "6.0.3",
      "org.junit.jupiter:junit-jupiter-engine": "6.0.3",
      "org.junit.platform:junit-platform-engine": "6.0.3",
      "org.mockito:mockito-core": "5.20.0",
      "net.bytebuddy:byte-buddy-agent": "1.17.8",
      "org.objenesis:objenesis": "3.3",
      "org.mockito:mockito-junit-jupiter": "5.20.0",
      "org.skyscreamer:jsonassert": "1.5.3",
      "com.vaadin.external.google:android-json": "0.0.20131108.vaadin1",
      "org.springframework:spring-core": "7.0.10",
      "commons-logging:commons-logging": "1.3.6",
      "org.springframework:spring-test": "7.0.10",
      "org.xmlunit:xmlunit-core": "2.10.4"
    }
  },
  "expectedTestCount": 6,
  "expectedTestNames": [
    "consulAgentOutageReflectsHealthDownAndRecovers",
    "consulDiscoveryRegistersAndQueriesRealAgent",
    "consulKvChangeRequiresExplicitReloadNotAutomatic",
    "consulKvConfigDataFeedsEnvironmentAtStartup",
    "vaultKvV2SecretLoadsAndVersionRollbackIsVisible",
    "vaultWrongBackendOrTokenFailsFast"
  ],
  "reports": [
    {
      "name": "study.cloudadapters.ConsulVaultHttpTest",
      "tests": "6",
      "failures": "0",
      "errors": "0",
      "skipped": "0",
      "testNames": [
        "consulDiscoveryRegistersAndQueriesRealAgent",
        "consulAgentOutageReflectsHealthDownAndRecovers",
        "vaultWrongBackendOrTokenFailsFast",
        "consulKvChangeRequiresExplicitReloadNotAutomatic",
        "consulKvConfigDataFeedsEnvironmentAtStartup",
        "vaultKvV2SecretLoadsAndVersionRollbackIsVisible"
      ],
      "sha256": "820df8a3b4982eb726e4c09604b660cbcde086def9e290240afacefdf1bd9b47"
    }
  ],
  "testCount": 6,
  "observed": [
    "U35 consulRegister=PASS service=u35-consul-app instance=u35-consul-038fb2fa catalog=1 passing=1 agent=1",
    "U35 consulOutage=PASS downDuringOutage=DOWN recovered=UP healthHttp=503-while-down",
    "U35 vaultFailure=PASS stage=config-data-import wrongToken=VaultException/403 wrongBackend=skipped-404 secretAbsent=true",
    "U35 consulConfigNoAutoRefresh=PASS watchDisabled=true unchangedBeforeRefresh=true refreshedRevision=v2",
    "U35 consulConfig=PASS key=config/u35-consul-app/data source=spring.config.import note=from-consul-v1 revision=v1",
    "U35 vaultSecret=PASS kvVersion=2 startupRead=true explicitRefreshReadsNewVersion=true version1Readable=true currentVersion=2"
  ],
  "results": [
    {
      "name": "jdk",
      "command": [
        "/Library/Java/JavaVirtualMachines/liberica-jdk-21.jdk/Contents/Home/bin/java",
        "-version"
      ],
      "cwd": "/Users/gaochao/Documents/面试/software-engineering-study/labs/cloud-adapters",
      "startedAt": "2026-10-27T21:33:44.067283+08:00",
      "finishedAt": "2026-10-27T21:33:44.103533+08:00",
      "exitCode": 0,
      "runnerExitCode": 0,
      "timedOut": false,
      "failure": null,
      "cleanupError": null,
      "log": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u35/run-buweds1w/jdk.log",
      "logSha256": "392524ee4bfbd5e1de98c543683d7fcaed057f7d69ef44a0d0a182de17816feb",
      "observed": []
    },
    {
      "name": "maven",
      "command": [
        "/Users/gaochao/develop/maven-3.9.9/bin/mvn",
        "-version"
      ],
      "cwd": "/Users/gaochao/Documents/面试/software-engineering-study/labs/cloud-adapters",
      "startedAt": "2026-10-27T21:33:44.103982+08:00",
      "finishedAt": "2026-10-27T21:33:44.562619+08:00",
      "exitCode": 0,
      "runnerExitCode": 0,
      "timedOut": false,
      "failure": null,
      "cleanupError": null,
      "log": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u35/run-buweds1w/maven.log",
      "logSha256": "bba0865da01a8b3b2c925c6b7fee10782f3e69aa5f382c2f52f06c87a4bc5624",
      "observed": []
    },
    {
      "name": "consul-version",
      "command": [
        "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u35/upstream/consul-1.22.7/consul",
        "version"
      ],
      "cwd": "/Users/gaochao/Documents/面试/software-engineering-study/labs/cloud-adapters",
      "startedAt": "2026-10-27T21:33:44.563245+08:00",
      "finishedAt": "2026-10-27T21:33:44.888241+08:00",
      "exitCode": 0,
      "runnerExitCode": 0,
      "timedOut": false,
      "failure": null,
      "cleanupError": null,
      "log": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u35/run-buweds1w/consul-version.log",
      "logSha256": "e1103b7528a2ca1ac34e613a5685ae440ce28220bb7ac5776d127aacb9507bc4",
      "observed": []
    },
    {
      "name": "vault-version",
      "command": [
        "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u35/upstream/vault-2.2.1/vault",
        "version"
      ],
      "cwd": "/Users/gaochao/Documents/面试/software-engineering-study/labs/cloud-adapters",
      "startedAt": "2026-10-27T21:33:45.004843+08:00",
      "finishedAt": "2026-10-27T21:33:45.696230+08:00",
      "exitCode": 0,
      "runnerExitCode": 0,
      "timedOut": false,
      "failure": null,
      "cleanupError": null,
      "log": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u35/run-buweds1w/vault-version.log",
      "logSha256": "7a9d62678844d8277758af41e19f2d167611046495e7cdacc40e00607737867f",
      "observed": []
    },
    {
      "name": "test",
      "command": [
        "/Users/gaochao/develop/maven-3.9.9/bin/mvn",
        "-B",
        "-ntp",
        "-q",
        "-f",
        "/Users/gaochao/Documents/面试/software-engineering-study/labs/cloud-adapters/pom.xml",
        "clean",
        "test",
        "-DskipTests=false",
        "-Dmaven.test.skip=false",
        "-Dmaven.clean.skip=false",
        "-Dmaven.test.failure.ignore=false",
        "-DfailIfNoTests=true"
      ],
      "cwd": "/Users/gaochao/Documents/面试/software-engineering-study/labs/cloud-adapters",
      "startedAt": "2026-10-27T21:33:46.114140+08:00",
      "finishedAt": "2026-10-27T21:33:56.792518+08:00",
      "exitCode": 0,
      "runnerExitCode": 0,
      "timedOut": false,
      "failure": null,
      "cleanupError": null,
      "log": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u35/run-buweds1w/test.log",
      "logSha256": "40184932a8d2a73ecb6b495ee52d6e7c2085f32e832129393a4f38bdcf787608",
      "observed": [
        "U35 consulRegister=PASS service=u35-consul-app instance=u35-consul-038fb2fa catalog=1 passing=1 agent=1",
        "U35 consulOutage=PASS downDuringOutage=DOWN recovered=UP healthHttp=503-while-down",
        "U35 vaultFailure=PASS stage=config-data-import wrongToken=VaultException/403 wrongBackend=skipped-404 secretAbsent=true",
        "U35 consulConfigNoAutoRefresh=PASS watchDisabled=true unchangedBeforeRefresh=true refreshedRevision=v2",
        "U35 consulConfig=PASS key=config/u35-consul-app/data source=spring.config.import note=from-consul-v1 revision=v1",
        "U35 vaultSecret=PASS kvVersion=2 startupRead=true explicitRefreshReadsNewVersion=true version1Readable=true currentVersion=2"
      ]
    },
    {
      "name": "dependencies",
      "command": [
        "/Users/gaochao/develop/maven-3.9.9/bin/mvn",
        "-B",
        "-ntp",
        "-q",
        "-f",
        "/Users/gaochao/Documents/面试/software-engineering-study/labs/cloud-adapters/pom.xml",
        "dependency:list",
        "-DincludeScope=test",
        "-DappendOutput=false",
        "-DoutputFile=/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u35/run-buweds1w/dependencies.txt"
      ],
      "cwd": "/Users/gaochao/Documents/面试/software-engineering-study/labs/cloud-adapters",
      "startedAt": "2026-10-27T21:33:56.845373+08:00",
      "finishedAt": "2026-10-27T21:33:58.139740+08:00",
      "exitCode": 0,
      "runnerExitCode": 0,
      "timedOut": false,
      "failure": null,
      "cleanupError": null,
      "log": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u35/run-buweds1w/dependencies.log",
      "logSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "observed": []
    }
  ],
  "artifacts": {
    "pom.xml": "4e610cfe0578df9294c5c46160ba57a1b0bbe3d6dfcb1a182b2f1ffd2618dcde",
    "run.py": "fbb025866187c30b12e5a3f2b60021490fef7481f4002402cf50bab8a2322e71",
    "README.md": "04fb5603c11c8a85d154750388110e034fed6f3a49093cb7e759a660b3d20221",
    "src/main/java/study/cloudadapters/CloudAdapterApp.java": "15d1bd6779a43dc42e15fe5289d327b918e7c79fa72839dd4e52796da9de45df",
    "src/test/java/study/cloudadapters/CloudAdapterFixture.java": "400bba8aa10ffe75d0fe7ac0463935b756dac9afaa627defac073a4192100912",
    "src/test/java/study/cloudadapters/ConsulVaultHttpTest.java": "6a842027cd2e73342fee7cf228814a1bbfcfb553181684781bae8696e8d44926",
    "src/test/java/study/cloudadapters/LocalAgents.java": "6e4caaf558a66c2b66de91227711b15a915264c10080816687801cd1b416c0da"
  },
  "logs": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u35/run-buweds1w",
  "servers": {
    "consul": {
      "path": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u35/upstream/consul-1.22.7/consul",
      "version": "Consul v1.22.7",
      "sha256": "0adc692adc5040a227813cf7ee528fd793fc0b918dc82c5fb16a4bdbe0e94ce2"
    },
    "vault": {
      "path": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u35/upstream/vault-2.2.1/vault",
      "version": "Vault v2.2.1 (0e7c41b936218bd2401ab0f891c93bec10e2e8e4), built 2026-10-22T16:27:49Z",
      "sha256": "e4a1d53167c2e10ffdeae44753aac1c298447e1cfbcb2d8e5290605d6f55675a"
    }
  },
  "cleanup": {
    "processGroups": "本次启动的全部进程组已定向回收",
    "agents": {
      "ledger": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u35/run-buweds1w/agents.jsonl",
      "sha256": "4d110f780a81a2d4d674e6a67c1a863a77c2fe7ff992ffefd1468bcd52f3c76f",
      "started": 7,
      "stopped": 7,
      "runnerReaped": [],
      "allPidsGone": true,
      "portsFree": {
        "18610": true,
        "18611": true,
        "18612": true,
        "18613": true,
        "18614": true,
        "18810": true,
        "18811": true,
        "18830": true,
        "18831": true,
        "18832": true,
        "18833": true,
        "18834": true,
        "19160": true,
        "19161": true,
        "19170": true,
        "19171": true,
        "19172": true,
        "19173": true,
        "19174": true,
        "19230": true,
        "19231": true,
        "19232": true,
        "19233": true,
        "19234": true
      },
      "processScanClean": true
    },
    "resources": "测试 fixture 关闭 Spring Context 与真实 Consul/Vault 进程，删除临时 data-dir 与日志目录"
  },
  "limits": [
    "应用 Context 与真实 Consul/Vault 进程同机：应用是同一测试 JVM 内的独立 Spring Context，不是独立部署的 OS 客户端进程",
    "Consul 1.22.7 与 Vault 2.2.1 均为官方 dev 模式单节点，无 TLS/ACL/mTLS 与生产集群",
    "Vault 只覆盖 KV v2 静态秘密的启动读取与显式刷新；动态凭据租约（leasing/database/AWS 等后端）与 Vault 生产模式未运行",
    "Kubernetes、Netflix Eureka、ZooKeeper 的适配只在正文/配置差异中推演，未实跑",
    "Consul Config 只覆盖关闭 Config Watch 的显式刷新语义与 KV 读取；watch 默认开启时的blocking query 自动刷新由源码与文档说明，RED 记录一次观察后未纳入最终用例"
  ],
  "dependencyReport": {
    "path": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u35/run-buweds1w/dependencies.txt",
    "sha256": "35f1586089da2a54b32087a7e64cb303d830b1f08d397587ac81d5910ba53ab9"
  }
}
