{
  "ticket": "U27 #64",
  "generatedAt": "2026-10-26T14:55:05.819002+08:00",
  "invocation": "2026-10-26T14:54:54.732938+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)",
    "dependencies": {
      "spring-webflux": "7.0.10",
      "spring-r2dbc": "7.0.10",
      "spring-tx": "7.0.10",
      "reactor-core": "3.8.8",
      "reactor-netty-http": "1.3.8",
      "rsocket-core": "1.1.5",
      "r2dbc-mysql": "1.4.3",
      "spring-security-core": "7.0.8"
    },
    "mysql": "U27OBSERVE r2dbc-tx serverVersion=8.4.7"
  },
  "input": "JAVA_HOME=$(/usr/libexec/java_home -v21) python3 labs/webflux-r2dbc/run.py",
  "exitCode": 0,
  "reports": [
    {
      "name": "study.webflux.AnnotationFunctionEndpointsTest",
      "tests": "9",
      "failures": "0",
      "errors": "0",
      "skipped": "0"
    },
    {
      "name": "study.webflux.EventLoopServerTest",
      "tests": "7",
      "failures": "0",
      "errors": "0",
      "skipped": "0"
    },
    {
      "name": "study.webflux.R2dbcTransactionTest",
      "tests": "5",
      "failures": "0",
      "errors": "0",
      "skipped": "0"
    },
    {
      "name": "study.webflux.RSocketInteractionTest",
      "tests": "4",
      "failures": "0",
      "errors": "0",
      "skipped": "0"
    },
    {
      "name": "study.webflux.SpringRSocketTest",
      "tests": "1",
      "failures": "0",
      "errors": "0",
      "skipped": "0"
    },
    {
      "name": "study.webflux.WebClientHttpTest",
      "tests": "7",
      "failures": "0",
      "errors": "0",
      "skipped": "0"
    }
  ],
  "results": [
    {
      "name": "tests",
      "command": [
        "mvn",
        "-q",
        "clean",
        "test"
      ],
      "exitCode": 0,
      "observed": [
        "U27OBSERVE r2dbc-tx serverVersion=8.4.7",
        "U27OBSERVE r2dbc-tx commitRows=2",
        "U27OBSERVE r2dbc-tx annotation commit+rollback=ok unsubmittedMonoNoEffect=true",
        "U27OBSERVE r2dbc-tx rollbackRows=4 (before=4)",
        "U27OBSERVE r2dbc-tx cancel rowsAfterCancel=4 (before=4) outcome=rollback",
        "U27OBSERVE r2dbc-tx bindInTx=223,223 outsideTx=224!=225",
        "U27OBSERVE r2dbc-tx cleanup databaseDropped=true",
        "U27OBSERVE spring-rsocket route=hello:u27 missing=ApplicationErrorException cancel=true recovery=hello:again",
        "U27OBSERVE endpoints routerOrder winner=first",
        "U27OBSERVE endpoints stringFluxJsonMedia raw=abc (not a JSON array)",
        "U27OBSERVE endpoints function echo=echo:webflux",
        "U27OBSERVE endpoints security ctx=u27-user|threadLocal=none@parallel-9",
        "U27OBSERVE endpoints notFound=404 (DispatcherHandler switchIfEmpty createNotFoundError)",
        "U27OBSERVE endpoints annotation fluxSse=data:{\"value\":\"a\"}\\n\\ndata:{\"value\":\"b\"}\\n\\ndata:{\"value\":\"c\"}\\n\\n",
        "U27OBSERVE endpoints filterOnion=[A-in, B-in, B-out, A-out]",
        "U27OBSERVE endpoints annotation fluxJson=[{value:a}, {value:b}, {value:c}]",
        "U27OBSERVE endpoints annotation mono=mono-ok",
        "U27OBSERVE webclient roundtrip body=backend-ok elapsedMs=34",
        "U27OBSERVE webclient deliverThread=reactor-http-nio-3",
        "U27OBSERVE webclient blockingLine restClientMs=422 webClientSubscribeReturnMs=1 webClientDeliverThread=reactor-http-nio-5",
        "U27OBSERVE webclient exchange handled=404:missing-body retrieve=WebClientResponseException.NotFound",
        "U27OBSERVE webclient timeout fallbackMs=105",
        "U27OBSERVE webclient retry attempts=3 body=recovered",
        "U27OBSERVE webclient cancelToServer received=2 framesAtCancel=2 serverCancelled=true nextRequestOk=true",
        "U27OBSERVE eventloop blockOnLoop=throw@webflux-http-nio-2: block()/blockFirst()/blockLast() are blocking, which is not supported in thread webflux-http-nio-2",
        "U27OBSERVE eventloop notFound=404",
        "U27OBSERVE eventloop security ctx=u27-user|threadLocal=none@webflux-http-nio-2",
        "U27OBSERVE eventloop blockingOnBoundedElastic=blocking-ok@boundedElastic-1",
        "U27OBSERVE eventloop handlerThread=webflux-http-nio-2",
        "U27OBSERVE eventloop scalarBlock=scalar-ok@webflux-http-nio-2",
        "U27OBSERVE eventloop error=500",
        "U27OBSERVE rsocket serverPort=56611",
        "U27OBSERVE rsocket requestChannel=[echo:a, echo:b, echo:c]",
        "U27OBSERVE rsocket requestResponse=resp:ping elapsedMs=0",
        "U27OBSERVE rsocket cancel received=2 framesAtCancel=2 serverDoOnCancel=true",
        "U27OBSERVE rsocket fireAndForget received=fnf-1"
      ]
    },
    {
      "name": "dependencies",
      "command": [
        "mvn",
        "dependency:tree",
        "-Dincludes=org.springframework,io.projectreactor,io.projectreactor.netty,io.rsocket,io.asyncer,org.springframework.security"
      ],
      "exitCode": 0,
      "observed": []
    }
  ],
  "sourceSha256": {
    "pom.xml": "a63907f65cab16eec6bdf3b39c3fd986b4ee8499bdf6d1778583b63176dfb2b4",
    "run.py": "719bf5fea46570d63066da58ad307c79785e45966131472f9be452cc7b51711a",
    "src/test/java/study/webflux/AnnotationFunctionEndpointsTest.java": "14b80db0c4e402fc95d33a6b9211e974da9246bd7be12d2f6b68750efe5abd6d",
    "src/test/java/study/webflux/EventLoopServerTest.java": "862432f8b5a5fc022f90ca02fce9663b875d4083947de0a5b5db35d7cd471c09",
    "src/test/java/study/webflux/LabApp.java": "f42c2ba26a828c88ba5921829c3d748dd30a0c235fa0b37057a55692ae36c5e3",
    "src/test/java/study/webflux/R2dbcTransactionTest.java": "10eb7eb5d8339c5a5b1998b040da7dd0d7f3b268a040eeb5f3084fa7a3fa548a",
    "src/test/java/study/webflux/RSocketInteractionTest.java": "0444aab20d4ebad8e017548cef41eb70ded8cc9968820f6b808a98a63c47bc81",
    "src/test/java/study/webflux/SpringRSocketTest.java": "29b766cbb60caf426aa380bda479cda78be2d24ddb5aa680436b6fc5a9fba134",
    "src/test/java/study/webflux/WebClientHttpTest.java": "838c5add4faabe639cbdd893ef00ee888b42a4fe53e34d1fe98ed9cd58027dd4"
  },
  "rawLogs": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u27/ab0faf82-0ce0-4335-9123-f2ccea40d561",
  "limits": [
    "ApplicationContext binding does not exercise network; separate Netty, HTTP and RSocket tests use loopback random ports.",
    "Identity is a local test fixture written to Reactor Context, not a real authenticator or authorization chain (U31).",
    "MySQL creates a random database and drops only that owned database; default root/empty password is this local setup, credentials configurable via U27_MYSQL_* environment.",
    "Cancellation before transaction completion selects rollback in Spring 7.0.10; this is not a promise to undo a commit already accepted by MySQL.",
    "HTTP cancellation is not a business rollback; RSocket cancellation is stream scoped. TLS, network partition, resume/reconnect persistence and production capacity not tested."
  ]
}
