From cc63123b78573fd1d9253de36b55111cd4e59aa0 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 22 Oct 2026 18:15:09 +0200 Subject: [PATCH] =?UTF-8?q?Carry=20each=20named=20path's=20object=20from?= =?UTF-8?q?=20a=20fetch's=20module=20trees=20into=20the=20merge=20preview,?= =?UTF-8?q?=20so=20the=20indexer=20narrows=20a=20candidate's=20tree=20as?= =?UTF-8?q?=20the=20merge's=20(issue=201758,=20I8,=20ADR=200499=20=C2=A72)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pins mesh-sdk feat/r4e-sdk 9cb4d59. --- modules/mesh-delivery-checker/go.mod | 2 +- modules/mesh-delivery-checker/go.sum | 2 ++ .../internal/check/preview.go | 4 ++-- .../internal/check/preview_named_test.go | 23 +++++++++++++++++++ .../internal/check/results.go | 7 ++++-- 5 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 modules/mesh-delivery-checker/internal/check/preview_named_test.go diff --git a/modules/mesh-delivery-checker/go.mod b/modules/mesh-delivery-checker/go.mod index 9c911a8..8f008d1 100644 --- a/modules/mesh-delivery-checker/go.mod +++ b/modules/mesh-delivery-checker/go.mod @@ -3,7 +3,7 @@ module mesh-delivery-checker go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261021192148-78364e318bdc + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261022160024-9cb4d59093a7 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-delivery-checker/go.sum b/modules/mesh-delivery-checker/go.sum index 3515fb8..bb52af2 100644 --- a/modules/mesh-delivery-checker/go.sum +++ b/modules/mesh-delivery-checker/go.sum @@ -1,5 +1,7 @@ git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261021192148-78364e318bdc h1:ZJScJSnF6LgFl55/VJ9RT/lNroVWun469sXtx0nlVYw= git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261021192148-78364e318bdc/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261022160024-9cb4d59093a7 h1:wK9O1CgNk7mo3IdJqW/CCx/hebg+1F0rkvW8CvJfnRM= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261022160024-9cb4d59093a7/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/antithesishq/antithesis-sdk-go v0.7.0-default-no-op h1:Z/MZK75wC/NSrkgqeNIa7jexam9uWzhLmFTSCPI/kn0= github.com/antithesishq/antithesis-sdk-go v0.7.0-default-no-op/go.mod h1:FQyySiasQQM8735Ddel3MRojmy4dA1IqCeyJ5jmPMbI= github.com/google/go-tpm v0.9.8 h1:slArAR9Ft+1ybZu0lBwpSmpwhRXaa85hWtMinMyRAWo= diff --git a/modules/mesh-delivery-checker/internal/check/preview.go b/modules/mesh-delivery-checker/internal/check/preview.go index 5d4cf56..bc37e03 100644 --- a/modules/mesh-delivery-checker/internal/check/preview.go +++ b/modules/mesh-delivery-checker/internal/check/preview.go @@ -14,7 +14,7 @@ var digest64 = regexp.MustCompile(`^[0-9a-f]{64}$`) // PreviewOf is what the fetch steps said of a pull request's head merged onto its trunk head, as the value of a previews // key (ADR 0484 clause 3): the merge commit and, for each module directory the fetches named with a manifest, its tree, the -// digest of its manifest and the hashes of its lock files. The fetches of the repository's build modules merge the same +// digest of its manifest, the hashes of its lock files and its named paths' objects (ADR 0499 clause 2). The fetches of the repository's build modules merge the same // trees; the first one's merge commit is kept. A module directory with no tree or no manifest digest is left out, so the // indexer gives its module no fingerprint and says why. A head that does not merge has a preview of the files in conflict // alone, so the indexer says the candidate's modules have no fingerprint because it does not merge (issue 1445). It @@ -43,7 +43,7 @@ func PreviewOf(p Pull, fetched []Fetched) (delivery.Preview, bool) { if t.Tree == "" || !digest64.MatchString(t.Manifest) { continue } - mods[dir] = delivery.PreviewModule{Tree: t.Tree, Manifest: t.Manifest, Locks: t.Locks} + mods[dir] = delivery.PreviewModule{Tree: t.Tree, Manifest: t.Manifest, Locks: t.Locks, Paths: t.Paths} } } if merge == "" { diff --git a/modules/mesh-delivery-checker/internal/check/preview_named_test.go b/modules/mesh-delivery-checker/internal/check/preview_named_test.go new file mode 100644 index 0000000..fccc274 --- /dev/null +++ b/modules/mesh-delivery-checker/internal/check/preview_named_test.go @@ -0,0 +1,23 @@ +package check + +import ( + "encoding/json" + "reflect" + "testing" +) + +// I8, ADR 0499 clause 2: the preview carries each named path's object a fetch's module trees answer (mesh-sdk +// buildstep.ModuleTree's paths), so the indexer computes the candidate's narrowed tree from them by the one function. +func TestAPreviewCarriesTheNamedPathsObjectsOfAFetchsModuleTrees(t *testing.T) { + var f Fetched + // As buildstep.ModuleTrees answers a module naming its paths: the named tree and the objects. + raw := `{"workspace":"w","merge":"6666666666666666666666666666666666666666","trees":{".":{"tree":"named:aa","manifest":"` + + "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" + `","paths":{"src":"1111111111111111111111111111111111111111"}}}}` + if err := json.Unmarshal([]byte(raw), &f); err != nil { + t.Fatal(err) + } + pv, ok := PreviewOf(Pull{Repository: "novox/mesh-sdk", Head: "h", Trunk: "t"}, []Fetched{f}) + if !ok || !reflect.DeepEqual(pv.Modules["."].Paths, map[string]string{"src": "1111111111111111111111111111111111111111"}) || pv.Modules["."].Tree != "named:aa" { + t.Errorf("preview = %+v, want the module's named tree and its objects", pv) + } +} diff --git a/modules/mesh-delivery-checker/internal/check/results.go b/modules/mesh-delivery-checker/internal/check/results.go index 5583592..1c8d2a7 100644 --- a/modules/mesh-delivery-checker/internal/check/results.go +++ b/modules/mesh-delivery-checker/internal/check/results.go @@ -10,12 +10,15 @@ import ( // cmd/mesh-build-node check.go TestResult, fetch.go FetchResult) with the fields the fetch step adds for a merge (ADR 0484 // clause 3). Only the fields the checker reads are named; the rest is ignored. -// MergeTree is what a fetch that merged says of one module directory: the tree sha, the digest of its manifest and the -// hashes of its lock files by name. A bare string is the tree alone. +// MergeTree is what a fetch that merged says of one module directory: the tree sha, the digest of its manifest, the +// hashes of its lock files by name and the objects of its named paths. A bare string is the tree alone. type MergeTree struct { Tree string `json:"tree"` Manifest string `json:"manifest,omitempty"` Locks map[string]string `json:"locks,omitempty"` + // Paths are, of a module whose every artifact names its paths, each named path's object; Tree is then their named + // tree (mesh-sdk buildstep.ModuleTree, novox/hq ADR 0499 clause 2). + Paths map[string]string `json:"paths,omitempty"` } // UnmarshalJSON takes a string as the tree alone, or an object.