Skip to content

packaging: pin cross-group deps to git tags behind an umbrella patch#484

Open
mfw78 wants to merge 2 commits into
feat/m5-wit-local-l3from
feat/m5-git-tag-pins-umbrella-patch
Open

packaging: pin cross-group deps to git tags behind an umbrella patch#484
mfw78 wants to merge 2 commits into
feat/m5-wit-local-l3from
feat/m5-git-tag-pins-umbrella-patch

Conversation

@mfw78

@mfw78 mfw78 commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

What

Repoint every cross-group nexum-*/videre-* dependency edge from an
in-tree path to its eventual git-tag form (tag = "v0.1.0"), and add
an umbrella [patch] in the root Cargo.toml that resolves those tags
back to the in-tree crates until the split repos exist. Adds the
per-group Cargo.repo.toml files (renamed to Cargo.toml at the
carve) with no cross-group [patch] of their own.

Why

D9/D10 of the split plan: git-tag pins are the cross-repo Rust dep
medium, and the monorepo stays on one workspace with the tags
neutralised by a patch until the physical carve. This is the last
in-tree step before the git-filter-repo cut — every crate's manifest
already reads its final post-carve dependency shape.

Testing

  • nix develop -c cargo check --workspace --all-features
  • nix develop -c cargo fmt --all --check
  • nix develop -c cargo clippy --workspace --all-targets --all-features -- -D warnings
  • scripts/check-venue-agnostic.sh

AI Assistance

Drafted and gated with Claude Code.

mfw78 added 2 commits July 18, 2026 07:56
Every cross-group dep in the videre and shepherd manifests now carries
its final form: nexum-* crates pinned to the nexum-runtime repo at
v0.1.0, videre-* crates pinned to the videre-nexum-module repo at
v0.1.0. A root umbrella [patch] resolves each pinned crate from its
in-tree group, so the monorepo builds green before the remotes are
populated and the carve reduces to deleting the patch tables.

Each group also gains a Cargo.repo.toml: the patch-free workspace root
the standalone repo renames to Cargo.toml at the carve, carrying only
the hoisted dep-table subset its members inherit.
Resolve the workspace root via the nearest [workspace] Cargo.toml and
module.toml sources via the group root, and drop --all-features from the
nexum-runtime graph oracle (cargo rejects it for an out-of-workspace dep).
The videre-host integration tests now pass both in the monorepo and the
carved videre-nexum-module repo.

@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.

Verified this empirically (cloned the branch and ran cargo metadata --format-version=1 -v against the full graph, plus cargo metadata --locked for the lock-consistency question) rather than just reading: the umbrella [patch] table is an exact 1:1 match against every tag = "v0.1.0" edge added across all touched Cargo.toml files, no missing entries, no orphans, and all 10 cross-group crates resolve with source: None straight to their in-tree manifests — fully offline, zero "Updating git repository" lines. Cargo.repo.toml's member lists match each group's real crate set exactly (19/9/9), the swap-in mechanism is documented in two places and enforced by the pre-existing check-dep-sync.sh, no missed cross-group path = edges remain anywhere, and the lock file needs no changes since the resolved graph shape is unchanged by the path→git+patch swap.

One real, if minor, thing worth a look — a test-coverage narrowing riding along in what's otherwise a pure pinning change:

/// edges) names no videre, intent, venue, or cow crate.
#[test]
fn host_crate_graph_reaches_no_venue_shaped_crate() {
// nexum-runtime resolves as an out-of-workspace dep in the standalone

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.

This drops --all-features from the leak-detection cargo tree invocation, backed by the comment's claim that nexum-runtime is "venue-free under every feature, so the default-feature graph is a sound oracle." That claim isn't verified anywhere in this diff or linked to a check that asserts it elsewhere — it's a real reduction in what this test actually catches (all feature combinations → default only), taken on faith. If a future nexum-runtime feature ever pulls in a venue-shaped crate transitively behind a non-default feature, this test would no longer catch it. Worth linking to wherever all-features parity is actually asserted (e.g. nexum-runtime's own CI), or adding a comment pointing at the specific reason --all-features had to go (the comment mentions cargo rejecting it for out-of-workspace deps in the standalone repo, but doesn't explain why that tradeoff is safe long-term, only that it's currently necessary).

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