From ec4775eee046d570005352a654e1bd78c138b2ea Mon Sep 17 00:00:00 2001 From: "Claude Fable 5.1 (claude-fable-5-1)" Date: Mon, 5 Oct 2026 21:44:49 +0200 Subject: [PATCH] ci(build): pin the Rust toolchain to 1.98.1 Rust 1.99.0 reached stable on 2026-10-01 with clippy::assert_is_empty, which the crate's pedantic set turns into an error at about 80 existing assert!(x.is_empty()) sites. The Build workflow installed stable through dtolnay/rust-toolchain and started failing every pull request that day. One RUST_TOOLCHAIN value in build.yaml now names the release that every job installs, the scaffold job included, because its make validate runs cargo clippy too. A Rust release moves the checks only when the bump and its clippy sweep land together. The quality workflow uses the runner image's Rust and is unchanged. Co-Authored-By: Martin Zeman --- .github/workflows/build.yaml | 17 +++++++++++++++++ CHANGELOG.md | 1 + 2 files changed, 18 insertions(+) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index c2897b5c..19f8692f 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -10,6 +10,13 @@ on: pull_request: branches: [main] +# The Rust release the checks run on. A new stable can add lints that fail +# the crate, so the version moves on purpose, together with the clippy +# sweep that release needs. The quality workflow uses the runner image's +# Rust and does not read this value. +env: + RUST_TOOLCHAIN: "1.98.1" + jobs: build: runs-on: ubuntu-latest @@ -20,6 +27,7 @@ jobs: - uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 # stable with: + toolchain: ${{ env.RUST_TOOLCHAIN }} components: rustfmt, clippy - name: Build @@ -40,6 +48,7 @@ jobs: - uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 # stable with: + toolchain: ${{ env.RUST_TOOLCHAIN }} components: clippy - name: Install mdschema @@ -66,6 +75,7 @@ jobs: - uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 # stable with: + toolchain: ${{ env.RUST_TOOLCHAIN }} components: rustfmt, clippy - name: Download rune @@ -100,6 +110,13 @@ jobs: with: persist-credentials: false + # `make validate` in the generated project runs cargo clippy, so + # this job pins the same release as the others. + - uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 # stable + with: + toolchain: ${{ env.RUST_TOOLCHAIN }} + components: rustfmt, clippy + - name: Download rune uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 with: diff --git a/CHANGELOG.md b/CHANGELOG.md index 54ba7aa0..461517ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -136,6 +136,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/). ### Changed +- Pin the Build workflow to Rust 1.98.1 through one `RUST_TOOLCHAIN` value, so a new stable release cannot fail main until its clippy sweep lands with the bump. - Run the Vale hook with `--no-global`, so the guarded gate reads the repository's style alone and a rule in the machine's global config cannot fail or mask it. - Rename `rune run --clean-harness-state` to `--clean`, and the JSON field to `clean`. The old spelling and the `_scope` field are gone. - Change the `rune sign` notification to carry the runedeck.ai mark, a subtitle, and a sound through `terminal-notifier` or `alerter` on macOS and `notify-send` elsewhere.