Repository navigation
Make Whitaker installation binary-only and immutable #499
Description
Problem
The Rust baseline train for leynos/cuprum cannot bind its Whitaker gate to an immutable, binary-only toolchain through the current install-whitaker action.
Cuprum pins leynos/shared-actions@c5a54701c8603a0fa756a6b34c49bc2af75a6c11 and installer version 0.2.7. The action downloads and checksum-verifies the tagged installer archive and has no action-level source fallback. The installed Whitaker, however, can fall back to local compilation when a prebuilt suite or dependency binary is absent or rejected:
- Whitaker
v0.2.7resolves to2bc0c3fafb86914f14bd73461a511588841f0a34. installer/src/prebuilt.rsmaps prebuilt-suite failures toFallback.installer/src/deps/install.rsfalls back from release assets tocargo binstall, thencargo install --locked.- The CLI offers
--build-only, but no binary-only or fail-on-fallback mode.
Suite provenance is also mutable. Version 0.2.7 downloads the suite from the GitHub rolling release. At inspection time that release resolved to 1aa59f0e02c69f04407d389c673e15a0e7d9d09b, nightly 2026-05-28, with Linux x86_64 archive SHA-256 f0ef6da458c493a8dee0d1d7118b529374260730aeeca25062780cd67c3335c7. The shared-action cache key contains the installer version and dylint.toml hash, but no suite revision or manifest/archive digest.
A successful consumer job can therefore build from source or reuse a cached suite from a different rolling revision. That violates the estate's binary-only CI policy and prevents a repository from recording one reproducible Whitaker rule-suite revision.
Acceptance criteria
- Provide a fail-closed binary-only installation mode covering the Whitaker suite and every dependency binary; no
cargo install,cargo binstallsource fallback, or local suite compilation may run in this mode. - Pin the suite to an immutable revision or content-addressed manifest and verify every downloaded archive before extraction.
- Include the immutable suite identity and relevant archive/manifest digest in the shared-action cache key and version marker.
- Emit the installer version, suite revision, toolchain,
cargo-dylintversion,dylint-linkversion, and verified archive digests in CI evidence. - Fail clearly on unsupported platforms or missing trusted binaries rather than silently compiling from source.
- Add cold-cache, warm-cache, missing-asset, bad-digest, and attempted-fallback contract tests.
- Preserve the existing action-level checksum verification for the installer archive.
Issue #420 concerns detection and source fallback while obtaining the installer itself. This issue covers the stricter consumer mode after that installer runs, plus immutable suite provenance and cache identity.
Impact
This blocks the final binding Whitaker layer in leynos/cuprum. Existing source-fix and formatting layers can proceed, but the train cannot claim a reproducible, binary-only Whitaker gate until this contract is available.
Activity
leynos commentedon Sep 20, 2026
Cuprum's final Rust-baseline layer is implemented and green at cuprum#449, but remains draft because this immutable binary-only installation path is still unavailable.
Current evidence:
rollingrelease;v0.2.8does not retain versionedwhitaker-lints-*archives;The next executable sequence is: publish retained, versioned or content-addressed lint assets in Whitaker; add the committed manifest and fail-closed binary resolver here; then update Cuprum #449 to the approved immutable pin and rerun its gates and reviews. Pinning today's rolling asset ID would fail once that mutable release replaces its assets, so it would not resolve the blocker.