SD-M2b, SD-M2d: the checker's and mesh-config's events kept in their own streams are mesh.stream.<holder>.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.<module>.event.<event>. Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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},
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
},
|
||||
{
|
||||
"name": "renamed",
|
||||
"subject": "mesh.mod.<holder>.event.renamed",
|
||||
"subject": "mesh.stream.<holder>.event.renamed",
|
||||
"family": "config.events",
|
||||
"body": {
|
||||
"type": "object",
|
||||
@@ -151,7 +151,7 @@
|
||||
},
|
||||
{
|
||||
"name": "retiring",
|
||||
"subject": "mesh.mod.<holder>.event.retiring",
|
||||
"subject": "mesh.stream.<holder>.event.retiring",
|
||||
"family": "config.events",
|
||||
"body": {
|
||||
"type": "object",
|
||||
@@ -190,7 +190,7 @@
|
||||
},
|
||||
{
|
||||
"name": "retired",
|
||||
"subject": "mesh.mod.<holder>.event.retired",
|
||||
"subject": "mesh.stream.<holder>.event.retired",
|
||||
"family": "config.events",
|
||||
"body": {
|
||||
"type": "object",
|
||||
|
||||
@@ -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": {}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
"holder-events": [
|
||||
{
|
||||
"name": "verdict",
|
||||
"subject": "mesh.mod.<holder>.event.verdict",
|
||||
"subject": "mesh.stream.<holder>.event.verdict",
|
||||
"family": "checker.asks",
|
||||
"body": {
|
||||
"type": "object",
|
||||
@@ -162,7 +162,7 @@
|
||||
},
|
||||
{
|
||||
"name": "tag-wanted",
|
||||
"subject": "mesh.mod.<holder>.event.tag-wanted",
|
||||
"subject": "mesh.stream.<holder>.event.tag-wanted",
|
||||
"family": "checker.asks",
|
||||
"body": {
|
||||
"type": "object",
|
||||
@@ -207,7 +207,7 @@
|
||||
},
|
||||
{
|
||||
"name": "preview.written",
|
||||
"subject": "mesh.mod.<holder>.event.preview.written",
|
||||
"subject": "mesh.stream.<holder>.event.preview.written",
|
||||
"family": "checks"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -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. */
|
||||
|
||||
@@ -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. */
|
||||
|
||||
Reference in New Issue
Block a user