Genesis registers the control plane with the manifest its build produced

The control plane's manifest existed twice: at the root of its repository, read
whenever the mesh rebuilds it from source, and as a copy in the catalogue, read by
genesis. Nothing kept them equal, and the first rebuild replaced the mesh's record
with the repository's shape while every later push was refused (novox/hq
04-ISSUES/072). The builder's one-shot result already carries the manifest it built,
artifact resolved to the image; step 3 keeps it and step 9 registers it, re-pinning
the built image's bare id to the reference the registry assigned. The catalogue is
still read for the registry's and the builder's manifests and for phase two.
This commit is contained in:
2026-09-21 15:17:47 +02:00
parent 4661025eb7
commit 5223169226
8 changed files with 242 additions and 99 deletions
+6 -4
View File
@@ -137,9 +137,11 @@ type Options struct {
Node string
// Catalogue is a checkout of the mesh's catalogue repository, which is where the registry's and
// the control plane's manifests are read from. Empty stops the installer after the foundation:
// there is no pivot without manifests, and pretending otherwise would leave a machine that
// looks installed and cannot upgrade itself.
// the builder's manifests are read from, and everything phase two installs. Not the control
// plane's: that one comes out of the build at step 3, from the root of its own repository
// (novox/hq ADR 0069). Empty stops the installer after the foundation: there is no pivot
// without manifests, and pretending otherwise would leave a machine that looks installed and
// cannot upgrade itself.
Catalogue string
// Source is where the control plane is built from — a repository on a mesh that already
@@ -585,7 +587,7 @@ func Run(ctx context.Context, o Options, d Deps, say func(string)) (Result, erro
// ---- 9. control plane -----------------------------------------------------------------
say("control plane — installed as an ordinary module, pinned to that digest")
permanent, err := InstallControlPlane(ctx, o, d, temporary, rewritten.Declaration,
published.Reference, say)
built, published.Reference, say)
result.Permanent, result.PermanentAnswered = permanent.Container, permanent.Answered
result.StoresDelivered = permanent.Delivered
if err != nil {