Watch the UrlResolver projection PR to green CI
Written 2026-10-22 11:12 UTC. RE-VERIFY: this is a live-checked snapshot. Recheck the PR and its CI before acting. Source and evidence are remote; the complete local suite and final focused recheck are finished. This handoff remains open until required CI is green.
Binding design decisions (2026-10-22)
The owner decision remains: "Reading a value must never invoke a state-changing or expensive remote operation. Capture eagerly only genuine property getters: Kotlin properties (JVM getX()/isX() accessors that correspond to a declared Kotlin property, or bean-style getters on Java interfaces). Every other zero-argument method stays a live remote call made only when the caller invokes it."
"Protocol/wire behaviour must stay backwards compatible with peers on older resolvers."
"Evidence stays off the PR branch." Never enqueue, merge, publish Maven artifacts, deploy, or restart production. Required CI is the only remaining gate for this handoff; production rollout is separate.
Mission and current state
The owner reported that https://droplets.wasmserver.com/ "is super unreliable, frequently rendering various errors/notices due to bugs in UrlResolver or UrlProtocol or something else" and asked for the underlying root cause to be fixed; the ContainerNursery route stops the WUI after 5 idle minutes, so most human visits are cold starts.
PR: https://github.com/CodexCoder21Organization/UrlResolver/pull/1436 — OPEN and unmerged, freshly verified 2026-10-22 11:15 UTC. Complete local suite: 2400/2400 tests on attempt 1, zero attempt-history entries; 17/17 build rules passed. Final focused recheck: 9/9 on attempt 1, zero attempt-history entries, including both unchanged RPCH3 cases. Every verification used source d480f79522d6c1beae8ebe4e49ddc526d3763e64; final fetch/rebase left it unchanged. PR body includes the exact owner provenance, production symptom, 97-to-49 call measurement and consumer behavior changes.
At the lane checkpoint, the local build-watchman 0.0.21 task was stopped with exit 130 after two scheduled samples at 300 seconds. No process remains in the owned checkouts. Required CI is still pending; resume the plain PR watcher below. It has not reported green CI; the samples report pending checks and a queued app check suite with zero runs. No rerun request or queue action was made. The handoff is not complete. Recheck current CI before acting; the local watcher is no longer active.
What was found and done
- InterfaceProjectionGenerator selected every zero-argument non-void abstract method for eager capture. List conversion therefore invoked ordinary account operations, including checkExpiredDroplets. At twelve accounts this made 97 remote calls rather than 49; the corrected path makes one list call plus four declared property reads per account. Ordinary functions now stay at zero calls until explicitly invoked, and explicit calls reach the server exactly once.
- The two real in-process client/server account cases were red on main 71499899e547fb0cd62ff6e7fc04b25c0a97efc1 in all three recorded attempts. Restoring the old selection made them red again. N=1 changed state once under the old selection; N=12 changed state twelve times. The missing production reply itself remains unexplained; this change addresses the proven conversion-time extra calls.
- Capture now uses declared Kotlin JVM property signatures from classfile metadata or Java bean getters. Metadata reader 0.9.0 uses readLenient, including a 2.2 metadata case. Defining class bytes are required and missing bytes produce a detailed error. One existing cache fixture now exposes its original bytes; all assertions and 200 iterations remain unchanged.
- Type discovery separately visits reachable non-platform interface signatures, including a function-only cycle. The discovery regression was red before correction and green afterward. Two independent source/test reviews and a later discovery review were completed in the previous lane; their findings were addressed.
- Confirmed consumer changes: DigitalOcean WUI listDroplets/getEmergencyStop reads occur live; CockroachDB WUI/health listDatabases reads occur live; Handoff PR operations, including enqueue, run when explicitly called. The audit found no intentional conversion-time function-cache dependency. It covered 751 repository names, 667 root build scripts, 168 direct references, alternate files for 84 repositories with four more references, 261 fresh clones and 37 contract repositories. Other shape candidates and search limits are in the linked consumer records.
- PROJ2 created a fresh source-only branch. All fifteen source/document/test paths match the supplied evidence branch byte for byte; thirteen evidence paths are excluded. No source edits were authored by PROJ2. The complete local suite ran once through suite-slot.sh and exited 0. XML SHA256: 050acc3ed6fb7d85b9296bbd947cc9e1745b85d41af520a7e4b872287bc3db3a.
- A custom focused folder selector matched zero cases and ran no tests. The final recheck used nine standard individual tests/file.kts selectors, all passing on the first attempt. No timeout, assertion or iteration count changed.
Relevant PRs and refs
| Branch |
Remote head |
PR |
State |
| wip/lanePROJ2-property-projection |
d480f79522d6c1beae8ebe4e49ddc526d3763e64 |
https://github.com/CodexCoder21Organization/UrlResolver/pull/1436 |
source only; local suite and focused recheck green; CI not yet verified green |
| wip/lanePROJ2-evidence |
d0bf66d98f578563527a419865e473e73748291f |
no PR |
.lanePROJ2 findings, suite/focused counts, PR body and record; earlier evidence retained |
| wip/lanePROJ-evidence |
b40b7adb69cd19fb5b465f847e1807935d9d351c |
no PR |
original implementation, controls, reviews and consumer inventory |
Detailed original findings: https://github.com/CodexCoder21Organization/UrlResolver/blob/wip/lanePROJ-evidence/.lanePROJ/findings.md
Consumer inventory: https://github.com/CodexCoder21Organization/UrlResolver/blob/wip/lanePROJ-evidence/.lanePROJ/consumers.md
Repository inventory: https://github.com/CodexCoder21Organization/UrlResolver/blob/wip/lanePROJ-evidence/.lanePROJ/consumer-repositories.md
Current counts: https://github.com/CodexCoder21Organization/UrlResolver/blob/wip/lanePROJ2-evidence/.lanePROJ2/suite-counts.json
Prior follow-up evidence: https://github.com/CodexCoder21Organization/UrlResolver/tree/wip/laneRPCH3-list-followup-hang
No production deployment, Maven publication or merge occurred; verified from the lane's commands. No deployed-but-unmerged artifact was created. Raw console logs, XML and build outputs are not committed; source, counts and XML hashes are remote.
Next steps
Watch required CI using coursier launch buildwatchman:build-watchman:0.0.21 -r https://kotlin.directory -- --repo CodexCoder21Organization/UrlResolver --pr 1436 --interval-seconds 300. Plain PR mode only. Read CI no faster than five minutes. Act on a concrete watcher problem; do not requeue unchanged tests. Never enqueue, merge, publish or deploy. Upload the final report and complete this handoff once required CI is green.
Local gates are already satisfied on the exact source head. Repeat them only if source or base changes. If a source change is required, use the existing reproducer and first-attempt XML evidence rather than debugging through CI.
Operational knowledge
Use --local for this lane and the shared suite-slot.sh wrapper for a complete suite. The complete run took about 51 minutes and reported 2400 tests from 2392 tracked scripts. Standard individual test-file selectors avoid the custom-folder selection mismatch. The fresh shallow clone's fetch mapping was extended to track main explicitly. Git and GraphQL were used while the shared REST allowance was limited. Keep evidence on the separate branch. Owned paths are workspace/lanePROJ2/resolver-pr and resolver-evidence; out/rPROJ2-findings.md holds the local incremental record.
Final checkpoint report: https://github.com/CodexCoder21Organization/UrlResolver/blob/wip/lanePROJ2-evidence/.lanePROJ2/final.md
Current watch summary: https://github.com/CodexCoder21Organization/UrlResolver/blob/wip/lanePROJ2-evidence/.lanePROJ2/watch-summary.json