baukit-openapi 0.10.21

Small OpenAPI metadata, serialization, writing, and drift-check helpers.
Documentation
# Changelog

All notable changes to `baukit-openapi` are documented here.

## [Unreleased]

## [0.10.21] - 2026-10-12

## [0.10.20] - 2026-10-12

## [0.10.19] - 2026-10-11

## [0.10.18] - 2026-10-11

## [0.10.17] - 2026-10-11

## [0.10.16] - 2026-10-11

## [0.10.15] - 2026-10-11

## [0.10.14] - 2026-10-11

## [0.10.13] - 2026-10-10

## [0.10.12] - 2026-10-10

## [0.10.11] - 2026-10-10

## [0.10.10] - 2026-10-10

## [0.10.9] - 2026-10-10

## [0.10.8] - 2026-10-09

## [0.10.7] - 2026-10-09

## [0.10.6] - 2026-10-09

## [0.10.5] - 2026-10-08

## [0.10.4] - 2026-10-08

## [0.10.3] - 2026-10-08

## [0.10.2] - 2026-10-08

## [0.10.1] - 2026-10-08

## [0.10.0] - 2026-10-08

## [0.9.0] - 2026-10-07

## [0.8.0] - 2026-10-07

## [0.7.4] - 2026-10-06

## [0.7.3] - 2026-10-05

## [0.7.2] - 2026-10-04

## [0.7.1] - 2026-10-04

## [0.7.0] - 2026-10-04

### Changed

- Update the schema validation baseline to jsonschema 0.58.5.

- Use caret requirements for third-party Rust dependencies so products can take compatible
  updates. Keep Baukit crate versions exact.

### Fixed

- Correction to the 0.6.0 entry: utoipa 6 does change generated documents.
  It omits empty response descriptions, although OpenAPI 3.1 requires that
  field, and reorders `Option<T>` alternatives from `[null, $ref]` to
  `[$ref, null]`. Products must regenerate their committed schemas.
- Add `fill_missing_response_descriptions` to fill empty descriptions with
  the HTTP reason phrase. Default, range, unknown status codes, and reusable
  responses without a status use "Response". Paths, callbacks, webhooks, and
  reusable components are covered. `OpenApiMetadata::apply_to` and
  `serialize_schema` apply it by default and preserve product descriptions.

## [0.6.0] - 2026-10-02

### Changed

- Breaking: moved to utoipa 6. Every public function that takes or returns a utoipa type
  (`OpenApi`, `Operation`, `Header`, `Parameter`) now uses utoipa 6 types, so products must
  upgrade utoipa to 6 with this release. utoipa 6 stores operation parameters and response
  headers as `RefOr<_>`; `document_if_match`, `document_etag`, and header rules insert inline
  values and skip `$ref` entries when they look for an existing `If-Match` or
  `Idempotency-Key` parameter. The generated documents are unchanged.

## [0.5.2] - 2026-09-30

## [0.5.1] - 2026-09-29

## [0.5.0] - 2026-09-28

### Added

- `ErrorResponseRules` documents error responses and response headers from product rules. A
  status rule pairs an `OperationCondition` (`Always`, `Secured`, `HasRequestBody`,
  `HasPathParameter`, `UnsafeMethod`, `HasIdempotencyKey`) with a status and a description, and
  adds a response with the shared error envelope where the operation lacks that status. A header
  rule adds a header to the responses a `ResponseSelector` picks. `standard_headers()` adds
  `X-Request-Id`, `Retry-After` on 429, and `WWW-Authenticate` on 401. `apply` covers every
  operation and `apply_where` takes a path and method filter. `REQUEST_ID_HEADER`,
  `RETRY_AFTER_HEADER`, `WWW_AUTHENTICATE_HEADER`, `request_id_header`, `retry_after_header`, and
  `www_authenticate_header` are public.
- `document_if_match` documents a revision precondition on an operation: a required or optional
  `If-Match` header parameter, plus 400, 412, and, when required, 428 error responses with the
  shared envelope. `document_etag` adds the `ETag` header to inline 2xx responses.
  `if_match_parameter`, `etag_header`, `IfMatchRequirement`, `IF_MATCH_HEADER`, `ETAG_HEADER`,
  `PRECONDITION_REQUIRED_CODE`, `PRECONDITION_FAILED_CODE`, and `INVALID_IF_MATCH_CODE` are public.
- Add a camelCase naming check. `check_camel_case_names(&openapi, exemptions)` returns
  `SchemaError` with one `NamingViolation` (JSON pointer, name, `NameKind`) per property or
  path or query parameter name that is not lower camelCase, and `assert_camel_case_names`
  panics with the list. `find_naming_violations` runs the same walk on a `serde_json::Value`,
  and `is_camel_case` exposes the rule. The walk skips enum and const values, defaults,
  examples, discriminator mappings, `x-` extensions, and header and cookie parameters. The
  exemption list is for standard-defined names such as OAuth 2.0 `access_token`.

### Changed

- Break: `ErrorBody` serializes `request_id` as `requestId`. The documented error envelope is
  now `{ "error": { "code", "message", "requestId", "details" } }`.
- Break: `SchemaErrorKind` gains the `Naming` variant. Exhaustive matches must handle it.

## [0.4.0] - 2026-09-12

## [0.3.0] - 2026-09-04

## [0.2.1] - 2026-09-03

## [0.2.0] - 2026-09-03

## [0.1.2] - 2026-09-01

## [0.1.1] - 2026-09-01

## [0.1.0] - 2026-08-25

### Added

- First public release of `baukit-openapi`.