The Go fetch takes zero-version requirements from the module graph and proves them with a shut-off load; mesh-build-image and -node name nodebuildgo (issue 1966) #654

Merged
mesh-tools merged 3 commits from fix/1966-fetch-module-graph into main 2026-11-10 14:48:41 +00:00
Member

Issue 1966, notes 178, 180, 181. Since #649 (Fix A of 1748, 2026-11-09 22:58 UTC) mesh-build-go's buildstep imports nodebuildgo; mesh-build-image and mesh-build-node replace buildstep by directory but did not name nodebuildgo, and mesh-build-go's fetch (build_go_fetch, the checker's and the builder's one fetch) took mesh packages only from a module's own go.mod (pins.go, versions.go). go mod download passed, vet and test then looked the package up shut off and failed. On the machines builder_builds shows mesh-build-image and mesh-build-node failing at a39b72c3 ('module lookup disabled by GOPROXY=off') and asked again every few minutes; in checks every mesh-catalog change touching the build modules fails 10 times (e.g. #652). Third time of this kind (twice in issue 1921).

What changes (modules/mesh-build-go, mesh-build-image, mesh-build-node; nothing exported, no module.json, no contract):

  • S2 ad6e813f: both go.mod files name nodebuildgo // indirect, as go mod tidy writes (the quick fix; lets this pull request's own check pass under the running mesh-build-go).
  • S3 ce3284fc: the fetch takes zero-version requirements from each directory-replaced module's go.mod (one level, as Go applies only the main module's replaces), each said as 'named by , not by this go.mod'; versions by ADR 0573 §2 unchanged.
  • S4 4a3914ee: after its download the fetch loads each directory's packages shut off (go list -e -deps -test, GOPROXY=off) and fails naming every package whose module the build lacks; compile errors, missing packages of the module itself and integration-tagged files never fail it. The beside download also loads its packages with the network, then proves them shut off.

Quick or thorough: both (thorough chosen: the kind was met three times; the builder and the checker share the one fetch, so there is no second rule).

