Skip to content

packaging: vendor cross-group wit into shepherd and gate tag sync#483

Open
mfw78 wants to merge 4 commits into
feat/m5-wit-local-l2from
feat/m5-wit-local-l3
Open

packaging: vendor cross-group wit into shepherd and gate tag sync#483
mfw78 wants to merge 4 commits into
feat/m5-wit-local-l2from
feat/m5-wit-local-l3

Conversation

@mfw78

@mfw78 mfw78 commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

What

Vendors shepherd's cross-group WIT (nexum:host, videre:types,
videre:value-flow, videre:venue) under shepherd/wit/deps via
wit-deps, replacing the four wit/ symlinks. Retargets the
shepherd:cow layering test at the vendored tree. Extends
check-dep-sync.sh to require one tag per upstream repo across all
groups, not just against the Rust pin. Fixes the nexum-host tag
prefix in videre/wit/deps.{toml,lock} to match the real
nexum-runtime release tag shape.

Why

Closes the last generic-WIT symlink in shepherd so every group
resolves WIT crate-locally and offline ahead of the carve, per
docs/design/videre-split-plan.md section 5 (Phase S2).

Testing

CI gate: fmt, check, clippy -D warnings, nextest, doctest, plus
scripts/check-dep-sync.sh and scripts/check-venue-agnostic.sh.

AI Assistance

Drafted with Claude Code under review.

Closes #405

mfw78 added 4 commits July 18, 2026 07:37
scripts/check-dep-sync.sh asserts the crate DAG points strictly up
across nexum, videre and shepherd for every workspace member (path
deps and wit/ symlinks included), and that the carve dependency
artefacts agree wherever they exist: umbrella [patch] entries target
the owning grouping's in-tree crates and neutralise every written
git-tag pin with no orphans, pins agree on one tag per upstream repo,
each Cargo.repo.toml member list mirrors the umbrella, and wit-deps
manifests and locks stay key-synced with tags matching the Rust pins.
Artefacts a train wave has not written yet skip visibly and enforce
the moment they land. Wired as the blocking dep-sync CI job and a
just check-dep-sync recipe; the git-tag to crates.io and wkg/OCI
convergence path is documented in docs/design/cross-repo-deps.md.
…t-deps manifest

The runtime bindgen and every L1 fixture module already resolve
wit/nexum-host inside the nexum group; check in an empty wit/deps.toml
plus its lock to pin the leaf, and teach the zero-leak gate to fail if
either ever declares a dependency.
Replace the cross-group nexum-host symlink with a wit-deps vendor:
wit/deps.toml pins the package to an exact nexum-runtime git tag,
wit/deps.lock records the content digests, and wit/deps/nexum-host is
checked in so the group resolves WIT crate-locally and offline. The
videre-host and videre-sdk bindgens now read wit/deps/nexum-host.
Replace the symlinked nexum-host and videre packages with vendored
copies under wit/deps, pinned by wit/deps.toml release-tag sources,
and point the layering gate at the vendored tree.

@lgahdl lgahdl left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The mechanics of this PR are sound: the 12 vendored WIT files under shepherd/wit/deps/* are byte-for-byte identical to their real sources (verified via git hash-object on the base commit's blobs), all 4 old symlinks are actually deleted with zero stale references left anywhere in the diff's touched files, videre-host/videre-sdk's bindgen paths correctly retarget only the vendored nexum-host path while leaving the videre-native packages untouched, and wit_layering.rs's retarget is well-guarded — it adds assert!(seen > 0, ...) so a wrong/empty vendor path now fails loudly instead of vacuously passing, which is exactly the right defensive instinct at this scale of path churn. The new cross-group tag-drift check in check-dep-sync.sh is genuinely correct too: it tracks tag-per-slug across ALL groups (not scoped to one file, not piggybacking on the Rust-pin check), so if videre and shepherd ever pinned the same upstream repo at different tags, this would catch it.

But the PR's core claim — "fixes the nexum-host tag prefix... to match the real nexum-runtime release tag shape" — only fixes the NAMING FORMAT, not the underlying problem from #482. I checked again: neither nullislabs/nexum-runtime nor the newly-added nullislabs/videre-nexum-module pin (v0.1.0 for both) has any tags at all on the real repos (gh api .../tags returns empty for both, and both archive URLs 404 after the redirect). So the cross-group consistency check I just praised above is currently checking that multiple manifests consistently agree on a tag that doesn't exist anywhere — internally consistent, but not actually resolvable. wit-deps update/resolution will fail the moment anyone runs it against either upstream. Since both nullislabs/nexum-runtime and nullislabs/videre-nexum-module already exist as real, separate repos, this needs an actual v0.1.0 tag pushed to both before these pins can work.

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.

2 participants