ADR 0190: a seat's work is shared by its holders, and building is the first such role; design 18 says where a build runs
The build role was a mesh seat with one holder and its worker a push consumer with one delivery in flight, so thirty-five images rebuilt serially on one machine while three others idled. The bus was drawn for the alternative — a seat's accept subjects on a queue group of holders (design 25) — and 0190 uses it as one pattern for every role: a node seat with accepts, every holder pulling one ask when idle, the asker addressing the role. Building is the first use: node-build-agent, held by the build-agent module on every machine with a container runtime. Notes in 0121 and 0162 where their facts went stale.
This commit is contained in:
@@ -4,9 +4,10 @@ status: proposed
|
||||
code:
|
||||
- mesh-controller cmd/mesh-builder
|
||||
- mesh-controller internal/builder
|
||||
- mesh-catalog modules/builder
|
||||
updated: 2026-10-01
|
||||
- mesh-catalog modules/build-agent
|
||||
updated: 2026-10-02
|
||||
decisions:
|
||||
- 02-DECISIONS/0190-a-seats-work-is-shared-by-its-holders-and-building-is-the-first-such-role.md
|
||||
- 02-DECISIONS/0157-a-build-says-what-it-does-on-the-bus-as-it-happens.md
|
||||
- 02-DECISIONS/0150-a-modules-own-code-runs-as-supervised-processes-under-one-account.md
|
||||
- 02-DECISIONS/0142-the-mesh-delivers-its-own-components-as-binaries.md
|
||||
@@ -268,6 +269,20 @@ ships one and wrong for code the mesh built, which has no unit until the mesh wr
|
||||
**Tools, hooks and consumers are not further modes**, which is the test of whether three is the
|
||||
right number: they are loaded by a tool host, and a tool host is a process that stays up.
|
||||
|
||||
## Where a build runs
|
||||
|
||||
**On whichever machine holding the build role is idle** ([ADR 0190](../../02-DECISIONS/0190-a-seats-work-is-shared-by-its-holders-and-building-is-the-first-such-role.md)).
|
||||
The role is `node-build-agent`, a node seat; its holder is the `build-agent` module, assignable to
|
||||
every machine with a container runtime. The controller asks the role, never a machine: a tier's asks go
|
||||
onto the seat's one work queue together, and each holder pulls one at a time when it is idle, so a
|
||||
tier of many images is built by as many machines as hold the seat and are online, and a machine that
|
||||
is off builds nothing and blocks nothing. What a holding machine needs is what the builder always
|
||||
needed — a container runtime, the artifact store and the package registry as provisions, a workspace,
|
||||
the bus credential — said once in the module's manifest. The outcome names the machine that built it.
|
||||
|
||||
This is the bus's shared-work pattern, not a build-specific one: any module declaring a node seat with
|
||||
`accepts` has its work shared by its holders the same way. Building is the first use.
|
||||
|
||||
## A build says what it does, as it happens
|
||||
|
||||
*2026-10-01 — [ADR 0157](../../02-DECISIONS/0157-a-build-says-what-it-does-on-the-bus-as-it-happens.md).*
|
||||
|
||||
Reference in New Issue
Block a user