0.9.1

Patch release for stable readiness responses during drain, async shutdown cleanup, metadata-derived CLI help, and release tooling

Highlights

  • Stable readiness during shutdown — late HTTP/1GET and HEAD probes for the configured readiness path keep the built-in structured JSON 503response at async-worker and shared multi-worker drain boundaries. Other late traffic retains the generic shutdown response.
  • Cleaner async connection teardown — accepted connection tasks remain owned until their writers detach, including reset, timeout, capacity-rejection, and CPython 3.14 delayed-detach paths.
  • One source for CLI metadata — branded help, JSON Schema, and MCP discovery now derive descriptions from Milo metadata hooks and schema-backed command definitions.
  • Release and workload proof — GitHub release metadata is parsed structurally, and the benchmark suite adds an artifact-ready Milo MCP workload with routing-header and SSE framing proof.

Upgrade notes

  • This is a backward-compatible patch release with no configuration migration.
  • Deployments usinghealth_check_path can now rely on matching late HTTP/1 readiness probes returning JSON with "status": "draining" while the listener remains reachable. HEAD matches GETstatus and headers without a body.
  • The drain-boundary request inspection is capped at one second and bounded byheader_timeout, shutdown_timeout, and max_header_size; it never dispatches to the ASGI application.
  • CLI integrations should continue treating command docstrings and generated schema as the public description source. Pounce now requires Milo 0.4.0 or newer.

Added

  • An artifact-ready Milo MCP benchmark workload with rotating fixed-rate request variants and real-worker routing-header/SSE framing proof. (#307)

Changed

  • CLI help now uses Milo metadata hooks and schema-derived parameter descriptions across branded help, JSON Schema, and MCP discovery. (#309)
  • The stable Railway recipe is pinned to the published 0.9.0 artifact while the separate canary continues to build the current repository checkout. (#299)

Fixed

  • Late readiness probes preserve structured draining JSON at async and shared multi-worker live-listener rejection boundaries. (#308)
  • Async workers retain accepted connection tasks through writer closure and tolerate delayed transport detachment during SIGTERM. (#302)
  • make gh-releasereads project name and version from the PEP 621 project table, preventing changelog category names from corrupting release titles. (#303)

Install

Core HTTP/1.1 server:

uv add "bengal-pounce==0.9.1"

All optional protocol dependencies:

uv add "bengal-pounce[full]==0.9.1"