Files
hq/02-DECISIONS/0156-an-artifact-is-what-a-build-produces-and-the-store-is-named-for-its-scope.md
T
jschoubben 22a28ad548 ADR 0156: an artifact is what a build produces, and the store's seat is named for its scope
Issue 123 resolved; glossary corrected; design 26 and ADR 0121 point at the rename.
2026-09-30 21:14:40 +02:00

4.9 KiB

topic, status, date, deciders, reconstructed, extends
topic status date deciders reconstructed extends
the mesh accepted 2026-09-30 jochen false 02-DECISIONS/0075-two-stores-and-which-provides-what.md

156. An artifact is what a build produces, the artifact store serves every kind, and its seat is named for its scope

Context

Issue 123 found three wordings disagreeing about the mesh's registry. The glossary defined artifact as "an OCI image, by digest"; the manifest's build vocabulary names four kinds — image, upstream, bundle, archive — and the catalogue builds all four; the seat was the-artifact-store, the last of the mesh's own seats named after the job it does rather than for the mesh (ADR 0121 decided the rename and deferred it). The issue asked whether the seat and provision should be renamed after images, and whether the mesh needs two registry implementations at all.

Reading what the store actually serves settles the first question the other way. A kept reference has two shapes — artifact-store://<module>/<artifact>@sha256:… for an image and artifact-store://<module>/<artifact>/blobs/sha256:… for an archive — and both are served by the same OCI registry, by digest. ADR 0075 already defined the provision that way: content-addressed blobs, pinned by digest, no versions, no ranges; what the mesh delivers to machines. The provision was never an image registry. Only the glossary said so, and only the seat's name was odd.

Considered Options

1. Rename the seat and the provision after images. Rejected. The store serves archives too, by the same protocol; naming it for one kind would be the glossary's mistake made permanent, in the name every manifest uses.

2. Fix the word, rename the seat for its scope, keep the provision. Chosen. The rename ADR 0121 deferred as a delivering-seat migration is, since ADR 0122, one update and one alias: the former name resolves forever, a held record follows by cascade, a claim written with the old name still holds.

On two implementations: left as 0075 decided. Two provisions because two protocols; the OCI registry the genesis installs because something must serve images before the mesh can build; the forge may provide artifact-store too and a mesh may choose it. The bootstrap argument is weaker than it reads, as 123 says, and the day the forge is raised at genesis and adopted in place is the day to retire the second server — a migration a mesh performs, not a decision to take here.

Decision

  • An artifact is anything a build produces — an image, a mirrored upstream image, a bundle, an archive — and the glossary says so. Image is one kind. A module is not an image; a module may build several artifacts and install none.
  • The artifact store serves artifacts of every kind a machine fetches, images and archives, by digest, over the OCI registry protocol. The provision keeps its name.
  • The seat is mesh-artifact-store. the-artifact-store is its alias. The catalogue's registry module claims the new name; a definition elsewhere claiming the old one still holds.
  • The two other deferred renames — npm-package-registry and git — stay deferred, and for the same reason no longer. They are one migration each when wanted; nothing here needs them.

Consequences

  • The glossary stops contradicting the manifest vocabulary, and a reader of artifact-store reads it as what it is: where the mesh's built things are kept.
  • One migration on the seat table; no manifest but the registry's changes; no consumer of the provision changes, because the provision did not.
  • What got harder: nothing measurable. A record that says the-artifact-store is read through the alias; design 26's table already carried the new name as intent.

How this is checked

Rule Checked by
The former name resolves to the seat once the store's aliases are loaded a catalogue test
The seat is in the compiled set under its new name, delivering artifact-store the seat tests, updated
The registry module holds the seat under the new name on the live mesh seats after the rollout
The glossary's artifact matches the build kinds a manifest may declare design 18's table and the showcase module list the kinds; the glossary names the same four

References

  • issue 123
  • ADR 0075 — extended: the provision as defined stands, the word is corrected
  • ADR 0121, ADR 0122 — the rename, decided and made cheap
  • mesh-controller migration 0048; mesh-catalog modules/distribution