|
| 1 | +# httpware 0.15.2 — docs accuracy + internal dedup, no behavior change |
| 2 | + |
| 3 | +No public API changes. Every commit since 0.15.1 is docs, internal refactoring, |
| 4 | +CI, or planning tooling — safe to upgrade unconditionally. |
| 5 | + |
| 6 | +## Docs |
| 7 | + |
| 8 | +- **Site overhaul + audit fixes** (#90): the "Why httpware" pitch is now |
| 9 | + benefit-first (`raise_for_status()` dropped from the lead); `index.md` |
| 10 | + slimmed to a true quickstart; the OpenTelemetry wiring guide moved to a new |
| 11 | + `docs/observability.md`; `resilience.md` trimmed. Fixed two |
| 12 | + security-relevant doc bugs where `errors.md`/`middleware.md` said secrets in |
| 13 | + URLs are *not* redacted when the code does redact them, plus several other |
| 14 | + doc/code mismatches (Retry-After-over-`max_delay` behavior, |
| 15 | + previously-undocumented `ResponseTooLargeError`/`max_response_body_bytes`). |
| 16 | +- **Project lockup hero** added to the docs home page (#91). |
| 17 | +- **Docs-and-comments audit**: fixed stale docstrings (`BulkheadFullError`, |
| 18 | + `AsyncClient.stream()`'s version caveat), a cross-doc contradiction on where |
| 19 | + `DecodeError` wrapping happens, a `httpx`/`httpx2` terminology slip (with a |
| 20 | + follow-up correction to the underlying `respx`-compatibility claim, verified |
| 21 | + against `respx`'s own docs), a `contributing.md` wording contradiction on |
| 22 | + docstring requirements, and deduplicated `ResponseTooLargeError`'s |
| 23 | + triple-repeated behavior description down to one canonical account |
| 24 | + (#103, #104, #105). |
| 25 | + |
| 26 | +## Internal (no behavior change) |
| 27 | + |
| 28 | +Continuation of the sync/async deduplication pass flagged by the 2026-06-14 |
| 29 | +deep audit — every remaining "duplicated, no divergence yet" item from that |
| 30 | +audit is now closed: |
| 31 | + |
| 32 | +- Body-cap subsystem and httpx2-exception-mapper context managers extracted |
| 33 | + out of `client.py` into dedicated `_internal/` modules. |
| 34 | +- Client construction-validation and kwargs-assembly logic shared between |
| 35 | + `Client`/`AsyncClient`. |
| 36 | +- The 6 hand-duplicated exception reconstruct/`__reduce__` pairs in |
| 37 | + `errors.py` collapsed into one `_KeywordReduceMixin`. |
| 38 | +- `Bulkhead`/`AsyncBulkhead` constructor validation and rejection-event |
| 39 | + construction shared. |
| 40 | +- The decoders' memoizing get-or-build cache pattern (4 sites across |
| 41 | + `pydantic.py`/`msgspec.py`) shared via one generic helper. |
| 42 | +- `_read_capped`/`_read_capped_async`'s declared-length-reject and |
| 43 | + `Response`-reconstruction blocks shared. |
| 44 | +- `AsyncBulkhead`/`AsyncCircuitBreaker`'s identical single-event-loop guard |
| 45 | + shared via a new `_event_loop_guard.py`. |
| 46 | + |
| 47 | +## CI & tooling |
| 48 | + |
| 49 | +- PRs now run `mkdocs --strict` as a check, catching broken internal |
| 50 | + links/anchors and orphaned pages before merge (#92). |
| 51 | +- Planning convention bumped to 2.0.0 (flat change files, no per-change |
| 52 | + folders) (#93, #94). |
| 53 | +- Dropped stale `ty: ignore` suppressions in circuit-breaker tests that a |
| 54 | + newer `ty` no longer needs (#96). |
| 55 | + |
| 56 | +## Downstream |
| 57 | + |
| 58 | +No action required. Nothing about the installed package's public behavior |
| 59 | +changes. |
0 commit comments