Handoff: Inspect final CI and finish the shared RPC frame writer fix
Written / re-verified: 2026-10-21 18:22 UTC.
RE-VERIFY: This is a snapshot. Recheck https://github.com/CodexCoder21Organization/UrlResolver/pull/1371 with gh pr view <url> --json state,headRefOid,statusCheckRollup,mergedAt, and all branch heads with git ls-remote. Current full required CI is pending. No merge, queue, deploy or artifact publication is authorized.
Time-box checkpoint
Latest live read at 2026-10-21 18:21 UTC confirms the source PR OPEN at ffbcb877426dcb992fb3b3861af778952db88bec, required bld-build IN_PROGRESS, no attempt artifact yet. This lane stopped at its approximately 2.5-hour time box without claiming full verification. All four remote branches are verified pushed; no stash, uncommitted file or unpushed local commit remained. Source watcher stopped with tracked exit 130; ps/proc sweep clean. Both own checkouts, generated probes/jars and own aibuildcache entry were removed. GitHub's latest job remains active. The claim is released on stopping; next owner should inspect that existing run before starting anything else.
Design decisions in force
The 2026-10-21 lane brief requires: “No frame write on a shared connection is ever cut short by a thread interrupt, regardless of which thread writes it or why it was interrupted.” Alternative (b) was chosen: a transport-owned writer that cleanup never interrupts. “Keep: close finishes within existing bounded waits even if a write is stalled (no new or raised timeouts) and reports what it could not release; source-read waits that write nothing are still woken; re-entrant close releases exactly once; an echo of an in-flight upload completes or fails clearly.” No merge/enqueue or subagents. Time box approximately 2.5h from 15:53 UTC (18:23 UTC).
Mission and mechanism
The user asked for extreme-condition end-to-end tests that expose bugs first, then fixes. This lane continues https://github.com/CodexCoder21Organization/UrlResolver/pull/1371 after review found that forwarding a RemoteInputStream as an upload sends __stream_pull from a source-read phase that cleanup interrupts. The partial frame closes the shared connection and breaks later calls. Protecting named phases was incomplete; output ownership is the structural boundary.
Each RequestTransport now owns a lazy single-thread executor. The no-byte controller probe and complete encoded write+flush run there. Existing writeLock permits one outstanding I/O operation; caller waits without cancelling the task or forwarding its interrupt, then retains its interrupt flag. Original I/O errors are unwrapped. closeTransport uses shutdown, never shutdownNow, and closes the controller. New generation owns a new writer. No timeout or join added. Metadata, serialization, effects and response waits stay on caller. Existing stream cleanup bounds/releases/reentry and source wakeups remain.
Verified chain and current state
- Started at requested 21a3ae5b13a2a5a4190d6e4349cc280b889d4b82, fresh checkout, initially rebased on main 48e9a695a8. No repository AGENTS.md. Read README, required Testing/PHILOSOPHY/CI guidance, common.md and S49/S42/S39 evidence. Explicit brief overrides local-first testing and old remote-App gate rules.
- Seven added public-API cases: remote-source forwarding, ordinary/release/observable/resume frames, flush, and actual pre-interrupted Channels/Pipe I/O. All test bodies are unchanged between baseline and fix.
- Complete fail-first artifact https://github.com/CodexCoder21Organization/UrlResolver/actions/runs/39631468999/artifacts/12365712070: 2306 cases, 2299 passes, exactly seven failures; all seven fail 3/3 attempts at intended interruption assertions, no other failed attempts. Evidence draft https://github.com/CodexCoder21Organization/UrlResolver/pull/1381 is CLOSED, not merged.
- Exact initial producer head 9ade3ecef2c7f190346834a70c71a6f725a54c3f built with scripts/build.bash --local-and-remote foundation.url.resolver.buildMaven in 411723ms. Seven new cases pass 7/7 each; revised output-pull and nine earlier lifecycle cases pass: 59 focused checks.
- Initial fixed full artifact https://github.com/CodexCoder21Organization/UrlResolver/actions/runs/39632311659/artifacts/12365329716: 2302/2306 final passes. All seven new and earlier cleanup cases first-attempt clean. Four existing fixtures fail 3/3: three clock tests transfer a ThreadLocal from flush to caller; refusal test identifies A/B by output thread name. The initial fixture audit missed these assumptions; this run is NOT green.
- Corrected those four fixtures to observe actual public Clock.awaitFuture on the caller and encoded method identity at output. Original 90 assertions, every wait/timeout annotation and the eight-caller workload unchanged. Added a channel-state assertion exposing premature closed-flag setting in unused ReplacementPeer.close; it fails before the one-line cleanup fix, then passes.
- Final four fixtures pass 7/7 each against exact rebuilt producer: 28 more checks, total 87 focused passes. Production frame helper and complete PersistentRpcConnection declaration are byte-identical between 9ade and final source (hash proof archived). Latest exact-head full CI is still required; do not present these focused runs as final full-suite validation.
- Main advanced to c5bc50c6ca5763271e4294c1ea3f34073e4fb333 via https://github.com/CodexCoder21Organization/UrlResolver/pull/1351. Rebased all 14 commits without conflicts; range-diff shows each patch equal. Later edits are test-fixture corrections only. Final source ffbcb877426dcb992fb3b3861af778952db88bec pushed after another fetch/rebase, OPEN check and explicit lease. Superseded b6 and 6b runners cancelled only after their replacement head was pushed, not retried unchanged.
Every shared request-frame path
All paths reach doSendRequest and the same private transport writer: ordinary/projection calls and permitted replay; upload push/eof and active echo; RemoteInputStream pull including forwarded upload sources; output-parameter pulls; upload release and returned-input close; observable calculate/poll/push/close; effect-handler __resume_handler; no-byte probe and flush. The frame writer does not depend on which caller or stream phase reaches it. Server-side responses and one-shot discovery have separate controller owners and are not alternate writes on this RequestTransport.
Existing tests edited (five files)
- testStreamCloseKeepsPartialOutputPullFrameUsable: record actual manager pull caller at send callback instead of recording the now-separate I/O worker. All assertions and waits unchanged. Revised test still fails against exact original output-interrupting manager 6235af9bfc0b04a88d12237ea144dd73e30496cc and passes corrected implementation.
- testPersistentRpcReplyWaitUsesInjectedClock, testPersistentRpcReplyWaitGateCanAcknowledgePreviousFrame, testPersistentRpcReplyWaitDrainsLateReplyBeforeSibling: caller's public clock wait supplies the latch; remove cross-thread flush marker and redundant output wrapper. 63 original assertions unchanged.
- testConcurrentRefusedWritesAreEachReplayedWhileASiblingDrains: actual encoded method supplies A/B identity. Caller-side entry/reconnect ownership checks remain thread-specific. 27 original assertions unchanged; add one stronger pipe cleanup assertion and release unused peer's client pipe ends.
Relevant PRs / refs
| Repo |
Branch |
Remote head |
PR |
Contents and state |
| UrlResolver |
https://github.com/CodexCoder21Organization/UrlResolver/tree/fix/s19-upload-frame-cancellation |
ffbcb877426dcb992fb3b3861af778952db88bec |
https://github.com/CodexCoder21Organization/UrlResolver/pull/1371 |
Current complete fix + five fixture updates; OPEN/unmerged; latest full required CI pending |
| UrlResolver |
https://github.com/CodexCoder21Organization/UrlResolver/tree/wip/s51-failfirst |
7657e6b63b5d82a83480c4d3662996fa6994e9bc |
https://github.com/CodexCoder21Organization/UrlResolver/pull/1381 |
Tests without producer fix; CLOSED draft; full expected failures verified |
| UrlResolver |
https://github.com/CodexCoder21Organization/UrlResolver/tree/wip/s51-before-main-rebase |
9ade3ecef2c7f190346834a70c71a6f725a54c3f |
Original head of same fix PR |
Exact built artifact source; full run has four now-corrected fixture failures |
| UrlResolver |
https://github.com/CodexCoder21Organization/UrlResolver/tree/wip/s51-review-evidence-20261021 |
91769317286c13299768f85dbca5264e00595a32 |
No PR |
Complete logs/stacks/attempt summaries, source-equivalence and cleanup counterexample under investigations/s51-shared-frame-evidence |
Latest required job: https://github.com/CodexCoder21Organization/UrlResolver/actions/runs/39645624218/job/119380297656 . Only bld-build gates this repo. Both kotlin.build App checks are informational. No deployment, publication, merge or queue action occurred; command history consists of source/metadata pushes, read-only queries and build/test verification. Build outputs are local, omitted from the archive and will be deleted.
Remaining steps
- Re-verify current source and required job; inspect its complete test-attempt artifact once available using archived inspect-attempts.py. Require all changed/new cases first-attempt clean; inspect every failed attempt and final suite total. Current head has no full-green claim.
- Investigate any new required failure; show it on main before calling it unrelated. Do not rerun unchanged jobs, raise waits, reduce iterations or waive a check. Producer implementation and corrected fixtures already have focused proof.
- When exact-head bld-build is green and evidence is inspected, update PR description and evidence with full counts/links. Complete this handoff for the assigned verify-and-push scope; leave source PR unmerged. If the time box ends first, record precise pending state and release this claim.
- Stop own tracked watcher, sweep own processes, push final findings, remove source/evidence worktrees and own matching ~/.aibuildcaches entry before final response. Final needs head SHA, mechanism, writer-path table, before/after links and exact latest-check state.
Operational notes
- Source watcher is STOPPED (tracked exit 130); do not reuse its old PID. Evidence watcher exited RED after expected failures. No local background worker or loop remains. GitHub job 119380297656 remains active independently; attach a fresh watcher if resuming.
- Local checkouts/probes/cache have been deleted. Clone fresh in the next lane workspace. All durable source, findings, complete stacks and test summaries are on the four branches above; no local file is needed to resume.
- gh pr edit fails on retired projectCards GraphQL field; use REST PATCH with a JSON file. Handoff status upload once timed out creating its sandbox; one retry succeeded, no service changes. report-challenge CLI auto-queues/merges, so its invocation is prohibited by this lane's explicit no-queue rule; exact friction recorded in findings.
- New test bodies use public API, real socket/pipe framing and real local service handlers. Corrected clock fixtures use real isolated libp2p hosts. No reflection, mocks, artificial CPU load, timeout increases or weakened assertions.