Skip to content

chore(toolchain): align rust-toolchain.toml to fleet 1.97.1 - #65

Merged
forkwright merged 2 commits into
mainfrom
chore/align-rust-toolchain
Aug 16, 2026
Merged

chore(toolchain): align rust-toolchain.toml to fleet 1.97.1#65
forkwright merged 2 commits into
mainfrom
chore/align-rust-toolchain

Conversation

@forkwright

Copy link
Copy Markdown
Owner

Defect

rust-toolchain.toml pinned 1.85 while kanon — the control plane whose lint behaviour every
other repo inherits — pins 1.97.1. Measured across fifteen fleet repos: five distinct toolchain
values plus four repos with no pin at all (kanon#3489). A repo pinned at 1.85 and one floating on
stable do not compile the same language: a lint stabilised after 1.85 fires in one and is inert
in the other, so "green here" silently stops meaning the same thing across the fleet.

Change

  • rust-toolchain.tomlchannel = "1.85" -> "1.97.1", matching kanon's shape exactly
    (channel + components = ["rustfmt", "clippy"]).
  • Two stray restatements of the old pin, both now stale against the new SSOT, updated so they
    don't silently drift again:
    • .github/workflows/gate-attestation.yml:19 — a comment literally quoted channel "1.85";
      dropped the restated value rather than writing a second copy of the new one.
    • AGENTS.md:44 — the worked example told a committer to write Gate-Passed: kanon-ci/local 1.85, which is this repo's own convention for that trailer (confirmed against prior commits,
      e.g. e478aaf carries exactly that form with the toolchain version as the payload) — an
      unpatched example would tell the next committer to stamp a truthful-trailer requirement with a
      false version. Bumped to 1.97.1.
  • crates/sylloge/src/freshness.rs — see "Bump fallout" below.

Cargo.toml's rust-version = "1.85" (MSRV) is deliberately left untouched — kanon itself keeps
its own rust-version (1.94) decoupled from its rust-toolchain.toml pin (1.97.1), so MSRV and
CI-toolchain pin are established as two separate facts on the fleet, and bumping MSRV is a
separate, more consequential decision (raises the floor for downstream consumers) not in scope
here.

Bump fallout

Moving 1.85 -> 1.97.1 surfaced exactly one new lint under -D warnings:
clippy::derivable_impls on crates/sylloge/src/freshness.rs:92, impl Default for FreshnessPolicy. This is a real, true finding, not a preference — the hand-written impl was a
pure single-arm mapping (Strict) that clippy can generate directly. Fixed by taking clippy's own
suggested rewrite: #[derive(Default)] on the enum, #[default] on the Strict variant, manual
impl removed. Behavior-identical — FreshnessPolicy::default() still returns Strict; the
existing freshness_policy_defaults_to_strict test (already present in the same file) exercises
the same fact both before and after and stayed green throughout. No #[expect]/#[allow] used
anywhere — the lint was correct, so it was fixed, not suppressed.

Verification

metis (this box) runs rustc 1.94.0, older than the 1.97.1 pin, so it cannot build against this
toolchain at all (wrong-compiler or forced-download either way), and separately sits at 1-min load
12-20 against a 7.2 vgate admission limit tonight — no local build was attempted here. Gated on
verda-build instead, which runs 1.97.1 as its stable, via ~/gate-repo.sh zetesis chore/align-rust-toolchain (two runs: the first caught the derivable_impls lint above before the
fix, the second is the log this cites).

cargo fmt --check, cargo check --workspace, cargo clippy --workspace --all-targets -- -D warnings, and cargo nextest run --workspace (232/232 passed, 0 skipped) are all clean on
1.97.1 as of the second run.

No Gate-Passed trailer on this PR — noted rather than left implicit. The local full gate
(kanon gate --tier full --stamp) still reports GATE FAILED 1 step(s) failed: kanon lint, but
that step fails on 0 errors / 5 pre-existing warnings unrelated to this diff (unpinned GitHub
Action, two prose findings, two architecture findings) that predate this branch and exist
unchanged on origin/main. Fixing them is prose + CI-pinning + two architecture calls with no
relation to a version-pin change, so it isn't bundled into this PR — evidence posted to kanon#3489
instead of opened as a new issue (mechanical class, existing tracker). This means the fast
trailer-path on CI won't apply; the real fallback build (fmt/check/clippy/nextest via
hybrid-gate.yml) is what grades this PR, and it's exactly what was just run and verified clean
above.

Negative fixture: none added. This is a version-pin correction plus one clippy-suggested
derive-mechanical rewrite — no new runtime behavior or check, so no negative fixture applies.
Noted explicitly rather than leaving the line out.

Acceptance criteria (kanon#3489, zetesis's line item)

  • rust-toolchain.toml moved from 1.85 to 1.97.1rust-toolchain.toml:2.
  • Shape matches kanon's file (channel + components = ["rustfmt", "clippy"]) —
    rust-toolchain.toml:1-3.
  • Fleet gate run on the actual pinned toolchain (verda-build, rustc 1.97.1), not asserted
    locally — fmt/check/clippy/nextest all verified clean; see "Verification" above for the
    kanon lint-step caveat (pre-existing, unrelated, tracked separately).
  • Fallout from the bump fixed properly, not suppressed — clippy::derivable_impls, see "Bump
    fallout" above.

Refs kanon#3489

forkwright added 2 commits August 15, 2026 22:37
zetesis pinned 1.85 while kanon (the control plane whose lint behaviour
every other repo inherits) pins 1.97.1, so the two repos did not compile
the same language -- a lint stabilised after 1.85 fires in one and is
inert in the other. Matches kanon's shape (channel + rustfmt/clippy
components). Also updates the two stray restatements of the old pin
(gate-attestation.yml comment, AGENTS.md's example Gate-Passed trailer)
so neither goes stale against the new SSOT.

Refs kanon#3489
…g it

clippy::derivable_impls newly fires under 1.97.1 (it did not on the 1.85
pin this repo carried before): the manual `impl Default for
FreshnessPolicy` was a pure single-arm mapping clippy can generate
directly via `#[derive(Default)]` + `#[default]` on the `Strict` variant.
No behavior change -- `FreshnessPolicy::default()` still returns
`Strict`. Applied clippy's own suggested rewrite rather than suppressing
the lint, since it is correct about this impl.

Refs kanon#3489
@forkwright
forkwright merged commit cc12295 into main Aug 16, 2026
8 checks passed
@forkwright
forkwright deleted the chore/align-rust-toolchain branch August 16, 2026 04:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant