Issue 189: a rebuild from the same commit is not a move, so a packaging module's new image never rolls out
This commit is contained in:
@@ -0,0 +1,35 @@
|
|||||||
|
---
|
||||||
|
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.
|
||||||
Reference in New Issue
Block a user