Skip to content

chore(release): 0.4.0 - #59

Merged
Kilerd merged 1 commit into
mainfrom
release/0.4.0
Aug 2, 2026
Merged

chore(release): 0.4.0#59
Kilerd merged 1 commit into
mainfrom
release/0.4.0

Conversation

@Kilerd

@Kilerd Kilerd commented Aug 1, 2026

Copy link
Copy Markdown
Owner

Version bump for the 0.4.0 release: all three crates, the internal dependency ranges, the README, and the examples that pin a version.

What 0.4 contains

Tiers 0, 1 and 2 of the maturation roadmap (#41) are complete.

axum 0.8 (#73)

  • Route paths use {id} instead of :id — axum 0.8 rejects the old form at startup, so every application must edit its routes. It also removes work from gotcha: {id} is what OpenAPI already used, so the framework no longer translates between the two syntaxes.
  • Newly re-exported, so they no longer need gotcha::axum::…: Form, Multipart, Sse/Event/KeepAlive, WebSocketUpgrade/WebSocket, middleware, MatchedPath, OriginalUri. (Form and Multipart were already supported internally — only the re-export was missing.)
  • GotchaRouter::fallback_service handles unmatched requests with a Service rather than a handler.

Documentation, made real (#71)

  • docs.rs now builds with all features. It previously built with defaults only (http1), so #[api], Schematic, Operable and the entire OpenAPI layer were invisible on docs.rs.
  • Feature-gated items carry a "requires feature X" badge.
  • #![deny(missing_docs)], and the 64 public items that needed documenting.
  • The README is the crate documentation, so its examples are doctests and can't rot again ([docs] Re-enable doctests and fix rotted docs/README #28).

Configuration, redesigned (#60)

Feature flags, trimmed (#70)

  • message is gone — the message system is always available.
  • cors / static_files were broken, not redundant: tower-http was declared with both sub-features, so wanting CORS also compiled the whole static-file stack. Each now enables only its own half.
  • CI stopped testing the powerset: 127 jobs became 7.

Correctness / trust (Tier 0)

Framework identity (Tier 1)

OpenAPI (Tier 2)

Validation (Tier 3, landed early)

  • Valid<Json<T>> backed by the validator crate; rejects with 422 and readable messages
  • #[validate(..)] drives both the runtime check and the schema keywords — written once (builtin validator for json request #9)

Breaking changes since 0.3.0

Two require an edit in every application, and both are covered step by step in MIGRATION.md:

  1. Route paths: :id{id} (axum 0.8 rejects the old form)
  2. Config files: application keys move out of [application] to the top level, [basic][server]; nested env overrides use __

Also:

  • features = ["message"] should be dropped
  • Responsible for Result<T, E> requires E: ErrorResponsible (blanket-implemented for E: Schematic and (StatusCode, Json<E>))
  • A hand-written FromRequest/FromRequestParts impl drops #[async_trait] (axum-core 0.5)
  • Operable gained summary and security fields
  • New default dependencies: validator, axum-extra; mofa 0.1 → 0.2

Verification

Locally: every feature combination builds and tests, gotcha_core and gotcha_macro suites, doctests, cargo clippy --all-features --workspace, cargo fmt --check, and a nightly --cfg docsrs doc build with no warnings.

Publishing (gotcha_macrogotcha_coregotcha) and the v0.4.0 tag happen after this merges.

🤖 Generated with Claude Code

@Kilerd
Kilerd force-pushed the release/0.4.0 branch 4 times, most recently from c59cb66 to fee7ddd Compare August 2, 2026 05:07
Bumps all three crates and the internal dependency ranges to 0.4.0, plus the README and the
examples that pin a version.

0.4 completes Tiers 0-2 of the maturation roadmap (#41): the framework shell (config, errors,
state, tasks, messager) is trustworthy, and the OpenAPI output covers components/$ref, error
responses, spec customization, field metadata, validation-driven constraints and header/cookie
parameters.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@Kilerd
Kilerd merged commit de29e4b into main Aug 2, 2026
11 checks passed
@Kilerd
Kilerd deleted the release/0.4.0 branch August 2, 2026 05:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant