Skip to content

release: v0.10.0 — ToolInfo toolchain identity + honest SLSA claims - #222

Merged
avrabe merged 4 commits into
mainfrom
release/v0.10.0
Aug 7, 2026
Merged

release: v0.10.0 — ToolInfo toolchain identity + honest SLSA claims#222
avrabe merged 4 commits into
mainfrom
release/v0.10.0

Conversation

@avrabe

@avrabe avrabe commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

v0.10.0 — provenance identity + claim honesty

Planned in rivet (rivet release status v0.10.0 → cuttable); both scoped requirements verified.

REQ-20 / #221ToolInfo toolchain-layer identity

Merged via #221 (already on main). Optional toolchain + toolchain_manifest_digest, populated from VARVE_LAYER* at each hop (varve REQ-PROV-001). Backward-compatible both directions: skip_serializing_if → non-varve attestations serialize byte-identically; no deny_unknown_fields → old verifiers accept new attestations. Not in the no_std verify-core path, so the witness MC/DC gate is untouched.

REQ-21 / #216 — honest SLSA claims + claim-check gate

SLSA v1.0's Build track defines L0–L3 only; docs claimed "SLSA Level 4 ✅ ACHIEVED" against v1.0. Reframed every surface (README badge SLSA-L4_provenanceSLSA-Build_L3, slsa-compliance.md, automotive/wac/research docs, code comments) to Build L3 + "the properties SLSA v0.1 called Level 4" (beyond-L3). A fictional --slsa-level 4 example (no such flag) corrected. STPA loss ids L4/L5 untouched.

New gate verification/claim-check/claim-check.py + claims.yaml: count-max: 0 on SLSA[ -](Level ?4|L4) across README/docs/examples/src fails the build if the phantom level reappears; count-min guards the disclaimer. Proven potent by negative control before wiring.

#220 groundwork — crates.io publish disarmed

The publish job had failed on every tag since v0.9.1 (registry frozen at 0.9.0). Now gated behind vars.CRATES_PUBLISH_ENABLED — skips cleanly instead of a perpetual red, arms with one flip. Actual registry backfill = REQ-22 in v0.11.0.

Feature-loop steps 1–2 (spar→WIT) N/A (no arch change). Clean-room verified pre-tag.

🤖 Generated with Claude Code

https://claude.ai/code/session_012aR3Md1h46K9wAUWMQiESH

avrabe and others added 4 commits August 7, 2026 15:28
SLSA v1.0's Build track defines L0-L3 only; docs claimed "SLSA Level 4
ACHIEVED" against v1.0 (L4 lived in the superseded v0.1 draft). Reframed
every public surface to state what we meet (Build L3) and to describe the
reproducibility/offline-attestation work as the properties SLSA v0.1 called
Level 4 — never as a v1.0 level. STPA loss ids L4/L5 left untouched.

Gated by verification/claim-check/claim-check.py + claims.yaml: count-max:0
on `SLSA[ -](Level ?4|L4)` across README/docs/examples/src goes red if the
phantom level reappears; count-min guards the honest disclaimer. Proven
potent by negative control before wiring. The badge IS the evidence.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012aR3Md1h46K9wAUWMQiESH
…#220)

The publish job has failed on every tag since v0.9.1 (v0.9.0 was the last
success — hence the registry froze at 0.9.0). A perpetually-red job is a
dead signal, not a gate. Gate it behind vars.CRATES_PUBLISH_ENABLED so it
SKIPS cleanly until either a crates.io Trusted Publisher (OIDC) or a
CRATES_IO_TOKEN secret exists, then arms with one variable flip. Actual
registry backfill (0.9.1->0.10.0) is tracked as REQ-22 in v0.11.0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012aR3Md1h46K9wAUWMQiESH
Bump 0.9.4 -> 0.10.0 across Cargo.toml, MODULE.bazel, src/cli/BUILD.bazel
VERSION, all internal wsc-* dep pins (incl. a latent stale wsc-crypto->0.9.0),
and Cargo.lock. rivet plan: REQ-20 (#221) + REQ-21 (#216) scoped to v0.10.0,
both verified; REQ-22 (#220) moved to v0.11.0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012aR3Md1h46K9wAUWMQiESH
The gate counted MC/DC gaps over the WHOLE instrumented wasm — Rust std, the
wasi-libc allocator, crypto deps — of which only 2 of 142 decisions are
verify-core's own (src/wasm_module/varint.rs, .../mod.rs). The total tracked
noise, not coverage: it drifted 12->17 on std/dep churn and then 17->19 purely
on the 0.9.4->0.10.0 version bump perturbing libc codegen, which is what turned
the v0.10.0 PR red with no real coverage change.

Now count gaps ONLY within decisions whose source path is under src/. That
number is a function of verify-core's own logic + its fixed scenario set, so it
is stable across host and dep churn. Scoped baseline = 5 (varint.rs:29 c0/c3/c4
+ mod.rs:455 c0/c1) — measured from the report, not hand-derived. The whole-wasm
total is still printed, informational only.

Attribution (gaps follow their decision header) verified against a captured
report via the Partial-has-proved / NoWitness-has-none discriminator. Gate
proven potent by negative control: an injected verify-core gap REDs (5->6); an
injected libc gap stays GREEN (noise-immune); a closed gap improves (5->4).
Closing verify-core's own Partial gaps remains follow-up work on #128.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012aR3Md1h46K9wAUWMQiESH
@avrabe
avrabe merged commit 2e3c97a into main Aug 7, 2026
24 checks passed
@avrabe
avrabe deleted the release/v0.10.0 branch August 7, 2026 14:35
@codecov

codecov Bot commented Aug 7, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

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