{
 "ticket": "U50 #87",
 "generatedAt": "2026-10-29T17:16:46.684895+08:00",
 "startedAt": "2026-10-29T17:16:34.148888+08:00",
 "purpose": "Spring for GraphQL：schema/resolver、校验、鉴权/租户、错误与 N+1/批量加载的真实 HTTP 运行",
 "exitCode": 0,
 "testCount": 7,
 "reports": [
  {
   "name": "study.graphql.GraphqlExecutionTest",
   "tests": "7",
   "failures": "0",
   "errors": "0",
   "skipped": "0",
   "time": "4.053"
  }
 ],
 "results": [
  {
   "name": "clean-test",
   "command": [
    "/Users/gaochao/develop/maven-3.9.9/bin/mvn",
    "-B",
    "-q",
    "clean",
    "test"
   ],
   "exitCode": 0,
   "observed": [
    "U50 mutationAuth=PASS readerDenied=true adminAllowed=true",
    "U50 nPlusOne=PASS perBookSql=4 batchedSql=2",
    "U50 graphqlValidation=PASS unknownFieldRejected=true http200=true",
    "U50 unhandledException=PASS fallsToDataFetchingError=true",
    "U50 httpAuth=PASS anonymous=401 bodyErrorsNotReached=true",
    "U50 validationError=PASS httpStatusStill200=true",
    "U50 schemaResolvers=PASS tenantFilter=true",
    "U50 dataLoaderDedupe=PASS batchCalls=1 batchKeys=2 sql=2"
   ]
  }
 ],
 "observed": [
  "U50 mutationAuth=PASS readerDenied=true adminAllowed=true",
  "U50 nPlusOne=PASS perBookSql=4 batchedSql=2",
  "U50 graphqlValidation=PASS unknownFieldRejected=true http200=true",
  "U50 unhandledException=PASS fallsToDataFetchingError=true",
  "U50 httpAuth=PASS anonymous=401 bodyErrorsNotReached=true",
  "U50 validationError=PASS httpStatusStill200=true",
  "U50 schemaResolvers=PASS tenantFilter=true",
  "U50 dataLoaderDedupe=PASS batchCalls=1 batchKeys=2 sql=2"
 ],
 "environment": {
  "os": "macOS-27.2-arm64-arm-64bit",
  "arch": "arm64",
  "javaVersion": "openjdk version \"21.0.11\" 2026-04-21 LTS",
  "maven": "Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)",
  "versions": {
   "org.springframework.boot:spring-boot-graphql": "4.0.9",
   "com.h2database:h2": "2.4.240",
   "org.springframework.graphql:spring-graphql": "2.0.6",
   "com.graphql-java:graphql-java": "25.1",
   "org.springframework.security:spring-security-core": "7.0.8"
  },
  "versionsSource": "Spring Boot 4.0.9 parent/BOM",
  "sourceTag": "spring-projects/spring-graphql v2.0.6（BatchLoaderRegistry/DefaultExecutionGraphQlService/AnnotatedControllerConfigurer 固定源码）"
 },
 "files": {
  "pom.xml": "11b4d7a08b46b6d45bd687e17ff4680c2863dcfaff97e3e83e82e2eac01e5a0d",
  "run.py": "7b22d8833a5f73b8dc18ccb4923bf313b6b9a92440b6f6586e29878998cd0ac6",
  "src/main/java/study/graphql/Author.java": "ae26db3febade165ce42e2cf3018c394e6c72780e8388309a2768cdf6568caee",
  "src/main/java/study/graphql/BatchLoaderConfig.java": "250fed1ae3fe3b6cbe012e11460c68e65ed5e82bb15a2a236b9492820a927a6e",
  "src/main/java/study/graphql/Book.java": "ad6aff1875dbda95e04a9cc53ed2df04ffecc6d56e7b73ad229ced38703da5f9",
  "src/main/java/study/graphql/GraphqlLabApplication.java": "5541a4af280c405cadaf9e14ccfde55aa2f6a7c08008b00adcd7d1953801c17b",
  "src/main/java/study/graphql/GraphqlWebConfig.java": "7ece1c2297a2a9956181e4a69493ca9098cdc826903ef559adb543df970ec543",
  "src/main/java/study/graphql/LibraryController.java": "570562cf4b8c8b160d6b7b0b5b1617b9e86d7c81d01c4519b66455df0bf96809",
  "src/main/java/study/graphql/LibraryRepository.java": "901add81a28638629bea03427dc50be36eaf8178cc8b4ebcb168f5c3e6cea125",
  "src/main/java/study/graphql/SecurityAndErrorsConfig.java": "e52ee6293cce7600abee78011d094d53ef01b39a8cb8847dbae54e8bbabd840c",
  "src/main/java/study/graphql/SqlCounter.java": "d758536f7e188770ccf30c5a8d84c5cfd1f74f54ad5ee843566f5bb91bda7930",
  "src/main/java/study/graphql/TenantContext.java": "56d6012f712899c1aa0e6ef2c74a0d74f7ccc9058a9fbe97bec5f2df26b29a86",
  "src/main/resources/graphql/schema.graphqls": "419435c4f2643fcd7e259b28fb64acdc3a10b46f4596fdee65a658b99e783ed9",
  "src/test/java/study/graphql/GraphqlExecutionTest.java": "1a5cb1d523cf9cbee32381de5ecec72f173c367b85bd03798907e738510f9135"
 },
 "limits": [
  "全部测试在进程内真实 HTTP（随机端口）上执行，H2 内存库；未连接生产数据库或外部 GraphQL 服务。",
  "未运行 WebSocket 订阅、SSE、multipart、RSocket transport、DataLoader maxBatchSize 分批、请求级 DataLoader 缓存跨请求（默认不跨）。",
  "未运行 GraphQL Java 的 instrumentation、分页 Connection 适配、federation、GraalVM native 与 AOT 场景。",
  "N+1 观察基于自建 SqlCounter 统计，不是数据库端 profile；未做吞吐/延迟压测。"
 ]
}
