← Priority list
Blocked

Finish UrlProtocol 0.0.1431 consumer verification and CI failure attribution

Watch the corrected UrlResolver head e64d90fc75dbb8f04cc429aef20bada4209dc38b through full bld-build confirmation, then resolve the remaining unattributed failure histories. UrlProtocol 0.0.1431 is published and fetched-artifact verification is complete; the pin PR and clock migration have clean focused/negative proofs. The release metadata full suite is red, with one failure reproduced 3/3 on main. All source branches, raw XML, stacks and comparison results are pushed. No merge, enqueue or deployment is authorized.

Corrected-head full CI remains pending and four failure cases remain unattributed at the publication-lane time limit.

Handoff document

Markdown

Handoff: Finish UrlProtocol 0.0.1431 consumer verification and CI failure attribution

Written: 2026-10-22 07:08 UTC.

RE-VERIFY: This is a snapshot. Check both linked PRs with gh pr view <url> --json state,headRefOid,statusCheckRollup,mergedAt, check all named Actions runs, and verify branch heads with git ls-remote before acting.

Design decisions in force

The 2026-10-22 publication brief explicitly grants publishing the UrlProtocol Maven artifact by name, says “No deploys”, and says “Do not merge or enqueue.” Those limits remain in force. It asks for focused verification on GitHub runners and full required-check confirmation, with failures attributed against main. Never increase timeouts, reduce iterations, disable a test, weaken an assertion, or guess at a production fix without a reliable reproducer. The original brief says “Time box 2 h.” Publication of 0.0.1431 is complete and must not be repeated or overwritten; a later necessary source fix would require its own new release after the required review.

Mission summary

The brief requested publication of UrlProtocol main at/after e0e97dfb3b4b080077420382b5b7e02b47fe11ac, then a fresh-main UrlResolver pin-bump PR. The release must contain the merged long-poll and relay fixes from https://github.com/CodexCoder21Organization/UrlProtocol/pull/772, https://github.com/CodexCoder21Organization/UrlProtocol/pull/808 and https://github.com/CodexCoder21Organization/UrlProtocol/pull/699. This supplies the dependency needed by https://github.com/CodexCoder21Organization/UrlResolver/pull/1163 and supersedes the 0.0.1430 pin on https://github.com/CodexCoder21Organization/UrlResolver/pull/1364. The four allowance tests on the former PR were not claimed as verified here; they live on its separate branch.

