From 48ca2fb41b0c68f1bfca90945dad61c1f21c9f5d Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 1 Oct 2026 21:54:44 +0200 Subject: [PATCH] Issue 189: a rebuild from the same commit is not a move, so a packaging module's new image never rolls out --- .../00-report.md | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 04-ISSUES/189-a-rebuild-from-the-same-commit-is-not-a-move/00-report.md diff --git a/04-ISSUES/189-a-rebuild-from-the-same-commit-is-not-a-move/00-report.md b/04-ISSUES/189-a-rebuild-from-the-same-commit-is-not-a-move/00-report.md new file mode 100644 index 0000000..f2537ce --- /dev/null +++ b/04-ISSUES/189-a-rebuild-from-the-same-commit-is-not-a-move/00-report.md @@ -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. -- 2.54.0