Skip to content

0.5.0 release line

Latest

Choose a tag to compare

@dbowm91 dbowm91 released this 22 Oct 14:52
· 16 commits to main since this release

0.5.0 release line (Plan 305)

Rust artifacts (crates.io):

  • eggserve-primitives 0.2.3 (378f63b29a0019e028d57d85c9be10a5605084ad1267aec7845af5ae4ebe0cd1)
  • eggserve-server 0.5.0 (a43e40e45fe5b40eb9af2c4f7481d3645dc7d612b660a4f4cdf82348934a141a)
  • eggserve-static 0.5.0 (831083fbe104282bd7b03685c755a74246c3b822e442fa36c7b7610369b6fc81)
  • eggserve-h3 0.5.0 (ca36bc53c7b97f1b116f19c999adea22c1f5a8f0f6a4ef98c66554d3fb373ce0)
  • eggserve-core 0.5.0 (c55ab91cc304ba45fc9d2d0a87fc136e2b0d795234d5c01b1ad059dde1851de9)
  • eggserve-bin 0.2.3 (0cdd61605e470a16053834b25c2007fbe4d6f9b634d3adb6ed81f6de9eca3590)

This is the corrective line. The 0.4.0 line shipped on 2026-09-25 without the defect batch that landed in the repository immediately after the v0.4.0 tag, so the published 0.4.0 crates carry the conditional-request, header-combining, framing-strictness, fail-closed-negotiation, confinement-inheritance, and Python callback-permit defects. This line publishes that batch.

Highlights:

  • Conditional requests: If-Match: * requires an ETag (RFC 9110 13.1.1); unsatisfiable Range with a failed If-Range serves 200 full (13.1.5); header combining is first-wins except If-Match/If-None-Match.
  • Framing: strict 1*DIGIT Content-Length (a non-numeric value is a 400); Http1Upgrade requires a protocol; an opaque Expect is 417.
  • Fail-closed: version_to_http and from_state return Result instead of panicking or silently downgrading.
  • Confinement: child resolution inherits the confined backslash policy; fd-relative resolution re-applies the platform component checks.
  • Durability: a buffer-export failure fails the stream instead of truncating it silently; shutdown drain is bounded by graceful_shutdown_timeout.
  • One runtime-error authority: eggserve-primitives::canonical::runtime_error_with_policy replaces two parallel builders; the wire output is proven byte-identical across a 44-cell matrix.
  • The Plan 253 connection-overlap ledger is corrected, measured, and machine-checked by a drift bound in the topology gate; the HTTP/3 Alt-Svc advertisement policy is single-sourced in eggserve-primitives.
  • The compatibility RuntimeConfig now carries the four direct-H1 ownership values with unchanged defaults; its builder delegates 37 of its 38 shared setters to the direct builder. This is source-incompatible for exhaustive RuntimeConfig struct literals (the Plan 285 class), which is why the line is a minor bump — see the migration guide.
  • Dependency advisories: the resolved rustls, rustls-webpki, and quinn-proto versions are patched (the manifest requirement floors are unchanged).
  • crates.io metadata: the README's repository links are absolute (relative links were rewritten by crates.io into 404s), docs.rs renders the feature-gated surfaces, and the two crates whose inherited keywords misdescribed them now declare accurate ones.

H2/H3 tiers unchanged. Safe defaults unchanged (loopback bind, path confinement, no symlinks, no dotfiles, no directory listing).

Wheel: eggserve 0.2.5 ships the 0.5.0 Rust code via the release workflow (PyPI).

Source: 326aa1e. Hosted CI 39794834966 (rust, supply-chain, python) green on the exact SHA. Evidence: plans/closure/direct-h1-runtime/305-corrective-040x-publication.md.