• DcRouter v32.6.2
    Release / build-and-release (push) Successful in 22m2s
    Stable

    jkunz released this 2026-09-28 02:50:05 +00:00 | 5 commits to main since this release

    2026-09-28 - 32.6.2

    Fixes

    • Move the in-process RemoteIngress hub to @serve.zone/remoteingress ^32.0.3 (from ^32.0.0, locked at 32.0.0), whose QUIC control stream is read cancel-safely on both sides. Up to 32.0.2 a control message was read as a 5-byte header and then its payload with two read_exact calls inside a tokio::select!, and written in two writes that could arrive in separate packets; when another branch won after the header was consumed, the next read decoded the payload as a header. A split CTRL_UDP_SESSION_CLOSE frame made the edge refuse control message too large: <N> bytes (max 65536) and tear its tunnel down, dropping every port listener of that edge while the hub logged control stream error: connection lost - the teardowns seen on the SSH tunnel to code.foss.global:29419. From 32.0.3 the hub keeps a partially received control message buffered across cancelled reads and writes each message as one buffer, so it no longer loses a frame an edge sent, and the frames it sends no longer leave the header and payload in separate writes. The hub API dcrouter uses (RemoteIngressHub, its events, start, stop, getStatus, updateAllowedEdges, the egress proxy calls and encodeConnectionToken) is unchanged across 32.0.1-32.0.3, and the wire format is unchanged, so no dcrouter code changes. Edges read the hub's control stream with their own reader: an edge is fully protected only once it runs remoteingress 32.0.3 as well (see the readme's RemoteIngress version note).

    • The release binaries resolve a first-party release published the same day. Deno 2.9 compiles with a 24-hour minimum dependency age by default, which left @serve.zone/remoteingress@^32.0.3 unresolved in deno compile (the smoke check caught it). deno.json now commits the owner's policy that pnpm already applies: seven days for third-party packages, owner scopes (@api.global, @apiclient.xyz, @design.estate, @git.zone, @idp.global, @lossless.org, @push.rocks, @serve.zone, @tempfix, @tsclass) exempt, so every build host compiles under the same age policy whatever its own pnpm configuration (tsdeno 1.11.0 leaves a committed policy untouched). Deno resolves the package.json ranges against the registry at compile time, not pnpm-lock.yaml. The binaries return to their complete size (816 MiB x64, 798 MiB arm64 from 564 npm packages, the size of the June builds): the 32.6.1 binaries (about 475 MiB) were most likely compiled without owner packages published within 24 hours of the build, which the --version smoke check cannot see.

    Maintenance

    • @design.estate/dees-catalog ^16.4.0 → ^16.6.0 (locked 16.5.0 → 16.6.0).
    • Release tooling: @git.zone/tsdeno 1.11.0 and @git.zone/tsbundle 3.0.0 (the dashboard bundle ships dist_serve/bundle.js.third-party-notices.{txt,json}); pnpm 12.6.0 and @types/node 26.6.3 wait for the seven-day rule.
    Downloads