Skip to content

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

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

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

@mfw78

mfw78 commented Jul 27, 2026

Copy link
Copy Markdown
Contributor Author

Closing this stale M5 carve stack (2026-07-21/23) per owner decision. The three-grouping workspace and dep-sync gate landed independently on main (#636 + carve-groups); the WIT flip and remaining carve steps are being redone fresh on current main.

@mfw78 mfw78 closed this Jul 27, 2026
@mfw78
mfw78 deleted the feat/m5-git-tag-pins-umbrella-patch branch July 27, 2026 08:27
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