diff --git a/modules/artifact-store-tools/cmd/artifact-store-tools/store_test.go b/modules/artifact-store-tools/cmd/artifact-store-tools/store_test.go index 8156df52c..e7e183262 100644 --- a/modules/artifact-store-tools/cmd/artifact-store-tools/store_test.go +++ b/modules/artifact-store-tools/cmd/artifact-store-tools/store_test.go @@ -480,8 +480,13 @@ func TestTheToolsServedAreTheToolsTheManifestNames(t *testing.T) { } // 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) + // What it requires is its finding state and stream alone, in their template form (design 47 G §529). + var required []string + for _, r := range m.Requires { + required = append(required, fmt.Sprint(r.(map[string]any)["name"])) + } + if !reflect.DeepEqual(required, []string{"findings", "finding-events"}) { + t.Errorf("requires %v, want its findings and finding-events alone: the store is reached through the registry seats", m.Requires) } // Its address file is filled from the image seat holder's listen (ADR 0632 §1), never by the retired provision. address, err := os.ReadFile("../../files/store-address") diff --git a/modules/artifact-store-tools/module.json b/modules/artifact-store-tools/module.json index 8ae3fe620..b0e2e25a8 100644 --- a/modules/artifact-store-tools/module.json +++ b/modules/artifact-store-tools/module.json @@ -42,9 +42,6 @@ "mesh-delivery-indexer.views.manifests", "mesh-conditions.findings-asked" ], - "state": [ - "findings" - ], "tools": [ "artifact_store_repositories", "artifact_store_usage", @@ -86,14 +83,6 @@ "template": "files/store-address" } ], - "streams": [ - { - "name": "artifact-store-tools-findings", - "events": ["finding-written.*", "finding-cleared.*", "findings-stated.*"], - "max-age-days": 7, - "max-mib": 16 - } - ], "build": { "artifacts": [ { @@ -117,5 +106,26 @@ "from": "files" } ] - } + }, + "requires": [ + { + "name": "findings", + "storage": "key-value", + "template": "state" + }, + { + "name": "finding-events", + "storage": "stream", + "template": "events", + "options": { + "events": [ + "finding-written.*", + "finding-cleared.*", + "findings-stated.*" + ], + "max-age-days": 7, + "max-mib": 16 + } + } + ] } diff --git a/modules/mesh-watcher/module.json b/modules/mesh-watcher/module.json index 5a855c5fb..c4d8d9f98 100644 --- a/modules/mesh-watcher/module.json +++ b/modules/mesh-watcher/module.json @@ -12,9 +12,6 @@ "mesh-watcher.watcher_ping", "seat:mesh-hand-acts.hand-act" ], - "state": [ - "findings" - ], "own-secrets": { "telegram-token": "${dir:state}/telegram-token" }, @@ -54,14 +51,6 @@ "template": "files/settings.json" } ], - "streams": [ - { - "name": "mesh-watcher-findings", - "events": ["finding-written.*", "finding-cleared.*", "findings-stated.*"], - "max-age-days": 7, - "max-mib": 16 - } - ], "build": { "artifacts": [ { @@ -85,5 +74,26 @@ "from": "files" } ] - } + }, + "requires": [ + { + "name": "findings", + "storage": "key-value", + "template": "state" + }, + { + "name": "finding-events", + "storage": "stream", + "template": "events", + "options": { + "events": [ + "finding-written.*", + "finding-cleared.*", + "findings-stated.*" + ], + "max-age-days": 7, + "max-mib": 16 + } + } + ] } diff --git a/modules/minio/module.json b/modules/minio/module.json index 47f19cdf6..60800260d 100644 --- a/modules/minio/module.json +++ b/modules/minio/module.json @@ -19,7 +19,26 @@ } ], "requires": [ - "route" + "route", + { + "name": "findings", + "storage": "key-value", + "template": "state" + }, + { + "name": "finding-events", + "storage": "stream", + "template": "events", + "options": { + "events": [ + "finding-written.*", + "finding-cleared.*", + "findings-stated.*" + ], + "max-age-days": 7, + "max-mib": 16 + } + } ], "seats": [ { @@ -47,9 +66,6 @@ "mesh-delivery-assigner.views.seat-holders", "mesh-conditions.findings-asked" ], - "state": [ - "findings" - ], "contributes": { "route": { "api": { @@ -193,14 +209,6 @@ "package": "minio-client" } ], - "streams": [ - { - "name": "minio-findings", - "events": ["finding-written.*", "finding-cleared.*", "findings-stated.*"], - "max-age-days": 7, - "max-mib": 16 - } - ], "build": { "artifacts": [ { diff --git a/modules/nfs-server/module.json b/modules/nfs-server/module.json index 6f77dba2c..9e7d61b69 100644 --- a/modules/nfs-server/module.json +++ b/modules/nfs-server/module.json @@ -48,8 +48,7 @@ "name": "exports", "ttl-seconds": 120, "per-machine": true - }, - "findings" + } ], "reads": [ "disk-load.readings", @@ -172,14 +171,6 @@ "template": "files/shares.conf" } ], - "streams": [ - { - "name": "nfs-server-findings", - "events": ["finding-written.*", "finding-cleared.*", "findings-stated.*"], - "max-age-days": 7, - "max-mib": 16 - } - ], "build": { "artifacts": [ { @@ -207,5 +198,26 @@ "consumes": [ "mesh-delivery-assigner.views.seat-holders", "mesh-conditions.findings-asked" + ], + "requires": [ + { + "name": "findings", + "storage": "key-value", + "template": "state" + }, + { + "name": "finding-events", + "storage": "stream", + "template": "events", + "options": { + "events": [ + "finding-written.*", + "finding-cleared.*", + "findings-stated.*" + ], + "max-age-days": 7, + "max-mib": 16 + } + } ] }