← Priority list
Blocked

Inspect pending CI for the shared RPC frame writer fix

Inspect existing exact-head bld-build for ffbcb877426dcb992fb3b3861af778952db88bec, address any real failure and finish validation. Latest check still running at 18:21 UTC time-box stop. Full baseline proves seven failures 3/3; corrected producer/fixtures have 87 focused passes. All code/evidence pushed, local workers/checkouts/cache removed. No merge or queue action authorized.

Final exact-head bld-build is still running at the lane time box; inspect job 119380297656 and its full attempt artifact when complete.

Handoff document

Markdown

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)

  1. 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.
  2. testPersistentRpcReplyWaitUsesInjectedClock, testPersistentRpcReplyWaitGateCanAcknowledgePreviousFrame, testPersistentRpcReplyWaitDrainsLateReplyBeforeSibling: caller's public clock wait supplies the latch; remove cross-thread flush marker and redundant output wrapper. 63 original assertions unchanged.
  3. 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

  1. 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.
  2. 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.
  3. 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.
  4. 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.

Model usage

Recorded agent work, including concurrent agents

No model usage has been recorded for this handoff yet.

Record work with handoff-cli usage report hf-2026-10-21-verify-the-shared-rpc-frame-writer-and-finish-the-urlresolver-cleanup-fix.

No status reports yet.

Add dependency

Complete this handoff

Moves it out of every priority list and into ArchiveArea.