Merge pull request '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' (#306) from decision/0190-a-seats-work-is-shared-by-its-holders into main

This commit was merged in pull request #306.
This commit is contained in:
2026-10-03 00:44:27 +00:00
5 changed files with 139 additions and 2 deletions
+17 -2
View File
@@ -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).*