feat: v0.15.0 — verified crate distribution (payload kinds + export-cargo) - #37
Merged
Conversation
…argo) varve becomes a general verified-artifact distributor: a tool binary is just bytes with an exec bit, and so is a crate. First adapter is Cargo. REQ-KIND-001 — each layer entry declares a payload `kind` (tool|crate|wit| zephyr-module|sdk|wasm-component) in its signed annotations. Verification is unchanged (every kind is a signed digest checked against the trust root); a `tool` entry carries no kind annotation, so pre-kind layers keep byte-identical payloads. An unknown kind is refused at the boundaries that act on it (deposit, each kind-consuming export); install is deliberately kind-agnostic (lays down signed bytes uniformly) so an older varve still installs what it can from a future-kind layer. REQ-CRATE-001 — `varve export-cargo` materialises a Cargo local registry (the .crate files + index) from a layer's verified crate entries and emits a .cargo/config.toml source-replacement, so a consumer builds fully offline. The cksum Cargo verifies IS varve's signed sha256 of the .crate — no new trust path. Proven by a REAL `cargo build --offline` against an exported registry, plus a full CLI dogfood (deposit crate-kind -> install -> export-cargo). REQ-RELVER-001 — a release now fails unless the git tag matches the workspace Cargo.toml version (the version-guard job gates the whole release). Fixes the v0.14.0 miss where binaries reported 0.13.1. Version bumped to 0.15.0. Independently reviewed (VER-REVIEW-v0.15.0, verdict pass): the reviewer re-ran every suite and ran its own wrong-cksum tamper experiment (Cargo rejected it offline), and found two minor gaps fixed here — the unknown-kind claim narrowed to its true scope, and export-cargo now re-hashes on-disk bytes against the signed digest itself. Roadmap re-planned distribution-first: v0.16.0 Corrosion (transparent) + rules_rust (vendored export); conformance/archive to v0.18-0.19. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019TNtfRjLNhEz82G2ggeeNu
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.
v0.15.0 — varve distributes verified crates
First step of the general verified-artifact distributor arc (crates → WIT → Zephyr → SDK). A tool binary is just bytes with an exec bit; so is a crate. The trust core is untouched.
REQ-KIND-001 — typed payload kinds
Each layer entry declares a
kind(tool | crate | wit | zephyr-module | sdk | wasm-component) in its signed annotations. Verification is unchanged (every kind is a signed digest against the trust root). Atoolentry carries no kind annotation → pre-kind layers keep byte-identical payloads. Unknown kinds are refused where they're consumed (deposit + exports); install is kind-agnostic (forward-compat).REQ-CRATE-001 — offline builds through Cargo, no git server
varve export-cargomaterialises a Cargo local registry + a.cargo/config.tomlsource-replacement from a layer's verifiedcrateentries. The cksum Cargo verifies is exactly varve's signed sha256 of the.crate— same trust anchor, Cargo re-checks on its own terms. Proven by a realcargo build --offlineagainst an exported registry (the honest oracle), plus a full CLI dogfood.varve export-cargo --layer 2026.08.0 --out ./vendored # copy ./vendored/.cargo/config.toml into your project, then: cargo build --offlineREQ-RELVER-001 — a binary reports the version it's tagged as
A
version-guardrelease job fails the build if the git tag ≠ Cargo.toml version, gating the whole pipeline. Fixes the v0.14.0 miss (binaries reported 0.13.1). Version bumped to 0.15.0 — so this release's own binaries are correct.Independent review — VER-REVIEW-v0.15.0, verdict pass
The clean-room reviewer re-ran every suite (127 lib + offline + 34 CLI) and ran its own tamper experiment (wrong cksum → Cargo rejects offline, proving the oracle non-vacuous). Two minor gaps it found were fixed before release: the unknown-kind claim narrowed to its true scope, and
export-cargonow re-hashes on-disk bytes against the signed digest itself.Next (planned in rivet)
cargo vendor-shapedexport-crates-vendor; a Bazel spike gates the claim).Gate
127 lib + offline + 34 CLI tests green; clippy + fmt clean;
--lockedsynced;rivet validate+ verification-evidence (103 steps) + claim-check (12) + review-check (2 verdicts) all green.🤖 Generated with Claude Code
https://claude.ai/code/session_019TNtfRjLNhEz82G2ggeeNu