Acceptance criteria and tests (rows; mesh-build-go 275 unit / 29 integration, unchanged): 1966/AC178-1 two rows of TestARequirementAtTheZeroVersionIsTakenFromTheAskOrTheTrunk; 1966/AC178-2 a row of TestAVerifyThatFailsEndsTheStepNamingTheDirectoryAndTheLine (now a table; real Go on the untidy go.mod says '…/nodebuildgo: module lookup disabled by GOPROXY=off'); 1966/AC178-3 the beside case of TestTheFetchDownloadsTheGraphOfASiblingModuleLaidWithTheTreesItRequires, and all 29 mesh-build-go integration tests pass shut off with siblings laid beside (incl. TestAComposeAskIsBuiltOnceAndAnsweredOnTheBus); each new row fails without its change. 1966/AC178-4 (live, after delivery): builder_builds shows mesh-build-image and mesh-build-node done at the merge. Review scanned all 133 catalogue Go modules at the head: none would newly fail the shut-off load. S1 (the x/crypto v0.52.0 miss on shanks) not proven (no tool reads mesh-build-go's module cache, noted on 1966); S4 makes such a miss fail the fetch naming the module. 33 mesh-catalog checks pass.

Follow-ups noted on issue 1966 (not this change): shutOffLoad passes when go list cannot run at all (fail on its error); takeVersions over the graph has no row of its own; the skipped-workspace line belongs in the fetch answer; the load's time per fetch to read in this check.

Reviewed-by: mesh-code-reviewer@shanks (for lead-47@shanks) at 4a3914ee1c (round 1: approve, no findings)

https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ

Issue 1966, notes 178, 180, 181. Since #649 (Fix A of 1748, 2026-11-09 22:58 UTC) mesh-build-go's buildstep imports nodebuildgo; mesh-build-image and mesh-build-node replace buildstep by directory but did not name nodebuildgo, and mesh-build-go's fetch (build_go_fetch, the checker's and the builder's one fetch) took mesh packages only from a module's own go.mod (pins.go, versions.go). go mod download passed, vet and test then looked the package up shut off and failed. On the machines builder_builds shows mesh-build-image and mesh-build-node failing at a39b72c3 ('module lookup disabled by GOPROXY=off') and asked again every few minutes; in checks every mesh-catalog change touching the build modules fails 10 times (e.g. #652). Third time of this kind (twice in issue 1921). What changes (modules/mesh-build-go, mesh-build-image, mesh-build-node; nothing exported, no module.json, no contract): - S2 ad6e813f: both go.mod files name nodebuildgo // indirect, as go mod tidy writes (the quick fix; lets this pull request's own check pass under the running mesh-build-go). - S3 ce3284fc: the fetch takes zero-version requirements from each directory-replaced module's go.mod (one level, as Go applies only the main module's replaces), each said as 'named by <dir>, not by this go.mod'; versions by ADR 0573 §2 unchanged. - S4 4a3914ee: after its download the fetch loads each directory's packages shut off (go list -e -deps -test, GOPROXY=off) and fails naming every package whose module the build lacks; compile errors, missing packages of the module itself and integration-tagged files never fail it. The beside download also loads its packages with the network, then proves them shut off. Quick or thorough: both (thorough chosen: the kind was met three times; the builder and the checker share the one fetch, so there is no second rule). Acceptance criteria and tests (rows; mesh-build-go 275 unit / 29 integration, unchanged): 1966/AC178-1 two rows of TestARequirementAtTheZeroVersionIsTakenFromTheAskOrTheTrunk; 1966/AC178-2 a row of TestAVerifyThatFailsEndsTheStepNamingTheDirectoryAndTheLine (now a table; real Go on the untidy go.mod says '…/nodebuildgo: module lookup disabled by GOPROXY=off'); 1966/AC178-3 the beside case of TestTheFetchDownloadsTheGraphOfASiblingModuleLaidWithTheTreesItRequires, and all 29 mesh-build-go integration tests pass shut off with siblings laid beside (incl. TestAComposeAskIsBuiltOnceAndAnsweredOnTheBus); each new row fails without its change. 1966/AC178-4 (live, after delivery): builder_builds shows mesh-build-image and mesh-build-node done at the merge. Review scanned all 133 catalogue Go modules at the head: none would newly fail the shut-off load. S1 (the x/crypto v0.52.0 miss on shanks) not proven (no tool reads mesh-build-go's module cache, noted on 1966); S4 makes such a miss fail the fetch naming the module. 33 mesh-catalog checks pass. Follow-ups noted on issue 1966 (not this change): shutOffLoad passes when go list cannot run at all (fail on its error); takeVersions over the graph has no row of its own; the skipped-workspace line belongs in the fetch answer; the load's time per fetch to read in this check. Reviewed-by: mesh-code-reviewer@shanks (for lead-47@shanks) at 4a3914ee1ce7233f4f91b769b6f88c1a0a512ba6 (round 1: approve, no findings) https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
mesh-tools added 3 commits 2026-11-10 12:27:45 +00:00
Since buildstep's drop verb imports the node-build-go seat package, both modules' shut-off vet,
test and build looked it up on the network: their go.mod did not name it, so the fetch took no
version for it. go mod tidy adds it as an indirect requirement.

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
ADR 0573 §2 builds every module against the latest published version of each mesh package it
uses, whatever its go.mod names. The fetch took versions only for packages the directory's own
go.mod names, so a package only a module it replaces by a directory requires (mesh-build-image
replacing buildstep, which imports the node-build-go seat package) was never taken: go mod
download passed and every shut-off step looked it up on the network. Now the requirements of
each module the directory replaces by a directory count too, taken the same way (the ask, its
repository's asked head, else the latest) and said as named by that directory.

1966/AC178-1: rows of TestARequirementAtTheZeroVersionIsTakenFromTheAskOrTheTrunk.

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
S4: the fetch proves with a shut-off package load that it downloaded all a step loads (issue 1966)
mesh/delivery merged: source.main moved to novox/mesh-catalog@7cc81512a389
mesh/check checking 4a3914ee1ce7 on 3c0b4d29a8ea
4a3914ee1c
go mod download loads only the module graph a go.mod names; a vet, a test or a build then loads
packages shut off from the network and failed far from the fetch, in fewer words (the builder's
"pull_drop.go:11:2: module lookup disabled by GOPROXY=off"). After each directory's download the
fetch loads its packages with their tests shut off and fails naming each package whose load
would reach the network. The graph of a sibling laid beside is loaded once with the network
first, so a go.mod the composer's build reads and the graph's download skipped is fetched, then
proven the same way.

1966/AC178-2: a row of TestAVerifyThatFailsEndsTheStepNamingTheDirectoryAndTheLine; the beside
case in TestTheFetchDownloadsTheGraphOfASiblingModuleLaidWithTheTreesItRequires.

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Author
Member

Delivery novox/mesh-catalog@4a3914ee1ce7 — merged since 2026-11-10T14:48:43Z

Source — source.main moved to novox/mesh-catalog@7cc81512a3. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.

Transitions

  • 2026-11-10 12:27 (new) → proposed (announced): novox/mesh-catalog#654's head announced
  • 2026-11-10 12:27 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
  • 2026-11-10 14:48 ready → merged (merged): on the trunk its modules follow: merged there

The commit's note under refs/notes/mesh-plan keeps every transition of this change up to its merge: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-catalog@4a3914ee1ce7` — **merged** since 2026-11-10T14:48:43Z **Source** — source.main moved to novox/mesh-catalog@7cc81512a389. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Transitions** - 2026-11-10 12:27 (new) → proposed (announced): novox/mesh-catalog#654's head announced - 2026-11-10 12:27 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false) - 2026-11-10 14:48 ready → merged (merged): on the trunk its modules follow: merged there The commit's note under `refs/notes/mesh-plan` keeps every transition of this change up to its merge: `git log --notes=mesh-plan`.
mesh-tools merged commit 7cc81512a3 into main 2026-11-10 14:48:41 +00:00
mesh-tools deleted branch fix/1966-fetch-module-graph 2026-11-10 14:48:41 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-catalog#654