chore(deps): upgrade authkestra 0.3.4 -> 0.5.1 - #9
Conversation
Bumps all four authkestra-* exact-version pins (op, engine, axum, resource) in lockstep, keeping the existing pinning discipline (pre-1.0, fast-moving upstream per the root Cargo.toml's own comment). Read every per-crate CHANGELOG.md across 0.3.4..0.5.1 and diffed the actual API surface vpay touches against the tagged upstream sources: - PR #191 added OpStore::handle_refresh_token/handle_token_exchange as *defaulted* trait methods (mirroring the existing handle_custom_grant seam). vpay does not implement OpStore itself -- it uses the crate's own SqlxOpStore -- and sqlx_store.rs/client_assertion.rs/error.rs are byte-for-byte unchanged between 0.3.4 and 0.5.1, so this required no code change. - PR #190 (Ed25519/EdDSA signing, RFC 8037 OKP JWKS) widened authkestra_engine::token::jwk::Jwk with two new fields (crv, x). This is what actually broke compilation: resource_auth.rs's test-only RSA Jwk fixture is a struct literal, so it needed the two new fields added (both None -- vpay only builds RSA keys today). - 0.5.0 added an optional `redis` feature to authkestra-op (a new RedisClientAssertionStore) -- not enabled, no effect. - authkestra-resource and authkestra-axum carry no functional changes in this range; their version bump is a workspace-version lockstep bump only (release-plz). cargo build/clippy/fmt/deny(bans+licenses+sources) all clean; no aws-lc-rs/aws-lc-sys re-entered the graph. cargo nextest run --workspace: 139 passed (1 pre-existing benign leak flag, unrelated to this change), 3 skipped -- same as before the bump, including the Postgres/testcontainers-backed authkestra_op_smoke suite that exercises SqlxOpStore against real Postgres. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
|
CI status on this branch (run 32117462209):
The three failures are pre-existing and unrelated to this dependency bump, not something this PR introduced:
Local verification for the actual change (build/clippy/fmt/deny-minus-advisories/nextest, plus a live boot smoke test) is in the PR description above and all passed before this push. Left for a human/separate PR, out of scope here: fixing the |
Summary
Bumps all four
authkestra-*exact-version pins inCargo.toml(authkestra-op,authkestra-engine,authkestra-axum,authkestra-resource) from0.3.4to0.5.1in lockstep, per the pinning discipline the rootCargo.toml's own comment already documents ("pre-1.0, fast-moving; the whole family must move in lockstep").Source of truth: ADR-0009 (vpay runs Authkestra as its own OP — the reason these crates are pinned at all), cross-checked against upstream's own per-crate changelogs and tagged sources at https://github.com/marcjazz/authkestra (real upstream, not a fork; confirmed
isFork: false).0.5.1(tagged 2026-08-15) is genuinely the latest release for every one of the four crates as of this PR.Scope
Read every per-crate
CHANGELOG.mdacross the full0.3.4..0.5.1range (not just the two flagged landmarks) and diffed the actual tagged sources against0.3.4for the API surface vpay touches (crates/authkestra-op/src/{client_assertion,error,sqlx_store,store}.rs,crates/authkestra-resource/src/jwt.rs,crates/authkestra-engine/src/token/{mod,jwk}.rs), not just the changelog prose:OpStore::handle_refresh_token/handle_token_exchange) added two defaulted trait methods mirroring the pre-existinghandle_custom_grantseam — confirmed by diffingcrates/authkestra-op/src/store.rsbetween the two tags. vpay does not implementOpStoreitself; it uses the crate's ownSqlxOpStore(backends/tests/integration/tests/authkestra_op_smoke.rs), andsqlx_store.rs,client_assertion.rs, anderror.rsare byte-for-byte identical between0.3.4and0.5.1(emptygit diff). No code change required here.authkestra_engine::token::jwk::Jwkwith two new fields (crv,x), re-exported asauthkestra_resource::jwt::Jwk. This is what actually broke compilation (cargo clippy --all-targets, not caught by a barecargo build):resource_auth.rs's test-only RSAJwkfixture is a struct literal, so it neededcrv: None, x: Noneadded — bothNonefor the RSA-only shape vpay builds today. One-line-per-field fix, no behavior change.0.5.0added an optionalredisfeature toauthkestra-op(a newRedisClientAssertionStore) — not enabled by vpay, no effect.authkestra-resourcecarries no functional changes in this range (its ownCHANGELOG.mdshows nothing past0.3.4);authkestra-axumlikewise (nothing past0.3.4in its changelog, and it isn't even a real dependency edge yet — declared in[workspace.dependencies]but not consumed by any member crate, confirmed absent fromCargo.lockbefore and after). Both crates' version bump to0.5.1is a workspace-version lockstep bump only (release-plz stamps every crate in the workspace with the same version on each release, whether or not that crate's own files changed).No opportunistic changes: no new authkestra features adopted, no unrelated cleanup.
Verification
cargo build --workspace— clean.cargo clippy --workspace --all-targets -- -D warnings— clean (this is what caught theJwkliteral breakage;cargo buildalone did not, since it doesn't compile test targets).cargo fmt --all -- --check— clean.cargo deny check bans licenses sources— clean (bans ok, licenses ok, sources ok); confirmedaws-lc-rs/aws-lc-sysdid not re-enter the graph (cargo tree -i aws-lc-rs/-i aws-lc-sys: no match, both before and after). Theadvisoriescheck itself could not run in this sandbox (no network access togithub.com/RustSec/advisory-db) — the existingRUSTSEC-2023-0071(rsa, unpatched) ignore entry indeny.tomlis unaffected by this bump either way.cargo nextest run --workspace: 139 passed (1 pre-existing benignLEAKflag on an unrelated adapter test), 3 skipped — identical counts to the pre-bump baseline. This genuinely includes the Docker/testcontainers-backed suites, not just in-process unit tests:vpay-tests-integration::authkestra_op_smoke::sqlx_op_store_round_trips_a_client_and_enforces_single_use_codesdrives the realSqlxOpStore<Postgres>against a live Postgres 16 container (client lookup, JSONB decoding, single-use code enforcement), andvpay-tests-integration::postgres_smoke(13 tests) +vpay-db::postgres/vpay-db::repositories(6 tests, including client-assertion replay and signing-key rotation) all ran against real containers too — visible container-startup latency in the run, not a mocked-out skip.Auth path coverage, named honestly:
vpay-api::resource_auth(11 tests) exercises real RSA sign/verify round-trips throughauthkestra_resource::jwt::{JwksCache, validate_jwt_generic}— valid/expired/wrong-key/wrong-audience/missing-aud/unknown-kidtokens, bothSurface::MerchantandSurface::Dashboard.authkestra_op_smokeexercisesSqlxOpStore'sfind_client/store_code/consume_code. What is genuinely NOT covered: neitherOpStore::handle_refresh_tokennor token issuance/refresh over HTTP, because no shipping binary mounts/dash/v1or/v1yet (docs/status.md's own 🟡 rows say so) — there is no live OP token endpoint in this repo today for either PR #191's new seam or the pre-existing refresh grant to run against. This bump doesn't change that gap; it just confirms it's the same defaulted-behavior codepath either version.Live smoke run: real Postgres 16 container +
cargo run -p vpay-serveragainstconfig/application.yml(the repo's realistic example config, including one merchant OAuth client and the dashboard OAuth client — exercisingvpay_config::oauth's validated shape). Booted clean:curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:18080/healthz→200. Clean shutdown, container removed after.cargo build --workspaceclean.cargo clippy --workspace --all-targets -- -D warningsclean.cargo fmt --all -- --checkclean.cargo deny check bans licenses sourcesclean; advisories check unavailable offline (documented above, not silently skipped).cargo nextest run --workspace: 139 passed / 3 skipped, same as baseline, DB-backed and testcontainers suites confirmed to have genuinely run (not silently skipped).Live boot +
/healthz200 against a real Postgres container with the repo's realistic example config.Risk Assessment
Low. The two changelog-flagged landmarks (PR #190, #191) both turned out to be additive/defaulted for vpay's actual usage — verified by diffing tagged sources, not inferred from changelog prose alone. The one real breakage (
Jwk's two new fields) is a test-fixture-only compile error with no runtime behavior implication, fixed by adding twoNonefields. No behavioral change to token issuance, refresh, or JWKS output was found or introduced — there is no live code path in this repo yet that issues, refreshes, or validates a token against a real OP, so there was nothing to regress there.authkestra-axumis bumped but remains an unused workspace-dependency declaration (not a real edge inCargo.lock), so it carries zero build/runtime risk either way.Left out deliberately, not silently: no attempt to adopt the new
Ed25519signing path,RedisClientAssertionStore, or thehandle_refresh_token/handle_token_exchangeoverride seams — all out of scope for a version bump per the task brief, and none of them are needed until the OP is actually wired to a route (tracked indocs/status.md, unchanged by this PR).docs/status.md's existing prose narrating the0.3.4pin (e.g. "this migration is pinned toauthkestra-op = "=0.3.4"... any future version bump requires re-readingsqlx_store.rs'smigrate()block") is left as the historical record of that pass rather than edited in place, consistent with how this doc already treats past passes' claims (correcting forward with new dated notes, not rewriting history) — re-readingsqlx_store.rsat0.5.1is exactly what this PR did, and it's byte-for-byte unchanged, so the coupling that row warns about still holds.AI Usage Declaration
AI (Claude Sonnet 5 via Claude Code) performed this upgrade: read every per-crate
CHANGELOG.mdfrom0.3.4to0.5.1against a freshlygit fetch --tags'd local checkout of upstream (/Users/selast/dev/authkestra, read-only), diffed the actual API surface vpay touches at the source level rather than trusting changelog summaries, bumped the pins, fixed the one real compile break, and ran the full local verification suite (build/clippy/fmt/deny/nextest) plus a live boot smoke test.Reviewer Focus
Jwkfixture fix inbackends/crates/vpay-api/src/resource_auth.rs— confirmcrv: None, x: Noneis the right (only) fix and doesn't mask something more meaningful.OpStoreseam claim — confirm the reasoning that vpay's exclusive use of the crate-providedSqlxOpStore(never a customOpStoreimpl) means PR #191's new defaulted trait methods needed no code change here.github.com/RustSec/advisory-dbin this sandbox) is acceptable to merge on, or should be re-run with network access before merging.🤖 Generated with Claude Code