fetch-kit 0.1.4

Resilient HTTP client for Rust — retry, circuit breaker, connection pooling, and typed JSON helpers built on reqwest
Documentation
# Changelog

All notable changes to this project are documented here. Format: [Keep a
Changelog](https://keepachangelog.com/) — versions follow [semver](https://semver.org).

## [Unreleased]

## [0.1.3] - 2026-09-12

### Added

- `tests/config_matrix.rs` (13 tests): behavior-observable wire coverage for
  the remaining builder/request knobs — `default_header`/`default_headers`
  (stamped on every request; per-request headers take precedence),
  `user_agent`, `reqwest_builder` (raw config applied verbatim),
  `retry_bounds` (pacing observably changes; jitter-aware assertion),
  `timeout` and `base_url` default-vs-configured contrasts, and the
  `RequestBuilder` `basic_auth`/`headers`/`form`/`json`/`query` shapes.
  Retry-count, timeout-override, breaker, and multipart knobs were already
  wire-proven in `tests/wire.rs`.

### Fixed

- **Dead knob:** `ClientBuilder::default_header`/`default_headers` stored
  into a field that `build()` never read — the headers silently never
  reached the wire. `try_build` now applies them to the underlying
  `reqwest` client (same release also carries 0.1.2's wire suite; this
  crate is not published to crates.io under this name).

## [0.1.2] - 2026-09-12

### Added

- Wire-level integration suite (`tests/wire.rs`, 16 tests) against real
  HTTP servers (wiremock): GET/POST/JSON round trips, base-URL resolution,
  header/auth/query propagation, PUT/DELETE passthrough, status-error
  mapping, primary/fallback recovery, client and per-request timeouts,
  retry-until-success / retry-exhaustion / no-retry-on-4xx, multipart
  upload shape, and the `circuit-breaker` feature over the wire (breaker
  opens after 3 consecutive 5xx and short-circuits with
  `FetchError::CircuitOpen`; stays closed through sub-threshold failures).

### Fixed

- Error fidelity: `FetchError::CircuitOpen` now surfaces as the
  `CircuitOpen` variant instead of being buried in
  `FetchError::Middleware(String)`. The middleware no longer erases the
  concrete type (`anyhow!` → `Into<anyhow::Error>`), and the
  `reqwest_middleware::Error → FetchError` conversion downcasts through
  both fetchkit's own middleware errors and `reqwest_retry::RetryError`
  wrapping. Callers matching on `FetchError::CircuitOpen` now work as the
  API always documented.

### CI

- New `integration` job running the wire suite with all features.

## [0.1.1] - 2026-09-11

### Fixed

- 22-gate quality audit pass: documentation completeness
  (README badges, REQUIREMENTS/THREAT-MODEL coverage) and
  feature-gated test hygiene.

## [0.1.0] - 2026-09-05

### Added
- Initial public release.