{
 "ticket": "U67 #104",
 "generatedAt": "2026-10-28T23:47:56.631099+08:00",
 "startedAt": "2026-10-28T23:47:52.572121+08:00",
 "purpose": "Netty 事件循环/pipeline/编解码/引用计数/背压/取消与关闭的真实 loopback 实验",
 "exitCode": 0,
 "testCount": 17,
 "reports": [
  {
   "name": "study.netty.CancelAndShutdownTest",
   "tests": "3",
   "failures": "0",
   "errors": "0",
   "skipped": "0",
   "time": "0.511"
  },
  {
   "name": "study.netty.CodecAndRefCountTest",
   "tests": "8",
   "failures": "0",
   "errors": "0",
   "skipped": "0",
   "time": "0.024"
  },
  {
   "name": "study.netty.EventLoopTest",
   "tests": "6",
   "failures": "0",
   "errors": "0",
   "skipped": "0",
   "time": "1.851"
  }
 ],
 "results": [
  {
   "name": "clean-test",
   "command": [
    "/Users/gaochao/develop/maven-3.9.9/bin/mvn",
    "-B",
    "-q",
    "clean",
    "test"
   ],
   "exitCode": 0,
   "observed": [
    "U67 handlerRemoval=PASS delivered=1 stopped=true",
    "U67 peerClose=PASS inactive=1",
    "U67 writeAfterClose=PASS closed=true failureType=StacklessClosedChannelException",
    "U67 pooledAllocator=PASS pooled=true identityHash=1990421361 unpooled=true",
    "U67 retainedDuplicate=PASS sharedStorage=true refCnt=2to1",
    "U67 doubleRelease=PASS rejected=true",
    "U67 leakSignal=PASS refCntBeforeRelease=1 detectorRole=refCnt",
    "U67 decoderAccumulate=PASS chunks=16 frames=1",
    "U67 framerSticky=PASS frames=3",
    "U67 refCount=PASS released=0 useAfterRelease=rejected",
    "U67 partialFrame=PASS halfWaited=true completed=true",
    "U67 eventLoopThread=PASS handlerOnLoop=true submitOnLoop=true",
    "U67 senderBackpressure=PASS writerBlockedAfter500ms=true bytesWritten=327680 readerNeverRead=true",
    "U67 autoRead=PASS readsBeforeOff=1 readsAfterOff=1",
    "U67 channelClose=PASS inactive=true active=0",
    "U67 pipelineOrder=PASS order=first;second;",
    "U67 loopBlocking=PASS reads=2 elapsedMs=226 cause=Thread.sleep-in-handler"
   ]
  }
 ],
 "observations": [
  "U67 autoRead",
  "U67 channelClose",
  "U67 decoderAccumulate",
  "U67 doubleRelease",
  "U67 eventLoopThread",
  "U67 framerSticky",
  "U67 handlerRemoval",
  "U67 leakSignal",
  "U67 loopBlocking",
  "U67 partialFrame",
  "U67 peerClose",
  "U67 pipelineOrder",
  "U67 pooledAllocator",
  "U67 refCount",
  "U67 retainedDuplicate",
  "U67 senderBackpressure",
  "U67 writeAfterClose"
 ],
 "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)",
  "netty": {
   "netty-buffer": "4.2.19.Final",
   "netty-codec": "4.2.19.Final",
   "netty-codec-base": "4.2.19.Final",
   "netty-codec-compression": "4.2.19.Final",
   "netty-codec-marshalling": "4.2.19.Final",
   "netty-codec-protobuf": "4.2.19.Final",
   "netty-common": "4.2.19.Final",
   "netty-handler": "4.2.19.Final",
   "netty-resolver": "4.2.19.Final",
   "netty-transport": "4.2.19.Final",
   "netty-transport-native-unix-common": "4.2.19.Final"
  },
  "nettyBomSource": "Spring Boot 4.0.9 BOM netty.version=4.2.19.Final",
  "sourceTag": "netty/netty netty-4.2.19.Final（提交 e16031ea…）"
 },
 "files": {
  "README.md": "5e79daca8613506b3b0a430dcf2d59c150b5ab7b5235ae28d450f7cb42e4a1ca",
  "pom.xml": "220471206ca4c1418240f11a3b122b1899e6805e7846410ebf5b0ada15c8f5dc",
  "run.py": "c6d84ea30e6c85285f8d3cfda1348d2a1c5932bc0ce9dfdb67e0fa12ddd07b37",
  "src/main/java/study/netty/EventLoopServer.java": "3488ae997306ffa7648c9e8d36fb1f7ed06f2eff11b61bbbc8a7a59891d639dc",
  "src/main/java/study/netty/FrameCodecs.java": "f145eabc6877db32e97a436fa0a8efbacdd4a47988f36910b52090f48603a9a1",
  "src/test/java/study/netty/CancelAndShutdownTest.java": "2d89b53687ace46394170629f3efb7ac139d89b29048ef12667a200f472b0746",
  "src/test/java/study/netty/CodecAndRefCountTest.java": "6b946b2107939309875f7f2a717d9c8784dd17cae4ce50753353c4e5d9e22d26",
  "src/test/java/study/netty/EventLoopTest.java": "439379306ec77c9d3f6e982f75732a69c7eaac40029df71e45bd4aed8694141e"
 },
 "limits": [
  "全部实验在本机进程内与 loopback socket 上执行；未接真实远端网络、TLS 或代理。",
  "事件循环线程数固定为 boss=1/worker=2；真实生产线程数、CPU 绑定与 epoll 差异未运行（macOS 用 kqueue）。",
  "背压实验验证的是\"接收方不读、发送方 write 阻塞\"这一内核级现象；未做吞吐/延迟压测。",
  "ResourceLeakDetector 的运行时报告未开启（默认级别 simple），泄漏结论只基于 refCnt 语义。",
  "pipeline 实验只覆盖入站顺序与移除；出站方向、编码器链与异常传播未专项运行。"
 ]
}
