From aa802bc40c5b25f688d7af18b5466819ed678fdd Mon Sep 17 00:00:00 2001 From: Andrew Bryant Date: Fri, 23 Oct 2026 19:01:42 -0400 Subject: [PATCH] Add an advisory CI job on latest stable Pinning CI meant a future Rust release could break the build without anyone noticing until the pin moved. This job tracks latest stable and runs the test suite and clippy, so that breakage is visible early. Marked `continue-on-error`, so it reports rather than gates: a new clippy lint landing in stable should not fail a pull request that did not cause it. The pinned `test` job remains the gate. Note that GitHub renders a `continue-on-error` job as passing with an annotation rather than as failed. If it should be more visible, make it a required check and drop the flag. Co-Authored-By: Claude Opus 5 --- .github/workflows/ci.yml | 16 ++++++++++++++++ CHANGELOG.md | 4 +++- CLAUDE.md | 7 +++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c08767e..9359f3d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,3 +34,19 @@ jobs: # and pinning those to the oldest supported toolchain is not useful. - uses: dtolnay/rust-toolchain@1.88.0 - run: cargo test + + stable: + name: Latest stable (advisory) + runs-on: ubuntu-latest + # Advisory only. The pinned `test` job is the gate; this one exists so + # that a new stable release breaking the build or firing a new clippy + # lint is visible before the pin moves, without failing a pull request + # that did not cause it. Check it when bumping `devVersion`. + continue-on-error: true + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + with: + components: clippy + - run: cargo test + - run: cargo clippy --all-targets -- -D warnings diff --git a/CHANGELOG.md b/CHANGELOG.md index bf8b4b9..4597efc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - A declared minimum supported Rust version of **1.88**, verified by running the test suite against it. The floor comes from the dependency graph (`reqwest` → `url` → `idna` → `icu_*`), not from this crate's own code. - CI builds on both the MSRV and the pinned dev toolchain. + CI builds on both the MSRV and the pinned dev toolchain, plus an advisory + job on latest stable that reports breakage from a new Rust release + without gating pull requests. - Wrappers for every one of the API's 34 `Route::resource` groups, plus `users` — 265 methods. See `COVERAGE.md` for the per-endpoint inventory. - `COVERAGE.md`, a detailed record of what is wrapped, what is not, and why, diff --git a/CLAUDE.md b/CLAUDE.md index 03bdb09..d20be02 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -23,6 +23,13 @@ Two versions are pinned, and **three places must agree** when either moves: | Dev toolchain | 1.99.1 | `devVersion` in `flake.nix`, `test` job in `ci.yml` | | MSRV | 1.88 | `msrvVersion` in `flake.nix`, `rust-version` in `Cargo.toml`, `msrv` job in `ci.yml` | +CI has a third job, `stable`, which tracks latest stable and is marked +`continue-on-error`. It is **advisory, not a gate**: it exists so a new +Rust release that breaks the build or fires a new clippy lint shows up +before the pin moves, without failing a pull request that did not cause it. +Check it when bumping `devVersion` — if it is red, the bump needs work +first. Nothing needs to stay in sync with it. + The MSRV is set by the **dependency graph**, not by this crate's code: `reqwest` pulls in `url` → `idna` → `idna_adapter` → `icu_*`, and the `icu` crates require 1.88. Recheck the floor after a dependency bump with: