You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
First real exercise of the #301 bump factory, using release candidates as the comparison vehicle rather than throwaway builds. Maintainer's proposal, and it is a better design than what #301 sketched.
Why RCs are the right vehicle
#301 described building the same source twice and diffing posture. Doing that with actual RCs buys several things a scratch build cannot:
both artifacts go through the real release path — signed, attested, BinSkim-gated, caps-gated — so the comparison is between two things we would actually ship, not two lab specimens
both are published and durable, so the diff is reproducible later by anyone, not a transient log
it exercises the release pipeline against a new toolchain before a real release depends on it, which is the cheapest possible place to discover a codegen or hardening regression
The pair
toolchain
purpose
v0.3.2-rc.2
nightly-2026-07-23 (current pin, age 33d)
control — isolates the toolchain as the only variable
v0.3.2-rc.3
latest nightly (2026-08-25 at time of writing)
candidate
v0.3.2-rc.1 (2026-08-21) is NOT the control: it predates the tool-fleet hardening (#306) and the caps/hardening ratchet, so it differs in more than the toolchain. A fresh rc.2 on the current pin is what makes this a clean A/B.
BinSkim rule dispositions — full --kind Fail Pass Review Open NotApplicable SARIF is already produced for both; BA2006 BuildWithSecureTools encodes the toolchain/linker version and the security features it emitted, so it is the single most direct evidence of a codegen posture change.
Per #301's governing rule: auto-fail on any axis, but never auto-promote. A fully-green candidate stops for maintainer sign-off, because "no axis objected" is the precondition for a decision, not the decision. Adopting the new toolchain means editing app/rust-toolchain.toml in a reviewed PR — merge is the promotion mechanism.
Prerequisite worth respecting
#301 argues TOOLCHAIN.lock (manifest-digest verification before rustup install) should land first, so the candidate channel is bytes rather than a name. Doing the A/B before that is still useful — it exercises the comparison machinery — but the candidate's provenance is weaker than the control's until it lands, and that limitation should be stated in whatever evidence this produces rather than glossed.
maintainer sign-off, then a reviewed rust-toolchain.toml bump
Related: #301 (factory), #267 (TOOLCHAIN.lock + advisories), #299 (hardening ratchet), #245 (caps), #307 (signing/reputation), #209 (REPRODUCIBLE.md records exact toolchain per release — the natural place to write the comparison down).
First real exercise of the #301 bump factory, using release candidates as the comparison vehicle rather than throwaway builds. Maintainer's proposal, and it is a better design than what #301 sketched.
Why RCs are the right vehicle
#301 described building the same source twice and diffing posture. Doing that with actual RCs buys several things a scratch build cannot:
The pair
nightly-2026-07-23(current pin, age 33d)2026-08-25at time of writing)v0.3.2-rc.1(2026-08-21) is NOT the control: it predates the tool-fleet hardening (#306) and the caps/hardening ratchet, so it differs in more than the toolchain. A fresh rc.2 on the current pin is what makes this a clean A/B.What gets diffed (all machinery already exists)
xtask toolchain-advisories --channel <each>(harden(#267): toolchain vuln axis — Rust Security Response WG advisory watcher #298). Fail-closed; the candidate must be clean before anything else matters.hardening(harden(#267): ratchet codegen hardening posture in the caps manifest #299). A toolchain that silently drops CFG or changes the CRT surface shows up here as a manifest violation, which is the entire point of the ratchet.--kind Fail Pass Review Open NotApplicableSARIF is already produced for both; BA2006 BuildWithSecureTools encodes the toolchain/linker version and the security features it emitted, so it is the single most direct evidence of a codegen posture change.Gate
Per #301's governing rule: auto-fail on any axis, but never auto-promote. A fully-green candidate stops for maintainer sign-off, because "no axis objected" is the precondition for a decision, not the decision. Adopting the new toolchain means editing
app/rust-toolchain.tomlin a reviewed PR — merge is the promotion mechanism.Prerequisite worth respecting
#301 argues TOOLCHAIN.lock (manifest-digest verification before
rustup install) should land first, so the candidate channel is bytes rather than a name. Doing the A/B before that is still useful — it exercises the comparison machinery — but the candidate's provenance is weaker than the control's until it lands, and that limitation should be stated in whatever evidence this produces rather than glossed.Sequencing
rust-toolchain.tomlbumpRelated: #301 (factory), #267 (TOOLCHAIN.lock + advisories), #299 (hardening ratchet), #245 (caps), #307 (signing/reputation), #209 (REPRODUCIBLE.md records exact toolchain per release — the natural place to write the comparison down).