Test that a carried module takes its lead's pass before its step is read (hq issue 335 review)
mesh/merge-gate pass: builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step; every machine composes with the change as it…
mesh/repo-check pass: its merge-check.sh passed
mesh/delivery delivered

Without the reorder the passed build's walk stopped on the first machine's
later silence; the guard that caught it is now said to be one.
This commit is contained in:
jochen
2026-10-08 21:08:12 +02:00
parent fb74e24c9e
commit 81e5458cbf
2 changed files with 67 additions and 2 deletions
+6 -2
View File
@@ -977,8 +977,12 @@ func failFirstSend(ctx context.Context, open *stores, p *inventory.Plan, module
}()
g := state.Gate
if g != nil && g.Verdict == inventory.GatePassed {
// **A build that passed its gate is never put back for what came after** (novox/hq issue 335): its
// verdict stands; the plan stops, and says why, but the build is not marked failed.
// **A guard: a build that passed its gate is never put back for what came after** (novox/hq issue 335).
// Not reached while nextRollout answers a passed gate with the rest to send, and advanceOnce reads it
// after a carried module takes over its lead's pass; it is here so that a path added later cannot
// overturn a verdict. If it is reached, the plan stops and says why, and the build is not marked failed.
// The module is left a stopped rollout (its Why said, sent first and not to the rest), which
// `plans retry` takes: it sends the first machine again, and the passed gate then sends the rest.
state.Why = "passed its gate; its walk then stopped: " + why
p.State = inventory.PlanFailed
p.Note = fmt.Sprintf("%s passed its gate on %s in tier %d (%s) and is kept; its walk stopped after: %s",