Register the build and delivery modules as issue owners, and test that every code module is one (issue 1815)
mesh/check failed: unit: modules/gitea.test: ✔ the same merge, head or close announced twice has the same id, and another has another (9.586412ms) | e…
mesh/merge-gate head e2220df5e851 merged into trunk 97a111e70abf — pass: builds mesh-issues → novox; no bus step; every machine composes with the change as…
mesh/repo-check head e2220df5e851 merged into trunk 97a111e70abf — pass: its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-…
mesh/delivery delivered

This commit is contained in:
2026-10-22 09:54:51 +02:00
parent 97a111e70a
commit e2220df5e8
3 changed files with 94 additions and 2 deletions
@@ -222,3 +222,51 @@ func TestTheOwnersDefaultIsTheTemplatesOwners(t *testing.T) {
t.Fatalf("the owners default (%d) and the template's owners (%d) differ", len(m.Config.Owners.Default), len(s.Owners)) t.Fatalf("the owners default (%d) and the template's owners (%d) differ", len(m.Config.Owners.Default), len(s.Owners))
} }
} }
// Every module folder of the catalogue that holds code the mesh builds (a go.mod or a package.json) is a
// registered owner, so an issue is located where it lives and the next new module cannot be missed
// (novox/hq issue 1815: mesh-build-go and mesh-build-node were not on the list).
// 1815/AC1
func TestEveryCodeModuleOfTheCatalogueIsAnOwner(t *testing.T) {
_, _ = readManifest(t)
tmpl, err := os.ReadFile(filepath.Join("..", "..", "files", "settings.json"))
if err != nil {
t.Fatal(err)
}
var s Settings
if err := json.Unmarshal(tmpl, &s); err != nil {
t.Fatal(err)
}
modules := filepath.Join("..", "..", "..")
dirs, err := os.ReadDir(modules)
if err != nil {
t.Fatal(err)
}
found := 0
for _, d := range dirs {
if !d.IsDir() {
continue
}
for _, marker := range []string{"go.mod", "package.json"} {
if _, err := os.Stat(filepath.Join(modules, d.Name(), marker)); err != nil {
continue
}
found++
if !slices.Contains(s.Owners, "mesh-catalog modules/"+d.Name()) {
t.Errorf("modules/%s holds code (%s) but %q is not among the owners: add it to module.json and files/settings.json",
d.Name(), marker, "mesh-catalog modules/"+d.Name())
}
break
}
}
if found < 10 {
t.Fatalf("only %d code modules found under %s: the test looks in the wrong place", found, modules)
}
// 1815/AC2: the delivery repository's modules cannot ride on its repository entry (owns refuses a folder
// of a repository that is registered only as a whole), so each is named.
for _, m := range []string{"builder", "checker", "indexer"} {
if Owners(s.Owners).owns("mesh-delivery modules/mesh-delivery-"+m) == "" {
t.Errorf("mesh-delivery-%s is not an owner", m)
}
}
}
+23 -1
View File
@@ -12,6 +12,7 @@
"mesh-catalog modules/betterbird", "mesh-catalog modules/betterbird",
"mesh-catalog modules/blueman", "mesh-catalog modules/blueman",
"mesh-catalog modules/bluetooth", "mesh-catalog modules/bluetooth",
"mesh-catalog modules/brother",
"mesh-catalog modules/ca-trust", "mesh-catalog modules/ca-trust",
"mesh-catalog modules/claude-code", "mesh-catalog modules/claude-code",
"mesh-catalog modules/claude-licence-manager", "mesh-catalog modules/claude-licence-manager",
@@ -45,6 +46,7 @@
"mesh-catalog modules/influxdb", "mesh-catalog modules/influxdb",
"mesh-catalog modules/invoicing", "mesh-catalog modules/invoicing",
"mesh-catalog modules/jira", "mesh-catalog modules/jira",
"mesh-catalog modules/kernel",
"mesh-catalog modules/keycloak", "mesh-catalog modules/keycloak",
"mesh-catalog modules/lab", "mesh-catalog modules/lab",
"mesh-catalog modules/lemurs", "mesh-catalog modules/lemurs",
@@ -56,11 +58,23 @@
"mesh-catalog modules/marrytts", "mesh-catalog modules/marrytts",
"mesh-catalog modules/matrix", "mesh-catalog modules/matrix",
"mesh-catalog modules/memory-pressure", "mesh-catalog modules/memory-pressure",
"mesh-catalog modules/mesh-build-go",
"mesh-catalog modules/mesh-build-node",
"mesh-catalog modules/mesh-catalog", "mesh-catalog modules/mesh-catalog",
"mesh-catalog modules/mesh-cli", "mesh-catalog modules/mesh-cli",
"mesh-catalog modules/mesh-config",
"mesh-catalog modules/mesh-delivery", "mesh-catalog modules/mesh-delivery",
"mesh-catalog modules/mesh-delivery-gate", "mesh-catalog modules/mesh-delivery-gate",
"mesh-catalog modules/mesh-files",
"mesh-catalog modules/mesh-issues", "mesh-catalog modules/mesh-issues",
"mesh-catalog modules/mesh-knowledge",
"mesh-catalog modules/mesh-mail",
"mesh-catalog modules/mesh-mail-notifier",
"mesh-catalog modules/mesh-mail-reader",
"mesh-catalog modules/mesh-mail-web",
"mesh-catalog modules/mesh-provisioner",
"mesh-catalog modules/mesh-provisioner-client",
"mesh-catalog modules/mesh-reads",
"mesh-catalog modules/mesh-vault", "mesh-catalog modules/mesh-vault",
"mesh-catalog modules/mesh-watcher", "mesh-catalog modules/mesh-watcher",
"mesh-catalog modules/messenger", "mesh-catalog modules/messenger",
@@ -130,11 +144,19 @@
"mesh-controller modules/build-agent", "mesh-controller modules/build-agent",
"mesh-controller modules/route-proxy", "mesh-controller modules/route-proxy",
"mesh-delivery", "mesh-delivery",
"mesh-delivery modules/mesh-delivery-builder",
"mesh-delivery modules/mesh-delivery-checker",
"mesh-delivery modules/mesh-delivery-forge-bridge",
"mesh-delivery modules/mesh-delivery-indexer",
"mesh-delivery modules/mesh-delivery-teller",
"mesh-delivery modules/mesh-delivery-view",
"mesh-delivery modules/mesh-delivery-watchman",
"mesh-host", "mesh-host",
"mesh-lab", "mesh-lab",
"mesh-media-catalog", "mesh-media-catalog",
"mesh-sdk", "mesh-sdk",
"mesh-tools" "mesh-tools",
"okioki"
], ],
"duplicate-check": "on", "duplicate-check": "on",
"judge-model": "sonnet", "judge-model": "sonnet",
+23 -1
View File
@@ -105,6 +105,7 @@
"mesh-catalog modules/betterbird", "mesh-catalog modules/betterbird",
"mesh-catalog modules/blueman", "mesh-catalog modules/blueman",
"mesh-catalog modules/bluetooth", "mesh-catalog modules/bluetooth",
"mesh-catalog modules/brother",
"mesh-catalog modules/ca-trust", "mesh-catalog modules/ca-trust",
"mesh-catalog modules/claude-code", "mesh-catalog modules/claude-code",
"mesh-catalog modules/claude-licence-manager", "mesh-catalog modules/claude-licence-manager",
@@ -138,6 +139,7 @@
"mesh-catalog modules/influxdb", "mesh-catalog modules/influxdb",
"mesh-catalog modules/invoicing", "mesh-catalog modules/invoicing",
"mesh-catalog modules/jira", "mesh-catalog modules/jira",
"mesh-catalog modules/kernel",
"mesh-catalog modules/keycloak", "mesh-catalog modules/keycloak",
"mesh-catalog modules/lab", "mesh-catalog modules/lab",
"mesh-catalog modules/lemurs", "mesh-catalog modules/lemurs",
@@ -149,11 +151,23 @@
"mesh-catalog modules/marrytts", "mesh-catalog modules/marrytts",
"mesh-catalog modules/matrix", "mesh-catalog modules/matrix",
"mesh-catalog modules/memory-pressure", "mesh-catalog modules/memory-pressure",
"mesh-catalog modules/mesh-build-go",
"mesh-catalog modules/mesh-build-node",
"mesh-catalog modules/mesh-catalog", "mesh-catalog modules/mesh-catalog",
"mesh-catalog modules/mesh-cli", "mesh-catalog modules/mesh-cli",
"mesh-catalog modules/mesh-config",
"mesh-catalog modules/mesh-delivery", "mesh-catalog modules/mesh-delivery",
"mesh-catalog modules/mesh-delivery-gate", "mesh-catalog modules/mesh-delivery-gate",
"mesh-catalog modules/mesh-files",
"mesh-catalog modules/mesh-issues", "mesh-catalog modules/mesh-issues",
"mesh-catalog modules/mesh-knowledge",
"mesh-catalog modules/mesh-mail",
"mesh-catalog modules/mesh-mail-notifier",
"mesh-catalog modules/mesh-mail-reader",
"mesh-catalog modules/mesh-mail-web",
"mesh-catalog modules/mesh-provisioner",
"mesh-catalog modules/mesh-provisioner-client",
"mesh-catalog modules/mesh-reads",
"mesh-catalog modules/mesh-vault", "mesh-catalog modules/mesh-vault",
"mesh-catalog modules/mesh-watcher", "mesh-catalog modules/mesh-watcher",
"mesh-catalog modules/messenger", "mesh-catalog modules/messenger",
@@ -223,11 +237,19 @@
"mesh-controller modules/build-agent", "mesh-controller modules/build-agent",
"mesh-controller modules/route-proxy", "mesh-controller modules/route-proxy",
"mesh-delivery", "mesh-delivery",
"mesh-delivery modules/mesh-delivery-builder",
"mesh-delivery modules/mesh-delivery-checker",
"mesh-delivery modules/mesh-delivery-forge-bridge",
"mesh-delivery modules/mesh-delivery-indexer",
"mesh-delivery modules/mesh-delivery-teller",
"mesh-delivery modules/mesh-delivery-view",
"mesh-delivery modules/mesh-delivery-watchman",
"mesh-host", "mesh-host",
"mesh-lab", "mesh-lab",
"mesh-media-catalog", "mesh-media-catalog",
"mesh-sdk", "mesh-sdk",
"mesh-tools" "mesh-tools",
"okioki"
] ]
}, },
"duplicate-check": { "duplicate-check": {