docs(stripe): say why async-stripe is pinned to a candidate - #83
Merged
Conversation
Checked upstream on 2026-08-14 rather than upgrading on impression. 1.0.0-rc.8 is still the newest thing published: crates.io's sparse index for async-stripe ends there, published 2026-08-05T15:54:50Z, and the same is true of async-stripe-core, -shared and -types. There is no 1.0.0 and no rc.9. rc.9 exists only as arlyon/async-stripe#948, release-plz's standing release PR opened 2026-08-05 and untouched since; every crate's entry in it reads "Other: release v1.0.0-rc.8", so it carries no functional change. master is three commits ahead of the async-stripe-v1.0.0-rc.8 tag and all fifteen changed files are CHANGELOG.md — not one line of Rust has moved upstream since the release. So upgrading costs nothing because there is nothing to upgrade to. The exact pin stays because a candidate is not additive. rc.6 -> rc.7 changed 265 files, among them payment_intent/requests.rs at +2031/-179 and stripe_shared::PaymentIntent, which gained a public field (allowed_payment_method_types) — a struct-literal break for anyone building one. rc.7 -> rc.8 by contrast changed one Rust file, the client's retry strategy. Upstream's own README pins the same way ("=1.0.0-rc.5", itself three candidates behind), which is the practice rather than the number. The looser middle option was considered and is worse than either end: a caret requirement on a prerelease admits rc.9..rc.N and 1.0.0 alike, so it relaxes the part that can break silently in a caller's build while buying nothing that a released 1.0.0 would not buy anyway. What is left is a caller-visible constraint that 0.0.1 shipped without saying, so it is said now, in the crate documentation where a caller reads it. Closes #11
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.
Closes #11.
#11 asked whether
=1.0.0-rc.8should still be the pin. Checked rather thanassumed, on 2026-08-14. The answer is yes, and the deliverable is the answer
written down where it will be read.
What upstream has done since rc.8
Nothing that reaches this crate.
https://index.crates.io/as/yn/async-stripeends at1.0.0-rc.8, published2026-08-05T15:54:50Z.
async-stripe-core,-sharedand-typesend atthe same version. There is no
1.0.0, no1.0.0-rc.9.release PR, opened 2026-08-05T15:57 and last touched 2026-08-05T16:02. Every
crate's changelog entry in it reads
Other: release v1.0.0-rc.8— it isversion-bump bookkeeping with no functional change behind it.
async-stripe-v1.0.0-rc.8...masteris three commits ahead and all fifteenchanged files are
CHANGELOG.md. Not one line of Rust has moved upstreamsince the release.
are eight, the newest being a stack overflow in
EventObject::from_raw_dataon rc.8 — the webhook parser, which this cratedoes not use.
So the cost of upgrading is not "small". There is nothing to upgrade to.
Why the pin stays exact
A candidate is not additive in the modules this crate builds on.
payment_intent/requests.rs+2031/-179;stripe_shared::PaymentIntentgained a public fieldallowed_payment_method_types— a struct-literal break for anyone constructing oneUpstream's own README pins the same way —
async-stripe = "=1.0.0-rc.5",itself three candidates behind what they have released. The practice is the
recommendation there; the number is not.
The looser middle was considered and is worse than either end. A caret
requirement on a prerelease (
"1.0.0-rc.8") admits rc.9…rc.N and 1.0.0alike, so it relaxes the half that can break silently in someone else's build
while buying nothing a released 1.0.0 would not buy anyway.
>=rc.8, <1.0.0is the same trade with the upside removed.
What is in the diff
The constraint is caller-visible and 0.0.1 shipped without saying it, so:
crates/kasapay-stripe/src/lib.rs— a Whichasync-stripesection: theversion, why it is pinned, and what it costs (a crate depending on
async-stripeitself must be on the same candidate, because two exact pinsat different candidates do not resolve together;
Stripe::clientis there sothat reaching past what this crate models needs no second dependency).
Cargo.toml— the comment over the four pins now says what would change it,and is a line shorter than what it replaces.
CHANGELOG.md— the same, under Unreleased, for whoever upgrades.No version was changed, so nothing here can break a build. The next move is
upstream's:
1.0.0ships, the pin becomes a range, and that is a release.🤖 Generated with Claude Code