{
  "ticket": "U34 #71",
  "status": "passed",
  "startedAt": "2026-10-27T16:13:33.232570+08:00",
  "finishedAt": "2026-10-27T16:14:00.120322+08:00",
  "input": "python3 labs/config-bus/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-config-server": "5.0.6",
      "org.springframework.cloud:spring-cloud-config-client": "5.0.6",
      "org.springframework.boot:spring-boot-autoconfigure": "4.0.9",
      "org.springframework:spring-web": "7.0.10",
      "com.fasterxml.jackson.core:jackson-annotations": "2.21",
      "io.micrometer:micrometer-observation": "1.16.8",
      "org.jspecify:jspecify": "1.0.1",
      "io.micrometer:micrometer-commons": "1.16.8",
      "org.springframework.boot:spring-boot-starter-web": "4.0.9",
      "org.springframework.boot:spring-boot-starter-validation": "4.0.9",
      "org.springframework.boot:spring-boot-validation": "4.0.9",
      "org.apache.tomcat.embed:tomcat-embed-el": "11.0.27",
      "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.security:spring-security-crypto": "7.0.8",
      "org.apache.httpcomponents.client5:httpclient5": "5.5.2",
      "org.apache.httpcomponents.core5:httpcore5": "5.3.6",
      "org.apache.httpcomponents.core5:httpcore5-h2": "5.3.6",
      "org.eclipse.jgit:org.eclipse.jgit": "7.4.0.202509020913-r",
      "com.googlecode.javaewah:JavaEWAH": "1.2.3",
      "commons-codec:commons-codec": "1.19.0",
      "org.eclipse.jgit:org.eclipse.jgit.http.apache": "7.4.0.202509020913-r",
      "org.apache.httpcomponents:httpclient": "4.5.14",
      "org.apache.httpcomponents:httpcore": "4.4.16",
      "org.eclipse.jgit:org.eclipse.jgit.ssh.apache": "7.4.0.202509020913-r",
      "org.apache.sshd:sshd-osgi": "2.16.0",
      "org.slf4j:jcl-over-slf4j": "2.0.20",
      "org.apache.sshd:sshd-sftp": "2.16.0",
      "org.yaml:snakeyaml": "2.5",
      "tools.jackson.dataformat:jackson-dataformat-yaml": "3.1.7",
      "tools.jackson.core:jackson-core": "3.1.7",
      "org.snakeyaml:snakeyaml-engine": "3.0.1",
      "org.springframework.cloud:spring-cloud-starter-config": "5.0.6",
      "org.springframework.cloud:spring-cloud-starter": "5.0.4",
      "org.springframework.cloud:spring-cloud-context": "5.0.4",
      "org.springframework.cloud:spring-cloud-commons": "5.0.4",
      "org.bouncycastle:bcprov-jdk18on": "1.85.2",
      "tools.jackson.core:jackson-databind": "3.1.7",
      "org.springframework.cloud:spring-cloud-starter-bus-kafka": "5.0.4",
      "org.springframework.cloud:spring-cloud-starter-stream-kafka": "5.0.4",
      "org.springframework.cloud:spring-cloud-stream-binder-kafka": "5.0.4",
      "org.springframework.cloud:spring-cloud-stream-binder-kafka-core": "5.0.4",
      "org.springframework.boot:spring-boot-kafka": "4.0.9",
      "org.springframework.boot:spring-boot-transaction": "4.0.9",
      "org.springframework.boot:spring-boot-persistence": "4.0.9",
      "org.springframework.integration:spring-integration-kafka": "7.0.7",
      "org.springframework.cloud:spring-cloud-stream": "5.0.4",
      "org.springframework.boot:spring-boot-integration": "4.0.9",
      "org.springframework.integration:spring-integration-jmx": "7.0.7",
      "org.springframework.cloud:spring-cloud-function-context": "5.0.5",
      "org.springframework.boot:spring-boot-restclient": "4.0.9",
      "org.springframework.boot:spring-boot-http-client": "4.0.9",
      "org.springframework.cloud:spring-cloud-function-core": "5.0.5",
      "tools.jackson.datatype:jackson-datatype-joda": "3.1.7",
      "joda-time:joda-time": "2.12.7",
      "org.springframework.kafka:spring-kafka": "4.0.8",
      "org.springframework.cloud:spring-cloud-bus": "5.0.4",
      "org.springframework.integration:spring-integration-core": "7.0.7",
      "org.springframework:spring-messaging": "7.0.10",
      "org.springframework:spring-tx": "7.0.10",
      "io.projectreactor:reactor-core": "3.8.8",
      "org.reactivestreams:reactive-streams": "1.0.4",
      "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.slf4j:jul-to-slf4j": "2.0.20",
      "jakarta.annotation:jakarta.annotation-api": "3.0.0",
      "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-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-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-security": "4.0.9",
      "org.springframework.boot:spring-boot-security": "4.0.9",
      "org.springframework.security:spring-security-config": "7.0.8",
      "org.springframework.security:spring-security-core": "7.0.8",
      "org.springframework.security:spring-security-web": "7.0.8",
      "org.springframework:spring-aop": "7.0.10",
      "org.springframework:spring-beans": "7.0.10",
      "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-params": "6.0.3",
      "org.junit.jupiter:junit-jupiter-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",
      "org.springframework.kafka:spring-kafka-test": "4.0.8",
      "org.slf4j:slf4j-api": "2.0.20",
      "org.springframework:spring-context": "7.0.10",
      "org.springframework:spring-expression": "7.0.10",
      "org.apache.kafka:kafka-clients": "4.1.2",
      "com.github.luben:zstd-jni": "1.5.6-10",
      "at.yawk.lz4:lz4-java": "1.10.1",
      "org.xerial.snappy:snappy-java": "1.1.10.7",
      "org.apache.kafka:kafka-server": "4.1.2",
      "org.apache.kafka:kafka-storage": "4.1.2",
      "com.github.ben-manes.caffeine:caffeine": "3.2.4",
      "org.apache.kafka:kafka-group-coordinator": "4.1.2",
      "org.apache.kafka:kafka-group-coordinator-api": "4.1.2",
      "org.apache.kafka:kafka-coordinator-common": "4.1.2",
      "com.google.re2j:re2j": "1.8",
      "com.dynatrace.hash4j:hash4j": "0.22.0",
      "org.apache.kafka:kafka-transaction-coordinator": "4.1.2",
      "org.apache.kafka:kafka-raft": "4.1.2",
      "org.apache.kafka:kafka-share-coordinator": "4.1.2",
      "org.apache.kafka:kafka-storage-api": "4.1.2",
      "com.fasterxml.jackson.core:jackson-databind": "2.21.7",
      "com.fasterxml.jackson.core:jackson-core": "2.21.7",
      "com.yammer.metrics:metrics-core": "2.2.0",
      "org.apache.logging.log4j:log4j-api": "2.25.5",
      "org.apache.logging.log4j:log4j-core": "2.25.5",
      "org.apache.kafka:kafka-test-common-runtime": "4.1.2",
      "org.apache.kafka:kafka_2.13": "4.1.2",
      "org.scala-lang:scala-library": "2.13.16",
      "org.apache.kafka:kafka-tools-api": "4.1.2",
      "net.sourceforge.argparse4j:argparse4j": "0.7.0",
      "commons-validator:commons-validator": "1.10.1",
      "commons-beanutils:commons-beanutils": "1.11.0",
      "commons-digester:commons-digester": "2.1",
      "commons-collections:commons-collections": "3.2.2",
      "com.fasterxml.jackson.dataformat:jackson-dataformat-csv": "2.21.7",
      "org.bitbucket.b_c:jose4j": "0.9.6",
      "org.scala-lang:scala-reflect": "2.13.16",
      "com.typesafe.scala-logging:scala-logging_2.13": "3.9.5",
      "org.apache.kafka:kafka-test-common-internal-api": "4.1.2",
      "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml": "2.21.7",
      "org.apache.kafka:kafka-metadata": "4.1.2",
      "com.fasterxml.jackson.datatype:jackson-datatype-jdk8": "2.21.7",
      "org.apache.kafka:kafka-server-common": "4.1.2",
      "net.sf.jopt-simple:jopt-simple": "5.0.4",
      "org.pcollections:pcollections": "4.0.2",
      "org.apache.kafka:kafka-streams-test-utils": "4.1.2",
      "org.apache.kafka:kafka-streams": "4.1.2",
      "org.rocksdb:rocksdbjni": "9.7.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.platform:junit-platform-launcher": "6.0.3",
      "org.junit.platform:junit-platform-engine": "6.0.3"
    }
  },
  "expectedTestCount": 6,
  "expectedTestNames": [
    "busDestinationUpdatesOnlyBAndBroadcastConvergesBoth",
    "ciphertextAtRestDoesNotReplaceAuthenticationOrEnvironmentRedaction",
    "clientLoadsGitProfileThroughRealHttpServer",
    "gitCommitDoesNotRefreshObjectsUntilTheLocalEndpointRuns",
    "invalidLazyTargetFailsAfterRefreshAndGitRevertRestoresWithANewVersion",
    "oneFailedConfigPathLeavesMixedVersionsAndExplicitRefreshRepairsIt"
  ],
  "reports": [
    {
      "name": "study.configbus.ConfigBusHttpTest",
      "tests": "6",
      "failures": "0",
      "errors": "0",
      "skipped": "0",
      "testNames": [
        "ciphertextAtRestDoesNotReplaceAuthenticationOrEnvironmentRedaction",
        "busDestinationUpdatesOnlyBAndBroadcastConvergesBoth",
        "oneFailedConfigPathLeavesMixedVersionsAndExplicitRefreshRepairsIt",
        "invalidLazyTargetFailsAfterRefreshAndGitRevertRestoresWithANewVersion",
        "gitCommitDoesNotRefreshObjectsUntilTheLocalEndpointRuns",
        "clientLoadsGitProfileThroughRealHttpServer"
      ],
      "sha256": "9ea33a6ba848439c6cf60db4352e89b242da672dd4a432968b71b72e8e759a64"
    }
  ],
  "testCount": 6,
  "observed": [
    "U34 secretProtection=PASS unauthorized=401 git=cipher authorizedConfig=plaintext env=redacted invalidCipher=invalid-prefix recovered=true",
    "U34 busPropagation=PASS transport=real-kafka targeted=A:v1,B:v2 broadcast=A:v3,B:v3",
    "U34 partialFailure=PASS publishHttp=204 mixed=A:v2,B:v1 repairedB=v2 fault=config-http-503",
    "U34 rollback=PASS refreshHttp=200 invalidBusinessHttp=500 restored=v1 newCommit=true",
    "U34 localRefresh=PASS gitCommitAlone=v1 refreshedA=v2 untouchedB=v1 sticky=v1",
    "U34 initialRead=PASS clients=2 profile=profile-v1"
  ],
  "results": [
    {
      "name": "java-home",
      "command": [
        "/usr/libexec/java_home",
        "-v",
        "21"
      ],
      "cwd": "/Users/gaochao/Documents/面试/software-engineering-study/labs/config-bus",
      "startedAt": "2026-10-27T16:13:33.249068+08:00",
      "finishedAt": "2026-10-27T16:13:33.283679+08:00",
      "exitCode": 0,
      "runnerExitCode": 0,
      "timedOut": false,
      "failure": null,
      "cleanupError": null,
      "log": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u34/run-b4cikr1d/java-home.log",
      "logSha256": "5b54f067b1f771e0c199ccc143fea9d91bc7f14fa56fc4f5c9c795dffbb86ab4",
      "observed": []
    },
    {
      "name": "jdk",
      "command": [
        "/Library/Java/JavaVirtualMachines/liberica-jdk-21.jdk/Contents/Home/bin/java",
        "-version"
      ],
      "cwd": "/Users/gaochao/Documents/面试/software-engineering-study/labs/config-bus",
      "startedAt": "2026-10-27T16:13:33.284082+08:00",
      "finishedAt": "2026-10-27T16:13:33.425132+08:00",
      "exitCode": 0,
      "runnerExitCode": 0,
      "timedOut": false,
      "failure": null,
      "cleanupError": null,
      "log": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u34/run-b4cikr1d/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/config-bus",
      "startedAt": "2026-10-27T16:13:33.425686+08:00",
      "finishedAt": "2026-10-27T16:13:34.101953+08:00",
      "exitCode": 0,
      "runnerExitCode": 0,
      "timedOut": false,
      "failure": null,
      "cleanupError": null,
      "log": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u34/run-b4cikr1d/maven.log",
      "logSha256": "bba0865da01a8b3b2c925c6b7fee10782f3e69aa5f382c2f52f06c87a4bc5624",
      "observed": []
    },
    {
      "name": "test",
      "command": [
        "/Users/gaochao/develop/maven-3.9.9/bin/mvn",
        "-B",
        "-ntp",
        "-q",
        "-f",
        "/Users/gaochao/Documents/面试/software-engineering-study/labs/config-bus/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/config-bus",
      "startedAt": "2026-10-27T16:13:34.102593+08:00",
      "finishedAt": "2026-10-27T16:13:58.377792+08:00",
      "exitCode": 0,
      "runnerExitCode": 0,
      "timedOut": false,
      "failure": null,
      "cleanupError": null,
      "log": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u34/run-b4cikr1d/test.log",
      "logSha256": "9c051f2a959aa6761fcc54c807bd63fdf01e165d4d276446eed05fb811f32d4a",
      "observed": [
        "U34 secretProtection=PASS unauthorized=401 git=cipher authorizedConfig=plaintext env=redacted invalidCipher=invalid-prefix recovered=true",
        "U34 busPropagation=PASS transport=real-kafka targeted=A:v1,B:v2 broadcast=A:v3,B:v3",
        "U34 partialFailure=PASS publishHttp=204 mixed=A:v2,B:v1 repairedB=v2 fault=config-http-503",
        "U34 rollback=PASS refreshHttp=200 invalidBusinessHttp=500 restored=v1 newCommit=true",
        "U34 localRefresh=PASS gitCommitAlone=v1 refreshedA=v2 untouchedB=v1 sticky=v1",
        "U34 initialRead=PASS clients=2 profile=profile-v1"
      ]
    },
    {
      "name": "dependencies",
      "command": [
        "/Users/gaochao/develop/maven-3.9.9/bin/mvn",
        "-B",
        "-ntp",
        "-q",
        "-f",
        "/Users/gaochao/Documents/面试/software-engineering-study/labs/config-bus/pom.xml",
        "dependency:list",
        "-DincludeScope=test",
        "-DappendOutput=false",
        "-DoutputFile=/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u34/run-b4cikr1d/dependencies.txt"
      ],
      "cwd": "/Users/gaochao/Documents/面试/software-engineering-study/labs/config-bus",
      "startedAt": "2026-10-27T16:13:58.379545+08:00",
      "finishedAt": "2026-10-27T16:14:00.117926+08:00",
      "exitCode": 0,
      "runnerExitCode": 0,
      "timedOut": false,
      "failure": null,
      "cleanupError": null,
      "log": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u34/run-b4cikr1d/dependencies.log",
      "logSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "observed": []
    }
  ],
  "artifacts": {
    "pom.xml": "11e5335dab99741262aa668a0379515653403928e1459d1c2183cd84b54a16d4",
    "run.py": "accd55dd87dee4bb5db5635d8b5fd3d945e15635462865b2135cd8381385720e",
    "README.md": "8dc4c1a004ff9427dfc5529debe0be20e43c5609a01abbafedcf8ebd57cb7048",
    "src/main/java/study/configbus/ClientApp.java": "59a1ac14bac169927639ad6415eae11e4e23370d3aea5e4de6ee3301f0079f16",
    "src/main/java/study/configbus/LabSecurity.java": "c0386fdefe6c0f49f976ee136616966ae808af6cd25f39f3c622382d77c4539f",
    "src/main/java/study/configbus/ServerApp.java": "8617d29afa0e173eff9fc6a425799490783a5c129f7698e9a02a53c0c617a8f5",
    "src/test/java/study/configbus/ConfigBusHttpTest.java": "48da1681e4eb0a6030efe7d0a6442bf425e242e708d2c5633486484d81bf9aba",
    "src/test/java/study/configbus/ConfigFixture.java": "9914d79453d60aa319e2df5c7323e92090a8f390dbc557f2c1d1ec24fb3fde6f"
  },
  "logs": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u34/run-b4cikr1d",
  "cleanup": {
    "processGroups": "本次启动的全部进程组已定向回收",
    "resources": "测试 fixture 的 close 负责关闭 Spring Context/HTTP、Kafka 与临时 Git"
  },
  "limits": [
    "Config Server 与两个客户端是同一测试 JVM 内三个独立 Spring Context；不是三个 OS 进程",
    "真实 loopback HTTP、本地临时 Git 与隔离 embedded Kafka；故障注入代理是受控测试设施",
    "部分失败仅阻断 B 的 Config HTTP、消费 max-attempts=1；显式本地刷新恢复，无消费者离线或 Kafka 断线重放证明",
    "不证明生产配置刷新原子覆盖所有实例；无跨进程内存隔离、生产原子回滚或一致性认证",
    "TLS/mTLS、RabbitMQ、Nacos 配置服务、生产集群、OS 进程崩溃与断电恢复均未运行"
  ],
  "dependencyReport": {
    "path": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u34/run-b4cikr1d/dependencies.txt",
    "sha256": "14c8701365f1338a3927b1aa9cc216b601a760ef5abaf17f94d4331d4aa9eb77"
  }
}