Publication and pin updates are complete. Remaining work is full confirmation of the corrected resolver head and proper attribution/repair of outstanding test failures. The older broad context handoff (https://www.handoff.wasmserver.com/handoffs/hf-2026-10-14-land-the-urlresolver-extreme-condition-bug-fixes-fix-the-two-merge-queue-flakes-then-merge-the-reviewed-prs-and-finish-the-rest) was already archived when read; this record covers the new release verification rather than reopening that completed snapshot.

What was found and done

  1. UrlProtocol main was e0e97dfb3b4b080077420382b5b7e02b47fe11ac, declaring 0.0.1429. The live Maven endpoint reported latest 0.0.1430, so 0.0.1431 was selected. Local scripts/build.bash --local foundation.url.protocol.buildMaven /tmp/s81-protocol-maven succeeded. Publisher CLI 0.0.6 with --artifact-dir and the HTTP API exited 0. Coursier fetched POM and JAR from kotlin.directory; both match the build output. The downloaded JAR contains foundation/url/protocol/LongPollRpcRequestHandler.class.
  2. Published JAR SHA-256 is 4259816acfa12671d50ddebd7c8d04158624b1f8099f676e92303c3f1c030ff8; POM SHA-256 is a79d63bae9f36a135b9b073c8fd572fa0fe23a03ee34d7dcc4cfb7aaa1497585. The live POM returned HTTP 200 and JAR checksum matched again at 06:52 UTC.
  3. UrlResolver main was 762720922485c932894be30fe507e497fdc925b0. All active protocol pins were updated: build.kts, README and 2,257 test declarations. One declaration had doNotUpgrade=true at 0.0.524; its flag is retained while its explicit coordinate moves to 0.0.1431. It is a real interleaved-host test, not a prior-version-only contract, and passed full verification. An initial claim that no such flag existed was corrected in findings and PR text. Historical version comments remain historical.
  4. Initial focused proof https://github.com/CodexCoder21Organization/UrlResolver/actions/runs/39727076333 passed 13/13 tests with no failed-attempt histories. Full run https://github.com/CodexCoder21Organization/UrlResolver/actions/runs/39727154742 passed 17/17 build rules and 2,390/2,391 final tests. Its consistent failure was testRelayBackedLongMaxRequestUsesFallbackAfterClockAdvances (3/3), because the fixture leaves ManualClock at 1 ms but the newly adopted relay wait correctly uses that clock. The old test waited for wall time instead. Unchanged-main comparison https://github.com/CodexCoder21Organization/UrlResolver/actions/runs/39733699249 passed that scenario.
  5. The corrected fixture observes the exact 251 ms deadline through public Clock.schedule, retains the initial clock=1 assertion before advancing the unchanged 250 ms fallback, verifies no completion before expiry, then advances the clock. It retains full error text, one dispatch/no replay, caller clock-read count and all original wall-clock guards. Proof https://github.com/CodexCoder21Organization/UrlResolver/actions/runs/39734387175 passed four scenarios plus eight extra clock repetitions, all with zero failed-attempt histories. Control https://github.com/CodexCoder21Organization/UrlResolver/actions/runs/39734391490 restores only the original faulty remaining-time classification of isUnbounded; the strengthened fallback-deadline assertion fails 3/3. Dedicated test and code review passes found no gaps. The verified correction is now on the PR at e64d90fc75dbb8f04cc429aef20bada4209dc38b, rebased on unchanged main. Full confirmation is https://github.com/CodexCoder21Organization/UrlResolver/actions/runs/39735743728, still pending at 07:07 UTC; build passed and tests started.
  6. Two resolver tests passed only after one failed attempt in the initial full run: testPreInterruptedTimedPeerControllerKeepsSharedConnection (handshake deadline) and testPersistentRelayReplyLossLogsSelectedRecord (response timeout instead of controlled shutdown). Neither reproduced in an exact-main full run or 20 fixed comparison trials (40 clean test records) at https://github.com/CodexCoder21Organization/UrlResolver/actions/runs/39734512291. These remain UNATTRIBUTED. Clean comparisons do not prove the failures unrelated.
  7. Release metadata full test run https://github.com/CodexCoder21Organization/UrlProtocol/actions/runs/39726872717 passed 3,124/3,126 final tests, with two final failures, each 3/3: testWriteStuckConnectionRecoveredJustBeforeGraceIsNotRetired (partial response stream closes) and testForwardedReplyStreamsBeyondReceiverHeap (identity-publication/executor cleanup failure). Hidden histories also occurred in testF671hAbandonedRequestStreamsReleaseTheirReplies and testRelayedLargeAnswersWaitForOutboxSpace. Exact-main full run https://github.com/CodexCoder21Organization/UrlProtocol/actions/runs/39726416306 has failed attempts in the latter large-answer test. Exact-main focused comparison https://github.com/CodexCoder21Organization/UrlProtocol/actions/runs/39735228282 reproduces the WriteStuck failure 3/3 with matching partial-frame errors; this is PROVEN ON MAIN. It passes ForwardedReply and F671h once each, so those remain UNATTRIBUTED. Three fixed further main comparisons at https://github.com/CodexCoder21Organization/UrlProtocol/actions/runs/39736202134 produced six clean final passing records with no attempt histories. They did not reproduce those two release histories; both remain UNATTRIBUTED. Their three XML files are preserved in the evidence branch.

At 07:03 UTC protocol main advanced to 50a481caa2b27d3883c3c9f6808d81ac3acb04b9 through https://github.com/CodexCoder21Organization/UrlProtocol/pull/818. Only the unrelated ClosingLongPollRefusals test changed from the publication base; production and build coordinate are unchanged. The artifact implementation still matches current main. Rebase the metadata branch before any future build/update rather than assuming its original base is latest. Resolver main remains 762720922485c932894be30fe507e497fdc925b0.

Relevant PRs / refs

  • https://github.com/CodexCoder21Organization/UrlResolver/pull/1424 — OPEN at e64d90fc75dbb8f04cc429aef20bada4209dc38b; corrected-head bld-build pending, build step passed.
  • https://github.com/CodexCoder21Organization/UrlProtocol/pull/825 — OPEN at 775268c6de71fb3116db019b202ae1e261c28271; bld-build passed, bld-all-tests red as detailed above.

<!-- begin refs -->

Repo Branch Remote head SHA PR What is on it State
UrlProtocol release/s81-urlprotocol-1431 775268c6de71fb3116db019b202ae1e261c28271 https://github.com/CodexCoder21Organization/UrlProtocol/pull/825 Coordinate metadata for published artifact Build pass; full tests red; main WriteStuck failure demonstrated
UrlProtocol wip/s81-protocol-main-control 000681638c7a8a5cace1b55472eb54ba1b205b39 no PR Three exact-main attribution cases WriteStuck fails 3/3; two other cases pass once
UrlProtocol wip/s81-protocol-main-repeat 13f6316885072475c19d4b5014d3fceab71d70b4 no PR Three fixed further main trials Six passing records, no attempt histories; attribution remains open
UrlResolver deps/s81-urlprotocol-1431 e64d90fc75dbb8f04cc429aef20bada4209dc38b https://github.com/CodexCoder21Organization/UrlResolver/pull/1424 All active pins and proven clock fixture migration Corrected full confirmation pending; focused proofs clean
UrlResolver wip/s81-artifacts 303d9832ce3d1375520f959d7ce1c1b82a830361 no PR All incremental findings, ledgers, raw XML and full stacks Evidence only; do not merge
UrlResolver wip/s81-focused-runner bda276cb2b71613333d57f2c3e006172c5dfb902 no PR Original dependency-adoption focused workflow 13/13 clean; source superseded only by clock correction
UrlResolver wip/s81-clock-fixture 2bfc061cda504560d7f31683fda900189013430f no PR Verified clock correction plus focused workflow 4 selected passes plus 8 extra clock passes; integrated source on PR
UrlResolver wip/s81-clock-negative 89919a9bfe774fede98a7cd691d4fe5c87903cf2 no PR Old budget classification restored only for proof Expected assertion fails 3/3; evidence only, never merge
UrlResolver wip/s81-main-control d999c07b46954ae6c3c0eb8e0923162fcc811cea no PR First three-scenario unchanged-main comparison 3/3 pass; source untouched
UrlResolver wip/s81-main-history 390bfcd0736c20c82ac1c856162c304e94ef540b no PR Twenty fixed unchanged-main comparison trials 40 clean passes; two original histories still unattributed

<!-- end refs -->

Published but not merged

foundation.url:protocol:0.0.1431 is live at https://kotlin.directory/foundation/url/protocol/0.0.1431/ . It was built from 775268c6de71fb3116db019b202ae1e261c28271: main implementation e0e97dfb3b4b080077420382b5b7e02b47fe11ac plus only the coordinate update. The implementation is on main; the release-coordinate change is unmerged in https://github.com/CodexCoder21Organization/UrlProtocol/pull/825. Reconcile the coordinate through normal review after CI failures are addressed; do not republish or overwrite 0.0.1431. Nothing was deployed, merged or enqueued. No resolver artifact was published.

Next steps

  1. Re-verify live PR heads/checks, Actions runs and branch refs. Do not restart work from a stale status paragraph.
  2. Own a plain build-watchman watch on the corrected resolver PR, using ~/bin/coursier launch buildwatchman:build-watchman:0.0.21 -r https://kotlin.directory -- --repo CodexCoder21Organization/UrlResolver --pr 1424 --idle-timeout-minutes 120. Never use --to-merged. On completion, download test-attempt-records and audit every failed attempt, not only final statuses.
  3. Read the preserved protocol three-trial main comparison records under protocol-main-repeat/. They are clean, so they do not establish unrelatedness. Continue a reliable public-API reproducer for the unresolved cases rather than using another blind full-suite rerun. The already demonstrated WriteStuck main defect must not be called fixed by this metadata release.
  4. Investigate remaining failures at their owning layer with reliable public-API reproducers. No guessed timeout, resource or assertion changes. The two intermittent resolver histories have not been shown on main despite clean comparisons; do not label them unrelated. The cleanup and F671h protocol histories likewise need observed evidence or a source-level explanation supported by a reproducer.
  5. Keep PR descriptions/finding records current, obtain required green checks or report proven main failures accurately. No merge, enqueue or deployment is authorized by this handoff.

Reusable / operational knowledge

  • Read https://github.com/CodexCoder21Organization/DocumentationRepository/blob/main/architecture/TESTING.md and https://github.com/CodexCoder21Organization/DocumentationRepository/blob/main/PHILOSOPHY.md before changing tests. Current CI procedure is https://my.externalbrain.wasmserver.com/doc/github-builders-racing-remote-ci.md . It supersedes the stale kotlin-ci-setup skill's remote-only guidance. Required gates: resolver=bld-build; protocol=bld-build and bld-all-tests. App remote checks are informational; do not rerequest them.
  • Use fresh clones under workspace/, read README/AGENTS, and use ~/bin/coursier. This box lacks rg; grep was used. The prescribed runner mode is scripts/test.bash --local-and-remote --test <selector>. The box itself is not a reliable full-suite executor.
  • The installed gh pr edit fails through obsolete projectCards GraphQL fields. Update bodies with REST PATCH pulls/<id> and JSON via --input instead. Do not expose tokens.
  • REST core quota is shared. It reached 0/5000 and reset at 06:42:13 UTC; wait for a reset rather than polling tightly. One gh run watch returned 0 while its last printed state was still active during that exhaustion; verify API state and uploaded records before believing the exit alone.
  • All raw proof XML, full failure XML/stack traces, the exhaustive before/after pin ledger and incremental findings live at https://github.com/CodexCoder21Organization/UrlResolver/tree/wip/s81-artifacts/handoff-evidence/s81 . No build outputs or dependency caches are intentionally retained there. The local JAR/output/cache can be deleted after publication verification; immutable Maven URLs and checksums preserve the release proof.
  • No local source, stash or unpushed branch was left at the 06:51 sweep. Refresh this fact and the branch table before handover. Remote Actions may continue; local watchers must be stopped before the final message.

Final local housekeeping: all owned monitor processes were stopped and both disposable checkouts/build caches were removed before the final message. The remote corrected-head Actions run continues; the next session must establish its own watcher. No source, stash or unpublished branch is left only on this machine.

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-22-finish-urlprotocol-0-0-1431-consumer-verification-and-ci-failure-attribution.

Latest status report

6 reports
Running s88 8 minutes ago

RUNNING — 2026-10-22 08:53:19 UTC. Request: migrate all remaining UrlResolver relay fixtures that must now drive UrlProtocol 0.0.1431's injected Clock, preserve every assertion/budget/workload, prove each migration against a product mutation and twenty clean runner trials, then push the open PR and audit exact-head bld-build. https://github.com/CodexCoder21Organization/UrlResolver/pull/1424 is freshly verified OPEN at 2c334bb18294d23926cbe15ae6db53a89b4289cb; it is not merged or queued. Required bld-build is IN_PROGRESS at https://github.com/CodexCoder21Organization/UrlResolver/actions/runs/39746154833.

The reply-loss fixture observes the relay's registered original 5000ms deadline before advancing its manual clock. It delivers the relay expiry before caller expiry at that same instant, keeping the forwarding diagnostic intact before caller cleanup interrupts the relay worker. The existing Long.MAX migration already observes its 251ms registration and drives the unchanged 250ms fallback; no product implementation or original assertion, workload or timeout is changed.

Completed verification remains unchanged: both scenarios completed 20/20 first-attempt passes on https://github.com/CodexCoder21Organization/UrlResolver/actions/runs/39744830721, exactly forty passing records with no attempt histories. Each product mutation failed 9/9 attempts with the intended schedule assertion. Detailed 65-candidate relay audit and 463-construction inventory are checkpointed at https://github.com/CodexCoder21Organization/UrlResolver/tree/wip/s88-audit; source checkpoint is https://github.com/CodexCoder21Organization/UrlResolver/tree/wip/s88-clock-migration and evidence workflow is https://github.com/CodexCoder21Organization/UrlResolver/tree/wip/s88-runner-evidence. The selected fixture files, production source and build coordinate are byte-identical between positive evidence and pushed rebased head.

Delegated work at a glance: none. Blockers requiring the user: none. REST access reset at 08:42:19 UTC and normal watcher reads resumed. The watcher reports elapsed duration within its ~66-minute successful-run median; compilation passed and the full test step is still active. A prior exact-head full run took 59m49s in its test step. Downloadable live logs are a partial prefix, so no first-attempt result is inferred from them. No unnecessary holds. No idle landing gates (no merge/enqueue authority). Owner direction captured: none new; all brief requirements remain recorded in findings. Plan change: only the full-suite result/first-attempt audit and final cleanup/report remain; no further verification batches after those pass.

Next: obtain full-suite XML when the runner finishes, attribute every failed first attempt, update the PR/findings, verify remote heads and remove owned watcher/checkout/cache state.

Lessons: audit attempt-history records rather than trusting an overall green result; recheck every injected-clock consumer when a dependency moves waits onto that clock; distinguish freshness metadata clocks from transport deadline clocks before changing fixtures.

Earlier reports

Running s85 10 minutes ago
Running s88 29 minutes ago
Running s85 30 minutes ago
Running s88 49 minutes ago
Show all 5 earlier reports

Add dependency

Complete this handoff

Moves it out of every priority list and into ArchiveArea.