diff --git a/cmd/mesh-controller/composed_live.go b/cmd/mesh-controller/composed_live.go index d910c03e..1c6d942d 100644 --- a/cmd/mesh-controller/composed_live.go +++ b/cmd/mesh-controller/composed_live.go @@ -124,11 +124,11 @@ func composeModulesByNode(ctx context.Context, open *stores, nodes []string) (ma errsOf[node] = append(errsOf[node], fmt.Errorf("%s: %w", node, err)) return } - if len(moved) > 0 { + if moved := builtByTheMesh(moved); len(moved) > 0 { fmt.Printf("compositions: %s's %s compose with the node's own: no fingerprint of the new form names them\n", node, strings.Join(moved, ", ")) } - if len(left) > 0 { + if left := builtByTheMesh(left); len(left) > 0 { fmt.Printf("compositions: %s's %s are left out of the node's own: the controller knows no fingerprint of the "+ "new form for them, and the node's want or have names their own composition (issue 1945)\n", node, strings.Join(left, ", ")) diff --git a/cmd/mesh-controller/forge_merge_test.go b/cmd/mesh-controller/forge_merge_test.go index 0c9bf437..f3153b6a 100644 --- a/cmd/mesh-controller/forge_merge_test.go +++ b/cmd/mesh-controller/forge_merge_test.go @@ -89,3 +89,18 @@ func TestAMergeIsFoundOnTheForgeBridgesStream(t *testing.T) { } } } + +// Sweep 2026-10-30 (issue 774): a module the mesh provides itself is never named as lacking a fingerprint. +func TestAModuleTheMeshProvidesIsNotSaidToLackAFingerprint(t *testing.T) { + for _, c := range []struct { + in, want []string + }{ + {[]string{"mesh-wireguard"}, nil}, + {[]string{"claude-code", "mesh-wireguard", "power"}, []string{"claude-code", "power"}}, + {nil, nil}, + } { + if got := builtByTheMesh(c.in); strings.Join(got, ",") != strings.Join(c.want, ",") { + t.Errorf("%v: %v, want %v", c.in, got, c.want) + } + } +} diff --git a/cmd/mesh-controller/switch_list.go b/cmd/mesh-controller/switch_list.go index a34a277e..dcb46a15 100644 --- a/cmd/mesh-controller/switch_list.go +++ b/cmd/mesh-controller/switch_list.go @@ -160,7 +160,7 @@ func switchList(ctx context.Context, inv *inventory.Inventory, keys switchReads) var out []switchLine for _, e := range entries { m := e.Manifest.Module - if e.Provided || e.Source.Repository == "" { + if e.Provided || e.Source.Repository == "" || sdkdelivery.ProvidedByMesh(m) { continue } trunk, err := keys.ModuleAt(ctx, m, "") @@ -202,3 +202,16 @@ func heldArtifacts(ctx context.Context, inv *inventory.Inventory, module, builtF // empty-on-error: not an error; the mesh holds no build of that commit on record, which the line says return nil, nil } + +// builtByTheMesh are the modules of a list that a build of the mesh's makes: without the ones the mesh provides itself +// (sdkdelivery.ProvidedByMesh, the private network), which no fingerprint ever names, so a line saying one has none +// says nothing (sweep 2026-10-30, issue 774: "mesh-wireguard ... no fingerprint of the new form" on every composition). +func builtByTheMesh(modules []string) []string { + var out []string + for _, m := range modules { + if !sdkdelivery.ProvidedByMesh(m) { + out = append(out, m) + } + } + return out +}