Files
hq/04-ISSUES/189-a-rebuild-from-the-same-commit-is-not-a-move/00-report.md
T

2.6 KiB

status, opened, located-in, fixed-by, amended-design
status opened located-in fixed-by amended-design
located 2026-10-01
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)

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 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.