From 70865842f2749b911df98292fc4962f862315a33 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 5 Nov 2026 16:01:58 +0100 Subject: [PATCH] =?UTF-8?q?Assigner:=20the=20published=20compositions=20ar?= =?UTF-8?q?e=20read=20with=20the=20node-engine=20client's=20Composition=20?= =?UTF-8?q?(ADR=200634=20=C2=A74;=20issue=201966)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i --- .../cmd/mesh-delivery-assigner/composed.go | 15 ++++++++++----- .../cmd/mesh-delivery-assigner/seat_tools_test.go | 12 ++++++------ 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/composed.go b/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/composed.go index 1cf56264..b70b521c 100644 --- a/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/composed.go +++ b/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/composed.go @@ -4,7 +4,8 @@ import ( "sort" "strings" - "git.novox.be/novox/mesh-sdk/go/delivery" + "git.novox.be/novox/mesh-contracts/go/clients/nodeengineclient" + "git.novox.be/novox/mesh-delivery/contracts/go/clients/meshcatalogclient" ) // Every node's published compositions, read only to compare (novox/hq ADR 0593 §8): each node's engine writes its own @@ -24,7 +25,7 @@ type publishedRow struct { } // published is, by node, every composition it published, sorted by key, from every key of the per-node state (a key -// names its node first): each value decoded and digested here, as the node-engine digests it (delivery.ComposedDigestOf). +// names its node first): each value decoded and digested here, as the node-engine digests it (nodeengineclient.ComposedDigest). // A value or key that does not read is named with why, never left out. func published(values map[string][]byte) map[string][]publishedRow { byNode := map[string]map[string][]byte{} @@ -40,7 +41,11 @@ func published(values map[string][]byte) map[string][]publishedRow { var rows []publishedRow for key, raw := range keys { row := publishedRow{Key: key} - _, module, fp, isNode, err := delivery.ParseComposedKey(key) + _, module, part, isNode, err := nodeengineclient.ParseComposedKey(key) + var fp string + if err == nil && !isNode { + fp, err = meshcatalogclient.ParseKeyPart(part) + } switch { case err != nil: row.Unread = err.Error() @@ -50,14 +55,14 @@ func published(values map[string][]byte) map[string][]publishedRow { row.Module, row.FP = module, fp } if err == nil { - c, derr := delivery.DecodeComposed(raw) + c, derr := nodeengineclient.DecodeComposition(raw) switch { case derr != nil: row.Unread = derr.Error() case c.Refused != "": row.Refused = c.Refused default: - if d, err := delivery.ComposedDigestOf(c); err != nil { + if d, err := nodeengineclient.ComposedDigest(c); err != nil { row.Unread = err.Error() } else { row.Digest = d diff --git a/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/seat_tools_test.go b/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/seat_tools_test.go index c5ff72f7..355f372a 100644 --- a/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/seat_tools_test.go +++ b/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/seat_tools_test.go @@ -22,7 +22,6 @@ import ( mma "git.novox.be/novox/mesh-contracts/placement/go/seats/meshmoduleassigner" stdio "git.novox.be/novox/mesh-sdk/go" "git.novox.be/novox/mesh-sdk/go/catalogue" - "git.novox.be/novox/mesh-sdk/go/delivery" "git.novox.be/novox/mesh-sdk/go/health" "git.novox.be/novox/mesh-sdk/go/provisions" "github.com/nats-io/nats.go/jetstream" @@ -382,11 +381,12 @@ func wantsVerbs(t *testing.T) { } // ADR 0593 §6, §8: what each node published, every node's bucket as one state: anchor's own composition and its web at // a fingerprint, and laptop's web refused there. - webKey, _ := delivery.ComposedKey("anchor", "web", fpNew) - refusedKey, _ := delivery.ComposedKey("laptop", "web", fpNew) - st[buckets.ComposedRead].values["anchor.node"], _ = delivery.EncodeComposed(delivery.Composed{Node: "anchor"}) - st[buckets.ComposedRead].values[webKey], _ = delivery.EncodeComposed(delivery.Composed{Node: "anchor", Module: "web", FP: fpNew}) - st[buckets.ComposedRead].values[refusedKey], _ = delivery.EncodeComposed(delivery.Composed{Node: "laptop", Module: "web", FP: fpNew, Refused: "a required value is unset"}) + partNew, _ := meshcatalogclient.KeyPart(fpNew) + webKey, _ := nodeengineclient.ComposedKey("anchor", "web", partNew) + refusedKey, _ := nodeengineclient.ComposedKey("laptop", "web", partNew) + st[buckets.ComposedRead].values["anchor.node"], _ = nodeengineclient.EncodeComposition(nodeengineclient.Composition{Node: "anchor"}) + st[buckets.ComposedRead].values[webKey], _ = nodeengineclient.EncodeComposition(nodeengineclient.Composition{Node: "anchor", Module: "web", FP: fpNew}) + st[buckets.ComposedRead].values[refusedKey], _ = nodeengineclient.EncodeComposition(nodeengineclient.Composition{Node: "laptop", Module: "web", FP: fpNew, Refused: "a required value is unset"}) manifest := func(name, extra string) { raw := `{"module":"` + name + `","version":"1"` + extra + `}` digest := meshcatalogclient.ManifestDigest([]byte(raw))