The build seat's holder follows the controller that defines its worker (hq issue 206)
A plan is ordered by artifacts and says nothing about what must be running before what (ADR 0162); on 2026-10-03 that put the build machine in tier 0 and the controller in tier 1, and the new build machine could not bind the worker the old controller had defined. One running order enters the graph, named as its own edge: a module claiming the build seat follows the control plane, and the built-by edge from the control plane to that holder yields to it — the controller is built by whichever build machine is running, as the runtime image always was. The edge orders a plan and never widens it, like built-by.
This commit is contained in:
@@ -18,8 +18,17 @@ const (
|
||||
EdgeBuiltBy = "built-by"
|
||||
// EdgeDeclared: the manifest's own `build.on`.
|
||||
EdgeDeclared = "declared"
|
||||
// EdgeWorkerOf: the module holds the build seat, whose worker the control plane defines
|
||||
// (novox/hq issue 206). The one place a *running* order enters the graph: a build machine rolled
|
||||
// before the controller that redefines its worker cannot bind it, and nothing can then build the
|
||||
// controller that would end that — so the holder of the build seat follows the controller, and
|
||||
// the controller is built by whichever build machine is running, as it always was.
|
||||
EdgeWorkerOf = "worker-of"
|
||||
)
|
||||
|
||||
// TheControlPlane is the module that defines every seat's worker on the bus.
|
||||
const TheControlPlane = "mesh-controller"
|
||||
|
||||
// Edge is one dependency: From depends on To, in the way Kind says.
|
||||
type Edge struct {
|
||||
From string `json:"from"`
|
||||
@@ -106,6 +115,13 @@ func dependenciesOf(entries []Entry, against map[string][]string, read map[strin
|
||||
}
|
||||
}
|
||||
}
|
||||
if known[TheControlPlane] {
|
||||
for _, b := range builders {
|
||||
if b != TheControlPlane {
|
||||
add(b, TheControlPlane, EdgeWorkerOf)
|
||||
}
|
||||
}
|
||||
}
|
||||
sort.Slice(out, func(a, b int) bool {
|
||||
if out[a].From != out[b].From {
|
||||
return out[a].From < out[b].From
|
||||
|
||||
Reference in New Issue
Block a user