v0.1.98
Highlights
quic: non-blocking outbound dials — fixes an Initial-handshake deadlock that forked zeam devnets (#245)
QuicRuntime.handleDial previously spun a blocking drive loop for up to 20s per dial on the single drive thread, and never called pollAccept during it. Two peers dialing each other simultaneously (an all-to-all gossip mesh at boot) would both wedge in the QUIC Initial handshake — neither accepted the other's inbound — time out at 20s (stalled_phase=initial), and starve established connections of ACKs. Downstream a zeam 3-node devnet forked early and never finalized.
Dials are now advanced non-blocking by driveLoop each tick alongside the listener, pollAccept, established outbounds, gossip, and host ticks. Live-validated: a 3-node zeam devnet that previously sat at finalized=slot 0 now justifies steadily (slot 0→18 in lockstep with wall-clock). Adds a simultaneous mutual dial regression test.
Also included since v0.1.97
- #239 re-enable previously-skipped tests
- #242 connection-manager: protect/unprotect, expiry-based trim grace, jittered reconnect backoff
- #243 remove permanently-skipped handshake-sizes test
- #244 swarm: hook deadlines, event-queue backpressure policy, deferred command queue (#212)
Full diff: v0.1.97...v0.1.98