Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 59 additions & 0 deletions planning/releases/0.15.2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# httpware 0.15.2 — docs accuracy + internal dedup, no behavior change

No public API changes. Every commit since 0.15.1 is docs, internal refactoring,
CI, or planning tooling — safe to upgrade unconditionally.

## Docs

- **Site overhaul + audit fixes** (#90): the "Why httpware" pitch is now
benefit-first (`raise_for_status()` dropped from the lead); `index.md`
slimmed to a true quickstart; the OpenTelemetry wiring guide moved to a new
`docs/observability.md`; `resilience.md` trimmed. Fixed two
security-relevant doc bugs where `errors.md`/`middleware.md` said secrets in
URLs are *not* redacted when the code does redact them, plus several other
doc/code mismatches (Retry-After-over-`max_delay` behavior,
previously-undocumented `ResponseTooLargeError`/`max_response_body_bytes`).
- **Project lockup hero** added to the docs home page (#91).
- **Docs-and-comments audit**: fixed stale docstrings (`BulkheadFullError`,
`AsyncClient.stream()`'s version caveat), a cross-doc contradiction on where
`DecodeError` wrapping happens, a `httpx`/`httpx2` terminology slip (with a
follow-up correction to the underlying `respx`-compatibility claim, verified
against `respx`'s own docs), a `contributing.md` wording contradiction on
docstring requirements, and deduplicated `ResponseTooLargeError`'s
triple-repeated behavior description down to one canonical account
(#103, #104, #105).

## Internal (no behavior change)

Continuation of the sync/async deduplication pass flagged by the 2026-06-14
deep audit — every remaining "duplicated, no divergence yet" item from that
audit is now closed:

- Body-cap subsystem and httpx2-exception-mapper context managers extracted
out of `client.py` into dedicated `_internal/` modules.
- Client construction-validation and kwargs-assembly logic shared between
`Client`/`AsyncClient`.
- The 6 hand-duplicated exception reconstruct/`__reduce__` pairs in
`errors.py` collapsed into one `_KeywordReduceMixin`.
- `Bulkhead`/`AsyncBulkhead` constructor validation and rejection-event
construction shared.
- The decoders' memoizing get-or-build cache pattern (4 sites across
`pydantic.py`/`msgspec.py`) shared via one generic helper.
- `_read_capped`/`_read_capped_async`'s declared-length-reject and
`Response`-reconstruction blocks shared.
- `AsyncBulkhead`/`AsyncCircuitBreaker`'s identical single-event-loop guard
shared via a new `_event_loop_guard.py`.

## CI & tooling

- PRs now run `mkdocs --strict` as a check, catching broken internal
links/anchors and orphaned pages before merge (#92).
- Planning convention bumped to 2.0.0 (flat change files, no per-change
folders) (#93, #94).
- Dropped stale `ty: ignore` suppressions in circuit-breaker tests that a
newer `ty` no longer needs (#96).

## Downstream

No action required. Nothing about the installed package's public behavior
changes.