{
  "ticket": "U28 #65",
  "generatedAt": "2026-10-26T15:17:12.623039+08:00",
  "environment": {
    "os": "macOS-27.0.1-arm64-arm-64bit",
    "arch": "arm64",
    "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)",
    "graalvm": "native-image 25.0.4.1.1 2026-08-18\nGraalVM Runtime Environment GraalVM CE 25.4.4.1.1+1.1 (build 25.0.4.1.1+1-jvmci-25.4-b23)\nSubstrate VM GraalVM CE 25.4.4.1.1+1.1 (build 25.0.4.1.1+1, serial gc, compressed references)",
    "boot": "4.0.9",
    "framework": "7.0.10",
    "kotlin": "2.2.21",
    "jspecify": "1.0.1",
    "groovy": "5.0.8",
    "nativeBuildTools": "0.11.5"
  },
  "dependencies": {
    "spring-context": "7.0.10",
    "jspecify": "1.0.1",
    "kotlin-stdlib": "2.2.21",
    "groovy": "5.0.8",
    "kotlinx-coroutines-reactor": "1.10.2"
  },
  "exitCode": 0,
  "results": [
    {
      "name": "jdk",
      "command": [
        "/Library/Java/JavaVirtualMachines/liberica-jdk-21.jdk/Contents/Home/bin/java",
        "-version"
      ],
      "exitCode": 0,
      "expectedExit": 0,
      "startedAt": "2026-10-26T15:15:57.964984+08:00",
      "finishedAt": "2026-10-26T15:15:57.992242+08:00",
      "observed": []
    },
    {
      "name": "native-toolchain",
      "command": [
        "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u28/toolchain/graalvm-community-25.4.4.1.1+1.1/Contents/Home/bin/native-image",
        "--version"
      ],
      "exitCode": 0,
      "expectedExit": 0,
      "startedAt": "2026-10-26T15:15:57.992292+08:00",
      "finishedAt": "2026-10-26T15:15:58.030004+08:00",
      "observed": []
    },
    {
      "name": "regular-package",
      "command": [
        "mvn",
        "-q",
        "clean",
        "package"
      ],
      "exitCode": 0,
      "expectedExit": 0,
      "startedAt": "2026-10-26T15:15:58.030036+08:00",
      "finishedAt": "2026-10-26T15:16:01.067890+08:00",
      "observed": []
    },
    {
      "name": "regular-red",
      "command": [
        "/Library/Java/JavaVirtualMachines/liberica-jdk-21.jdk/Contents/Home/bin/java",
        "-jar",
        "/Users/gaochao/Documents/面试/software-engineering-study/labs/aot-native/app/target/aot-app-1.jar",
        "--spring.profiles.active=red",
        "--runtime.value=changed"
      ],
      "exitCode": 0,
      "expectedExit": 0,
      "startedAt": "2026-10-26T15:16:01.068077+08:00",
      "finishedAt": "2026-10-26T15:16:01.573545+08:00",
      "observed": [
        "U28OBSERVE bean constructed",
        "U28OBSERVE lifecycle start",
        "U28OBSERVE context refreshed",
        "U28OBSERVE runner aot=false bean=red value=changed reflection=hello:u28 resource=resource-ok",
        "U28OBSERVE lifecycle stop"
      ]
    },
    {
      "name": "missing-aot",
      "command": [
        "/Library/Java/JavaVirtualMachines/liberica-jdk-21.jdk/Contents/Home/bin/java",
        "-Dspring.aot.enabled=true",
        "-jar",
        "/Users/gaochao/Documents/面试/software-engineering-study/labs/aot-native/app/target/aot-app-1.jar",
        "--spring.profiles.active=blue"
      ],
      "exitCode": 1,
      "expectedExit": "nonzero",
      "startedAt": "2026-10-26T15:16:01.573585+08:00",
      "finishedAt": "2026-10-26T15:16:01.893011+08:00",
      "observed": [
        "Startup with AOT mode enabled failed: AOT initializer study.aot.App__ApplicationContextInitializer could not be found"
      ]
    },
    {
      "name": "regular-dynamic-plugin",
      "command": [
        "/Library/Java/JavaVirtualMachines/liberica-jdk-21.jdk/Contents/Home/bin/java",
        "-Du28.plugin=study.aot.UnregisteredGreeting",
        "-jar",
        "/Users/gaochao/Documents/面试/software-engineering-study/labs/aot-native/app/target/aot-app-1.jar",
        "--spring.profiles.active=red"
      ],
      "exitCode": 0,
      "expectedExit": 0,
      "startedAt": "2026-10-26T15:16:01.893047+08:00",
      "finishedAt": "2026-10-26T15:16:02.373721+08:00",
      "observed": [
        "U28OBSERVE bean constructed",
        "U28OBSERVE lifecycle start",
        "U28OBSERVE context refreshed",
        "U28OBSERVE runner aot=false bean=red value=default reflection=unregistered:u28 resource=resource-ok",
        "U28OBSERVE lifecycle stop"
      ]
    },
    {
      "name": "onrefresh-exit",
      "command": [
        "/Library/Java/JavaVirtualMachines/liberica-jdk-21.jdk/Contents/Home/bin/java",
        "-Dspring.context.exit=onRefresh",
        "-jar",
        "/Users/gaochao/Documents/面试/software-engineering-study/labs/aot-native/app/target/aot-app-1.jar",
        "--spring.profiles.active=blue"
      ],
      "exitCode": 0,
      "expectedExit": 0,
      "startedAt": "2026-10-26T15:16:02.373765+08:00",
      "finishedAt": "2026-10-26T15:16:02.837184+08:00",
      "observed": [
        "U28OBSERVE bean constructed"
      ]
    },
    {
      "name": "checkpoint-unavailable",
      "command": [
        "/Library/Java/JavaVirtualMachines/liberica-jdk-21.jdk/Contents/Home/bin/java",
        "-Dspring.context.checkpoint=onRefresh",
        "-jar",
        "/Users/gaochao/Documents/面试/software-engineering-study/labs/aot-native/app/target/aot-app-1.jar",
        "--spring.profiles.active=blue"
      ],
      "exitCode": 1,
      "expectedExit": "nonzero",
      "startedAt": "2026-10-26T15:16:02.837221+08:00",
      "finishedAt": "2026-10-26T15:16:03.288148+08:00",
      "observed": [
        "U28OBSERVE bean constructed"
      ]
    },
    {
      "name": "aot-package",
      "command": [
        "mvn",
        "-q",
        "-pl",
        "app",
        "-Pnative",
        "package"
      ],
      "exitCode": 0,
      "expectedExit": 0,
      "startedAt": "2026-10-26T15:16:03.288207+08:00",
      "finishedAt": "2026-10-26T15:16:05.967162+08:00",
      "observed": []
    },
    {
      "name": "aot-runtime-profile-red",
      "command": [
        "/Library/Java/JavaVirtualMachines/liberica-jdk-21.jdk/Contents/Home/bin/java",
        "-Dspring.aot.enabled=true",
        "-jar",
        "/Users/gaochao/Documents/面试/software-engineering-study/labs/aot-native/app/target/aot-app-1.jar",
        "--spring.profiles.active=red",
        "--runtime.value=changed"
      ],
      "exitCode": 0,
      "expectedExit": 0,
      "startedAt": "2026-10-26T15:16:05.967215+08:00",
      "finishedAt": "2026-10-26T15:16:06.388778+08:00",
      "observed": [
        "U28OBSERVE bean constructed",
        "U28OBSERVE lifecycle start",
        "U28OBSERVE context refreshed",
        "U28OBSERVE runner aot=true bean=blue value=changed reflection=hello:u28 resource=resource-ok",
        "U28OBSERVE lifecycle stop"
      ]
    },
    {
      "name": "native-compile",
      "command": [
        "mvn",
        "-q",
        "-pl",
        "app",
        "-Pnative",
        "native:compile"
      ],
      "exitCode": 0,
      "expectedExit": 0,
      "startedAt": "2026-10-26T15:16:06.388813+08:00",
      "finishedAt": "2026-10-26T15:17:04.737022+08:00",
      "observed": []
    },
    {
      "name": "native-runtime",
      "command": [
        "/Users/gaochao/Documents/面试/software-engineering-study/labs/aot-native/app/target/u28-app",
        "--spring.profiles.active=red",
        "--runtime.value=changed"
      ],
      "exitCode": 0,
      "expectedExit": 0,
      "startedAt": "2026-10-26T15:17:04.737149+08:00",
      "finishedAt": "2026-10-26T15:17:05.301550+08:00",
      "observed": [
        "U28OBSERVE bean constructed",
        "U28OBSERVE lifecycle start",
        "U28OBSERVE context refreshed",
        "U28OBSERVE runner aot=true bean=blue value=changed reflection=hello:u28 resource=resource-ok",
        "U28OBSERVE lifecycle stop"
      ]
    },
    {
      "name": "native-missing-hints",
      "command": [
        "/Users/gaochao/Documents/面试/software-engineering-study/labs/aot-native/app/target/u28-app",
        "-Du28.plugin=study.aot.UnregisteredGreeting",
        "--spring.profiles.active=blue"
      ],
      "exitCode": 1,
      "expectedExit": "nonzero",
      "startedAt": "2026-10-26T15:17:05.301598+08:00",
      "finishedAt": "2026-10-26T15:17:05.321308+08:00",
      "observed": [
        "U28OBSERVE bean constructed",
        "U28OBSERVE lifecycle start",
        "U28OBSERVE context refreshed",
        "Caused by: java.lang.ClassNotFoundException: study.aot.UnregisteredGreeting",
        "U28OBSERVE lifecycle stop"
      ]
    },
    {
      "name": "java-annotation-only",
      "command": [
        "/Library/Java/JavaVirtualMachines/liberica-jdk-21.jdk/Contents/Home/bin/java",
        "-cp",
        "/Users/gaochao/Documents/面试/software-engineering-study/labs/aot-native/nullability/target/classes",
        "study.nulls.Names"
      ],
      "exitCode": 0,
      "expectedExit": 0,
      "startedAt": "2026-10-26T15:17:05.321371+08:00",
      "finishedAt": "2026-10-26T15:17:05.410164+08:00",
      "observed": [
        "U28OBSERVE java annotationOnly runtimeNpe=true"
      ]
    },
    {
      "name": "kotlin-classpath",
      "command": [
        "mvn",
        "-q",
        "-pl",
        "nullability",
        "dependency:build-classpath",
        "-Dmdep.outputFile=target/classpath.txt"
      ],
      "exitCode": 0,
      "expectedExit": 0,
      "startedAt": "2026-10-26T15:17:05.410204+08:00",
      "finishedAt": "2026-10-26T15:17:06.881908+08:00",
      "observed": []
    },
    {
      "name": "kotlin-valid",
      "command": [
        "/Library/Java/JavaVirtualMachines/liberica-jdk-21.jdk/Contents/Home/bin/java",
        "-cp",
        "/Users/gaochao/Documents/面试/software-engineering-study/labs/aot-native/nullability/target/classes:/Users/gaochao/.m2/repository/org/jspecify/jspecify/1.0.1/jspecify-1.0.1.jar:/Users/gaochao/.m2/repository/org/jetbrains/kotlin/kotlin-stdlib/2.2.21/kotlin-stdlib-2.2.21.jar:/Users/gaochao/.m2/repository/org/jetbrains/annotations/13.0/annotations-13.0.jar:/Users/gaochao/.m2/repository/org/springframework/spring-context/7.0.10/spring-context-7.0.10.jar:/Users/gaochao/.m2/repository/org/springframework/spring-aop/7.0.10/spring-aop-7.0.10.jar:/Users/gaochao/.m2/repository/org/springframework/spring-beans/7.0.10/spring-beans-7.0.10.jar:/Users/gaochao/.m2/repository/org/springframework/spring-core/7.0.10/spring-core-7.0.10.jar:/Users/gaochao/.m2/repository/commons-logging/commons-logging/1.3.6/commons-logging-1.3.6.jar:/Users/gaochao/.m2/repository/org/springframework/spring-expression/7.0.10/spring-expression-7.0.10.jar:/Users/gaochao/.m2/repository/io/micrometer/micrometer-observation/1.16.8/micrometer-observation-1.16.8.jar:/Users/gaochao/.m2/repository/io/micrometer/micrometer-commons/1.16.8/micrometer-commons-1.16.8.jar:/Users/gaochao/.m2/repository/org/apache/groovy/groovy/5.0.8/groovy-5.0.8.jar:/Users/gaochao/.m2/repository/org/jetbrains/kotlinx/kotlinx-coroutines-reactor/1.10.2/kotlinx-coroutines-reactor-1.10.2.jar:/Users/gaochao/.m2/repository/org/jetbrains/kotlinx/kotlinx-coroutines-core-jvm/1.10.2/kotlinx-coroutines-core-jvm-1.10.2.jar:/Users/gaochao/.m2/repository/io/projectreactor/reactor-core/3.8.8/reactor-core-3.8.8.jar:/Users/gaochao/.m2/repository/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar:/Users/gaochao/.m2/repository/org/jetbrains/kotlinx/kotlinx-coroutines-reactive/1.10.2/kotlinx-coroutines-reactive-1.10.2.jar",
        "study.nulls.GoodKt"
      ],
      "exitCode": 0,
      "expectedExit": 0,
      "startedAt": "2026-10-26T15:17:06.882033+08:00",
      "finishedAt": "2026-10-26T15:17:07.124916+08:00",
      "observed": [
        "U28OBSERVE kotlin strict accepted=nonnull nullableSafeCall=true",
        "U28OBSERVE kotlin coroutine flow=[a,b] reactorContext=u28 awaitCancel=1"
      ]
    },
    {
      "name": "kotlin-invalid",
      "command": [
        "mvn",
        "-q",
        "-pl",
        "nullability",
        "compile"
      ],
      "exitCode": 1,
      "expectedExit": "nonzero",
      "startedAt": "2026-10-26T15:17:07.125654+08:00",
      "finishedAt": "2026-10-26T15:17:09.040470+08:00",
      "observed": [
        "[ERROR] file:///Users/gaochao/Documents/%E9%9D%A2%E8%AF%95/software-engineering-study/labs/aot-native/nullability/src/main/kotlin/Bad.kt:3:20 Null cannot be a value of a non-null type 'String'.",
        "[ERROR] file:///Users/gaochao/Documents/%E9%9D%A2%E8%AF%95/software-engineering-study/labs/aot-native/nullability/src/main/kotlin/Bad.kt:4:27 Initializer type mismatch: expected 'String', actual 'String?'.",
        "[ERROR] Failed to execute goal org.jetbrains.kotlin:kotlin-maven-plugin:2.2.21:compile (kotlin-compile) on project nullability-lab: Compilation failure: Compilation failure: ",
        "[ERROR] file:///Users/gaochao/Documents/%E9%9D%A2%E8%AF%95/software-engineering-study/labs/aot-native/nullability/src/main/kotlin/Bad.kt:3:20 Null cannot be a value of a non-null type 'String'.",
        "[ERROR] file:///Users/gaochao/Documents/%E9%9D%A2%E8%AF%95/software-engineering-study/labs/aot-native/nullability/src/main/kotlin/Bad.kt:4:27 Initializer type mismatch: expected 'String', actual 'String?'."
      ]
    },
    {
      "name": "kotlin-recover",
      "command": [
        "mvn",
        "-q",
        "-pl",
        "nullability",
        "clean",
        "compile"
      ],
      "exitCode": 0,
      "expectedExit": 0,
      "startedAt": "2026-10-26T15:17:09.040722+08:00",
      "finishedAt": "2026-10-26T15:17:10.991997+08:00",
      "observed": []
    },
    {
      "name": "groovy-bean-dsl",
      "command": [
        "/Library/Java/JavaVirtualMachines/liberica-jdk-21.jdk/Contents/Home/bin/java",
        "-cp",
        "/Users/gaochao/Documents/面试/software-engineering-study/labs/aot-native/nullability/target/classes:/Users/gaochao/.m2/repository/org/jspecify/jspecify/1.0.1/jspecify-1.0.1.jar:/Users/gaochao/.m2/repository/org/jetbrains/kotlin/kotlin-stdlib/2.2.21/kotlin-stdlib-2.2.21.jar:/Users/gaochao/.m2/repository/org/jetbrains/annotations/13.0/annotations-13.0.jar:/Users/gaochao/.m2/repository/org/springframework/spring-context/7.0.10/spring-context-7.0.10.jar:/Users/gaochao/.m2/repository/org/springframework/spring-aop/7.0.10/spring-aop-7.0.10.jar:/Users/gaochao/.m2/repository/org/springframework/spring-beans/7.0.10/spring-beans-7.0.10.jar:/Users/gaochao/.m2/repository/org/springframework/spring-core/7.0.10/spring-core-7.0.10.jar:/Users/gaochao/.m2/repository/commons-logging/commons-logging/1.3.6/commons-logging-1.3.6.jar:/Users/gaochao/.m2/repository/org/springframework/spring-expression/7.0.10/spring-expression-7.0.10.jar:/Users/gaochao/.m2/repository/io/micrometer/micrometer-observation/1.16.8/micrometer-observation-1.16.8.jar:/Users/gaochao/.m2/repository/io/micrometer/micrometer-commons/1.16.8/micrometer-commons-1.16.8.jar:/Users/gaochao/.m2/repository/org/apache/groovy/groovy/5.0.8/groovy-5.0.8.jar:/Users/gaochao/.m2/repository/org/jetbrains/kotlinx/kotlinx-coroutines-reactor/1.10.2/kotlinx-coroutines-reactor-1.10.2.jar:/Users/gaochao/.m2/repository/org/jetbrains/kotlinx/kotlinx-coroutines-core-jvm/1.10.2/kotlinx-coroutines-core-jvm-1.10.2.jar:/Users/gaochao/.m2/repository/io/projectreactor/reactor-core/3.8.8/reactor-core-3.8.8.jar:/Users/gaochao/.m2/repository/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar:/Users/gaochao/.m2/repository/org/jetbrains/kotlinx/kotlinx-coroutines-reactive/1.10.2/kotlinx-coroutines-reactive-1.10.2.jar",
        "study.nulls.GroovyDsl"
      ],
      "exitCode": 0,
      "expectedExit": 0,
      "startedAt": "2026-10-26T15:17:10.992039+08:00",
      "finishedAt": "2026-10-26T15:17:11.502672+08:00",
      "observed": [
        "U28OBSERVE groovy beanDsl=groovy-ok"
      ]
    },
    {
      "name": "dependencies",
      "command": [
        "mvn",
        "dependency:tree",
        "-Dincludes=org.springframework:*,org.jspecify:*,org.jetbrains.kotlin:*,org.jetbrains.kotlinx:*,org.apache.groovy:*"
      ],
      "exitCode": 0,
      "expectedExit": 0,
      "startedAt": "2026-10-26T15:17:11.502703+08:00",
      "finishedAt": "2026-10-26T15:17:12.589054+08:00",
      "observed": []
    }
  ],
  "sourceSha256": {
    "app/pom.xml": "010b5a33de1a6ec02393e6f3ff8566ce0af024a979184d22add5f7460b0ba329",
    "app/src/main/java/study/aot/App.java": "de13912a8e840aae95fa52d393af1c78b4ed446d286293cc3fb56d327749f1e3",
    "app/src/main/java/study/aot/NativeGreeting.java": "188d560d15136e812a41ca39b9ff604cbab3cc00279409367941524dfe072284",
    "app/src/main/java/study/aot/UnregisteredGreeting.java": "6e474adebbfc80131412a9b27b66d66c60fa64d9ead6927e0bcabb81ca69d089",
    "app/src/main/resources/u28/greeting.txt": "3658a4189f0d5c038f20d4c92e82dd1266fc5a0e802a52c08ed1811388ca7b4f",
    "nullability/pom.xml": "3858b9f9a555932198c4e25f0c445bdfdd0ce67c98b3ed99c36fa931f7fd7b37",
    "nullability/rejected/Bad.kt": "285b94db7c9ba7cb5158b2fa01d4016ffc30c7fc98fc2d3fccc7b4e47b3782c4",
    "nullability/src/main/java/study/nulls/GroovyDsl.java": "6544f57710ff0e5f2dd848f3af3a202a7fa016b631ec6197d9c56e85826bd83f",
    "nullability/src/main/java/study/nulls/Names.java": "3405693dead921bb7110428ff2470944873e291d5b36a9f43d994b1b600372a9",
    "nullability/src/main/java/study/nulls/package-info.java": "8824d8194ce3de39d716f69111f1b66511f6edb4f70f5af5203368cef81d88a1",
    "nullability/src/main/kotlin/Good.kt": "81c25c9f84bb364ec76d0919aa53851035dce7625f445b33827ba753ec9d45ff",
    "pom.xml": "c91851002795fc85bcd244f5c31171b44f00c3df18149663ee4a29789eaffdb0",
    "run.py": "55cab592bd1f10470ae168838b7a4b9a510e1264158e7e3a34fc3e11ac6d09f7",
    "toolchain.json": "6dcce0c7ba18c5f346bbd65c17d133057d5cdebc28cb167cac4494ec97261e2d"
  },
  "rawLogs": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u28/e6d23bd2-67b9-445a-a67b-e4224d5cd6e0",
  "limits": [
    "Real native executable for macOS arm64; do not extrapolate startup/throughput/memory from this functional run.",
    "Real CRaC checkpoint/restore is not run: fixed Framework documentation requires Linux with CRaC JVM; macOS exit=onRefresh only tests lifecycle boundary and deliberately halts the owned JVM.",
    "AOT profile blue is frozen at build time while runtime.value remains a runtime value; native reflection requires reachability metadata.",
    "JSpecify alone does not make javac reject null or insert runtime checks; Kotlin strict mode verifies this specific interop contract, not all generics/proxy/framework combinations."
  ]
}
