{
  "ticket": "U57 #94",
  "status": "passed",
  "startedAt": "2026-10-28T13:09:09.796048+08:00",
  "finishedAt": "2026-10-28T13:10:29.696490+08:00",
  "input": "python3 labs/kafka-reliability/run.py",
  "exitCode": 0,
  "environment": {
    "os": "macOS-27.2-arm64-arm-64bit",
    "arch": "arm64",
    "python": "3.9.6",
    "dependencies": {
      "org.springframework.kafka:spring-kafka": "4.0.8",
      "org.springframework:spring-context": "7.0.10",
      "org.springframework:spring-aop": "7.0.10",
      "org.springframework:spring-beans": "7.0.10",
      "org.springframework:spring-expression": "7.0.10",
      "org.springframework:spring-messaging": "7.0.10",
      "org.springframework:spring-tx": "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",
      "io.micrometer:micrometer-observation": "1.16.8",
      "org.jspecify:jspecify": "1.0.1",
      "io.micrometer:micrometer-commons": "1.16.8",
      "org.springframework.kafka:spring-kafka-test": "4.0.8",
      "org.slf4j:slf4j-api": "2.0.20",
      "org.springframework:spring-test": "7.0.10",
      "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",
      "org.hdrhistogram:HdrHistogram": "2.2.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-annotations": "2.21",
      "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",
      "org.springframework.boot:spring-boot-starter-test": "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",
      "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-test": "4.0.9",
      "org.springframework.boot:spring-boot": "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.xmlunit:xmlunit-core": "2.10.4"
    }
  },
  "expectedTestCount": 8,
  "expectedTestNames": [
    "abortedTransactionIsHiddenAndOpenTransactionBlocksLaterRecords",
    "conflictingIdempotenceConfigurationIsRejectedByClient",
    "cooperativeRebalanceMovesPartitionsToSurvivor",
    "minIsrRejectsBeforeAppendAndRecoversAfterBrokersReturn",
    "restartFromCommittedOffsetReplaysUncommittedWork",
    "retentionDeletesRecordsBeforeSlowConsumerCatchesUp",
    "sendOffsetsToTransactionMakesOffsetsAndOutputAtomic",
    "transactionalIdFencesOldProducerInsteadOfDuplicating"
  ],
  "reports": [
    {
      "name": "study.kafkareliability.KafkaReliabilityTest",
      "tests": "8",
      "failures": "0",
      "errors": "0",
      "skipped": "0",
      "testNames": [
        "abortedTransactionIsHiddenAndOpenTransactionBlocksLaterRecords",
        "restartFromCommittedOffsetReplaysUncommittedWork",
        "conflictingIdempotenceConfigurationIsRejectedByClient",
        "minIsrRejectsBeforeAppendAndRecoversAfterBrokersReturn",
        "cooperativeRebalanceMovesPartitionsToSurvivor",
        "retentionDeletesRecordsBeforeSlowConsumerCatchesUp",
        "transactionalIdFencesOldProducerInsteadOfDuplicating",
        "sendOffsetsToTransactionMakesOffsetsAndOutputAtomic"
      ],
      "sha256": "13a14e9f9de996f86c358cca1ff933d409af18349a031ea0d9018e5a03eb8dec"
    }
  ],
  "testCount": 8,
  "observed": [
    "U57 transactionVisibility=PASS readCommitted=aborted-hidden,plain-blocked-until-commit readUncommitted=all-three",
    "U57 offsetReplay=PASS committed=1 replay=e2,e3 duplicateEffect=e2-without-idempotency",
    "U57 idempotenceConfig=PASS acks1Explicit=ConfigException retries0=ConfigException inFlight6=ConfigException implicitAcks1=idempotence-disabled-silently",
    "U57 minIsr=PASS acks=all isr3=v1,v2 isr2=v1,v2 isr1=REJECTED-after-restart=2-records",
    "U57 cooperativeRebalance=PASS initial=1+1 survivor=0,1 polls=7",
    "U57 retention=PASS beginningAdvancedTo=3 resetNone=OffsetOutOfRange resetEarliest=silentResetTo3 lagDoesNotPreventDeletion=true",
    "U57 producerFencing=PASS old=InvalidProducerEpochException current=committed visible=1",
    "U57 eosOffsets=PASS abortedAttempt=offsets0,outputNone committedAttempt=offsets2,output1"
  ],
  "results": [
    {
      "name": "java-version",
      "command": [
        "/Library/Java/JavaVirtualMachines/liberica-jdk-21.jdk/Contents/Home/bin/java",
        "-version"
      ],
      "cwd": "/Users/gaochao/Documents/面试/software-engineering-study/.claude/worktrees/trusting-lamarr-4a0807/labs/kafka-reliability",
      "startedAt": "2026-10-28T13:09:10.274150+08:00",
      "finishedAt": "2026-10-28T13:09:10.333307+08:00",
      "exitCode": 0,
      "runnerExitCode": 0,
      "timedOut": false,
      "failure": null,
      "cleanupError": null,
      "log": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u57/run-uc87xtzj/java-version.log",
      "logSha256": "392524ee4bfbd5e1de98c543683d7fcaed057f7d69ef44a0d0a182de17816feb",
      "observed": []
    },
    {
      "name": "maven-version",
      "command": [
        "mvn",
        "-version"
      ],
      "cwd": "/Users/gaochao/Documents/面试/software-engineering-study/.claude/worktrees/trusting-lamarr-4a0807/labs/kafka-reliability",
      "startedAt": "2026-10-28T13:09:10.333778+08:00",
      "finishedAt": "2026-10-28T13:09:10.620527+08:00",
      "exitCode": 0,
      "runnerExitCode": 0,
      "timedOut": false,
      "failure": null,
      "cleanupError": null,
      "log": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u57/run-uc87xtzj/maven-version.log",
      "logSha256": "bba0865da01a8b3b2c925c6b7fee10782f3e69aa5f382c2f52f06c87a4bc5624",
      "observed": []
    },
    {
      "name": "mvn-test",
      "command": [
        "mvn",
        "-B",
        "-ntp",
        "-o",
        "-f",
        "/Users/gaochao/Documents/面试/software-engineering-study/.claude/worktrees/trusting-lamarr-4a0807/labs/kafka-reliability/pom.xml",
        "test",
        "-Dtest=study.kafkareliability.KafkaReliabilityTest"
      ],
      "cwd": "/Users/gaochao/Documents/面试/software-engineering-study/.claude/worktrees/trusting-lamarr-4a0807/labs/kafka-reliability",
      "startedAt": "2026-10-28T13:09:10.621004+08:00",
      "finishedAt": "2026-10-28T13:10:28.145012+08:00",
      "exitCode": 0,
      "runnerExitCode": 0,
      "timedOut": false,
      "failure": null,
      "cleanupError": null,
      "log": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u57/run-uc87xtzj/mvn-test.log",
      "logSha256": "7aef4b2042964c7354afea1ee43e5b966655f9ad516a6c70483c5b5627e1fcc5",
      "observed": [
        "U57 transactionVisibility=PASS readCommitted=aborted-hidden,plain-blocked-until-commit readUncommitted=all-three",
        "U57 offsetReplay=PASS committed=1 replay=e2,e3 duplicateEffect=e2-without-idempotency",
        "U57 idempotenceConfig=PASS acks1Explicit=ConfigException retries0=ConfigException inFlight6=ConfigException implicitAcks1=idempotence-disabled-silently",
        "U57 minIsr=PASS acks=all isr3=v1,v2 isr2=v1,v2 isr1=REJECTED-after-restart=2-records",
        "U57 cooperativeRebalance=PASS initial=1+1 survivor=0,1 polls=7",
        "U57 retention=PASS beginningAdvancedTo=3 resetNone=OffsetOutOfRange resetEarliest=silentResetTo3 lagDoesNotPreventDeletion=true",
        "U57 producerFencing=PASS old=InvalidProducerEpochException current=committed visible=1",
        "U57 eosOffsets=PASS abortedAttempt=offsets0,outputNone committedAttempt=offsets2,output1"
      ]
    },
    {
      "name": "mvn-dependency",
      "command": [
        "mvn",
        "-B",
        "-ntp",
        "-o",
        "-f",
        "/Users/gaochao/Documents/面试/software-engineering-study/.claude/worktrees/trusting-lamarr-4a0807/labs/kafka-reliability/pom.xml",
        "dependency:list",
        "-DoutputFile=/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u57/run-uc87xtzj/dependencies.txt"
      ],
      "cwd": "/Users/gaochao/Documents/面试/software-engineering-study/.claude/worktrees/trusting-lamarr-4a0807/labs/kafka-reliability",
      "startedAt": "2026-10-28T13:10:28.160622+08:00",
      "finishedAt": "2026-10-28T13:10:29.694236+08:00",
      "exitCode": 0,
      "runnerExitCode": 0,
      "timedOut": false,
      "failure": null,
      "cleanupError": null,
      "log": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u57/run-uc87xtzj/mvn-dependency.log",
      "logSha256": "3eae993646e37e2f40a1e23316b530932b8811c34a69826219146873dd95ebbc",
      "observed": []
    }
  ],
  "artifacts": {
    "pom.xml": "6c663e025176f4b3e8beb08766ea4634688880509af25725b144b5ce3d010121",
    "run.py": "553d898d4fc71c82442c359ed8081caf398047f2edfaa613df399fb373fe7678",
    "README.md": "aecab209fa0d3ae74cab276d4443770664c6c69f71d1a5ed6c0bf376f772b766",
    "src/test/java/study/kafkareliability/KafkaClusterFixture.java": "e466ae3ec1e412feb759b65833d65005813a53239271f3c768cd916233ae208a",
    "src/test/java/study/kafkareliability/KafkaReliabilityTest.java": "a8690b7fa8bfc809dc70ee883a5702c34eaf371e2cbedf93846b62405025cb60"
  },
  "logs": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u57/run-uc87xtzj",
  "cleanup": {
    "processGroups": "本入口创建的进程组已逐条回收（每条命令后 cleanup_group；清理失败会置非零退出并阻止 passed）",
    "resources": "测试 fixture 关闭 Kafka 集群、Admin 客户端与临时目录"
  },
  "limits": [
    "KafkaClusterTestKit 在同一测试 JVM 内启动 3 broker + 3 controller 的真实 KRaft 集群（真实 broker 代码、随机端口、独立目录），不是 listener mock；但不是多机进程、网络分区或断电实验",
    "未运行 RabbitMQ（归 U58）、RocketMQ 回查（U59）、多地域复制、broker 磁盘故障、生产 TLS/SASL、容量压测",
    "保留删除实验使用 4 秒 retention 与 1 秒 segment，只证明本输入下位点越界后读端的行为，不外推生产保留策略",
    "幂等/事务结论限定 Kafka 4.1.2 客户端与 broker；数据库/支付等外部副作用不在 Kafka 原子域内",
    "U57 不重写 3.7.1 机制教材；3.7.1 源码结论与 4.1.2 运行行为分开登记，不把不同 tag 拼成一次运行"
  ]
}
