fix: honor the declared Rust 1.63 MSRV - #71
Open
kkdao wants to merge 2 commits into
Open
Conversation
`bdk_sp` declares `rust-version = "1.63"`, but `encoding::error` implements `core::error::Error`, which was only stabilized in Rust 1.81. Building the published crate on 1.63 fails with six E0433 "could not find `error` in `core`" errors, so the declared MSRV is not met. The crate is not `no_std` and already links `std`, and the other error modules (`receive::error`, `send::error`) implement `std::error::Error` already. Using `std::error::Error` here matches them and restores a 1.63 build.
CONTRIBUTING.md claimed the 1.63 MSRV was enforced by CI, but no job pinned it: `rust.yml` only tested stable and coverage runs on nightly. That is how the `core::error::Error` regression reached a release. Cargo 1.63 cannot parse the workspace root, so the check cannot simply run from it. `profile.mutants` uses the string form of `debug`, and sibling members inherit `authors` from `[workspace.package]`, which Cargo stabilized in 1.64. Since `bdk_sp` is the only crate declaring an MSRV, package it with a current Cargo and check the result in isolation. That is also the shape consumers get from crates.io, so it tests what they actually build. The check covers the library only; dev-dependencies are not held to the MSRV.
kkdao
force-pushed
the
fix/msrv-core-error
branch
from
August 21, 2026 21:36
8d9765f to
a8523ae
Compare
kkdao
marked this pull request as draft
August 21, 2026 21:48
kkdao
marked this pull request as ready for review
August 21, 2026 21:56
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.
Description
Fixes #69
bdk_spdeclaresrust-version = "1.63"but implementscore::error::Error, which needs 1.81, so the crate fails to build on its own MSRV with sixE0433errors. No CI job pinned it.Switches those six to
std::error::Errorand adds a CI job that checks 1.63.Notes to the reviewers
The crate isn't
no_stdand already linksstd, andreceive::errorandsend::errorusestd::error::Erroralready, so this matches what's there rather than adding a convention.Checked on pinned toolchains with the committed lockfile: 1.63 fails before, builds after, 1.81 builds either way. I confirmed the library actually builds on 1.63 rather than just that the six errors went away.
The job can't run from the workspace root — Cargo 1.63 can't parse it.
[profile.mutants]uses the string form ofdebug, and five members inheritauthorsfrom[workspace.package], which needs Cargo 1.64. Sincebdk_spis the only crate declaring an MSRV, the job packages it and checks it in isolation, which is also what consumers get from crates.io. Library only; dev-dependencies aren't held to the MSRV.Happy to raise
rust-versionto 1.81 instead if you'd rather — only the pinned version would change.Changelog notice
Fixed:
bdk_spdid not build on its declared MSRV of Rust 1.63, becauseencoding::errorusedcore::error::Error.Checklists
All Submissions:
just p(fmt, clippy and test) before committingBugfixes: