From cc2d3aafdb4c1d7f24db46549332aa0ff7b22766 Mon Sep 17 00:00:00 2001 From: jochen Date: Wed, 4 Nov 2026 13:17:26 +0100 Subject: [PATCH] SD-M2b, SD-M2d: the checker's and mesh-config's events kept in their own streams are mesh.stream..event.* verdict, tag-wanted and preview.written ride the checker's own streams, renamed, retiring and retired mesh-config's config-events stream, whose subjects are mesh.stream..event.. Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig --- go/seats/meshconfig/contract.go | 6 +++--- go/seats/meshconfig/contract_test.go | 12 ++++++------ go/seats/meshdeliverychecker/contract.go | 8 +++++--- go/seats/meshdeliverychecker/contract_test.go | 12 ++++++------ seats/mesh-config/fixtures/events.json | 6 +++--- seats/mesh-config/seat.json | 6 +++--- seats/mesh-delivery-checker/fixtures/events.json | 6 +++--- seats/mesh-delivery-checker/seat.json | 6 +++--- ts/src/mesh-config.ts | 6 +++--- ts/src/mesh-delivery-checker.ts | 6 +++--- 10 files changed, 38 insertions(+), 36 deletions(-) diff --git a/go/seats/meshconfig/contract.go b/go/seats/meshconfig/contract.go index 207bf63..e5d5005 100644 --- a/go/seats/meshconfig/contract.go +++ b/go/seats/meshconfig/contract.go @@ -30,13 +30,13 @@ func HolderSubjectConfigChanged(holder string) string { } // HolderSubjectRenamed is where the holder publishes renamed, kept in config.events. -func HolderSubjectRenamed(holder string) string { return "mesh.mod." + holder + ".event.renamed" } +func HolderSubjectRenamed(holder string) string { return "mesh.stream." + holder + ".event.renamed" } // HolderSubjectRetiring is where the holder publishes retiring, kept in config.events. -func HolderSubjectRetiring(holder string) string { return "mesh.mod." + holder + ".event.retiring" } +func HolderSubjectRetiring(holder string) string { return "mesh.stream." + holder + ".event.retiring" } // HolderSubjectRetired is where the holder publishes retired, kept in config.events. -func HolderSubjectRetired(holder string) string { return "mesh.mod." + holder + ".event.retired" } +func HolderSubjectRetired(holder string) string { return "mesh.stream." + holder + ".event.retired" } // ConfigInput is what config takes. type ConfigInput struct { diff --git a/go/seats/meshconfig/contract_test.go b/go/seats/meshconfig/contract_test.go index eb8839a..6d82f0f 100644 --- a/go/seats/meshconfig/contract_test.go +++ b/go/seats/meshconfig/contract_test.go @@ -19,12 +19,12 @@ func TestFixtures(t *testing.T) { }{ {name: "config-changed, unchanged", subject: "mesh.mod.mesh-config.event.config-changed", given: "{\"key\":\"x\"}", wire: "{\"key\":\"x\"}", decode: func(b []byte) (any, error) { var v map[string]any; err := json.Unmarshal(b, &v); return v, err }, subjectIs: regexp.MustCompile("^mesh\\.mod\\.[a-z0-9-]+\\.event\\.config-changed$")}, - {name: "renamed", subject: "mesh.mod.mesh-config.event.renamed", given: "{\"at\":\"2026-11-04T12:00:00Z\",\"from\":\"old-key\",\"module\":\"messenger\",\"to\":\"new-key\"}", wire: "{\"at\":\"2026-11-04T12:00:00Z\",\"from\":\"old-key\",\"module\":\"messenger\",\"to\":\"new-key\"}", - decode: func(b []byte) (any, error) { var v RenamedHolderEvent; err := json.Unmarshal(b, &v); return v, err }, subjectIs: regexp.MustCompile("^mesh\\.mod\\.[a-z0-9-]+\\.event\\.renamed$")}, - {name: "retiring", subject: "mesh.mod.mesh-config.event.retiring", given: "{\"ask\":\"a1\",\"key\":\"old-key\",\"kind\":\"value\",\"module\":\"messenger\",\"since\":\"2026-11-04T12:00:00Z\"}", wire: "{\"ask\":\"a1\",\"key\":\"old-key\",\"kind\":\"value\",\"module\":\"messenger\",\"since\":\"2026-11-04T12:00:00Z\"}", - decode: func(b []byte) (any, error) { var v RetiringHolderEvent; err := json.Unmarshal(b, &v); return v, err }, subjectIs: regexp.MustCompile("^mesh\\.mod\\.[a-z0-9-]+\\.event\\.retiring$")}, - {name: "retired", subject: "mesh.mod.mesh-config.event.retired", given: "{\"ask\":\"a1\",\"module\":\"messenger\",\"name\":\"old-key\",\"node\":\"ace\"}", wire: "{\"ask\":\"a1\",\"module\":\"messenger\",\"name\":\"old-key\",\"node\":\"ace\"}", - decode: func(b []byte) (any, error) { var v RetiredHolderEvent; err := json.Unmarshal(b, &v); return v, err }, subjectIs: regexp.MustCompile("^mesh\\.mod\\.[a-z0-9-]+\\.event\\.retired$")}, + {name: "renamed", subject: "mesh.stream.mesh-config.event.renamed", given: "{\"at\":\"2026-11-04T12:00:00Z\",\"from\":\"old-key\",\"module\":\"messenger\",\"to\":\"new-key\"}", wire: "{\"at\":\"2026-11-04T12:00:00Z\",\"from\":\"old-key\",\"module\":\"messenger\",\"to\":\"new-key\"}", + decode: func(b []byte) (any, error) { var v RenamedHolderEvent; err := json.Unmarshal(b, &v); return v, err }, subjectIs: regexp.MustCompile("^mesh\\.stream\\.[a-z0-9-]+\\.event\\.renamed$")}, + {name: "retiring", subject: "mesh.stream.mesh-config.event.retiring", given: "{\"ask\":\"a1\",\"key\":\"old-key\",\"kind\":\"value\",\"module\":\"messenger\",\"since\":\"2026-11-04T12:00:00Z\"}", wire: "{\"ask\":\"a1\",\"key\":\"old-key\",\"kind\":\"value\",\"module\":\"messenger\",\"since\":\"2026-11-04T12:00:00Z\"}", + decode: func(b []byte) (any, error) { var v RetiringHolderEvent; err := json.Unmarshal(b, &v); return v, err }, subjectIs: regexp.MustCompile("^mesh\\.stream\\.[a-z0-9-]+\\.event\\.retiring$")}, + {name: "retired", subject: "mesh.stream.mesh-config.event.retired", given: "{\"ask\":\"a1\",\"module\":\"messenger\",\"name\":\"old-key\",\"node\":\"ace\"}", wire: "{\"ask\":\"a1\",\"module\":\"messenger\",\"name\":\"old-key\",\"node\":\"ace\"}", + decode: func(b []byte) (any, error) { var v RetiredHolderEvent; err := json.Unmarshal(b, &v); return v, err }, subjectIs: regexp.MustCompile("^mesh\\.stream\\.[a-z0-9-]+\\.event\\.retired$")}, {name: "renames answers the open windows", subject: "", given: "{\"renames\":[{\"at\":\"2026-11-04T12:00:00Z\",\"from\":\"old-key\",\"module\":\"messenger\",\"open\":[\"g14\"],\"to\":\"new-key\"}]}", wire: "{\"renames\":[{\"at\":\"2026-11-04T12:00:00Z\",\"from\":\"old-key\",\"module\":\"messenger\",\"open\":[\"g14\"],\"to\":\"new-key\"}]}", decode: func(b []byte) (any, error) { var v RenamesAnswer; err := json.Unmarshal(b, &v); return v, err }, subjectIs: nil}, } diff --git a/go/seats/meshdeliverychecker/contract.go b/go/seats/meshdeliverychecker/contract.go index af921c3..cbe9997 100644 --- a/go/seats/meshdeliverychecker/contract.go +++ b/go/seats/meshdeliverychecker/contract.go @@ -25,14 +25,16 @@ const ( ) // HolderSubjectVerdict is where the holder publishes verdict, kept in checker.asks. -func HolderSubjectVerdict(holder string) string { return "mesh.mod." + holder + ".event.verdict" } +func HolderSubjectVerdict(holder string) string { return "mesh.stream." + holder + ".event.verdict" } // HolderSubjectTagWanted is where the holder publishes tag-wanted, kept in checker.asks. -func HolderSubjectTagWanted(holder string) string { return "mesh.mod." + holder + ".event.tag-wanted" } +func HolderSubjectTagWanted(holder string) string { + return "mesh.stream." + holder + ".event.tag-wanted" +} // HolderSubjectPreviewWritten is where the holder publishes preview.written, kept in checks. func HolderSubjectPreviewWritten(holder string) string { - return "mesh.mod." + holder + ".event.preview.written" + return "mesh.stream." + holder + ".event.preview.written" } // TryInput is what try takes. diff --git a/go/seats/meshdeliverychecker/contract_test.go b/go/seats/meshdeliverychecker/contract_test.go index b3e334a..5856f27 100644 --- a/go/seats/meshdeliverychecker/contract_test.go +++ b/go/seats/meshdeliverychecker/contract_test.go @@ -17,12 +17,12 @@ func TestFixtures(t *testing.T) { decode func([]byte) (any, error) subjectIs *regexp.Regexp }{ - {name: "verdict on the checker's own family", subject: "mesh.mod.mesh-delivery-checker.event.verdict", given: "{\"head\":\"cccccccccccccccccccccccccccccccccccccccc\",\"out-of-step\":[\"go/seats/meshbroker/contract.go\"],\"pull\":3,\"repository\":\"novox/mesh-contracts\",\"verdict\":\"fail\"}", wire: "{\"head\":\"cccccccccccccccccccccccccccccccccccccccc\",\"out-of-step\":[\"go/seats/meshbroker/contract.go\"],\"pull\":3,\"repository\":\"novox/mesh-contracts\",\"verdict\":\"fail\"}", - decode: func(b []byte) (any, error) { var v VerdictHolderEvent; err := json.Unmarshal(b, &v); return v, err }, subjectIs: regexp.MustCompile("^mesh\\.mod\\.[a-z0-9-]+\\.event\\.verdict$")}, - {name: "tag-wanted on the checker's own family", subject: "mesh.mod.mesh-delivery-checker.event.tag-wanted", given: "{\"branch\":\"feat/registry\",\"head\":\"cccccccccccccccccccccccccccccccccccccccc\",\"module\":\"mesh-sdk\",\"package\":\"go\",\"pull\":170,\"repository\":\"novox/mesh-sdk\",\"tag\":\"registry-1966\"}", wire: "{\"branch\":\"feat/registry\",\"head\":\"cccccccccccccccccccccccccccccccccccccccc\",\"module\":\"mesh-sdk\",\"package\":\"go\",\"pull\":170,\"repository\":\"novox/mesh-sdk\",\"tag\":\"registry-1966\"}", - decode: func(b []byte) (any, error) { var v TagWantedHolderEvent; err := json.Unmarshal(b, &v); return v, err }, subjectIs: regexp.MustCompile("^mesh\\.mod\\.[a-z0-9-]+\\.event\\.tag-wanted$")}, - {name: "preview.written on the checker's stream", subject: "mesh.mod.mesh-delivery-checker.event.preview.written", given: "{}", wire: "{}", - decode: func(b []byte) (any, error) { var v map[string]any; err := json.Unmarshal(b, &v); return v, err }, subjectIs: regexp.MustCompile("^mesh\\.mod\\.[a-z0-9-]+\\.event\\.preview\\.written$")}, + {name: "verdict on the checker's own family", subject: "mesh.stream.mesh-delivery-checker.event.verdict", given: "{\"head\":\"cccccccccccccccccccccccccccccccccccccccc\",\"out-of-step\":[\"go/seats/meshbroker/contract.go\"],\"pull\":3,\"repository\":\"novox/mesh-contracts\",\"verdict\":\"fail\"}", wire: "{\"head\":\"cccccccccccccccccccccccccccccccccccccccc\",\"out-of-step\":[\"go/seats/meshbroker/contract.go\"],\"pull\":3,\"repository\":\"novox/mesh-contracts\",\"verdict\":\"fail\"}", + decode: func(b []byte) (any, error) { var v VerdictHolderEvent; err := json.Unmarshal(b, &v); return v, err }, subjectIs: regexp.MustCompile("^mesh\\.stream\\.[a-z0-9-]+\\.event\\.verdict$")}, + {name: "tag-wanted on the checker's own family", subject: "mesh.stream.mesh-delivery-checker.event.tag-wanted", given: "{\"branch\":\"feat/registry\",\"head\":\"cccccccccccccccccccccccccccccccccccccccc\",\"module\":\"mesh-sdk\",\"package\":\"go\",\"pull\":170,\"repository\":\"novox/mesh-sdk\",\"tag\":\"registry-1966\"}", wire: "{\"branch\":\"feat/registry\",\"head\":\"cccccccccccccccccccccccccccccccccccccccc\",\"module\":\"mesh-sdk\",\"package\":\"go\",\"pull\":170,\"repository\":\"novox/mesh-sdk\",\"tag\":\"registry-1966\"}", + decode: func(b []byte) (any, error) { var v TagWantedHolderEvent; err := json.Unmarshal(b, &v); return v, err }, subjectIs: regexp.MustCompile("^mesh\\.stream\\.[a-z0-9-]+\\.event\\.tag-wanted$")}, + {name: "preview.written on the checker's stream", subject: "mesh.stream.mesh-delivery-checker.event.preview.written", given: "{}", wire: "{}", + decode: func(b []byte) (any, error) { var v map[string]any; err := json.Unmarshal(b, &v); return v, err }, subjectIs: regexp.MustCompile("^mesh\\.stream\\.[a-z0-9-]+\\.event\\.preview\\.written$")}, } for _, c := range cases { v, err := c.decode([]byte(c.given)) diff --git a/seats/mesh-config/fixtures/events.json b/seats/mesh-config/fixtures/events.json index 01c3f98..4cbc324 100644 --- a/seats/mesh-config/fixtures/events.json +++ b/seats/mesh-config/fixtures/events.json @@ -10,7 +10,7 @@ { "name": "renamed", "of": "holder-event:renamed", - "subject": "mesh.mod.mesh-config.event.renamed", + "subject": "mesh.stream.mesh-config.event.renamed", "given": { "module": "messenger", "from": "old-key", @@ -21,7 +21,7 @@ { "name": "retiring", "of": "holder-event:retiring", - "subject": "mesh.mod.mesh-config.event.retiring", + "subject": "mesh.stream.mesh-config.event.retiring", "given": { "module": "messenger", "key": "old-key", @@ -33,7 +33,7 @@ { "name": "retired", "of": "holder-event:retired", - "subject": "mesh.mod.mesh-config.event.retired", + "subject": "mesh.stream.mesh-config.event.retired", "given": { "module": "messenger", "name": "old-key", diff --git a/seats/mesh-config/seat.json b/seats/mesh-config/seat.json index 7ddce60..d095825 100644 --- a/seats/mesh-config/seat.json +++ b/seats/mesh-config/seat.json @@ -119,7 +119,7 @@ }, { "name": "renamed", - "subject": "mesh.mod..event.renamed", + "subject": "mesh.stream..event.renamed", "family": "config.events", "body": { "type": "object", @@ -151,7 +151,7 @@ }, { "name": "retiring", - "subject": "mesh.mod..event.retiring", + "subject": "mesh.stream..event.retiring", "family": "config.events", "body": { "type": "object", @@ -190,7 +190,7 @@ }, { "name": "retired", - "subject": "mesh.mod..event.retired", + "subject": "mesh.stream..event.retired", "family": "config.events", "body": { "type": "object", diff --git a/seats/mesh-delivery-checker/fixtures/events.json b/seats/mesh-delivery-checker/fixtures/events.json index cc8ae18..712b5db 100644 --- a/seats/mesh-delivery-checker/fixtures/events.json +++ b/seats/mesh-delivery-checker/fixtures/events.json @@ -2,7 +2,7 @@ { "name": "verdict on the checker's own family", "of": "holder-event:verdict", - "subject": "mesh.mod.mesh-delivery-checker.event.verdict", + "subject": "mesh.stream.mesh-delivery-checker.event.verdict", "given": { "repository": "novox/mesh-contracts", "pull": 3, @@ -16,7 +16,7 @@ { "name": "tag-wanted on the checker's own family", "of": "holder-event:tag-wanted", - "subject": "mesh.mod.mesh-delivery-checker.event.tag-wanted", + "subject": "mesh.stream.mesh-delivery-checker.event.tag-wanted", "given": { "repository": "novox/mesh-sdk", "pull": 170, @@ -30,7 +30,7 @@ { "name": "preview.written on the checker's stream", "of": "holder-event:preview.written", - "subject": "mesh.mod.mesh-delivery-checker.event.preview.written", + "subject": "mesh.stream.mesh-delivery-checker.event.preview.written", "given": {} } ] diff --git a/seats/mesh-delivery-checker/seat.json b/seats/mesh-delivery-checker/seat.json index fb80b49..67eb7a8 100644 --- a/seats/mesh-delivery-checker/seat.json +++ b/seats/mesh-delivery-checker/seat.json @@ -124,7 +124,7 @@ "holder-events": [ { "name": "verdict", - "subject": "mesh.mod..event.verdict", + "subject": "mesh.stream..event.verdict", "family": "checker.asks", "body": { "type": "object", @@ -162,7 +162,7 @@ }, { "name": "tag-wanted", - "subject": "mesh.mod..event.tag-wanted", + "subject": "mesh.stream..event.tag-wanted", "family": "checker.asks", "body": { "type": "object", @@ -207,7 +207,7 @@ }, { "name": "preview.written", - "subject": "mesh.mod..event.preview.written", + "subject": "mesh.stream..event.preview.written", "family": "checks" } ] diff --git a/ts/src/mesh-config.ts b/ts/src/mesh-config.ts index a9d230f..2c5bb50 100644 --- a/ts/src/mesh-config.ts +++ b/ts/src/mesh-config.ts @@ -21,15 +21,15 @@ export function configChangedHolderSubject(holder: string): string { } export function renamedHolderSubject(holder: string): string { - return "mesh.mod." + holder + ".event.renamed"; + return "mesh.stream." + holder + ".event.renamed"; } export function retiringHolderSubject(holder: string): string { - return "mesh.mod." + holder + ".event.retiring"; + return "mesh.stream." + holder + ".event.retiring"; } export function retiredHolderSubject(holder: string): string { - return "mesh.mod." + holder + ".event.retired"; + return "mesh.stream." + holder + ".event.retired"; } /** is what config takes. */ diff --git a/ts/src/mesh-delivery-checker.ts b/ts/src/mesh-delivery-checker.ts index 4bbc94b..bb5e526 100644 --- a/ts/src/mesh-delivery-checker.ts +++ b/ts/src/mesh-delivery-checker.ts @@ -17,15 +17,15 @@ export const holderEvents = { } as const; export function verdictHolderSubject(holder: string): string { - return "mesh.mod." + holder + ".event.verdict"; + return "mesh.stream." + holder + ".event.verdict"; } export function tagWantedHolderSubject(holder: string): string { - return "mesh.mod." + holder + ".event.tag-wanted"; + return "mesh.stream." + holder + ".event.tag-wanted"; } export function previewWrittenHolderSubject(holder: string): string { - return "mesh.mod." + holder + ".event.preview.written"; + return "mesh.stream." + holder + ".event.preview.written"; } /** is what try takes. */