- Goal: Produce an attributable binary archive, checksum, and provenance record for one exact release candidate.
- Status: Release tooling implemented; publication and qualification pending.
- Risk: Local build mutation and publication preparation. Building does not publish.
- Environment: Clean exact source tag, Rust toolchain at version
1.85or newer, macOS host, maintainer-controlled workstation. - Preconditions: Approved SemVer change, updated changelog and released-surface baseline, exact tag, clean source, completed required qualification, no secrets in source or environment-derived artifacts.
- Inputs: Repository source,
Cargo.tomlmetadata, committedCargo.lock, tag, current source revision, generated public surface. - Artifacts and side effects: Writes
dist/with the binary tarball, SHA-256 checksum, and provenance JSON, and writestarget/with the release build. Does not modify Lake data or provider stores. - Steps:
sh
cargo run --release -- --version
sh scripts/surface.sh > released-surface.json
sh scripts/build-release.shPublication is deliberately absent. It requires a separate maintainer-approved GitHub release workflow tied to the same tag and source revision.
- Verification: Provenance names product, version, source revision, tag, archive filename, SHA-256, platform, and architecture. The archived binary's
--versionmatches the manifest version and the tag;scripts/build-release.shrefuses the build otherwise. The checksum validates the exact tarball. - Failure path: Missing or dirty tag, version mismatch, surface mismatch, package failure, secret finding, or unqualified capability blocks publication. Delete incomplete
dist/, correct the source, and rebuild from a new clean checkout; never rewrite an immutable release. - Cleanup or off-switch:
dist/is ignored derived output. Retain approved assets with the release or remove rejected local candidates. Never call an untagged build a release. - Next: Follow release policy for publication, channels, rollback, and retirement.