44 lines
2.6 KiB
Markdown
44 lines
2.6 KiB
Markdown
---
|
|
status: located
|
|
opened: 2026-10-01
|
|
located-in: [mesh-controller internal/inventory/catalogue.go (RegisterModule records the source commit; a moved event follows a commit that changed, not an artifact that did), mesh-controller cmd/mesh-controller/upgrades.go (the roll-out follows the moved event)]
|
|
fixed-by:
|
|
amended-design: []
|
|
---
|
|
|
|
# 189 — A rebuild from the same commit is not a move, so a packaging module's new image never rolls out
|
|
|
|
## What was observed
|
|
|
|
The build machine's definition packages the controller's source. A controller merge rebuilds it, and
|
|
the rebuilt image carries the new controller; its own source commit in the catalogue is unchanged.
|
|
Registering that build therefore moves nothing the catalogue announces: no *moved* event, no
|
|
roll-out, although the module's upgrade policy says roll out and the artifact is new. On 2026-10-01
|
|
at 19:45Z the first tiered plan under [ADR 0162](../../02-DECISIONS/0162-a-merge-produces-a-tiered-plan-the-mesh-keeps.md)
|
|
built the build machine and waited for the machine running it to apply the new build — a wait
|
|
that nothing would end, because nothing had sent it. A push by hand opened the gate.
|
|
|
|
## Why this is here
|
|
|
|
A version is what a module *runs*, and that is the artifact. The source commit is how the mesh
|
|
knows the artifact's provenance, not what makes it new: a build that reads another repository, or
|
|
pulls a base image, produces a different artifact from the same commit. The roll-out followed the
|
|
commit, so every module that packages another's source, and every dependent rebuilt because its
|
|
base moved, is rebuilt and then left behind on every machine until somebody pushes. The plan now
|
|
sends what it waits for (mesh-controller PR `fix/a-plan-sends-what-it-waits-for`), which covers the
|
|
gate; the general rule — a new artifact for a module with a roll-out policy is sent, moved commit or
|
|
not — is the decision this report asks for, and the catalogue's *moved* event should say what moved:
|
|
the artifact.
|
|
|
|
*How this would be checked:* a controller test registering a build of an unchanged commit with a
|
|
new artifact digest for a module whose policy rolls out: the machines are sent; `status` shows no
|
|
machine behind afterwards.
|
|
|
|
## Built in part, 2026-10-01
|
|
|
|
mesh-controller 203 and 204: a plan sends the machines of every module in a built tier whose policy
|
|
rolls out, once, moved commit or not, and waits for the ones a later tier is built by. After a merge
|
|
nothing is left for a hand to push, except what a *record* policy leaves by design. What remains for
|
|
a decision is the catalogue's own word: *moved* should follow the artifact, so a module rebuilt
|
|
outside any plan — by `build` by hand — rolls out the same way.
|