Bump cratestack to 0.6.7, and correct the aws-lc-rs claim in AGENTS.md - #117
Merged
Conversation
Picks up cratestack/cratestack#341, which resolved the issue this repo filed as cratestack/cratestack#334: cratestack-pg's install_fips_crypto_provider() returned Ok(()) while installing nothing, because crypto-aws-lc-rs was declared as an empty feature. Enabling it is now a hard compile_error! instead of a false success. Verified the fix is present in 0.6.7's vendored source rather than inferred from the version, and that 0.6.0's SQLSTATE fix has not regressed alongside it (33 cool_error_from_sqlx calls, 0 raw CoolError::Database mappings across the twelve write paths). We do not enable crypto-aws-lc-rs, so the compile_error! does not reach this workspace; the bump is behaviour-neutral here. AGENTS.md correction, which matters more than the bump. A previous revision of this file — mine — claimed aws-lc-rs reaches this tree from four independent paths including cratestack and sqlx, and that getting off it was blocked upstream. That was wrong. It came from reading `cargo tree -i aws-lc-rs`, which lists everything depending on the shared rustls rather than everything asking for aws-lc-rs; Cargo unifies features, so one rustls carries both providers' flags regardless of who requested which. `cargo tree -e features -i rustls` shows the real edges. What the sources actually say: cratestack-sqlx selects sqlx-core's _tls-rustls-ring-webpki, and cratestack-client-rust selects reqwest's rustls-tls, which in reqwest 0.12 expands to __rustls-ring. Both hard-select ring. The aws-lc-rs edge is reqwest 0.13's default features via authkestra-engine — precisely what marcjazz/authkestra#179 made opt-out-able in 0.3.3. Confirmed by experiment, not argument: setting default-features = false plus rustls-no-provider on the four authkestra pins makes `cargo tree -i aws-lc-rs` report "did not match any packages". So a static musl/scratch build or a cargo-deny policy banning aws-lc-rs is reachable today with no upstream blocker. Deliberately not done in this commit — rustls-no-provider panics at reqwest::Client::new() unless the application installs a CryptoProvider first, and that runtime path is unverified. It deserves a live TLS test, not a drive-by. Also refreshed a stale line: M1 is done (#23, #24, #25 all merged, closing #18), not still open. Verified: cargo build --workspace, fmt --check, clippy -D warnings (0), cargo test --workspace (198 passed), and the full live sweep against a real Postgres 16 — 62 passed, 1 failed. That failure is #114's kill-9 gate and is not caused by this bump: it reproduces on main at 0.6.3, passes in isolation, and its binary holds exactly one test, so it cannot be #102's within-binary cause. Filed as #116. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull Request: Bump cratestack to 0.6.7, and correct the aws-lc-rs claim in AGENTS.md
1. Summary
This PR changes:
cratestackpin from=0.6.3to=0.6.7, picking up cratestack/cratestack#341.AGENTS.mdabout whereaws-lc-rsenters this dependency tree, and replaces it with the verified mechanism plus the correct diagnostic command.provisionAppClient) #23/RBAC layers 1 and 2 #24/Gate: a persisted client_credentials client gets a token #25 merged, closing Epic: M1 — sms-auth: OIDC, service accounts, RBAC #18), not still open.It solves:
install_fips_crypto_provider()returnedOk(())while installing nothing, becausecrypto-aws-lc-rswas declared= []. #341 makes enabling it a hardcompile_error!instead of a false success.AGENTS.mdtext would have sent the next person chasing a non-existent upstream blocker.2. Intent
3. Scope
In Scope
aws-lc-rssection inAGENTS.md, including the diagnostic-command gotcha and the empirical result.Out of Scope
aws-lc-rs. Now known to be achievable with no upstream blocker (see Verification), butrustls-no-providerpanics atreqwest::Client::new()unless the application installs aCryptoProviderinmainfirst. That runtime path is unverified, so it deserves a deliberate change with a live TLS test — not a drive-by in a version-bump PR.4. Verification
I verified this change by:
Commands run:
Results:
The
aws-lc-rsclaim, tested rather than argued. Settingdefault-features = false, features = ["rustls-no-provider"]on the four authkestra pins:It leaves the graph entirely. Confirming the sources agree:
cratestack-sqlxselectssqlx-core's_tls-rustls-ring-webpki;cratestack-client-rustselectsreqwest'srustls-tls, which in reqwest 0.12 expands torustls-tls-webpki-roots→__rustls-ring. Both ring. Theaws-lc-rsedge wasreqwest 0.13's defaults viaauthkestra-engine, exactly as marcjazz/authkestra#179 described. That experiment was reverted, not shipped — see Out of Scope.The one live failure is not from this bump. #114's
kill_9_mid_submit_reclaims_and_resubmits_without_losing_the_messagefails under the full sweep and passes in isolation. It reproduces onmainat=0.6.3, so it predates this change. Filed as #116, with what I think is a decisive detail: that binary contains exactly one test, so within-binary concurrency — the cause #102 was closed on — cannot explain it. It's cross-binary interference, made sharp by #114 spawning a realsms-workersubprocess whose claim loop selects by predicate and will claim other suites' rows.5. Screenshots / Evidence
No UI. Evidence is the command output above.
6. Risk Assessment
Risk level:
Potential risks:
compile_error!would break any build enablingcrypto-aws-lc-rs.Mitigation:
errors_live_postgres.rs— the map_database_error / is_illegal_transition do not fire live: SM001 and 23505 both surface as 500 (upstream cratestack-sqlx#267) #87 tripwire that was specifically built to fail if the SQLSTATE behaviour ever regresses. That's the check that matters most across a cratestack bump, and it passes.compile_error!is the safe failure direction — it's strictly better than theOk(())it replaces, which is what #334 was about.7. AI Usage Declaration
AI was used for:
Human verification:
(Left unchecked by the assistant that opened this PR — these are human-accountability claims and can only be truthfully made by the reviewing human. Please check off what applies after your own review before merging.)
8. Reviewer Focus
Please focus your review on:
Specifically:
AGENTS.mdsection is the part worth actually reading. It now states the opposite of what it said yesterday, so it's worth confirming you agree with the reasoning rather than taking my word for the reversal — thecargo tree -e features -i rustlsoutput is the evidence.aws-lc-rssomething you want soon? It's now a small, self-contained change (authkestra feature flags + installing a ring provider inmain), gated only on a live TLS test. Happy to open it as its own issue or PR.just live-testrecipe that runs each--testtarget in turn — say the word and I'll add it.