Skip to content

Release 0.5.0 - #35

Merged
nihaopaul merged 1 commit into
mainfrom
release/0.5.0
Aug 23, 2026
Merged

Release 0.5.0#35
nihaopaul merged 1 commit into
mainfrom
release/0.5.0

Conversation

@nihaopaul

Copy link
Copy Markdown
Owner

Version bump only — no code changes. The hardening work itself landed in #34.

Why 0.5.0 and not 0.4.2

Several changes in this cycle can reject a token, or refuse to start, where 0.4.1 would have served:

Change 0.4.1 0.5.0
Token with future nbf accepted (nbf parsed, ignored) rejected
iss / aud enforcement serde strictness only required by the validator too
Token source cookie only Cf-Access-Jwt-Assertion preferred; malformed header does not fall back to the cookie
Empty JWKS or empty catalog port opens, everything 403s startup aborts
Initialization failure panic clean exit, port never opens

The one operators need to know about

A deployment that previously started during a Cloudflare API outage will now fail to start. Before, it would open the port and return 403 to everything; now it exits. That's deliberate — a crash-looping container is visible to an orchestrator in a way that silent denials aren't — but it does mean deploys are now coupled to Cloudflare's availability in the default mode.

Runtime behaviour is unchanged: refresh failures still retain the last complete catalog and key set, so a running instance rides out an outage.

Also worth noting the startup sequence now makes TCP readiness truthful — the port only opens once keys and the catalog are loaded, so a plain TCP check is a valid readiness probe. That matters because the image is distroless with no shell.

Verified before tagging

  • cargo fmt --all --check, cargo clippy --workspace --all-targets -- -D warnings, cargo build --release --locked --workspace: all clean on main.
  • 32 tests passing, up from 7 at the start of this cycle.
  • --locked re-verified after the version bump, since the lockfile records the workspace member's own version and CI plus the Docker build both pass that flag. Bumping Cargo.toml alone would have failed the release build.

Release checklist after merge

  1. Tag 0.5.0 from main.
  2. The release workflow builds linux/amd64 and linux/arm64 on native runners, pushes by digest, then merges the manifest — and fails if either architecture is missing.
  3. Verify the published manifest carries both architectures.

🤖 Generated with Claude Code

Minor rather than patch: several changes in this cycle can reject a token
or refuse to start where 0.4.1 would have served.

- A token whose nbf is in the future is now rejected. Previously nbf was
  parsed and ignored.
- iss and aud are required by the validator, not only by Claims
  deserialization.
- Cf-Access-Jwt-Assertion now takes precedence over the CF_Authorization
  cookie, and a malformed header no longer falls back to it.
- An empty JWKS or an empty application catalog aborts startup instead of
  opening the port with nothing to validate against.
- Initialization failure exits without opening the port, so a restart into
  a broken configuration is visible rather than serving denials.

Operators should note the startup change in particular: a deployment that
previously came up during a Cloudflare API outage and returned 403s will
now fail to start. Runtime is unaffected, since refresh failures still
retain the last complete state.
@nihaopaul
nihaopaul merged commit 328b1ba into main Aug 23, 2026
5 of 6 checks passed
@nihaopaul
nihaopaul deleted the release/0.5.0 branch August 23, 2026 05:50
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