artifact-store-tools: require no artifact-store; the sweep reaches the store through the registry seats (issue 1966)

The operator's decision of 2026-11-04: the store's clean-up asks the registry seats' verbs and is no consumer of the
provision.

Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
This commit is contained in:
2026-11-04 20:28:37 +01:00
parent 3dfc3533be
commit 10bbbadcf2
4 changed files with 15 additions and 13 deletions
@@ -3,10 +3,9 @@
// size, and what the mesh keeps of each manifest — read from the store's own files through the store's own container,
// and it holds the seat mesh-artifact-sweep: the keep set, the sweep at each build's end, and S25's image-missing.
//
// **A module beside the store, not the store's own.** A module that provides the artifact store cannot also build an
// artifact: building publishes to the store, so the store would be needed to create itself. So these tools are a
// second module, assigned to the machine that holds the store. stdout is the protocol; what this bundle says, it says
// on stderr.
// **A module beside the store, not the store's own.** It requires no provision: what it holds and removes it asks the
// registry seats (sweepseats.go), and it is assigned to the machine that holds the store, whose container its read
// tools read through. stdout is the protocol; what this bundle says, it says on stderr.
package main
import (
@@ -449,6 +449,7 @@ func TestTheToolsServedAreTheToolsTheManifestNames(t *testing.T) {
Invokes []string `json:"invokes"`
Reads []string `json:"reads"`
Consumes []string `json:"consumes"`
Requires []any `json:"requires"`
Claims []struct {
Name string `json:"name"`
Serves []string `json:"serves"`
@@ -484,6 +485,11 @@ func TestTheToolsServedAreTheToolsTheManifestNames(t *testing.T) {
slices.Contains(m.Reads, WantsRead) || slices.Contains(m.Reads, ManifestsRead) {
t.Errorf("consumes %v, reads %v", m.Consumes, m.Reads)
}
// The operator, 2026-11-04 (issue 1966): it reaches the store through the registry seats' verbs, and requires no
// provision artifact-store.
if len(m.Requires) != 0 {
t.Errorf("requires %v, want nothing: the store is reached through the registry seats", m.Requires)
}
var verbs []string
for _, tl := range SeatTools(&Holder{}, &Store{}) {
verbs = append(verbs, strings.TrimPrefix(tl.Name, catalogue.ArtifactSweepSeat+"."))