Handoff: Resolve the fatal-admission test contract before finishing UrlProtocol drain reconciliation
Written 2026-09-20T22:45:53.998055+00:00. RE-VERIFY: this is a write-time snapshot. Check git ls-remote origin refs/heads/recon/574-on-585, the two contextual PRs with gh pr view <full-url> --json state,headRefOid,mergeStateStatus,statusCheckRollup, and Maven metadata before acting. Local paths below are optional harness records; the complete diagnosis, proposed patch, raw failure and selector results are embedded here.
Mission
The lane was assigned two design gaps and three test gaps in the reconciliation of https://github.com/CodexCoder21Organization/UrlProtocol/pull/574 onto https://github.com/CodexCoder21Organization/UrlProtocol/pull/585. User required the specified 3a8c33c9 base, version 0.0.529, seven new/changed test scenarios proved failing-before then passing five times, the reconciliation and inherited regression matrices, one branch push, no PR or CI wait. The fixes are pushed; one inherited test requires a decision because its post-fatal admission contract contradicts the new required boundary.
Current result and remaining decision
2026-09-20T22:45:53.996250+00:00 — final durable state, BLOCKED on one contract decision
OBSERVED: One and only one push completed to https://github.com/CodexCoder21Organization/UrlProtocol/tree/recon/574-on-585. Remote and local head both https://github.com/CodexCoder21Organization/UrlProtocol/commit/d57995ec70116dadc4512980b5e2803e17cb5c2f; git ls-remote confirms equality, working tree/stashes are clean, and the assigned base https://github.com/CodexCoder21Organization/UrlProtocol/commit/3a8c33c910c36bfea589682ccb714ad83b45b5c8 is an ancestor. The force-with-lease push explicitly expected the original remote head, protecting concurrent work. No PR exists for this branch, and none was created. Metadata immediately before push reports latest 0.0.525 and contains no 0.0.529. No artifact was published, no service deployed/restarted, no merge/enqueue or CI rerun occurred.
OBSERVED: Final targeted matrix completed 145 invocations on that exact head: 144 pass, 1 fails. All seven round-2 changed/new selectors pass 5/5 (35/35). All 33 reconciliation selectors pass. Original 585 set: 79/80 pass; its additional supplied-base selector passes, making the expanded set 80/81. Original lifecycle set: 15/16 pass. These groups overlap; the sole failure in both affected groups is testTcpServerClassifiesReaderStartFailureMessages. Every selector was run; the failed test was not retried, skipped, disabled, edited, or weakened. No local full suite or remote test run was launched.
OBSERVED: At 22:43:47 UTC, automatic checks on the pushed head are kotlin.build (remote) IN_PROGRESS (https://github.com/CodexCoder21Organization/UrlProtocol/runs/106162685348) and kotlin.build (kompile-remote-build) IN_PROGRESS (https://github.com/CodexCoder21Organization/UrlProtocol/runs/106162689014). No separate commit-status contexts are attached; combined status is pending. No GitHub Actions build/all-tests check is attached. No CI wait was performed.
OBSERVED: Contextual pull requests remain OPEN/BLOCKED: https://github.com/CodexCoder21Organization/UrlProtocol/pull/574 and https://github.com/CodexCoder21Organization/UrlProtocol/pull/585. The latter advanced to https://github.com/CodexCoder21Organization/UrlProtocol/commit/b2d071ef91d686eff8d63ebd2050dc12ed3728de, changing three tests only. This lane keeps its expressly assigned base; those later test changes are not included.
| Brief item |
State / evidence |
| 1 replacement terminal-write admission |
DONE: retained per terminal write; public failing-before probe, 5/5 after; verifies 50 terminal replies and out-of-order settlement |
| 2 reject late shared-stream RPC without cancelling admitted work |
DONE: no stream close on rejected admission; first admitted caller receives its response; failing-before probe and 5/5 after |
| 3 fatal exit as sole request-admission boundary |
DONE implementation and new test, 5/5; original fatal-during-drain test preserved and passes. Compatibility with the inherited post-fatal-new-request-success assertion is REFUTED by the observed deterministic failure; authorization required before adapting it |
| 4 canceled queued admission |
DONE test: pause observer proves request 100 admitted with 64 blocked handlers; server cancellation completes before release; missing completion mutation fails, correct implementation 5/5 |
| 5 public P2P observation |
DONE: all three private-attribute tests replaced/adapted to public held writes and exact responses. Private diagnostic-observer contract claim explicitly dropped in favor of public write-failure coverage; all three reject wrong ownership and pass 5/5 |
| 33-selector and 585 matrix |
DONE execution and reporting; 33/33, expanded 585 80/81. A green 585 result cannot be claimed with the conflicting inherited assertion unchanged |
| Durability/version/draft |
DONE: one verified push, 0.0.529 absent, draft updated with round-2 findings; no PR/CI wait |
Blocking question already sent: may the classification test admit and hold its healthy request before fatal exit, then verify it completes while both uncaught handlers remain blocked? Recommendation is yes; it preserves every existing isolation/response/cause/identity/cleanup assertion while honoring the new admission rule. The user lane rule requiring a stop before changing a test judged wrong is why authorization is required. The unapplied/unverified proposal is l96-proposed-classification-admission.patch.
Workarounds/limits: repository-local git identity configured; initial rebase conflict resolved with the exact specified base test; one pre-build rebase attempt found unstaged tests, then succeeded after committing. The supplied ignored coursier symlink already worked. An initial 8-pass partial matrix was restarted after preserving the original fatal-during-drain test in a separate test-only commit; those preliminary results are excluded. No failure was dismissed to obtain green. The sole final failure is the explicit contract contradiction above.
Relevant refs
| Repository |
Branch |
Remote head |
PR |
Contents |
State |
| https://github.com/CodexCoder21Organization/UrlProtocol |
https://github.com/CodexCoder21Organization/UrlProtocol/tree/recon/574-on-585 |
https://github.com/CodexCoder21Organization/UrlProtocol/commit/d57995ec70116dadc4512980b5e2803e17cb5c2f |
No PR |
Two P2P fixes, fatal TCP admission fix, seven public regression scenarios |
Compiles; 144/145 targeted invocations pass; one contract conflict |
Deployed or published but unmerged: none. Tool history contains no publication, deployment, service restart, merge, enqueue, or CI rerun; Maven 0.0.529 remains absent at the final pre-push check.
Next steps
- Re-verify current branch, contextual PR heads, checks, and any answer to the blocking question. Do not overwrite other lane work. The newer base changed three tests only; coordinate integrating those with its lane.
- Obtain authorization to adapt the classification test before editing it. The lane explicitly said: "If you believe a test itself is wrong, say so with evidence in the findings and stop on that point instead of changing it." The proposed patch below is NOT applied and NOT tested.
- If authorized, apply the patch, run
scripts/test.bash --local --test testTcpServerClassifiesReaderStartFailureMessages five times, review every original assertion remains, and run the fatal-admission and fatal-during-drain neighbors. Baseline failure is already reproduced with the unchanged inherited test; do not repeat CI to diagnose it.
- Rebase/fetch before each build as required. Preserve no-timeout-increase, no-iteration-reduction, no skips, no mocks/reflection, no weakening, no service/production actions, and no merge/enqueue/publication. The next lane needs its own explicit push budget; this lane already used its one final push.
- Update the round-2 draft and evidence with the final passing head, run the required reconciliation/inherited matrix for any contract changes, then return the branch to the orchestrator for separate review. Creating/retargeting a PR and merging were not this lane's authority.
Evidence and mechanisms
The outbox removed entries and settled their host admissions before submitting replacement terminal responses; a held public write promise showed delegate shutdown beginning too early. The fix carries each original Entry through its corresponding terminal write callback. The test holds the first of 50 writes while later promises settle and verifies all 50 exact terminal replies. The late-RPC branch closed a shared stream on failed host admission; its public probe held the first handler, observed the second frame's dispatch, and found the first caller canceled. Rejection now returns without stream close; host drain closes transports after admitted work settles. Fatal TCP accept cleanup passed closeRequestAdmission=false; it now passes true while cancelWork remains false.
The inherited classification test waits for fatalFailureObserved, then constructs and sends a new healthy request at test line 273 and demands a response. The new required rule rejects that request, leaving sendRequest waiting until the test's 30000ms deadline. This is the exact opposing contract; injected OutOfMemoryError strings are intentional test inputs, not host resource exhaustion. A real ping/pong barrier in the new rejection test proves the post-fatal request was processed before checking the public admitted-handler count.
The public queued-cancellation test keeps 64 genuine handlers blocked, sends through request 100, waits for RpcReadPauseObserver, closes the client, waits for server channelInactive propagation, and only then releases workers. Removing invokeOnCompletion reproduced its stuck drain. Omitting Entry.transferToWriter reproduced all three rewritten public held-write tests. All seven changed tests pass 5/5 on the pushed head.
Proposed patch, not applied or tested
--- a/tests/testTcpServerClassifiesReaderStartFailureMessages.kts
+++ b/tests/testTcpServerClassifiesReaderStartFailureMessages.kts
@@ -20,6 +20,8 @@
import java.net.InetSocketAddress
import java.net.ServerSocket
import java.net.Socket
+import java.util.concurrent.Callable
+import java.util.concurrent.FutureTask
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
import java.util.concurrent.atomic.AtomicBoolean
@@ -156,6 +158,7 @@
val fatalFactoryThread = AtomicReference<Thread?>(null)
val observedFatalThread = AtomicReference<Thread?>(null)
val healthyRequestHandled = CountDownLatch(1)
+ val releaseHealthyRequest = CountDownLatch(1)
val readerThreadFactory = TcpServerReaderThreadFactory { name, action ->
when (readerStartAttempts.getAndIncrement()) {
0 -> thread(name = name, isDaemon = true, block = action).also {
@@ -187,6 +190,7 @@
{ request, _ ->
if (request.method == "healthy-isolation") {
healthyRequestHandled.countDown()
+ releaseHealthyRequest.await()
Libp2pRpcProtocol.RpcResponse.success(
request.id,
mapOf("status" to "healthy", "requestId" to request.id),
@@ -199,6 +203,7 @@
readerThreadFactory = readerThreadFactory,
)
var healthyStream: TcpRpcStream? = null
+ var healthyRequestThread: Thread? = null
val failedClient = Socket()
val priorRepository = `$effectHandlerRepository`.get()
val unrelatedFailure = IllegalStateException("unrelated thread failure")
@@ -236,6 +241,17 @@
healthyReaderStarted.await(5, TimeUnit.SECONDS),
"TcpServer did not start the healthy reader before the fatal connection"
)
+ val healthyRequest = Libp2pRpcProtocol.RpcRequest(
+ id = "healthy-during-fatal-observation",
+ method = "healthy-isolation",
+ )
+ val healthyCall = FutureTask(Callable { healthyStream!!.sendRequest(healthyRequest) })
+ healthyRequestThread = Thread(healthyCall, "healthy-request-before-fatal-exit").apply {
+ isDaemon = true
+ start()
+ }
+ assertTrue(healthyRequestHandled.await(5, TimeUnit.SECONDS),
+ "The healthy request must be admitted before fatal accept exit closes admission")
failedClient.soTimeout = 5_000
failedClient.connect(InetSocketAddress("127.0.0.1", port), 5_000)
assertTrue(
@@ -258,7 +274,7 @@
server.connectionCount,
"TcpServer must retain the unrelated healthy connection after the rejected heap OOM message"
)
- // Keep both uncaught handlers active while a real request uses the healthy reader. This
+ // Keep both uncaught handlers active while the already-admitted request completes. This
// catches a process-wide handler assignment as well as an accept-thread handler that
// accidentally blocks or changes another request's execution.
unrelatedThread.start()
@@ -266,11 +282,8 @@
unrelatedHandlerEntered.await(5, TimeUnit.SECONDS),
"The unrelated thread must enter its own uncaught handler while fatal observation runs"
)
- val healthyRequest = Libp2pRpcProtocol.RpcRequest(
- id = "healthy-during-fatal-observation",
- method = "healthy-isolation",
- )
- val healthyResponse = healthyStream!!.sendRequest(healthyRequest)
+ releaseHealthyRequest.countDown()
+ val healthyResponse = healthyCall.get(5, TimeUnit.SECONDS)
assertEquals(healthyRequest.id, healthyResponse.id)
assertEquals(null, healthyResponse.error)
assertEquals(
@@ -316,6 +329,7 @@
"The fatal failure must be observed by the accept thread that raised it"
)
} finally {
+ releaseHealthyRequest.countDown()
releaseFatalClose.countDown()
unrelatedHandlerReleased.countDown()
fatalHandlerReleased.countDown()
@@ -336,6 +350,8 @@
unrelatedThread.join(5_000)
}
fatalFactoryThread.get()?.join(5_000)
+ healthyRequestThread?.join(5_000)
+ assertFalse(healthyRequestThread?.isAlive == true, "The healthy request caller must terminate after cleanup")
assertFalse(unrelatedThread.isAlive, "The unrelated thread must terminate after cleanup")
assertTrue(fatalFactoryThread.get()?.isAlive != true, "The fatal accept thread must terminate after cleanup")
} finally {
Full failing-test output and thread dumps
Current branch recon/574-on-585 is up to date.
Picked up JAVA_TOOL_OPTIONS: -Dfoundation.url.test.isolated=true
'getter for id: Long' is deprecated. Deprecated in Java
Unnecessary non-null assertion (!!) on a non-null receiver of type TcpRpcStream
warning: no package at top of file: /tmp/claude-501/-code/ca89812b-bfcc-4ad0-91ea-9366a832809d/scratchpad/workspace/l96-fix574r2/UrlProtocol/tests/testTcpServerClassifiesReaderStartFailureMessages.kts
java.lang.RuntimeException: Test 'testTcpServerClassifiesReaderStartFailureMessages' timed out after 30000ms, stuck at: foundation.url.protocol.TcpRpcStream.sendRequest(TcpRpcStream.kt:115)
at kompile.WorkspaceKt.executeTestInSeparateJvm(Workspace.kt:2407)
at kompile.WorkspaceKt.runTests(Workspace.kt:3570)
at kompile.LocalBuildWorkspace.runTests$kompile(Workspace.kt:1249)
at kompile.LocalBuildWorkspace.executeInternal(Workspace.kt:570)
at kompile.LocalBuildWorkspace.execute(Workspace.kt:508)
at kompile.cli.CliKt.main(Cli.kt:1232)
FAILED foundation.url.protocol.testTcpServerClassifiesReaderStartFailureMessages -> Test 'testTcpServerClassifiesReaderStartFailureMessages' timed out after 30000ms, stuck at: foundation.url.protocol.TcpRpcStream.sendRequest(TcpRpcStream.kt:115) (in 31.3 seconds)
--- Console output (foundation.url.protocol.testTcpServerClassifiesReaderStartFailureMessages) ---
Picked up JAVA_TOOL_OPTIONS: -Dfoundation.url.test.isolated=true
An uncaught NotificationEffect bubbled up to the thread root!
You can learn more about handling NotificationEffects at https://github.com/kotlin-algebraic-effects/
TcpServer on port 41203 could not start a connection reader thread for an accepted socket; the socket was removed from the connection set and closed; cause: java.lang.OutOfMemoryError: UNABLE TO CREATE NATIVE THREAD: possibly out of memory or process/resource limits reached [unhandled TcpServerReaderThreadStartFailureEffect from TcpServer.kt:1390]
TcpServer on port 42947 could not start a connection reader thread for an accepted socket; the socket was removed from the connection set and closed; cause: java.lang.OutOfMemoryError: unable to create new native thread: possibly out of memory or process/resource limits reached [unhandled TcpServerReaderThreadStartFailureEffect from TcpServer.kt:1390]
TcpServer on port 36529 could not start a connection reader thread for an accepted socket; the socket was removed from the connection set and closed; cause: java.lang.OutOfMemoryError: Failed to create a thread: retVal -1, errno 11 [unhandled TcpServerReaderThreadStartFailureEffect from TcpServer.kt:1390]
TcpServer on port 41381 could not start a connection reader thread for an accepted socket; the socket was removed from the connection set and closed; cause: java.lang.OutOfMemoryError: FAILED TO CREATE A THREAD: retVal -1, errno 11 (0xb), errno2 0x9b [unhandled TcpServerReaderThreadStartFailureEffect from TcpServer.kt:1390]
TcpServer on port 41159 could not start a connection reader thread for an accepted socket; the socket was removed from the connection set and closed; cause: java.lang.OutOfMemoryError: Java heap space [unhandled TcpServerReaderThreadStartFailureEffect from TcpServer.kt:1390]
Full thread dump (kompile in-child self-dump: foundation.url.protocol.TestTcpServerClassifiesReaderStartFailureMessagesKt.testTcpServerClassifiesReaderStartFailureMessages exceeded 30000ms):
"main" #1 prio=5
java.lang.Thread.State: TIMED_WAITING
at jdk.internal.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:790)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1160)
at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:276)
at foundation.url.protocol.TcpRpcStream.sendRequest(TcpRpcStream.kt:115)
at foundation.url.protocol.TestTcpServerClassifiesReaderStartFailureMessagesKt.testTcpServerClassifiesReaderStartFailureMessages(testTcpServerClassifiesReaderStartFailureMessages.kt:273)
at java.lang.invoke.DirectMethodHandle$Holder.invokeStatic(DirectMethodHandle$Holder)
at java.lang.invoke.LambdaForm$MH/0x000000e00100c800.invoke(LambdaForm$MH)
at java.lang.invoke.Invokers$Holder.invokeExact_MT(Invokers$Holder)
at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(DirectMethodHandleAccessor.java:153)
at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.lang.reflect.Method.invoke(Method.java:580)
at kompile.TestRunner.executeTest(TestRunner.kt:46)
at java.lang.invoke.LambdaForm$DMH/0x000000e001001800.invokeStatic(LambdaForm$DMH)
at java.lang.invoke.LambdaForm$MH/0x000000e001005400.invoke(LambdaForm$MH)
at java.lang.invoke.Invokers$Holder.invokeExact_MT(Invokers$Holder)
at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(DirectMethodHandleAccessor.java:154)
at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.lang.reflect.Method.invoke(Method.java:580)
at community.kotlin.kompile.testrunner.bootstrap.BootstrapRunner.main(BootstrapRunner.java:416)
"Notification Thread" #26 daemon prio=9
java.lang.Thread.State: RUNNABLE
"Common-Cleaner" #27 daemon prio=8
java.lang.Thread.State: TIMED_WAITING
at jdk.internal.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1886)
at java.lang.ref.ReferenceQueue.await(ReferenceQueue.java:71)
at java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:143)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:218)
at jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:140)
at java.lang.Thread.runWith(Thread.java:1596)
at java.lang.Thread.run(Thread.java:1583)
at jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:186)
"Signal Dispatcher" #11 daemon prio=9
java.lang.Thread.State: RUNNABLE
"TcpServer-Accept-41159" #42 daemon prio=5
java.lang.Thread.State: WAITING
at jdk.internal.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:221)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:788)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1133)
at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:230)
at foundation.url.protocol.TestTcpServerClassifiesReaderStartFailureMessagesKt.testTcpServerClassifiesReaderStartFailureMessages$lambda$7$lambda$6(testTcpServerClassifiesReaderStartFailureMessages.kt:172)
at foundation.url.protocol.TestTcpServerClassifiesReaderStartFailureMessagesKt$$Lambda/0x000000e001087818.uncaughtException(Unknown Source)
at java.lang.Thread.dispatchUncaughtException(Thread.java:2902)
"TcpServer-Writer-/127.0.0.1:50974" #45 daemon prio=5
java.lang.Thread.State: TIMED_WAITING
at java.lang.Object.wait0(Native Method)
at java.lang.Object.wait(Object.java:366)
at foundation.url.protocol.TcpServer$ConnectionHandler.writeLoop(TcpServer.kt:1914)
at foundation.url.protocol.TcpServer$ConnectionHandler.access$writeLoop(TcpServer.kt:1637)
at foundation.url.protocol.TcpServer$ConnectionHandler$start$startedWriterThread$1.invoke(TcpServer.kt:1783)
at foundation.url.protocol.TcpServer$ConnectionHandler$start$startedWriterThread$1.invoke(TcpServer.kt:1780)
at kotlin.concurrent.ThreadsKt$thread$thread$1.run(Thread.kt:30)
"kompile-timeout-self-dump" #28 daemon prio=5
java.lang.Thread.State: RUNNABLE
at java.lang.Thread.dumpThreads(Native Method)
at java.lang.Thread.getAllStackTraces(Thread.java:2522)
at kompile.TestRunner.printSelfThreadDump(TestRunner.kt:75)
at kompile.TestRunner.executeTest$lambda$0(TestRunner.kt:35)
at kompile.TestRunner$$Lambda/0x000000e001009ba8.run(Unknown Source)
at java.lang.Thread.runWith(Thread.java:1596)
at java.lang.Thread.run(Thread.java:1583)
"Unrelated-Uncaught-Failure" #41 daemon prio=5
java.lang.Thread.State: WAITING
at jdk.internal.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:221)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:788)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1133)
at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:230)
at foundation.url.protocol.TestTcpServerClassifiesReaderStartFailureMessagesKt.testTcpServerClassifiesReaderStartFailureMessages$lambda$8(testTcpServerClassifiesReaderStartFailureMessages.kt:221)
at foundation.url.protocol.TestTcpServerClassifiesReaderStartFailureMessagesKt$$Lambda/0x000000e001085048.uncaughtException(Unknown Source)
at java.lang.Thread.dispatchUncaughtException(Thread.java:2902)
"TcpRpcStream-Reader-41159" #44 daemon prio=5
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.SocketDispatcher.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:48)
at sun.nio.ch.NioSocketImpl.tryRead(NioSocketImpl.java:256)
at sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:307)
at sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:346)
at sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:796)
at java.net.Socket$SocketInputStream.read(Socket.java:1099)
at foundation.url.protocol.Libp2pRpcProtocol.readFully(Libp2pRpcProtocol.kt:3353)
at foundation.url.protocol.Libp2pRpcProtocol.readJsonFrameLength(Libp2pRpcProtocol.kt:3206)
at foundation.url.protocol.Libp2pRpcProtocol.readMessageFrameFromStream$foundation_url_protocol(Libp2pRpcProtocol.kt:2861)
at foundation.url.protocol.TcpRpcStream.runReaderLoop(TcpRpcStream.kt:271)
at foundation.url.protocol.TcpRpcStream.access$runReaderLoop(TcpRpcStream.kt:30)
at foundation.url.protocol.TcpRpcStream$1.invoke(TcpRpcStream.kt:54)
at foundation.url.protocol.TcpRpcStream$1.invoke(TcpRpcStream.kt:53)
at kotlin.concurrent.ThreadsKt$thread$thread$1.run(Thread.kt:30)
"Finalizer" #10 daemon prio=8
java.lang.Thread.State: WAITING
at java.lang.Object.wait0(Native Method)
at java.lang.Object.wait(Object.java:366)
at java.lang.Object.wait(Object.java:339)
at java.lang.ref.NativeReferenceQueue.await(NativeReferenceQueue.java:48)
at java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:158)
at java.lang.ref.NativeReferenceQueue.remove(NativeReferenceQueue.java:89)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:173)
"TcpServer-Reader-/127.0.0.1:50974" #43 daemon prio=5
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.SocketDispatcher.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:48)
at sun.nio.ch.NioSocketImpl.tryRead(NioSocketImpl.java:256)
at sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:307)
at sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:346)
at sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:796)
at java.net.Socket$SocketInputStream.read(Socket.java:1099)
at foundation.url.protocol.Libp2pRpcProtocol.readFully(Libp2pRpcProtocol.kt:3353)
at foundation.url.protocol.Libp2pRpcProtocol.readJsonFrameLength(Libp2pRpcProtocol.kt:3206)
at foundation.url.protocol.Libp2pRpcProtocol.readMessageFrameFromStream$foundation_url_protocol(Libp2pRpcProtocol.kt:2829)
at foundation.url.protocol.Libp2pRpcProtocol.readMessageFrameFromStream$foundation_url_protocol$default(Libp2pRpcProtocol.kt:2820)
at foundation.url.protocol.Libp2pRpcProtocol.readMessageFrameFromStream(Libp2pRpcProtocol.kt:2811)
at foundation.url.protocol.TcpServer$ConnectionHandler.readConnection(TcpServer.kt:2368)
at foundation.url.protocol.TcpServer$ConnectionHandler.handleConnection(TcpServer.kt:2235)
at foundation.url.protocol.TcpServer$ConnectionHandler.access$handleConnection(TcpServer.kt:1637)
at foundation.url.protocol.TcpServer$ConnectionHandler$start$startedReaderThread$1.invoke(TcpServer.kt:1771)
at foundation.url.protocol.TcpServer$ConnectionHandler$start$startedReaderThread$1.invoke(TcpServer.kt:1769)
at kotlin.concurrent.ThreadsKt$thread$thread$1.run(Thread.kt:30)
"Reference Handler" #9 daemon prio=10
java.lang.Thread.State: RUNNABLE
at java.lang.ref.Reference.waitForReferencePendingList(Native Method)
at java.lang.ref.Reference.processPendingReferences(Reference.java:246)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:208)
JNI global refs: 0 (not measured; kompile in-child self-dump)
2026-09-20 22:30:18
Full thread dump OpenJDK 64-Bit Server VM (21.0.12.1+1-LTS mixed mode, emulated-client, sharing):
Threads class SMR info:
_java_thread_list=0x0000ffff68001b00, length=10, elements={
0x0000ffffa002dcb0, 0x0000ffffa00dd550, 0x0000ffffa00deb50, 0x0000ffffa00e0420,
0x0000ffffa00e1a80, 0x0000ffffa00e3040, 0x0000ffffa00e4770, 0x0000ffffa00f1660,
0x0000ffffa00f4730, 0x0000ffff68000f70
}
"main" #1 [63686] prio=5 os_prio=0 cpu=123.22ms elapsed=30.81s tid=0x0000ffffa002dcb0 nid=63686 runnable [0x0000ffffa5c7d000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.Net.poll(java.base@21.0.12.1/Native Method)
at sun.nio.ch.NioSocketImpl.park(java.base@21.0.12.1/NioSocketImpl.java:191)
at sun.nio.ch.NioSocketImpl.timedRead(java.base@21.0.12.1/NioSocketImpl.java:280)
at sun.nio.ch.NioSocketImpl.implRead(java.base@21.0.12.1/NioSocketImpl.java:304)
at sun.nio.ch.NioSocketImpl.read(java.base@21.0.12.1/NioSocketImpl.java:346)
at sun.nio.ch.NioSocketImpl$1.read(java.base@21.0.12.1/NioSocketImpl.java:796)
at java.net.Socket$SocketInputStream.read(java.base@21.0.12.1/Socket.java:1099)
at java.net.Socket$SocketInputStream.read(java.base@21.0.12.1/Socket.java:1093)
at java.io.ObjectInputStream$PeekInputStream.peek(java.base@21.0.12.1/ObjectInputStream.java:2893)
at java.io.ObjectInputStream$BlockDataInputStream.peek(java.base@21.0.12.1/ObjectInputStream.java:3220)
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(java.base@21.0.12.1/ObjectInputStream.java:3230)
at java.io.ObjectInputStream.readObject0(java.base@21.0.12.1/ObjectInputStream.java:1713)
at java.io.ObjectInputStream.readObject(java.base@21.0.12.1/ObjectInputStream.java:540)
at java.io.ObjectInputStream.readObject(java.base@21.0.12.1/ObjectInputStream.java:498)
at community.kotlin.kompile.testrunner.bootstrap.BootstrapRunner.sendMessageAndGetResponse(BootstrapRunner.java:116)
at community.kotlin.kompile.testrunner.bootstrap.BootstrapRunner.sendMessageAndExpectAck(BootstrapRunner.java:134)
at community.kotlin.kompile.testrunner.bootstrap.BootstrapRunner.reportUncaughtException(BootstrapRunner.java:262)
at community.kotlin.kompile.testrunner.bootstrap.BootstrapRunner.main(BootstrapRunner.java:447)
"Reference Handler" #9 [63699] daemon prio=10 os_prio=0 cpu=0.27ms elapsed=30.80s tid=0x0000ffffa00dd550 nid=63699 waiting on condition [0x0000ffffa4527000]
java.lang.Thread.State: RUNNABLE
at java.lang.ref.Reference.waitForReferencePendingList(java.base@21.0.12.1/Native Method)
at java.lang.ref.Reference.processPendingReferences(java.base@21.0.12.1/Reference.java:246)
at java.lang.ref.Reference$ReferenceHandler.run(java.base@21.0.12.1/Reference.java:208)
"Finalizer" #10 [63700] daemon prio=8 os_prio=0 cpu=0.15ms elapsed=30.80s tid=0x0000ffffa00deb50 nid=63700 in Object.wait() [0x0000ffffa4319000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait0(java.base@21.0.12.1/Native Method)
- waiting on <0x00000000f8340f88> (a java.lang.ref.NativeReferenceQueue$Lock)
at java.lang.Object.wait(java.base@21.0.12.1/Object.java:366)
at java.lang.Object.wait(java.base@21.0.12.1/Object.java:339)
at java.lang.ref.NativeReferenceQueue.await(java.base@21.0.12.1/NativeReferenceQueue.java:48)
at java.lang.ref.ReferenceQueue.remove0(java.base@21.0.12.1/ReferenceQueue.java:158)
at java.lang.ref.NativeReferenceQueue.remove(java.base@21.0.12.1/NativeReferenceQueue.java:89)
- locked <0x00000000f8340f88> (a java.lang.ref.NativeReferenceQueue$Lock)
at java.lang.ref.Finalizer$FinalizerThread.run(java.base@21.0.12.1/Finalizer.java:173)
"Signal Dispatcher" #11 [63701] daemon prio=9 os_prio=0 cpu=0.26ms elapsed=30.80s tid=0x0000ffffa00e0420 nid=63701 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Service Thread" #12 [63702] daemon prio=9 os_prio=0 cpu=0.21ms elapsed=30.80s tid=0x0000ffffa00e1a80 nid=63702 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Monitor Deflation Thread" #13 [63703] daemon prio=9 os_prio=0 cpu=2.03ms elapsed=30.80s tid=0x0000ffffa00e3040 nid=63703 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C1 CompilerThread0" #14 [63704] daemon prio=9 os_prio=0 cpu=25.60ms elapsed=30.80s tid=0x0000ffffa00e4770 nid=63704 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
No compile task
"Notification Thread" #26 [63705] daemon prio=9 os_prio=0 cpu=0.06ms elapsed=30.79s tid=0x0000ffffa00f1660 nid=63705 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Common-Cleaner" #27 [63706] daemon prio=8 os_prio=0 cpu=0.22ms elapsed=30.79s tid=0x0000ffffa00f4730 nid=63706 waiting on condition [0x0000ffff85be1000]
java.lang.Thread.State: TIMED_WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@21.0.12.1/Native Method)
- parking to wait for <0x00000000f839d180> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.12.1/LockSupport.java:269)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.12.1/AbstractQueuedSynchronizer.java:1886)
at java.lang.ref.ReferenceQueue.await(java.base@21.0.12.1/ReferenceQueue.java:71)
at java.lang.ref.ReferenceQueue.remove0(java.base@21.0.12.1/ReferenceQueue.java:143)
at java.lang.ref.ReferenceQueue.remove(java.base@21.0.12.1/ReferenceQueue.java:218)
at jdk.internal.ref.CleanerImpl.run(java.base@21.0.12.1/CleanerImpl.java:140)
at java.lang.Thread.runWith(java.base@21.0.12.1/Thread.java:1596)
at java.lang.Thread.run(java.base@21.0.12.1/Thread.java:1583)
at jdk.internal.misc.InnocuousThread.run(java.base@21.0.12.1/InnocuousThread.java:186)
"Attach Listener" #46 [64217] daemon prio=9 os_prio=0 cpu=0.29ms elapsed=0.11s tid=0x0000ffff68000f70 nid=64217 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"VM Thread" os_prio=0 cpu=1.94ms elapsed=30.80s tid=0x0000ffffa00d2d40 nid=63698 runnable
"VM Periodic Task Thread" os_prio=0 cpu=12.82ms elapsed=30.80s tid=0x0000ffffa00c1720 nid=63697 waiting on condition
"G1 Service" os_prio=0 cpu=0.65ms elapsed=30.81s tid=0x0000ffffa00aad50 nid=63691 runnable
"G1 Refine#0" os_prio=0 cpu=14.64ms elapsed=30.81s tid=0x0000ffffa00a9d80 nid=63690 runnable
"G1 Conc#0" os_prio=0 cpu=0.05ms elapsed=30.81s tid=0x0000ffffa0050280 nid=63689 runnable
"G1 Main Marker" os_prio=0 cpu=0.06ms elapsed=30.81s tid=0x0000ffffa004f2d0 nid=63688 runnable
"GC Thread#0" os_prio=0 cpu=3.60ms elapsed=30.81s tid=0x0000ffffa004ce60 nid=63687 runnable
JNI global refs: 25, weak refs: 0
Heap
garbage-first heap total 131072K, used 7254K [0x00000000f8000000, 0x0000000100000000)
region size 1024K, 3 young (3072K), 1 survivors (1024K)
Metaspace used 5223K, committed 5376K, reserved 1114112K
class space used 496K, committed 576K, reserved 1048576K
Failed to report exception to parent: TCP communication error in reportUncaughtException
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:118)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at community.kotlin.kompile.testrunner.bootstrap.BootstrapRunner.main(BootstrapRunner.java:416)
Caused by: java.lang.AssertionError: Expected <null>, actual <RpcError(code=TIMEOUT, message=Request timed out after 30 seconds, data=null)>.
at kotlin.test.DefaultAsserter.fail(DefaultAsserter.kt:16)
at kotlin.test.Asserter$DefaultImpls.assertTrue(Assertions.kt:652)
at kotlin.test.DefaultAsserter.assertTrue(DefaultAsserter.kt:11)
at kotlin.test.Asserter$DefaultImpls.assertEquals(Assertions.kt:671)
at kotlin.test.DefaultAsserter.assertEquals(DefaultAsserter.kt:11)
at kotlin.test.AssertionsKt__AssertionsKt.assertEquals(Assertions.kt:63)
at kotlin.test.AssertionsKt.assertEquals(Unknown Source)
at kotlin.test.AssertionsKt__AssertionsKt.assertEquals$default(Assertions.kt:62)
at kotlin.test.AssertionsKt.assertEquals$default(Unknown Source)
at foundation.url.protocol.TestTcpServerClassifiesReaderStartFailureMessagesKt.testTcpServerClassifiesReaderStartFailureMessages(testTcpServerClassifiesReaderStartFailureMessages.kt:275)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at kompile.TestRunner.executeTest(TestRunner.kt:46)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
... 2 more
TIMEOUT: Test 'foundation.url.protocol.TestTcpServerClassifiesReaderStartFailureMessagesKt.testTcpServerClassifiesReaderStartFailureMessages' exceeded per-test timeout of 30000ms; child process killed
[JSTACK THREAD DUMPS BEGIN]
Picked up JAVA_TOOL_OPTIONS: -Dfoundation.url.test.isolated=true
2026-09-20 22:30:18
Full thread dump OpenJDK 64-Bit Server VM (21.0.12.1+1-LTS mixed mode, emulated-client, sharing):
Threads class SMR info:
_java_thread_list=0x0000ffff68001b00, length=10, elements={
0x0000ffffa002dcb0, 0x0000ffffa00dd550, 0x0000ffffa00deb50, 0x0000ffffa00e0420,
0x0000ffffa00e1a80, 0x0000ffffa00e3040, 0x0000ffffa00e4770, 0x0000ffffa00f1660,
0x0000ffffa00f4730, 0x0000ffff68000f70
}
"main" #1 [63686] prio=5 os_prio=0 cpu=123.22ms elapsed=30.80s tid=0x0000ffffa002dcb0 nid=63686 runnable [0x0000ffffa5c7d000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.Net.poll(java.base@21.0.12.1/Native Method)
at sun.nio.ch.NioSocketImpl.park(java.base@21.0.12.1/NioSocketImpl.java:191)
at sun.nio.ch.NioSocketImpl.timedRead(java.base@21.0.12.1/NioSocketImpl.java:280)
at sun.nio.ch.NioSocketImpl.implRead(java.base@21.0.12.1/NioSocketImpl.java:304)
at sun.nio.ch.NioSocketImpl.read(java.base@21.0.12.1/NioSocketImpl.java:346)
at sun.nio.ch.NioSocketImpl$1.read(java.base@21.0.12.1/NioSocketImpl.java:796)
at java.net.Socket$SocketInputStream.read(java.base@21.0.12.1/Socket.java:1099)
at java.net.Socket$SocketInputStream.read(java.base@21.0.12.1/Socket.java:1093)
at java.io.ObjectInputStream$PeekInputStream.peek(java.base@21.0.12.1/ObjectInputStream.java:2893)
at java.io.ObjectInputStream$BlockDataInputStream.peek(java.base@21.0.12.1/ObjectInputStream.java:3220)
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(java.base@21.0.12.1/ObjectInputStream.java:3230)
at java.io.ObjectInputStream.readObject0(java.base@21.0.12.1/ObjectInputStream.java:1713)
at java.io.ObjectInputStream.readObject(java.base@21.0.12.1/ObjectInputStream.java:540)
at java.io.ObjectInputStream.readObject(java.base@21.0.12.1/ObjectInputStream.java:498)
at community.kotlin.kompile.testrunner.bootstrap.BootstrapRunner.sendMessageAndGetResponse(BootstrapRunner.java:116)
at community.kotlin.kompile.testrunner.bootstrap.BootstrapRunner.sendMessageAndExpectAck(BootstrapRunner.java:134)
at community.kotlin.kompile.testrunner.bootstrap.BootstrapRunner.reportUncaughtException(BootstrapRunner.java:262)
at community.kotlin.kompile.testrunner.bootstrap.BootstrapRunner.main(BootstrapRunner.java:447)
"Reference Handler" #9 [63699] daemon prio=10 os_prio=0 cpu=0.27ms elapsed=30.79s tid=0x0000ffffa00dd550 nid=63699 waiting on condition [0x0000ffffa4527000]
java.lang.Thread.State: RUNNABLE
at java.lang.ref.Reference.waitForReferencePendingList(java.base@21.0.12.1/Native Method)
at java.lang.ref.Reference.processPendingReferences(java.base@21.0.12.1/Reference.java:246)
at java.lang.ref.Reference$ReferenceHandler.run(java.base@21.0.12.1/Reference.java:208)
"Finalizer" #10 [63700] daemon prio=8 os_prio=0 cpu=0.15ms elapsed=30.79s tid=0x0000ffffa00deb50 nid=63700 in Object.wait() [0x0000ffffa4319000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait0(java.base@21.0.12.1/Native Method)
- waiting on <0x00000000f8340f88> (a java.lang.ref.NativeReferenceQueue$Lock)
at java.lang.Object.wait(java.base@21.0.12.1/Object.java:366)
at java.lang.Object.wait(java.base@21.0.12.1/Object.java:339)
at java.lang.ref.NativeReferenceQueue.await(java.base@21.0.12.1/NativeReferenceQueue.java:48)
at java.lang.ref.ReferenceQueue.remove0(java.base@21.0.12.1/ReferenceQueue.java:158)
at java.lang.ref.NativeReferenceQueue.remove(java.base@21.0.12.1/NativeReferenceQueue.java:89)
- locked <0x00000000f8340f88> (a java.lang.ref.NativeReferenceQueue$Lock)
at java.lang.ref.Finalizer$FinalizerThread.run(java.base@21.0.12.1/Finalizer.java:173)
"Signal Dispatcher" #11 [63701] daemon prio=9 os_prio=0 cpu=0.24ms elapsed=30.79s tid=0x0000ffffa00e0420 nid=63701 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Service Thread" #12 [63702] daemon prio=9 os_prio=0 cpu=0.21ms elapsed=30.79s tid=0x0000ffffa00e1a80 nid=63702 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Monitor Deflation Thread" #13 [63703] daemon prio=9 os_prio=0 cpu=2.03ms elapsed=30.79s tid=0x0000ffffa00e3040 nid=63703 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C1 CompilerThread0" #14 [63704] daemon prio=9 os_prio=0 cpu=25.60ms elapsed=30.79s tid=0x0000ffffa00e4770 nid=63704 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
No compile task
"Notification Thread" #26 [63705] daemon prio=9 os_prio=0 cpu=0.06ms elapsed=30.79s tid=0x0000ffffa00f1660 nid=63705 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Common-Cleaner" #27 [63706] daemon prio=8 os_prio=0 cpu=0.22ms elapsed=30.79s tid=0x0000ffffa00f4730 nid=63706 waiting on condition [0x0000ffff85be1000]
java.lang.Thread.State: TIMED_WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@21.0.12.1/Native Method)
- parking to wait for <0x00000000f839d180> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.12.1/LockSupport.java:269)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.12.1/AbstractQueuedSynchronizer.java:1886)
at java.lang.ref.ReferenceQueue.await(java.base@21.0.12.1/ReferenceQueue.java:71)
at java.lang.ref.ReferenceQueue.remove0(java.base@21.0.12.1/ReferenceQueue.java:143)
at java.lang.ref.ReferenceQueue.remove(java.base@21.0.12.1/ReferenceQueue.java:218)
at jdk.internal.ref.CleanerImpl.run(java.base@21.0.12.1/CleanerImpl.java:140)
at java.lang.Thread.runWith(java.base@21.0.12.1/Thread.java:1596)
at java.lang.Thread.run(java.base@21.0.12.1/Thread.java:1583)
at jdk.internal.misc.InnocuousThread.run(java.base@21.0.12.1/InnocuousThread.java:186)
"Attach Listener" #46 [64217] daemon prio=9 os_prio=0 cpu=0.25ms elapsed=0.10s tid=0x0000ffff68000f70 nid=64217 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"VM Thread" os_prio=0 cpu=1.71ms elapsed=30.79s tid=0x0000ffffa00d2d40 nid=63698 runnable
"VM Periodic Task Thread" os_prio=0 cpu=12.82ms elapsed=30.79s tid=0x0000ffffa00c1720 nid=63697 waiting on condition
"G1 Service" os_prio=0 cpu=0.65ms elapsed=30.80s tid=0x0000ffffa00aad50 nid=63691 runnable
"G1 Refine#0" os_prio=0 cpu=14.64ms elapsed=30.80s tid=0x0000ffffa00a9d80 nid=63690 runnable
"G1 Conc#0" os_prio=0 cpu=0.05ms elapsed=30.80s tid=0x0000ffffa0050280 nid=63689 runnable
"G1 Main Marker" os_prio=0 cpu=0.06ms elapsed=30.80s tid=0x0000ffffa004f2d0 nid=63688 runnable
"GC Thread#0" os_prio=0 cpu=3.60ms elapsed=30.80s tid=0x0000ffffa004ce60 nid=63687 runnable
JNI global refs: 25, weak refs: 0
[JSTACK THREAD DUMPS END]
--- End console output (foundation.url.protocol.testTcpServerClassifiesReaderStartFailureMessages) ---
TESTS FAILED (0/1 tests completed successfully, 1 failed)
Exact final selector results
| Selector |
Pass / run |
Groups |
stressTestPeerExchangeHostStopReportsStuckApply |
1/1 |
new_or_adapted, 574_matrix |
testBindClosePreservesInterruptionAndReusesPort |
1/1 |
585_regression |
testBindRepeatedCloseAndRebindAfterRpc |
1/1 |
585_regression, neighbor |
testBindingCloseWaitsForAcceptExitBeforeSamePortRebind |
1/1 |
585_regression |
testConcurrentStartStopJoinsPublishedAcceptThread |
1/1 |
new_or_adapted, 585_regression, neighbor |
testConcurrentStartStopWaitsForLifecycleMonitorAcrossRepeatedCalls |
1/1 |
new_or_adapted, 585_regression |
testForwardedDisconnectDuringPreparationReleasesResources |
1/1 |
neighbor |
testForwardedPreparationErrorPartialWriteClosesCaller |
1/1 |
neighbor |
testInterruptedBindingCloseWaitsForAcceptExitAndRestoresInterrupt |
1/1 |
585_regression |
testListenerCreatedAfterReentrantStopIsRetainedForCloseRetry |
1/1 |
585_regression |
testR81AcceptedSocketOwnedBeforeHandlerConstruction |
1/1 |
585_regression |
testR81ConcurrentInterruptedStopsJoinAfterStart |
1/1 |
585_regression |
testR81DisconnectCloseReentryDoesNotRepeatCleanup |
1/1 |
585_regression |
testR81FactoryReentryAndCloseNotifications |
1/1 |
new_or_adapted, 585_regression |
testR81FatalReaderFailureKeepsOriginalCause |
1/1 |
585_regression |
testR81LateAcceptFatalCloseFailureRemainsOwned |
1/1 |
585_regression |
testR81ListenerCloseReentryOwnsSingleClose |
1/1 |
585_regression |
testR81ListenerFailuresRemainRetryableAcrossKinds |
1/1 |
585_regression |
testR81ObserverFailureReleasesEveryQueuedResponse |
1/1 |
585_regression |
testR81OutboxCallbacksCanStopServer |
1/1 |
new_or_adapted, 585_regression |
testR94ConcurrentCloseReentryDoesNotInvertLocks |
1/1 |
new_or_adapted, 585_regression |
testR94DistinctEqualSocketsRemainOwned |
1/1 |
585_regression |
testR94FatalRelayListenerReleasesCandidate |
1/1 |
585_regression |
testR95TcpServerInterruptedWriterPreservesFlagThroughCleanup |
1/1 |
585_regression |
testRelayCloseClearsCommittedCandidateBeforeInterruptingListener |
1/1 |
585_regression |
testRelayListenerFailureKeepsCloseFailureAsCleanupDetail |
1/1 |
585_regression |
testRelayListenerFailurePreservesRefreshCause |
1/1 |
585_regression |
testRelayListenerFatalFailureClosesRegistration |
1/1 |
585_regression |
testRelayServiceCloseObserverFailureCompletesPendingRefresh |
1/1 |
585_regression, neighbor |
testRpcReadPauseDoesNotCountAsPeerIdle |
1/1 |
neighbor |
testServerHostDrainKeepsAdmittedRpcOnLateRequest |
5/5 |
round2 |
testServerHostDrainRetainsResponseAfterWriteFailure |
5/5 |
new_or_adapted |
testServerHostDrainSettlesFailedReadPauseAdmission |
1/1 |
new_or_adapted |
testServerHostDrainSettlesForwardedResponse |
1/1 |
new_or_adapted |
testServerHostDrainWaitsForForwardedPreparationError |
5/5 |
new_or_adapted |
testServerHostDrainWaitsForQueuedRpcResponse |
5/5 |
new_or_adapted, 574_matrix |
testServerHostDrainWaitsForTerminalCloseWrite |
5/5 |
round2 |
testServerHostForceCloseClosesTransportWithoutGracefulStop |
1/1 |
new_or_adapted |
testServerHostStopReleasesCanceledQueuedResponseAdmission |
5/5 |
new_or_adapted, 574_matrix |
testStopReenteredFromListenerCloseDoesNotJoinUnderOuterLock |
1/1 |
585_regression |
testStopRejectsLaterStartAndDoesNotJoinRevivedAcceptLoop |
1/1 |
585_regression |
testTcpServerAcceptedCloseFailureStillClosesOtherConnections |
1/1 |
585_regression |
testTcpServerAcceptedCloseReentryDoesNotRepeatCleanup |
1/1 |
585_regression |
testTcpServerCancelsQueuedRequestHandlersWhenClientDisconnects |
1/1 |
neighbor |
testTcpServerClassifiesReaderStartFailureMessages |
0/1 |
574_matrix, 585_regression |
testTcpServerCloseFromReaderFactoryReusesPort |
1/1 |
585_regression |
testTcpServerCloseNowJoinsAcceptThread |
1/1 |
new_or_adapted, 574_matrix |
testTcpServerConcurrentDrainCoversMultipleHandlers |
1/1 |
new_or_adapted, 574_matrix |
testTcpServerConcurrentReaderAndStopCleanupHaveIndependentOwnership |
1/1 |
new_or_adapted, 585_regression |
testTcpServerConcurrentSocketCloseCallbacksStop |
1/1 |
585_regression |
testTcpServerDoesNotStartQueuedHandlerAfterStopBegins |
1/1 |
neighbor |
testTcpServerDrainAllowsCallbackStop |
1/1 |
new_or_adapted |
testTcpServerDrainTracksDetachedWriter |
1/1 |
new_or_adapted |
testTcpServerFatalAcceptRejectsLaterRequests |
5/5 |
round2 |
testTcpServerFatalAcceptWhileDraining |
1/1 |
new_or_adapted |
testTcpServerFatalStartReportingPreservesOriginalAndCleanupFailures |
1/1 |
585_regression |
testTcpServerForceDuringListenerRetry |
1/1 |
new_or_adapted |
testTcpServerForceRacesOrdinaryStop |
1/1 |
new_or_adapted |
testTcpServerForceReleasesDetachedWriterDrain |
1/1 |
new_or_adapted |
testTcpServerHandlerConstructionCloseReentryRetainsOwnership |
1/1 |
585_regression |
testTcpServerHandlerStopJoinsPinnedAcceptAndCancelsOtherHandlers |
1/1 |
585_regression |
testTcpServerInterruptedDrainCanBeRetried |
1/1 |
new_or_adapted, 574_matrix |
testTcpServerInterruptedDrainRetriesGracefully |
1/1 |
new_or_adapted |
testTcpServerInterruptedDrainWhileJoiningAccept |
1/1 |
new_or_adapted |
testTcpServerInterruptedWriterClosesConnection |
1/1 |
585_regression |
testTcpServerLateAcceptFatalCloseReentryRetainsOwnership |
1/1 |
585_regression |
testTcpServerLateCloseFailureAfterConcurrentSuccessDoesNotReturnOwnership |
1/1 |
585_regression |
testTcpServerLateConstructionFailureReachesStop |
1/1 |
585_regression |
testTcpServerListenerCloseFailureFinishesShutdownAndRetryJoinsAccept |
1/1 |
585_regression |
testTcpServerListenerFatalCloseReentryRetainsOwnership |
1/1 |
585_regression |
testTcpServerObserverFailureReleasesAllQueuedResponses |
1/1 |
new_or_adapted, 574_matrix |
testTcpServerObserverFailuresReleaseEveryQueuedResponse |
1/1 |
585_regression |
testTcpServerPostFactoryFatalCloseReentryRetainsOwnership |
1/1 |
585_regression |
testTcpServerPropagatesFatalReaderStartFailure |
1/1 |
574_matrix, 585_regression |
testTcpServerReaderCloseReentryAcceptOrdering |
1/1 |
585_regression |
testTcpServerReaderCloseReentryDoesNotRepeatCleanup |
1/1 |
585_regression |
testTcpServerReaderFactoryReturnAfterFailedStopDoesNotRepeatClose |
1/1 |
585_regression |
testTcpServerReaderFinallyFatalCloseReentryRetainsOwnership |
1/1 |
585_regression |
testTcpServerReaderInputFailurePreservesFatalCauseWhenCloseFails |
1/1 |
585_regression |
testTcpServerReaderStartFailureFatalCloseReentryRetainsOwnership |
1/1 |
585_regression |
testTcpServerReaderStartFailureStopsServer |
1/1 |
new_or_adapted, 574_matrix |
testTcpServerRecoversWhenReaderStartEffectIsUnhandled |
1/1 |
585_regression |
testTcpServerRefusalReportingPreservesOriginalAndCleanupFailures |
1/1 |
585_regression |
testTcpServerRejectsConnectionAcceptedDuringShutdown |
1/1 |
585_regression |
testTcpServerRejectsStartAfterListenerCloseFailure |
1/1 |
585_regression |
testTcpServerRejectsStartAfterStop |
1/1 |
585_regression |
testTcpServerRejectsStartFromSocketFactoryAfterStop |
1/1 |
585_regression |
testTcpServerReleaseObserverConcurrentStop |
1/1 |
585_regression |
testTcpServerReleaseObserverDoesNotWaitForSocketCleanup |
1/1 |
585_regression |
testTcpServerRetainsAcceptedSocketAfterHandlerConstructionAndCloseFail |
1/1 |
585_regression |
testTcpServerRetainsDisconnectSocketAfterReentrantFatalClose |
1/1 |
585_regression |
testTcpServerRetainsLateAcceptedSocketWhenCloseFails |
1/1 |
585_regression |
testTcpServerRetainsPushWatchdogSocketAfterReentrantFatalClose |
1/1 |
585_regression |
testTcpServerRetainsSocketWhenReaderCleanupAlsoFails |
1/1 |
585_regression |
testTcpServerRetainsUndeliverableResponseSocketAfterReentrantFatalClose |
1/1 |
585_regression |
testTcpServerRetainsWriterFailureSocketAfterReentrantFatalClose |
1/1 |
585_regression |
testTcpServerRetriesAcceptedSocketCloseFailure |
1/1 |
585_regression |
testTcpServerRetriesCloseAfterReaderFactoryFailure |
1/1 |
585_regression |
testTcpServerRetriesStartAfterSocketCreationFailure |
1/1 |
585_regression |
testTcpServerRetriesUncheckedAcceptedSocketCloseFailure |
1/1 |
585_regression |
testTcpServerStopAggregatesEveryPhysicalCleanupFailure |
1/1 |
585_regression |
testTcpServerStopAndJoinsOwnedAcceptThread |
1/1 |
new_or_adapted, 574_matrix |
testTcpServerStopBeforeStartIsTerminal |
1/1 |
585_regression |
testTcpServerStopCancelsMixedQueuedAndRunningRequestHandlers |
1/1 |
neighbor |
testTcpServerStopCleansConnectionsAfterUncheckedListenerCloseFailure |
1/1 |
585_regression |
testTcpServerStopDoesNotWaitForResponseInput |
1/1 |
585_regression |
testTcpServerStopFromRequestHandlerPreservesInterruptionAndReusesPort |
1/1 |
585_regression |
testTcpServerStopOwnedFatalCloseReentryRetainsOwnership |
1/1 |
585_regression |
testTcpServerStopReportsListenerCloseFailure |
1/1 |
585_regression |
testTcpServerStopReportsPostStartCleanupFailure |
1/1 |
585_regression |
testTcpServerStopUnderHandlerSaturationTerminatesAccept |
1/1 |
585_regression |
testTcpServerWriterErrorClosesConnection |
1/1 |
new_or_adapted, 574_matrix |
testTcpServerWriterObserverFailureOwnsSocketCleanup |
1/1 |
585_regression |
testTcpServiceBindingCloseNowAbortsStuckDrain |
1/1 |
new_or_adapted, 574_matrix |
testTcpServiceBindingStopAndDrainWaitsForHandlers |
1/1 |
new_or_adapted, 574_matrix |
testTcpServiceBindingStopAndDrainWaitsForWriterSettlement |
1/1 |
new_or_adapted, 574_matrix |
testTcpServiceBindingStopAndJoinIgnoresUnrelatedThread |
1/1 |
new_or_adapted, 574_matrix |
Operational notes
All tests ran locally one invocation at a time. No remote suite was submitted. The checkout already had ignored jars/coursier -> /usr/local/bin/coursier; no launcher edit was needed. No jars, caches, test outputs or logs were committed. The single source branch contains all implemented work; this service body preserves the proposed patch and full failure evidence instead of adding test artifacts to the repository or pushing an extra branch. Harness records are SCRATCH/out/l96-fix574r2-findings.md, l96-matrix-plan.json, l96-matrix-results.json, l96-matrix-progress.log, l96-proposed-classification-admission.patch and the updated l75-recon574-pr-draft.md. SCRATCH was /tmp/claude-501/-code/ca89812b-bfcc-4ad0-91ea-9366a832809d/scratchpad.