Skip to content

chore: pin real wit-deps digests for nexum-host - #52

Open
mfw78 wants to merge 2 commits into
chore/nexum-runtime-pin-bumpfrom
chore/wit-deps-digests
Open

chore: pin real wit-deps digests for nexum-host#52
mfw78 wants to merge 2 commits into
chore/nexum-runtime-pin-bumpfrom
chore/wit-deps-digests

Conversation

@mfw78

@mfw78 mfw78 commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

What

wit/deps.toml now carries the real tarball digests for the pinned nexum-runtime db39b6c1 archive (sha256 b429b851..., sha512 a8a96347...), replacing the all-zero placeholders, and adds the prefix field (nexum-runtime-db39b6c1.../wit/nexum-host) needed to locate the WIT package inside the whole-repo GitHub tarball. A comment block documents the re-vendor flow (edit the rev, update digests, adjust prefix, run wit-deps update, commit deps.toml/deps.lock/deps/ together) in place of the old placeholder-digest apology. wit/deps.lock is regenerated from the URL pin: the stale pre-carve path = "../../nexum/wit/nexum-host" entry is gone, replaced with the same url/prefix pair, and the lock's sha256/sha512 digests are unchanged from before the switch. .github/workflows/ci.yml gains a wit-sync job that downloads a digest-verified wit-deps v0.6.0 musl binary, runs wit-deps update, and fails the build on any diff against the vendored wit/ tree; justfile gets a matching wit-sync recipe for local use and an updated ci recipe comment noting that wit-sync runs separately since wit-deps is not in the dev shell.

Why

Closes #45

The placeholder all-zero digests in wit/deps.toml meant wit-deps could not actually verify the pinned nexum-runtime tarball, and the vendored wit/deps/nexum-host tree had no independent proof it matched the pin. Recording the real digests plus the prefix field makes the pin resolvable and verifiable from a clean fetch, and the new CI/justfile wit-sync job turns that verification into a gate instead of a manual, easy-to-skip step.

Testing

Host disk was at capacity (/ and /tmp down to a few MB free), so the full gate was run from a fresh clone in tmpfs (/dev/shm) instead of the working tree. No offline shortcuts were used: the repo was cloned from scratch, both branches fetched, and HEAD detached at the tip of chore/wit-deps-digests. The diff against origin/chore/nexum-runtime-pin-bump touches only .github/workflows/ci.yml, justfile, wit/deps.lock, and wit/deps.toml - no Rust crate, guest crate, videre-macros, or .wit interface source changed, so cargo clippy/cargo test --doc/cargo doc per touched crate are vacuous (zero touched crates) and were also not runnable given remaining disk space. Both tarball digests (b429b851... / a8a96347...) and the CI binary pin (0d28c03f...) were reproduced byte-exactly from independent downloads, wit-deps update on a clean checkout is a true no-op with deps.lock's content digests unchanged from the pre-change path =lock (independently confirmed by a directdiff -ragainst the extracted tarball, showing the vendoredwit/deps/nexum-hosttree is byte-identical to the pinned rev), and thewit-sync` gate was confirmed to actually fail on a mispinned digest.

AI Assistance

Implemented with claude-fable-5, red-teamed with claude-opus-5, PR opened with claude-sonnet-5.

mfw78 added 2 commits August 6, 2026 19:06
Replace the all-zero sha256/sha512 placeholders in wit/deps.toml with the real digests of the pinned nexum-runtime db39b6c1 tarball, and add the prefix field that selects wit/nexum-host inside the archive so wit-deps can resolve the whole-repo tarball.

Regenerate wit/deps.lock from the url pin: the stale local path entry from the pre-carve monorepo is gone, and the recorded content digests are unchanged, which confirms the vendored wit/deps/nexum-host tree is byte-identical to the pinned rev.

Add a wit-sync CI job that downloads a digest-verified wit-deps release binary, re-resolves with wit-deps update (lock skips the fetch and the digest check when the vendored tree already matches deps.lock), and fails on any diff against the checked-in wit/ tree. A just wit-sync recipe mirrors the job locally.

Closes #45.

AI Assistance: Claude Fable used for the whole change.
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