fix(image): let rustup own the rust surface, and carry its channels to the builder - #318
Merged
Merged
Conversation
…o the builder Three coupled defects left b19 unbuildable and unverifiable: - The guest toolchain projection dropped `channels` and `default_channel`. The manifest named them, the manifest tests guarded them, and provision.sh still received a rustup entry with no channels, failing the build on a bare conditional with nothing on stderr. Both real builder attempts died exactly there, five minutes in. - Neither smoke script knew rustup in its toolchain sets, so a build that survived provisioning would have failed smoke on the set comparison. - The standalone rust 1.97.1 tarball promised a system toolchain the image could not keep: the rustup shims overwrite /usr/local/bin/rustc during provisioning, so the smoke expectation of `rustc 1.97.1` could never hold in the shipped image. rustup is now the single owner of the Rust surface: the manifests drop the standalone tarball, default channel 1.98.0 serves PATH callers, and the 1.89 MSRV channel rides beside it with clippy and rustfmt on both. provision.sh says what is missing instead of dying silently, both smoke scripts verify every pinned channel and the default through the shims, and the projection into the guest contract is one function with a test that fails when a field is dropped. The benchmark installer follows the image to 1.98.0. Claude-Session: https://claude.ai/code/session_01LsGid6U5RrQdFvJmvYdGCF
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.
Both live attempts to build
b19died five minutes in, at the rustup step, with an empty result and nothing on stderr. The preserved builder shows why, and it is three coupled defects, not one:guestToolchaincarried name/version/archive/sha only;channelsanddefault_channelexisted in the manifest, were guarded by manifest tests, and never reached provision.sh — whose bare[[ ${#rust_channels[@]} -gt 0 ]]then killed the build silently underset -e./usr/local/bin/rustcduring provisioning, so smoke'srustc 1.97.1expectation could never hold in the shipped image — the tarball promised a toolchain the image destroys in place.The change makes rustup the single owner of the Rust surface:
rusttarball;BakedToolchains()follows;RUSTUP_HOME/CARGO_HOME, and/etc/environment;guestToolchainFromPlan, with a test that fails when a field is dropped;make verify(fmt, vet, race, build) passes. Recipe and manifest fingerprint goldens moved with the recipe, as they should.https://claude.ai/code/session_01LsGid6U5RrQdFvJmvYdGCF