From review of #456 (r3615079255, r3615079263). Both confirmed still valid at the end-of-train tip. Target: nexum-module-macros + nexum-world (L1), videre-macros (L2), docs/sdk.md.
1. Hoist the duplicated helpers
is_plain_type, manifest_dir, and resolve_wit_packages exist as separate implementations in both nexum-module-macros and videre-macros. Verified byte-identical at the tip (3, 5, and 8 lines respectively). Both crates already depend on nexum-world symmetrically, so that is the home.
Accuracy note on the drift risk: the substantive logic is already hoisted. Each crate's resolve_wit_packages is a thin wrapper delegating to nexum_world::resolve_wit_packages, and manifest_dir is a plain CARGO_MANIFEST_DIR read, not an ancestor-walk with a monorepo fallback. The duplicated surface is roughly 16 trivial lines. The drift concern is still real (a fix applied to one copy silently misses the other) but the blast radius is small. Worth doing now while there are only two copies to reconcile, rather than after a third persona crate copies them.
2. Extend the doc gate to videre-macros
docs/sdk.md:16 runs:
RUSTDOCFLAGS="-D warnings -D missing-docs" cargo doc -p shepherd-sdk -p nexum-sdk -p nexum-module-macros --no-deps --open
There is no -p videre-macros, despite #456 creating that crate. Still missing at the tip. videre-macros carries a module header and documents both proc-macro entry points, so adding it should pass, but confirm by running the gate rather than assuming.
Separate observation for the cleave: that invocation already spans L3 (shepherd-sdk) and L1 (nexum-sdk, nexum-module-macros). After the three-repo split a single cargo doc -p cannot span them, so the doc-lint gate needs re-homing per repo regardless. Adding -p videre-macros is the immediate fix; the re-homing is its own piece of work.
Timing
Prefer pre-cleave. The hoist is one monorepo PR versus a coordinated change across the nexum (L1) and videre (L2) repos afterwards. videre-macros already depends on nexum-world, so the hoist stays legal post-cleave, just more expensive to land.
Acceptance criteria
is_plain_type, manifest_dir, and resolve_wit_packages exist once, in nexum-world; both macro crates call them and carry no local copy.
- The
docs/sdk.md doc-lint invocation includes -p videre-macros and passes with -D warnings -D missing-docs.
1. Hoist the duplicated helpers
is_plain_type,manifest_dir, andresolve_wit_packagesexist as separate implementations in bothnexum-module-macrosandvidere-macros. Verified byte-identical at the tip (3, 5, and 8 lines respectively). Both crates already depend onnexum-worldsymmetrically, so that is the home.Accuracy note on the drift risk: the substantive logic is already hoisted. Each crate's
resolve_wit_packagesis a thin wrapper delegating tonexum_world::resolve_wit_packages, andmanifest_diris a plainCARGO_MANIFEST_DIRread, not an ancestor-walk with a monorepo fallback. The duplicated surface is roughly 16 trivial lines. The drift concern is still real (a fix applied to one copy silently misses the other) but the blast radius is small. Worth doing now while there are only two copies to reconcile, rather than after a third persona crate copies them.2. Extend the doc gate to videre-macros
docs/sdk.md:16runs:There is no
-p videre-macros, despite #456 creating that crate. Still missing at the tip.videre-macroscarries a module header and documents both proc-macro entry points, so adding it should pass, but confirm by running the gate rather than assuming.Separate observation for the cleave: that invocation already spans L3 (
shepherd-sdk) and L1 (nexum-sdk,nexum-module-macros). After the three-repo split a singlecargo doc -pcannot span them, so the doc-lint gate needs re-homing per repo regardless. Adding-p videre-macrosis the immediate fix; the re-homing is its own piece of work.Timing
Prefer pre-cleave. The hoist is one monorepo PR versus a coordinated change across the nexum (L1) and videre (L2) repos afterwards.
videre-macrosalready depends onnexum-world, so the hoist stays legal post-cleave, just more expensive to land.Acceptance criteria
is_plain_type,manifest_dir, andresolve_wit_packagesexist once, innexum-world; both macro crates call them and carry no local copy.docs/sdk.mddoc-lint invocation includes-p videre-macrosand passes with-D warnings -D missing-docs.