fix(toolchain): build on stable rather than nightly - #266
Merged
Conversation
added 2 commits
August 15, 2026 15:26
Nothing here requires nightly: there is no `#![feature(...)]` anywhere in the crates, and rustfmt.toml declares only `edition = "2024"`. The channel was nevertheless nightly, which both CI and every local checkout inherited. That is gratuitous instability for a released library. Nightly moves daily, so a build can go red from a compiler change with no commit of ours behind it -- and this repo's scheduled Security workflow has been failing intermittently. Stable also matches the consuming workspace: aletheia pins a stable channel and builds these crates from a git dependency, so the library was being developed on a different compiler from the one that ships it.
The nightly channel was hiding one lint: an inner `if` inside a match arm that stable's collapsible_match flags. Expressed as a match guard instead. Behaviour is unchanged. A NUL-bearing id previously matched the arm and the inner condition skipped the assignment; it now falls through to the ignore arm and is discarded there. Either way the value is not stored, which is what the WHATWG SSE spec requires.
forkwright
pushed a commit
that referenced
this pull request
Aug 16, 2026
🤖 I have created a release *beep* *boop* --- ## [1.6.2](v1.6.1...v1.6.2) (2026-08-16) ### Bug Fixes * **toolchain:** build on stable rather than nightly ([#266](#266)) ([9906675](9906675)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
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.
Finding
rust-toolchain.tomldeclaredchannel = "nightly", which both CI and every local checkout inherit. Nothing in the repo requires it:#![feature(...)]anywhere undercrates/rustfmt.tomldeclares onlyedition = "2024"— no nightly-only formatting optionscargo +nightlyinvocation in any workflowMeanwhile the consuming workspace, aletheia, pins a stable channel and builds these crates from a git dependency. So the library was being developed and CI'd on a different compiler from the one that actually ships it.
Why it matters beyond tidiness
Nightly moves daily. A library on it can go red from a compiler change with no commit of ours behind it, and this repo's scheduled
Securityworkflow has been failing intermittently — 6 of the last 20 scheduled runs at the time of writing.It also means a lint regression is indistinguishable from a real defect, because the baseline moves under you.
What the switch actually exposed
Exactly one thing, and it was not a language feature:
crates/keryx/src/sse.rs:177had an innerifinside a match arm that stable'scollapsible_matchflags and the pinned nightly did not. So the channel was not buying a capability — it was hiding a lint.Fixed by expressing it as a match guard. Behaviour is unchanged: a NUL-bearing SSE
idpreviously matched the arm and the inner condition skipped the assignment; it now falls through to the ignore arm and is discarded there. Either path discards it, which is what the WHATWG SSE spec requires, and the rationale stays in the comment.Verification
cargo clippy --workspace --all-targets --keep-going -- -D warningson the stable toolchain: exit 0, whole workspace.Done when:CI runs on stable and the scheduled Security workflow's failures, if they persist, can no longer be attributed to compiler churn.