# 0.9.1

URL: /pounce/releases/0.9.1/
Section: releases
Description: Patch release for stable readiness responses during drain, async shutdown cleanup, metadata-derived CLI help, and release tooling

---

> For a complete page index, fetch /pounce/llms.txt.

## Highlights

- **Stable readiness during shutdown** — late HTTP/1 `GET` and `HEAD` probes for the configured readiness path keep the built-in structured JSON `503` response 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 using `health_check_path` can now rely on matching late HTTP/1 readiness probes returning JSON with `"status": "draining"` while the listener remains reachable. `HEAD` matches `GET` status and headers without a body.
- The drain-boundary request inspection is capped at one second and bounded by `header_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](https://github.com/lbliii/pounce/pull/307))

## Changed

- CLI help now uses Milo metadata hooks and schema-derived parameter descriptions across branded help, JSON Schema, and MCP discovery. ([#309](https://github.com/lbliii/pounce/pull/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](https://github.com/lbliii/pounce/pull/299))

## Fixed

- Late readiness probes preserve structured draining JSON at async and shared multi-worker live-listener rejection boundaries. ([#308](https://github.com/lbliii/pounce/issues/308))
- Async workers retain accepted connection tasks through writer closure and tolerate delayed transport detachment during SIGTERM. ([#302](https://github.com/lbliii/pounce/pull/302))
- `make gh-release` reads project name and version from the PEP 621 project table, preventing changelog category names from corrupting release titles. ([#303](https://github.com/lbliii/pounce/pull/303))

## Install

Core HTTP/1.1 server:

```bash
uv add "bengal-pounce==0.9.1"
```

All optional protocol dependencies:

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