Part of design 47's milestone R4c-9 (ADR 0487): the image build module. A container image becomes one more artifact kind the builder builds through a build module, like Go and Node: mesh-build-image builds rootless with buildah, a candidate's check publishes nothing, a trunk build publishes exactly one digest and its build key names the reference. build-agent keeps building and delivering every image until R4g; nothing the operator sees changes. One delivery group on branch feat/r4c9-image-build in mesh-catalog and mesh-delivery. After the delivery the lead assigns buildah and mesh-build-image to shanks and ace.
Said with the Approve: an image build on a build node has no CPU or memory limit yet, like the other build modules (issue 1806); the builder's capacity bounds how many run. Until the operator answers whether R4g waits only for images that outlive it, mesh-build-image refuses an image whose build input is a whole repository or whose build argument is another module's artifact, naming why (only build-agent's and the toolchain images use those forms, and R4g deletes them).
Review: one review, three rounds, approved (reviewer-r4c9@shanks). The real-buildah integration tests skip loudly where the check has no buildah; ADR 0487 §2 and §6 are proved live after the delivery.
This member: the buildah module (1702) providing rootless-image-build with reach machine; mesh-build-image (1703): account, store outside the home, fetch and build steps, push only with publish and the digest read back from the registry (a mismatch or an unreadable digest file fails), a bus integration test and captured result fixtures; the refusal naming buildah when it is missing (1704) and the checks imagebuild and imageplace (1707); gitea reads mesh-build-image.keys.
Part of design 47's milestone R4c-9 (ADR 0487): the image build module. A container image becomes one more artifact kind the builder builds through a build module, like Go and Node: mesh-build-image builds rootless with buildah, a candidate's check publishes nothing, a trunk build publishes exactly one digest and its build key names the reference. build-agent keeps building and delivering every image until R4g; nothing the operator sees changes. One delivery group on branch `feat/r4c9-image-build` in mesh-catalog and mesh-delivery. After the delivery the lead assigns buildah and mesh-build-image to shanks and ace.
Said with the Approve: an image build on a build node has no CPU or memory limit yet, like the other build modules (issue 1806); the builder's capacity bounds how many run. Until the operator answers whether R4g waits only for images that outlive it, mesh-build-image refuses an image whose build input is a whole repository or whose build argument is another module's artifact, naming why (only build-agent's and the toolchain images use those forms, and R4g deletes them).
Review: one review, three rounds, approved (reviewer-r4c9@shanks). The real-buildah integration tests skip loudly where the check has no buildah; ADR 0487 §2 and §6 are proved live after the delivery.
This member: the buildah module (1702) providing rootless-image-build with reach machine; mesh-build-image (1703): account, store outside the home, fetch and build steps, push only with publish and the digest read back from the registry (a mismatch or an unreadable digest file fails), a bus integration test and captured result fixtures; the refusal naming buildah when it is missing (1704) and the checks imagebuild and imageplace (1707); gitea reads mesh-build-image.keys.
Reviewed-by: reviewer-r4c9@shanks at 7b5f7f84acb73aaf8189200548ff69fd9aac04b2
composed together: pass — every machine composes with the change as it did without (4 of 4 compose)
Machines
gitea on every machine running it: sent
mesh-delivery-builder on every machine running it: sent
mesh-issues on every machine running it: sent
Transitions
2026-10-22 08:51 (new) → proposed (announced): novox/mesh-catalog#435's head announced
2026-10-22 08:52 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
2026-10-22 08:52 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-22 08:59 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-22 08:59 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit
2026-10-22 09:02 delivering → delivered (done): its walk is done, carrying its own commit: every machine of its deploy plan passed, or was left as its policy says
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-catalog@7b5f7f84acb7` — **delivered** since 2026-10-22T09:02:24Z
**Delivery plan** — builds gitea, mesh-issues, new: modules/buildah, modules/mesh-build-image → novox; no bus step
- tier 0: gitea, mesh-issues
- novox: receives gitea, mesh-issues
- gitea provides npm-package-registry, git, gitea-read, forge-account: its consumers are sent again after it
- gitea keeps data (ADR 0233): what it holds is backed up before it moves
**Group** `feat/r4c9-image-build`: novox/mesh-catalog@7b5f7f84acb7, novox/mesh-delivery@db62e82e26d7
- composed together: pass — every machine composes with the change as it did without (4 of 4 compose)
**Machines**
- gitea on every machine running it: sent
- mesh-delivery-builder on every machine running it: sent
- mesh-issues on every machine running it: sent
**Transitions**
- 2026-10-22 08:51 (new) → proposed (announced): novox/mesh-catalog#435's head announced
- 2026-10-22 08:52 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
- 2026-10-22 08:52 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-22 08:59 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-22 08:59 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit
- 2026-10-22 09:02 delivering → delivered (done): its walk is done, carrying its own commit: every machine of its deploy plan passed, or was left as its policy says
The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
mesh/repo-check head 7b5f7f84acb7 merged into trunk 848249cf54b6 — pass: THE CHANGE ALTERS ITS OWN CHECK (merge-check.sh): main's version judged it; the ch…
mesh/check failed: unit: modules/gitea.test: ✔ the same merge, head or close announced twice has the same id, and another has another (6.882981ms) | 7…
mesh/merge-gate head 7b5f7f84acb7 merged into trunk 848249cf54b6 — pass: group feat/r4c9-image-build composed: every machine composes with the change as it…
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Part of design 47's milestone R4c-9 (ADR 0487): the image build module. A container image becomes one more artifact kind the builder builds through a build module, like Go and Node: mesh-build-image builds rootless with buildah, a candidate's check publishes nothing, a trunk build publishes exactly one digest and its build key names the reference. build-agent keeps building and delivering every image until R4g; nothing the operator sees changes. One delivery group on branch
feat/r4c9-image-buildin mesh-catalog and mesh-delivery. After the delivery the lead assigns buildah and mesh-build-image to shanks and ace.Said with the Approve: an image build on a build node has no CPU or memory limit yet, like the other build modules (issue 1806); the builder's capacity bounds how many run. Until the operator answers whether R4g waits only for images that outlive it, mesh-build-image refuses an image whose build input is a whole repository or whose build argument is another module's artifact, naming why (only build-agent's and the toolchain images use those forms, and R4g deletes them).
Review: one review, three rounds, approved (reviewer-r4c9@shanks). The real-buildah integration tests skip loudly where the check has no buildah; ADR 0487 §2 and §6 are proved live after the delivery.
This member: the buildah module (1702) providing rootless-image-build with reach machine; mesh-build-image (1703): account, store outside the home, fetch and build steps, push only with publish and the digest read back from the registry (a mismatch or an unreadable digest file fails), a bus integration test and captured result fixtures; the refusal naming buildah when it is missing (1704) and the checks imagebuild and imageplace (1707); gitea reads mesh-build-image.keys.
Reviewed-by: reviewer-r4c9@shanks at
7b5f7f84acDelivery
novox/mesh-catalog@7b5f7f84acb7— delivered since 2026-10-22T09:02:24ZDelivery plan — builds gitea, mesh-issues, new: modules/buildah, modules/mesh-build-image → novox; no bus step
Group
feat/r4c9-image-build: novox/mesh-catalog@7b5f7f84ac, novox/mesh-delivery@db62e82e26Machines
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.