From cf6fcdff3ca744d258227d223c53a9198b0a2b74 Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 21 Sep 2026 15:19:25 +0200 Subject: [PATCH] Genesis reads the registry's and the builder's manifests from the catalogue, not the control plane's The control plane's manifest comes out of the build the installer runs (novox/hq ADR 0069, 04-ISSUES/072); the catalogue no longer holds a copy, and a bed that demanded one would stop a genesis that is about to succeed. --- README.md | 5 +++-- test/integration/genesis.ts | 4 +++- test/integration/whole-mesh-full.test.ts | 8 +++++--- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e69ad53..9cbfacb 100644 --- a/README.md +++ b/README.md @@ -151,9 +151,10 @@ export MESH_LAB_BUILDER=/build/mesh-builder # build/, which i export MESH_LAB_BOOTSTRAP_BINARY=/mesh-bootstrap export MESH_LAB_CONTROL_IMAGE=mesh-controller:development # optional; what it carries -# A checkout of the mesh's catalogue. The installer reads the registry's and the control plane's +# A checkout of the mesh's catalogue. The installer reads the registry's and the builder's # manifests from a copy of it ON THE MACHINE, because at genesis there is no forge, no build -# machine and — until the registry is up — nothing serving anything. +# machine and — until the registry is up — nothing serving anything. The control plane's manifest +# is not among them: it comes out of the build the installer runs (novox/hq ADR 0069). export MESH_LAB_CATALOG=/modules # Built with `go build -o ./examples/` in mesh-controller. diff --git a/test/integration/genesis.ts b/test/integration/genesis.ts index 2793b52..9b1853d 100644 --- a/test/integration/genesis.ts +++ b/test/integration/genesis.ts @@ -91,7 +91,9 @@ export function stepIn(said: string): string { export async function genesis(o: GenesisOptions): Promise { const node = o.node; const registry = o.registry ?? "127.0.0.1:5000"; - const modules = o.catalogueModules ?? ["distribution", "mesh-controller", "builder"]; + // The registry's and the builder's. Not the control plane's: its manifest lives in its own + // repository and genesis takes it from the build it runs (novox/hq ADR 0069, 04-ISSUES/072). + const modules = o.catalogueModules ?? ["distribution", "builder"]; const catalogueOnMachine = o.catalogueOnMachine ?? "/opt/mesh-catalog"; const log = o.log ?? (() => {}); diff --git a/test/integration/whole-mesh-full.test.ts b/test/integration/whole-mesh-full.test.ts index 82f4009..f0f4103 100644 --- a/test/integration/whole-mesh-full.test.ts +++ b/test/integration/whole-mesh-full.test.ts @@ -115,10 +115,12 @@ const CATALOGUE_ON_MACHINE = "/opt/mesh-catalog"; * * Named here rather than pushing the whole repository because the whole repository is a hundred * megabytes of `node_modules` and the installer opens exactly two files: mesh-host's - * `internal/bootstrap` RegistryModule and ControlPlaneModule. If it ever opens a third, this list - * is where the bed finds out, by the installer saying which manifest it could not read. + * `internal/bootstrap` RegistryModule and BuilderModule. (Not the control plane's: that manifest + * comes out of the build the installer runs — novox/hq ADR 0069, 04-ISSUES/072.) If it ever opens + * a third, this list is where the bed finds out, by the installer saying which manifest it could + * not read. */ -const CATALOGUE_MODULES = ["registry", "mesh-controller", "builder"]; +const CATALOGUE_MODULES = ["distribution", "builder"]; /** * Where this mesh keeps its own images, as the anchor reaches it.