mesh-builder: read the genesis document until the registry binds, and refuse a registry build with neither (hq issue 121, ADR 0336) #289

Merged
mesh-admin merged 1 commits from fix/121-genesis-package-registry into main 2026-10-13 04:22:05 +00:00
Contributor

after: novox/mesh-catalog

What

  • cmd/mesh-builder packagesFrom(machine): the npm-package-registry binding wins; a binding file named in the environment and absent is an unbound optional requirement, not a fault (before, every build failed reading it). Without a binding it reads the genesis document (MESH_GENESIS_PACKAGE_REGISTRY, JSON: scheme, at, port, npm-path, as, password). The person-run environment comes last. Each build's log says which it resolved from, or that npm-package-registry is unbound on this machine (§4).
  • internal/builder: Npmrc carries From and Machine. A build that needs the registry (a package artifact, an image whose Dockerfile names .npmrc, a TypeScript artifact with an @novox/ dependency, §5) on an agent with none is refused before anything is built, mirrored or published, naming the machine, npm-package-registry unbound, and gitea as its provider (§6). No public-registry fallback.
  • testdata/beside recaptured at mesh-catalog e0bc919 (the head of mesh-catalog #263) so the catalogue tests judge build-agent as changed.

Tests (fail on main, pass here)

  • internal/catalogue/genesis_registry_test.go: over the real catalogue, build-agent is assigned with no registry provider, nothing installed, npm-package-registry listed absent; composes with no binding, no secret, no genesis file; the genesis file is delivered once given; binds to gitea once offered.
  • internal/builder/registry_unbound_test.go: package / .npmrc image / @novox TypeScript each refused before any docker build/run/pull or publish, naming workstation, npm-package-registry, unbound, gitea; a Go bundle and a plain image build; the log says from the genesis document / from the npm-package-registry binding; the named provider provides the requirement in the catalogue.
  • cmd/mesh-builder/packages_test.go: genesis document read when no binding; binding wins over it; neither gives no registry and says where; a document missing a field is refused by name.
  • go vet ./..., go test -race on cmd/mesh-builder, internal/builder, internal/catalogue, and sh merge-check.sh: pass.

Order

After mesh-catalog #263 (declared above): in a merge check these tests read the catalogue's main, so they fail until that merges, then pass on a recheck.

Fixes issue 121 (with mesh-catalog #263 and mesh-host #102).

after: novox/mesh-catalog ## What - `cmd/mesh-builder` `packagesFrom(machine)`: the npm-package-registry binding wins; a binding file named in the environment and absent is an unbound optional requirement, not a fault (before, every build failed reading it). Without a binding it reads the genesis document (`MESH_GENESIS_PACKAGE_REGISTRY`, JSON: scheme, at, port, npm-path, as, password). The person-run environment comes last. Each build's log says which it resolved from, or that `npm-package-registry` is unbound on this machine (§4). - `internal/builder`: `Npmrc` carries `From` and `Machine`. A build that needs the registry (a `package` artifact, an image whose Dockerfile names `.npmrc`, a TypeScript artifact with an `@novox/` dependency, §5) on an agent with none is refused before anything is built, mirrored or published, naming the machine, `npm-package-registry` unbound, and `gitea` as its provider (§6). No public-registry fallback. - `testdata/beside` recaptured at mesh-catalog e0bc919 (the head of mesh-catalog #263) so the catalogue tests judge build-agent as changed. ## Tests (fail on main, pass here) - `internal/catalogue/genesis_registry_test.go`: over the real catalogue, build-agent is assigned with no registry provider, nothing installed, `npm-package-registry` listed absent; composes with no binding, no secret, no genesis file; the genesis file is delivered once given; binds to gitea once offered. - `internal/builder/registry_unbound_test.go`: package / `.npmrc` image / `@novox` TypeScript each refused before any docker build/run/pull or publish, naming workstation, npm-package-registry, unbound, gitea; a Go bundle and a plain image build; the log says `from the genesis document` / `from the npm-package-registry binding`; the named provider provides the requirement in the catalogue. - `cmd/mesh-builder/packages_test.go`: genesis document read when no binding; binding wins over it; neither gives no registry and says where; a document missing a field is refused by name. - `go vet ./...`, `go test -race` on cmd/mesh-builder, internal/builder, internal/catalogue, and `sh merge-check.sh`: pass. ## Order After mesh-catalog #263 (declared above): in a merge check these tests read the catalogue's main, so they fail until that merges, then pass on a recheck. Fixes issue 121 (with mesh-catalog #263 and mesh-host #102).
mesh-admin added 1 commit 2026-10-13 00:56:31 +00:00
Let the build agent run on the genesis document until its registry binds (hq issue 121, ADR 0336)
mesh/merge-gate head a641ed7d15c7 merged into trunk b12c4b82e820 — pass: builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step; every …
mesh/repo-check head a641ed7d15c7 merged into trunk b12c4b82e820 — pass: its merge-check.sh passed
mesh/delivery delivered
mesh/delivery-group group fix/121-genesis-package-registry delivered: every member is delivered
a641ed7d15
With npm-package-registry optional, the binding file the agent's environment
names may be absent, and mesh-builder failed every build on reading it. It now
reads the genesis document the installer seals at genesis's packages step when
no binding is present, prefers the binding when both are, and each build's log
says which it resolved from (§4). A build that needs the registry - a package,
an image naming .npmrc, TypeScript with an @novox/ dependency - on an agent with
neither is refused before anything is built or published, naming the machine,
the unbound requirement and gitea (§6); it never falls back to the public
registry. The captured catalogue moves to the mesh-catalog change it is judged
with.
Author
Contributor

Delivery novox/mesh-controller@a641ed7d15c7 — delivered since 2026-10-13T04:31:18Z

Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step

  • tier 0: mesh-controller
  • tier 1: build-agent
  • ace: receives build-agent
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves
  • grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine

Group fix/121-genesis-package-registry, in order: novox/hq@39830983cc → novox/mesh-host@5f147fe6b9

Machines

  • mesh-controller on novox: passed — healthy 3 times over 4m7s
  • mesh-controller on the rest running it: sent
  • build-agent on ace: passed — healthy 1 times over 29s
  • build-agent on the rest running it: sent

Transitions

  • 2026-10-13 00:56 (new) → proposed (announced): novox/mesh-controller#289's head announced
  • 2026-10-13 01:02 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
  • 2026-10-13 01:02 checked → rejected (refused): the gate failed or could not run, or the repository's own check failed
  • 2026-10-13 03:33 rejected → proposed (recheck): the group's order now reads after: novox/mesh-catalog in #289's description; judged before that line was added, and main moved
  • 2026-10-13 04:12 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
  • 2026-10-13 04:12 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
  • 2026-10-13 04:22 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
  • 2026-10-13 04:22 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit
  • 2026-10-13 04:31 delivering → delivered (done): its walk is done, carrying its own commit: every machine of its deploy plan passed, or was left as its policy says

The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-controller@a641ed7d15c7` — **delivered** since 2026-10-13T04:31:18Z **Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - ace: receives build-agent - g14: receives build-agent - novox: receives mesh-controller, build-agent - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves - grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine **Group** `fix/121-genesis-package-registry`, in order: novox/hq@39830983ccf1 → novox/mesh-host@5f147fe6b9c7 - novox/mesh-catalog@e0bc919d4945 before novox/mesh-controller@a641ed7d15c7: built by - novox/mesh-controller@a641ed7d15c7 before novox/mesh-catalog@e0bc919d4945: built by - **refused**: novox/mesh-catalog@e0bc919d4945 and novox/mesh-controller@a641ed7d15c7: built by puts novox/mesh-catalog@e0bc919d4945 first, built by puts novox/mesh-controller@a641ed7d15c7 first, version skew puts novox/mesh-controller@a641ed7d15c7 first; neither outranks the other: declare the order with a line `after: novox/mesh-catalog` in novox/mesh-controller#289's description, or `after: novox/mesh-controller` in novox/mesh-catalog#263's **Machines** - mesh-controller on novox: passed — healthy 3 times over 4m7s - mesh-controller on the rest running it: sent - build-agent on ace: passed — healthy 1 times over 29s - build-agent on the rest running it: sent **Transitions** - 2026-10-13 00:56 (new) → proposed (announced): novox/mesh-controller#289's head announced - 2026-10-13 01:02 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit - 2026-10-13 01:02 checked → rejected (refused): the gate failed or could not run, or the repository's own check failed - 2026-10-13 03:33 rejected → proposed (recheck): the group's order now reads after: novox/mesh-catalog in #289's description; judged before that line was added, and main moved - 2026-10-13 04:12 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit - 2026-10-13 04:12 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail - 2026-10-13 04:22 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move - 2026-10-13 04:22 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit - 2026-10-13 04:31 delivering → delivered (done): its walk is done, carrying its own commit: every machine of its deploy plan passed, or was left as its policy says The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Author
Contributor

Merge check at a641ed7d
Judged: head a641ed7d15c7 merged into trunk 49102e1645c9; read beside it: mesh-catalog f88e3452f8b8, mesh-controller-main 49102e1645c9, mesh-host 7a41e120635b, mesh-tools 954e1a53eef9

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
  • mesh/repo-check: FAIL — its merge-check.sh failed: --- FAIL: TestGenesisAssignsTheBuildAgentWithNothingProvidingTheRegistry (0.00s)

Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step

  • tier 0: mesh-controller
  • tier 1: build-agent
  • ace: receives build-agent
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves
  • grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
  • read by no module's build: cmd/mesh-builder/packages_test.go, internal/builder/registry_unbound_test.go, internal/catalogue/genesis_registry_test.go, testdata/beside/CAPTURED, testdata/beside/mesh-catalog/modules/artifact-store-tools/module.json.captured, testdata/beside/mesh-catalog/modules/betterbird/module.json.captured, testdata/beside/mesh-catalog/modules/build-agent/module.json.captured, testdata/beside/mesh-catalog/modules/claude-code/module.json.captured, testdata/beside/mesh-catalog/modules/docker/module.json.captured, testdata/beside/mesh-catalog/modules/gitea/module.json.captured, testdata/beside/mesh-catalog/modules/grafana/module.json.captured, testdata/beside/mesh-catalog/modules/home-assistant/module.json.captured, testdata/beside/mesh-catalog/modules/keycloak/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-issues/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-knowledge/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-reads/module.json.captured, testdata/beside/mesh-catalog/modules/messenger/module.json.captured, testdata/beside/mesh-catalog/modules/netcheck/module.json.captured, testdata/beside/mesh-catalog/modules/restic/module.json.captured, testdata/beside/mesh-catalog/modules/route-proxy/module.json.captured, testdata/beside/mesh-catalog/modules/searxng/module.json.captured

Run by the build seat on shanks as build-1791853012743670615 (builds --log build-1791853012743670615).

--- the gate: build-agent, mesh-controller
mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-13T00:28:25Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-13T00:28:25Z

modules the change moves:
  - mesh-controller (changed)

machines:
  - a machine (f35): composes
  - holds mesh-dns-resolver (idt): composes
  - holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
  - a machine (yvbpsm): composes

a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller

notes:
  - cmd/mesh-builder/packages_test.go, internal/builder/registry_unbound_test.go, internal/catalogue/genesis_registry_test.go, testdata/beside/CAPTURED, testdata/beside/mesh-catalog/modules/artifact-store-tools/module.json.captured, testdata/beside/mesh-catalog/modules/betterbird/module.json.captured, testdata/beside/mesh-catalog/modules/build-agent/module.json.captured, testdata/beside/mesh-catalog/modules/claude-code/module.json.captured, testdata/beside/mesh-catalog/modules/docker/module.json.captured, testdata/beside/mesh-catalog/modules/gitea/module.json.captured, testdata/beside/mesh-catalog/modules/grafana/module.json.captured, testdata/beside/mesh-catalog/modules/home-assistant/module.json.captured, testdata/beside/mesh-catalog/modules/keycloak/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-issues/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-knowledge/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-reads/module.json.captured, testdata/beside/mesh-catalog/modules/messenger/module.json.captured, testdata/beside/mesh-catalog/modules/netcheck/module.json.captured, testdata/beside/mesh-catalog/modules/restic/module.json.captured, testdata/beside/mesh-catalog/modules/route-proxy/module.json.captured and testdata/beside/mesh-catalog/modules/searxng/module.json.captured read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok  	github.com/novox/mesh-controller/cmd/mesh-builder	1.047s
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	169.820s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.057s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.060s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.038s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.247s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.088s
?   	github.com/novox/mesh-controller/internal/beside	[no test files]
ok  	github.com/novox/mesh-controller/internal/broker	4.476s
ok  	github.com/novox/mesh-controller/internal/builder	40.271s
--- FAIL: TestGenesisAssignsTheBuildAgentWithNothingProvidingTheRegistry (0.00s)
    genesis_registry_test.go:26: judged against /var/lib/build-agent/workspace/check/mesh-catalog as cloned beside this check
    genesis_registry_test.go:28: the build agent's npm-package-registry is hard (ADR 0336 §1): [artifact-store npm-package-registry]
FAIL
FAIL	github.com/novox/mesh-controller/internal/catalogue	7.478s
ok  	github.com/novox/mesh-controller/internal/conditions	2.708s
ok  	github.com/novox/mesh-controller/internal/envfile	1.059s
ok  	github.com/novox/mesh-controller/internal/facts	1.057s
ok  	github.com/novox/mesh-controller/internal/identity	5.001s
ok  	github.com/novox/mesh-controller/internal/inventory	35.399s
ok  	github.com/novox/mesh-controller/internal/lease	17.716s
ok  	github.com/novox/mesh-controller/internal/licences	4.229s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.043s
ok  	github.com/novox/mesh-controller/internal/link	59.213s
ok  	github.com/novox/mesh-controller/internal/lint	2.497s
ok  	github.com/novox/mesh-controller/internal/outward	1.093s
ok  	github.com/novox/mesh-controller/internal/overlay	1.083s
ok  	github.com/novox/mesh-controller/internal/secrets	1.554s
ok  	github.com/novox/mesh-controller/internal/store	3.522s
ok  	github.com/novox/mesh-controller/internal/testbus	1.266s
ok  	github.com/novox/mesh-controller/internal/token	1.019s
FAIL
--- what failed, picked from the whole of its output (the whole is in the build's log)
--- FAIL: TestGenesisAssignsTheBuildAgentWithNothingProvidingTheRegistry (0.00s)
    genesis_registry_test.go:26: judged against /var/lib/build-agent/workspace/check/mesh-catalog as cloned beside this check
    genesis_registry_test.go:28: the build agent's npm-package-registry is hard (ADR 0336 §1): [artifact-store npm-package-registry]
FAIL	github.com/novox/mesh-controller/internal/catalogue	7.478s
**Merge check** at `a641ed7d` Judged: head `a641ed7d15c7` merged into trunk `49102e1645c9`; read beside it: mesh-catalog `f88e3452f8b8`, mesh-controller-main `49102e1645c9`, mesh-host `7a41e120635b`, mesh-tools `954e1a53eef9` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller) - `mesh/repo-check`: **FAIL** — its merge-check.sh failed: --- FAIL: TestGenesisAssignsTheBuildAgentWithNothingProvidingTheRegistry (0.00s) **Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - ace: receives build-agent - g14: receives build-agent - novox: receives mesh-controller, build-agent - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves - grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine - read by no module's build: cmd/mesh-builder/packages_test.go, internal/builder/registry_unbound_test.go, internal/catalogue/genesis_registry_test.go, testdata/beside/CAPTURED, testdata/beside/mesh-catalog/modules/artifact-store-tools/module.json.captured, testdata/beside/mesh-catalog/modules/betterbird/module.json.captured, testdata/beside/mesh-catalog/modules/build-agent/module.json.captured, testdata/beside/mesh-catalog/modules/claude-code/module.json.captured, testdata/beside/mesh-catalog/modules/docker/module.json.captured, testdata/beside/mesh-catalog/modules/gitea/module.json.captured, testdata/beside/mesh-catalog/modules/grafana/module.json.captured, testdata/beside/mesh-catalog/modules/home-assistant/module.json.captured, testdata/beside/mesh-catalog/modules/keycloak/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-issues/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-knowledge/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-reads/module.json.captured, testdata/beside/mesh-catalog/modules/messenger/module.json.captured, testdata/beside/mesh-catalog/modules/netcheck/module.json.captured, testdata/beside/mesh-catalog/modules/restic/module.json.captured, testdata/beside/mesh-catalog/modules/route-proxy/module.json.captured, testdata/beside/mesh-catalog/modules/searxng/module.json.captured Run by the build seat on shanks as `build-1791853012743670615` (`builds --log build-1791853012743670615`). ``` --- the gate: build-agent, mesh-controller mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8) long-running resources without health: 1 files asking for a setting without saying whether it is trusted: 1 1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-13T00:28:25Z says they run composing every machine as the mesh is the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued composing every machine with the change the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose) judged by controller development build against the facts of 2026-10-13T00:28:25Z modules the change moves: - mesh-controller (changed) machines: - a machine (f35): composes - holds mesh-dns-resolver (idt): composes - holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes - a machine (yvbpsm): composes a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller notes: - cmd/mesh-builder/packages_test.go, internal/builder/registry_unbound_test.go, internal/catalogue/genesis_registry_test.go, testdata/beside/CAPTURED, testdata/beside/mesh-catalog/modules/artifact-store-tools/module.json.captured, testdata/beside/mesh-catalog/modules/betterbird/module.json.captured, testdata/beside/mesh-catalog/modules/build-agent/module.json.captured, testdata/beside/mesh-catalog/modules/claude-code/module.json.captured, testdata/beside/mesh-catalog/modules/docker/module.json.captured, testdata/beside/mesh-catalog/modules/gitea/module.json.captured, testdata/beside/mesh-catalog/modules/grafana/module.json.captured, testdata/beside/mesh-catalog/modules/home-assistant/module.json.captured, testdata/beside/mesh-catalog/modules/keycloak/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-issues/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-knowledge/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-reads/module.json.captured, testdata/beside/mesh-catalog/modules/messenger/module.json.captured, testdata/beside/mesh-catalog/modules/netcheck/module.json.captured, testdata/beside/mesh-catalog/modules/restic/module.json.captured, testdata/beside/mesh-catalog/modules/route-proxy/module.json.captured and testdata/beside/mesh-catalog/modules/searxng/module.json.captured read by no module's build, and rebuild nothing (issue 280) --- its merge-check.sh (go toolchain) ok github.com/novox/mesh-controller/cmd/mesh-builder 1.047s ok github.com/novox/mesh-controller/cmd/mesh-controller 169.820s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.057s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.060s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.038s ok github.com/novox/mesh-controller/examples/route-proxy 1.247s ok github.com/novox/mesh-controller/internal/artifacts 1.088s ? github.com/novox/mesh-controller/internal/beside [no test files] ok github.com/novox/mesh-controller/internal/broker 4.476s ok github.com/novox/mesh-controller/internal/builder 40.271s --- FAIL: TestGenesisAssignsTheBuildAgentWithNothingProvidingTheRegistry (0.00s) genesis_registry_test.go:26: judged against /var/lib/build-agent/workspace/check/mesh-catalog as cloned beside this check genesis_registry_test.go:28: the build agent's npm-package-registry is hard (ADR 0336 §1): [artifact-store npm-package-registry] FAIL FAIL github.com/novox/mesh-controller/internal/catalogue 7.478s ok github.com/novox/mesh-controller/internal/conditions 2.708s ok github.com/novox/mesh-controller/internal/envfile 1.059s ok github.com/novox/mesh-controller/internal/facts 1.057s ok github.com/novox/mesh-controller/internal/identity 5.001s ok github.com/novox/mesh-controller/internal/inventory 35.399s ok github.com/novox/mesh-controller/internal/lease 17.716s ok github.com/novox/mesh-controller/internal/licences 4.229s ok github.com/novox/mesh-controller/internal/licences/adapters 1.043s ok github.com/novox/mesh-controller/internal/link 59.213s ok github.com/novox/mesh-controller/internal/lint 2.497s ok github.com/novox/mesh-controller/internal/outward 1.093s ok github.com/novox/mesh-controller/internal/overlay 1.083s ok github.com/novox/mesh-controller/internal/secrets 1.554s ok github.com/novox/mesh-controller/internal/store 3.522s ok github.com/novox/mesh-controller/internal/testbus 1.266s ok github.com/novox/mesh-controller/internal/token 1.019s FAIL --- what failed, picked from the whole of its output (the whole is in the build's log) --- FAIL: TestGenesisAssignsTheBuildAgentWithNothingProvidingTheRegistry (0.00s) genesis_registry_test.go:26: judged against /var/lib/build-agent/workspace/check/mesh-catalog as cloned beside this check genesis_registry_test.go:28: the build agent's npm-package-registry is hard (ADR 0336 §1): [artifact-store npm-package-registry] FAIL github.com/novox/mesh-controller/internal/catalogue 7.478s ```
mesh-admin left a comment
Author
Contributor

Verdict: approve at a641ed7d15

Independent review against ADR 0336 (read whole, with reasoning) and ADR 0330.

No blocking finding in the code. Merge preconditions outside the code: (1) mesh-catalog #263 merges first, as the after: novox/mesh-catalog line declares; (2) the delivery group fix/121-genesis-package-registry is rechecked and reads green, because it was judged rejected with the order contradiction and has not been judged since this line; (3) mesh/merge-gate and mesh/repo-check are rechecked against trunk 584ee991, since both read "out of date". The earlier repo-check failed only TestGenesisAssignsTheBuildAgentWithNothingProvidingTheRegistry, judged against catalogue main, which is expected until #263 merges.

What I checked:

  1. §4, the binding wins. packagesFrom(machine) reads the binding first, takes a named-but-absent binding file as unbound rather than as a fault, then reads the genesis document, and only then the environment of a person-run builder. Each build's log carries a packages line saying "resolved from the npm-package-registry binding", "the genesis document", or that the requirement is unbound on the named machine. The genesis document's fields (scheme, at, port, npm-path, as, password) match mesh-host #102's GenesisRegistry exactly, and a document missing a field is refused by name.
  2. §6, the refusal. In internal/builder the check runs after the manifest is read and before the .npmrc, the base mirroring and any docker build/run/pull or publish. It names the machine, npm-package-registry unbound, and gitea as the provider, and a test holds gitea to the catalogue's provider. Nothing falls back to the public registry: with no registry, the refusal covers package artifacts, .npmrc images and @novox/ TypeScript, and installOwn's existing guard still refuses a scoped dependency.
  3. Tests fail without the change. With main's code and the PR's tests, internal/builder and cmd/mesh-builder do not compile (Npmrc.Machine, FromBinding, FromGenesis are new). As a behavioural check I removed only the refusal block from builder.go at the head: all three subtests of TestABuildNeedingTheRegistryIsRefusedOnAnAgentWithoutOne fail. TestGenesisAssignsTheBuildAgentWithNothingProvidingTheRegistry fails against catalogue main.
  4. The test that needs #263 passes with #263 beside it. go test ./... with MESH_CHECK_BESIDE holding mesh-catalog at main f88e3452 fails only TestGenesisAssignsTheBuildAgentWithNothingProvidingTheRegistry ("npm-package-registry is hard"). With mesh-catalog at e0bc919d (the head of #263), mesh-host main and mesh-sdk 33917f91 beside it, the whole suite passes. It also passes on a local merge of this head into current main 584ee991. go vet is clean on the three packages.

The builder's two choices, judged against the ADR:
(a) Binds and secrets cannot be marked only-when-bound. I accept this: ADR 0330 §6 already composes no binding or secret for an absent requirement, and genesis_registry_test.go shows neither file in the declaration while unbound. ADR 0336 §1 and its How it is checked say otherwise, though, and need a progressive insight (knowledge-base.propose with insight). This is not blocking for this PR.
(b) A TypeScript build that depends only on @novox/mesh-sdk is refused with no registry. This is what ADR 0336 §5 says ("a TypeScript artifact with an @novox/ dependency"), so the code conforms. It is stricter than the build needs, though: dependencies.go takes the SDK out of what is installed and resolves it from the toolchain image, so such a bundle never reaches the registry. My check in item 3 confirms it: without the refusal, the SDK-only bundle builds. The impact is that on a mesh without the gitea module, every SDK-only TypeScript module is refused on every build agent except genesis's. I am not blocking on it, because the code follows an accepted clause. If the operator wants SDK-only bundles to build unbound, that needs a progressive insight on §5 (the fact that the SDK is never fetched) and then a narrower check, scopedDependencies minus the SDK.

Non-blocking:

  • scopedDependencies reads only dependencies. installSteps also installs optionalDependencies, so a module with an @novox/ package only there is neither refused nor guarded. installOwn's existing guard has the same gap.
  • The ADR's How it is checked asks for plan and node to list the requirement unbound. The resolution test checks Resolution.Absent, which feeds them, but does not call either verb.
  • testdata/beside/CAPTURED names e0bc919d. It stays reachable as long as #263 is merged with a merge commit (the repository default), not squashed.

Statuses at this head:

  • mesh/merge-gate: pending, "out of date: judged against trunk 49102e1645, the trunk is now 584ee991961c; judged again on a recheck or when it is merged" (its earlier verdict: PASS, 4 of 4 compose)
  • mesh/repo-check: pending, same wording (its earlier verdict: FAIL, TestGenesisAssignsTheBuildAgentWithNothingProvidingTheRegistry against catalogue main)
  • mesh/delivery: failure, "rejected: the gate failed or could not run, or the repository's own check failed"
  • mesh/delivery-group: failure, "group fix/121-genesis-package-registry rejected: its order contradicts itself: novox/mesh-catalog@e0bc919d49 and novox/mesh-controller@a6…"
Verdict: approve at a641ed7d15c73ff750c13f7ca8fee83cb2c19002 Independent review against ADR 0336 (read whole, with reasoning) and ADR 0330. No blocking finding in the code. Merge preconditions outside the code: (1) mesh-catalog #263 merges first, as the `after: novox/mesh-catalog` line declares; (2) the delivery group fix/121-genesis-package-registry is rechecked and reads green, because it was judged rejected with the order contradiction and has not been judged since this line; (3) mesh/merge-gate and mesh/repo-check are rechecked against trunk 584ee991, since both read "out of date". The earlier repo-check failed only TestGenesisAssignsTheBuildAgentWithNothingProvidingTheRegistry, judged against catalogue main, which is expected until #263 merges. What I checked: 1. §4, the binding wins. `packagesFrom(machine)` reads the binding first, takes a named-but-absent binding file as unbound rather than as a fault, then reads the genesis document, and only then the environment of a person-run builder. Each build's log carries a `packages` line saying "resolved from the npm-package-registry binding", "the genesis document", or that the requirement is unbound on the named machine. The genesis document's fields (scheme, at, port, npm-path, as, password) match mesh-host #102's GenesisRegistry exactly, and a document missing a field is refused by name. 2. §6, the refusal. In `internal/builder` the check runs after the manifest is read and before the .npmrc, the base mirroring and any docker build/run/pull or publish. It names the machine, `npm-package-registry` unbound, and `gitea` as the provider, and a test holds `gitea` to the catalogue's provider. Nothing falls back to the public registry: with no registry, the refusal covers package artifacts, .npmrc images and `@novox/` TypeScript, and installOwn's existing guard still refuses a scoped dependency. 3. Tests fail without the change. With main's code and the PR's tests, internal/builder and cmd/mesh-builder do not compile (Npmrc.Machine, FromBinding, FromGenesis are new). As a behavioural check I removed only the refusal block from builder.go at the head: all three subtests of TestABuildNeedingTheRegistryIsRefusedOnAnAgentWithoutOne fail. TestGenesisAssignsTheBuildAgentWithNothingProvidingTheRegistry fails against catalogue main. 4. The test that needs #263 passes with #263 beside it. `go test ./...` with MESH_CHECK_BESIDE holding mesh-catalog at main f88e3452 fails only TestGenesisAssignsTheBuildAgentWithNothingProvidingTheRegistry ("npm-package-registry is hard"). With mesh-catalog at e0bc919d (the head of #263), mesh-host main and mesh-sdk 33917f91 beside it, the whole suite passes. It also passes on a local merge of this head into current main 584ee991. `go vet` is clean on the three packages. The builder's two choices, judged against the ADR: (a) Binds and secrets cannot be marked only-when-bound. I accept this: ADR 0330 §6 already composes no binding or secret for an absent requirement, and genesis_registry_test.go shows neither file in the declaration while unbound. ADR 0336 §1 and its How it is checked say otherwise, though, and need a progressive insight (knowledge-base.propose with `insight`). This is not blocking for this PR. (b) A TypeScript build that depends only on @novox/mesh-sdk is refused with no registry. This is what ADR 0336 §5 says ("a TypeScript artifact with an `@novox/` dependency"), so the code conforms. It is stricter than the build needs, though: dependencies.go takes the SDK out of what is installed and resolves it from the toolchain image, so such a bundle never reaches the registry. My check in item 3 confirms it: without the refusal, the SDK-only bundle builds. The impact is that on a mesh without the gitea module, every SDK-only TypeScript module is refused on every build agent except genesis's. I am not blocking on it, because the code follows an accepted clause. If the operator wants SDK-only bundles to build unbound, that needs a progressive insight on §5 (the fact that the SDK is never fetched) and then a narrower check, `scopedDependencies` minus the SDK. Non-blocking: - `scopedDependencies` reads only `dependencies`. installSteps also installs `optionalDependencies`, so a module with an `@novox/` package only there is neither refused nor guarded. installOwn's existing guard has the same gap. - The ADR's How it is checked asks for `plan` and `node` to list the requirement unbound. The resolution test checks `Resolution.Absent`, which feeds them, but does not call either verb. - testdata/beside/CAPTURED names e0bc919d. It stays reachable as long as #263 is merged with a merge commit (the repository default), not squashed. Statuses at this head: - mesh/merge-gate: pending, "out of date: judged against trunk 49102e1645c9, the trunk is now 584ee991961c; judged again on a recheck or when it is merged" (its earlier verdict: PASS, 4 of 4 compose) - mesh/repo-check: pending, same wording (its earlier verdict: FAIL, TestGenesisAssignsTheBuildAgentWithNothingProvidingTheRegistry against catalogue main) - mesh/delivery: failure, "rejected: the gate failed or could not run, or the repository's own check failed" - mesh/delivery-group: failure, "group fix/121-genesis-package-registry rejected: its order contradicts itself: novox/mesh-catalog@e0bc919d4945 and novox/mesh-controller@a6…"
Author
Contributor

Merge check at a641ed7d
Judged: head a641ed7d15c7 merged into trunk 584ee991961c; read beside it: mesh-catalog f88e3452f8b8, mesh-controller-main 584ee991961c, mesh-host 7a41e120635b, mesh-tools 954e1a53eef9

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
  • mesh/repo-check: FAIL — its merge-check.sh failed: --- FAIL: TestGenesisAssignsTheBuildAgentWithNothingProvidingTheRegistry (0.00s)

Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step

  • tier 0: mesh-controller
  • tier 1: build-agent
  • ace: receives build-agent
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves
  • grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
  • read by no module's build: cmd/mesh-builder/packages_test.go, internal/builder/registry_unbound_test.go, internal/catalogue/genesis_registry_test.go, testdata/beside/CAPTURED, testdata/beside/mesh-catalog/modules/artifact-store-tools/module.json.captured, testdata/beside/mesh-catalog/modules/betterbird/module.json.captured, testdata/beside/mesh-catalog/modules/build-agent/module.json.captured, testdata/beside/mesh-catalog/modules/claude-code/module.json.captured, testdata/beside/mesh-catalog/modules/docker/module.json.captured, testdata/beside/mesh-catalog/modules/gitea/module.json.captured, testdata/beside/mesh-catalog/modules/grafana/module.json.captured, testdata/beside/mesh-catalog/modules/home-assistant/module.json.captured, testdata/beside/mesh-catalog/modules/keycloak/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-issues/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-knowledge/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-reads/module.json.captured, testdata/beside/mesh-catalog/modules/messenger/module.json.captured, testdata/beside/mesh-catalog/modules/netcheck/module.json.captured, testdata/beside/mesh-catalog/modules/restic/module.json.captured, testdata/beside/mesh-catalog/modules/route-proxy/module.json.captured, testdata/beside/mesh-catalog/modules/searxng/module.json.captured

Run by the build seat on novox as build-1791862416404943235 (builds --log build-1791862416404943235).

--- the gate: build-agent, mesh-controller
mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-13T00:28:25Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-13T00:28:25Z

modules the change moves:
  - mesh-controller (changed)

machines:
  - a machine (f35): composes
  - holds mesh-dns-resolver (idt): composes
  - holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
  - a machine (yvbpsm): composes

a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller

notes:
  - cmd/mesh-builder/packages_test.go, internal/builder/registry_unbound_test.go, internal/catalogue/genesis_registry_test.go, testdata/beside/CAPTURED, testdata/beside/mesh-catalog/modules/artifact-store-tools/module.json.captured, testdata/beside/mesh-catalog/modules/betterbird/module.json.captured, testdata/beside/mesh-catalog/modules/build-agent/module.json.captured, testdata/beside/mesh-catalog/modules/claude-code/module.json.captured, testdata/beside/mesh-catalog/modules/docker/module.json.captured, testdata/beside/mesh-catalog/modules/gitea/module.json.captured, testdata/beside/mesh-catalog/modules/grafana/module.json.captured, testdata/beside/mesh-catalog/modules/home-assistant/module.json.captured, testdata/beside/mesh-catalog/modules/keycloak/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-issues/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-knowledge/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-reads/module.json.captured, testdata/beside/mesh-catalog/modules/messenger/module.json.captured, testdata/beside/mesh-catalog/modules/netcheck/module.json.captured, testdata/beside/mesh-catalog/modules/restic/module.json.captured, testdata/beside/mesh-catalog/modules/route-proxy/module.json.captured and testdata/beside/mesh-catalog/modules/searxng/module.json.captured read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok  	github.com/novox/mesh-controller/cmd/mesh-builder	1.063s
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	225.788s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.020s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.032s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.023s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.141s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.063s
?   	github.com/novox/mesh-controller/internal/beside	[no test files]
ok  	github.com/novox/mesh-controller/internal/broker	5.064s
ok  	github.com/novox/mesh-controller/internal/builder	66.838s
--- FAIL: TestGenesisAssignsTheBuildAgentWithNothingProvidingTheRegistry (0.00s)
    genesis_registry_test.go:26: judged against /var/lib/build-agent/workspace/check/mesh-catalog as cloned beside this check
    genesis_registry_test.go:28: the build agent's npm-package-registry is hard (ADR 0336 §1): [artifact-store npm-package-registry]
FAIL
FAIL	github.com/novox/mesh-controller/internal/catalogue	7.993s
ok  	github.com/novox/mesh-controller/internal/conditions	2.803s
ok  	github.com/novox/mesh-controller/internal/envfile	1.034s
ok  	github.com/novox/mesh-controller/internal/facts	1.033s
ok  	github.com/novox/mesh-controller/internal/identity	8.713s
ok  	github.com/novox/mesh-controller/internal/inventory	65.064s
ok  	github.com/novox/mesh-controller/internal/lease	17.704s
ok  	github.com/novox/mesh-controller/internal/licences	7.704s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.011s
ok  	github.com/novox/mesh-controller/internal/link	69.192s
ok  	github.com/novox/mesh-controller/internal/lint	2.372s
ok  	github.com/novox/mesh-controller/internal/outward	1.034s
ok  	github.com/novox/mesh-controller/internal/overlay	1.023s
ok  	github.com/novox/mesh-controller/internal/secrets	1.456s
ok  	github.com/novox/mesh-controller/internal/store	5.630s
ok  	github.com/novox/mesh-controller/internal/testbus	1.189s
ok  	github.com/novox/mesh-controller/internal/token	1.015s
FAIL
--- what failed, picked from the whole of its output (the whole is in the build's log)
--- FAIL: TestGenesisAssignsTheBuildAgentWithNothingProvidingTheRegistry (0.00s)
    genesis_registry_test.go:26: judged against /var/lib/build-agent/workspace/check/mesh-catalog as cloned beside this check
    genesis_registry_test.go:28: the build agent's npm-package-registry is hard (ADR 0336 §1): [artifact-store npm-package-registry]
FAIL	github.com/novox/mesh-controller/internal/catalogue	7.993s

Out of date when it landed: out of date: judged against trunk 584ee99196, the trunk is now 1c9bc9cf0041; judged again on a recheck or when it is merged

**Merge check** at `a641ed7d` Judged: head `a641ed7d15c7` merged into trunk `584ee991961c`; read beside it: mesh-catalog `f88e3452f8b8`, mesh-controller-main `584ee991961c`, mesh-host `7a41e120635b`, mesh-tools `954e1a53eef9` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller) - `mesh/repo-check`: **FAIL** — its merge-check.sh failed: --- FAIL: TestGenesisAssignsTheBuildAgentWithNothingProvidingTheRegistry (0.00s) **Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - ace: receives build-agent - g14: receives build-agent - novox: receives mesh-controller, build-agent - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves - grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine - read by no module's build: cmd/mesh-builder/packages_test.go, internal/builder/registry_unbound_test.go, internal/catalogue/genesis_registry_test.go, testdata/beside/CAPTURED, testdata/beside/mesh-catalog/modules/artifact-store-tools/module.json.captured, testdata/beside/mesh-catalog/modules/betterbird/module.json.captured, testdata/beside/mesh-catalog/modules/build-agent/module.json.captured, testdata/beside/mesh-catalog/modules/claude-code/module.json.captured, testdata/beside/mesh-catalog/modules/docker/module.json.captured, testdata/beside/mesh-catalog/modules/gitea/module.json.captured, testdata/beside/mesh-catalog/modules/grafana/module.json.captured, testdata/beside/mesh-catalog/modules/home-assistant/module.json.captured, testdata/beside/mesh-catalog/modules/keycloak/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-issues/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-knowledge/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-reads/module.json.captured, testdata/beside/mesh-catalog/modules/messenger/module.json.captured, testdata/beside/mesh-catalog/modules/netcheck/module.json.captured, testdata/beside/mesh-catalog/modules/restic/module.json.captured, testdata/beside/mesh-catalog/modules/route-proxy/module.json.captured, testdata/beside/mesh-catalog/modules/searxng/module.json.captured Run by the build seat on novox as `build-1791862416404943235` (`builds --log build-1791862416404943235`). ``` --- the gate: build-agent, mesh-controller mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8) long-running resources without health: 1 files asking for a setting without saying whether it is trusted: 1 1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-13T00:28:25Z says they run composing every machine as the mesh is the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued composing every machine with the change the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose) judged by controller development build against the facts of 2026-10-13T00:28:25Z modules the change moves: - mesh-controller (changed) machines: - a machine (f35): composes - holds mesh-dns-resolver (idt): composes - holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes - a machine (yvbpsm): composes a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller notes: - cmd/mesh-builder/packages_test.go, internal/builder/registry_unbound_test.go, internal/catalogue/genesis_registry_test.go, testdata/beside/CAPTURED, testdata/beside/mesh-catalog/modules/artifact-store-tools/module.json.captured, testdata/beside/mesh-catalog/modules/betterbird/module.json.captured, testdata/beside/mesh-catalog/modules/build-agent/module.json.captured, testdata/beside/mesh-catalog/modules/claude-code/module.json.captured, testdata/beside/mesh-catalog/modules/docker/module.json.captured, testdata/beside/mesh-catalog/modules/gitea/module.json.captured, testdata/beside/mesh-catalog/modules/grafana/module.json.captured, testdata/beside/mesh-catalog/modules/home-assistant/module.json.captured, testdata/beside/mesh-catalog/modules/keycloak/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-issues/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-knowledge/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-reads/module.json.captured, testdata/beside/mesh-catalog/modules/messenger/module.json.captured, testdata/beside/mesh-catalog/modules/netcheck/module.json.captured, testdata/beside/mesh-catalog/modules/restic/module.json.captured, testdata/beside/mesh-catalog/modules/route-proxy/module.json.captured and testdata/beside/mesh-catalog/modules/searxng/module.json.captured read by no module's build, and rebuild nothing (issue 280) --- its merge-check.sh (go toolchain) ok github.com/novox/mesh-controller/cmd/mesh-builder 1.063s ok github.com/novox/mesh-controller/cmd/mesh-controller 225.788s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.020s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.032s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.023s ok github.com/novox/mesh-controller/examples/route-proxy 1.141s ok github.com/novox/mesh-controller/internal/artifacts 1.063s ? github.com/novox/mesh-controller/internal/beside [no test files] ok github.com/novox/mesh-controller/internal/broker 5.064s ok github.com/novox/mesh-controller/internal/builder 66.838s --- FAIL: TestGenesisAssignsTheBuildAgentWithNothingProvidingTheRegistry (0.00s) genesis_registry_test.go:26: judged against /var/lib/build-agent/workspace/check/mesh-catalog as cloned beside this check genesis_registry_test.go:28: the build agent's npm-package-registry is hard (ADR 0336 §1): [artifact-store npm-package-registry] FAIL FAIL github.com/novox/mesh-controller/internal/catalogue 7.993s ok github.com/novox/mesh-controller/internal/conditions 2.803s ok github.com/novox/mesh-controller/internal/envfile 1.034s ok github.com/novox/mesh-controller/internal/facts 1.033s ok github.com/novox/mesh-controller/internal/identity 8.713s ok github.com/novox/mesh-controller/internal/inventory 65.064s ok github.com/novox/mesh-controller/internal/lease 17.704s ok github.com/novox/mesh-controller/internal/licences 7.704s ok github.com/novox/mesh-controller/internal/licences/adapters 1.011s ok github.com/novox/mesh-controller/internal/link 69.192s ok github.com/novox/mesh-controller/internal/lint 2.372s ok github.com/novox/mesh-controller/internal/outward 1.034s ok github.com/novox/mesh-controller/internal/overlay 1.023s ok github.com/novox/mesh-controller/internal/secrets 1.456s ok github.com/novox/mesh-controller/internal/store 5.630s ok github.com/novox/mesh-controller/internal/testbus 1.189s ok github.com/novox/mesh-controller/internal/token 1.015s FAIL --- what failed, picked from the whole of its output (the whole is in the build's log) --- FAIL: TestGenesisAssignsTheBuildAgentWithNothingProvidingTheRegistry (0.00s) genesis_registry_test.go:26: judged against /var/lib/build-agent/workspace/check/mesh-catalog as cloned beside this check genesis_registry_test.go:28: the build agent's npm-package-registry is hard (ADR 0336 §1): [artifact-store npm-package-registry] FAIL github.com/novox/mesh-controller/internal/catalogue 7.993s ``` **Out of date when it landed**: out of date: judged against trunk 584ee991961c, the trunk is now 1c9bc9cf0041; judged again on a recheck or when it is merged
Author
Contributor

Merge check at a641ed7d
Judged: head a641ed7d15c7 merged into trunk 1c9bc9cf0041; read beside it: mesh-catalog 53e51864969f, mesh-controller-main 1c9bc9cf0041, mesh-host 7a41e120635b, mesh-tools 954e1a53eef9

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
  • mesh/repo-check: PASS — its merge-check.sh passed

Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step

  • tier 0: mesh-controller
  • tier 1: build-agent
  • ace: receives build-agent
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves
  • grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
  • read by no module's build: cmd/mesh-builder/packages_test.go, internal/builder/registry_unbound_test.go, internal/catalogue/genesis_registry_test.go, testdata/beside/CAPTURED, testdata/beside/mesh-catalog/modules/artifact-store-tools/module.json.captured, testdata/beside/mesh-catalog/modules/betterbird/module.json.captured, testdata/beside/mesh-catalog/modules/build-agent/module.json.captured, testdata/beside/mesh-catalog/modules/claude-code/module.json.captured, testdata/beside/mesh-catalog/modules/docker/module.json.captured, testdata/beside/mesh-catalog/modules/gitea/module.json.captured, testdata/beside/mesh-catalog/modules/grafana/module.json.captured, testdata/beside/mesh-catalog/modules/home-assistant/module.json.captured, testdata/beside/mesh-catalog/modules/keycloak/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-issues/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-knowledge/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-reads/module.json.captured, testdata/beside/mesh-catalog/modules/messenger/module.json.captured, testdata/beside/mesh-catalog/modules/netcheck/module.json.captured, testdata/beside/mesh-catalog/modules/restic/module.json.captured, testdata/beside/mesh-catalog/modules/route-proxy/module.json.captured, testdata/beside/mesh-catalog/modules/searxng/module.json.captured

Run by the build seat on novox as build-1791863526333004108 (builds --log build-1791863526333004108).

--- the gate: build-agent, mesh-controller
mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-13T03:50:01Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-13T03:50:01Z

modules the change moves:
  - mesh-controller (changed)

machines:
  - a machine (f35): composes
  - holds mesh-dns-resolver (idt): composes
  - holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
  - a machine (yvbpsm): composes

a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller

notes:
  - cmd/mesh-builder/packages_test.go, internal/builder/registry_unbound_test.go, internal/catalogue/genesis_registry_test.go, testdata/beside/CAPTURED, testdata/beside/mesh-catalog/modules/artifact-store-tools/module.json.captured, testdata/beside/mesh-catalog/modules/betterbird/module.json.captured, testdata/beside/mesh-catalog/modules/build-agent/module.json.captured, testdata/beside/mesh-catalog/modules/claude-code/module.json.captured, testdata/beside/mesh-catalog/modules/docker/module.json.captured, testdata/beside/mesh-catalog/modules/gitea/module.json.captured, testdata/beside/mesh-catalog/modules/grafana/module.json.captured, testdata/beside/mesh-catalog/modules/home-assistant/module.json.captured, testdata/beside/mesh-catalog/modules/keycloak/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-issues/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-knowledge/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-reads/module.json.captured, testdata/beside/mesh-catalog/modules/messenger/module.json.captured, testdata/beside/mesh-catalog/modules/netcheck/module.json.captured, testdata/beside/mesh-catalog/modules/restic/module.json.captured, testdata/beside/mesh-catalog/modules/route-proxy/module.json.captured and testdata/beside/mesh-catalog/modules/searxng/module.json.captured read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok  	github.com/novox/mesh-controller/cmd/mesh-builder	1.045s
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	211.658s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.036s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.041s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.035s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.155s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.066s
?   	github.com/novox/mesh-controller/internal/beside	[no test files]
ok  	github.com/novox/mesh-controller/internal/broker	6.293s
ok  	github.com/novox/mesh-controller/internal/builder	59.721s
ok  	github.com/novox/mesh-controller/internal/catalogue	9.586s
ok  	github.com/novox/mesh-controller/internal/conditions	2.676s
ok  	github.com/novox/mesh-controller/internal/envfile	1.038s
ok  	github.com/novox/mesh-controller/internal/facts	1.043s
ok  	github.com/novox/mesh-controller/internal/identity	8.413s
ok  	github.com/novox/mesh-controller/internal/inventory	42.686s
ok  	github.com/novox/mesh-controller/internal/lease	17.618s
ok  	github.com/novox/mesh-controller/internal/licences	6.310s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.009s
ok  	github.com/novox/mesh-controller/internal/link	62.659s
ok  	github.com/novox/mesh-controller/internal/lint	2.390s
ok  	github.com/novox/mesh-controller/internal/outward	1.032s
ok  	github.com/novox/mesh-controller/internal/overlay	1.052s
ok  	github.com/novox/mesh-controller/internal/secrets	1.539s
ok  	github.com/novox/mesh-controller/internal/store	4.021s
ok  	github.com/novox/mesh-controller/internal/testbus	1.253s
ok  	github.com/novox/mesh-controller/internal/token	1.014s
store tests, each run against the store:
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.23s)
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.24s)
  ./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.23s)
  ./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.22s)
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.21s)
  ./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.18s)
  ./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.00s)
  ./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.26s)
  ./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.14s)
  ./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.27s)
  ./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.26s)
  ./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.22s)
  ./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.22s)
  ./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.29s)
  ./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.23s)
  ./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.27s)
  ./cmd/mesh-controller --- PASS: TestReplay237 (0.24s)
  ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.22s)
  ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.23s)
  ./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.24s)
  ./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.26s)
  ./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.35s)
  ./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.38s)
  ./cmd/mesh-controller --- PASS: TestReplay201 (0.19s)
  ./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.16s)
  ./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.17s)
  ./cmd/mesh-controller --- PASS: TestReplay401 (0.34s)
  ./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.29s)
  ./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.33s)
  ./cmd/mesh-controller --- PASS: TestReplay340 (0.29s)
  ./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.22s)
  ./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.19s)
  ./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.09s)
  ./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.14s)
  ./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.09s)
  ./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.08s)
  ./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.08s)
  ./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.07s)
  ./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.07s)
  ./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.08s)

Out of date when it landed: out of date: judged against trunk 1c9bc9cf00, the trunk is now b12c4b82e820; judged again on a recheck or when it is merged

**Merge check** at `a641ed7d` Judged: head `a641ed7d15c7` merged into trunk `1c9bc9cf0041`; read beside it: mesh-catalog `53e51864969f`, mesh-controller-main `1c9bc9cf0041`, mesh-host `7a41e120635b`, mesh-tools `954e1a53eef9` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller) - `mesh/repo-check`: **PASS** — its merge-check.sh passed **Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - ace: receives build-agent - g14: receives build-agent - novox: receives mesh-controller, build-agent - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves - grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine - read by no module's build: cmd/mesh-builder/packages_test.go, internal/builder/registry_unbound_test.go, internal/catalogue/genesis_registry_test.go, testdata/beside/CAPTURED, testdata/beside/mesh-catalog/modules/artifact-store-tools/module.json.captured, testdata/beside/mesh-catalog/modules/betterbird/module.json.captured, testdata/beside/mesh-catalog/modules/build-agent/module.json.captured, testdata/beside/mesh-catalog/modules/claude-code/module.json.captured, testdata/beside/mesh-catalog/modules/docker/module.json.captured, testdata/beside/mesh-catalog/modules/gitea/module.json.captured, testdata/beside/mesh-catalog/modules/grafana/module.json.captured, testdata/beside/mesh-catalog/modules/home-assistant/module.json.captured, testdata/beside/mesh-catalog/modules/keycloak/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-issues/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-knowledge/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-reads/module.json.captured, testdata/beside/mesh-catalog/modules/messenger/module.json.captured, testdata/beside/mesh-catalog/modules/netcheck/module.json.captured, testdata/beside/mesh-catalog/modules/restic/module.json.captured, testdata/beside/mesh-catalog/modules/route-proxy/module.json.captured, testdata/beside/mesh-catalog/modules/searxng/module.json.captured Run by the build seat on novox as `build-1791863526333004108` (`builds --log build-1791863526333004108`). ``` --- the gate: build-agent, mesh-controller mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8) long-running resources without health: 1 files asking for a setting without saying whether it is trusted: 1 1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-13T03:50:01Z says they run composing every machine as the mesh is the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued composing every machine with the change the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose) judged by controller development build against the facts of 2026-10-13T03:50:01Z modules the change moves: - mesh-controller (changed) machines: - a machine (f35): composes - holds mesh-dns-resolver (idt): composes - holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes - a machine (yvbpsm): composes a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller notes: - cmd/mesh-builder/packages_test.go, internal/builder/registry_unbound_test.go, internal/catalogue/genesis_registry_test.go, testdata/beside/CAPTURED, testdata/beside/mesh-catalog/modules/artifact-store-tools/module.json.captured, testdata/beside/mesh-catalog/modules/betterbird/module.json.captured, testdata/beside/mesh-catalog/modules/build-agent/module.json.captured, testdata/beside/mesh-catalog/modules/claude-code/module.json.captured, testdata/beside/mesh-catalog/modules/docker/module.json.captured, testdata/beside/mesh-catalog/modules/gitea/module.json.captured, testdata/beside/mesh-catalog/modules/grafana/module.json.captured, testdata/beside/mesh-catalog/modules/home-assistant/module.json.captured, testdata/beside/mesh-catalog/modules/keycloak/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-issues/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-knowledge/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-reads/module.json.captured, testdata/beside/mesh-catalog/modules/messenger/module.json.captured, testdata/beside/mesh-catalog/modules/netcheck/module.json.captured, testdata/beside/mesh-catalog/modules/restic/module.json.captured, testdata/beside/mesh-catalog/modules/route-proxy/module.json.captured and testdata/beside/mesh-catalog/modules/searxng/module.json.captured read by no module's build, and rebuild nothing (issue 280) --- its merge-check.sh (go toolchain) ok github.com/novox/mesh-controller/cmd/mesh-builder 1.045s ok github.com/novox/mesh-controller/cmd/mesh-controller 211.658s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.036s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.041s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.035s ok github.com/novox/mesh-controller/examples/route-proxy 1.155s ok github.com/novox/mesh-controller/internal/artifacts 1.066s ? github.com/novox/mesh-controller/internal/beside [no test files] ok github.com/novox/mesh-controller/internal/broker 6.293s ok github.com/novox/mesh-controller/internal/builder 59.721s ok github.com/novox/mesh-controller/internal/catalogue 9.586s ok github.com/novox/mesh-controller/internal/conditions 2.676s ok github.com/novox/mesh-controller/internal/envfile 1.038s ok github.com/novox/mesh-controller/internal/facts 1.043s ok github.com/novox/mesh-controller/internal/identity 8.413s ok github.com/novox/mesh-controller/internal/inventory 42.686s ok github.com/novox/mesh-controller/internal/lease 17.618s ok github.com/novox/mesh-controller/internal/licences 6.310s ok github.com/novox/mesh-controller/internal/licences/adapters 1.009s ok github.com/novox/mesh-controller/internal/link 62.659s ok github.com/novox/mesh-controller/internal/lint 2.390s ok github.com/novox/mesh-controller/internal/outward 1.032s ok github.com/novox/mesh-controller/internal/overlay 1.052s ok github.com/novox/mesh-controller/internal/secrets 1.539s ok github.com/novox/mesh-controller/internal/store 4.021s ok github.com/novox/mesh-controller/internal/testbus 1.253s ok github.com/novox/mesh-controller/internal/token 1.014s store tests, each run against the store: ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.23s) ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.24s) ./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.23s) ./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.22s) ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.21s) ./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.18s) ./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.00s) ./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.26s) ./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.14s) ./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.27s) ./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.26s) ./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.22s) ./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.22s) ./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.29s) ./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.23s) ./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.27s) ./cmd/mesh-controller --- PASS: TestReplay237 (0.24s) ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.22s) ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.23s) ./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.24s) ./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.26s) ./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.35s) ./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.38s) ./cmd/mesh-controller --- PASS: TestReplay201 (0.19s) ./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.16s) ./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.17s) ./cmd/mesh-controller --- PASS: TestReplay401 (0.34s) ./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.29s) ./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.33s) ./cmd/mesh-controller --- PASS: TestReplay340 (0.29s) ./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.22s) ./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.19s) ./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.09s) ./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.14s) ./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.09s) ./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.08s) ./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.08s) ./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.07s) ./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.07s) ./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.08s) ``` **Out of date when it landed**: out of date: judged against trunk 1c9bc9cf0041, the trunk is now b12c4b82e820; judged again on a recheck or when it is merged
Author
Contributor

Merge check at a641ed7d
Judged: head a641ed7d15c7 merged into trunk b12c4b82e820; read beside it: mesh-catalog 53e51864969f, mesh-controller-main b12c4b82e820, mesh-host 7a41e120635b, mesh-tools 954e1a53eef9

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
  • mesh/repo-check: PASS — its merge-check.sh passed

Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step

  • tier 0: mesh-controller
  • tier 1: build-agent
  • ace: receives build-agent
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves
  • grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
  • read by no module's build: cmd/mesh-builder/packages_test.go, internal/builder/registry_unbound_test.go, internal/catalogue/genesis_registry_test.go, testdata/beside/CAPTURED, testdata/beside/mesh-catalog/modules/artifact-store-tools/module.json.captured, testdata/beside/mesh-catalog/modules/betterbird/module.json.captured, testdata/beside/mesh-catalog/modules/build-agent/module.json.captured, testdata/beside/mesh-catalog/modules/claude-code/module.json.captured, testdata/beside/mesh-catalog/modules/docker/module.json.captured, testdata/beside/mesh-catalog/modules/gitea/module.json.captured, testdata/beside/mesh-catalog/modules/grafana/module.json.captured, testdata/beside/mesh-catalog/modules/home-assistant/module.json.captured, testdata/beside/mesh-catalog/modules/keycloak/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-issues/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-knowledge/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-reads/module.json.captured, testdata/beside/mesh-catalog/modules/messenger/module.json.captured, testdata/beside/mesh-catalog/modules/netcheck/module.json.captured, testdata/beside/mesh-catalog/modules/restic/module.json.captured, testdata/beside/mesh-catalog/modules/route-proxy/module.json.captured, testdata/beside/mesh-catalog/modules/searxng/module.json.captured

Run by the build seat on ace as build-1791864426673755817 (builds --log build-1791864426673755817).

--- the gate: build-agent, mesh-controller
mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-13T03:50:01Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-13T03:50:01Z

modules the change moves:
  - mesh-controller (changed)

machines:
  - a machine (f35): composes
  - holds mesh-dns-resolver (idt): composes
  - holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
  - a machine (yvbpsm): composes

a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller

notes:
  - cmd/mesh-builder/packages_test.go, internal/builder/registry_unbound_test.go, internal/catalogue/genesis_registry_test.go, testdata/beside/CAPTURED, testdata/beside/mesh-catalog/modules/artifact-store-tools/module.json.captured, testdata/beside/mesh-catalog/modules/betterbird/module.json.captured, testdata/beside/mesh-catalog/modules/build-agent/module.json.captured, testdata/beside/mesh-catalog/modules/claude-code/module.json.captured, testdata/beside/mesh-catalog/modules/docker/module.json.captured, testdata/beside/mesh-catalog/modules/gitea/module.json.captured, testdata/beside/mesh-catalog/modules/grafana/module.json.captured, testdata/beside/mesh-catalog/modules/home-assistant/module.json.captured, testdata/beside/mesh-catalog/modules/keycloak/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-issues/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-knowledge/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-reads/module.json.captured, testdata/beside/mesh-catalog/modules/messenger/module.json.captured, testdata/beside/mesh-catalog/modules/netcheck/module.json.captured, testdata/beside/mesh-catalog/modules/restic/module.json.captured, testdata/beside/mesh-catalog/modules/route-proxy/module.json.captured and testdata/beside/mesh-catalog/modules/searxng/module.json.captured read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok  	github.com/novox/mesh-controller/cmd/mesh-builder	1.039s
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	166.576s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.036s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.060s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.040s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.196s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.085s
?   	github.com/novox/mesh-controller/internal/beside	[no test files]
ok  	github.com/novox/mesh-controller/internal/broker	4.069s
ok  	github.com/novox/mesh-controller/internal/builder	59.845s
ok  	github.com/novox/mesh-controller/internal/catalogue	8.059s
ok  	github.com/novox/mesh-controller/internal/conditions	2.595s
ok  	github.com/novox/mesh-controller/internal/envfile	1.051s
ok  	github.com/novox/mesh-controller/internal/facts	1.049s
ok  	github.com/novox/mesh-controller/internal/identity	4.616s
ok  	github.com/novox/mesh-controller/internal/inventory	42.305s
ok  	github.com/novox/mesh-controller/internal/lease	17.639s
ok  	github.com/novox/mesh-controller/internal/licences	3.849s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.042s
ok  	github.com/novox/mesh-controller/internal/link	62.633s
ok  	github.com/novox/mesh-controller/internal/lint	2.310s
ok  	github.com/novox/mesh-controller/internal/outward	1.075s
ok  	github.com/novox/mesh-controller/internal/overlay	1.070s
ok  	github.com/novox/mesh-controller/internal/secrets	1.407s
ok  	github.com/novox/mesh-controller/internal/store	3.500s
ok  	github.com/novox/mesh-controller/internal/testbus	1.255s
ok  	github.com/novox/mesh-controller/internal/token	1.023s
store tests, each run against the store:
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.21s)
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.22s)
  ./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.20s)
  ./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.19s)
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.19s)
  ./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.16s)
  ./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (1.95s)
  ./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.21s)
  ./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.13s)
  ./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.23s)
  ./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.24s)
  ./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.19s)
  ./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.19s)
  ./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.25s)
  ./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.20s)
  ./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.23s)
  ./cmd/mesh-controller --- PASS: TestReplay237 (0.19s)
  ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.18s)
  ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.19s)
  ./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.18s)
  ./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.21s)
  ./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.26s)
  ./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.26s)
  ./cmd/mesh-controller --- PASS: TestReplay201 (0.16s)
  ./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.14s)
  ./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.15s)
  ./cmd/mesh-controller --- PASS: TestReplay401 (0.26s)
  ./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.22s)
  ./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.27s)
  ./cmd/mesh-controller --- PASS: TestReplay340 (0.23s)
  ./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.18s)
  ./cmd/mesh-controller --- PASS: TestReplay349 (0.19s)
  ./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.08s)
  ./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.08s)
  ./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.09s)
  ./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.07s)
  ./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.06s)
  ./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.06s)
  ./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.07s)
  ./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.08s)
  ./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.07s)
**Merge check** at `a641ed7d` Judged: head `a641ed7d15c7` merged into trunk `b12c4b82e820`; read beside it: mesh-catalog `53e51864969f`, mesh-controller-main `b12c4b82e820`, mesh-host `7a41e120635b`, mesh-tools `954e1a53eef9` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller) - `mesh/repo-check`: **PASS** — its merge-check.sh passed **Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - ace: receives build-agent - g14: receives build-agent - novox: receives mesh-controller, build-agent - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves - grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine - read by no module's build: cmd/mesh-builder/packages_test.go, internal/builder/registry_unbound_test.go, internal/catalogue/genesis_registry_test.go, testdata/beside/CAPTURED, testdata/beside/mesh-catalog/modules/artifact-store-tools/module.json.captured, testdata/beside/mesh-catalog/modules/betterbird/module.json.captured, testdata/beside/mesh-catalog/modules/build-agent/module.json.captured, testdata/beside/mesh-catalog/modules/claude-code/module.json.captured, testdata/beside/mesh-catalog/modules/docker/module.json.captured, testdata/beside/mesh-catalog/modules/gitea/module.json.captured, testdata/beside/mesh-catalog/modules/grafana/module.json.captured, testdata/beside/mesh-catalog/modules/home-assistant/module.json.captured, testdata/beside/mesh-catalog/modules/keycloak/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-issues/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-knowledge/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-reads/module.json.captured, testdata/beside/mesh-catalog/modules/messenger/module.json.captured, testdata/beside/mesh-catalog/modules/netcheck/module.json.captured, testdata/beside/mesh-catalog/modules/restic/module.json.captured, testdata/beside/mesh-catalog/modules/route-proxy/module.json.captured, testdata/beside/mesh-catalog/modules/searxng/module.json.captured Run by the build seat on ace as `build-1791864426673755817` (`builds --log build-1791864426673755817`). ``` --- the gate: build-agent, mesh-controller mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8) long-running resources without health: 1 files asking for a setting without saying whether it is trusted: 1 1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-13T03:50:01Z says they run composing every machine as the mesh is the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued composing every machine with the change the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose) judged by controller development build against the facts of 2026-10-13T03:50:01Z modules the change moves: - mesh-controller (changed) machines: - a machine (f35): composes - holds mesh-dns-resolver (idt): composes - holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes - a machine (yvbpsm): composes a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller notes: - cmd/mesh-builder/packages_test.go, internal/builder/registry_unbound_test.go, internal/catalogue/genesis_registry_test.go, testdata/beside/CAPTURED, testdata/beside/mesh-catalog/modules/artifact-store-tools/module.json.captured, testdata/beside/mesh-catalog/modules/betterbird/module.json.captured, testdata/beside/mesh-catalog/modules/build-agent/module.json.captured, testdata/beside/mesh-catalog/modules/claude-code/module.json.captured, testdata/beside/mesh-catalog/modules/docker/module.json.captured, testdata/beside/mesh-catalog/modules/gitea/module.json.captured, testdata/beside/mesh-catalog/modules/grafana/module.json.captured, testdata/beside/mesh-catalog/modules/home-assistant/module.json.captured, testdata/beside/mesh-catalog/modules/keycloak/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-issues/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-knowledge/module.json.captured, testdata/beside/mesh-catalog/modules/mesh-reads/module.json.captured, testdata/beside/mesh-catalog/modules/messenger/module.json.captured, testdata/beside/mesh-catalog/modules/netcheck/module.json.captured, testdata/beside/mesh-catalog/modules/restic/module.json.captured, testdata/beside/mesh-catalog/modules/route-proxy/module.json.captured and testdata/beside/mesh-catalog/modules/searxng/module.json.captured read by no module's build, and rebuild nothing (issue 280) --- its merge-check.sh (go toolchain) ok github.com/novox/mesh-controller/cmd/mesh-builder 1.039s ok github.com/novox/mesh-controller/cmd/mesh-controller 166.576s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.036s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.060s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.040s ok github.com/novox/mesh-controller/examples/route-proxy 1.196s ok github.com/novox/mesh-controller/internal/artifacts 1.085s ? github.com/novox/mesh-controller/internal/beside [no test files] ok github.com/novox/mesh-controller/internal/broker 4.069s ok github.com/novox/mesh-controller/internal/builder 59.845s ok github.com/novox/mesh-controller/internal/catalogue 8.059s ok github.com/novox/mesh-controller/internal/conditions 2.595s ok github.com/novox/mesh-controller/internal/envfile 1.051s ok github.com/novox/mesh-controller/internal/facts 1.049s ok github.com/novox/mesh-controller/internal/identity 4.616s ok github.com/novox/mesh-controller/internal/inventory 42.305s ok github.com/novox/mesh-controller/internal/lease 17.639s ok github.com/novox/mesh-controller/internal/licences 3.849s ok github.com/novox/mesh-controller/internal/licences/adapters 1.042s ok github.com/novox/mesh-controller/internal/link 62.633s ok github.com/novox/mesh-controller/internal/lint 2.310s ok github.com/novox/mesh-controller/internal/outward 1.075s ok github.com/novox/mesh-controller/internal/overlay 1.070s ok github.com/novox/mesh-controller/internal/secrets 1.407s ok github.com/novox/mesh-controller/internal/store 3.500s ok github.com/novox/mesh-controller/internal/testbus 1.255s ok github.com/novox/mesh-controller/internal/token 1.023s store tests, each run against the store: ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.21s) ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.22s) ./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.20s) ./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.19s) ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.19s) ./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.16s) ./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (1.95s) ./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.21s) ./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.13s) ./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.23s) ./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.24s) ./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.19s) ./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.19s) ./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.25s) ./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.20s) ./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.23s) ./cmd/mesh-controller --- PASS: TestReplay237 (0.19s) ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.18s) ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.19s) ./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.18s) ./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.21s) ./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.26s) ./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.26s) ./cmd/mesh-controller --- PASS: TestReplay201 (0.16s) ./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.14s) ./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.15s) ./cmd/mesh-controller --- PASS: TestReplay401 (0.26s) ./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.22s) ./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.27s) ./cmd/mesh-controller --- PASS: TestReplay340 (0.23s) ./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.18s) ./cmd/mesh-controller --- PASS: TestReplay349 (0.19s) ./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.08s) ./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.08s) ./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.09s) ./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.07s) ./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.06s) ./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.06s) ./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.07s) ./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.08s) ./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.07s) ```
mesh-admin merged commit e0d69ab7a0 into main 2026-10-13 04:22:05 +00:00
mesh-admin deleted branch fix/121-genesis-package-registry 2026-10-13 04:22:05 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-controller#289