From 7ae2ed88c09a0a18b87d1baa821d5f082c6b683c Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 5 Nov 2026 14:09:44 +0100 Subject: [PATCH] messenger: the asks it says are a bus-state entry of the events template, not a stream of its own (K-24, F6, ADR 0595, ADR 0619; issue 1966) --- .../messenger/cmd/messenger/manifest_test.go | 11 ++++++++++ modules/messenger/module.json | 20 +++++++++---------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/modules/messenger/cmd/messenger/manifest_test.go b/modules/messenger/cmd/messenger/manifest_test.go index 0532a186b..e79f13a11 100644 --- a/modules/messenger/cmd/messenger/manifest_test.go +++ b/modules/messenger/cmd/messenger/manifest_test.go @@ -27,6 +27,11 @@ type manifest struct { Emits []string Invokes []string State []json.RawMessage + Streams []json.RawMessage + Requires []struct { + Name, Storage, Template string + Options map[string]any + } Own map[string]string `json:"own-secrets"` RunsAs string `json:"runs-as"` SecretsOwner string `json:"secrets-owner"` @@ -112,6 +117,12 @@ func TestItDeclaresTheSeatsOfAnAskAndHoldsTheOperatorChannel(t *testing.T) { // if !reflect.DeepEqual(state, []string{"open", "sent", "asks", "identities", "walks"}) { t.Fatalf("state %v", state) } + // The asks it says are a bus-state entry of the events template (ADR 0595), never a stream of its own (the manifest + // validator refuses one that keeps no history, ADR 0619): offered and closed, kept seven days, readers by the grant. + if len(m.Streams) != 0 || len(m.Requires) != 1 || m.Requires[0].Template != "events" || m.Requires[0].Storage != "stream" || + !reflect.DeepEqual(m.Requires[0].Options["events"], []any{"offered", "closed"}) || m.Requires[0].Options["max-age-days"] != float64(7) { + t.Fatalf("streams %v, requires %+v", m.Streams, m.Requires) + } // It holds no channel's secret: only its own bus account, read by its own account alone (ADR 0259 ยง8). if len(m.Own) != 1 || m.Own["broker"] == "" || m.RunsAs != "messenger" || m.SecretsOwner != "messenger" { t.Fatalf("own secrets %v, runs as %q, secrets owned by %q", m.Own, m.RunsAs, m.SecretsOwner) diff --git a/modules/messenger/module.json b/modules/messenger/module.json index 4ca99c0f0..767403b6d 100644 --- a/modules/messenger/module.json +++ b/modules/messenger/module.json @@ -88,18 +88,16 @@ "emits": [ "refused" ], - "streams": [ + "requires": [ { - "name": "asks", - "events": [ - "offered", - "closed" - ], - "max-age-days": 7, - "max-mib": 64, - "grant": { - "config": "readers", - "events": "{key}" + "name": "ask-events", + "storage": "stream", + "template": "events", + "options": { + "events": ["offered", "closed"], + "max-age-days": 7, + "max-mib": 64, + "grant": {"config": "readers", "events": "{key}"} } } ],