Skip to content

feat: v0.15.0 — verified crate distribution (payload kinds + export-cargo) - #37

Merged
avrabe merged 1 commit into
mainfrom
feat/v0.15.0
Aug 12, 2026
Merged

feat: v0.15.0 — verified crate distribution (payload kinds + export-cargo)#37
avrabe merged 1 commit into
mainfrom
feat/v0.15.0

Conversation

@avrabe

@avrabe avrabe commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

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). A tool entry 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-cargo materialises a Cargo local registry + a .cargo/config.toml source-replacement from a layer's verified crate entries. 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 real cargo build --offline against 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 --offline

REQ-RELVER-001 — a binary reports the version it's tagged as

A version-guard release 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-cargo now re-hashes on-disk bytes against the signed digest itself.

Next (planned in rivet)

  • v0.16.0 — Corrosion (works transparently, verified by a real CMake build) + rules_rust (needs a cargo vendor-shaped export-crates-vendor; a Bazel spike gates the claim).
  • Conformance (ASPICE/TARA) + durable archive re-tagged to v0.18–0.19.

Gate

127 lib + offline + 34 CLI tests green; clippy + fmt clean; --locked synced; 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

…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
@avrabe
avrabe merged commit a40489b into main Aug 12, 2026
12 checks passed
@avrabe
avrabe deleted the feat/v0.15.0 branch August 12, 2026 05:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant