Highlights
This release incorporates PR #11, fixing server shutdown, concurrent UDP buffer ownership, and SMUX stream progress. Linux amd64 and arm64 packages are built by the release workflow.
Fork fixes
- Handle SIGINT/SIGTERM received during server startup and unblock UDP cleanup and reverse heartbeat I/O before waiting for shutdown.
- Synchronize buffered UDP reads with close, release late packets, preserve terminal errors after queued payloads, and reject truncated datagrams. This addresses the buffered SS2022 UDP race at its source.
- Retire timed-out SMUX half-close completion channels so late completions cannot stall sibling streams or session shutdown.
- Keep Hysteria destinations valid after pooled storage is released; retain TLS session-cache identity across garbage collection.
- Serialize VLESS user mutations to preserve counters and authentication indexes. Advance XDNS selection past busy resolvers.
- Bound interoperability stats polling and retain useful failure logs. Process matrices run Xray servers with Xray, sing-box, and Mihomo clients.
- Harden Linux interoperability listener allocation against automatic source-port reuse; preserve occupied TCP/UDP checks and run the regression in the release gate. The original soak bind failure remains recorded.
Upstream changes
Includes upstream/main through cd4ce973 (WebSocket delay-dial panic fix), unchanged from v26.9.3-0814. No newer upstream/main commits were available when preparing this release.
Compatibility notes
- Existing VLESS, Trojan, REALITY, Vision, and SMUX wire protocols and authentication rules are preserved.
- REALITY
minClientVerandmaxClientVerremain optional operator settings, with no implicit minimum. The displayed UTC timestamp does not add bytes to REALITY's three-byte version identity. - MTProxy PR #8 remains unmerged and is not included.
- Hysteria destination ownership intentionally adds one allocation; no throughput or latency improvement is claimed.
Validation
- Tests and Checkings passed on release commit
b4282e22: repository tests, formatting, and protobuf header consistency. - Local Go 1.27.0 checks passed:
go test ./core ./main -count=1,go vet ./core ./main, and a static Linux/amd64 release build. The version regression was observed failing before the stamp update and passing afterward. - Explicit VLESS TCP TLS/REALITY no-flow/Vision validation passed 36/36 cells across Xray, sing-box, and Mihomo clients. This was run separately because the current combined CI selector does not include the VLESS root test.
- Additional real-process Hysteria, TLS/X25519, SMUX negotiated half-close, and legacy-Xray fallback checks passed without retries.
- The first extended Linux run reached soak cycle 12, then failed because sing-box could not bind its local SOCKS port. The log did not identify the occupying socket. A regression exposed allocation from the automatic source-port range; the test harness now excludes that range. Focused unit/race/vet and 144 real-process SMUX/H2MUX cells passed afterward.
- Extended Linux release validation passed on
b4282e22: repository-wide unit/race/checkptr and vet, interoperability and lifecycle gates, peak and 50-cycle reconnect profiles, performance/resource budgets, the RemnaNode environment/configuration contract, a 30-minute soak (57 cycles), and static Linux/amd64 artifact inspection.
Earlier audit runs recorded an external Google REALITY/Chrome EOF and a failure in the retired mixed-server reconnect topology. Those historical failures are preserved in the audit documentation; the current full-suite CI success does not erase them.