Skip to content

v5.1.18

Choose a tag to compare

@github-actions github-actions released this 09 Jul 03:55
v5.1.18
3e87101

Blob replication reliability

  • Blob apply loop could freeze on wire-carried save flags (#1641) — the apply path gated a receiver's commit on the sender's in-flight save state, which could freeze the whole apply loop if that stream stalled. Apply commits are no longer gated on those flags at all; instead, a local write with a fresh blob now gates its own commit on the blob's durable save, so a record can no longer commit (and replicate) a not-yet-durable blob reference.
  • Cache record headers could be corrupted after a shared response body (#1709) — mutating a cached record's headers/status in finalizeResponse could mutate the live cached record itself when the response body was shared, corrupting future reads of that record. The response path now copies before mutating.

Fleet upgrade & deployment

  • Graceful worker-shutdown drain hook (#1621) — adds a registry (registerShutdownDrain) that lets in-flight work (e.g. in-progress blob sends) finish before a worker thread exits, instead of being cut off mid-transfer during a rolling restart or upgrade.
  • Deploy could silently truncate the tarball on a dangling symlink (#1718) — deploy_component reported success even when a dangling symlink caused the packaging walker to stop early and drop every entry queued after it. The packager now pre-scans for dangling symlinks and excludes just those, instead of the walk bailing out silently.
  • Docker entrypoint exec-format error on 5.1.x (#1619) — the container entrypoint could be written empty via a RUN heredoc redirect, producing an exec format error at startup. It's now written via a COPY heredoc so the image boots reliably.
  • npm latest/next dist-tags could be stolen by an older release line (#1690) — publishing any release moved the latest/next tag regardless of version, so a 5.0.x patch published after a 5.1.x release could steal latest back onto 5.0.x. The tag now only moves forward for the line it belongs to.
  • Periodic re-read safety net for the TLS cert watcher (#1394) — adds a polling fallback alongside the filesystem watcher so a missed cert-rotation event (e.g. from certain volume mounts) doesn't leave a node running on a stale certificate indefinitely.

MQTT

  • Shared MQTT port across workers (#1603) — workers now share the MQTT listener port (except on macOS), so MQTT works correctly on multi-worker instances.

MCP

  • Missing MCP-Protocol-Version header on an established session no longer 400s (#1694) — clients that negotiated a newer protocol version but omit the header on individual requests (permitted by spec) were incorrectly rejected. The session's already-negotiated version is now used when the header is absent.
  • Static plugin serving nothing when urlPath is configured (#1584) — fixes a static-file plugin regression where a configured urlPath resulted in no files being served.

Also in this release

  • threads.preload config to preload modules (e.g. APM agents) on worker threads (#1569).
  • fix(queue): waitForDrain no longer hangs if the queue empties without emitting a drained event (#1643).

Full Changelog: v5.1.17...v5.1.18