Judge: the store's seat delivers nothing, as the provision artifact-store retired (ADR 0632 §2; issue 1966)
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
This commit is contained in:
@@ -7585,9 +7585,9 @@ var defaultSeats = append([]catalogue.Seat{
|
||||
}},
|
||||
// Named for its scope since 2026-09-30 (novox/hq ADR 0156); `the-artifact-store` resolves to it as
|
||||
// an alias on a mesh that predates the rename. It serves artifacts of every kind a build makes —
|
||||
// images and archives, by digest — which is why the provision is the artifact store and not an
|
||||
// image registry.
|
||||
{Name: "mesh-artifact-store", Scope: catalogue.ScopeMesh, Delivers: "artifact-store", Decision: "novox/hq ADR 0075"},
|
||||
// images and archives, by digest. It delivers nothing since the provision artifact-store retired
|
||||
// (novox/hq ADR 0632 §2): the store's address is the image seat holder's listen.
|
||||
{Name: "mesh-artifact-store", Scope: catalogue.ScopeMesh, Decision: "novox/hq ADR 0075"},
|
||||
// The catalog (novox/hq ADR 0604): the SDK's entry, its four verbs optional while the module that claimed it before stands.
|
||||
{Name: "mesh-catalog", Scope: catalogue.ScopeMesh, Serves: catalogVerbs(), Decision: "novox/hq ADR 0604"},
|
||||
// The delivery's owner (novox/hq ADR 0239): one commit's journey from its pull request's head to every
|
||||
|
||||
@@ -4251,6 +4251,28 @@ func TestAStoreHolderThatBuildsIsNotRefusedByItsManifest(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatalf("a module that provides the artifact store and builds was refused: %v", err)
|
||||
}
|
||||
// The provision artifact-store retired (novox/hq ADR 0632 §2): the store's holder holds its three seats providing and
|
||||
// serving nothing, in the judge's seat copy and the SDK's alike; a module still serving it without providing it is
|
||||
// refused as any served provision is.
|
||||
holder := catalogue.Manifest{Module: "registry", Version: "1",
|
||||
Claims: []catalogue.Claim{{Name: "mesh-artifact-store", Scope: catalogue.ScopeMesh}},
|
||||
Listens: []catalogue.Listening{{Name: "registry", Port: 5000, From: catalogue.FromMesh}}}
|
||||
for _, name := range []string{"container-image-registry", "oci-artifact-registry"} {
|
||||
s, _ := catalogue.SeatNamed(name)
|
||||
holder.Claims = append(holder.Claims, catalogue.Claim{Name: name, Scope: catalogue.ScopeMesh, Serves: catalogue.VerbNames(s.Serves)})
|
||||
}
|
||||
for _, s := range append([]catalogue.Seat{}, seats...) {
|
||||
if s.Delivers == "artifact-store" {
|
||||
t.Errorf("the judge's %s still delivers the retired artifact-store", s.Name)
|
||||
}
|
||||
}
|
||||
if got := strings.Join(CatalogueProblems(catalogue.Shelf{"registry": holder}), "; "); strings.Contains(got, "artifact-store") {
|
||||
t.Errorf("the store's holder providing nothing was refused: %s", got)
|
||||
}
|
||||
if _, err := ParseManifest([]byte(`{"module":"old","version":"1","serves":{"artifact-store":{"port":5000}}}`)); err == nil ||
|
||||
!strings.Contains(err.Error(), `serves "artifact-store" to whoever requires it, and does not provide it`) {
|
||||
t.Errorf("a module serving artifact-store it does not provide: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// The module holding mesh-broker is the bus, and its account is granted the bus's snapshot API and
|
||||
@@ -4914,10 +4936,7 @@ func TestTheSeatsAreAClosedSetAndEachNamesItsDecision(t *testing.T) {
|
||||
if s.Delivers != "" {
|
||||
// Two seats answering for one provision would put the question "which one?" back,
|
||||
// which is the question a seat exists to answer.
|
||||
// Except artifact-store, which the two registry seats for images and bundles deliver beside the artifact store
|
||||
// until its old name closes (novox/hq ADR 0613, design 51): a reference's seat says which one answers.
|
||||
if other, twice := delivered[s.Delivers]; twice && !(s.Delivers == "artifact-store" &&
|
||||
slices.Contains([]string{"container-image-registry", "oci-artifact-registry"}, s.Name)) {
|
||||
if other, twice := delivered[s.Delivers]; twice {
|
||||
t.Errorf("%s and %s both deliver %q", other, s.Name, s.Delivers)
|
||||
}
|
||||
delivered[s.Delivers] = s.Name
|
||||
|
||||
Reference in New Issue
Block a user