ci: pin the Rust toolchain - a floating stable turned every PR red - #387
Merged
Conversation
`ci.yml` used `dtolnay/rust-toolchain@stable`. Combined with
`cargo clippy --all-targets -- -D warnings`, that makes every future Rust
release a potential hard failure of this repository's gate, with no commit
here to cause it and nothing to point at when it fires.
It fired. Stable gained `clippy::chunks_exact_to_as_chunks`, and
tests/sha256_kat_anchor.rs uses `chunks_exact` at lines 102 and 184. The
`build + test (-sim baseline)` check now fails in 18 seconds on every pull
request, including a README-only one. `ci` on main was green as recently as
2026-08-09, so nothing in this repository changed - the ground did.
Pinned to 1.96.0 and verified by running the gate's own four commands against
that exact toolchain, not by argument:
rustc 1.96.0 (ac68faa20 2026-05-25)
cargo fmt --all --check exit 0
cargo clippy --all-targets -D warns exit 0
cargo build exit 0
cargo test exit 0, 0 failed
Bumping this is now a deliberate act with a diff, which is the point.
Deliberately NOT done here, disclosed rather than left as a surprise:
No `rust-toolchain.toml` was added. The drift-guard job runs `rustfmt` inside
this working directory to normalise both sides of its comparison, so a
toolchain file would silently change which rustfmt that gate uses. That gate
is currently red for an unrelated reason (below); changing two variables at
once on a red gate destroys the ability to tell which one moved it.
The three other workflows keep `@stable`. Each builds t27c from gHashTag/t27,
and I cannot verify here that t27c's bootstrap compiles under 1.96.0. Pinning
them on an unverified assumption would trade one floating failure for a
possible hard one.
This fixes ONE of three red required checks. The other two are pre-existing
and a Rust pin cannot reach them - both trace to the same disease this commit
treats, a floating upstream:
- `drift check` builds t27c from gHashTag/t27 at `ref: master`, and every
committed gen/rust artifact now disagrees with that compiler's output.
The fix is a regeneration wave, not a pin: the gate is doing its job.
- `GF-T spec KATs` fails with "iverilog rejected generated Verilog", also
from upstream t27c output.
So main cannot take any merge today regardless of content.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
gHashTag
force-pushed
the
ci/pin-rust-toolchain
branch
from
September 3, 2026 13:14
4d67004 to
d22b069
Compare
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.
ci.ymluseddtolnay/rust-toolchain@stable. Combined withcargo clippy --all-targets -- -D warnings, that makes every future Rust release a potential hard failure of this gate - with no commit here to cause it, and nothing to point at when it fires.It fired. Stable gained
clippy::chunks_exact_to_as_chunks, andtests/sha256_kat_anchor.rsuseschunks_exactat lines 102 and 184.build + test (-sim baseline)now fails in 18 seconds on every pull request, including a README-only one.cionmainwas green as recently as 2026-08-09, so nothing in this repository changed - the ground did.Verified, not argued
Pinned to 1.96.0 and checked by running the gate's own four commands against that exact toolchain:
Bumping the toolchain is now a deliberate act with a diff, which is the point.
Deliberately not done here
No
rust-toolchain.toml. The drift-guard job runsrustfmtinside this working directory to normalise both sides of its comparison, so a toolchain file would silently change which rustfmt that gate uses. That gate is currently red for an unrelated reason (below), and changing two variables at once on a red gate destroys the ability to tell which one moved it.The three other workflows keep
@stable. Each builds t27c fromgHashTag/t27, and I cannot verify here that t27c's bootstrap compiles under 1.96.0. Pinning them on an unverified assumption would trade one floating failure for a possible hard one.This fixes one of three red required checks
The other two are pre-existing, and a Rust pin cannot reach them. Both trace to the same disease this PR treats - a floating upstream:
build + test (-sim baseline)stable+ new clippy lintdrift check (68 specs x 3 backends)gHashTag/t27atref: master; every committedgen/rustartifact now disagrees with that compiler's outputGF-T spec KATs under Icarus Verilogiverilog rejected generated Verilog, also from upstream t27c outputmaintherefore cannot take any merge today, regardless of content - which is worth knowing independently of this PR.phi^2 + phi^-2 = 3
🤖 Generated with Claude Code