From 0bfc72d2307f6f64ed2abe2e3298a10d82727b51 Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 11:21:51 +0100 Subject: [PATCH 01/27] Make the controller checks strict: nothing names the placed-nowhere controller MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit controllerdeps refuses any manifest naming the controller's seat, states or buckets, the lease and the entries once kept to its write among them, and any module file naming one of its buckets (ADR 0590 §5). The words check refuses a controller address in any text a module shows. The handacts check and noplacement's list of assignments readers are folded into it (issue 1126 B10). Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- checks/controllerdeps/controllerdeps.go | 133 +++++++++++++++--- checks/controllerdeps/controllerdeps_test.go | 49 ++++--- checks/controllerdeps/go.mod | 13 +- checks/controllerdeps/go.sum | 16 --- checks/controllerdeps/reads-outside | 2 +- checks/handacts/fallbacks | 5 - checks/handacts/go.mod | 3 - checks/handacts/main.go | 109 -------------- checks/handacts/main_test.go | 59 -------- checks/handacts/reads-outside | 3 - checks/noplacement/assignments-readers | 4 - checks/noplacement/go.mod | 4 - checks/noplacement/main.go | 73 +--------- checks/noplacement/main_test.go | 33 ----- checks/words/main.go | 38 ++++- checks/words/main_test.go | 22 +++ modules/mesh-hand-acts/README.md | 4 +- .../mesh-hand-acts/cmd/mesh-hand-acts/acts.go | 4 +- .../mesh-hand-acts/cmd/mesh-hand-acts/copy.go | 2 +- .../cmd/mesh-hand-acts/tools.go | 2 +- modules/nats/cmd/nats-tools/expiry.go | 4 +- 21 files changed, 215 insertions(+), 367 deletions(-) delete mode 100644 checks/controllerdeps/go.sum delete mode 100644 checks/handacts/fallbacks delete mode 100644 checks/handacts/go.mod delete mode 100644 checks/handacts/main.go delete mode 100644 checks/handacts/main_test.go delete mode 100644 checks/handacts/reads-outside delete mode 100644 checks/noplacement/assignments-readers diff --git a/checks/controllerdeps/controllerdeps.go b/checks/controllerdeps/controllerdeps.go index 9c9177f3..0d784fb0 100644 --- a/checks/controllerdeps/controllerdeps.go +++ b/checks/controllerdeps/controllerdeps.go @@ -1,39 +1,138 @@ -// Package controllerdeps is the catalogue's side of the lease write's manifest test (novox/hq ADR 0571 §13, ADR 0582 -// clause 2, issue 774): no module of this tree reads, invokes, consumes, waits on or uses the controller beyond what the -// named list of mesh-sdk's catalogue.KeepList keeps to the write itself, and the lease key, which names the lease's holder -// whoever that is. It decodes every manifest under root/modules and judges them with mesh-sdk's ManifestRefusals, the -// judge the grants part's grants_lease_check and the other two repositories' tests run, so the rule is said once. +// Package controllerdeps is the catalogue's dependence check on the controller (novox/hq ADR 0590 §5, issue 1126): the +// controller is not placed, so no module of this tree reads, requires, invokes, consumes, waits on, uses or otherwise +// names it. Nothing is kept: not the lease, not the entries once kept to its write (ADR 0571 §13, superseded with ADR +// 0582). A later decision that places a controller again must first lift this check. +// +// It refuses, over the tree at root: +// +// - a directory modules/mesh-controller: the controller is no module of the catalogue; +// - a manifest string naming the controller's seat, a state, verb or event of it, or one of its buckets +// (`mesh-controller.`, `seat:mesh-controller.`, `mesh-controller_`), anywhere in the manifest; +// - a manifest string that is the bare module name `mesh-controller` outside the module's own `config`, where a value +// is the module's data (an issue owner naming the controller's repository is no dependency), not an address; +// - a line of any module's file naming one of the controller's buckets (`mesh-controller_`): its buckets are removed +// after the controller's end (ADR 0590 §6), so a reader of one reads nothing. A test (`_test.go`, `.test.ts`) reads +// no live bucket, its names are its own data, and a `testdata` directory is a copy of text from elsewhere (a design, +// a backlog): both are skipped. +// +// The rule is said once, here, for the catalogue: decoding stays the manifests check's (a manifest that is no JSON is +// an error here, never judged). package controllerdeps import ( + "bufio" + "encoding/json" "fmt" + "io/fs" "os" "path/filepath" + "regexp" "sort" - - "git.novox.be/novox/mesh-sdk/go/catalogue" + "strings" ) -// Refusals is each reason the lease write's check gives over the manifests under root/modules in one phase -// (catalogue.PhaseBefore or catalogue.PhaseWrite), none when it passes. A module.json that does not decode is an error: -// the manifests check says which, and nothing here is judged on a tree it cannot read. -func Refusals(root, phase string) ([]string, error) { +// Module is the controller's module name, and Bucket the prefix every bucket of its carries. +const ( + Module = "mesh-controller" + Bucket = Module + "_" +) + +// address is a string naming the controller's seat, one of its states, verbs or events, or one of its buckets. +var address = regexp.MustCompile(`(^|[^A-Za-z0-9_-])(seat:)?mesh-controller([._][A-Za-z0-9])`) + +// Refusals is each reason the check gives over the tree at root, sorted; none when it passes. +func Refusals(root string) ([]string, error) { + var out []string + if _, err := os.Lstat(filepath.Join(root, "modules", Module)); err == nil { + out = append(out, Module+": the controller is no module of the catalogue: it is not placed and nothing may depend on it (novox/hq ADR 0590 §5)") + } files, err := filepath.Glob(filepath.Join(root, "modules", "*", "module.json")) if err != nil { return nil, err } - sort.Strings(files) - manifests := map[string]catalogue.Manifest{} for _, f := range files { raw, err := os.ReadFile(f) if err != nil { return nil, err } - m, err := catalogue.Decode(raw) - if err != nil { + var doc any + if err := json.Unmarshal(raw, &doc); err != nil { return nil, fmt.Errorf("%s: %w", f, err) } - manifests[m.Module] = m + module := filepath.Base(filepath.Dir(f)) + for _, s := range names(doc, false, nil) { + out = append(out, fmt.Sprintf("%s: names %q: the controller is not placed, so no manifest reads, requires, invokes, "+ + "consumes, waits on or uses it; name the seat that holds the job now (novox/hq ADR 0590 §5)", module, s)) + } } - return catalogue.ManifestRefusals(manifests, phase), nil + buckets, err := bucketLines(root) + if err != nil { + return nil, err + } + out = append(out, buckets...) + sort.Strings(out) + return out, nil +} + +// names collects the strings of a decoded manifest that name the controller; inConfig is under the module's `config`. +func names(v any, inConfig bool, into []string) []string { + switch v := v.(type) { + case string: + if address.MatchString(v) || (!inConfig && strings.TrimSpace(v) == Module) { + into = append(into, v) + } + case []any: + for _, e := range v { + into = names(e, inConfig, into) + } + case map[string]any: + keys := make([]string, 0, len(v)) + for k := range v { + keys = append(keys, k) + } + sort.Strings(keys) + for _, k := range keys { + into = names(v[k], inConfig || k == "config", into) + } + } + return into +} + +// bucketLines is every line of a module's file, outside tests and testdata, that names one of the controller's buckets. +func bucketLines(root string) ([]string, error) { + var out []string + modules := filepath.Join(root, "modules") + err := filepath.WalkDir(modules, func(path string, d fs.DirEntry, err error) error { + if err != nil { + if os.IsNotExist(err) && path == modules { + return nil + } + return err + } + if d.IsDir() { + if n := d.Name(); n == "testdata" || n == "node_modules" || n == ".git" { + return filepath.SkipDir + } + return nil + } + if !d.Type().IsRegular() || strings.HasSuffix(d.Name(), "_test.go") || strings.HasSuffix(d.Name(), ".test.ts") { + return nil + } + f, err := os.Open(path) + if err != nil { + return err + } + defer f.Close() + sc := bufio.NewScanner(f) + sc.Buffer(make([]byte, 0, 64*1024), 16*1024*1024) + rel, _ := filepath.Rel(root, path) + for n := 1; sc.Scan(); n++ { + if strings.Contains(sc.Text(), Bucket) { + out = append(out, fmt.Sprintf("%s:%d: names the controller's bucket (%s…): its buckets are removed after its "+ + "end (novox/hq ADR 0590 §6); read the seat that holds the job now", filepath.ToSlash(rel), n, Bucket)) + } + } + return sc.Err() + }) + return out, err } diff --git a/checks/controllerdeps/controllerdeps_test.go b/checks/controllerdeps/controllerdeps_test.go index 5f5cd28e..9a2e221a 100644 --- a/checks/controllerdeps/controllerdeps_test.go +++ b/checks/controllerdeps/controllerdeps_test.go @@ -5,46 +5,51 @@ import ( "path/filepath" "strings" "testing" - - "git.novox.be/novox/mesh-sdk/go/catalogue" ) -// 774/S13/AC1: every manifest of the catalogue at this head, at the phase of the lease write's own delivery, reads, -// invokes and consumes nothing of the controller beyond the lease and the entries kept to the write. -func TestNoManifestDependsOnTheControllerBeyondTheLeaseAndTheEntriesKeptToTheWrite(t *testing.T) { - got, err := Refusals("../..", catalogue.PhaseWrite) +// ADR 0590 §5 (issue 1126 B10): no manifest of the catalogue at this head reads, invokes, consumes, waits on, uses or +// otherwise names the controller's seat, states or buckets, and no module's code names a bucket of the controller's. +func TestNothingInTheCatalogueNamesTheController(t *testing.T) { + got, err := Refusals("../..") if err != nil { t.Fatal(err) } - if len(got) > 0 { - t.Errorf("the catalogue still declares on the controller (novox/hq ADR 0571 §13):\n%s", strings.Join(got, "\n")) + for _, r := range got { + t.Error(r) } } -// The check refuses what it must and lets the lease and the kept entries through, on a tree of its own. -func TestRefusalsJudgeATreeByPhase(t *testing.T) { +// The check refuses every name of the controller, the lease and the entries once kept to its write among them, on a +// tree of its own; a repository named mesh-controller (an issue's owner) and a word in prose are no dependency. +func TestRefusalsJudgeATree(t *testing.T) { for _, row := range []struct { - name, phase string - manifests map[string]string - want string // empty: passes + name string + files map[string]string + want string // empty: passes }{ - {"the lease is no dependency", catalogue.PhaseWrite, map[string]string{"a": `{"module":"a","reads":["mesh-controller.lease"]}`}, ""}, - {"a read of the controller's states", catalogue.PhaseWrite, map[string]string{"a": `{"module":"a","reads":["mesh-controller.conditions"]}`}, "a declares read mesh-controller.conditions"}, - {"a kept entry passes before the delivery", catalogue.PhaseBefore, map[string]string{"artifact-store-tools": `{"module":"artifact-store-tools","invokes":["seat:mesh-controller.collect"]}`}, ""}, - {"a kept-to-the-write entry passes at the write", catalogue.PhaseWrite, map[string]string{"artifact-store-tools": `{"module":"artifact-store-tools","invokes":["seat:mesh-controller.collect"]}`}, ""}, + {"the lease is refused like any read", map[string]string{"modules/a/module.json": `{"module":"a","reads":["mesh-controller.lease"]}`}, `a: names "mesh-controller.lease"`}, + {"a verb once kept to the write", map[string]string{"modules/b/module.json": `{"module":"b","invokes":["seat:mesh-controller.collect"]}`}, `b: names "seat:mesh-controller.collect"`}, + {"an event consumed", map[string]string{"modules/c/module.json": `{"module":"c","consumes":[{"event":"mesh-controller.artifacts-gone"}]}`}, "mesh-controller.artifacts-gone"}, + {"a requirement", map[string]string{"modules/d/module.json": `{"module":"d","requires":[{"name":"x","from":"mesh-controller"}]}`}, `d: names "mesh-controller"`}, + {"the controller's own module", map[string]string{"modules/mesh-controller/module.json": `{"module":"mesh-controller"}`}, "mesh-controller: the controller is no module of the catalogue"}, + {"a bucket in code", map[string]string{"modules/e/cmd/e/main.go": "package main\nconst b = \"mesh-controller_assignments\"\n"}, "modules/e/cmd/e/main.go:2: names the controller's bucket"}, + {"a bucket in a test is its data", map[string]string{"modules/e/cmd/e/main_test.go": "package main\n// mesh-controller_lease\n"}, ""}, + {"a fixture copied from elsewhere", map[string]string{"modules/e/cmd/e/testdata/x.md": "mesh-controller_rollouts\n"}, ""}, + {"an owner and prose pass", map[string]string{"modules/f/module.json": `{"module":"f","config":{"owners":{"default":["mesh-controller","mesh-controller modules/route-proxy"]}},"why":"the mesh-controller module is gone"}`}, ""}, + {"the seat's successors pass", map[string]string{"modules/g/module.json": `{"module":"g","reads":["mesh-placement.placement"],"invokes":["seat:mesh-hand-acts.hand-act"]}`}, ""}, } { t.Run(row.name, func(t *testing.T) { root := t.TempDir() - for module, text := range row.manifests { - dir := filepath.Join(root, "modules", module) - if err := os.MkdirAll(dir, 0o755); err != nil { + for path, text := range row.files { + p := filepath.Join(root, path) + if err := os.MkdirAll(filepath.Dir(p), 0o755); err != nil { t.Fatal(err) } - if err := os.WriteFile(filepath.Join(dir, "module.json"), []byte(text), 0o644); err != nil { + if err := os.WriteFile(p, []byte(text), 0o644); err != nil { t.Fatal(err) } } - got, err := Refusals(root, row.phase) + got, err := Refusals(root) if err != nil { t.Fatal(err) } diff --git a/checks/controllerdeps/go.mod b/checks/controllerdeps/go.mod index b4782dc7..4c0306fa 100644 --- a/checks/controllerdeps/go.mod +++ b/checks/controllerdeps/go.mod @@ -1,14 +1,3 @@ module checks/controllerdeps -go 1.26.0 - -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c - -require ( - github.com/klauspost/compress v1.20.0 // indirect - github.com/nats-io/nats.go v1.54.0 // indirect - github.com/nats-io/nkeys v0.4.16 // indirect - github.com/nats-io/nuid v1.0.1 // indirect - golang.org/x/crypto v0.57.0 // indirect - golang.org/x/sys v0.48.0 // indirect -) +go 1.22 diff --git a/checks/controllerdeps/go.sum b/checks/controllerdeps/go.sum deleted file mode 100644 index 733cedc9..00000000 --- a/checks/controllerdeps/go.sum +++ /dev/null @@ -1,16 +0,0 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c h1:/YCxh+NYfqry3PxZYY1nQXaccupobxpsFt8c9BYuGBg= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= -github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= -github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= -github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= -github.com/nats-io/nats.go v1.54.0/go.mod h1:y+DZoD1oBOYfZTU681eTUiUjI0vbqYGixNVFHcjHJ0k= -github.com/nats-io/nkeys v0.4.16 h1:rd5oAuLOb8mnAycB0xleuEBNS1pVVnN0fv/FF34Eypg= -github.com/nats-io/nkeys v0.4.16/go.mod h1:llLgWoI0o4z/Q57q2R1kHfmocyhGV6VG/U18Glg1Afs= -github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -golang.org/x/crypto v0.57.0 h1:3ZVCjf8Ggz7zneR/EHRVx68Ctf+2pmIMP2UFhh9cC6M= -golang.org/x/crypto v0.57.0/go.mod h1:Fdz0i5U6CoizGwLda9DttjSk6qlZo25zYNtR+ycvuZA= -golang.org/x/sys v0.48.0 h1:bbX/i/6MgT9BVLM9RT1thmxL04yeTAhbEz4SyadbXoo= -golang.org/x/sys v0.48.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og= diff --git a/checks/controllerdeps/reads-outside b/checks/controllerdeps/reads-outside index efc1a11c..894424ad 100644 --- a/checks/controllerdeps/reads-outside +++ b/checks/controllerdeps/reads-outside @@ -1,3 +1,3 @@ # What these tests read outside their package, as paths from the repository's root (issue 1936). -# every module's directory (its manifest), decoded and judged for what it still declares on the controller. +# every module's directory: its manifest, for a name of the controller, and its files, for one of the controller's buckets. modules diff --git a/checks/handacts/fallbacks b/checks/handacts/fallbacks deleted file mode 100644 index 238233b7..00000000 --- a/checks/handacts/fallbacks +++ /dev/null @@ -1,5 +0,0 @@ -# The calls of the controller's hand-act log a manifest of this catalogue may still invoke, each ` `: -# the fallback of a recorder (mesh-sdk handacts.Recorder) while the seat mesh-hand-acts has no holder that answers, until -# the controller's lease is written to a holder that is no controller. The check of this directory (handacts) refuses any -# other, and an entry whose module no longer invokes it: the list only shrinks, and it is empty before the lease write -# (novox/hq ADR 0565 §11; issue 1953, issue 774). It is empty: no manifest invokes the controller's log (issue 1953, 1955). diff --git a/checks/handacts/go.mod b/checks/handacts/go.mod deleted file mode 100644 index 29e4c52b..00000000 --- a/checks/handacts/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module git.novox.be/novox/mesh-catalog/checks/handacts - -go 1.22 diff --git a/checks/handacts/main.go b/checks/handacts/main.go deleted file mode 100644 index 1a222d60..00000000 --- a/checks/handacts/main.go +++ /dev/null @@ -1,109 +0,0 @@ -// Command handacts refuses a manifest that records into the controller's hand-act log (novox/hq ADR 0565 §11): every -// recorder records through the seat mesh-hand-acts from its delivery, so no manifest invokes -// `seat:mesh-controller.hand-act`, `.warranted` or `.drill`. The recorders' fallbacks to the controller's log while the -// seat has no holder are named in checks/handacts/fallbacks, each module and verb with why; that list only shrinks, and -// an entry whose module no longer invokes the verb is refused too. -// -// go run . -// -// Exits 1 on a finding. -package main - -import ( - "encoding/json" - "fmt" - "os" - "path/filepath" - "sort" - "strings" -) - -// Verbs are the controller's hand-act verbs, as a manifest invokes them, and Allowed the list of named fallbacks. -var Verbs = []string{"hand-act", "warranted", "drill"} - -const ( - invokePrefix = "seat:mesh-controller." - Allowed = "checks/handacts/fallbacks" -) - -// Findings is every refusal in the catalog at root, sorted. -func Findings(root string) ([]string, error) { - allowed := map[string]bool{} - raw, err := os.ReadFile(filepath.Join(root, Allowed)) - if err != nil && !os.IsNotExist(err) { - return nil, err - } - for _, line := range strings.Split(string(raw), "\n") { - if f := strings.Fields(line); len(f) >= 3 && !strings.HasPrefix(f[0], "#") { - allowed[f[0]+" "+f[1]] = true - } else if len(f) > 0 && !strings.HasPrefix(f[0], "#") { - return nil, fmt.Errorf("%s: %q is not ` `", Allowed, line) - } - } - manifests, err := filepath.Glob(filepath.Join(root, "modules", "*", "module.json")) - if err != nil { - return nil, err - } - var out []string - invoked := map[string]bool{} - for _, path := range manifests { - raw, err := os.ReadFile(path) - if err != nil { - return nil, err - } - var m struct { - Module string `json:"module"` - Invokes []string `json:"invokes"` - } - if json.Unmarshal(raw, &m) != nil || m.Module == "mesh-controller" { - continue - } - for _, inv := range m.Invokes { - verb, ok := strings.CutPrefix(strings.TrimSpace(inv), invokePrefix) - if !ok || !contains(Verbs, verb) { - continue - } - invoked[m.Module+" "+verb] = true - if !allowed[m.Module+" "+verb] { - out = append(out, fmt.Sprintf("%s invokes %s%s: record through seat:mesh-hand-acts.%s (novox/hq ADR 0565 §11), "+ - "or name the fallback in %s", m.Module, invokePrefix, verb, verb, Allowed)) - } - } - } - for entry := range allowed { - if !invoked[entry] { - out = append(out, fmt.Sprintf("%s names %q, which is no longer invoked: take it off the list, which only shrinks", - Allowed, entry)) - } - } - sort.Strings(out) - return out, nil -} - -func contains(list []string, s string) bool { - for _, x := range list { - if x == s { - return true - } - } - return false -} - -func main() { - if len(os.Args) != 2 { - fmt.Fprintln(os.Stderr, "usage: handacts ") - os.Exit(2) - } - found, err := Findings(os.Args[1]) - if err != nil { - fmt.Println(err) - os.Exit(1) - } - for _, f := range found { - fmt.Println(f) - } - if len(found) > 0 { - os.Exit(1) - } - fmt.Println("no manifest records into the controller's hand-act log but the fallbacks named") -} diff --git a/checks/handacts/main_test.go b/checks/handacts/main_test.go deleted file mode 100644 index 61e197e6..00000000 --- a/checks/handacts/main_test.go +++ /dev/null @@ -1,59 +0,0 @@ -package main - -import ( - "os" - "path/filepath" - "strings" - "testing" -) - -// No manifest invokes the controller's hand-act verbs but a named fallback; a named fallback no longer invoked is -// refused (novox/hq ADR 0565 §11's catalog test). -func TestFindings(t *testing.T) { - for _, row := range []struct { - name string - files map[string]string - want string // empty: clean - }{ - {"clean", map[string]string{"modules/a/module.json": `{"module":"a","invokes":["seat:mesh-hand-acts.hand-act"]}`}, ""}, - {"an unnamed call", map[string]string{"modules/a/module.json": `{"module":"a","invokes":["seat:mesh-controller.warranted"]}`}, - "a invokes seat:mesh-controller.warranted"}, - {"a named fallback, and the controller's own", map[string]string{ - "modules/a/module.json": `{"module":"a","invokes":["seat:mesh-controller.drill"]}`, - "modules/mesh-controller/module.json": `{"module":"mesh-controller","invokes":["seat:mesh-controller.hand-act"]}`, - Allowed: "# why\na drill fallback until the lease write\n"}, ""}, - {"a fallback no longer invoked", map[string]string{Allowed: "gone hand-act fallback\n"}, `names "gone hand-act"`}, - {"another verb of the controller", map[string]string{"modules/a/module.json": `{"module":"a","invokes":["seat:mesh-controller.conditions"]}`}, ""}, - } { - t.Run(row.name, func(t *testing.T) { - root := t.TempDir() - for path, text := range row.files { - p := filepath.Join(root, path) - if err := os.MkdirAll(filepath.Dir(p), 0o755); err != nil { - t.Fatal(err) - } - if err := os.WriteFile(p, []byte(text), 0o644); err != nil { - t.Fatal(err) - } - } - got, err := Findings(root) - if err != nil { - t.Fatal(err) - } - if all := strings.Join(got, "\n"); (row.want == "") != (all == "") || !strings.Contains(all, row.want) { - t.Fatalf("findings = %q, want one containing %q", all, row.want) - } - }) - } -} - -// The run of this check over the real tree. -func TestTheCatalogRecordsOnlyThroughTheSeat(t *testing.T) { - got, err := Findings(filepath.Join("..", "..")) - if err != nil { - t.Fatal(err) - } - for _, f := range got { - t.Error(f) - } -} diff --git a/checks/handacts/reads-outside b/checks/handacts/reads-outside deleted file mode 100644 index 61f9814a..00000000 --- a/checks/handacts/reads-outside +++ /dev/null @@ -1,3 +0,0 @@ -# What these tests read outside their package, as paths from the repository's root (issue 1936). -# every manifest, for what it invokes. -modules/*/module.json diff --git a/checks/noplacement/assignments-readers b/checks/noplacement/assignments-readers deleted file mode 100644 index 64985d46..00000000 --- a/checks/noplacement/assignments-readers +++ /dev/null @@ -1,4 +0,0 @@ -# The modules of this catalogue that still read the controller's assignments (mesh-controller.assignments), each with -# why. The check of this directory (noplacement) refuses any other module that reads them, and an entry here whose module no longer -# does: the list only shrinks, and it is empty before the controller's lease is written to a holder that is no -# controller (novox/hq ADR 0549 §3, §6; issue 774). diff --git a/checks/noplacement/go.mod b/checks/noplacement/go.mod index 782a236b..a09ac5ec 100644 --- a/checks/noplacement/go.mod +++ b/checks/noplacement/go.mod @@ -1,7 +1,3 @@ module git.novox.be/novox/mesh-catalog/checks/noplacement go 1.22 - -require git.novox.be/novox/mesh-catalog/checks/trunk v0.0.0 - -replace git.novox.be/novox/mesh-catalog/checks/trunk => ../trunk diff --git a/checks/noplacement/main.go b/checks/noplacement/main.go index cd145e32..1bcce199 100644 --- a/checks/noplacement/main.go +++ b/checks/noplacement/main.go @@ -10,11 +10,8 @@ // 3. a manifest naming a state, stream, event or bucket of the indexer's placement (`mesh-delivery-indexer.placement…` // or `mesh-delivery-indexer_placement…`) in any string value, such as `reads`; // -// 4. a manifest, other than mesh-controller's, that reads the controller's assignments (`mesh-controller.assignments`): -// every reader takes placement from the seat mesh-placement (novox/hq ADR 0549 §3, ADR 0567), and the lease write is -// refused while one still reads them (ADR 0549 §6; issue 774). The modules that still read them for what the -// placement does not carry are named in checks/noplacement/assignments-readers, each with why; that list only -// shrinks: an entry whose module no longer reads them is refused too. +// The controller's assignments, which item 4 once listed readers of, are refused with every other name of the +// controller by checks/controllerdeps (novox/hq ADR 0590 §5). // // go run . // @@ -61,74 +58,10 @@ func Findings(root string) ([]string, error) { out = append(out, fmt.Sprintf("%s: names %q, which the indexer no longer keeps; placement is the seat mesh-placement's (novox/hq ADR 0567 §12)", module, s)) } } - readers, err := assignmentsReaders(root) - if err != nil { - return nil, err - } - out = append(out, readers...) sort.Strings(out) return out, nil } -// AssignmentsRead is the controller's assignments as a manifest reads them, and Allowed the file, relative to the -// catalogue's root, that names the modules still reading them: ` ` per line, `#` a comment. -const ( - AssignmentsRead = "mesh-controller.assignments" - Allowed = "checks/noplacement/assignments-readers" -) - -// assignmentsReaders is every finding on the reads of the controller's assignments: a module other than the controller -// reading them that Allowed does not name, and a module Allowed names that no longer reads them (issue 774). -func assignmentsReaders(root string) ([]string, error) { - allowed := map[string]bool{} - raw, err := os.ReadFile(filepath.Join(root, Allowed)) - if err != nil && !os.IsNotExist(err) { - return nil, err - } - for _, line := range strings.Split(string(raw), "\n") { - if f := strings.Fields(line); len(f) > 0 && !strings.HasPrefix(f[0], "#") { - allowed[f[0]] = true - } - } - manifests, err := filepath.Glob(filepath.Join(root, "modules", "*", "module.json")) - if err != nil { - return nil, err - } - var found []string - reads := map[string]bool{} - for _, path := range manifests { - raw, err := os.ReadFile(path) - if err != nil { - return nil, err - } - var m struct { - Module string `json:"module"` - Reads []string `json:"reads"` - } - if json.Unmarshal(raw, &m) != nil || m.Module == "mesh-controller" { - continue // a manifest that does not read is the manifest checks' to refuse - } - for _, r := range m.Reads { - if strings.TrimSpace(r) != AssignmentsRead { - continue - } - reads[m.Module] = true - if !allowed[m.Module] { - found = append(found, fmt.Sprintf("%s reads %s: read where modules run from mesh-delivery-assigner.placement, "+ - "the seat mesh-placement's (novox/hq ADR 0549 §3, ADR 0567); the lease write is refused while a module reads "+ - "the assignments (ADR 0549 §6)", m.Module, AssignmentsRead)) - } - } - } - for module := range allowed { - if !reads[module] { - found = append(found, fmt.Sprintf("%s names %s, which no longer reads %s: take it off the list, which only shrinks", - Allowed, module, AssignmentsRead)) - } - } - return found, nil -} - // named collects the strings of a decoded manifest that start with one of the Prefixes. func named(v any, into []string) []string { switch v := v.(type) { @@ -166,5 +99,5 @@ func main() { if len(found) > 0 { os.Exit(1) } - fmt.Println("no placement directory, no manifest reads the indexer's placement, and only the modules listed read the controller's assignments") + fmt.Println("no placement directory, and no manifest reads the indexer's placement") } diff --git a/checks/noplacement/main_test.go b/checks/noplacement/main_test.go index efa884dc..0db98f06 100644 --- a/checks/noplacement/main_test.go +++ b/checks/noplacement/main_test.go @@ -5,8 +5,6 @@ import ( "path/filepath" "strings" "testing" - - "git.novox.be/novox/mesh-catalog/checks/trunk" ) func TestFindingsRefuseWhatThePlacementPathLeft(t *testing.T) { @@ -21,12 +19,6 @@ func TestFindingsRefuseWhatThePlacementPathLeft(t *testing.T) { {"a read of the indexer's placement", map[string]string{"modules/a/module.json": `{"module":"a","reads":["mesh-delivery-indexer.placement"]}`}, `a: names "mesh-delivery-indexer.placement"`}, {"a read of its candidates", map[string]string{"modules/b/module.json": `{"module":"b","reads":["mesh-delivery-indexer.placement-candidates"]}`}, "placement-candidates"}, {"its event", map[string]string{"modules/c/module.json": `{"module":"c","on":[{"event":"mesh-delivery-indexer.placement-changed"}]}`}, "placement-changed"}, - // Issue 774 (ADR 0549 §3, §6): a reader of the controller's assignments is refused unless the list names it, the - // controller's own manifest is not judged, and a name on the list whose module no longer reads them is refused. - {"an unlisted reader of the assignments", map[string]string{"modules/r/module.json": `{"module":"r","reads":["mesh-controller.assignments"]}`}, "r reads mesh-controller.assignments"}, - {"a listed reader and the controller", map[string]string{"modules/l/module.json": `{"module":"l","reads":["mesh-controller.assignments"]}`, - "modules/mesh-controller/module.json": `{"module":"mesh-controller","reads":["mesh-controller.assignments"]}`, Allowed: "# why\nl its plan\n"}, ""}, - {"a listed module that reads them no more", map[string]string{Allowed: "gone no longer reads\n"}, "names gone, which no longer reads"}, {"the seat's own state is allowed", map[string]string{"modules/d/module.json": `{"module":"d","reads":["mesh-placement.placement"]}`}, ""}, } { t.Run(row.name, func(t *testing.T) { @@ -60,29 +52,4 @@ func TestTheCatalogueHoldsNoPlacementOfTheRepositoryPath(t *testing.T) { for _, f := range got { t.Error(f) } - // Issue 774 (ADR 0549 §3, §6; the comparison of novox/hq ADR 0529 clause 2): the list of modules still reading the - // controller's assignments gains none the trunk's copy at the merge base does not hold. Its first copy gains nothing. - path, ok := trunk.Copy(t, Allowed) - if !ok { - return - } - names := func(path string) map[string]bool { - raw, err := os.ReadFile(path) - if err != nil { - t.Fatal(err) - } - out := map[string]bool{} - for _, line := range strings.Split(string(raw), "\n") { - if f := strings.Fields(line); len(f) > 0 && !strings.HasPrefix(f[0], "#") { - out[f[0]] = true - } - } - return out - } - base := names(path) - for module := range names(filepath.Join("..", "..", Allowed)) { - if !base[module] { - t.Errorf("%s gains %s, which the trunk's copy does not hold: the list only shrinks", Allowed, module) - } - } } diff --git a/checks/words/main.go b/checks/words/main.go index 8f9b8893..0bab4308 100644 --- a/checks/words/main.go +++ b/checks/words/main.go @@ -4,7 +4,9 @@ // own code that is not a test (a tool's description, the notes and errors it answers with) and every // description in its manifest. Comments are not read: an agent never sees them. And no daemon's line // (novox/hq ADR 0272, lines.go): the copy in retired-lines, the lines a person would otherwise be told to -// type of the node-engine's or the controller's binary, where the operator's command is `nox`. +// type of the node-engine's or the controller's binary, where the operator's command is `nox`. And no address of the +// controller (novox/hq ADR 0590 §5): it is not placed, so a text naming one of its verbs, states or buckets sends its +// reader nowhere. // // A word is matched whole and in any case, a space in it matching any run of white space, and its plural // (`s` or `es` on its last part) is matched as the word. A vendor word is @@ -89,11 +91,45 @@ func run(root string) int { len(findings)) return 1 } + // And no address of the controller (novox/hq ADR 0590 §5): it is not placed, so a text that sends an agent or the + // operator to one of its verbs, states or buckets sends them nowhere. + if findings := checkAddresses(texts); len(findings) > 0 { + for _, f := range findings { + fmt.Println(f) + } + fmt.Printf("words: %d address(es) of the controller in what a module shows — name the seat that holds the job now (novox/hq ADR 0590)\n", + len(findings)) + return 1 + } fmt.Printf("words: %d retired words and %d daemons' lines, none in the %d strings of %d files\n", len(words), len(lines), len(texts), files) return 0 } +// controllerAddress is an address of the controller: its seat's verb or state (`mesh-controller.`, with or without +// `seat:`) or one of its buckets (`mesh-controller_`). The module's name in prose is no address. +var controllerAddress = regexp.MustCompile(`(^|[^A-Za-z0-9_-])(seat:)?mesh-controller[._][A-Za-z0-9<]`) + +// checkAddresses is every text that names an address of the controller (novox/hq ADR 0590 §5). +func checkAddresses(texts []text) []string { + var out []string + for _, t := range texts { + if !strings.Contains(t.s, "mesh-controller") { + continue + } + if m := controllerAddress.FindStringIndex(t.s); m != nil { + line := t.line + if line > 0 { + line += strings.Count(t.s[:m[0]], "\n") + } + out = append(out, fmt.Sprintf("%s:%d: names an address of the controller, which is not placed — in %q", t.file, line, + excerpt(t.s, m[0], m[1]))) + } + } + sort.Strings(out) + return out +} + // collect reads every text a module can show under root: the strings of its own code that is not a test, and every string of // its manifests. func collect(root string) ([]text, int, error) { diff --git a/checks/words/main_test.go b/checks/words/main_test.go index 79d8f64a..2f05f0ed 100644 --- a/checks/words/main_test.go +++ b/checks/words/main_test.go @@ -95,3 +95,25 @@ func TestTheCatalogueHoldsNoRetiredWordAndNoDaemonsLine(t *testing.T) { t.Fatalf("the check of the real catalogue exits %d (see what it printed above)", code) } } + +// ADR 0590 §5 (issue 1126 B10): no text a module shows names an address of the controller, which is not placed; prose +// naming it passes. +func TestCheckAddressesRefusesTheControllersAddresses(t *testing.T) { + for _, c := range []struct { + s string + want bool + }{ + {"push this machine (mesh-controller.push)", true}, + {"ask seat:mesh-controller.nodes", true}, + {"the bucket mesh-controller_assignments", true}, + {"`mesh-controller.`", true}, + {"the mesh-controller module is gone.", false}, + {"located in mesh-controller#246", false}, + {"ask mesh-placement.placement", false}, + } { + got := checkAddresses([]text{{file: "m/a.go", line: 1, s: c.s}}) + if (len(got) == 1) != c.want { + t.Errorf("checkAddresses(%q) = %q, want a finding: %v", c.s, got, c.want) + } + } +} diff --git a/modules/mesh-hand-acts/README.md b/modules/mesh-hand-acts/README.md index 3a13fdb4..50f37a9f 100644 --- a/modules/mesh-hand-acts/README.md +++ b/modules/mesh-hand-acts/README.md @@ -19,8 +19,8 @@ alone writes the log. `hand-act drill` for a drill, whose cause is always `drill`). Who did it is the caller the runtime proves. - `mesh-hand-acts.warranted`: asker and ask. Read from the router's own record of that ask (`messenger.asks`), never from the caller, and recorded once per ask; an ask still open, ended without a choice or another asker's is refused. -- `mesh-hand-acts.hand-acts`: both logs, this one and the controller's `mesh-controller_hand-acts` until its lease - ends, newest first, with the causes repaired by hand twice within a fortnight; `warrants=true` lists the warrants. +- `mesh-hand-acts.hand-acts`: this log (the controller's acts were copied into it once), newest first, with the + causes repaired by hand twice within a fortnight; `warrants=true` lists the warrants. - `hand_acts_copied` and `hand_acts_copy` (research 072 row 26): the controller's hand acts are copied once into this seat's log, each with its own key, time and author. It runs at the module's start while the old bucket is readable diff --git a/modules/mesh-hand-acts/cmd/mesh-hand-acts/acts.go b/modules/mesh-hand-acts/cmd/mesh-hand-acts/acts.go index 858faf67..289e97fe 100644 --- a/modules/mesh-hand-acts/cmd/mesh-hand-acts/acts.go +++ b/modules/mesh-hand-acts/cmd/mesh-hand-acts/acts.go @@ -9,8 +9,8 @@ package main // // **Who did it is the runtime's word, never the caller's**: `by` is the bus user the runtime proved. A warrant is the // router's word, never the caller's: `warranted` reads the router's own record of the asker's ask and records who -// chose, through which channel, with which proofs and which answer, once per ask. The controller's bucket -// `mesh-controller_hand-acts` is no longer read (issue 774, ADR 0571 §13): its acts were copied into this log once, and +// chose, through which channel, with which proofs and which answer, once per ask. The controller's hand-act +// bucket is no longer read (issue 774, ADR 0571 §13): its acts were copied into this log once, and // `hand-acts` answers from this log alone. import ( diff --git a/modules/mesh-hand-acts/cmd/mesh-hand-acts/copy.go b/modules/mesh-hand-acts/cmd/mesh-hand-acts/copy.go index 65a492c6..1705bde8 100644 --- a/modules/mesh-hand-acts/cmd/mesh-hand-acts/copy.go +++ b/modules/mesh-hand-acts/cmd/mesh-hand-acts/copy.go @@ -1,7 +1,7 @@ package main // The one-time copy of the controller's hand-act log into this seat's log is over (novox/hq research 072 row 26, ADR 0571 -// §13, issue 774). The controller kept every act of its life in its bucket `mesh-controller_hand-acts`; they were copied +// §13, issue 774). The controller kept every act of its life in a bucket of its own; they were copied // once into `acts`, each as the controller wrote it, by the earlier builds of this module, which left the marker // `controller-hand-acts` of the state `copied`. This module no longer reads that bucket, so the copy cannot run: the // tools `hand_acts_copy` and `hand_acts_copied` stay and say so, with the marker's figures when it exists. diff --git a/modules/mesh-hand-acts/cmd/mesh-hand-acts/tools.go b/modules/mesh-hand-acts/cmd/mesh-hand-acts/tools.go index 3944137d..38bf6400 100644 --- a/modules/mesh-hand-acts/cmd/mesh-hand-acts/tools.go +++ b/modules/mesh-hand-acts/cmd/mesh-hand-acts/tools.go @@ -79,7 +79,7 @@ func Tools(l *Log) []stdio.Tool { Input: obj(map[string]any{}), Run: func(map[string]any) (any, error) { return l.Copied() }}, {Name: CopyTool, - Description: "Answers that the copy is over (the controller's hand-act log, its bucket mesh-controller_hand-acts, " + + Description: "Answers that the copy is over (the controller's hand-act log " + "is no longer read, novox/hq ADR 0571 §13) with the marker of the copy that was made; copies nothing.", Input: obj(map[string]any{"top_up": str("\"true\": after the copy is done, append the acts written since")}), Run: func(a map[string]any) (any, error) { diff --git a/modules/nats/cmd/nats-tools/expiry.go b/modules/nats/cmd/nats-tools/expiry.go index 21756657..6c74ca4f 100644 --- a/modules/nats/cmd/nats-tools/expiry.go +++ b/modules/nats/cmd/nats-tools/expiry.go @@ -148,8 +148,8 @@ func SetBucketExpiry(ctx context.Context, bus Bus, said Said, record Recorded, a // expiryTools is the module's tool that sets a bucket's expiry. func expiryTools(bus Bus, said Said, record Recorded) []stdio.Tool { return []stdio.Tool{{Name: "nats_bucket_expiry", - Description: "Sets or restores the expiry of one key-value bucket: `max_age` is a duration such as 15s, or `none` to keep keys with no expiry (e.g. the lease bucket of mesh-controller at the lease write, back to 15s at the hand-back; novox/hq ADR 0582). Needs `why`, kept in the audit trail and recorded as a hand act through mesh-hand-acts (`warrant` names the operator's ask when there is one); refuses a name that is no key-value bucket; reads the expiry first and back after, and a bucket already at that expiry is answered as such. `dry_run` only reads. The bus refuses any bucket the module's credential is not granted.", - Input: map[string]any{"bucket": str("the bucket as nats_buckets lists it, e.g. mesh-controller_lease"), "max_age": str("a duration such as 15s, or none to remove the expiry"), + Description: "Sets or restores the expiry of one key-value bucket: `max_age` is a duration such as 15s, or `none` to keep keys with no expiry (e.g. a bucket whose keys must outlive their usual age while a person works on them, then back). Needs `why`, kept in the audit trail and recorded as a hand act through mesh-hand-acts (`warrant` names the operator's ask when there is one); refuses a name that is no key-value bucket; reads the expiry first and back after, and a bucket already at that expiry is answered as such. `dry_run` only reads. The bus refuses any bucket the module's credential is not granted.", + Input: map[string]any{"bucket": str("the bucket as nats_buckets lists it, e.g. mesh-config_resolved"), "max_age": str("a duration such as 15s, or none to remove the expiry"), "why": str("why it is changed, for the audit trail (required)"), "warrant": str("the operator's ask this follows, when there is one"), "dry_run": map[string]any{"type": "boolean", "description": "read the expiry, change nothing"}}, Run: func(a map[string]any) (any, error) { From 40c4fabff6a0a1da71531788d9571e2eb3656186 Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 11:23:41 +0100 Subject: [PATCH 02/27] Let the bus tools remove the controller's leftovers by one word MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The controller ended by its unassignment, so its consumers, streams and buckets may be removed as recorded hand acts (ADR 0590 §6). The nats tools' account declares controller-leftovers in place of the lease write's two words, and the removal test proves a consumer of EVENTS and a bucket's stream go while EVENTS and its other consumers stay (issue 1126 B5). Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- modules/nats/cmd/nats-tools/manifest_test.go | 24 ++++++---- modules/nats/cmd/nats-tools/removal.go | 10 ++--- modules/nats/cmd/nats-tools/removal_test.go | 46 ++++++++++++++++++-- modules/nats/module.json | 3 +- 4 files changed, 64 insertions(+), 19 deletions(-) diff --git a/modules/nats/cmd/nats-tools/manifest_test.go b/modules/nats/cmd/nats-tools/manifest_test.go index e6ad1b19..57b4a3fc 100644 --- a/modules/nats/cmd/nats-tools/manifest_test.go +++ b/modules/nats/cmd/nats-tools/manifest_test.go @@ -12,6 +12,13 @@ import ( // programs mounted read-only under /opt, unpacked by archive resources the container names under restart-on // (the node-engine does not look inside a mounted directory), and the container the same one it was. func TestTheBussManifestMountsItsProgramsIntoTheUpstreamImage(t *testing.T) { + type artifact struct { + Name, Kind, From, Language, System, Binary string + Env map[string]string + Bus struct { + Removes []string `json:"removes"` + } `json:"bus"` + } raw, err := os.ReadFile("../../module.json") if err != nil { t.Fatal(err) @@ -29,11 +36,8 @@ func TestTheBussManifestMountsItsProgramsIntoTheUpstreamImage(t *testing.T) { Emits []string `json:"emits"` Resources []map[string]any `json:"resources"` Build struct { - On any `json:"on"` - Artifacts []struct { - Name, Kind, From, Language, System, Binary string - Env map[string]string - } `json:"artifacts"` + On any `json:"on"` + Artifacts []artifact `json:"artifacts"` } `json:"build"` } if err := json.Unmarshal(raw, &m); err != nil { @@ -42,10 +46,7 @@ func TestTheBussManifestMountsItsProgramsIntoTheUpstreamImage(t *testing.T) { if m.Build.On != nil { t.Error("build.on is declared: nothing is built on a base image any more") } - artifacts := map[string]struct { - Name, Kind, From, Language, System, Binary string - Env map[string]string - }{} + artifacts := map[string]artifact{} for _, a := range m.Build.Artifacts { artifacts[a.Name] = a if a.Kind == "image" { @@ -123,6 +124,11 @@ func TestTheBussManifestMountsItsProgramsIntoTheUpstreamImage(t *testing.T) { } } for _, a := range m.Build.Artifacts { + // Issue 1126 B5 (ADR 0590 §6): the tools may remove the controller's leftovers, by the one word for them, and + // nothing else of the controller's by a word of its own. + if a.Name == "tools" && !slices.Equal(a.Bus.Removes, []string{"controller-leftovers"}) { + t.Errorf("the tools' bus removes %v: the controller's leftovers by their one word, controller-leftovers", a.Bus.Removes) + } if a.Name == "tools" && a.Env["NATS_TOOLS_CREDENTIAL"] != "${dir:tools-secret}/broker-nats-tools" { t.Errorf("the tools' credential is %q: the process nats-tools' own secret broker-nats-tools, under a word of the bundle's own (the runtime strips MESH_BROKER_FILE)", a.Env["NATS_TOOLS_CREDENTIAL"]) } diff --git a/modules/nats/cmd/nats-tools/removal.go b/modules/nats/cmd/nats-tools/removal.go index c4ac48de..fd64382c 100644 --- a/modules/nats/cmd/nats-tools/removal.go +++ b/modules/nats/cmd/nats-tools/removal.go @@ -9,7 +9,7 @@ package main // granted, so a wrong stream, consumer or bucket is refused by the server and said here, not trusted to the // arguments. Each tool refuses without `why`, reads what it would remove first (and says it, so a person can ask // with dry_run and then for real), removes, reads that it is gone, and says what it did as an event of the module -// (the audit trail: who asked is in the call the controller audits, why and what are in the event). +// (the audit trail: who asked is in the call the tool runner audits, why and what are in the event). import ( "context" @@ -246,8 +246,8 @@ type StreamRemoved struct { At time.Time `json:"at"` } -// RemoveStream removes one named stream whole, after reading it, and says so (the lease write's step for the stream -// ASSIGNMENTS, novox/hq research 072 row 33). **A stream already gone is no error**: the removal is the same act +// RemoveStream removes one named stream whole, after reading it, and says so (the controller's leftovers: its streams +// CONTROL and ASSIGNMENTS, its buckets' and object stores' streams; novox/hq ADR 0590 §6). **A stream already gone is no error**: the removal is the same act // however often it is asked, and says it found nothing. A stream with a consumer is refused, naming how many: a reader // is still attached, and that is for a person to look at before the stream goes. func RemoveStream(ctx context.Context, bus Bus, said Said, a map[string]any) (any, error) { @@ -321,11 +321,11 @@ func removalTools(bus Bus, said Said) []stdio.Tool { } return []stdio.Tool{ {Name: "nats_consumer_remove", - Description: "Removes (deletes) one named JetStream consumer of one stream, e.g. the consumer `controller` of DEAD_LETTER_NOTICES at the lease write (novox/hq ADR 0564 clause 5). Needs `why`, kept in the audit trail; refuses an unknown stream or consumer; reads the consumer first and answers what it was (filters, pending, unacknowledged); the stream and its other consumers are not touched. The bus refuses any consumer the module's credential is not granted.", + Description: "Removes (deletes) one named JetStream consumer of one stream, e.g. a consumer the controller left, such as `controller` of DEAD_LETTER_NOTICES or `controller-merges` of EVENTS (novox/hq ADR 0590 §6, recorded as a hand act under issue 1126). Needs `why`, kept in the audit trail; refuses an unknown stream or consumer; reads the consumer first and answers what it was (filters, pending, unacknowledged); the stream and its other consumers are not touched. The bus refuses any consumer the module's credential is not granted.", Input: map[string]any{"stream": str("the stream, e.g. DEAD_LETTER_NOTICES"), "consumer": str("the consumer's name, e.g. controller"), "why": str("why it is removed, for the audit trail (required)")}, Run: run(RemoveConsumer)}, {Name: "nats_stream_remove", - Description: "Removes (deletes) one named JetStream stream whole, e.g. ASSIGNMENTS at the lease write, beside the consumer of DEAD_LETTER_NOTICES (novox/hq research 072 row 33). Needs `why`, kept in the audit trail; reads the stream first and answers its messages, bytes and consumers; refuses a stream that still has a consumer; a stream already gone is answered as such and is no error, so asking again is safe. `dry_run` only reads. The bus refuses any stream the module's credential is not granted.", + Description: "Removes (deletes) one named JetStream stream whole, e.g. a stream the controller left: CONTROL, ASSIGNMENTS, one of its buckets as KV_ or a node's declaration files as OBJ_declaration-files- (novox/hq ADR 0590 §6; a bucket's whole removal is this tool's, never nats_bucket_remove's). Needs `why`, kept in the audit trail; reads the stream first and answers its messages, bytes and consumers; refuses a stream that still has a consumer; a stream already gone is answered as such and is no error, so asking again is safe. `dry_run` only reads. The bus refuses any stream the module's credential is not granted.", Input: map[string]any{"stream": str("the stream, e.g. ASSIGNMENTS"), "why": str("why it is removed, for the audit trail (required)"), "dry_run": map[string]any{"type": "boolean", "description": "read the stream, remove nothing"}}, Run: run(RemoveStream)}, {Name: "nats_bucket_remove", diff --git a/modules/nats/cmd/nats-tools/removal_test.go b/modules/nats/cmd/nats-tools/removal_test.go index eb81522a..9fa7008b 100644 --- a/modules/nats/cmd/nats-tools/removal_test.go +++ b/modules/nats/cmd/nats-tools/removal_test.go @@ -17,9 +17,11 @@ import ( "github.com/nats-io/nats.go/jetstream" ) -// The two tools that change the bus, against a server shaped like the mesh's, on the credential the module's +// The tools that change the bus, against a server shaped like the mesh's, on the credential the module's // grant proposal gives them and nothing wider (issue 1952 N2, N3): the bus itself refuses what the grant leaves out, -// so this is also the proof that the proposed grant is enough and no wider than it needs to be. +// so this is also the proof that the proposed grant is enough and no wider than it needs to be. Issue 1126 B5 (ADR 0590 +// §6): the controller's leftovers go the same way, a consumer of EVENTS and a bucket's stream among them, while EVENTS +// and its other consumers stay. func TestTheRemovalToolsChangeOnlyWhatTheyAreAskedAndTheGrantAllows(t *testing.T) { dir := t.TempDir() conf := filepath.Join(dir, "nats.conf") @@ -33,6 +35,10 @@ accounts { MESH { jetstream: enabled, users: [ "$JS.API.CONSUMER.DELETE.DEAD_LETTER_NOTICES.controller", "$JS.API.STREAM.INFO.ASSIGNMENTS", "$JS.API.STREAM.DELETE.ASSIGNMENTS", + "$JS.API.CONSUMER.INFO.EVENTS.controller-merges", + "$JS.API.CONSUMER.DELETE.EVENTS.controller-merges", + "$JS.API.STREAM.INFO.KV_mesh-controller_rollouts", + "$JS.API.STREAM.DELETE.KV_mesh-controller_rollouts", "$JS.API.STREAM.INFO.KV_mesh-host_acts", "$KV.mesh-host_acts.>" ] }, subscribe: { allow: ["_INBOX.nats-tools.>"] } } } @@ -83,6 +89,19 @@ accounts { MESH { jetstream: enabled, users: [ t.Fatal(err) } } + if _, err := ajs.CreateStream(ctx, jetstream.StreamConfig{Name: "EVENTS", Subjects: []string{"mesh.events.>"}}); err != nil { + t.Fatal(err) + } + for _, c := range []string{"controller-merges", "mesh-grants"} { + if _, err := ajs.CreateConsumer(ctx, "EVENTS", jetstream.ConsumerConfig{Durable: c, AckPolicy: jetstream.AckExplicitPolicy}); err != nil { + t.Fatal(err) + } + } + rollouts, err := ajs.CreateKeyValue(ctx, jetstream.KeyValueConfig{Bucket: "mesh-controller_rollouts"}) + if err != nil { + t.Fatal(err) + } + rollouts.Put(ctx, "p-1", []byte("{}")) other, _ := ajs.CreateKeyValue(ctx, jetstream.KeyValueConfig{Bucket: "other_state"}) for _, k := range []string{"g14.1", "g14.2", "g14.sub.3", "g14x.4", "ace.5"} { acts.Put(ctx, k, []byte("v")) @@ -165,6 +184,27 @@ accounts { MESH { jetstream: enabled, users: [ t.Fatalf("a second removal: %+v %v", r, err) } + // Issue 1126 B5: the controller's consumer of EVENTS goes and the stream's other consumer stays; its bucket's stream + // goes whole; EVENTS itself is outside the grant. + if _, err := RemoveConsumer(ctx, bus, say, map[string]any{"stream": "EVENTS", "consumer": "mesh-grants", "why": "x"}); err == nil { + t.Fatal("a consumer of EVENTS outside the grant was removed") + } + if _, err := RemoveConsumer(ctx, bus, say, map[string]any{"stream": "EVENTS", "consumer": "controller-merges", "why": "the controller ended"}); err != nil { + t.Fatalf("the controller's consumer of EVENTS: %v", err) + } + if _, err := ajs.Consumer(ctx, "EVENTS", "mesh-grants"); err != nil { + t.Fatalf("the other consumer of EVENTS went: %v", err) + } + if r, err := RemoveStream(ctx, bus, say, map[string]any{"stream": "KV_mesh-controller_rollouts", "why": "the controller ended"}); err != nil || !r.(StreamRemoved).Removed || r.(StreamRemoved).Messages != 1 { + t.Fatalf("the controller's bucket: %+v %v", r, err) + } + if _, err := RemoveStream(ctx, bus, say, map[string]any{"stream": "EVENTS", "why": "x"}); err == nil || !strings.Contains(err.Error(), "consumers") && !strings.Contains(err.Error(), "grant") { + t.Fatalf("EVENTS: %v", err) + } + if _, err := ajs.Stream(ctx, "EVENTS"); err != nil { + t.Fatalf("EVENTS went: %v", err) + } + // N3: only the node's keys go; counted first; refused without why, for a whole bucket, and outside the grant. if _, err := RemoveKeys(ctx, bus, say, map[string]any{"bucket": "mesh-host_acts", "node": "g14"}); err == nil || !strings.Contains(err.Error(), "why is required") { t.Fatalf("without why: %v", err) @@ -201,7 +241,7 @@ accounts { MESH { jetstream: enabled, users: [ if k := keys(other); k != "g14.1" { t.Fatalf("another bucket changed: %s", k) } - if strings.Join(said, ",") != "consumer-removed,stream-removed,bucket-keys-removed" { + if strings.Join(said, ",") != "consumer-removed,stream-removed,consumer-removed,stream-removed,bucket-keys-removed" { t.Fatalf("the audit events said: %v", said) } } diff --git a/modules/nats/module.json b/modules/nats/module.json index fc553dd8..01f36795 100644 --- a/modules/nats/module.json +++ b/modules/nats/module.json @@ -215,8 +215,7 @@ ], "bus": { "removes": [ - "DEAD_LETTER_NOTICES.controller", - "ASSIGNMENTS" + "controller-leftovers" ] }, "env": { From e00908815077564706d8688776f3bdbd32a04fae Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 11:26:29 +0100 Subject: [PATCH 03/27] Point messenger, mesh-watcher, restic and mesh-issues away from the controller The controller is not placed (ADR 0590): messenger no longer treats it as a condition owner or a walk's subject, mesh-watcher reads only where the bus runs, restic tells the operator to compose the machine or set config through the seats that do it now, and mesh-issues' examples name a placed repository. mesh-issues keeps mesh-controller among its owners: issues located there, issue 1126 among them, and route-proxy until it moves, still name it (issue 1126 B11). Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- modules/mesh-issues/cmd/mesh-issues/check.go | 6 +-- modules/mesh-issues/cmd/mesh-issues/main.go | 12 ++--- modules/mesh-watcher/README.md | 8 ++-- modules/mesh-watcher/cmd/mesh-watcher/main.go | 8 ++-- .../cmd/mesh-watcher/watcher_test.go | 9 ++-- modules/messenger/README.md | 4 +- .../messenger/cmd/messenger/adr505_test.go | 47 ------------------- .../messenger/cmd/messenger/answers_test.go | 8 ++-- modules/messenger/cmd/messenger/asks.go | 8 ++-- .../messenger/cmd/messenger/details_test.go | 6 +-- modules/messenger/cmd/messenger/walks.go | 17 +------ modules/messenger/cmd/messenger/whole_test.go | 4 +- modules/restic/cmd/restic-backups/health.go | 14 +++--- .../restic/cmd/restic-backups/health_test.go | 4 +- modules/restic/cmd/restic-backups/main.go | 8 ++-- 15 files changed, 49 insertions(+), 114 deletions(-) diff --git a/modules/mesh-issues/cmd/mesh-issues/check.go b/modules/mesh-issues/cmd/mesh-issues/check.go index d584dad3..b16ffe34 100644 --- a/modules/mesh-issues/cmd/mesh-issues/check.go +++ b/modules/mesh-issues/cmd/mesh-issues/check.go @@ -167,7 +167,7 @@ func (o Owners) locatedIn(e string) (string, error) { } if o.owns(v) == "" { return "", fmt.Errorf("located-in %q names no registered owner: an entry starts with a repository such as "+ - "mesh-controller, or a module such as \"mesh-catalog modules/nats\", optionally followed by where in it; "+ + "mesh-host, or a module such as \"mesh-catalog modules/nats\", optionally followed by where in it; "+ "the registered list is the module's setting `owners`", v) } return v, nil @@ -277,7 +277,7 @@ func checkTarget(kind, target string) (string, error) { case LinkDuplicates, LinkRelatesTo, LinkDependsOn: ok, shape = issueNumber.MatchString(t), "another issue's number, such as 312" case LinkPullRequest: - ok, shape = pullRequest.MatchString(t), "a repository and a pull request's number, such as mesh-controller#246" + ok, shape = pullRequest.MatchString(t), "a repository and a pull request's number, such as mesh-host#246" case LinkDecision: ok, shape = decision.MatchString(t), "a decision record's four-digit number, such as 0275" case LinkDesign: @@ -287,7 +287,7 @@ func checkTarget(kind, target string) (string, error) { "the scope one of "+strings.Join(conditionScopes, ", ")+", each part of letters, digits and _=/-" case LinkDelivery: ok, shape = deliveryID.MatchString(t), "a delivery's id as mesh-delivery names it: the repository as owner/name, @ and twelve "+ - "characters of its commit, such as novox/mesh-controller@d2e9dc61590f" + "characters of its commit, such as novox/mesh-host@d2e9dc61590f" case LinkMilestone: var c string c, ok = checkMilestoneTarget(t) diff --git a/modules/mesh-issues/cmd/mesh-issues/main.go b/modules/mesh-issues/cmd/mesh-issues/main.go index 9e0760fd..d211453d 100644 --- a/modules/mesh-issues/cmd/mesh-issues/main.go +++ b/modules/mesh-issues/cmd/mesh-issues/main.go @@ -383,7 +383,7 @@ func Tools(t *Tracker) []stdio.Tool { Input: schema([]string{"title", "report"}, map[string]any{ "title": text("one line: the symptom, in plain words"), "report": text("what was seen, what was expected, and how it was found"), - "located-in": texts("the owners it is in, each a repository such as mesh-controller or a module such as \"mesh-catalog modules/nats\", optionally followed by where in it"), + "located-in": texts("the owners it is in, each a repository such as mesh-host or a module such as \"mesh-catalog modules/nats\", optionally followed by where in it"), "record": text("for an issue with a folder in hq: the folder's name without its number, such as the-counter-skips-a-number"), "severity": map[string]any{"type": "string", "enum": Severities, "description": "when known: critical (something the operator relies on is broken, or data at risk), major (a rule does not hold, or people work around it), minor (a contained fix, nothing the operator sees changes); left out, the triage estimates it"}, "needs": map[string]any{"type": "string", "enum": NeedsKinds, "description": "when known: none, decision (a decision record first) or operator (the operator's answer is required); left out, the triage estimates it"}, @@ -469,7 +469,7 @@ func Tools(t *Tracker) []stdio.Tool { "opened, moved, noted, linked, worked on, or its fix's delivery said a new state.", Input: schema(nil, map[string]any{ "status": map[string]any{"type": "string", "enum": Statuses, "description": "only issues at this status"}, - "owner": text("only issues located in this owner, such as mesh-controller"), + "owner": text("only issues located in this owner, such as mesh-host"), "phrase": text("only issues whose title or report holds these words"), "limit": map[string]any{"type": "integer", "minimum": 1, "maximum": MostListResult, "description": "at most this many rows (default 50)"}, "severity": map[string]any{"type": "string", "enum": Severities, "description": "only issues at this severity"}, @@ -554,7 +554,7 @@ func Tools(t *Tracker) []stdio.Tool { "number": number("the issue's number"), "status": map[string]any{"type": "string", "enum": Statuses, "description": "the status it moves to"}, "located-in": texts("the owners it is in; replaces what it said"), - "fixed-by": texts("what fixed it: pull requests or commits, such as mesh-controller#246; replaces what it said"), + "fixed-by": texts("what fixed it: pull requests or commits, such as mesh-host#246; replaces what it said"), "amended-design": texts("the design documents the fix changed, such as 03-DESIGN/00-as-is/12-the-controller.md"), "replay": text("for a core issue resolved: the replay's id in mesh-lab's replays register, such as R361"), "replay-none": text("for a core issue resolved: why no replay is possible"), @@ -615,9 +615,9 @@ func Tools(t *Tracker) []stdio.Tool { }}, {Name: Seat + ".link", Description: "Link an issue to something, or with remove, take a link away. Kinds: duplicates or relates-to " + - "another issue (its number), pull-request (such as mesh-controller#246), decision (a decision record's " + + "another issue (its number), pull-request (such as mesh-host#246), decision (a decision record's " + "number, such as 0275), design (a design document's path), condition (a condition's key) and delivery " + - "(a delivery's id, such as novox/mesh-controller@d2e9dc61590f), milestone (the one milestone it belongs to, design/id such as " + + "(a delivery's id, such as novox/mesh-host@d2e9dc61590f), milestone (the one milestone it belongs to, design/id such as " + "47/R6) and commit (a commit that fixes it, repository@full sha). Refused: a target not of its kind's shape, an issue that does not exist, a link it " + "already has, a second milestone (remove the first to move it), a milestone that does not exist or is closed.", Input: schema([]string{"number", "kind", "target"}, map[string]any{ @@ -827,7 +827,7 @@ func Tools(t *Tracker) []stdio.Tool { "number": number("the issue's number"), "severity": map[string]any{"type": "string", "enum": Severities}, "needs": map[string]any{"type": "string", "enum": NeedsKinds}, - "suggested-owner": text("an owner on the registered list, such as mesh-controller"), + "suggested-owner": text("an owner on the registered list, such as mesh-host"), }), Run: func(m map[string]any) (any, error) { a, err := readArgs("set", m, "number", "severity", "needs", "suggested-owner") diff --git a/modules/mesh-watcher/README.md b/modules/mesh-watcher/README.md index f107520e..69c3d30a 100644 --- a/modules/mesh-watcher/README.md +++ b/modules/mesh-watcher/README.md @@ -3,11 +3,11 @@ The watcher's watcher (novox/hq to-be 45 §5, signal S10, ADR 0227 rule 6): what tells the operator when the parts that would tell them are what failed. -- **Assigned to one machine that is not the control node.** It reads where the controller and the - bus run (`mesh-controller.seats`) every ten minutes; on the same machine its status says - `MISPLACED`. +- **Assigned to one machine that is not the control node.** It reads where the bus runs (the seat + `mesh-broker`'s holders, from the placement seat's state of who holds which seat) every ten minutes; + on the same machine its status says `MISPLACED`. - **Watches two signals.** - - **The self-check:** the controller's `doctor` heartbeat, `mesh-controller.doctor-heartbeat`. + - **The self-check:** the seat `mesh-self-check`'s `checked` event. Bound: twice the interval the heartbeat says doctor runs at (five minutes when it says none). Heard by the time the heartbeat says it was made, so a backlog delivered after a restart is not a sign of life. The heartbeat is read in one place, `cmd/mesh-watcher/heartbeat.go`, which states diff --git a/modules/mesh-watcher/cmd/mesh-watcher/main.go b/modules/mesh-watcher/cmd/mesh-watcher/main.go index 168a7e32..3ff9167f 100644 --- a/modules/mesh-watcher/cmd/mesh-watcher/main.go +++ b/modules/mesh-watcher/cmd/mesh-watcher/main.go @@ -95,7 +95,7 @@ func run(w *Watcher, l *listening, node string) { if nodes, err := controlNodes(); err == nil { w.Placed(nodes) } else { - logf("[mesh-watcher] cannot read where the controller runs (%v); asking again in ten minutes", err) + logf("[mesh-watcher] cannot read where the bus runs (%v); asking again in ten minutes", err) } time.Sleep(10 * time.Minute) } @@ -146,8 +146,8 @@ func roundTrip(node string) error { } } -// controlNodes reads which machines hold the controller and the bus, from the placement seat's state of who holds -// which seat (novox/hq ADR 0571 clause 4). +// controlNodes reads which machines hold the bus, from the placement seat's state of who holds which seat (novox/hq +// ADR 0571 clause 4). The controller is not placed (ADR 0590), so the bus's machines are the control node. func controlNodes() ([]string, error) { st := stdio.State(delivery.SeatHoldersRead) names, err := st.Keys() @@ -164,7 +164,7 @@ func controlNodes() ([]string, error) { keys[k] = e.Value } } - return holderNodes(keys, "mesh-controller", "mesh-broker") + return holderNodes(keys, "mesh-broker") } // holderNodes is the machines holding any of the seats, in the order the seats are named, each once. diff --git a/modules/mesh-watcher/cmd/mesh-watcher/watcher_test.go b/modules/mesh-watcher/cmd/mesh-watcher/watcher_test.go index d5f24585..2b7f7f2a 100644 --- a/modules/mesh-watcher/cmd/mesh-watcher/watcher_test.go +++ b/modules/mesh-watcher/cmd/mesh-watcher/watcher_test.go @@ -215,15 +215,14 @@ func TestOnTheControlNodeItSaysItIsMisplaced(t *testing.T) { func TestTheHoldersAreReadFromThePlacementSeatsState(t *testing.T) { keys := map[string][]byte{ - "mesh-controller": []byte(`{"v":1,"seat":"mesh-controller","scope":"mesh","holders":[{"module":"mesh-controller","node":"n1"}]}`), - "mesh-broker": []byte(`{"v":1,"seat":"mesh-broker","scope":"mesh","holders":[{"module":"nats","node":"n1"},{"module":"nats","node":"n2"}]}`), - "git": []byte(`{"v":1,"seat":"git","scope":"mesh","holders":[{"module":"gitea","node":"n3"}]}`), + "mesh-broker": []byte(`{"v":1,"seat":"mesh-broker","scope":"mesh","holders":[{"module":"nats","node":"n1"},{"module":"nats","node":"n2"},{"module":"nats","node":"n1"}]}`), + "git": []byte(`{"v":1,"seat":"git","scope":"mesh","holders":[{"module":"gitea","node":"n3"}]}`), } - got, err := holderNodes(keys, "mesh-controller", "mesh-broker") + got, err := holderNodes(keys, "mesh-broker") if err != nil || strings.Join(got, ",") != "n1,n2" { t.Errorf("%v %v", got, err) } - if _, err := holderNodes(map[string][]byte{}, "mesh-controller", "mesh-broker"); err == nil { + if _, err := holderNodes(map[string][]byte{}, "mesh-broker"); err == nil { t.Error("no holder named, and no error") } } diff --git a/modules/messenger/README.md b/modules/messenger/README.md index f2927219..3125ee2f 100644 --- a/modules/messenger/README.md +++ b/modules/messenger/README.md @@ -201,9 +201,7 @@ The controller's `plan-moved` says each walk's start and end: `walk`, `phase` (` module it touches (on a machine it touches, when the subject names one), is held: kept on the walk with when and what, and the history says `held`. A message several open walks touch is told when the last ends or passes its bound. At a walk's end, a later open walk that touches a message takes it over only as a first hold would: - still open, not silenced, not said since, and not one that is never held. The controller's own lease, bus and - health conditions (`core.controller.…`, `bus.controller.…`) are about the module `mesh-controller`, wherever a - walk moves it (ADR 0505 §2). + still open, not silenced, not said since, and not one that is never held. - **The settle (ADR 0505 §3, §6):** a walk that ended delivered holds on for the setting `settle-seconds` (120 by default): what it touched stays held, a condition raised then on what it touched is held too, and its end is told when the settle has passed. A walk that failed or stopped is told at once; for its settle after diff --git a/modules/messenger/cmd/messenger/adr505_test.go b/modules/messenger/cmd/messenger/adr505_test.go index 541b0f4f..af6e0284 100644 --- a/modules/messenger/cmd/messenger/adr505_test.go +++ b/modules/messenger/cmd/messenger/adr505_test.go @@ -44,53 +44,6 @@ func TestTheSettleIsReadFromTheSettingsFileAndIsTwoMinutesByDefault(t *testing.T } } -// controllerConditions are the controller's own conditions as it raises them: the lease's (mesh-controller -// signals.go watchLease: scope core, id controller.lease, the machine its host names, which need not be a node's -// name) and the bus's (reconnects.go: scope bus, id the bus user). -func controllerConditions(c *clock) []Condition { - lease := cond("core.controller.lease.lost", Urgent, "the controller lost its lease") - lease.ID, lease.Machine, lease.Raised = "controller.lease", "a-host-name", c.now() - bus := cond("bus.controller.bus-reconnects", Urgent, "the controller reconnects to the bus") - bus.Raised = c.now() - health := cond("module.controller.unhealthy", Urgent, "the controller is not healthy") - health.Raised = c.now() - return []Condition{lease, bus, health} -} - -// ADR 0505 §2a: the controller's lease, bus and health conditions are held while a walk moving mesh-controller is -// open, whatever name their keys give the controller and whatever host they name. -func TestTheControllersOwnConditionsAreHeldWhileAWalkMovesMeshController(t *testing.T) { - h, tg, dt, c, _ := newHolder(t) - walk(t, h, "plan-c", WalkStarted, "", c.now(), 1200, novox("mesh-controller")) - for _, k := range controllerConditions(c) { - h.Condition(EventRaised, k) - } - runFor(h, c, time.Minute) - if saidOn(tg, dt) != 0 { - t.Fatalf("the controller's own conditions were said during its delivery: %+v %+v", tg.sends, dt.sends) - } - for _, k := range controllerConditions(c) { - if !has(outcomes(h, k.Key), "held") { - t.Errorf("%s was not held: %v", k.Key, outcomes(h, k.Key)) - } - } -} - -// ADR 0505 §2a: a walk that does not move mesh-controller holds none of them. -func TestTheControllersOwnConditionsAreNotHeldByAWalkOfAnotherModule(t *testing.T) { - h, tg, dt, c, _ := newHolder(t) - walk(t, h, "plan-g", WalkStarted, "", c.now(), 1200, Touch{Machine: "ace", Modules: []string{"gitea"}}) - for _, k := range controllerConditions(c) { - h.Condition(EventRaised, k) - } - runFor(h, c, time.Minute) - for _, k := range controllerConditions(c) { - if has(outcomes(h, k.Key), "held") || !heard(headlineOf(k.Key), tg, dt) { - t.Errorf("%s was held by a walk of gitea, or not said: %v", k.Key, outcomes(h, k.Key)) - } - } -} - // shanksDeclared is a touch as the controller says a machine whose declaration the walk's merges change and to which // it sends nothing (mesh-controller walk_said.go walkTouch, `declared`, ADR 0505 §2b). var shanksDeclared = Touch{Machine: "shanks", Modules: []string{"mesh-build-image"}, Declared: true} diff --git a/modules/messenger/cmd/messenger/answers_test.go b/modules/messenger/cmd/messenger/answers_test.go index 28595124..1bb942bf 100644 --- a/modules/messenger/cmd/messenger/answers_test.go +++ b/modules/messenger/cmd/messenger/answers_test.go @@ -677,7 +677,7 @@ func TestAnAskAboutAConditionIsAnsweredOnItsMessage(t *testing.T) { settle(h, c) a := ackAsk(c, "d-1") a.About = "delivery.hq.held" - submit(t, h, "mesh-controller", a) + submit(t, h, ConditionOwner, a) settle(h, c) // Its first message was on the desk alone (a warning, the desk ready); the ask re-shows it with answers. var shown Message @@ -687,14 +687,14 @@ func TestAnAskAboutAConditionIsAnsweredOnItsMessage(t *testing.T) { if got := labelsOf(shown); got != "Silence for a week, Details" { t.Errorf("the desk's copy offers %q: %+v", got, shown) } - if store.asks["mesh-controller.d-1"].Record != "delivery.hq.held" { - t.Errorf("the ask is shown on %q", store.asks["mesh-controller.d-1"].Record) + if store.asks[ConditionOwner+".d-1"].Record != "delivery.hq.held" { + t.Errorf("the ask is shown on %q", store.asks[ConditionOwner+".d-1"].Record) } silence := ticketFor(shown, "Silence for a week") if out, err := h.Chosen("desktop", choiceOf(silence, "g14", c.now())); err != nil || out != "chosen" { t.Fatalf("%s %v", out, err) } - if got := w.of("mesh-controller"); len(got) != 1 || got[0].About != "delivery.hq.held" { + if got := w.of(ConditionOwner); len(got) != 1 || got[0].About != "delivery.hq.held" { t.Errorf("%+v", got) } _ = tg diff --git a/modules/messenger/cmd/messenger/asks.go b/modules/messenger/cmd/messenger/asks.go index 32160014..bc8dfc34 100644 --- a/modules/messenger/cmd/messenger/asks.go +++ b/modules/messenger/cmd/messenger/asks.go @@ -479,9 +479,9 @@ func answerLevel(a asks.Ask) asks.Level { return asks.Acknowledge } -// ConditionOwner is the module whose asks may be shown on a condition's message: the controller, which raised the -// conditions; the condition keeper (ConditionSeat), which raises them now, is one too. -const ConditionOwner = "mesh-controller" +// ConditionOwner is the module whose asks may be shown on a condition's message: the condition keeper, which raises +// the conditions (the controller, which raised them before it, is not placed; novox/hq ADR 0590). +const ConditionOwner = ConditionSeat // TakeAsk takes one ask or cancel from the seat's queue. asker is the subject's last token, which the bus // grants that module alone. An error is returned only when the ask could not be recorded, so the queue @@ -651,7 +651,7 @@ func (h *Holder) recordFor(asker, key string, a asks.Ask) string { defer h.mu.Unlock() // Shown on a condition's message only when asked by the condition's owner: another asker naming a // condition's key does not take its message over. - if a.About != "" && (asker == ConditionOwner || asker == ConditionSeat) { + if a.About != "" && asker == ConditionOwner { if r := h.open[a.About]; r != nil && r.Cleared.IsZero() && r.Origin == "condition" { return r.Key } diff --git a/modules/messenger/cmd/messenger/details_test.go b/modules/messenger/cmd/messenger/details_test.go index 46d9f79e..e5029b54 100644 --- a/modules/messenger/cmd/messenger/details_test.go +++ b/modules/messenger/cmd/messenger/details_test.go @@ -158,7 +158,7 @@ func TestDetailsOnAMessageWithAnOpenAskNeverAnswersIt(t *testing.T) { older := detailsOf(t, dt.sends[0]) a := ackAsk(c, "d-1") a.About = "delivery.hq.held" - submit(t, h, "mesh-controller", a) + submit(t, h, ConditionOwner, a) settle(h, c) var shown Message for _, m := range dt.edits { @@ -169,10 +169,10 @@ func TestDetailsOnAMessageWithAnOpenAskNeverAnswersIt(t *testing.T) { t.Fatalf("Details: %q %v", out, err) } } - if got := w.of("mesh-controller"); len(got) != 0 { + if got := w.of(ConditionOwner); len(got) != 0 { t.Errorf("Details issued a warrant: %+v", got) } - if st := store.asks["mesh-controller.d-1"].State; st != StateOpen { + if st := store.asks[ConditionOwner+".d-1"].State; st != StateOpen { t.Errorf("Details ended the ask: %s", st) } } diff --git a/modules/messenger/cmd/messenger/walks.go b/modules/messenger/cmd/messenger/walks.go index 98788aec..bfb40f8c 100644 --- a/modules/messenger/cmd/messenger/walks.go +++ b/modules/messenger/cmd/messenger/walks.go @@ -255,7 +255,7 @@ func (w *Walk) touches(s subject) bool { } } } - if s.machineNamed && !s.controller { + if s.machineNamed { return false } for _, t := range w.Touches { @@ -982,18 +982,8 @@ type subject struct { machineNamed bool // tokens are every name it carries, to tell a message about a walk itself. tokens []string - // controller: the subject is the controller itself — its lease, its bus connection, its health — matched to the - // module mesh-controller wherever a walk moves it, whatever machine or host the condition names (ADR 0505 §2a). - controller bool } -// controllerNames are the names the controller's own conditions give it in their keys (`core.controller.lease.lost`, -// `bus.controller.bus-reconnects`, `module.controller...`): each is the module ControllerModule (ADR 0505 §2a). -var controllerNames = map[string]bool{"controller": true, ControllerModule: true} - -// ControllerModule is the controller's module, as a walk that moves it names it. -const ControllerModule = "mesh-controller" - // subjectOf is a record's subject: a condition's scope and id (`..` when the record kept no // subject of its own), a notice's subject words. func subjectOf(r *Record) subject { @@ -1015,11 +1005,6 @@ func subjectOf(r *Record) subject { if r.Machine != "" { s.machines, s.machineNamed = append(s.machines, r.Machine), true } - if (scope == "core" || scope == "bus" || scope == "module" || scope == "seat") && len(tokens) > 0 && controllerNames[tokens[0]] { - // The controller's own subject: the module mesh-controller, wherever it runs (ADR 0505 §2a). - s.modules, s.controller = append(s.modules, ControllerModule), true - return s - } switch scope { case "machine", "node", "bus": s.machines, s.machineNamed = append(s.machines, tokens[0]), true diff --git a/modules/messenger/cmd/messenger/whole_test.go b/modules/messenger/cmd/messenger/whole_test.go index e696f832..1eaef2e6 100644 --- a/modules/messenger/cmd/messenger/whole_test.go +++ b/modules/messenger/cmd/messenger/whole_test.go @@ -126,9 +126,9 @@ func TestAnAskWhoseWholeWordsCarryASecretIsRefused(t *testing.T) { settle(h, c) a := proposalAsk(c, "s-5") a.About = "delivery.hq.held" - submit(t, h, "mesh-controller", a) + submit(t, h, ConditionOwner, a) settle(h, c) - if r := h.open["delivery.hq.held"]; r == nil || r.Ask != "mesh-controller.s-5" || h.wholeOf(r, "telegram") != "" { + if r := h.open["delivery.hq.held"]; r == nil || r.Ask != ConditionOwner+".s-5" || h.wholeOf(r, "telegram") != "" { t.Errorf("a condition's record is given an ask's whole words") } } diff --git a/modules/restic/cmd/restic-backups/health.go b/modules/restic/cmd/restic-backups/health.go index 1f6257f2..4e5f57b0 100644 --- a/modules/restic/cmd/restic-backups/health.go +++ b/modules/restic/cmd/restic-backups/health.go @@ -63,7 +63,7 @@ func Judge(s Seen) Health { var waits []health.Wait if s.DeclaredErr != nil { found = append(found, fmt.Sprintf("What the modules here declare to back up does not read (%v), so no night can "+ - "back anything up; push this machine (mesh-controller.push) so the mesh writes it again.", s.DeclaredErr)) + "back anything up; compose this machine again (node-engine.compose on it) so the mesh writes it again.", s.DeclaredErr)) } if s.Run.Failed != "" { found = append(found, fmt.Sprintf("The night of %s did not run: %s. No module was backed up; fix what the error "+ @@ -134,24 +134,24 @@ func Judge(s Seen) Health { } line := fmt.Sprintf("The retention setting %s is refused: it is %s, and it is a count from 1 to 9999. Until it is, "+ "nothing is thinned and every restore point is kept, so the repository grows; set %s for restic on this machine "+ - "(mesh-controller.settings).", r.Setting, value, r.Setting) + "(mesh-config.config).", r.Setting, value, r.Setting) said = append(said, line) waits = append(waits, health.Wait{Part: "night", Setting: r.Setting, What: "a count from 1 to 9999 for " + r.Setting}) case strings.Contains(r.Refused, Unreadable): found = append(found, fmt.Sprintf("The retention is refused: %s; nothing is thinned and every restore point is "+ "kept, so the repository grows. The mesh writes the file readable (0644) and root's; one the account cannot "+ - "read was written by an older build of this module, or changed on the machine, and the next push of this "+ - "machine (mesh-controller.push) writes it readable again.", r.Refused)) + "read was written by an older build of this module, or changed on the machine, and the next composition of this "+ + "machine (node-engine.compose on it) writes it readable again.", r.Refused)) case strings.HasSuffix(r.Refused, Missing): found = append(found, fmt.Sprintf("The retention is refused: %s; nothing is thinned and every restore point is "+ - "kept until it is there again, rather than thinned by a number nobody set; push this machine "+ - "(mesh-controller.push) so the mesh writes it again.", r.Refused)) + "kept until it is there again, rather than thinned by a number nobody set; compose this machine again "+ + "(node-engine.compose on it) so the mesh writes it again.", r.Refused)) case strings.Contains(r.Refused, RetentionFile+": "): // Read, and not in the form the mesh writes: something other than the mesh wrote it. found = append(found, fmt.Sprintf("The retention is refused: %s; nothing is thinned and every restore point is "+ "kept, so the repository grows. The mesh writes only daily=, weekly=, monthly= and hand=, so something else wrote "+ - "this file; push this machine (mesh-controller.push) so the mesh writes it again.", r.Refused)) + "this file; compose this machine again (node-engine.compose on it) so the mesh writes it again.", r.Refused)) default: found = append(found, fmt.Sprintf("The retention is refused: %s; nothing is thinned and every restore point is "+ "kept, so the repository grows. Fix what the error names.", r.Refused)) diff --git a/modules/restic/cmd/restic-backups/health_test.go b/modules/restic/cmd/restic-backups/health_test.go index 4db6c7ef..1428cca2 100644 --- a/modules/restic/cmd/restic-backups/health_test.go +++ b/modules/restic/cmd/restic-backups/health_test.go @@ -135,7 +135,7 @@ func TestAMissingRetentionFileIsUnhealthy(t *testing.T) { if h.State != health.StateUnhealthy { t.Fatalf("a missing retention file is %s: %s", h.State, h.Why) } - for _, want := range []string{"retention.conf is missing", "nothing is thinned", "mesh-controller.push"} { + for _, want := range []string{"retention.conf is missing", "nothing is thinned", "node-engine.compose"} { if !strings.Contains(h.Why, want) { t.Errorf("said %q, want it to hold %q", h.Why, want) } @@ -390,7 +390,7 @@ func TestARetentionWithoutHandSaysToPushTheMachine(t *testing.T) { if h.State != health.StateUnhealthy || len(h.Waits) != 0 { t.Fatalf("a file without hand= is %s waiting for %+v: %s", h.State, h.Waits, h.Why) } - for _, want := range []string{"hand= line is missing", "mesh-controller.push"} { + for _, want := range []string{"hand= line is missing", "node-engine.compose"} { if !strings.Contains(h.Why, want) { t.Errorf("said %q, want it to hold %q", h.Why, want) } diff --git a/modules/restic/cmd/restic-backups/main.go b/modules/restic/cmd/restic-backups/main.go index 7da0a7cb..99de2aee 100644 --- a/modules/restic/cmd/restic-backups/main.go +++ b/modules/restic/cmd/restic-backups/main.go @@ -176,15 +176,15 @@ func tools(b *Backups) []stdio.Tool { "did not run, the last thinning failed, or the retention file is missing or unreadable — each said with what " + "to do; waits, naming the setting, when a retention setting is refused. (r)", Run: func(map[string]any) (any, error) { return b.Health(context.Background()), nil }}, - // Deleting a retired item, when a person decided (novox/hq ADR 0233): the controller's `cleanup - // delete` asks these. Not seat verbs — nobody else calls them. + // Deleting a retired item, when a person decided (novox/hq ADR 0233). Not seat verbs: a person asks them + // through the mesh MCP server, and records the hand act (the controller's `cleanup delete` went with it). {Name: "backup_delete_retired", Description: "Delete one item of data the mesh retired on this machine — " + "its module is gone from here — after taking a last restore point of it, tagged retired, so it can be " + "restored until that restore point is forgotten. Refuses anything declared now. Answers at once; " + - "backup_deleted says how it went. Use the controller's `cleanup delete`, which records the hand act.", + "backup_deleted says how it went. Record the act with mesh-hand-acts.hand-act beside it.", Input: map[string]any{"module": str("the module it was"), "item": str("the item"), "path": str("where it is"), "confirm": str("the item's name again"), "why": str("why — required"), "by": str("who decided"), - "via": str("mesh-controller when asked through its verbs")}, + "via": str("what it was asked through, when not by a person directly")}, Run: func(a map[string]any) (any, error) { return b.DeleteRetired(context.Background(), arg(a, "module"), arg(a, "item"), arg(a, "path"), arg(a, "confirm"), arg(a, "by"), arg(a, "why")) From c4a6452f21f6ba4fefe33e400d6597a005daa412 Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 02:54:35 +0100 Subject: [PATCH 04/27] Give mesh-mail-reader's two acceptance tests a due date a week from now, so they do not expire Both stand-in judges answered the fixed due date 2026-11-01; since 2026-11-02 00:00 UTC that date is past, signalEntries drops the mail, no tell is sent, and both tests time out on every check that rebuilds the module (met in the enrolment group's check of issue 774, 2026-11-02 02:50). Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- .../cmd/mesh-mail-reader/acceptance_integration_test.go | 2 +- .../cmd/mesh-mail-reader/catchup_integration_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/mesh-mail-reader/cmd/mesh-mail-reader/acceptance_integration_test.go b/modules/mesh-mail-reader/cmd/mesh-mail-reader/acceptance_integration_test.go index aa8ebf4f..38325a9f 100644 --- a/modules/mesh-mail-reader/cmd/mesh-mail-reader/acceptance_integration_test.go +++ b/modules/mesh-mail-reader/cmd/mesh-mail-reader/acceptance_integration_test.go @@ -149,7 +149,7 @@ func TestAcceptanceOneMatteringMailSendsExactlyOneTellNamingIt(t *testing.T) { r := startReader(t) r.stand.MailAccounts = oneAccountAnswer("bob") r.stand.MailRead = func(map[string]any) (any, error) { return map[string]any{"text": "pay by friday"}, nil } - r.stand.Judge = judgeEveryMailAs("matters", "", "due friday", "2026-11-01") + r.stand.Judge = judgeEveryMailAs("matters", "", "due friday", time.Now().UTC().AddDate(0, 0, 7).Format("2006-01-02")) var checked recorded[string] r.stand.MessengerCheck = func(args map[string]any) (any, error) { diff --git a/modules/mesh-mail-reader/cmd/mesh-mail-reader/catchup_integration_test.go b/modules/mesh-mail-reader/cmd/mesh-mail-reader/catchup_integration_test.go index 665114f8..57c02a77 100644 --- a/modules/mesh-mail-reader/cmd/mesh-mail-reader/catchup_integration_test.go +++ b/modules/mesh-mail-reader/cmd/mesh-mail-reader/catchup_integration_test.go @@ -82,7 +82,7 @@ func TestAcceptanceRefusedJudgementIsUnhealthyThenCatchesUpInPublishedOrder(t *t } mails := make([]map[string]any, len(ids)) for i, id := range ids { - mails[i] = map[string]any{"id": id, "mark": "matters", "summary": "s", "why": "pay", "due-date": "2026-11-01"} + mails[i] = map[string]any{"id": id, "mark": "matters", "summary": "s", "why": "pay", "due-date": time.Now().UTC().AddDate(0, 0, 7).Format("2006-01-02")} } raw, _ := json.Marshal(map[string]any{"mails": mails}) return map[string]any{"answer": json.RawMessage(raw)}, nil From ab610ffed42f1baaf408633789123447bc8b6a99 Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 01:48:48 +0100 Subject: [PATCH 05/27] Read a go download failure as a pin on a pull request head only when go does not know the revision, so a network failure is retaken and says its own cause Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- modules/mesh-build-go/cmd/mesh-build-go/pins.go | 2 +- .../mesh-build-go/cmd/mesh-build-go/versions.go | 12 ++++++++++++ .../cmd/mesh-build-go/versions_test.go | 14 ++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/modules/mesh-build-go/cmd/mesh-build-go/pins.go b/modules/mesh-build-go/cmd/mesh-build-go/pins.go index 63294545..d8b2f05f 100644 --- a/modules/mesh-build-go/cmd/mesh-build-go/pins.go +++ b/modules/mesh-build-go/cmd/mesh-build-go/pins.go @@ -106,7 +106,7 @@ func (m *Module) resolvePins(ctx context.Context, root, dir, failure string) (bo } progress := false for _, p := range forgePins(string(raw)) { - if !strings.Contains(failure, p.short) || strings.Contains(done, "replace "+p.module+" =>") { + if !unknownRevision(failure) || !strings.Contains(failure, p.short) || strings.Contains(done, "replace "+p.module+" =>") { continue } where, err := m.placePin(ctx, root, p, failure) diff --git a/modules/mesh-build-go/cmd/mesh-build-go/versions.go b/modules/mesh-build-go/cmd/mesh-build-go/versions.go index a3d42471..d580c04f 100644 --- a/modules/mesh-build-go/cmd/mesh-build-go/versions.go +++ b/modules/mesh-build-go/cmd/mesh-build-go/versions.go @@ -103,6 +103,11 @@ func (m *Module) takeVersion(ctx context.Context, root, dir string, tv *TakenVer if r.Status != 0 || r.Err != "" || info.Version == "" || info.Error != "" { // Not a commit Go can fetch: the head of a group's pull request (ADR 0573 §4), placed from the forge's heads. failure := strings.TrimSpace(info.Error + "\n" + r.Err + "\n" + r.Stderr) + if !unknownRevision(failure) { + // A download that failed for another cause (the forge or the resolver did not answer) says nothing of the pin: it + // fails with go's own words, and not as a kind the builder holds until the module changes (issue 1748). + return fmt.Errorf("downloading the asked version %s of %s failed (a download failure that may be retaken): %s", tv.Asked, tv.Package, causeLine(failure)) + } repo, sub, _ := strings.Cut(strings.TrimPrefix(tv.Package, forgePrefix), "/") p := pin{module: tv.Package, repo: repo, sub: sub, short: tv.Asked[:12]} pins.Lock() @@ -263,3 +268,10 @@ func comparePre(a, b string) int { } return strings.Compare(a, b) } + +// unknownRevision says whether a go failure is go not knowing the revision (cmd/go's "unknown revision" and the +// "invalid version" it wraps it in): the only failure that means a commit no tag or trunk holds, which may be the head of a +// pull request. Every other failure is the network's or the forge's. +func unknownRevision(failure string) bool { + return strings.Contains(failure, "unknown revision") || strings.Contains(failure, "invalid version") +} diff --git a/modules/mesh-build-go/cmd/mesh-build-go/versions_test.go b/modules/mesh-build-go/cmd/mesh-build-go/versions_test.go index e9fea937..00c82a64 100644 --- a/modules/mesh-build-go/cmd/mesh-build-go/versions_test.go +++ b/modules/mesh-build-go/cmd/mesh-build-go/versions_test.go @@ -24,6 +24,7 @@ func TestAnAskedVersionIsWrittenIntoTheModfileWhateverGoModNames(t *testing.T) { name, asked, answer string failing bool built, said, edit string + failsWith string // a download failure that is not an unknown revision: the step fails with go's own words }{ {name: "a trunk commit newer than go.mod's", asked: trunk, answer: `{"Path":"` + sdk + `","Version":"v0.1.15-0.20261101000000-aaaaaaaaaaaa","Sum":"h1:zip=","GoModSum":"h1:mod="}`, @@ -34,6 +35,12 @@ func TestAnAskedVersionIsWrittenIntoTheModfileWhateverGoModNames(t *testing.T) { {name: "a group's head Go cannot fetch", asked: commitSHA, failing: true, answer: `{"Path":"` + sdk + `","Error":"invalid version: unknown revision ` + pinShort + `"}`, built: commitSHA, said: "placed from the pull request's head"}, + // The wording of go's errors: "unknown revision" is in cmd/go/internal/modfetch/coderepo_test.go; the lookup and + // connection texts are those of issue 1748's report and of the dial errors go prints for an unreachable forge. + {name: "a lookup that times out is no pin", asked: commitSHA, failing: true, failsWith: "i/o timeout", + answer: `{"Path":"` + sdk + `","Error":"git.novox.be/novox/mesh-sdk/go@` + commitSHA + `: dial tcp: lookup git.novox.be on 10.10.0.3:53: read udp 10.10.0.3:42292->10.10.0.3:53: i/o timeout"}`}, + {name: "a refused connection is no pin", asked: commitSHA, failing: true, failsWith: "connection refused", + answer: `{"Path":"` + sdk + `","Error":"git ls-remote -q origin in /tmp/gopath: dial tcp 10.10.0.1:443: connect: connection refused"}`}, } { t.Run(c.name, func(t *testing.T) { h, states := newPinHarness(t, pinnedGoMod, false, pullList) @@ -69,6 +76,13 @@ func TestAnAskedVersionIsWrittenIntoTheModfileWhateverGoModNames(t *testing.T) { t.Fatal(err) } st := states.waitEnd(t) + if c.failsWith != "" { + if st.State != delivery.StepFailed || !strings.Contains(st.Reason, c.failsWith) || strings.Contains(st.Reason, "no pull request head") || + !strings.Contains(st.Reason, "may be retaken") || delivery.FailedUntilChanged(st.Reason) || h.ran("ls-remote") { + t.Errorf("the download failure ended %s: %q (ls-remote ran: %v)", st.State, st.Reason, h.ran("ls-remote")) + } + return + } if st.State != delivery.StepPassed { t.Fatalf("the step ended %s: %s", st.State, st.Reason) } From b44e600e878e9ee0f2f937bbd8b975f387d3f1d7 Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 11:33:31 +0100 Subject: [PATCH 06/27] Drop artifact-store-tools' controller client; the provisioner client reads placement The controller is not placed and its assignments mirror is frozen (ADR 0590). artifact-store-tools already answers through the seat's holder, so its controller client goes. mesh-provisioner-client reads the seat mesh-placement's placement, which its account is granted whole: a module placed here stays while the seat holds no plan of it, filled from its last plan, and leaves only when neither names it (issue 1126 B12). Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- .../artifact-store-tools/definitions_test.go | 2 +- .../cmd/artifact-store-tools/records.go | 103 +----------- .../cmd/artifact-store-tools/store_test.go | 71 ++++++--- .../cmd/artifact-store-tools/tools.go | 2 +- modules/mesh-provisioner-client/README.md | 11 +- .../cmd/mesh-provisioner-client/client.go | 149 ++++++++++++------ .../mesh-provisioner-client/client_test.go | 62 +++++--- .../testdata/accounts.conf | 2 +- 8 files changed, 212 insertions(+), 190 deletions(-) diff --git a/modules/artifact-store-tools/cmd/artifact-store-tools/definitions_test.go b/modules/artifact-store-tools/cmd/artifact-store-tools/definitions_test.go index 32962696..316baf2c 100644 --- a/modules/artifact-store-tools/cmd/artifact-store-tools/definitions_test.go +++ b/modules/artifact-store-tools/cmd/artifact-store-tools/definitions_test.go @@ -153,7 +153,7 @@ func TestOlderNamesNotReadAreSaidFirst(t *testing.T) { func references(t *testing.T, a *asked) func(map[string]any) (any, error) { f := world() s := &Store{Container: "mesh-registry", Run: f.run(t)} - for _, tl := range Tools(s, Controller{Ask: a.ask}, &Catalogue{Ask: a.ask}) { + for _, tl := range Tools(s, recordsAsked{a}, &Catalogue{Ask: a.ask}) { if tl.Name == "artifact_store_references" { return tl.Run } diff --git a/modules/artifact-store-tools/cmd/artifact-store-tools/records.go b/modules/artifact-store-tools/cmd/artifact-store-tools/records.go index 1f0e2b93..19e4f41a 100644 --- a/modules/artifact-store-tools/cmd/artifact-store-tools/records.go +++ b/modules/artifact-store-tools/cmd/artifact-store-tools/records.go @@ -2,22 +2,16 @@ package main import ( "encoding/json" - "errors" - "fmt" - "strconv" "strings" ) -// What the records say, asked of the controller and never copied (novox/hq ADR 0251 §2). The -// controller decides what the mesh keeps; this bundle only sets that beside what the store holds. +// What the records say, in the shape the seat's holder answers them (Holder; novox/hq ADR 0251 §2, ADR 0571 clause 2): +// the holder decides what the mesh keeps; the tools only set that beside what the store holds. // Asking is how a tool on the mesh is asked: stdio.Ask, or a test's. type Asking func(key string, body any) (json.RawMessage, error) -// ControllerSeat is the seat whose verbs the controller serves. -const ControllerSeat = "mesh-controller" - -// Record is one reference the mesh recorded making, as the controller's `artifacts` answers it. +// Record is one reference the mesh recorded making, as the seat's `artifacts` answers it. type Record struct { Reference string `json:"reference"` Repository string `json:"repository,omitempty"` @@ -27,7 +21,7 @@ type Record struct { Why []string `json:"why,omitempty"` } -// Records is the controller's `artifacts` answer. +// Records is the seat's `artifacts` answer. type Records struct { Store string `json:"store"` KeptBuilds int `json:"kept_builds"` @@ -39,7 +33,7 @@ type Records struct { Note string `json:"-"` } -// CollectAnswer is the controller's `collect` answer. +// CollectAnswer is the seat's `collect` answer. type CollectAnswer struct { DryRun bool `json:"dry_run"` Store string `json:"store"` @@ -53,15 +47,12 @@ type CollectAnswer struct { Skipped int `json:"skipped"` Left int `json:"left"` Stopped string `json:"stopped"` - // Rest is whatever else the controller said, passed on as it said it. + // Rest is whatever else the sweep said, passed on as it said it. Rest map[string]json.RawMessage `json:"-"` } -// Controller asks the controller's seat through the runtime. -type Controller struct{ Ask Asking } - -// answerOf reads a verb's answer whatever wraps it: the controller's {output, ok, answer}, a text the -// runtime handed over, or the protocol's content list. +// answerOf reads a verb's answer whatever wraps it: {output, ok, answer}, a text the runtime handed over, or the +// protocol's content list. func answerOf(raw json.RawMessage) (json.RawMessage, string, bool) { var s string if json.Unmarshal(raw, &s) == nil { @@ -95,89 +86,11 @@ func answerOf(raw json.RawMessage) (json.RawMessage, string, bool) { return raw, string(raw), true } -func (c Controller) verb(name string, args map[string]any) (json.RawMessage, error) { - if c.Ask == nil { - return nil, errors.New("this bundle has no way to ask the controller") - } - raw, err := c.Ask("seat:"+ControllerSeat+"."+name, args) - if err != nil { - return nil, fmt.Errorf("the controller's %s could not be asked: %w", name, err) - } - answer, output, ok := answerOf(raw) - if !ok { - return nil, fmt.Errorf("the controller refused %s: %s", name, lastLine(output)) - } - if len(answer) == 0 || string(answer) == "null" { - return nil, fmt.Errorf("the controller's %s answered no data: %s", name, lastLine(output)) - } - return answer, nil -} - func lastLine(s string) string { lines := strings.Split(strings.TrimSpace(s), "\n") return strings.TrimSpace(lines[len(lines)-1]) } -// Artifacts asks what the records say, with the references already let go of when the answer can carry -// them; when it cannot, without, and says so. -func (c Controller) Artifacts(repository string) (*Records, error) { - args := map[string]any{"collected": "true"} - if repository != "" { - args["repository"] = repository - } - raw, err := c.verb("artifacts", args) - collected := true - note := "" - if err != nil { - delete(args, "collected") - var again error - raw, again = c.verb("artifacts", args) - if again != nil { - return nil, again - } - collected = false - note = "the references the mesh already let go of could not be asked for (" + err.Error() + - "), so a manifest the mesh let go of that the store still holds is counted as unrecorded" - } - var r Records - if err := json.Unmarshal(raw, &r); err != nil { - return nil, fmt.Errorf("the controller's artifacts answer is not readable: %v", err) - } - for i := range r.References { - fill(&r.References[i]) - } - r.CollectedAsked, r.Note = collected, note - return &r, nil -} - -// Collect asks the controller's sweep: a dry run unless confirm, which needs why. -func (c Controller) Collect(why string, confirm bool, most int) (*CollectAnswer, error) { - args := map[string]any{} - if confirm { - if strings.TrimSpace(why) == "" { - return nil, errors.New("a real collection needs why: nothing was asked") - } - args["why"] = why - args["confirm"] = "true" - } - if most > 0 { - args["most"] = strconv.Itoa(most) - } - raw, err := c.verb("collect", args) - if err != nil { - return nil, err - } - var a CollectAnswer - if err := json.Unmarshal(raw, &a); err != nil { - return nil, fmt.Errorf("the controller's collect answer is not readable: %v", err) - } - _ = json.Unmarshal(raw, &a.Rest) - if !confirm && !a.DryRun && len(a.LetGo) > 0 { - return nil, fmt.Errorf("the controller let go of %d artifacts when only a dry run was asked", len(a.LetGo)) - } - return &a, nil -} - // fill reads the repository, digest and kind out of a reference when the answer left them out. func fill(r *Record) { repo, digest, kind := splitReference(r.Reference) diff --git a/modules/artifact-store-tools/cmd/artifact-store-tools/store_test.go b/modules/artifact-store-tools/cmd/artifact-store-tools/store_test.go index 87ba350f..c8a527d3 100644 --- a/modules/artifact-store-tools/cmd/artifact-store-tools/store_test.go +++ b/modules/artifact-store-tools/cmd/artifact-store-tools/store_test.go @@ -9,6 +9,7 @@ import ( "os" "reflect" "sort" + "strconv" "strings" "sync" "testing" @@ -280,7 +281,7 @@ func TestOnlyTheirBytesLeaveOutWhatAnotherStateMarks(t *testing.T) { } } -// asked records every ask, and answers as the controller would. +// asked records every ask, and answers as the seat and the catalogue would. type asked struct { mu sync.Mutex calls []string @@ -293,6 +294,51 @@ type asked struct { noCatalogue bool } +// recordsAsked is the tools' Recorded in a test: each call asked of asked, as `artifacts` or `collect`, with the +// arguments a real run gives the seat's sweep. +type recordsAsked struct{ a *asked } + +func (r recordsAsked) Artifacts(repository string) (*Records, error) { + args := map[string]any{"collected": "true"} + if repository != "" { + args["repository"] = repository + } + raw, err := r.a.ask("artifacts", args) + if err != nil { + return nil, err + } + var recs Records + answer, _, _ := answerOf(raw) + if err := json.Unmarshal(answer, &recs); err != nil { + return nil, err + } + for i := range recs.References { + fill(&recs.References[i]) + } + recs.CollectedAsked = true + return &recs, nil +} + +func (r recordsAsked) Collect(why string, confirm bool, most int) (*CollectAnswer, error) { + args := map[string]any{} + if confirm { + if strings.TrimSpace(why) == "" { + return nil, fmt.Errorf("a real collection needs why: nothing was asked") + } + args["why"], args["confirm"] = why, "true" + } + if most > 0 { + args["most"] = strconv.Itoa(most) + } + raw, err := r.a.ask("collect", args) + if err != nil { + return nil, err + } + var c CollectAnswer + answer, _, _ := answerOf(raw) + return &c, json.Unmarshal(answer, &c) +} + func (a *asked) ask(key string, body any) (json.RawMessage, error) { a.mu.Lock() defer a.mu.Unlock() @@ -304,7 +350,7 @@ func (a *asked) ask(key string, body any) (json.RawMessage, error) { } var answer any switch key { - case "seat:mesh-controller.artifacts": + case "artifacts": answer = records() case CatalogueModules: if a.noCatalogue { @@ -331,7 +377,7 @@ func (a *asked) ask(key string, body any) (json.RawMessage, error) { // The catalogue's tool answers through the runtime as the protocol's content list. raw, _ := json.Marshal(map[string]any{"module": map[string]any{"module": name, "manifest": json.RawMessage(manifest)}}) return json.Marshal(map[string]any{"content": []map[string]any{{"type": "text", "text": string(raw)}}}) - case "seat:mesh-controller.collect": + case "collect": if args["confirm"] == "true" { answer = CollectAnswer{LetGo: []string{"artifact-store://app/server@" + d("m-old")}} } else { @@ -347,7 +393,7 @@ func (a *asked) ask(key string, body any) (json.RawMessage, error) { func tool(t *testing.T, a *asked, name string) func(map[string]any) (any, error) { f := world() s := &Store{Container: "mesh-registry", Run: f.run(t)} - for _, tl := range Tools(s, Controller{Ask: a.ask}, &Catalogue{Ask: a.ask}) { + for _, tl := range Tools(s, recordsAsked{a}, &Catalogue{Ask: a.ask}) { if tl.Name == name { return tl.Run } @@ -390,21 +436,6 @@ func TestARealRunWithoutWhyIsRefusedAndAsksNothing(t *testing.T) { } } -func TestReferencesFallBackWhenCollectedCannotBeCarried(t *testing.T) { - a := &asked{fail: map[string]bool{"collected": true}} - out, err := tool(t, a, "artifact_store_references")(map[string]any{"repository": "app/server"}) - if err != nil { - t.Fatal(err) - } - m := out.(map[string]any) - if m["note"] == nil || m["manifests"] == nil { - t.Errorf("answer %v", m) - } - if _, err := tool(t, a, "artifact_store_references")(map[string]any{"repository": "nope"}); err == nil { - t.Error("an unknown repository was answered") - } -} - func TestTheToolsServedAreTheToolsTheManifestNames(t *testing.T) { raw, err := os.ReadFile("../../module.json") if err != nil { @@ -423,7 +454,7 @@ func TestTheToolsServedAreTheToolsTheManifestNames(t *testing.T) { t.Fatal(err) } var served []string - for _, tl := range Tools(&Store{}, Controller{}, &Catalogue{}) { + for _, tl := range Tools(&Store{}, recordsAsked{&asked{}}, &Catalogue{}) { if !strings.HasPrefix(tl.Name, "artifact_store_") || tl.Description == "" || tl.Run == nil { t.Errorf("tool %q", tl.Name) } diff --git a/modules/artifact-store-tools/cmd/artifact-store-tools/tools.go b/modules/artifact-store-tools/cmd/artifact-store-tools/tools.go index a6656750..daaab485 100644 --- a/modules/artifact-store-tools/cmd/artifact-store-tools/tools.go +++ b/modules/artifact-store-tools/cmd/artifact-store-tools/tools.go @@ -12,7 +12,7 @@ import ( ) // Recorded is what says which references the mesh keeps and lets go of them: the seat's holder (Holder, novox/hq ADR -// 0571 clause 2), or before it the controller (Controller), each in the controller's answer's shape. +// 0571 clause 2), or a test's stand-in. type Recorded interface { Artifacts(repository string) (*Records, error) Collect(why string, confirm bool, most int) (*CollectAnswer, error) diff --git a/modules/mesh-provisioner-client/README.md b/modules/mesh-provisioner-client/README.md index 7c62a365..1132b5d9 100644 --- a/modules/mesh-provisioner-client/README.md +++ b/modules/mesh-provisioner-client/README.md @@ -3,16 +3,15 @@ Holds the `node-provisioner` seat on every node: the provisioner's client (novox/hq ADR 0349 clauses 3 to 5, design 57 P5). Go, one binary (`cmd/mesh-provisioner-client`), run as a service of its own under the account `mesh-provisioner-client`, outside the tool runner, on a bus account of its own, `provisioner.`, delivered as -its own secret `provisioner-broker` (mesh-controller `internal/broker/provisioner.go`). The bus grants that account -its own machine's keys and, to read alone, the seat mesh-provisioner's whole `plans` and the controller's whole -assignments mirror, where a provider's consumers on any machine are bound to it (ADR 0373); nothing else. +its own secret `provisioner-broker` (mesh-sdk `buscompose/provisioner.go`). The bus grants that account its own +machine's keys and, to read alone, the seat mesh-provisioner's whole `plans`, where a provider's consumers on any +machine are bound to it (ADR 0373), and the seat mesh-placement's whole `placement`; nothing else. ## What it does For each module placed on its node — a plan in the seat mesh-provisioner's `plans` (`mesh-provisioner_plans`, -`.`, novox/hq ADR 0570 clause 2), or, for a module the seat holds no plan of, until the controller hands -its lease away, an assignment in `mesh-controller_assignments` whose value carries a `provisioning` plan; a module -leaves only when neither places it: the templates archive +`.`, novox/hq ADR 0570 clause 2); a module the seat mesh-placement still places here stays while the +seat holds no plan of it, filled from its last plan, and leaves only when neither names it (issue 1126): the templates archive by reference and digest, the files it fills (path, template, `owner-at-runtime`, how its program takes a change) and the placement values its templates name — the client: diff --git a/modules/mesh-provisioner-client/cmd/mesh-provisioner-client/client.go b/modules/mesh-provisioner-client/cmd/mesh-provisioner-client/client.go index 5c4eb2a3..44c8e504 100644 --- a/modules/mesh-provisioner-client/cmd/mesh-provisioner-client/client.go +++ b/modules/mesh-provisioner-client/cmd/mesh-provisioner-client/client.go @@ -34,24 +34,25 @@ import ( // back. A module taken off the node loses its needs and its report; the node-engine removes the files the // declaration no longer names. // -// The owners it fills from are placement (the controller's, in the module's assignment), config -// (mesh-config_resolved) and the vault, asked for each secret the module's plan names (secrets.go), and for each -// consumer's credential a provider here lists (consumers.go); and each provider's entries for a consumer here. Every -// key it writes is its own machine's, and every key it reads but the assignments mirror's, which it reads whole for -// who binds a provider here (ADR 0373): its bus account is granted no other. +// The owners it fills from are placement (in the module's plan), config (mesh-config_resolved) and the vault, asked for +// each secret the module's plan names (secrets.go), and for each consumer's credential a provider here lists +// (consumers.go); and each provider's entries for a consumer here. Every key it writes is its own machine's; it reads +// the plans whole, for who binds a provider here (ADR 0373), and the seat mesh-placement's placement, for which +// modules stay here: its bus account is granted no other. // The buckets the client reads and writes, and the subject it reports on. const ( // PlansBucket is where each module's provisioning plan on each node is read: the seat mesh-provisioner's // `plans` (novox/hq ADR 0570 clause 2), read as an assignment's value carried it (asAssignment). PlansBucket = provisions.PlansBucket - // ControllerAssignmentsBucket is the controller's assignments mirror, read for a module the seat holds no plan of - // until the controller hands its lease away: the holder writes plans only for modules with a want, so a module - // that runs without one (nats on novox) would otherwise lose its files' fill (review of 2026-10-30). - ControllerAssignmentsBucket = "mesh-controller_assignments" - ConfigBucket = "mesh-config_resolved" - RegistryBucket = "mesh-provisioner_registry" - AppliedBucket = "mesh-provisioner_applied" + // PlacementBucket is the seat mesh-placement's placement (novox/hq ADR 0567): a module it names on this node stays + // here while the seat mesh-provisioner holds no plan of it (nats on novox runs without a want), filled from its + // last plan, and leaves only when neither names it (issue 1126 B12; the controller's assignments mirror, read for + // this before, is frozen since the controller's end, ADR 0590). + PlacementBucket = delivery.PlacementBucket + ConfigBucket = "mesh-config_resolved" + RegistryBucket = "mesh-provisioner_registry" + AppliedBucket = "mesh-provisioner_applied" ) // AppliedSubject is where the client says what it applied for one module (ADR 0349 clauses 4 and 15). @@ -152,15 +153,17 @@ type Client struct { type state struct { registry map[string]Answer plans map[string]Plan - // seatPlans and controllerAssigned are each source's value by key, as an assignment's value reads: the seat's - // plan wins, and the controller's assignment stands for a module the seat has no plan of. - seatPlans, controllerAssigned map[string][]byte - refused map[string]string // a module whose plan cannot be acted on, and why - config map[string]map[string]json.RawMessage - applied map[string]bool // module → a report is kept - reported map[string][]byte // module → the last report said, undated - last map[string]Report // module → the last report said, dated - secrets map[string]heldSecret // the vault's name → what this run holds of it; never written anywhere + // seatPlans is the seat's plan by key, as an assignment's value reads. + seatPlans map[string][]byte + // placement is the seat mesh-placement's keys as read, and placed the modules it names on this node. + placement *delivery.PlacementKeys + placed map[string]bool + refused map[string]string // a module whose plan cannot be acted on, and why + config map[string]map[string]json.RawMessage + applied map[string]bool // module → a report is kept + reported map[string][]byte // module → the last report said, undated + last map[string]Report // module → the last report said, dated + secrets map[string]heldSecret // the vault's name → what this run holds of it; never written anywhere // items is every item recorded for this node, by collection and contributor: what a collector is filled from. items map[string]map[string]itemValue // recorded is each item's key and its value as kept: what this client compares before it records again. @@ -202,7 +205,7 @@ func (c *Client) Run(ctx context.Context) error { ctx, cancel := context.WithCancel(ctx) defer cancel() kvs := map[string]jetstream.KeyValue{} - for _, b := range []string{PlansBucket, ControllerAssignmentsBucket, ConfigBucket, RegistryBucket, AppliedBucket, + for _, b := range []string{PlansBucket, PlacementBucket, ConfigBucket, RegistryBucket, AppliedBucket, CollectBucket} { kv, err := c.JS.KeyValue(ctx, b) if err != nil { @@ -239,9 +242,10 @@ func (c *Client) Run(ctx context.Context) error { return nil } mine := c.Node + ".>" - // The registry whole, and every machine's assignment: a provider here is bound by consumers on any machine, in - // their plans (ADR 0373). Every other bucket, this machine's keys alone. - for _, b := range []string{RegistryBucket, PlansBucket, ControllerAssignmentsBucket} { + // The registry whole, and every machine's plan: a provider here is bound by consumers on any machine, in their plans + // (ADR 0373); and placement whole, as its account is granted it (its node key and the legacy key are both read). + // Every other bucket, this machine's keys alone. + for _, b := range []string{RegistryBucket, PlansBucket, PlacementBucket} { if err := watch(b, ">"); err != nil { return err } @@ -331,12 +335,13 @@ func (c *Client) Run(ctx context.Context) error { config: map[string]map[string]json.RawMessage{}, applied: map[string]bool{}, reported: map[string][]byte{}, secrets: map[string]heldSecret{}, items: map[string]map[string]itemValue{}, recorded: map[string][]byte{}, assigned: map[string]bool{}, binds: map[string]binding{}, + placement: delivery.NewPlacementKeys(), placed: map[string]bool{}, providing: map[string]bool{}, leftOut: map[string]string{}, bound: map[string]map[string][]byte{}, boundReady: map[string]bool{}, unplaced: map[string]bool{}, boundUsers: map[string]map[string]bool{}} // Every current value first: nothing is filled from half of them. current := map[string]bool{} var early []*nats.Msg - for len(current) < 6 { // the registry, the plans, the controller's assignments, config, applied, collect + for len(current) < 6 { // the registry, the plans, placement, config, applied, collect select { case <-ctx.Done(): return ctx.Err() @@ -448,6 +453,8 @@ func (c *Client) Run(ctx context.Context) error { c.report(ctx, kvs, s, Report{Module: m, Status: StatusFailed, Reason: s.refused[m]}) case hasPlan(s, m): c.reconcile(ctx, kvs, s, m) + case s.placed[m]: + // Placed here with no plan ever read: nothing to fill until the seat composes one. default: c.leave(ctx, kvs, s, m) } @@ -512,7 +519,7 @@ func (c *Client) told(u update) { if module, name, ok := strings.Cut(rest, "."); ok { c.tell(module, Changed{Kind: AskConfig, Key: name}) } - case PlansBucket, ControllerAssignmentsBucket: + case PlansBucket: c.tell(rest, Changed{Kind: AskConfig}) } } @@ -560,34 +567,30 @@ func (c *Client) take(s *state, u update) []string { } // A kind's answer moves what every module waits on. return sortedKeys(s.plans) - case PlansBucket, ControllerAssignmentsBucket: + case PlacementBucket: + return c.takePlacement(s, key, e.Value(), e.Revision(), gone) + case PlansBucket: if s.seatPlans == nil { - s.seatPlans, s.controllerAssigned = map[string][]byte{}, map[string][]byte{} - } - source := s.seatPlans - if u.bucket == ControllerAssignmentsBucket { - source = s.controllerAssigned + s.seatPlans = map[string][]byte{} } if gone { - delete(source, key) - } else if u.bucket == ControllerAssignmentsBucket { - source[key] = e.Value() + delete(s.seatPlans, key) } else if v, err := asAssignment(e.Value()); err != nil { - logf("[provisioner-client] the plan %s cannot be read, so the controller's assignment is read: %v", key, err) - delete(source, key) + logf("[provisioner-client] the plan %s cannot be read, so it is taken as gone: %v", key, err) + delete(s.seatPlans, key) } else { - source[key] = v + s.seatPlans[key] = v } - // The seat's plan where it holds one, the controller's assignment otherwise: a module leaves only when - // neither places it, never because the seat has no plan of it yet. - value, placed := s.seatPlans[key] - if !placed { - value, placed = s.controllerAssigned[key] - } - gone = !placed + value, planned := s.seatPlans[key] + gone = !planned // A value that is not a standing assignment (ended, or in a state: ADR 0408 clause 4) is read as a removed // key, so the module leaves the machine as it does when the key goes (issue 1098). gone = gone || !provider.Standing(value) + if module, mine := strings.CutPrefix(key, c.Node+"."); mine && gone && s.placed[module] { + // Placement still names it: it stays, filled from its last plan and binding as it did, until neither names + // it (takePlacement). + return []string{module} + } // Whom it binds, whichever machine's it is: a provider here listing its consumers is filled again. var providers []string if ended, had := s.binds[key]; gone && had { @@ -695,12 +698,12 @@ func (c *Client) take(s *state, u update) []string { func (c *Client) leftModules(s *state) []string { left := map[string]bool{} for m, kept := range s.applied { - if kept && !hasPlan(s, m) && s.refused[m] == "" { + if kept && !hasPlan(s, m) && s.refused[m] == "" && !s.placed[m] { left[m] = true } } for key := range s.recorded { - if _, m, ok := itemOfKey(c.Node, key); ok && !hasPlan(s, m) && s.refused[m] == "" { + if _, m, ok := itemOfKey(c.Node, key); ok && !hasPlan(s, m) && s.refused[m] == "" && !s.placed[m] { left[m] = true } } @@ -1154,6 +1157,56 @@ func (c *Client) forgetItems(ctx context.Context, kvs map[string]jetstream.KeyVa return removed } +// takePlacement folds one key of the seat mesh-placement's placement in, and answers the modules of this node it moved: +// one it names now stays here without a plan; one it no longer names, with no plan of the seat, leaves. +func (c *Client) takePlacement(s *state, key string, value []byte, revision uint64, gone bool) []string { + node, err := s.placement.Put(key, value, revision, gone) + if node != c.Node { + return nil + } + if err != nil { + logf("[provisioner-client] the placement's %s cannot be read, so this node's placement stays as it was: %v", key, err) + return nil + } + now := map[string]bool{} + if p, _, ok := s.placement.Of(c.Node); ok { + for _, m := range p.Modules { + now[m.Module] = true + } + } + var moved []string + for m := range now { + if !s.placed[m] { + s.placed[m] = true + if !s.assigned[m] { + s.assigned[m] = true + moved = append(moved, m) + } + } + } + for m := range s.placed { + if now[m] { + continue + } + delete(s.placed, m) + if _, planned := s.seatPlans[c.Node+"."+m]; planned { + continue + } + // Neither names it: it leaves, and binds nothing more. + if ended, had := s.binds[c.Node+"."+m]; had { + c.forgetBound(s, ended) + delete(s.binds, c.Node+"."+m) + } + delete(s.plans, m) + delete(s.refused, m) + delete(s.assigned, m) + c.forgetHeld(s, m) + moved = append(moved, m) + } + sort.Strings(moved) + return moved +} + // asAssignment is a plan of the seat mesh-provisioner as the client's rules read an assignment's value: // `{node, module, provisioning: plan}`. func asAssignment(raw []byte) ([]byte, error) { diff --git a/modules/mesh-provisioner-client/cmd/mesh-provisioner-client/client_test.go b/modules/mesh-provisioner-client/cmd/mesh-provisioner-client/client_test.go index 72c25edd..dd0c49a5 100644 --- a/modules/mesh-provisioner-client/cmd/mesh-provisioner-client/client_test.go +++ b/modules/mesh-provisioner-client/cmd/mesh-provisioner-client/client_test.go @@ -81,7 +81,7 @@ func startBus(t *testing.T) *aBus { t.Fatal(err) } b := &aBus{url: s.ClientURL(), domain: js, conn: nc, kv: map[string]jetstream.KeyValue{}} - for _, name := range []string{PlansBucket, ControllerAssignmentsBucket, ConfigBucket, RegistryBucket, AppliedBucket, + for _, name := range []string{PlansBucket, PlacementBucket, ConfigBucket, RegistryBucket, AppliedBucket, CollectBucket, delivery.HaveBucket} { kv, err := js.CreateKeyValue(context.Background(), jetstream.KeyValueConfig{Bucket: name}) if err != nil { @@ -97,7 +97,7 @@ func startBus(t *testing.T) *aBus { `"bucket":"mesh-provisioner_collect","key":".."}`) } for _, kind := range placementKinds { - b.put(t, RegistryBucket, kind, `{"kind":"`+kind+`","domain":"mesh-controller","from":"bucket",`+ + b.put(t, RegistryBucket, kind, `{"kind":"`+kind+`","domain":"mesh-placement","from":"bucket",`+ `"bucket":"mesh-provisioner_plans","key":"."}`) } return b @@ -122,6 +122,36 @@ func (b *aBus) put(t *testing.T, bucket, key, value string) { } } +// place writes this node's placement as the seat mesh-placement keeps it, naming exactly these modules. +func (b *aBus) place(t *testing.T, modules ...string) { + t.Helper() + p := delivery.Placement{V: 1, Node: node} + for _, m := range modules { + p.Modules = append(p.Modules, delivery.PlacedModule{Module: m}) + } + keys := delivery.NewPlacementKeys() + ctx := context.Background() + have, _ := b.kv[PlacementBucket].Keys(ctx) + for _, k := range have { + if e, err := b.kv[PlacementBucket].Get(ctx, k); err == nil { + _, _ = keys.Put(k, e.Value(), e.Revision(), false) + } + } + writes, err := keys.Writes(node, &p) + if err != nil { + t.Fatal(err) + } + for _, w := range writes { + if w.Value == nil { + b.del(t, PlacementBucket, w.Key) + continue + } + if _, err := b.kv[PlacementBucket].Put(ctx, w.Key, w.Value); err != nil { + t.Fatal(err) + } + } +} + func (b *aBus) del(t *testing.T, bucket, key string) { t.Helper() if err := b.kv[bucket].Delete(context.Background(), key); err != nil { @@ -628,38 +658,34 @@ func TestNatsAModuleTakenOffTheNodeLosesItsReport(t *testing.T) { }) } -// Review of 2026-10-30: until the controller hands its lease away, a module the seat holds no plan of is read from -// the controller's assignment (nats on novox runs without a want, so the holder writes it no plan), and a module never -// leaves because its plan is missing: only when neither source places it. -func TestNatsAModuleWithoutASeatPlanIsFilledFromTheControllersAssignmentAndLeavesOnlyWhenNeitherPlacesIt(t *testing.T) { +// Issue 1126 B12 (ADR 0590): the controller's assignments are frozen and go, so what places a module here is the seat +// mesh-placement's placement alone. A module stays while placement names it, even with no plan of the seat +// mesh-provisioner (nats on novox runs without a want): its last plan keeps being filled, and it leaves only when +// neither its plan nor its placement is there. +func TestNatsAModuleStaysWhilePlacementNamesItAndLeavesOnlyWhenNeitherPlacesIt(t *testing.T) { b := startBus(t) heard := b.listen(t) e := startEngine(t, map[string]string{dunstrc: "owned"}) b.config(t, "dunst", "font-size", "13") - p, err := json.Marshal(dunst(t)) - if err != nil { - t.Fatal(err) - } - assignment := fmt.Sprintf(`{"node":%q,"module":"dunst","assigned":"2026-10-14T20:00:00Z","provisioning":%s}`, node, p) - b.put(t, ControllerAssignmentsBucket, node+".dunst", assignment) + b.place(t, "dunst") + b.assign(t, "dunst", dunst(t)) aClient(t, b, e, t.TempDir()) - eventually(t, "dunstrc is filled from the controller's assignment", func() bool { + eventually(t, "dunstrc is filled from the seat's plan", func() bool { return strings.Contains(e.read(t, dunstrc), "Monospace 13") }) - // The seat's plan comes, and goes again: the module stays, filled, its report kept. - b.assign(t, "dunst", dunst(t)) + // The seat's plan goes, placement stays: the module stays, filled from its last plan, its report kept. b.del(t, PlansBucket, node+".dunst") b.config(t, "dunst", "font-size", "15") - eventually(t, "dunstrc follows a change with only the controller's assignment", func() bool { + eventually(t, "dunstrc follows a change with only placement naming it", func() bool { return strings.Contains(e.read(t, dunstrc), "Monospace 15") }) if r, _ := heard.last("dunst"); r.Status == StatusRemoved || len(b.keys(t, AppliedBucket, node+".dunst")) != 1 { - t.Fatalf("the module left when its plan went, though the controller still places it: %+v", r) + t.Fatalf("the module left when its plan went, though placement still names it: %+v", r) } // Neither places it: it leaves. - b.del(t, ControllerAssignmentsBucket, node+".dunst") + b.place(t) eventually(t, "prov.applied says it is removed", func() bool { r, _ := heard.last("dunst") return r.Status == StatusRemoved diff --git a/modules/mesh-provisioner-client/cmd/mesh-provisioner-client/testdata/accounts.conf b/modules/mesh-provisioner-client/cmd/mesh-provisioner-client/testdata/accounts.conf index 783bf836..991f9bf6 100644 --- a/modules/mesh-provisioner-client/cmd/mesh-provisioner-client/testdata/accounts.conf +++ b/modules/mesh-provisioner-client/cmd/mesh-provisioner-client/testdata/accounts.conf @@ -11,7 +11,7 @@ accounts { users = [ { user: "domain", password: "x" } { user: "provisioner.g14", password: "x", permissions: { - publish: { allow: ["$JS.API.CONSUMER.CREATE.KV_mesh-config_resolved.*.$KV.mesh-config_resolved.g14.>", "$JS.API.CONSUMER.CREATE.KV_mesh-provisioner_plans.>", "$JS.API.CONSUMER.CREATE.KV_mesh-controller_assignments.>", "$JS.API.CONSUMER.CREATE.KV_mesh-provisioner_applied.*.$KV.mesh-provisioner_applied.g14.>", "$JS.API.CONSUMER.CREATE.KV_mesh-provisioner_collect.*.$KV.mesh-provisioner_collect.g14.>", "$JS.API.CONSUMER.CREATE.KV_mesh-provisioner_registry.>", "$JS.API.CONSUMER.CREATE.KV_node-engine_have.*.$KV.node-engine_have.g14.node", "$JS.API.CONSUMER.DELETE.KV_node-engine_have.>", "$JS.API.DIRECT.GET.KV_node-engine_have.$KV.node-engine_have.g14.node", "$JS.API.STREAM.INFO.KV_node-engine_have", "$JS.FC.KV_node-engine_have.>", "$JS.API.CONSUMER.CREATE.KV_postgres_bound.*.$KV.postgres_bound.g14.>", "$JS.API.CONSUMER.CREATE.KV_route-adapter_bound.*.$KV.route-adapter_bound.g14.>", "$JS.API.CONSUMER.CREATE.KV_route-proxy_bound.*.$KV.route-proxy_bound.g14.>", "$JS.API.CONSUMER.CREATE.KV_node-tools_bound.*.$KV.node-tools_bound.g14.>", "$JS.API.CONSUMER.DELETE.KV_mesh-config_resolved.>", "$JS.API.CONSUMER.DELETE.KV_mesh-provisioner_plans.>", "$JS.API.CONSUMER.DELETE.KV_mesh-controller_assignments.>", "$JS.API.CONSUMER.DELETE.KV_mesh-provisioner_applied.>", "$JS.API.CONSUMER.DELETE.KV_mesh-provisioner_collect.>", "$JS.API.CONSUMER.DELETE.KV_mesh-provisioner_registry.>", "$JS.API.CONSUMER.DELETE.KV_postgres_bound.>", "$JS.API.CONSUMER.DELETE.KV_route-adapter_bound.>", "$JS.API.CONSUMER.DELETE.KV_route-proxy_bound.>", "$JS.API.CONSUMER.DELETE.KV_node-tools_bound.>", "$JS.API.DIRECT.GET.KV_mesh-config_resolved.$KV.mesh-config_resolved.g14.>", "$JS.API.DIRECT.GET.KV_mesh-provisioner_plans.>", "$JS.API.DIRECT.GET.KV_mesh-controller_assignments.>", "$JS.API.DIRECT.GET.KV_mesh-provisioner_applied.$KV.mesh-provisioner_applied.g14.>", "$JS.API.DIRECT.GET.KV_mesh-provisioner_collect.$KV.mesh-provisioner_collect.g14.>", "$JS.API.DIRECT.GET.KV_mesh-provisioner_registry.>", "$JS.API.DIRECT.GET.KV_postgres_bound.$KV.postgres_bound.g14.>", "$JS.API.DIRECT.GET.KV_route-adapter_bound.$KV.route-adapter_bound.g14.>", "$JS.API.DIRECT.GET.KV_route-proxy_bound.$KV.route-proxy_bound.g14.>", "$JS.API.DIRECT.GET.KV_node-tools_bound.$KV.node-tools_bound.g14.>", "$JS.API.STREAM.INFO.KV_mesh-config_resolved", "$JS.API.STREAM.INFO.KV_mesh-provisioner_plans", "$JS.API.STREAM.INFO.KV_mesh-controller_assignments", "$JS.API.STREAM.INFO.KV_mesh-provisioner_applied", "$JS.API.STREAM.INFO.KV_mesh-provisioner_collect", "$JS.API.STREAM.INFO.KV_mesh-provisioner_registry", "$JS.API.STREAM.INFO.KV_postgres_bound", "$JS.API.STREAM.INFO.KV_route-adapter_bound", "$JS.API.STREAM.INFO.KV_route-proxy_bound", "$JS.API.STREAM.INFO.KV_node-tools_bound", "$JS.FC.KV_mesh-config_resolved.>", "$JS.FC.KV_mesh-provisioner_plans.>", "$JS.FC.KV_mesh-controller_assignments.>", "$JS.FC.KV_mesh-provisioner_applied.>", "$JS.FC.KV_mesh-provisioner_collect.>", "$JS.FC.KV_mesh-provisioner_registry.>", "$JS.FC.KV_postgres_bound.>", "$JS.FC.KV_route-adapter_bound.>", "$JS.FC.KV_route-proxy_bound.>", "$JS.FC.KV_node-tools_bound.>", "$KV.mesh-provisioner_applied.g14.>", "$KV.mesh-provisioner_collect.g14.>", "mesh.seat.mesh-vault.call.get.provisioner~g14", "prov.applied.g14.>", "prov.changed.g14.>"] } + publish: { allow: ["$JS.API.CONSUMER.CREATE.KV_mesh-config_resolved.*.$KV.mesh-config_resolved.g14.>", "$JS.API.CONSUMER.CREATE.KV_mesh-provisioner_plans.>", "$JS.API.CONSUMER.CREATE.KV_mesh-delivery-assigner_placement.>", "$JS.API.CONSUMER.CREATE.KV_mesh-provisioner_applied.*.$KV.mesh-provisioner_applied.g14.>", "$JS.API.CONSUMER.CREATE.KV_mesh-provisioner_collect.*.$KV.mesh-provisioner_collect.g14.>", "$JS.API.CONSUMER.CREATE.KV_mesh-provisioner_registry.>", "$JS.API.CONSUMER.CREATE.KV_node-engine_have.*.$KV.node-engine_have.g14.node", "$JS.API.CONSUMER.DELETE.KV_node-engine_have.>", "$JS.API.DIRECT.GET.KV_node-engine_have.$KV.node-engine_have.g14.node", "$JS.API.STREAM.INFO.KV_node-engine_have", "$JS.FC.KV_node-engine_have.>", "$JS.API.CONSUMER.CREATE.KV_postgres_bound.*.$KV.postgres_bound.g14.>", "$JS.API.CONSUMER.CREATE.KV_route-adapter_bound.*.$KV.route-adapter_bound.g14.>", "$JS.API.CONSUMER.CREATE.KV_route-proxy_bound.*.$KV.route-proxy_bound.g14.>", "$JS.API.CONSUMER.CREATE.KV_node-tools_bound.*.$KV.node-tools_bound.g14.>", "$JS.API.CONSUMER.DELETE.KV_mesh-config_resolved.>", "$JS.API.CONSUMER.DELETE.KV_mesh-provisioner_plans.>", "$JS.API.CONSUMER.DELETE.KV_mesh-delivery-assigner_placement.>", "$JS.API.CONSUMER.DELETE.KV_mesh-provisioner_applied.>", "$JS.API.CONSUMER.DELETE.KV_mesh-provisioner_collect.>", "$JS.API.CONSUMER.DELETE.KV_mesh-provisioner_registry.>", "$JS.API.CONSUMER.DELETE.KV_postgres_bound.>", "$JS.API.CONSUMER.DELETE.KV_route-adapter_bound.>", "$JS.API.CONSUMER.DELETE.KV_route-proxy_bound.>", "$JS.API.CONSUMER.DELETE.KV_node-tools_bound.>", "$JS.API.DIRECT.GET.KV_mesh-config_resolved.$KV.mesh-config_resolved.g14.>", "$JS.API.DIRECT.GET.KV_mesh-provisioner_plans.>", "$JS.API.DIRECT.GET.KV_mesh-delivery-assigner_placement.>", "$JS.API.DIRECT.GET.KV_mesh-provisioner_applied.$KV.mesh-provisioner_applied.g14.>", "$JS.API.DIRECT.GET.KV_mesh-provisioner_collect.$KV.mesh-provisioner_collect.g14.>", "$JS.API.DIRECT.GET.KV_mesh-provisioner_registry.>", "$JS.API.DIRECT.GET.KV_postgres_bound.$KV.postgres_bound.g14.>", "$JS.API.DIRECT.GET.KV_route-adapter_bound.$KV.route-adapter_bound.g14.>", "$JS.API.DIRECT.GET.KV_route-proxy_bound.$KV.route-proxy_bound.g14.>", "$JS.API.DIRECT.GET.KV_node-tools_bound.$KV.node-tools_bound.g14.>", "$JS.API.STREAM.INFO.KV_mesh-config_resolved", "$JS.API.STREAM.INFO.KV_mesh-provisioner_plans", "$JS.API.STREAM.INFO.KV_mesh-delivery-assigner_placement", "$JS.API.STREAM.INFO.KV_mesh-provisioner_applied", "$JS.API.STREAM.INFO.KV_mesh-provisioner_collect", "$JS.API.STREAM.INFO.KV_mesh-provisioner_registry", "$JS.API.STREAM.INFO.KV_postgres_bound", "$JS.API.STREAM.INFO.KV_route-adapter_bound", "$JS.API.STREAM.INFO.KV_route-proxy_bound", "$JS.API.STREAM.INFO.KV_node-tools_bound", "$JS.FC.KV_mesh-config_resolved.>", "$JS.FC.KV_mesh-provisioner_plans.>", "$JS.FC.KV_mesh-delivery-assigner_placement.>", "$JS.FC.KV_mesh-provisioner_applied.>", "$JS.FC.KV_mesh-provisioner_collect.>", "$JS.FC.KV_mesh-provisioner_registry.>", "$JS.FC.KV_postgres_bound.>", "$JS.FC.KV_route-adapter_bound.>", "$JS.FC.KV_route-proxy_bound.>", "$JS.FC.KV_node-tools_bound.>", "$KV.mesh-provisioner_applied.g14.>", "$KV.mesh-provisioner_collect.g14.>", "mesh.seat.mesh-vault.call.get.provisioner~g14", "prov.applied.g14.>", "prov.changed.g14.>"] } subscribe: { allow: ["_INBOX.provisioner.g14.>", "mesh.mod.mesh-vault.event.secret-changed", "prov.ask.g14"] } allow_responses: { max: 1, ttl: "1m" } } } From f723d4372f8fd50c080228290cd6d42993ee5824 Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 11:37:53 +0100 Subject: [PATCH 07/27] Let claude-code read its tools and machines from the bus, not the controller The controller is not placed (ADR 0590), so its tools, modules, nodes and node verbs answer nothing. claude-code now reads the seats' verbs from the seats' contract, the placed modules' replaces from the indexer's manifests, and the machines and where modules run from mesh-placement's placement; the rendered instructions name the seats that own each job (issue 1126 B13). Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- modules/claude-code/README.md | 6 +- .../claude-code/cmd/claude-code/guard_test.go | 34 ++- .../cmd/claude-code/insteadof_test.go | 152 ++++++---- .../cmd/claude-code/instructions.go | 5 +- modules/claude-code/cmd/claude-code/main.go | 64 ++--- modules/claude-code/cmd/claude-code/mesh.go | 267 +++++++++++------- .../testdata/rendered-by-typescript.json | 4 +- modules/claude-code/module.json | 5 +- 8 files changed, 311 insertions(+), 226 deletions(-) diff --git a/modules/claude-code/README.md b/modules/claude-code/README.md index caaf1680..27e57606 100644 --- a/modules/claude-code/README.md +++ b/modules/claude-code/README.md @@ -120,8 +120,10 @@ nothing else of the home. A project is one entry of the projects directory and a The agent kept reaching for `ssh journalctl` while the service manager's `journal` verb existed. So: - **The "instead of" table.** Every seat verb and module tool may say which shell commands it replaces - (`replaces`, in the seat's definition or the module's manifest). The module asks the controller — `tools`, - `modules`, `nodes`, `node` — at start, every ten minutes and on `claude_code_render`, keeps the answer in its + (`replaces`, in the seat's definition or the module's manifest). The module reads the bus — the seats' verbs from the + seats' contract, the placed modules' manifests from `mesh-delivery-indexer.modules` and `.manifests`, the + machines and where each module runs from `mesh-delivery-assigner.placement` (issue 1126: the controller that + answered this is not placed) — at start, every ten minutes and on `claude_code_render`, keeps it in its state (`mesh-tools.json`), and renders it into `CLAUDE.md` as one row per seat or module: `/.` and each verb with the commands it replaces. Generated, never written by hand: a verb that gains `replaces` is in the next render. Ordered by what the guard here refused most, then the machines' seats, the modules, the diff --git a/modules/claude-code/cmd/claude-code/guard_test.go b/modules/claude-code/cmd/claude-code/guard_test.go index 9b719107..5ea512ea 100644 --- a/modules/claude-code/cmd/claude-code/guard_test.go +++ b/modules/claude-code/cmd/claude-code/guard_test.go @@ -8,22 +8,26 @@ import ( "strconv" "strings" "testing" + + "git.novox.be/novox/mesh-sdk/go/catalogue" ) // meshForTheGuard is a mesh of two machines and the verbs that replace what an agent runs over ssh, as the -// controller's records say them. +// seats' contract and the modules' manifests say them. func meshForTheGuard() GuardData { - tools := json.RawMessage(`{"seats":[ - {"seat":"mesh-controller","scope":"mesh","tools":[{"name":"node","description":"What one machine reported it can do.","replaces":["hostnamectl","uptime"]}]}, - {"seat":"node-service-manager","scope":"node","tools":[ - {"name":"status","description":"One unit as the service manager sees it now: its states.","replaces":["systemctl status","systemctl is-active"]}, - {"name":"restart","description":"Restart one unit.","replaces":["systemctl restart"]}, - {"name":"journal","description":"The last lines of one unit's journal.","replaces":["journalctl"]}]}, - {"seat":"node-hostname","scope":"node","tools":[ - {"name":"add","description":"Add one address and its names to the operator's lines of /etc/hosts.","replaces":["edit /etc/hosts","HOSTALIASES"]}]}]}`) - modules := json.RawMessage(`[{"module":"docker","on":["anchor"],"replaces":{"docker_logs":["docker logs"],"docker_list":["docker ps"]}}, - {"module":"systemd","on":["anchor","laptop"]}]`) - return GuardData{Node: "laptop", Replacements: ReplacementsOf(tools, modules), Machines: []Machine{ + seats := []catalogue.Seat{ + {Name: "mesh-placement", Scope: catalogue.ScopeMesh, Serves: []catalogue.Verb{ + {Name: "placement", Description: "Read placement: one node's key.", Replaces: []string{"hostnamectl", "uptime"}}}}, + {Name: "node-service-manager", Scope: catalogue.ScopeNode, Serves: []catalogue.Verb{ + {Name: "status", Description: "One unit as the service manager sees it now: its states.", Replaces: []string{"systemctl status", "systemctl is-active"}}, + {Name: "restart", Description: "Restart one unit.", Replaces: []string{"systemctl restart"}}, + {Name: "journal", Description: "The last lines of one unit's journal.", Replaces: []string{"journalctl"}}}}, + {Name: "node-hostname", Scope: catalogue.ScopeNode, Serves: []catalogue.Verb{ + {Name: "add", Description: "Add one address and its names to the operator's lines of /etc/hosts.", Replaces: []string{"edit /etc/hosts", "HOSTALIASES"}}}}, + } + modules := []ModuleTools{{Module: "docker", On: []string{"anchor"}, Replaces: map[string][]string{"docker_logs": {"docker logs"}, "docker_list": {"docker ps"}}}, + {Module: "systemd", On: []string{"anchor", "laptop"}}} + return GuardData{Node: "laptop", Replacements: ReplacementsOf(seats, modules), Machines: []Machine{ {Name: "anchor", Domains: []string{"anchor" + InternalSuffix, "anchor.example"}, Addresses: []string{"192.0.2.10", "10.10.0.1"}}, {Name: "laptop", Domains: []string{"laptop" + InternalSuffix}, Addresses: []string{"10.10.0.4"}}, }} @@ -69,21 +73,21 @@ func bash(command string) HookInput { func TestSSHToAMeshMachineIsRefusedNamingTheTool(t *testing.T) { g := guard() for command, want := range map[string]string{ - "ssh anchor journalctl -u mesh-controller -n 50": "anchor/node-service-manager.journal", + "ssh anchor journalctl -u mesh-config -n 50": "anchor/node-service-manager.journal", "ssh anchor 'sudo journalctl -fu sshd'": "anchor/node-service-manager.journal", "ssh -p 22 root@anchor.example systemctl status nats": "anchor/node-service-manager.status", "ssh anchor.internal systemctl restart nats": "anchor/node-service-manager.restart", "ssh -o StrictHostKeyChecking=no 10.10.0.1 docker ps -a": "anchor/docker.docker_list", "ssh anchor docker logs --tail 100 nats": "anchor/docker.docker_logs", "ssh laptop docker logs x": "anchor/docker.docker_logs", - "ssh a uptime": "mesh-controller.node", + "ssh a uptime": "mesh-placement.placement", "cd /tmp && ssh anchor journalctl": "anchor/node-service-manager.journal", "sudo -u root ssh anchor journalctl": "anchor/node-service-manager.journal", "timeout 10 ssh anchor journalctl": "anchor/node-service-manager.journal", "env LANG=C ssh anchor journalctl": "anchor/node-service-manager.journal", "bash -c 'ssh anchor journalctl -u x'": "anchor/node-service-manager.journal", `echo "$(ssh anchor journalctl -n 5)" | tail`: "anchor/node-service-manager.journal", - "for n in anchor laptop; do ssh $n uptime; done; ssh anchor uptime": "mesh-controller.node", + "for n in anchor laptop; do ssh $n uptime; done; ssh anchor uptime": "mesh-placement.placement", "ssh -J anchor 203.0.113.9 journalctl": "anchor/node-service-manager.journal", "ssh via-anchor journalctl": "anchor/node-service-manager.journal", "ssh nas.lan journalctl": "anchor/node-service-manager.journal", diff --git a/modules/claude-code/cmd/claude-code/insteadof_test.go b/modules/claude-code/cmd/claude-code/insteadof_test.go index 88bd5fe5..0be167b2 100644 --- a/modules/claude-code/cmd/claude-code/insteadof_test.go +++ b/modules/claude-code/cmd/claude-code/insteadof_test.go @@ -1,43 +1,82 @@ package main import ( + "crypto/sha256" "encoding/json" "errors" + "fmt" "os" "strings" "testing" + + "git.novox.be/novox/mesh-sdk/go/catalogue" + "git.novox.be/novox/mesh-sdk/go/delivery" ) -// askingAController answers the controller's verbs as the seat does: `tools` in-process, the rest as the -// command's output and its JSON. -func askingAController(t *testing.T) Ask { +// aBus is the states claude-code reads, as a test holds them: by read, key and value. +type aBus map[string]map[string][]byte + +func (b aBus) Keys(read string) ([]string, error) { + if b[read] == nil { + return nil, errors.New("no such state") + } + var keys []string + for k := range b[read] { + keys = append(keys, k) + } + return keys, nil +} + +func (b aBus) Get(read, key string) ([]byte, bool, error) { + v, ok := b[read][key] + return v, ok, nil +} + +// someSeats are two seats as the seats' contract says them: one held once for the mesh, one on every machine. +func someSeats() []catalogue.Seat { + return []catalogue.Seat{ + {Name: "mesh-placement", Scope: catalogue.ScopeMesh, Serves: []catalogue.Verb{ + {Name: "placement", Description: "Read placement: one node's key.", Replaces: []string{"hostnamectl", "uptime"}}, + {Name: "propose", Description: "Propose a change."}}}, + {Name: "node-service-manager", Scope: catalogue.ScopeNode, Serves: []catalogue.Verb{ + {Name: "status", Description: "One unit as the service manager sees it now: its states, whether it starts at boot.", Replaces: []string{"systemctl status", "systemctl is-active"}}, + {Name: "journal", Description: "The last lines of one unit's journal.", Replaces: []string{"journalctl"}}}}, + } +} + +// aMesh is two machines, anchor (with a public domain) and laptop, docker and zsh placed on anchor, docker's manifest +// saying what its tool replaces, as the seat mesh-placement and the indexer keep them on the bus. +func aMesh(t *testing.T) aBus { t.Helper() - wrap := func(output string, answer any) json.RawMessage { - raw, _ := json.Marshal(map[string]any{"ok": true, "output": output, "answer": answer}) - return raw - } - return func(address string, args any) (json.RawMessage, error) { - switch address { - case "seat:mesh-controller.tools": - return json.RawMessage(`{"seats":[ - {"seat":"mesh-controller","scope":"mesh","tools":[{"name":"node","description":"What one machine reported it can do, what it is assigned, and why.","replaces":["hostnamectl","uptime"]},{"name":"nodes","description":"Every machine."}]}, - {"seat":"node-service-manager","scope":"node","tools":[ - {"name":"status","description":"One unit as the service manager sees it now: its states, whether it starts at boot.","replaces":["systemctl status","systemctl is-active"]}, - {"name":"journal","description":"The last lines of one unit's journal.","replaces":["journalctl"]}]}]}`), nil - case "seat:mesh-controller.modules": - return wrap("[...]", []any{map[string]any{"module": "docker", "on": []string{"anchor"}, - "replaces": map[string][]string{"docker_logs": {"docker logs"}}}, map[string]any{"module": "zsh", "on": []string{"anchor"}}}), nil - case "seat:mesh-controller.nodes": - return wrap("", []any{map[string]any{"name": "anchor"}, map[string]any{"name": "laptop"}}), nil - case "seat:mesh-controller.node": - node, _ := args.(map[string]any)["node"].(string) - if node == "anchor" { - return wrap("anchor\n mode converged\n public domain Anchor.Example\n\n what it runs\n", nil), nil - } - return wrap("laptop\n mode converged\n", nil), nil + b := aBus{PlacementRead: {}, ModulesRead: {}, ManifestsRead: {}} + for _, p := range []delivery.Placement{ + {V: 1, Node: "anchor", Decided: delivery.NodeDecided{PublicDomain: "Anchor.Example"}, + Modules: []delivery.PlacedModule{{Module: "docker"}, {Module: "zsh"}}}, + {V: 1, Node: "laptop"}, + } { + values, err := delivery.PlacementValues(p) + if err != nil { + t.Fatal(err) + } + for k, v := range values { + b[PlacementRead][k] = v } - return nil, errors.New("no such verb") } + for module, manifest := range map[string]string{ + "docker": `{"module":"docker","replaces":{"docker_logs":["docker logs"]}}`, + "zsh": `{"module":"zsh"}`, + } { + digest := fmt.Sprintf("%x", sha256.Sum256([]byte(manifest))) + mkey, _ := delivery.ManifestsKey(digest) + raw, err := json.Marshal(delivery.Manifest{V: 1, Module: module, JSON: manifest}) + if err != nil { + t.Fatal(err) + } + b[ManifestsRead][mkey] = raw + key, _ := delivery.ModulesKey(module) + b[ModulesRead][key], _ = json.Marshal(delivery.Module{V: 1, None: "nothing is built of it", Manifest: digest, Repository: "novox/mesh-catalog", Commit: "c"}) + } + return b } func resolving(name string) []string { @@ -45,10 +84,11 @@ func resolving(name string) []string { "laptop": {"127.0.0.1", "10.10.0.4"}}[name] } -// What the controller says of its tools and machines is read whole: the seats' verbs, the modules' own tools, -// every machine with its domains and addresses — a loopback address never one of them. -func TestTheMeshsToolsAreAskedOfTheController(t *testing.T) { - m, err := AskMeshTools(askingAController(t), resolving) +// Issue 1126 B13: what the mesh says of its tools and machines is read from the bus whole, never asked of the +// controller: the seats' verbs, the placed modules' own tools, every machine with its domains and addresses — a +// loopback address never one of them. +func TestTheMeshsToolsAreReadFromTheBus(t *testing.T) { + m, err := ReadMeshToolsFrom(aMesh(t), someSeats(), resolving) if err != nil { t.Fatal(err) } @@ -56,7 +96,7 @@ func TestTheMeshsToolsAreAskedOfTheController(t *testing.T) { for _, r := range m.Replacements { addresses = append(addresses, r.Address) } - if got := strings.Join(addresses, ","); got != "mesh-controller.node,node-service-manager.status,node-service-manager.journal,docker.docker_logs" { + if got := strings.Join(addresses, ","); got != "mesh-placement.placement,node-service-manager.status,node-service-manager.journal,docker.docker_logs" { t.Errorf("replacements: %s", got) } if len(m.Machines) != 2 || strings.Join(m.Machines[0].Domains, ",") != "anchor.internal,anchor.example" || @@ -71,12 +111,12 @@ func TestTheMeshsToolsAreAskedOfTheController(t *testing.T) { // **The table is generated, not written** (novox/hq ADR 0245): what the records say a verb replaces is a row, // the machines' seats first, and nothing is rendered where the records say nothing. func TestTheInsteadOfTableIsGeneratedFromTheRecords(t *testing.T) { - m, _ := AskMeshTools(askingAController(t), resolving) + m, _ := ReadMeshToolsFrom(aMesh(t), someSeats(), resolving) table := InsteadOf(&m) for _, want := range []string{ "| `/node-service-manager.` | `status` — `systemctl status`, `systemctl is-active` · `journal` — `journalctl` |", "| `/docker.` | `docker_logs` — `docker logs` |", - "| `mesh-controller.` | `node` — `hostnamectl`, `uptime` |", + "| `mesh-placement.` | `placement` — `hostnamectl`, `uptime` |", "Never `ssh` to a mesh machine", } { if !strings.Contains(table, want) { @@ -84,14 +124,14 @@ func TestTheInsteadOfTableIsGeneratedFromTheRecords(t *testing.T) { } } if strings.Index(table, "node-service-manager.") > strings.Index(table, "docker.") || - strings.Index(table, "docker.") > strings.Index(table, "`mesh-controller.`") { + strings.Index(table, "docker.") > strings.Index(table, "`mesh-placement.`") { t.Errorf("not the machines' seats, then modules, then the mesh's:\n%s", table) } // What the guard here named most comes first: its row, and in its row its verb. - m.Refused = map[string]int{"node-service-manager.journal": 3, "mesh-controller.node": 1} + m.Refused = map[string]int{"node-service-manager.journal": 3, "mesh-placement.placement": 1} ranked := InsteadOf(&m) if !strings.Contains(ranked, "| `/node-service-manager.` | `journal` — `journalctl` · `status`") || - strings.Index(ranked, "`mesh-controller.`") > strings.Index(ranked, "`/docker.`") { + strings.Index(ranked, "`mesh-placement.`") > strings.Index(ranked, "`/docker.`") { t.Errorf("not ranked by the guard's record:\n%s", ranked) } m.Refused = nil @@ -121,7 +161,7 @@ func TestTheInsteadOfTableIsGeneratedFromTheRecords(t *testing.T) { // Asked again with the same answer, nothing is written and nothing renders. func TestTheMeshsToolsAreKeptOnlyWhenTheyChange(t *testing.T) { p := Paths{State: t.TempDir()} - m, _ := AskMeshTools(askingAController(t), resolving) + m, _ := ReadMeshToolsFrom(aMesh(t), someSeats(), resolving) if !KeepMeshTools(p, m) { t.Fatal("the first answer was not kept") } @@ -138,18 +178,32 @@ func TestTheMeshsToolsAreKeptOnlyWhenTheyChange(t *testing.T) { } } -// Where claude-code runs is read from the controller's `modules` answer as it comes — JSON, from `module list -// --json` — and from the printed list too. -func TestTheMachinesRunningTheModuleAreReadFromTheControllersAnswer(t *testing.T) { - asJSON := json.RawMessage(`{"ok":true,"output":"[...]","answer":[{"module":"zsh","on":["a"]},{"module":"claude-code","on":["a","b"]}]}`) - if got := strings.Join(NodesRunning(asJSON, "claude-code"), ","); got != "a,b" { - t.Errorf("from JSON: %q", got) +// Where a module runs is read from the seat mesh-placement's placement (issue 1126 B13), never the controller's answer. +func TestTheMachinesRunningAModuleAreReadFromPlacement(t *testing.T) { + b := aMesh(t) + if got, err := NodesRunning(b, "zsh"); err != nil || strings.Join(got, ",") != "anchor" { + t.Errorf("zsh runs on %v (%v)", got, err) } - printed := json.RawMessage(`{"ok":true,"output":"zsh 1 built x on a\nclaude-code 1 built y on a, b\n"}`) - if got := strings.Join(NodesRunning(printed, "claude-code"), ","); got != "a,b" { - t.Errorf("from the printed list: %q", got) + if got, err := NodesRunning(b, "claude-code"); err != nil || got != nil { + t.Errorf("a module that runs nowhere: %v (%v)", got, err) } - if got := NodesRunning(json.RawMessage(`{"ok":true,"answer":[{"module":"zsh","on":["a"]}]}`), "claude-code"); got != nil { - t.Errorf("a module that runs nowhere: %v", got) + if _, err := NodesRunning(aBus{}, "zsh"); err == nil { + t.Error("an unreadable placement was read as no machine") + } +} + +// Issue 1126 B13 AC1 (ADR 0590): over the seats the mesh defines, the rendered instructions, their table among them, +// name no address of the controller, which is not placed: each job is named by the seat that owns it now. +func TestTheRenderedInstructionsNameNoControllerAddress(t *testing.T) { + m, err := ReadMeshToolsFrom(aMesh(t), catalogue.Seats(), resolving) + if err != nil { + t.Fatal(err) + } + md := RenderWithMesh(Facts{Node: "w", Console: "x"}, Settings{}, nil, "/h", nil, Config{}, &m)["CLAUDE.md"] + if !strings.Contains(md, "## Instead of a shell command") { + t.Fatalf("no table rendered:\n%s", md) + } + if strings.Contains(md, "mesh-controller") { + t.Errorf("the instructions name the controller:\n%s", md) } } diff --git a/modules/claude-code/cmd/claude-code/instructions.go b/modules/claude-code/cmd/claude-code/instructions.go index 117ab529..0fc2eb1a 100644 --- a/modules/claude-code/cmd/claude-code/instructions.go +++ b/modules/claude-code/cmd/claude-code/instructions.go @@ -2,11 +2,12 @@ package main // instructionsText is the managed instruction file, generated from the TypeScript renderer it replaced so // the file under the agent's managed directory did not change by a byte when the module moved to Go; -// a test holds it to that renderer's own output (testdata/rendered-by-typescript.json). +// a test holds it to that renderer's output (testdata/rendered-by-typescript.json), changed since only +// where the controller's verbs were named (issue 1126 B13: the controller is not placed, ADR 0590). func instructionsText(node, role string) string { return "# This machine is a node of a Novox mesh\n\nWritten by the mesh's `claude-code` module. Edit the module's settings or the catalog, never this file:\nit is rewritten whenever the module renders.\n\n## Who this node is\n\n- **Node:** `" + node + "`\n- **Role:** " + role + - "\n- The other nodes, their roles and what runs where: ask the controller (`mesh-controller.nodes`,\n `mesh-controller.node`). Nothing here lists them, because a copy drifts.\n\n## How a session on this mesh works\n\nThe console is the only way to the mesh: the MCP server named `mesh`. It offers five tools, and\neverything else is an address you find and call through them:\n\n- `mesh_search` — words in, matching addresses out. `mesh_describe` — one address's arguments.\n- `mesh_call` — call an address. A seat the mesh holds once is `.` (the mesh's own verbs\n are `mesh-controller.`: `status`, `plan`, `node`, `assign`, `push`, `settings`);\n a module on a machine is `/.`.\n- `mesh_overview` and `mesh_machine` — the mesh's seats and machines, and what one machine runs.\n\n- **Symptom first.** For an error, a failing service or anything unexpected, search the record with the\n literal text before forming a hypothesis: the records module's `records_search`, then\n `records_read`.\n- **Ask the mesh before changing it**, and change it through the controller's verbs or the catalog.\n- **A licence** through the `anthropic-licence-manager` seat's verbs. Never edit the agent's credentials\n file by hand, never print or ask for a token.\n\n## Hard rules\n\n- A file the mesh manages is changed through the verb or the catalog that owns it, never on disk. If\n unsure, `mesh-controller.plan` for the node says what the mesh writes there.\n- Never write to a store's database by hand; schema changes are numbered migrations.\n- Never push to a main branch: a branch, a pull request, and a human approval for every merge.\n- The mesh creates no symlinks, and nobody else does either.\n- A package is declared in a module, never installed by hand.\n\n## Conventions\n\n- Commit messages are concise, in the imperative, about why.\n- Test before pushing: nodes update unattended.\n- The playbooks in the record say how research, decisions, designs, issues and hand-offs are done.\n" + "\n- The other nodes, their roles and what runs where: ask the placement seat (`mesh-placement.placement`),\n or `mesh_overview` and `mesh_machine`. Nothing here lists them, because a copy drifts.\n\n## How a session on this mesh works\n\nThe console is the only way to the mesh: the MCP server named `mesh`. It offers five tools, and\neverything else is an address you find and call through them:\n\n- `mesh_search` — words in, matching addresses out. `mesh_describe` — one address's arguments.\n- `mesh_call` — call an address. A seat the mesh holds once is `.` (the mesh's own seats\n include `mesh-placement`, `mesh-delivery`, `mesh-config` and `mesh-conditions`);\n a module on a machine is `/.`.\n- `mesh_overview` and `mesh_machine` — the mesh's seats and machines, and what one machine runs.\n\n- **Symptom first.** For an error, a failing service or anything unexpected, search the record with the\n literal text before forming a hypothesis: the records module's `records_search`, then\n `records_read`.\n- **Ask the mesh before changing it**, and change it through the seats' verbs or the catalog.\n- **A licence** through the `anthropic-licence-manager` seat's verbs. Never edit the agent's credentials\n file by hand, never print or ask for a token.\n\n## Hard rules\n\n- A file the mesh manages is changed through the verb or the catalog that owns it, never on disk. If\n unsure, `/node-engine.composition` for the module says what the mesh writes there.\n- Never write to a store's database by hand; schema changes are numbered migrations.\n- Never push to a main branch: a branch, a pull request, and a human approval for every merge.\n- The mesh creates no symlinks, and nobody else does either.\n- A package is declared in a module, never installed by hand.\n\n## Conventions\n\n- Commit messages are concise, in the imperative, about why.\n- Test before pushing: nodes update unattended.\n- The playbooks in the record say how research, decisions, designs, issues and hand-offs are done.\n" } diff --git a/modules/claude-code/cmd/claude-code/main.go b/modules/claude-code/cmd/claude-code/main.go index 9e0d6c43..3c53201b 100644 --- a/modules/claude-code/cmd/claude-code/main.go +++ b/modules/claude-code/cmd/claude-code/main.go @@ -23,6 +23,7 @@ import ( stdio "git.novox.be/novox/mesh-sdk/go" "git.novox.be/novox/mesh-sdk/go/asks" + "git.novox.be/novox/mesh-sdk/go/catalogue" ) func say(format string, args ...any) { @@ -204,54 +205,21 @@ func (s stateOf) Get(key string) (json.RawMessage, bool, error) { return e.Value, true, nil } -// nodesRunningMe is the nodes claude-code runs on, from the controller's list of modules — for the register +// nodesRunningMe is the nodes claude-code runs on, from the seat mesh-placement's placement — for the register // tool's question. -func nodesRunningMe() ([]string, error) { - raw, err := ask("seat:mesh-controller.modules", map[string]any{}) - if err != nil { - return nil, err - } - return NodesRunning(raw, "claude-code"), nil -} +func nodesRunningMe() ([]string, error) { return NodesRunning(busStates{}, "claude-code") } -// NodesRunning reads where a module runs from the controller's `modules` answer. The verb runs `module list -// --json`, so the answer is a JSON list of {module, on}: the lines of the printed list it was once read as -// never came, and every "also on" hint and every `nodes: "all"` named no machine. The printed form, ` -// … on a, b`, is still read when that is what came. -func NodesRunning(raw json.RawMessage, module string) []string { - var listed []struct { - Module string `json:"module"` - On []string `json:"on"` +// busStates reads the states the manifest declares in its reads through the runtime. +type busStates struct{} + +func (busStates) Keys(read string) ([]string, error) { return stdio.State(read).Keys() } + +func (busStates) Get(read, key string) ([]byte, bool, error) { + e, err := stdio.State(read).Get(key) + if err != nil || e == nil { + return nil, false, err } - if json.Unmarshal(verbAnswer(raw), &listed) == nil { - for _, m := range listed { - if m.Module == module { - return m.On - } - } - return nil - } - text := outputOf(raw) - if text == "" { - text = string(raw) - } - for _, line := range strings.Split(text, "\n") { - if !strings.HasPrefix(line, module+" ") { - continue - } - _, on, ok := strings.Cut(line, " on ") - if !ok || strings.TrimSpace(on) == "nothing" { - return nil - } - var out []string - for _, n := range strings.Split(on, ",") { - if n = strings.TrimSpace(n); n != "" { - out = append(out, n) - } - } - return out - } - return nil + return e.Value, true, nil } func fingerprintOfFile(path string) any { @@ -320,11 +288,11 @@ func tools(p Paths, servers ServerState, view *ServerView, config ConfigState, c Description: "Claude Code on this machine as the mesh configured it: the licence it holds and when its token expires, what it reports holding, the managed files, the MCP servers registered here. Fingerprints only, never a token.", Run: func(map[string]any) (any, error) { return status(p), nil }}, {Name: "claude_code_render", - Description: "Write Claude Code's managed directory now, from the mesh's facts, this module's settings and the servers registered here — after asking the controller again what each tool replaces and which machines the mesh has (the instructions' table and the shell's guard).", + Description: "Write Claude Code's managed directory now, from the mesh's facts, this module's settings and the servers registered here — after reading the bus again for what each tool replaces and which machines the mesh has (the instructions' table and the shell's guard).", Run: func(map[string]any) (any, error) { answer := map[string]any{} - if m, err := AskMeshTools(ask, lookup); err != nil { - answer["asked"] = "the controller did not answer in full (" + err.Error() + "); what was kept is rendered" + if m, err := ReadMeshToolsFrom(busStates{}, catalogue.Seats(), lookup); err != nil { + answer["asked"] = "the bus could not be read in full (" + err.Error() + "); what was kept is rendered" } else { KeepMeshTools(p, m) } diff --git a/modules/claude-code/cmd/claude-code/mesh.go b/modules/claude-code/cmd/claude-code/mesh.go index 91229d23..d27b234b 100644 --- a/modules/claude-code/cmd/claude-code/mesh.go +++ b/modules/claude-code/cmd/claude-code/mesh.go @@ -4,21 +4,27 @@ package main // shell need it (novox/hq ADR 0245): every seat verb and module tool that says what shell command it // replaces, and the mesh's machines by every name and address a session could reach one by. // -// Asked of the controller — `tools` for the seats' verbs, `modules` for the modules' own tools, `nodes` -// and `node` for the machines — at start and every few minutes, kept in the module's state so a render -// never waits for the bus, and rendered whenever it changes. Nothing here is written by hand: a verb that -// gains a `replaces` in the records is in the next render's table and the guard's next refusal. +// Read from the bus at start and every few minutes (issue 1126 B13; the controller that answered this before is +// not placed, novox/hq ADR 0590): the seats' verbs from the seats' contract (mesh-sdk catalogue), the modules' +// own tools from the manifests the indexer keeps (`mesh-delivery-indexer.modules` and `.manifests`), and the +// machines and where each module runs from the seat mesh-placement's `placement`. Kept in the module's state so +// a render never waits for the bus, and rendered whenever it changes. Nothing here is written by hand: a verb +// that gains a `replaces` is in the next render's table and the guard's next refusal. import ( "context" "encoding/json" + "errors" + "fmt" "net" "os" "path/filepath" - "regexp" "sort" "strings" "time" + + "git.novox.be/novox/mesh-sdk/go/catalogue" + "git.novox.be/novox/mesh-sdk/go/delivery" ) // Replacement is one verb or tool and the shell commands it is the mesh's way to do. @@ -41,11 +47,11 @@ type Machine struct { Addresses []string `json:"addresses,omitempty"` } -// MeshTools is what the controller said, as kept in the module's state. +// MeshTools is what the bus said, as kept in the module's state. type MeshTools struct { Replacements []Replacement `json:"replacements"` Machines []Machine `json:"machines"` - // Asked is when the controller last answered. + // Asked is when the bus was last read whole. Asked string `json:"asked,omitempty"` // Refused is how often the guard here named each tool instead of a work-around, from its record: the // table's order. Never kept — read from the record at each render. @@ -78,42 +84,120 @@ func ReadMeshTools(p Paths) *MeshTools { return &m } -// verbAnswer is a controller verb's answer: the command's printed output, and its JSON when it printed one. -func verbAnswer(raw json.RawMessage) json.RawMessage { - var r struct { - Output string `json:"output"` - Answer json.RawMessage `json:"answer"` +// The states read, each declared in the manifest's reads. +const ( + PlacementRead = delivery.PlacementRead + ModulesRead = delivery.IndexerModule + ".modules" + ManifestsRead = delivery.IndexerModule + ".manifests" +) + +// States reads the module states the manifest declares in its reads: a state's keys, and one key's value. +type States interface { + Keys(read string) ([]string, error) + Get(read, key string) ([]byte, bool, error) +} + +// ModuleTools is one module's own tools that replace a command, as its manifest says (`replaces`), and where it runs. +type ModuleTools struct { + Module string + On []string + Replaces map[string][]string +} + +// placements is every node's placement, from the seat mesh-placement's state. +func placements(st States) (map[string]delivery.Placement, error) { + keys, err := st.Keys(PlacementRead) + if err != nil { + return nil, fmt.Errorf("%s: %w", PlacementRead, err) } - if json.Unmarshal(raw, &r) != nil { - return raw - } - if len(r.Answer) > 0 && string(r.Answer) != "null" { - return r.Answer - } - if r.Output != "" { - t := strings.TrimSpace(r.Output) - for _, open := range []string{"[", "{"} { - if strings.HasPrefix(t, open) { - return json.RawMessage(t) - } - if i := strings.Index(t, "\n"+open); i >= 0 { - return json.RawMessage(strings.TrimSpace(t[i+1:])) - } + read := delivery.NewPlacementKeys() + for _, k := range keys { + v, found, err := st.Get(PlacementRead, k) + if err != nil { + return nil, fmt.Errorf("%s %s: %w", PlacementRead, k, err) + } + if found { + _, _ = read.Put(k, v, 0, false) // a key that does not read places nothing } - return json.RawMessage(nil) } - return raw + return read.All(), nil } -func outputOf(raw json.RawMessage) string { - var r struct { - Output string `json:"output"` +// runsOn is, by module, the nodes placement puts it on, sorted. +func runsOn(placed map[string]delivery.Placement) map[string][]string { + out := map[string][]string{} + for node, p := range placed { + for _, m := range p.Modules { + out[m.Module] = append(out[m.Module], node) + } } - _ = json.Unmarshal(raw, &r) - return r.Output + for _, nodes := range out { + sort.Strings(nodes) + } + return out } -var publicDomain = regexp.MustCompile(`(?m)^\s*public domain\s+(\S+)\s*$`) +// NodesRunning is the nodes placement puts module on. +func NodesRunning(st States, module string) ([]string, error) { + placed, err := placements(st) + if err != nil { + return nil, err + } + return runsOn(placed)[module], nil +} + +// modulesTools is every placed module's own tools that replace a command, by module, from the manifest the indexer +// keeps of it. A module whose manifest cannot be read is left out and said in the error. +func modulesTools(st States, on map[string][]string) ([]ModuleTools, error) { + var out []ModuleTools + var problems []error + modules := make([]string, 0, len(on)) + for m := range on { + modules = append(modules, m) + } + sort.Strings(modules) + for _, module := range modules { + key, err := delivery.ModulesKey(module) + if err != nil { + continue + } + raw, found, err := st.Get(ModulesRead, key) + if err != nil || !found { + if err != nil { + problems = append(problems, fmt.Errorf("%s %s: %w", ModulesRead, module, err)) + } + continue + } + m, err := delivery.DecodeModule(raw) + if err != nil || m.Manifest == "" { + continue + } + mkey, err := delivery.ManifestsKey(m.Manifest) + if err != nil { + continue + } + raw, found, err = st.Get(ManifestsRead, mkey) + if err != nil || !found { + if err != nil { + problems = append(problems, fmt.Errorf("%s of %s: %w", ManifestsRead, module, err)) + } + continue + } + kept, err := delivery.DecodeManifest(raw) + if err != nil { + problems = append(problems, fmt.Errorf("the manifest of %s: %w", module, err)) + continue + } + var man struct { + Replaces map[string][]string `json:"replaces"` + } + if json.Unmarshal([]byte(kept.JSON), &man) != nil || len(man.Replaces) == 0 { + continue + } + out = append(out, ModuleTools{Module: module, On: on[module], Replaces: man.Replaces}) + } + return out, errors.Join(problems...) +} // firstSentence is what a verb does, short: its description to the first full stop, at most 70 characters. func firstSentence(s string) string { @@ -131,52 +215,33 @@ func firstSentence(s string) string { return s } -// ReplacementsOf reads the controller's `tools` and `modules` answers: the seats' verbs first, in the -// records' order, then the modules' own tools by module and tool. -func ReplacementsOf(tools, modules json.RawMessage) []Replacement { +// ReplacementsOf is every seat verb and module tool that says it replaces a command: the seats' verbs first, in the +// seats' order, then the modules' own tools by module and tool. +func ReplacementsOf(seats []catalogue.Seat, modules []ModuleTools) []Replacement { var out []Replacement - var seats struct { - Seats []struct { - Seat string `json:"seat"` - Scope string `json:"scope"` - Tools []struct { - Name string `json:"name"` - Description string `json:"description"` - Replaces []string `json:"replaces"` - } `json:"tools"` - } `json:"seats"` - } - if json.Unmarshal(tools, &seats) == nil { - for _, s := range seats.Seats { - for _, t := range s.Tools { - if len(t.Replaces) == 0 { - continue - } - out = append(out, Replacement{Address: s.Seat + "." + t.Name, NodeScoped: s.Scope == "node", Seat: true, - Does: firstSentence(t.Description), Replaces: t.Replaces}) + for _, s := range seats { + for _, v := range s.Serves { + if len(v.Replaces) == 0 { + continue } + out = append(out, Replacement{Address: s.Name + "." + v.Name, NodeScoped: s.Scope == catalogue.ScopeNode, Seat: true, + Does: firstSentence(v.Description), Replaces: v.Replaces}) } } - var listed []struct { - Module string `json:"module"` - On []string `json:"on"` - Replaces map[string][]string `json:"replaces"` - } - if json.Unmarshal(modules, &listed) == nil { - sort.SliceStable(listed, func(i, j int) bool { return listed[i].Module < listed[j].Module }) - for _, m := range listed { - names := make([]string, 0, len(m.Replaces)) - for t := range m.Replaces { - names = append(names, t) - } - sort.Strings(names) - for _, t := range names { - if len(m.Replaces[t]) == 0 { - continue - } - out = append(out, Replacement{Address: m.Module + "." + t, NodeScoped: true, Replaces: m.Replaces[t], On: m.On, - Does: strings.ReplaceAll(strings.TrimPrefix(t, strings.ReplaceAll(m.Module, "-", "_")+"_"), "_", " ")}) + sorted := append([]ModuleTools(nil), modules...) + sort.SliceStable(sorted, func(i, j int) bool { return sorted[i].Module < sorted[j].Module }) + for _, m := range sorted { + names := make([]string, 0, len(m.Replaces)) + for t := range m.Replaces { + names = append(names, t) + } + sort.Strings(names) + for _, t := range names { + if len(m.Replaces[t]) == 0 { + continue } + out = append(out, Replacement{Address: m.Module + "." + t, NodeScoped: true, Replaces: m.Replaces[t], On: m.On, + Does: strings.ReplaceAll(strings.TrimPrefix(t, strings.ReplaceAll(m.Module, "-", "_")+"_"), "_", " ")}) } } return out @@ -190,36 +255,24 @@ func lookup(name string) []string { return addrs } -// AskMeshTools asks the controller now. A part that does not answer is left out and said in the error; -// what did answer is kept. -func AskMeshTools(ask Ask, resolve func(string) []string) (MeshTools, error) { +// ReadMeshToolsFrom reads the bus now: the seats' verbs, the placed modules' own tools, and every node placement names +// with its domains and addresses. A part that cannot be read is left out and said in the error; what was read is kept. +func ReadMeshToolsFrom(st States, seats []catalogue.Seat, resolve func(string) []string) (MeshTools, error) { var m MeshTools - tools, terr := ask("seat:mesh-controller.tools", map[string]any{}) - modules, merr := ask("seat:mesh-controller.modules", map[string]any{}) - if terr != nil && merr != nil { - return m, terr - } - m.Replacements = ReplacementsOf(verbAnswer(tools), verbAnswer(modules)) - nodesRaw, err := ask("seat:mesh-controller.nodes", map[string]any{}) + placed, err := placements(st) if err != nil { + m.Replacements = ReplacementsOf(seats, nil) return m, err } - var nodes []struct { - Name string `json:"name"` - } - _ = json.Unmarshal(verbAnswer(nodesRaw), &nodes) - for _, n := range nodes { - if n.Name == "" { - continue - } - machine := Machine{Name: n.Name, Domains: []string{n.Name + InternalSuffix}} - if shown, err := ask("seat:mesh-controller.node", map[string]any{"node": n.Name}); err == nil { - if d := publicDomain.FindStringSubmatch(outputOf(shown)); d != nil { - machine.Domains = append(machine.Domains, strings.ToLower(d[1])) - } + modules, merr := modulesTools(st, runsOn(placed)) + m.Replacements = ReplacementsOf(seats, modules) + for node, p := range placed { + machine := Machine{Name: node, Domains: []string{node + InternalSuffix}} + if d := strings.ToLower(strings.TrimSpace(p.Decided.PublicDomain)); d != "" { + machine.Domains = append(machine.Domains, d) } seen := map[string]bool{} - for _, name := range append([]string{n.Name}, machine.Domains...) { + for _, name := range append([]string{node}, machine.Domains...) { for _, a := range resolve(name) { if !seen[a] && !net.ParseIP(a).IsLoopback() { seen[a] = true @@ -231,7 +284,7 @@ func AskMeshTools(ask Ask, resolve func(string) []string) (MeshTools, error) { m.Machines = append(m.Machines, machine) } sort.Slice(m.Machines, func(i, j int) bool { return m.Machines[i].Name < m.Machines[j].Name }) - return m, nil + return m, merr } // KeepMeshTools writes what was asked to the module's state when it differs from what was kept, and @@ -281,19 +334,19 @@ func guardFiles(p Paths, m *MeshTools) *GuardFiles { return &GuardFiles{Exe: exe, Data: GuardDataOf(p, m), WaitsDir: WaitsDirPath(p)} } -// MeshToolsEvery is how often the controller is asked again. +// MeshToolsEvery is how often the bus is read again. const MeshToolsEvery = 10 * time.Minute -// refreshMeshTools asks the controller at start and every few minutes, and renders when what it said changed. +// refreshMeshTools reads the bus at start and every few minutes, and renders when what it said changed. func refreshMeshTools(p Paths) { for { - m, err := AskMeshTools(ask, lookup) + m, err := ReadMeshToolsFrom(busStates{}, catalogue.Seats(), lookup) if err != nil { - say("asking the controller what each tool replaces: %v", err) + say("reading what each tool replaces and which machines the mesh has: %v", err) } if (err == nil || len(m.Replacements) > 0) && KeepMeshTools(p, m) { if _, err := RenderNow(p, writeManaged); err != nil { - say("rendering what the controller said of its tools: %v", err) + say("rendering what the bus said of the tools: %v", err) } else { say("the mesh's tools changed: %d replace a command, %d machines; rendered", len(m.Replacements), len(m.Machines)) } @@ -306,7 +359,7 @@ func refreshMeshTools(p Paths) { func GuardStatus(p Paths, last int) map[string]any { m := ReadMeshTools(p) d := GuardDataOf(p, m) - asked := "never: the controller has not answered yet" + asked := "never: the bus has not been read whole yet" if m != nil { asked = m.Asked } diff --git a/modules/claude-code/cmd/claude-code/testdata/rendered-by-typescript.json b/modules/claude-code/cmd/claude-code/testdata/rendered-by-typescript.json index 40e6a530..76bab54b 100644 --- a/modules/claude-code/cmd/claude-code/testdata/rendered-by-typescript.json +++ b/modules/claude-code/cmd/claude-code/testdata/rendered-by-typescript.json @@ -32,11 +32,11 @@ "withKey": { "managed-mcp.json": "{\n \"mcpServers\": {\n \"anton\": {\n \"type\": \"stdio\",\n \"command\": \"node\",\n \"args\": [\n \"/a/b.js\"\n ],\n \"env\": {}\n },\n \"docs\": {\n \"type\": \"stdio\",\n \"command\": \"docs-mcp\",\n \"args\": [\n \"--x\"\n ]\n },\n \"mesh\": {\n \"type\": \"http\",\n \"url\": \"http://127.0.0.1:4270/mcp\"\n },\n \"search\": {\n \"type\": \"http\",\n \"url\": \"https://s.example/mcp\"\n }\n }\n}\n", "managed-settings.json": "{\n \"attribution\": {\n \"commit\": \"\",\n \"pr\": \"\"\n },\n \"allowAllClaudeAiMcps\": true,\n \"apiKeyHelper\": \"/state/api-key-helper\"\n}\n", - "CLAUDE.md": "# This machine is a node of a Novox mesh\n\nWritten by the mesh's `claude-code` module. Edit the module's settings or the catalog, never this file:\nit is rewritten whenever the module renders.\n\n## Who this node is\n\n- **Node:** `workstation`\n- **Role:** the laptop\n- The other nodes, their roles and what runs where: ask the controller (`mesh-controller.nodes`,\n `mesh-controller.node`). Nothing here lists them, because a copy drifts.\n\n## How a session on this mesh works\n\nThe console is the only way to the mesh: the MCP server named `mesh`. It offers five tools, and\neverything else is an address you find and call through them:\n\n- `mesh_search` — words in, matching addresses out. `mesh_describe` — one address's arguments.\n- `mesh_call` — call an address. A seat the mesh holds once is `.` (the mesh's own verbs\n are `mesh-controller.`: `status`, `plan`, `node`, `assign`, `push`, `settings`);\n a module on a machine is `/.`.\n- `mesh_overview` and `mesh_machine` — the mesh's seats and machines, and what one machine runs.\n\n- **Symptom first.** For an error, a failing service or anything unexpected, search the record with the\n literal text before forming a hypothesis: the records module's `records_search`, then\n `records_read`.\n- **Ask the mesh before changing it**, and change it through the controller's verbs or the catalog.\n- **A licence** through the `anthropic-licence-manager` seat's verbs. Never edit the agent's credentials\n file by hand, never print or ask for a token.\n\n## Hard rules\n\n- A file the mesh manages is changed through the verb or the catalog that owns it, never on disk. If\n unsure, `mesh-controller.plan` for the node says what the mesh writes there.\n- Never write to a store's database by hand; schema changes are numbered migrations.\n- Never push to a main branch: a branch, a pull request, and a human approval for every merge.\n- The mesh creates no symlinks, and nobody else does either.\n- A package is declared in a module, never installed by hand.\n\n## Conventions\n\n- Commit messages are concise, in the imperative, about why.\n- Test before pushing: nodes update unattended.\n- The playbooks in the record say how research, decisions, designs, issues and hand-offs are done.\n" + "CLAUDE.md": "# This machine is a node of a Novox mesh\n\nWritten by the mesh's `claude-code` module. Edit the module's settings or the catalog, never this file:\nit is rewritten whenever the module renders.\n\n## Who this node is\n\n- **Node:** `workstation`\n- **Role:** the laptop\n- The other nodes, their roles and what runs where: ask the placement seat (`mesh-placement.placement`),\n or `mesh_overview` and `mesh_machine`. Nothing here lists them, because a copy drifts.\n\n## How a session on this mesh works\n\nThe console is the only way to the mesh: the MCP server named `mesh`. It offers five tools, and\neverything else is an address you find and call through them:\n\n- `mesh_search` — words in, matching addresses out. `mesh_describe` — one address's arguments.\n- `mesh_call` — call an address. A seat the mesh holds once is `.` (the mesh's own seats\n include `mesh-placement`, `mesh-delivery`, `mesh-config` and `mesh-conditions`);\n a module on a machine is `/.`.\n- `mesh_overview` and `mesh_machine` — the mesh's seats and machines, and what one machine runs.\n\n- **Symptom first.** For an error, a failing service or anything unexpected, search the record with the\n literal text before forming a hypothesis: the records module's `records_search`, then\n `records_read`.\n- **Ask the mesh before changing it**, and change it through the seats' verbs or the catalog.\n- **A licence** through the `anthropic-licence-manager` seat's verbs. Never edit the agent's credentials\n file by hand, never print or ask for a token.\n\n## Hard rules\n\n- A file the mesh manages is changed through the verb or the catalog that owns it, never on disk. If\n unsure, `/node-engine.composition` for the module says what the mesh writes there.\n- Never write to a store's database by hand; schema changes are numbered migrations.\n- Never push to a main branch: a branch, a pull request, and a human approval for every merge.\n- The mesh creates no symlinks, and nobody else does either.\n- A package is declared in a module, never installed by hand.\n\n## Conventions\n\n- Commit messages are concise, in the imperative, about why.\n- Test before pushing: nodes update unattended.\n- The playbooks in the record say how research, decisions, designs, issues and hand-offs are done.\n" }, "plain": { "managed-mcp.json": "{\n \"mcpServers\": {\n \"mesh\": {\n \"type\": \"http\",\n \"url\": \"http://127.0.0.1:4270/mcp\"\n }\n }\n}\n", "managed-settings.json": "{\n \"attribution\": {\n \"commit\": \"\",\n \"pr\": \"\"\n },\n \"allowAllClaudeAiMcps\": true\n}\n", - "CLAUDE.md": "# This machine is a node of a Novox mesh\n\nWritten by the mesh's `claude-code` module. Edit the module's settings or the catalog, never this file:\nit is rewritten whenever the module renders.\n\n## Who this node is\n\n- **Node:** `workstation`\n- **Role:** not stated — set it in this module's settings for the node\n- The other nodes, their roles and what runs where: ask the controller (`mesh-controller.nodes`,\n `mesh-controller.node`). Nothing here lists them, because a copy drifts.\n\n## How a session on this mesh works\n\nThe console is the only way to the mesh: the MCP server named `mesh`. It offers five tools, and\neverything else is an address you find and call through them:\n\n- `mesh_search` — words in, matching addresses out. `mesh_describe` — one address's arguments.\n- `mesh_call` — call an address. A seat the mesh holds once is `.` (the mesh's own verbs\n are `mesh-controller.`: `status`, `plan`, `node`, `assign`, `push`, `settings`);\n a module on a machine is `/.`.\n- `mesh_overview` and `mesh_machine` — the mesh's seats and machines, and what one machine runs.\n\n- **Symptom first.** For an error, a failing service or anything unexpected, search the record with the\n literal text before forming a hypothesis: the records module's `records_search`, then\n `records_read`.\n- **Ask the mesh before changing it**, and change it through the controller's verbs or the catalog.\n- **A licence** through the `anthropic-licence-manager` seat's verbs. Never edit the agent's credentials\n file by hand, never print or ask for a token.\n\n## Hard rules\n\n- A file the mesh manages is changed through the verb or the catalog that owns it, never on disk. If\n unsure, `mesh-controller.plan` for the node says what the mesh writes there.\n- Never write to a store's database by hand; schema changes are numbered migrations.\n- Never push to a main branch: a branch, a pull request, and a human approval for every merge.\n- The mesh creates no symlinks, and nobody else does either.\n- A package is declared in a module, never installed by hand.\n\n## Conventions\n\n- Commit messages are concise, in the imperative, about why.\n- Test before pushing: nodes update unattended.\n- The playbooks in the record say how research, decisions, designs, issues and hand-offs are done.\n" + "CLAUDE.md": "# This machine is a node of a Novox mesh\n\nWritten by the mesh's `claude-code` module. Edit the module's settings or the catalog, never this file:\nit is rewritten whenever the module renders.\n\n## Who this node is\n\n- **Node:** `workstation`\n- **Role:** not stated — set it in this module's settings for the node\n- The other nodes, their roles and what runs where: ask the placement seat (`mesh-placement.placement`),\n or `mesh_overview` and `mesh_machine`. Nothing here lists them, because a copy drifts.\n\n## How a session on this mesh works\n\nThe console is the only way to the mesh: the MCP server named `mesh`. It offers five tools, and\neverything else is an address you find and call through them:\n\n- `mesh_search` — words in, matching addresses out. `mesh_describe` — one address's arguments.\n- `mesh_call` — call an address. A seat the mesh holds once is `.` (the mesh's own seats\n include `mesh-placement`, `mesh-delivery`, `mesh-config` and `mesh-conditions`);\n a module on a machine is `/.`.\n- `mesh_overview` and `mesh_machine` — the mesh's seats and machines, and what one machine runs.\n\n- **Symptom first.** For an error, a failing service or anything unexpected, search the record with the\n literal text before forming a hypothesis: the records module's `records_search`, then\n `records_read`.\n- **Ask the mesh before changing it**, and change it through the seats' verbs or the catalog.\n- **A licence** through the `anthropic-licence-manager` seat's verbs. Never edit the agent's credentials\n file by hand, never print or ask for a token.\n\n## Hard rules\n\n- A file the mesh manages is changed through the verb or the catalog that owns it, never on disk. If\n unsure, `/node-engine.composition` for the module says what the mesh writes there.\n- Never write to a store's database by hand; schema changes are numbered migrations.\n- Never push to a main branch: a branch, a pull request, and a human approval for every merge.\n- The mesh creates no symlinks, and nobody else does either.\n- A package is declared in a module, never installed by hand.\n\n## Conventions\n\n- Commit messages are concise, in the imperative, about why.\n- Test before pushing: nodes update unattended.\n- The playbooks in the record say how research, decisions, designs, issues and hand-offs are done.\n" } } \ No newline at end of file diff --git a/modules/claude-code/module.json b/modules/claude-code/module.json index 48f1a194..b1b0da23 100644 --- a/modules/claude-code/module.json +++ b/modules/claude-code/module.json @@ -35,7 +35,10 @@ "waits" ], "reads": [ - "claude-licence-manager.bindings" + "claude-licence-manager.bindings", + "mesh-delivery-assigner.placement", + "mesh-delivery-indexer.modules", + "mesh-delivery-indexer.manifests" ], "tools": [ "claude_code_status", From f83e6e4713227aaf9c680a06c4e94ad8cbc06e0e Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 11:42:37 +0100 Subject: [PATCH 08/27] Make each sensitive vault verb judge its own caller MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The controller judged the operator's account for approving or deleting a retirement, rotating a secret and exporting sealed copies; it is not placed, and these verbs are reached through the mesh MCP server on each machine. Each now answers the operator's account (person.), or a caller naming its own recorded hand act for that verb and subject, and nothing else (ADR 0590 §8, issue 1126). Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- .../cmd/mesh-vault/followups_test.go | 8 +- .../mesh-vault/cmd/mesh-vault/intake_test.go | 2 +- .../mesh-vault/cmd/mesh-vault/sensitive.go | 89 +++++++++++++++++++ .../cmd/mesh-vault/sensitive_test.go | 72 +++++++++++++++ modules/mesh-vault/cmd/mesh-vault/tools.go | 53 +++++++---- .../mesh-vault/cmd/mesh-vault/tools_test.go | 6 +- .../mesh-vault/cmd/mesh-vault/vault_test.go | 2 +- 7 files changed, 208 insertions(+), 24 deletions(-) create mode 100644 modules/mesh-vault/cmd/mesh-vault/sensitive.go create mode 100644 modules/mesh-vault/cmd/mesh-vault/sensitive_test.go diff --git a/modules/mesh-vault/cmd/mesh-vault/followups_test.go b/modules/mesh-vault/cmd/mesh-vault/followups_test.go index aa5fbb8d..8e2b69f7 100644 --- a/modules/mesh-vault/cmd/mesh-vault/followups_test.go +++ b/modules/mesh-vault/cmd/mesh-vault/followups_test.go @@ -34,10 +34,10 @@ func TestTheRetirementToolsPassTheActThrough(t *testing.T) { sort.Strings(set) defs := definitions(&Env{Custody: c.Custody}) approve := toolNamed(t, defs, "provisioner_retire_approve") - if _, err := approve.runAs(ControllerCaller, map[string]any{"consumers": anyOf(set[:2]), "why": "x"}); err == nil { + if _, err := approve.runAs("person.operator", map[string]any{"consumers": anyOf(set[:2]), "why": "x"}); err == nil { t.Error("the tool took a set other than the one waiting") } - got, err := approve.runAs(ControllerCaller, map[string]any{"consumers": anyOf(set), "why": "the apps are gone", + got, err := approve.runAs("person.operator", map[string]any{"consumers": anyOf(set), "why": "the apps are gone", "by": "person.jochen", "via": "telegram"}) if err != nil { t.Fatal(err) @@ -51,7 +51,7 @@ func TestTheRetirementToolsPassTheActThrough(t *testing.T) { last = b } } - if last["why"] != "the apps are gone" || last["by"] != "person.jochen" || last["via"] != "telegram, called by controller" { + if last["why"] != "the apps are gone" || last["by"] != "person.jochen" || last["via"] != "telegram, called by person.operator" { t.Errorf("the approval said %v", last) } @@ -118,7 +118,7 @@ func TestTheExportsFingerprintAndVaultStatus(t *testing.T) { if _, err := v.Put("pair/postgres/gitea", "x", "the test"); err != nil { t.Fatal(err) } - answer, err := toolNamed(t, definitions(&Env{Vault: v.Vault}), "secret_vault_export").Run(map[string]any{}) + answer, err := toolNamed(t, definitions(&Env{Vault: v.Vault}), "secret_vault_export").runAs("person.jochen", map[string]any{}) if err != nil { t.Fatal(err) } diff --git a/modules/mesh-vault/cmd/mesh-vault/intake_test.go b/modules/mesh-vault/cmd/mesh-vault/intake_test.go index 6d844cf0..6f25174d 100644 --- a/modules/mesh-vault/cmd/mesh-vault/intake_test.go +++ b/modules/mesh-vault/cmd/mesh-vault/intake_test.go @@ -536,7 +536,7 @@ func TestTheVerbsTakeTheirCallerFromTheRuntime(t *testing.T) { t.Fatalf("issued: %+v %v", answer, err) } broken := &Env{Broken: errors.New("no store")} - if _, err := toolNamed(t, definitions(broken), Seat+".rotate").runAs(ControllerCaller, map[string]any{}); err == nil || + if _, err := toolNamed(t, definitions(broken), Seat+".rotate").runAs("person.jochen", map[string]any{"node": "g14", "module": "dunst", "name": "token"}); err == nil || err.Error() != "no store" { t.Errorf("a broken vault said %v", err) } diff --git a/modules/mesh-vault/cmd/mesh-vault/sensitive.go b/modules/mesh-vault/cmd/mesh-vault/sensitive.go new file mode 100644 index 00000000..a9c3e486 --- /dev/null +++ b/modules/mesh-vault/cmd/mesh-vault/sensitive.go @@ -0,0 +1,89 @@ +package main + +// **Each sensitive verb judges its own caller** (novox/hq ADR 0590 §8, issue 1126). The controller judged the +// operator's account for these verbs (ADR 0272 §6, §9) and relayed who asked at its terminal; it is not placed, and +// nox and every local user reach the vault through the mesh MCP server on their machine. So each verb that approves or +// deletes a retirement, rotates a secret or exports sealed copies answers only: +// +// - the operator's account: a caller the runtime proves as `person.`; or +// - a recorded hand act: any other proven caller names (`act`) the hand act it recorded through mesh-hand-acts for +// this verb, read back here by its id: recorded by that same caller, within HandActWithin, for this verb, and +// naming what it acts on when the verb acts on something named. +// +// Nothing else passes: an unproven caller, a module with no act, an act of another caller, verb or subject. A `by` +// argument is a word, never the proof (actOf keeps it beside the proven caller). + +import ( + "fmt" + "slices" + "strings" + "time" + + stdio "git.novox.be/novox/mesh-sdk/go" +) + +// PersonPrefix begins the bus user of a person's account: `person.`. +const PersonPrefix = "person." + +// The sensitive verbs, as a hand act names them. +const ( + SensitiveRotate = "rotate" + SensitiveRetireApprove = "provisioner_retire_approve" + SensitiveDelete = "provisioner_delete" + SensitiveExport = "secret_export" + SensitiveVaultExport = "secret_vault_export" +) + +// JudgeSensitive answers whether caller may do verb on about (the names it acts on, each of which a hand act must name; +// none for an export): nil for the operator's account, or for a hand act of caller's own that warrants it. +func JudgeSensitive(read ActReader, now func() time.Time, caller, verb, act string, about ...string) error { + caller = strings.TrimSpace(caller) + if caller == "" || caller == stdio.Unproven { + return fmt.Errorf("%s answers a caller the runtime proves, and it proved none (novox/hq ADR 0590 §8)", verb) + } + if strings.HasPrefix(caller, PersonPrefix) && len(caller) > len(PersonPrefix) { + return nil + } + if strings.TrimSpace(act) == "" { + return fmt.Errorf("%s answers the operator's account (person.), or a caller naming the hand act it "+ + "recorded for it through mesh-hand-acts (`act`); %s named none (novox/hq ADR 0590 §8)", verb, caller) + } + if read == nil { + return fmt.Errorf("%s: the vault reads no hand acts, so it answers only the operator's account", verb) + } + a, err := read(act) + if err != nil { + return fmt.Errorf("%s: the hand act %s could not be read back from mesh-hand-acts: %w", verb, act, err) + } + switch { + case a == nil: + return fmt.Errorf("%s: mesh-hand-acts holds no hand act %s: record one first", verb, act) + case a.By != caller: + return fmt.Errorf("%s: the hand act %s was recorded by %s, not by %s who asks", verb, act, a.By, caller) + case now().Sub(a.At) > HandActWithin: + return fmt.Errorf("%s: the hand act %s is older than %s: record a new one", verb, act, HandActWithin) + case a.Verb != verb && !strings.HasSuffix(a.Verb, "."+verb): + return fmt.Errorf("%s: the hand act %s is %q: it warrants no %s", verb, act, a.Verb, verb) + } + for _, name := range about { + if !slices.Contains(a.Args, name) { + return fmt.Errorf("%s: the hand act %s names %s, not %s", verb, act, strings.Join(a.Args, " "), name) + } + } + return nil +} + +// judge is JudgeSensitive with the vault's reader of hand acts and its clock; with no vault ready, only the operator's +// account passes. +func (e *Env) judge(caller, verb string, a map[string]any, about ...string) error { + var read ActReader + now := time.Now + if e != nil && e.Vault != nil { + read = e.Vault.ReadAct + if e.Vault.Now != nil { + now = e.Vault.Now + } + } + act, _ := a["act"].(string) + return JudgeSensitive(read, now, caller, verb, act, about...) +} diff --git a/modules/mesh-vault/cmd/mesh-vault/sensitive_test.go b/modules/mesh-vault/cmd/mesh-vault/sensitive_test.go new file mode 100644 index 00000000..d0e53eca --- /dev/null +++ b/modules/mesh-vault/cmd/mesh-vault/sensitive_test.go @@ -0,0 +1,72 @@ +package main + +import ( + "strings" + "testing" + "time" +) + +// ADR 0590 §8 (issue 1126): approving or deleting a retirement, rotating a secret and exporting sealed copies each +// answer the operator's account, or a caller naming the hand act it recorded for that verb and that subject, and +// nothing else: the controller that judged for them is not placed. +func TestEachSensitiveVerbJudgesItsOwnCaller(t *testing.T) { + now := time.Date(2026, 11, 2, 12, 0, 0, 0, time.UTC) + acts := map[string]HandActSeen{ + "mine": {ID: "mine", By: "novox.mesh-healers", At: now.Add(-time.Hour), Verb: "mesh-vault.rotate", Args: []string{"own/g14/app/key"}}, + "old": {ID: "old", By: "novox.mesh-healers", At: now.Add(-25 * time.Hour), Verb: "rotate", Args: []string{"own/g14/app/key"}}, + "other": {ID: "other", By: "novox.mesh-config", At: now.Add(-time.Hour), Verb: "rotate", Args: []string{"own/g14/app/key"}}, + "del": {ID: "del", By: "novox.mesh-healers", At: now.Add(-time.Hour), Verb: "provisioner_delete", Args: []string{"d-app"}}, + } + read := func(id string) (*HandActSeen, error) { + if a, ok := acts[id]; ok { + return &a, nil + } + return nil, nil + } + clock := func() time.Time { return now } + for _, row := range []struct { + name, caller, verb, act string + about []string + want string // empty: allowed + }{ + {"the operator's account", "person.jochen", SensitiveRotate, "", []string{"own/g14/app/key"}, ""}, + {"the operator's account exports", "person.jochen", SensitiveExport, "", nil, ""}, + {"unproven", "unproven", SensitiveVaultExport, "", nil, "proved none"}, + {"a bare person prefix", "person.", SensitiveExport, "", nil, "named none"}, + {"a module with no act", "novox.mesh-healers", SensitiveRotate, "", []string{"own/g14/app/key"}, "named none"}, + {"a module's own act", "novox.mesh-healers", SensitiveRotate, "mine", []string{"own/g14/app/key"}, ""}, + {"an act of another subject", "novox.mesh-healers", SensitiveRotate, "mine", []string{"own/ace/app/key"}, "not own/ace/app/key"}, + {"an act of another verb", "novox.mesh-healers", SensitiveRotate, "del", []string{"own/g14/app/key"}, "warrants no rotate"}, + {"an act of another caller", "novox.mesh-healers", SensitiveRotate, "other", []string{"own/g14/app/key"}, "recorded by novox.mesh-config"}, + {"an act too old", "novox.mesh-healers", SensitiveRotate, "old", []string{"own/g14/app/key"}, "older than"}, + {"an act not recorded", "novox.mesh-healers", SensitiveDelete, "none", []string{"d-app"}, "holds no hand act"}, + {"a delete's own act", "novox.mesh-healers", SensitiveDelete, "del", []string{"d-app"}, ""}, + } { + err := JudgeSensitive(read, clock, row.caller, row.verb, row.act, row.about...) + if (row.want == "") != (err == nil) || (err != nil && !strings.Contains(err.Error(), row.want)) { + t.Errorf("%s: %v, want %q", row.name, err, row.want) + } + } +} + +// The tools themselves judge: a module's call with no act is refused before anything is read or changed, and the +// operator's account goes through. +func TestTheSensitiveToolsRefuseACallerTheyDoNotJudgeTheirs(t *testing.T) { + env := &Env{Root: t.TempDir()} + defs := definitions(env) + for _, name := range []string{Seat + ".rotate", "provisioner_retire_approve", "provisioner_delete", "secret_export", + "secret_vault_export"} { + if _, err := toolNamed(t, defs, name).runAs("novox.some-module", map[string]any{"why": "x", "consumer": "c", + "confirm": "c", "consumers": []any{"c"}, "node": "g14", "module": "app", "name": "key"}); err == nil || + !strings.Contains(err.Error(), "ADR 0590") { + t.Errorf("%s answered a module with no act: %v", name, err) + } + } + if _, err := toolNamed(t, defs, "secret_export").runAs("person.jochen", map[string]any{}); err != nil { + t.Errorf("the operator's export was refused: %v", err) + } + // Listing holders alone is no sealed copy: any proven caller reads it. + if _, err := toolNamed(t, defs, "secret_export").runAs("novox.some-module", map[string]any{"sealed": false}); err != nil { + t.Errorf("a listing without sealed copies was refused: %v", err) + } +} diff --git a/modules/mesh-vault/cmd/mesh-vault/tools.go b/modules/mesh-vault/cmd/mesh-vault/tools.go index bdf87dde..f384f15d 100644 --- a/modules/mesh-vault/cmd/mesh-vault/tools.go +++ b/modules/mesh-vault/cmd/mesh-vault/tools.go @@ -171,7 +171,7 @@ func definitions(env *Env) []toolDef { Description: "Make a secret anew (ADR 0114, ADR 0228): node, module and name for a module's own, or provider " + "and provision for a provision's credential. Refused for a value a provider's software issued, which " + "the software rotates, and for an accepted credential, which the vault does not remake. Never answers " + - "the value. For a caller the runtime proves, its manifest granted the verb, and with a why.", + "the value. Answers the operator's account, or a caller naming its own hand act for this rotation (`act`; novox/hq ADR 0590 §8), with a why.", Input: map[string]any{"type": "object", "properties": map[string]any{ "node": str("the machine, for a module's own secret"), "module": str("the module"), "name": str("the secret's name in the module"), "provider": str("the provider's machine"), @@ -179,14 +179,18 @@ func definitions(env *Env) []toolDef { "consumer": str("a provision's credential of a provider whose consumers keep a login each: only " + "this consumer's machine's own"), "consumer_module": str("with it or alone: only this consuming module's own login"), - "by": str("who asked, as the controller names them when it carries the act"), - "why": str("why it is rotated: required")}}, + "by": str("who asked, a word kept beside the proven caller"), + "why": str("why it is rotated: required"), + "act": str("the id of the hand act the caller recorded for this through mesh-hand-acts; not needed by the operator's account (person.)")}}, run: func(caller string, a map[string]any) (any, error) { - v, err := env.ready() + secret, err := secretNamed(a) if err != nil { return nil, err } - secret, err := secretNamed(a) + if err := env.judge(caller, SensitiveRotate, a, secret); err != nil { + return nil, err + } + v, err := env.ready() if err != nil { return nil, err } @@ -384,11 +388,18 @@ func definitions(env *Env) []toolDef { "sealed to the operator's key (novox/hq ADR 0085, amended). Ciphertext — nothing here can open a line " + "of it; the operator, holding the private key off the mesh, recovers one with " + "`nox secret recover --from-export` on the control-node. Also lists what is NOT recoverable: secrets " + - "made before the mesh had an operator key.", + "made before the mesh had an operator key. The sealed copies answer the operator's account, or a caller naming its own hand act for the export (`act`; novox/hq ADR 0590 §8).", Input: map[string]any{"sealed": map[string]any{"type": "boolean", - "description": "include the sealed blobs (default true); false lists holders and the key only"}}, - run: func(_ string, a map[string]any) (any, error) { - return exportAnswer(env.Root, a["sealed"] != false), nil + "description": "include the sealed blobs (default true); false lists holders and the key only"}, + "act": str("the id of the hand act the caller recorded for this through mesh-hand-acts; not needed by the operator's account (person.)")}, + run: func(caller string, a map[string]any) (any, error) { + sealed := a["sealed"] != false + if sealed { + if err := env.judge(caller, SensitiveExport, a); err != nil { + return nil, err + } + } + return exportAnswer(env.Root, sealed), nil }}, {Name: "secret_holders", Description: "Who holds a secret from this vault: each consumer's login, node and module, when it was " + @@ -521,8 +532,13 @@ func definitions(env *Env) []toolDef { {Name: "secret_vault_export", Description: "Every secret the vault itself holds, as its copy sealed to the operator key, in the shape of " + "`secret export`: saved to a file, `nox secret recover vault mesh-vault --key " + - "--from-export --out ` opens one with the operator's private key. Ciphertext only.", - run: func(string, map[string]any) (any, error) { + "--from-export --out ` opens one with the operator's private key. Ciphertext only. Answers the " + + "operator's account, or a caller naming its own hand act for it (`act`; novox/hq ADR 0590 §8).", + Input: map[string]any{"act": str("the id of the hand act the caller recorded for this through mesh-hand-acts; not needed by the operator's account (person.)")}, + run: func(caller string, a map[string]any) (any, error) { + if err := env.judge(caller, SensitiveVaultExport, a); err != nil { + return nil, err + } if env.Vault == nil { return nil, errors.New("the vault is not ready") } @@ -539,9 +555,12 @@ func definitions(env *Env) []toolDef { return env.Custody.Retirement(), nil }}, {Name: "provisioner_retire_approve", - Description: "Retire exactly the set waiting for a person (or rejected earlier). Repeat the set in consumers; why is required.", + Description: "Retire exactly the set waiting for a person (or rejected earlier). Repeat the set in consumers; why is required. Answers the operator's account, or a caller naming its own hand act naming each consumer (`act`; novox/hq ADR 0590 §8).", Input: actInput(true, false), run: func(caller string, a map[string]any) (any, error) { + if err := env.judge(caller, SensitiveRetireApprove, a, stringsOf(a["consumers"])...); err != nil { + return nil, err + } if env.Custody == nil { return nil, errors.New("the vault has no custody ledger") } @@ -566,13 +585,17 @@ func definitions(env *Env) []toolDef { }}, {Name: "provisioner_delete", Description: "Delete one RETIRED holder from the custody ledger, its rotation history with it — never an active one. " + - "Repeat its name in confirm; why is required.", + "Repeat its name in confirm; why is required. Answers the operator's account, or a caller naming its own hand " + + "act naming the consumer (`act`; novox/hq ADR 0590 §8).", Input: actInput(false, true), run: func(caller string, a map[string]any) (any, error) { + consumer, _ := a["consumer"].(string) + if err := env.judge(caller, SensitiveDelete, a, consumer); err != nil { + return nil, err + } if env.Custody == nil { return nil, errors.New("the vault has no custody ledger") } - consumer, _ := a["consumer"].(string) confirm, _ := a["confirm"].(string) if err := env.Custody.Delete(consumer, confirm, actOf(caller, a)); err != nil { return nil, err @@ -665,7 +688,7 @@ func definitions(env *Env) []toolDef { // actInput is the arguments of an act on retirement, as the SDK's harness takes them. func actInput(set, one bool) map[string]any { text := map[string]any{"type": "string"} - in := map[string]any{"why": text, "by": text, "via": text} + in := map[string]any{"why": text, "by": text, "via": text, "act": text} if set { in["consumers"] = map[string]any{"type": "array", "items": text} } diff --git a/modules/mesh-vault/cmd/mesh-vault/tools_test.go b/modules/mesh-vault/cmd/mesh-vault/tools_test.go index 00612307..89a1194e 100644 --- a/modules/mesh-vault/cmd/mesh-vault/tools_test.go +++ b/modules/mesh-vault/cmd/mesh-vault/tools_test.go @@ -70,18 +70,18 @@ func TestSecretExportAnswersTheMeshsExport(t *testing.T) { root := t.TempDir() env := &Env{Root: root} export := toolNamed(t, definitions(env), "secret_export") - got, _ := export.Run(map[string]any{}) + got, _ := export.runAs("person.jochen", map[string]any{}) if got.(map[string]any)["available"] != false { t.Errorf("no export said %v", got) } doc := `{"export":1,"operator-key":"b3A=","fingerprint":"sha256:f","kept":[{"node":"g14","module":"dunst","name":"token","kind":"own","origin":"made","sealed":"c2VhbGVk","key":"b3A=","made-at":"2026-10-01T00:00:00Z"}],"unrecoverable":[{"node":"ace","module":"x","name":"y"}]}` _ = os.WriteFile(filepath.Join(root, "export.json"), []byte(doc), 0o600) - got, _ = export.Run(map[string]any{}) + got, _ = export.runAs("person.jochen", map[string]any{}) a := got.(map[string]any) if a["available"] != true || a["count"] != 1 || a["operator-key"] != "b3A=" { t.Errorf("the export said %v", a) } - got, _ = export.Run(map[string]any{"sealed": false}) + got, _ = export.runAs("person.jochen", map[string]any{"sealed": false}) kept := got.(map[string]any)["kept"].([]map[string]any) if _, ok := kept[0]["sealed"]; ok { t.Error("sealed=false still returned the blobs") diff --git a/modules/mesh-vault/cmd/mesh-vault/vault_test.go b/modules/mesh-vault/cmd/mesh-vault/vault_test.go index e380ed56..13f75496 100644 --- a/modules/mesh-vault/cmd/mesh-vault/vault_test.go +++ b/modules/mesh-vault/cmd/mesh-vault/vault_test.go @@ -796,7 +796,7 @@ func TestTheOperatorRecoversAVaultSecretFromItsExport(t *testing.T) { if _, err := v.Put("pair/postgres/gitea", "recover-me", "the test"); err != nil { t.Fatal(err) } - answer, err := toolNamed(t, definitions(&Env{Vault: v.Vault}), "secret_vault_export").Run(map[string]any{}) + answer, err := toolNamed(t, definitions(&Env{Vault: v.Vault}), "secret_vault_export").runAs("person.jochen", map[string]any{}) if err != nil { t.Fatal(err) } From a73b02ea30e64748c1735bcbc87a6da37504ecf8 Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 11:47:44 +0100 Subject: [PATCH 09/27] Drop the keeper's and config's take-over verbs with the controller's sources mesh-sdk drops compare, take-over and hand-back from the keeper's and config's seats (ADR 0590): there is no controller to compare with or hand back to. mesh-conditions loses those verbs, its take-over key and asks; mesh-config reads its own sources always and pull-declares is gone; and mesh-hand-acts no longer names the controller's log (issue 1126). Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- .../cmd/mesh-conditions/compare.go | 185 -------- .../cmd/mesh-conditions/hold.go | 2 +- .../cmd/mesh-conditions/hold_test.go | 11 - .../cmd/mesh-conditions/homes.go | 11 +- .../cmd/mesh-conditions/keeper.go | 42 +- .../cmd/mesh-conditions/keeper_test.go | 82 +--- .../cmd/mesh-conditions/main.go | 22 +- .../cmd/mesh-conditions/manifest_test.go | 7 +- .../cmd/mesh-conditions/tools.go | 35 +- .../mesh-conditions/whole_integration_test.go | 2 +- modules/mesh-conditions/module.json | 7 +- modules/mesh-config/README.md | 13 +- modules/mesh-config/cmd/mesh-config/main.go | 2 +- .../cmd/mesh-config/manifest_test.go | 8 +- .../mesh-config/cmd/mesh-config/proposals.go | 1 - modules/mesh-config/cmd/mesh-config/pulls.go | 58 +-- .../mesh-config/cmd/mesh-config/pulls_test.go | 30 +- .../mesh-config/cmd/mesh-config/sources.go | 4 - .../cmd/mesh-config/switch_tools.go | 49 +- .../mesh-config/cmd/mesh-config/takeover.go | 443 +----------------- .../cmd/mesh-config/takeover_test.go | 151 +----- modules/mesh-config/module.json | 11 +- .../mesh-hand-acts/cmd/mesh-hand-acts/acts.go | 9 +- .../cmd/mesh-hand-acts/acts_test.go | 11 +- 24 files changed, 99 insertions(+), 1097 deletions(-) delete mode 100644 modules/mesh-conditions/cmd/mesh-conditions/compare.go diff --git a/modules/mesh-conditions/cmd/mesh-conditions/compare.go b/modules/mesh-conditions/cmd/mesh-conditions/compare.go deleted file mode 100644 index e1583e7a..00000000 --- a/modules/mesh-conditions/cmd/mesh-conditions/compare.go +++ /dev/null @@ -1,185 +0,0 @@ -package main - -// **Built dark, compared, then switched by the operator** (novox/hq ADR 0564 clause 9; issue 1952 C5, C8): `compare` -// lists the open keys of the keeper and of the controller, each difference with its reason; the kinds that end with the -// controller, the kinds only the keeper raises and the keys held while their module is delivered are listed apart and -// not counted. `take-over` is refused (issue 1126): the keeper is the one source since the controller ended by its -// unassignment; a yes to an ask raised before still writes the take-over key naming the keeper. `hand-back` is gone (issue 774): nothing -// reads the take-over key any more, so it is answered as gone and changes nothing. - -import ( - "encoding/json" - "errors" - "fmt" - "sort" - "strings" - "time" - - stdio "git.novox.be/novox/mesh-sdk/go" - "git.novox.be/novox/mesh-sdk/go/asks" - "git.novox.be/novox/mesh-sdk/go/health" -) - -// Difference is one key the two sides do not agree on, or one listed apart. -type Difference struct { - Key string `json:"key"` - Kind string `json:"kind"` - Reason string `json:"reason"` -} - -// Comparison is compare's answer. -type Comparison struct { - Differences []Difference `json:"differences"` - // Apart are the keys not counted: of kinds that end with the controller, raised only by the keeper, or held. - Apart []Difference `json:"apart"` - Same int `json:"same"` - At time.Time `json:"at"` -} - -// Empty says nothing differs. -func (c Comparison) Empty() bool { return len(c.Differences) == 0 } - -// Compare is the keeper's open conditions against the controller's. -func (k *Keeper) Compare() (Comparison, error) { - mine, err := k.Open() - if err != nil { - return Comparison{}, err - } - k.mu.Lock() - k.init() - theirs := map[string]health.Condition{} - for key, c := range k.ctrl { - theirs[key] = c - } - heldNow := map[string]held{} - for key, h := range k.held { - heldNow[key] = h - } - k.mu.Unlock() - out := Comparison{Differences: []Difference{}, Apart: []Difference{}, At: k.Now().UTC()} - open := map[string]health.Condition{} - for _, c := range mine { - open[c.Key] = c - } - keys := map[string]bool{} - for key := range open { - keys[key] = true - } - for key := range theirs { - keys[key] = true - } - for key := range heldNow { - keys[key] = true - } - sorted := make([]string, 0, len(keys)) - for key := range keys { - sorted = append(sorted, key) - } - sort.Strings(sorted) - for _, key := range sorted { - c, inMine := open[key] - t, inTheirs := theirs[key] - kind := c.Kind - if !inMine { - kind = t.Kind - } - home, homed := k.homeOf(kind) - if h, ok := heldNow[key]; ok { - out.Apart = append(out.Apart, Difference{Key: key, Kind: kind, - Reason: fmt.Sprintf("held while %s is delivered on %s (version %s)", h.Module, h.Node, short(h.Version))}) - continue - } - switch { - case homed && (home.Carried || home.Replaced): - why := "ends with the controller: no longer carried (issue 1126)" - if home.Replaced { - why = "ends with the controller: its fault is observed otherwise" - } - if home.Why != "" { - why += " (" + home.Why + ")" - } - out.Apart = append(out.Apart, Difference{Key: key, Kind: kind, Reason: why}) - case inMine && !inTheirs && (!homed || !home.Controller): - out.Apart = append(out.Apart, Difference{Key: key, Kind: kind, Reason: "keeper only: the controller never raises this kind"}) - case inMine && !inTheirs: - out.Differences = append(out.Differences, Difference{Key: key, Kind: kind, - Reason: "open at the keeper, not at the controller"}) - case !inMine && !homed: - out.Differences = append(out.Differences, Difference{Key: key, Kind: kind, - Reason: fmt.Sprintf("open at the controller; no home is decided for the kind %s (ADR 0564's gap)", kind)}) - case !inMine: - out.Differences = append(out.Differences, Difference{Key: key, Kind: kind, - Reason: fmt.Sprintf("open at the controller; %s has not written its finding", home.Observer)}) - case c.Severity != t.Severity: - out.Differences = append(out.Differences, Difference{Key: key, Kind: kind, - Reason: fmt.Sprintf("%s at the keeper, %s at the controller", c.Severity, t.Severity)}) - default: - out.Same++ - } - } - return out, nil -} - -// Asks is the operator channel as the keeper asks it: an approve ask under its own name, and where one stands. -type Asks interface { - Ask(a asks.Ask) error -} - -// TakeOver is refused: the keeper is the one source of conditions since the controller ended (issue 1126). -func (k *Keeper) TakeOver(a Asks, by, why string) (map[string]any, error) { - if strings.TrimSpace(why) == "" { - return nil, errors.New("a take-over says why") - } - return nil, errors.New("the keeper is the one source already: the controller ended by its unassignment (issue 1126)") -} - -// Warranted is the act on the operator's answer: a yes, compare still empty, writes the take-over key naming the keeper. -func (k *Keeper) Warranted(o asks.Option, w asks.Warrant) error { - if o.ID != "yes" { - k.Logf("the take-over %s was answered %s: alarms stay with the controller", w.Ask, o.ID) - return nil - } - cmp, err := k.Compare() - if err != nil { - return err - } - if !cmp.Empty() { - return fmt.Errorf("the take-over %s was approved, and compare now shows %d difference(s): not switched", w.Ask, - len(cmp.Differences)) - } - return k.writeTakeover(health.Takeover{Follow: health.FollowKeeper, At: k.Now().UTC(), By: w.Says(), Ask: w.Ask}) -} - -// HandBack is gone (issue 774): the readers of conditions hear the keeper alone and nothing reads the take-over key, so -// a hand-back written there would answer success and do nothing (ADR 0564 clause 9). It is answered as gone, naming the -// record, and changes nothing. -func (k *Keeper) HandBack(by, why string) (map[string]any, error) { - return nil, errors.New("hand-back is gone: the readers of conditions hear the condition keeper alone, and nothing " + - "reads the take-over key, so there is no controller to hand them back to (ADR 0564 clause 9)") -} - -// writeTakeover writes the take-over key, and keeps it in history as the record of the switch. -func (k *Keeper) writeTakeover(t health.Takeover) error { - raw, err := health.EncodeTakeover(t) - if err != nil { - return err - } - _, rev, found, err := k.Store.Get(TakeoverState, health.TakeoverKey) - if err != nil { - return err - } - if found { - _, err = k.Store.Update(TakeoverState, health.TakeoverKey, json.RawMessage(raw), rev) - } else { - _, err = k.Store.Create(TakeoverState, health.TakeoverKey, json.RawMessage(raw)) - } - if errors.Is(err, stdio.ErrChanged) { - return fmt.Errorf("the take-over key moved under this write: read it again and ask again") - } - if err != nil { - return err - } - k.Takeover(t) - k.Logf("the readers of conditions follow the %s from now (%s)", t.Follow, t.By) - return nil -} diff --git a/modules/mesh-conditions/cmd/mesh-conditions/hold.go b/modules/mesh-conditions/cmd/mesh-conditions/hold.go index 1a26a5ba..c95d106f 100644 --- a/modules/mesh-conditions/cmd/mesh-conditions/hold.go +++ b/modules/mesh-conditions/cmd/mesh-conditions/hold.go @@ -309,7 +309,7 @@ func short(fp string) string { return fp } -// Held is every key held now, for the read tool and compare. +// Held is every key held now, for the read tool. func (k *Keeper) Held() []held { k.mu.Lock() defer k.mu.Unlock() diff --git a/modules/mesh-conditions/cmd/mesh-conditions/hold_test.go b/modules/mesh-conditions/cmd/mesh-conditions/hold_test.go index 9beaa64c..ef555a03 100644 --- a/modules/mesh-conditions/cmd/mesh-conditions/hold_test.go +++ b/modules/mesh-conditions/cmd/mesh-conditions/hold_test.go @@ -73,17 +73,6 @@ func TestADeliveryHoldsItsOwnFindingsUntilItEnds(t *testing.T) { if got := r.changes(); got != "raised "+other+", raised "+machine { t.Errorf("%s: during the delivery said %q: another module's and the machine's at once, nothing of its own", c.name, got) } - // C8: compare lists the held keys as held, never as a difference. - cmp, _ := r.k.Compare() - held := 0 - for _, d := range cmp.Apart { - if strings.HasPrefix(d.Reason, "held while mesh-controller is delivered on novox") { - held++ - } - } - if held != 1 { - t.Errorf("%s: compare lists %d held, %+v", c.name, held, cmp) - } // Its own finding goes unless it stands. if !c.standing { _ = r.k.Finding(watchman, own, nil, true) diff --git a/modules/mesh-conditions/cmd/mesh-conditions/homes.go b/modules/mesh-conditions/cmd/mesh-conditions/homes.go index c900b8cf..a1c25a10 100644 --- a/modules/mesh-conditions/cmd/mesh-conditions/homes.go +++ b/modules/mesh-conditions/cmd/mesh-conditions/homes.go @@ -1,12 +1,11 @@ package main -// **Where each condition kind lives after the take-over** (novox/hq ADR 0564 clauses 4, 6, 7 and 9, the Context's probe -// table; issue 1952 C3, C5): data, so a kind's home is a row and never code. `compare` reads it to tell a difference from -// a kind that ends with the controller or that the controller never raises, and the keeper reads it to clear, once, what -// it carried of the kinds that ended with the controller (EndCarried, issue 1126). +// **Where each condition kind the controller raised lives now** (novox/hq ADR 0564 clauses 4, 6, 7 and 9, the Context's +// probe table; issue 1952 C3, C5): data, so a kind's home is a row and never code. The keeper reads it to clear, once, +// what it carried of the kinds that ended with the controller (EndCarried, issue 1126); `compare`, which read it too, +// went with the controller (ADR 0590). // -// The rows are ADR 0564's and the lead's table of 2026-10-29, by the controller's source of each kind. A kind with no -// row is named by `compare` as "no home decided". +// The rows are ADR 0564's and the lead's table of 2026-10-29, by the controller's source of each kind. // Home is where one condition kind lives. type Home struct { diff --git a/modules/mesh-conditions/cmd/mesh-conditions/keeper.go b/modules/mesh-conditions/cmd/mesh-conditions/keeper.go index daabadb3..e72cd426 100644 --- a/modules/mesh-conditions/cmd/mesh-conditions/keeper.go +++ b/modules/mesh-conditions/cmd/mesh-conditions/keeper.go @@ -28,12 +28,9 @@ const ( Seat = "mesh-conditions" ConditionsState = health.ConditionsState - TakeoverState = health.TakeoverState HistoryState = "history" HeldState = "held" BoundsState = "bounds" - // AskedState keeps the keeper's asks of the operator (go/asker). - AskedState = "asked" ) // HistoryKeptFor is how long a transition is kept (clause 3). @@ -94,7 +91,7 @@ type Keeper struct { Say func(e health.Event) error Now func() time.Time Logf func(format string, a ...any) - // Homes says, by kind, where each controller kind lives after the take-over (homes.go); Homes when nil. + // Homes says, by kind, where each kind the controller raised lives now (homes.go); Homes when nil. Homes map[string]Home // Bound is a delivery's hold bound; delivery.DefaultDeliveryBound when zero (hold.go). Bound time.Duration @@ -103,10 +100,6 @@ type Keeper struct { findings map[string]map[string]health.Finding blind map[string]string attempts map[string]health.Attempt - // ctrl is the controller's conditions as Controller hands them: compare's other side alone, never a condition's - // input (issue 1126). Nothing feeds it since issue 774; it goes with compare. - ctrl map[string]health.Condition - takeover health.Takeover wants map[string]delivery.Want haves map[string]delivery.Have // holders are, by `.`, the module the placement says holds the seat there. @@ -125,11 +118,10 @@ type Keeper struct { func (k *Keeper) init() { if k.findings == nil { - k.findings, k.blind, k.attempts, k.ctrl = map[string]map[string]health.Finding{}, map[string]string{}, - map[string]health.Attempt{}, map[string]health.Condition{} + k.findings, k.blind, k.attempts = map[string]map[string]health.Finding{}, map[string]string{}, + map[string]health.Attempt{} k.wants, k.haves, k.stuck, k.held, k.cleared = map[string]delivery.Want{}, map[string]delivery.Have{}, map[string]string{}, map[string]held{}, map[string]clearedMemo{} - k.takeover = health.Takeover{V: health.TakeoverVersion, Follow: health.FollowController} k.passed, k.outOfHold, k.holders = map[string]string{}, map[string]string{}, map[string]string{} k.placement = delivery.NewPlacementKeys() } @@ -209,26 +201,6 @@ func (k *Keeper) Attempt(key string, value []byte, deleted bool) error { return k.Settle(condition) } -// Controller takes one change of the controller's `conditions` bucket, for compare alone: no condition is carried from -// it (issue 1126). -func (k *Keeper) Controller(key string, value []byte, deleted bool) error { - k.mu.Lock() - k.init() - if deleted { - delete(k.ctrl, key) - } else { - var c health.Condition - if err := json.Unmarshal(value, &c); err != nil { - k.mu.Unlock() - k.Logf("the controller's condition %s is not readable, so compare does not list it: %v", key, err) - return nil - } - k.ctrl[key] = c - } - k.mu.Unlock() - return nil -} - // endedWhy is why a condition of a kind that ended with the controller is cleared. const endedWhy = "its kind ended with the controller, which was unassigned (issue 1126): no finding raises it again" @@ -273,14 +245,6 @@ func (k *Keeper) EndCarried() (int, error) { return n, nil } -// Takeover takes the keeper's own take-over key as read. -func (k *Keeper) Takeover(t health.Takeover) { - k.mu.Lock() - defer k.mu.Unlock() - k.init() - k.takeover = t -} - // Settle derives the condition key should be and writes the difference (clause 2), retried while another write moves // it under this one. func (k *Keeper) Settle(key string) error { diff --git a/modules/mesh-conditions/cmd/mesh-conditions/keeper_test.go b/modules/mesh-conditions/cmd/mesh-conditions/keeper_test.go index d061f720..01367614 100644 --- a/modules/mesh-conditions/cmd/mesh-conditions/keeper_test.go +++ b/modules/mesh-conditions/cmd/mesh-conditions/keeper_test.go @@ -10,7 +10,6 @@ import ( "time" stdio "git.novox.be/novox/mesh-sdk/go" - "git.novox.be/novox/mesh-sdk/go/delivery" "git.novox.be/novox/mesh-sdk/go/health" ) @@ -242,28 +241,6 @@ func TestTheKeeperCarriesNoControllerConditionAndClearsWhatItCarriedOnce(t *test t.Fatal(err) } r.said = nil - until := r.now.Add(time.Hour) - for _, c := range []health.Condition{ - {Key: "core.controller.deaf", Kind: "controller-deaf", Source: "S4", Subject: health.Subject{Scope: health.ScopeCore, ID: "controller"}, - Severity: health.Urgent, Summary: "deaf", Resolver: "self"}, - {Key: key, Kind: "silent", Severity: health.Urgent, Resolver: health.ResolverOperator, - Tried: []health.Tried{{At: r.now, What: "x", Outcome: "escalated", By: "healer H1"}}, - Silenced: &health.Silence{Until: until}}, - } { - raw, _ := json.Marshal(c) - if err := r.k.Controller(c.Key, raw, false); err != nil { - t.Fatal(err) - } - if _, err := r.k.Resync(); err != nil { - t.Fatal(err) - } - } - if _, open := r.open("core.controller.deaf"); open || r.changes() != "" { - t.Error("the controller's condition was carried") - } - if c, _ := r.open(key); c.Severity != health.Warning || c.Resolver != health.ResolverSelf || len(c.Tried) != 0 || c.Silenced != nil { - t.Errorf("the controller's escalation reached the keeper's condition: %+v", c) - } // Carried while the controller ran: two of kinds that ended with it, still open in conditions. for _, c := range []health.Condition{ {Key: "core.controller.deaf", Kind: "controller-deaf", Severity: health.Urgent, Resolver: "self", Count: 1}, @@ -285,51 +262,10 @@ func TestTheKeeperCarriesNoControllerConditionAndClearsWhatItCarriedOnce(t *test } } -// ADR 0564 clause 9 (issue 1952 C5, C8; the lead 2026-10-29): compare counts only what both sides can raise. A key held -// while its module is delivered, a kind that ends with the controller and a kind the controller never raises are listed -// apart; a kind with no home decided is a difference naming the gap; take-over is refused (issue 1126), and -// hand-back is gone (issue 774, review g1): answered as gone, naming its record, and writing nothing. -func TestCompareCountsOnlyWhatBothSidesRaise(t *testing.T) { - r := newRig() - put := func(key, kind string) []byte { - raw, _ := json.Marshal(health.Condition{Key: key, Kind: kind, Severity: health.Warning, Source: "x"}) - return raw - } - key, raw := finding(t, watchman, health.ScopeMachine, "g14", "silent", "S1", health.Warning, r.now) - _ = r.k.Finding(watchman, key, raw, false) - _ = r.k.Controller(key, put(key, "silent"), false) - only, onlyRaw := finding(t, delivery.AssignerModule, health.ScopeSeat, "mesh-placement.ace", "states-unbound", "say", health.Warning, r.now) - _ = r.k.Finding(delivery.AssignerModule, only, onlyRaw, false) - _ = r.k.Controller("core.controller.deaf", put("core.controller.deaf", "controller-deaf"), false) - _ = r.k.Controller("delivery.x.mystery", put("delivery.x.mystery", "mystery"), false) - _ = r.k.Controller("bus.x.consumer-wrong", put("bus.x.consumer-wrong", "consumer-wrong"), false) - _ = r.k.Controller("seat.vault.ace.holder-silent", put("seat.vault.ace.holder-silent", "holder-silent"), false) - _ = r.k.Controller("bus.nats.upgrade-failed", put("bus.nats.upgrade-failed", "bus-upgrade-failed"), false) - cmp, err := r.k.Compare() - if err != nil { - t.Fatal(err) - } - reasons := map[string]string{} - for _, d := range append(append([]Difference(nil), cmp.Differences...), cmp.Apart...) { - reasons[d.Key] = d.Reason - } - for key, says := range map[string]string{ - only: "keeper only", - "core.controller.deaf": "carried", - "delivery.x.mystery": "no home is decided for the kind mystery", - "bus.x.consumer-wrong": "mesh-self-check has not written its finding", - // A kind of a probe the operator dropped (2026-10-30) is carried, never missing. - "seat.vault.ace.holder-silent": "no longer carried (issue 1126) (dropped 2026-10-30 by the operator", - // The controller's own bus upgrade ends with its lease (the operator, 2026-10-31; issue 1952). - "bus.nats.upgrade-failed": "ends with the controller", - } { - if !strings.Contains(reasons[key], says) { - t.Errorf("%s: %q, want it to say %q", key, reasons[key], says) - } - } - if cmp.Same != 1 || len(cmp.Differences) != 2 { - t.Errorf("compare: %+v", cmp) - } +// ADR 0564 (issue 1952 C5; the lead 2026-10-29): every kind the controller raised has its home in the table, and the +// kinds that ended with it are marked carried, which EndCarried clears once (issue 1126). compare, take-over and +// hand-back went with the controller (ADR 0590): there is no other side to compare and nothing to hand back to. +func TestEveryControllerKindHasItsHome(t *testing.T) { // The lead's table of 2026-10-29: each kind has its home, lease-split and image-missing do not end, and the 22 // that end are carried; with the 11 kinds of the probes the operator dropped on 2026-10-30, 33. carried := 0 @@ -355,14 +291,4 @@ func TestCompareCountsOnlyWhatBothSidesRaise(t *testing.T) { if len(Homes) != 84 || carried != 34 { // 19 of ADR 0564, the 63 of the table, plan-failed and stalled t.Errorf("the table holds %d kinds, %d carried", len(Homes), carried) } - if _, err := r.k.TakeOver(nil, "jochen", "now"); err == nil || !strings.Contains(err.Error(), "one source already") { - t.Errorf("take-over: %v", err) - } - if _, err := r.k.HandBack("jochen", "back"); err == nil || !strings.Contains(err.Error(), "hand-back is gone") || - !strings.Contains(err.Error(), "ADR 0564 clause 9") { - t.Errorf("hand-back: %v, want it answered as gone naming its record", err) - } - if _, _, found, _ := r.k.Store.Get(TakeoverState, health.TakeoverKey); found { - t.Error("hand-back or take-over wrote the take-over key") - } } diff --git a/modules/mesh-conditions/cmd/mesh-conditions/main.go b/modules/mesh-conditions/cmd/mesh-conditions/main.go index c41a63ee..a70504ec 100644 --- a/modules/mesh-conditions/cmd/mesh-conditions/main.go +++ b/modules/mesh-conditions/cmd/mesh-conditions/main.go @@ -13,8 +13,6 @@ import ( "time" stdio "git.novox.be/novox/mesh-sdk/go" - "git.novox.be/novox/mesh-sdk/go/asker" - "git.novox.be/novox/mesh-sdk/go/asks" "git.novox.be/novox/mesh-sdk/go/health" ) @@ -90,15 +88,6 @@ func Keep(k *Keeper) { } } } - if e, err := stdio.State(TakeoverState).Get(health.TakeoverKey); err == nil { - var raw []byte - if e != nil { - raw = e.Value - } - if t, err := health.DecodeTakeover(raw, e != nil); err == nil { - k.Takeover(t) - } - } said := func(err error) error { if err != nil { logf("%v", err) @@ -134,20 +123,11 @@ func Keep(k *Keeper) { func main() { k := NewKeeper() - client := asker.New(AskedState) - client.Module = Module go func() { <-stdio.Served() Keep(k) - if err := client.Listen(k.Warranted, func(h asker.Handled, w asks.Warrant, err error) { - if err != nil { - logf("the answer to %s (%s): %v", w.Ask, h, err) - } - }); err != nil { - logf("the operator's answers cannot be heard: %v", err) - } }() - if err := stdio.Serve("", Tools(k, client)); err != nil { + if err := stdio.Serve("", Tools(k)); err != nil { logf("%v", err) os.Exit(1) } diff --git a/modules/mesh-conditions/cmd/mesh-conditions/manifest_test.go b/modules/mesh-conditions/cmd/mesh-conditions/manifest_test.go index d22707dd..79ccbe5c 100644 --- a/modules/mesh-conditions/cmd/mesh-conditions/manifest_test.go +++ b/modules/mesh-conditions/cmd/mesh-conditions/manifest_test.go @@ -49,11 +49,10 @@ func TestTheManifestSaysWhatTheCodeDoes(t *testing.T) { ttl[HistoryState], ttl[BoundsState], keyTTL[BoundsState]) } // Clause 12: each state with the tool that reads it, each act with the tool that starts it. - readBy := map[string]string{ConditionsState: Seat + ".conditions", HistoryState: HistoryTool, TakeoverState: TakeoverTool, - HeldState: HeldTool, BoundsState: HeldTool, AskedState: Seat + ".take-over", "a resync": Seat + ".resync", - "what it reads": InputsTool} + readBy := map[string]string{ConditionsState: Seat + ".conditions", HistoryState: HistoryTool, + HeldState: HeldTool, BoundsState: HeldTool, "a resync": Seat + ".resync", "what it reads": InputsTool} tools := map[string]bool{} - for _, tool := range Tools(&Keeper{}, nil) { + for _, tool := range Tools(&Keeper{}) { tools[tool.Name] = true } for name := range ttl { diff --git a/modules/mesh-conditions/cmd/mesh-conditions/tools.go b/modules/mesh-conditions/cmd/mesh-conditions/tools.go index d62b6e11..a1324aad 100644 --- a/modules/mesh-conditions/cmd/mesh-conditions/tools.go +++ b/modules/mesh-conditions/cmd/mesh-conditions/tools.go @@ -17,14 +17,13 @@ import ( ) // Verbs are the seat's verbs, as the manifest claims them. -var Verbs = []string{"conditions", "silence", "compare", "take-over", "hand-back", "resync"} +var Verbs = []string{"conditions", "silence", "resync"} // The keeper's own read tools. const ( - HistoryTool = "conditions_history" - HeldTool = "conditions_held" - TakeoverTool = "conditions_takeover" - InputsTool = "conditions_inputs" + HistoryTool = "conditions_history" + HeldTool = "conditions_held" + InputsTool = "conditions_inputs" ) // briefEvidence is how many observations a condition carries in a list: its newest (the controller's, issue 314). @@ -50,7 +49,7 @@ func str(description string) map[string]any { } // Tools are what the runtime serves. -func Tools(k *Keeper, a Asks) []stdio.Tool { +func Tools(k *Keeper) []stdio.Tool { return []stdio.Tool{ {Name: Seat + ".conditions", Description: "What is wrong with the mesh now: every open condition, urgent first, then " + "oldest, raised from the observers' findings and cleared when the finding goes, never by hand. Given a key, that " + @@ -70,19 +69,6 @@ func Tools(k *Keeper, a Asks) []stdio.Tool { } return k.Silence(strArg(args, "key"), d, stdio.CallerOf(args), strArg(args, "why")) }}, - {Name: Seat + ".compare", Description: "The keeper's open conditions against the controller's, each difference with " + - "its reason; what ends with the controller, what only the keeper raises and what is held listed apart.", - Run: func(map[string]any) (any, error) { return k.Compare() }}, - {Name: Seat + ".take-over", Description: "Refused: the keeper is the one source of conditions since the " + - "controller ended by its unassignment (issue 1126); kept as the seat's verb until the seat drops it.", - Input: obj(map[string]any{"why": str("why now")}, "why"), - Run: func(args map[string]any) (any, error) { - return k.TakeOver(a, stdio.CallerOf(args), strArg(args, "why")) - }}, - {Name: Seat + ".hand-back", Description: "Gone: the readers of conditions hear the keeper alone, so there is nothing " + - "to hand back; answered as gone and changes nothing (ADR 0564 clause 9).", - Input: obj(map[string]any{"why": str("why")}, "why"), - Run: func(args map[string]any) (any, error) { return k.HandBack(stdio.CallerOf(args), strArg(args, "why")) }}, {Name: Seat + ".resync", Description: "Read every finding again and raise and clear what differs.", Run: func(map[string]any) (any, error) { n, err := k.Resync() @@ -99,16 +85,8 @@ func Tools(k *Keeper, a Asks) []stdio.Tool { bounds, err := k.Store.Keys(BoundsState) return map[string]any{"held": k.Held(), "bounds": bounds}, err }}, - {Name: TakeoverTool, Description: "The take-over key: which source the router, the grants part and mesh-watcher hear.", - Run: func(map[string]any) (any, error) { - raw, _, found, err := k.Store.Get(TakeoverState, health.TakeoverKey) - if err != nil { - return nil, err - } - return health.DecodeTakeover(raw, found) - }}, {Name: InputsTool, Description: "What the keeper reads, as it stands: each observer's findings counted, an observer it " + - "cannot read and why, the healers' attempts, the controller's conditions and whether its lease is handed away.", + "cannot read and why, the healers' attempts, the wants and the haves.", Run: func(map[string]any) (any, error) { return k.Inputs(), nil }}, } } @@ -212,7 +190,6 @@ func (k *Keeper) Inputs() map[string]any { findings[o] = len(fs) } return map[string]any{"findings": findings, "blind": k.blind, "attempts": len(k.attempts), - "controller-conditions": len(k.ctrl), "follow": k.takeover.Follow, "wants": len(k.wants), "haves": len(k.haves)} } diff --git a/modules/mesh-conditions/cmd/mesh-conditions/whole_integration_test.go b/modules/mesh-conditions/cmd/mesh-conditions/whole_integration_test.go index b788bafb..637685bd 100644 --- a/modules/mesh-conditions/cmd/mesh-conditions/whole_integration_test.go +++ b/modules/mesh-conditions/cmd/mesh-conditions/whole_integration_test.go @@ -266,7 +266,7 @@ func TestTheKeeperWholeRaisesAndClearsOnTheBus(t *testing.T) { for _, o := range Observers { buckets = append(buckets, o+"_findings") } - for _, s := range []string{ConditionsState, HistoryState, TakeoverState, HeldState, BoundsState, AskedState} { + for _, s := range []string{ConditionsState, HistoryState, HeldState, BoundsState} { buckets = append(buckets, Module+"_"+s) } for _, b := range buckets { diff --git a/modules/mesh-conditions/module.json b/modules/mesh-conditions/module.json index 7a02f96e..72000202 100644 --- a/modules/mesh-conditions/module.json +++ b/modules/mesh-conditions/module.json @@ -9,9 +9,6 @@ "serves": [ "conditions", "silence", - "compare", - "take-over", - "hand-back", "resync" ] } @@ -38,13 +35,11 @@ "name": "history", "ttl-seconds": 7776000 }, - "takeover", "held", { "name": "bounds", "key-ttl": true - }, - "asked" + } ], "own-secrets": { "broker": "${dir:state}/broker" diff --git a/modules/mesh-config/README.md b/modules/mesh-config/README.md index fb841a1e..e5fffe1a 100644 --- a/modules/mesh-config/README.md +++ b/modules/mesh-config/README.md @@ -66,14 +66,9 @@ Each directory or archive this module declares says how it treats a file it did - `mesh-config_declared`: each placed module's declarations at the trunk, with the manifest and commit they come from, written only when they differ. -- `mesh-config_takeover`: the key `switch` names the source that holds: none (declarations from the modules' own - manifests, the list from the indexer's `predefined`, pull requests' config from the controller's `pull-declares`), - or `indexer` after the operator's take-over (pull requests' config from the indexer's `config-candidates`; the - controller's `pull-declares` refused). A switch still naming `controller` (the old hand-back) is read as `indexer` and - said gone. Each take-over ask is kept beside it. -- `config_compare` lists every difference between each open pull request's candidate at the indexer and what the - controller told by `pull-declares`; the controller's mirrors are no longer read (ADR 0565 §4, issue 774). - `config_take_over` asks the operator's Approve, refused while any difference stands and switched on the Approve only - if none stands then. `config_hand_back` is gone: it answers so and changes nothing. `config_declared` and `config_resync` read and write again what it keeps. +- Its own sources hold always (novox/hq ADR 0590): declarations from the modules' own manifests, the list from the + indexer's `predefined`, pull requests' config from the indexer's `config-candidates`. The controller's + `pull-declares`, the take-over, compare and hand-back went with the controller. `config_declared` and + `config_resync` read and write again what it keeps. - A trusted value is set only through propose and the operator's Approve: no controller relay is trusted (issue 1126). - Its sets, clears and warrants are recorded in the hand-act log of the seat `mesh-hand-acts` alone. diff --git a/modules/mesh-config/cmd/mesh-config/main.go b/modules/mesh-config/cmd/mesh-config/main.go index 1311eb3d..93b271a8 100644 --- a/modules/mesh-config/cmd/mesh-config/main.go +++ b/modules/mesh-config/cmd/mesh-config/main.go @@ -124,7 +124,7 @@ func resolving(c *Config) { // A build's manifest is written before a want names the build, so a want, a trunk module or a placement moving is // every change of what a module declares where (issue 1953); the builds themselves are read, not watched. for _, read := range []string{PlacementRead, WantsRead, ModulesRead, IndexerPredefinedRead, - CandidatesRead, TakeoverState} { + CandidatesRead} { // Asked again until the runtime takes it, each give-up said (mesh-sdk's Follow). go stdio.State(read).Follow("", poke) } diff --git a/modules/mesh-config/cmd/mesh-config/manifest_test.go b/modules/mesh-config/cmd/mesh-config/manifest_test.go index 19e66dab..7c3b73a9 100644 --- a/modules/mesh-config/cmd/mesh-config/manifest_test.go +++ b/modules/mesh-config/cmd/mesh-config/manifest_test.go @@ -31,10 +31,10 @@ func TestEveryStateAndActHasItsTool(t *testing.T) { via := map[string]string{ ValuesState: "config list", ResolvedState: "config list", PredefinedState: "config list", ProposalsState: "config proposals", PullsState: "config list", KeptState: "config list", HistoryLog: "config history", - DeclaredState: DeclaredTool, TakeoverState: DeclaredTool, - PlacementRead: CompareTool, WantsRead: CompareTool, BuildsRead: CompareTool, ModulesRead: DeclaredTool, - ManifestsRead: DeclaredTool, IndexerPredefinedRead: CompareTool, CandidatesRead: CompareTool, - "a resolution": ResyncTool, "the indexer's candidates taken": ResyncTool, "a take-over decided": TakeOverTool, + DeclaredState: DeclaredTool, + PlacementRead: "config list", WantsRead: "config list", BuildsRead: "config list", ModulesRead: DeclaredTool, + ManifestsRead: DeclaredTool, IndexerPredefinedRead: "config list", CandidatesRead: ResyncTool, + "a resolution": ResyncTool, "the indexer's candidates taken": ResyncTool, } served := map[string]bool{} for _, tool := range Tools(&Config{}) { diff --git a/modules/mesh-config/cmd/mesh-config/proposals.go b/modules/mesh-config/cmd/mesh-config/proposals.go index 18619024..d6cb304d 100644 --- a/modules/mesh-config/cmd/mesh-config/proposals.go +++ b/modules/mesh-config/cmd/mesh-config/proposals.go @@ -758,7 +758,6 @@ func (c *Config) Decide() ([]string, error) { for _, r := range ready { said = append(said, c.decide(r.p, r.w)) } - said = append(said, c.decideTakeovers()...) c.recordWarrants(now) return said, nil } diff --git a/modules/mesh-config/cmd/mesh-config/pulls.go b/modules/mesh-config/cmd/mesh-config/pulls.go index 8c0647a6..22849bd8 100644 --- a/modules/mesh-config/cmd/mesh-config/pulls.go +++ b/modules/mesh-config/cmd/mesh-config/pulls.go @@ -136,59 +136,15 @@ type PullDeclaresAnswer struct { Unsaid []string `json:"unsaid,omitempty"` } -// PullDeclares keeps what a pull request's head declares, from the controller alone, and judges again the values -// held for it: a value whose key is declared the same (by digest) and still passes is kept at the new head; any -// other is dropped, recorded and raised, and must be proposed again (ADR 0502 clause 6). -func (c *Config) PullDeclares(call Call) (*PullDeclaresAnswer, error) { - if call.Caller != ControllerCaller { - return nil, fmt.Errorf("pull-declares is the controller's: it reads a pull request's manifests and tells "+ - "mesh-config what the head declares; %s is not the controller", call.Caller) - } - if sw, err := c.source(); err != nil { - return nil, err - } else if sw.Source == SourceIndexer { - return nil, errors.New("pull-declares is refused: since the take-over mesh-config reads a pull request's config " + - "declarations from the indexer's config-candidates (novox/hq ADR 0565 §4)") - } - if _, _, _, err := parsePull(call.Pull); err != nil { - return nil, err - } - head := strings.TrimSpace(call.Head) - if head == "" { - return nil, errors.New("name the head the declarations are read at") - } - raw, err := json.Marshal(call.Declares) - if err != nil { - return nil, fmt.Errorf("the declarations cannot be read: %v", err) - } - declares := map[string]map[string]Declaration{} - if call.Declares != nil { - if err := json.Unmarshal(raw, &declares); err != nil { - return nil, fmt.Errorf("declares is the modules' declarations, a key to a declaration for each module: %v", err) - } - } - for m, keys := range declares { - if !nodeOrModule.MatchString(m) { - return nil, fmt.Errorf("%q is not a module's name", m) - } - for k, d := range keys { - if !keyName.MatchString(k) { - return nil, fmt.Errorf("%q is not a config key", k) - } - if !d.HasDefault() { - d.Default = nil - } - keys[k] = d - } - } - pull := strings.TrimSpace(call.Pull) - c.mu.Lock() - defer c.mu.Unlock() - return c.declarePull(pull, head, declares) +// PullDeclares is gone: a pull request's config declarations are read from the indexer's config-candidates +// (takeCandidates), and the controller that told them is not placed (novox/hq ADR 0565 §4, ADR 0590). +func (c *Config) PullDeclares(Call) (*PullDeclaresAnswer, error) { + return nil, errors.New("pull-declares is gone: mesh-config reads a pull request's config declarations from the " + + "indexer's config-candidates (novox/hq ADR 0565 §4, ADR 0590)") } -// declarePull keeps what a pull request's head declares and judges again the values held for it; from the -// controller's pull-declares, or after the take-over from the indexer's config candidates. The caller holds the lock. +// declarePull keeps what a pull request's head declares and judges again the values held for it, from the indexer's +// config candidates. The caller holds the lock. func (c *Config) declarePull(pull, head string, declares map[string]map[string]Declaration) (*PullDeclaresAnswer, error) { if err := c.Store.Put(PullsState, pullKey(pull), PullDecl{Pull: pull, Head: head, Declares: declares, At: c.now()}); err != nil { diff --git a/modules/mesh-config/cmd/mesh-config/pulls_test.go b/modules/mesh-config/cmd/mesh-config/pulls_test.go index 820a13b4..341b0bfb 100644 --- a/modules/mesh-config/cmd/mesh-config/pulls_test.go +++ b/modules/mesh-config/cmd/mesh-config/pulls_test.go @@ -51,13 +51,21 @@ func (f *standForge) Pull(owner, repo string, n int) (bool, bool, string, error) return st[0], st[1], f.head, nil } +// tell keeps what a pull request's head declares as the indexer's candidate is taken (takeCandidates). func tell(t *testing.T, c *Config, pull, head string, declares map[string]any) *PullDeclaresAnswer { t.Helper() - a, err := c.Do(Call{Action: "pull-declares", Pull: pull, Head: head, Declares: declares, Caller: ControllerCaller}) - if err != nil { - t.Fatalf("pull-declares: %v", err) + raw, _ := json.Marshal(declares) + d := map[string]map[string]Declaration{} + if err := json.Unmarshal(raw, &d); err != nil { + t.Fatal(err) } - return a.(*PullDeclaresAnswer) + c.mu.Lock() + defer c.mu.Unlock() + a, err := c.declarePull(pull, head, d) + if err != nil { + t.Fatalf("declare: %v", err) + } + return a } // holdIt proposes media-gid=2000 for n8n on ace held for the pull request and has the operator approve it. @@ -75,21 +83,15 @@ func holdIt(t *testing.T, c *Config, m *memStore, r *standIn) string { func keptCount(m *memStore) int { k, _ := m.Keys(KeptState); return len(k) } -// 1826/K1: mesh-config takes what a pull request declares from the controller alone, and keeps it per pull request. -func TestAPullRequestsDeclarationsAreTakenFromTheControllerAlone(t *testing.T) { +// 1826/K1: mesh-config keeps what a pull request declares per pull request; pull-declares is gone (ADR 0590). +func TestAPullRequestsDeclarationsAreKeptPerPullRequest(t *testing.T) { c, m, _, _ := aHoldingMesh(t) - for _, caller := range []string{"g14.node-tools", Unproven, ""} { + for _, caller := range []string{"g14.node-tools", Unproven, "", ControllerCaller} { if _, err := c.Do(Call{Action: "pull-declares", Pull: thePull, Head: "abc1234", Declares: n8nPullDeclares(), - Caller: caller}); err == nil || !strings.Contains(err.Error(), "controller") { + Caller: caller}); err == nil || !strings.Contains(err.Error(), "config-candidates") { t.Errorf("pull-declares from %q: %v", caller, err) } } - for _, bad := range []Call{{Pull: "mesh-catalog#434", Head: "a"}, {Pull: thePull}, {Pull: "a/b#0", Head: "a"}} { - bad.Action, bad.Caller = "pull-declares", ControllerCaller - if _, err := c.Do(bad); err == nil { - t.Errorf("pull-declares %+v was taken", bad) - } - } a := tell(t, c, thePull, "abc1234def", n8nPullDeclares()) if len(a.Modules) != 1 || a.Modules[0] != "n8n" { t.Errorf("answered %+v", a) diff --git a/modules/mesh-config/cmd/mesh-config/sources.go b/modules/mesh-config/cmd/mesh-config/sources.go index 39ee2d70..e8286bef 100644 --- a/modules/mesh-config/cmd/mesh-config/sources.go +++ b/modules/mesh-config/cmd/mesh-config/sources.go @@ -365,10 +365,6 @@ func (c *Config) Reconcile() (Resolution, error) { c.mu.Lock() defer c.mu.Unlock() var r Resolution - if sw, serr := c.source(); serr == nil && sw.Gone != "" { - r.SourceGone = sw.Gone - c.logf("[mesh-config] %s", sw.Gone) - } published, err := c.publish() if err != nil { c.logf("[mesh-config] the list of predefined keys is not published: %v", err) diff --git a/modules/mesh-config/cmd/mesh-config/switch_tools.go b/modules/mesh-config/cmd/mesh-config/switch_tools.go index 6ae3b66b..51475b1f 100644 --- a/modules/mesh-config/cmd/mesh-config/switch_tools.go +++ b/modules/mesh-config/cmd/mesh-config/switch_tools.go @@ -1,7 +1,7 @@ package main -// The tools of the switch (novox/hq ADR 0565 §4, §15): compare, take-over and hand-back, served as the seat's verbs -// and as the module's own tools beside them, the read of `declared` and resync. +// The module's own tools beside the seat's verb (novox/hq ADR 0565 §15): the read of `declared` and resync. compare, +// take-over and hand-back went with the controller (ADR 0590). import ( "strings" @@ -11,56 +11,17 @@ import ( // The switch's tools. const ( - CompareTool = "config_compare" - TakeOverTool = "config_take_over" - HandBackTool = "config_hand_back" DeclaredTool = "config_declared" ResyncTool = "config_resync" ) // SeatVerbs are the seat's verbs, as the manifest claims them. -var SeatVerbs = []string{Verb, CompareVerb, TakeOverVerb, HandBackVerb} +var SeatVerbs = []string{Verb} -func switchTools(c *Config) []stdio.Tool { - own := ownSwitchTools(c) - byName := map[string]stdio.Tool{} - for _, t := range own { - byName[t.Name] = t - } - for verb, tool := range map[string]string{CompareVerb: CompareTool, TakeOverVerb: TakeOverTool, HandBackVerb: HandBackTool} { - t := byName[tool] - t.Name = Seat + "." + verb - own = append(own, t) - } - return own -} +func switchTools(c *Config) []stdio.Tool { return ownSwitchTools(c) } func ownSwitchTools(c *Config) []stdio.Tool { - why := map[string]any{"type": "object", "properties": map[string]any{ - "why": map[string]any{"type": "string", "description": "why, in a sentence"}}, "required": []string{"why"}} - whyOf := func(a map[string]any) string { s, _ := a["why"].(string); return strings.TrimSpace(s) } return []stdio.Tool{ - {Name: CompareTool, - Description: "Every difference between the indexer's records and the controller's pull-declares (novox/hq ADR 0565 §4): " + - "each open pull request's config (the indexer's candidate against the controller's pull-declares), each " + - "with its reason. The controller's mirrors are no longer read, so nothing else is compared. The " + - "take-over is refused while any stands.", - Run: func(map[string]any) (any, error) { return c.Compare() }}, - {Name: TakeOverTool, - Description: "Ask the operator's Approve, under mesh-config's own name, to switch config to its own sources: " + - "the indexer's list of predefined keys and pull request config, refusing the controller's pull-declares. " + - "Refused while compare shows a difference; on Approve switched if nothing differs then.", - Input: why, - Run: func(a map[string]any) (any, error) { - return c.TakeOver(Call{Why: whyOf(a), Caller: stdio.CallerOf(a)}) - }}, - {Name: HandBackTool, - Description: "Gone: the controller's records end with its lease and config no longer reads them (novox/hq ADR 0565 §4, " + - "issue 774); answers that, and changes nothing.", - Input: why, - Run: func(a map[string]any) (any, error) { - return c.HandBack(Call{Why: whyOf(a), Caller: stdio.CallerOf(a)}) - }}, {Name: DeclaredTool, Description: "Each placed module's declarations as config keeps them (its state declared): the manifest and " + "commit they come from and how many keys, or one module whole; and which source holds now.", @@ -72,7 +33,7 @@ func ownSwitchTools(c *Config) []stdio.Tool { }}, {Name: ResyncTool, Description: "Read every source again and write what differs: the published list of predefined keys, the " + - "resolved values, declared, and after the take-over the indexer's config candidates.", + "resolved values, declared, and the indexer's config candidates.", Run: func(map[string]any) (any, error) { return c.Resync() }}, } } diff --git a/modules/mesh-config/cmd/mesh-config/takeover.go b/modules/mesh-config/cmd/mesh-config/takeover.go index eefae9ad..26ca344b 100644 --- a/modules/mesh-config/cmd/mesh-config/takeover.go +++ b/modules/mesh-config/cmd/mesh-config/takeover.go @@ -1,95 +1,44 @@ package main -// Config's records out of the controller (novox/hq ADR 0565 §3, §4, §13, §15, and the progressive insight of -// 2026-10-29): mesh-config keeps each placed module's declarations in its own state `declared`; `compare` lists every -// difference between each open pull request's candidate at the indexer and what the controller told by pull-declares; -// `take-over` asks the operator's Approve under mesh-config's own name and, refused while anything differs, writes the -// key `takeover.switch` naming the indexer. +// Config's records out of the controller (novox/hq ADR 0565 §3, §15, and the progressive insight of 2026-10-29): +// mesh-config keeps each placed module's declarations in its own state `declared`, reads the list of predefined keys +// from the indexer's `predefined` and a pull request's config from the indexer's `config-candidates`. // -// **The controller's records are no longer read** (issue 774, ADR 0571 §13): its mirrors `declared-config` and -// `predefined` are gone from the reads, so declarations come from each placed module's own manifests and the list of -// predefined keys from the indexer's `predefined`, whatever the switch says. `hand-back` is answered as gone (ADR 0565 -// §4: it ends with the lease), and a switch that still names the controller is read as the indexer, said so. -// -// **Which source holds** is the key `switch` alone, read by mesh-config alone: -// - none written: a pull request's declarations from the controller's pull-declares; -// - `indexer` (taken over): a pull request's from the indexer's `config-candidates`; pull-declares refused; -// - `controller` (the old hand-back): gone, read as `indexer`. +// **Its own sources hold always** (ADR 0590, issue 1126): the controller ended by its unassignment, so its pull-declares, +// the take-over that switched away from them, compare and hand-back are gone, and the switch is the indexer's whatever +// a key once said. import ( "bytes" "encoding/json" "errors" "fmt" - "sort" - "strings" - "time" - "git.novox.be/novox/mesh-sdk/go/asks" "git.novox.be/novox/mesh-sdk/go/delivery" ) -// The states and reads of the switch. +// The states and reads. const ( // DeclaredState is each placed module's declarations at the trunk, one key per module (ADR 0565 §3). DeclaredState = "declared" - // TakeoverState holds the key SwitchKey and each take-over ask, `ask.`. - TakeoverState = "takeover" - SwitchKey = "switch" // IndexerPredefinedRead and CandidatesRead are the indexer's states (ADR 0565 §2). IndexerPredefinedRead = delivery.IndexerModule + "." + delivery.IndexerPredefinedState CandidatesRead = delivery.IndexerModule + "." + delivery.IndexerConfigCandidatesState ) -// The sources the switch names. -const ( - SourceInterim = "interim" - SourceIndexer = "indexer" - // SourceController is a switch the old hand-back wrote; the controller's records are gone, so it is read as the indexer. - SourceController = "controller" -) +// SourceIndexer is the one source of a pull request's config and of the predefined list: the indexer's. +const SourceIndexer = "indexer" -// TakeOverVerb and HandBackVerb are the seat's verbs. -const ( - TakeOverVerb = "take-over" - HandBackVerb = "hand-back" - CompareVerb = "compare" -) - -// Switch is the key `takeover.switch`: the source that holds, who chose it, why and on which ask. +// Switch is which source holds: the indexer's, always, since the controller ended (ADR 0590). type Switch struct { - Source string `json:"source"` - At time.Time `json:"at"` - By string `json:"by"` - Why string `json:"why"` - Ask string `json:"ask,omitempty"` - // Gone says the stored switch named the controller, whose records config no longer reads (ADR 0565 §4); the switch - // returned is then the indexer's. Never stored. - Gone string `json:"-"` + Source string `json:"source"` + Why string `json:"why"` } -// goneSource is what is said of a switch that still names the controller. -const goneSource = "the switch names the controller, which is gone: config no longer reads its records (novox/hq ADR 0565 §4, " + - "issue 774) and reads the indexer's" - -// source is the source that holds now. +// source is the source that holds: the indexer's. func (c *Config) source() (Switch, error) { - e, err := c.Store.Get(TakeoverState, SwitchKey) - if err != nil { - return Switch{}, fmt.Errorf("the take-over's switch cannot be read: %w", err) - } - if e == nil { - return Switch{Source: SourceInterim}, nil - } - var s Switch - if err := json.Unmarshal(e.Value, &s); err != nil || (s.Source != SourceIndexer && s.Source != SourceController) { - return Switch{}, fmt.Errorf("the take-over's switch is not one: %s", e.Value) - } - if s.Source == SourceController { - s.Source, s.Gone = SourceIndexer, goneSource - } - return s, nil + return Switch{Source: SourceIndexer, Why: "config reads its own sources since the controller ended by its unassignment (novox/hq ADR 0590)"}, nil } // ---- declared -------------------------------------------------------------------------------------------- @@ -254,368 +203,6 @@ func declaresDigest(d map[string]map[string]Declaration) string { return string(raw) } -// ---- compare ---------------------------------------------------------------------------------------------- - -// Difference is one thing the indexer's records and the controller's pull-declares say differently, and why. -type Difference struct { - What string `json:"what"` - Module string `json:"module,omitempty"` - Node string `json:"node,omitempty"` - Key string `json:"key,omitempty"` - Pull string `json:"pull,omitempty"` - Own json.RawMessage `json:"own,omitempty"` - Why string `json:"why"` -} - -// The kinds of difference. -const ( - DiffPull = "pull" -) - -// Comparison is what compare answers. -type Comparison struct { - Source string `json:"source"` - Differences []Difference `json:"differences"` - Count int `json:"count"` - Said string `json:"said"` - // Gone is said when the stored switch still names the controller. - Gone string `json:"gone,omitempty"` -} - -// Compare lists every difference (ADR 0565 §4 and its insight). The caller holds no lock. -func (c *Config) Compare() (*Comparison, error) { - c.mu.Lock() - defer c.mu.Unlock() - return c.compare() -} - -// compare is Compare; the caller holds the lock. The controller's mirrors are no longer read (issue 774, ADR 0565 §4), -// so the declarations, the list and the resolved values have no second side: what remains to compare is each open pull -// request's candidate at the indexer against what the controller told by pull-declares. -func (c *Config) compare() (*Comparison, error) { - sw, err := c.source() - if err != nil { - return nil, err - } - var own Sources - if err := c.readPulls(&own); err != nil { - return nil, fmt.Errorf("mesh-config's own pull request records cannot be read: %w", err) - } - var diffs []Difference - - // Each open pull request: the indexer's candidate against what the controller told by pull-declares. - cands, cerr := c.candidates() - if cerr != nil { - diffs = append(diffs, Difference{What: DiffPull, Why: "the indexer's config candidates cannot be read: " + cerr.Error()}) - } - settled := map[string]string{} // a pull request the forge says is no longer open → how it ended - for _, k := range unionKeys(cands, own.Pulls) { - a, aok := cands[k] - b, bok := own.Pulls[k] - isSettled, forgeNote := c.pullSettled(firstNonEmpty(a.Pull, b.Pull), settled) - if isSettled { - continue // a merged or closed pull request is no candidate to agree on (the operator, 2026-11-01) - } - before := len(diffs) - switch { - case !aok: - diffs = append(diffs, Difference{What: DiffPull, Pull: b.Pull, Why: "the controller told its declarations and the indexer holds no candidate"}) - case !bok: - diffs = append(diffs, Difference{What: DiffPull, Pull: a.Pull, Why: "the indexer holds a candidate and the controller told nothing"}) - case a.Head != b.Head: - diffs = append(diffs, Difference{What: DiffPull, Pull: a.Pull, Why: fmt.Sprintf("the indexer's candidate is at %s, "+ - "the controller told %s", short(a.Head), short(b.Head))}) - case declaresDigest(a.Declares) != declaresDigest(b.Declares): - diffs = append(diffs, Difference{What: DiffPull, Pull: a.Pull, Why: "the two declare its config otherwise"}) - } - if forgeNote != "" && len(diffs) > before { - diffs[len(diffs)-1].Why += "; " + forgeNote // the row stays because the forge was not heard: say so in the row - } - } - - sort.SliceStable(diffs, func(i, j int) bool { - a, b := diffs[i], diffs[j] - return a.What+a.Module+a.Node+a.Key+a.Pull < b.What+b.Module+b.Node+b.Key+b.Pull - }) - if diffs == nil { - diffs = []Difference{} - } - cmp := &Comparison{Source: sw.Source, Differences: diffs, Count: len(diffs), Gone: sw.Gone} - if len(diffs) == 0 { - cmp.Said = "nothing differs: the take-over may be asked (the controller's mirrors are no longer read, so only the pull requests are compared)" - } else { - cmp.Said = fmt.Sprintf("%d difference(s): the take-over is refused while any stands", len(diffs)) - } - return cmp, nil -} - -func firstNonEmpty(a, b string) string { - if a != "" { - return a - } - return b -} - -// pullSettled is whether the forge says a pull request merged or closed. Without a forge, or when it does not say, the -// pull request counts as open, so its row stays (failure is loud). -func (c *Config) pullSettled(pull string, memo map[string]string) (bool, string) { - if c.Forge == nil || pull == "" { - return false, "" - } - if v, ok := memo[pull]; ok { - return v != "" && !strings.HasPrefix(v, forgeSilent), forgeNoteOf(v) - } - owner, repo, n, err := parsePull(pull) - if err != nil { - return false, "" - } - open, merged, _, err := c.Forge.Pull(owner, repo, n) - switch { - case err != nil: - c.logf("[mesh-config] compare: the forge does not say whether %s is open (%v); its row stays", pull, err) - memo[pull] = forgeSilent + err.Error() - case open: - memo[pull] = "" - case merged: - memo[pull] = "merged" - default: - memo[pull] = "closed" - } - v := memo[pull] - return v != "" && !strings.HasPrefix(v, forgeSilent), forgeNoteOf(v) -} - -// forgeSilent marks a memo entry for a pull request the forge could not be asked about; the rest of the entry is why. -const forgeSilent = "forge-silent: " - -// forgeNoteOf is the words a row carries when the forge was not heard on its pull request, or "". -func forgeNoteOf(v string) string { - if why, ok := strings.CutPrefix(v, forgeSilent); ok { - return "the forge does not say whether the pull request is open (" + why + ")" - } - return "" -} - -func unionKeys[A, B any](a map[string]A, b map[string]B) []string { - seen := map[string]bool{} - for k := range a { - seen[k] = true - } - for k := range b { - seen[k] = true - } - return sortedKeys(seen) -} - -// ---- take-over and hand-back --------------------------------------------------------------------------------- - -// TakeoverAsk is one take-over asked of the operator, `takeover.ask.`: what the ask is composed from again, and -// where it stands. -type TakeoverAsk struct { - ID string `json:"id"` - From string `json:"from"` - Why string `json:"why"` - At time.Time `json:"at"` - State string `json:"state"` - Outcome string `json:"outcome,omitempty"` - Decided time.Time `json:"decided,omitzero"` - Answered string `json:"answered,omitempty"` - Recorded bool `json:"recorded,omitempty"` -} - -func askKey(id string) string { return "ask." + id } - -// act is what an answer to the take-over binds. -func (t TakeoverAsk) act(option string) asks.Act { - return asks.Act{"verb": Seat + "." + TakeOverVerb, "option": option, "ask": t.ID, "from": t.From, - "at": t.At.UTC().Format(time.RFC3339Nano)} -} - -// ask is the take-over's ask, composed from it alone. -func (t TakeoverAsk) ask() asks.Ask { - why, _ := sayable("Why: " + t.Why) - a := asks.Ask{ID: t.ID, Headline: "Switch config to its own sources", - Explanation: strings.Join([]string{ - "mesh-config would read each pull request's config from the delivery's " + - "indexer, no longer from the controller. Nothing any node resolves changes: compare showed no difference.", - point(why)}, "\n"), - Who: asks.Operator, Expires: t.At.Add(ProposalLasts), - OnExpiry: "nothing changes; a pull request's config keeps coming from the controller's pull-declares", About: "config.takeover", - Details: "Read what was compared with mesh-config's compare verb, through the mesh MCP server. hand-back is gone."} - for _, o := range []struct{ id, label, does string }{ - {OptionApprove, "Approve", "config switches to its own sources at once, if nothing differs then"}, - {OptionDecline, "Decline", "nothing changes"}, - } { - binds, _ := asks.ActDigest(t.act(o.id)) - a.Options = append(a.Options, asks.Option{ID: o.id, Label: o.label, Does: o.does, Level: asks.Approve, Binds: binds}) - } - return a -} - -// TakeoverAnswer is what take-over and hand-back answer. -type TakeoverAnswer struct { - Said string `json:"said"` - Ask string `json:"ask,omitempty"` - Source string `json:"source"` -} - -// TakeOver asks the operator's Approve to switch to the own sources, refused while compare shows a difference. -func (c *Config) TakeOver(call Call) (*TakeoverAnswer, error) { - if strings.TrimSpace(call.Why) == "" { - return nil, errors.New("say why the take-over is asked now: it is shown to the operator") - } - if call.Caller == "" || call.Caller == Unproven { - return nil, errors.New("the call names no proven caller") - } - if c.Asks == nil { - return nil, errors.New("the operator cannot be asked from here, so nothing is switched") - } - c.mu.Lock() - defer c.mu.Unlock() - sw, err := c.source() - if err != nil { - return nil, err - } - if sw.Source == SourceIndexer { - return &TakeoverAnswer{Source: sw.Source, Said: "config reads its own sources already, since " + - sw.At.UTC().Format(time.RFC3339) + " (" + sw.By + ")"}, nil - } - cmp, err := c.compare() - if err != nil { - return nil, err - } - if cmp.Count > 0 { - first := cmp.Differences[0] - return nil, fmt.Errorf("the take-over is refused: compare shows %d difference(s), the first %s %s%s%s%s: %s. "+ - "Nothing was asked", cmp.Count, first.What, first.Module, first.Node, first.Key, first.Pull, first.Why) - } - now := c.now() - var open []string - _ = c.each(TakeoverState, func(key string, raw []byte) error { - var t TakeoverAsk - if strings.HasPrefix(key, "ask.") && json.Unmarshal(raw, &t) == nil && t.State == ProposalWaiting && - now.Before(t.At.Add(ProposalLasts)) { - open = append(open, t.ID) - } - return nil - }) - if len(open) > 0 { - return nil, fmt.Errorf("the take-over is asked already, as %s, and waits for the operator's answer", open[0]) - } - t := TakeoverAsk{ID: "takeover-" + newProposalID(), From: call.Caller, Why: strings.TrimSpace(call.Why), At: now.UTC(), - State: ProposalWaiting} - ask := t.ask() - if err := ask.Check(now); err != nil { - return nil, err - } - if err := c.Store.Put(TakeoverState, askKey(t.ID), t); err != nil { - return nil, fmt.Errorf("the take-over could not be kept, so the operator was not asked: %w", err) - } - if err := c.Asks.Publish(asks.AskSubject(Module), ask, ask.ID); err != nil { - t.State, t.Outcome = ProposalUnasked, "the ask could not be published: "+err.Error() - _ = c.Store.Put(TakeoverState, askKey(t.ID), t) - return nil, fmt.Errorf("the operator could not be asked: %w", err) - } - return &TakeoverAnswer{Ask: t.ID, Source: sw.Source, Said: fmt.Sprintf("the operator is asked %q under "+ - "mesh-config's own name; nothing changes until they approve, and on Approve config switches if nothing differs "+ - "then", ask.Headline)}, nil -} - -// decideTakeovers acts on each take-over ask the router has closed. The caller holds the lock. -func (c *Config) decideTakeovers() []string { - var said []string - var waiting []TakeoverAsk - _ = c.each(TakeoverState, func(key string, raw []byte) error { - var t TakeoverAsk - if strings.HasPrefix(key, "ask.") && json.Unmarshal(raw, &t) == nil && t.State == ProposalWaiting { - waiting = append(waiting, t) - } - return nil - }) - now := c.now() - for _, t := range waiting { - keep := func(state, outcome string) string { - t.State, t.Outcome, t.Decided = state, outcome, now - _ = c.Store.Put(TakeoverState, askKey(t.ID), t) - return "take-over " + t.ID + ": " + outcome - } - e, err := c.Asks.Record(t.ID) - if err != nil || e == nil { - if err == nil && now.After(t.At.Add(ProposalLasts+time.Hour)) { - said = append(said, keep(ProposalEnded, "the router keeps no record of its ask; nothing was switched")) - } - continue - } - var rec routerRecord - if json.Unmarshal(e.Value, &rec) != nil || rec.State == "open" || rec.Warrant == nil { - continue - } - w := *rec.Warrant - if w.Asker != Module || w.Ask != t.ID { - said = append(said, keep(ProposalRefused, "the router's record is for another ask; nothing was switched")) - continue - } - if w.Outcome != asks.OutcomeChosen { - said = append(said, keep(ProposalEnded, "the ask "+string(w.Outcome)+"; nothing was switched")) - continue - } - option, err := w.For(Module, t.ask()) - if err == nil { - err = option.Performs(t.act(option.ID)) - } - if err != nil { - said = append(said, keep(ProposalRefused, "the answer is refused: "+err.Error())) - continue - } - t.Answered = w.Says() - if option.ID != OptionApprove { - said = append(said, keep(ProposalDeclined, "declined by the operator; nothing was switched")) - continue - } - cmp, err := c.compare() - switch { - case err != nil: - said = append(said, keep(ProposalRefused, "approved, and compare could not be read, so nothing was switched: "+err.Error())) - continue - case cmp.Count > 0: - said = append(said, keep(ProposalRefused, fmt.Sprintf("approved, and refused: compare shows %d difference(s) "+ - "now; nothing was switched, ask again once it is empty", cmp.Count))) - continue - } - sw := Switch{Source: SourceIndexer, At: now.UTC(), By: approvedTakeover(w), Why: t.Why, Ask: t.ID} - if err := c.Store.Put(TakeoverState, SwitchKey, sw); err != nil { - said = append(said, fmt.Sprintf("take-over %s: approved, and the switch could not be written (%v); read again "+ - "on the next look", t.ID, err)) - continue - } - if err := c.Asks.Warranted(t.ID); err == nil { - t.Recorded = true - } - said = append(said, keep(ProposalApproved, "approved by the operator: config reads its own sources from now")) - } - return said -} - -func approvedTakeover(w asks.Warrant) string { - if w.By == nil { - return "the operator" - } - return fmt.Sprintf("the %s, as %s identity %s", w.By.Who, w.By.Kind, w.By.Identity) -} - -// HandBack is answered as gone: the controller's records end with its lease, and config no longer reads them (novox/hq -// ADR 0565 §4, issue 774). Nothing is written. -func (c *Config) HandBack(call Call) (*TakeoverAnswer, error) { - if strings.TrimSpace(call.Why) == "" { - return nil, errors.New("say why config hands back: it is kept with the switch") - } - if call.Caller == "" || call.Caller == Unproven { - return nil, errors.New("the call names no proven caller") - } - return nil, errors.New("hand-back is gone: the controller's records end with its lease and config no longer reads " + - "them, so there is nothing to hand back to (novox/hq ADR 0565 §4); nothing was changed") -} - // Declared is the read of `declared`: every module's key, or one whole. func (c *Config) Declared(module string) (any, error) { if module != "" { @@ -641,7 +228,7 @@ func (c *Config) Declared(module string) (any, error) { } // Resync reads every source again and writes what differs: the published list, the resolved values, `declared`, and -// after the take-over the indexer's config candidates (ADR 0565 §15). +// the indexer's config candidates (ADR 0565 §15). func (c *Config) Resync() (any, error) { r, err := c.Reconcile() if err != nil { diff --git a/modules/mesh-config/cmd/mesh-config/takeover_test.go b/modules/mesh-config/cmd/mesh-config/takeover_test.go index 91ed0105..f0c0bbad 100644 --- a/modules/mesh-config/cmd/mesh-config/takeover_test.go +++ b/modules/mesh-config/cmd/mesh-config/takeover_test.go @@ -2,11 +2,8 @@ package main import ( "encoding/json" - "errors" - "slices" "strings" "testing" - "time" "git.novox.be/novox/mesh-sdk/go/delivery" ) @@ -18,7 +15,7 @@ const ( oldDeclared = `{"module":"old","settings":{"workers":{"kind":"preference","default":4,"why":"two per core"}}}` ) -// anAgreeingMesh is aProposingMesh with the indexer's predefined list in place and no open pull request: compare is empty. +// anAgreeingMesh is aProposingMesh with the indexer's predefined list in place and no open pull request. func anAgreeingMesh(t *testing.T) (*Config, *memStore, *standIn) { t.Helper() c, m, r := aProposingMesh(t) @@ -47,80 +44,11 @@ func candidate(t *testing.T, m *memStore, pull, head, declares string) { m.mirror(t, CandidatesRead, key, `{"v":1,"pull":"`+pull+`","head":"`+head+`","declares":`+declares+`}`) } -func kinds(cmp *Comparison) []string { - var out []string - for _, d := range cmp.Differences { - k := d.What + ":" + d.Module + d.Pull + d.Key - if d.Node != "" { - k += "@" + d.Node - } - if !slices.Contains(out, k) { - out = append(out, k) - } - } - return out -} - -// compare lists every difference with its reason — a pull request's config at the indexer against what the controller -// told — and the take-over is refused while one stands (ADR 0565 §4 and its insight of 2026-10-29; issue 1953 L5-C4). -// The controller's mirrors are no longer read, so no declaration, list or value is compared (issue 774, S9). -func TestCompareListsEveryDifferenceAndTheTakeOverWaitsForNone(t *testing.T) { - cases := []struct { - name string - change func(t *testing.T, m *memStore) - want []string - }{ - {"all agree", func(*testing.T, *memStore) {}, nil}, - {"a pull request only the indexer holds", func(t *testing.T, m *memStore) { - candidate(t, m, "novox/mesh-catalog#9", "h1", `{"dunst":{"gap":{"kind":"","type":"number","default":2}}}`) - }, []string{"pull:novox/mesh-catalog#9"}}, - {"a candidate of a merged pull request is no difference", func(t *testing.T, m *memStore) { - candidate(t, m, "novox/mesh-catalog#11", "h1", `{"dunst":{"gap":{"kind":"","type":"number","default":2}}}`) - candidate(t, m, "novox/mesh-catalog#10", "h2", `{"dunst":{"gap":{"kind":"","type":"number","default":2}}}`) - }, []string{"pull:novox/mesh-catalog#10"}}, - {"a forge that cannot be asked keeps the row and says why in it", func(t *testing.T, m *memStore) { - candidate(t, m, "novox/mesh-catalog#12", "h1", `{"dunst":{"gap":{"kind":"","type":"number","default":2}}}`) - }, []string{"pull:novox/mesh-catalog#12"}}, - } - for _, tc := range cases { - c, m, r := anAgreeingMesh(t) - c.Forge = &standForge{state: map[string][2]bool{"novox/mesh-catalog#11": {false, true}}} - if strings.Contains(tc.name, "forge that cannot be asked") { - c.Forge = &standForge{err: errors.New("forge down")} - } - tc.change(t, m) - cmp, err := c.Compare() - if err != nil { - t.Fatalf("%s: %v", tc.name, err) - } - if got := kinds(cmp); !slices.Equal(got, tc.want) { - t.Errorf("%s: compare lists %v, want %v (%+v)", tc.name, got, tc.want, cmp.Differences) - } - for _, d := range cmp.Differences { - if d.Why == "" { - t.Errorf("%s: a difference without its reason: %+v", tc.name, d) - } - if strings.Contains(tc.name, "forge that cannot be asked") && !strings.Contains(d.Why, "forge down") { - t.Errorf("%s: the row does not say the forge was not heard: %q", tc.name, d.Why) - } - } - a, err := c.TakeOver(Call{Why: "compare is empty", Caller: "person.jochen"}) - if len(tc.want) > 0 { - if err == nil || !strings.Contains(err.Error(), "refused") || len(r.subjects) != 0 { - t.Errorf("%s: the take-over was asked while compare differs: %v", tc.name, err) - } - continue - } - if err != nil || a.Ask == "" || len(r.subjects) != 1 { - t.Errorf("%s: the take-over was not asked: %v", tc.name, err) - } - } -} - -// The operator's Approve switches config to the indexer: pull-declares is refused, the list and the pull requests' -// config come from the indexer; hand-back is gone, and a switch naming the controller is read as the indexer; declared is written once per manifest (ADR 0565 §3, §4, §13). -func TestTheTakeOverAndTheHandBack(t *testing.T) { - c, m, r := anAgreeingMesh(t) +// ADR 0590 (issue 1126): config reads its own sources always, with no take-over: declared is written once per +// manifest, pull-declares is refused naming the indexer's candidates, and the list and a pull request's config come from +// the indexer. compare, take-over and hand-back went with the controller. +func TestConfigReadsItsOwnSourcesAlways(t *testing.T) { + c, m, _ := anAgreeingMesh(t) steps := []struct { name string do func() (string, error) @@ -132,22 +60,7 @@ func TestTheTakeOverAndTheHandBack(t *testing.T) { again, _ := c.Reconcile() return strings.Join(first.Declared, ",") + "|" + strings.Join(again.Declared, ","), err }, "dunst|"}, - {"pull-declares taken before the take-over", func() (string, error) { - a, err := c.PullDeclares(Call{Caller: ControllerCaller, Pull: "novox/mesh-catalog#7", Head: "h0", - Declares: map[string]any{}}) - return answered(a), err - }, "keeps what"}, - {"the take-over is asked", func() (string, error) { - _ = m.Delete(PullsState, "novox.mesh-catalog.7") // compare holds the told pull request against no candidate - a, err := c.TakeOver(Call{Why: "the release is delivered", Caller: "person.jochen"}) - return answered(a), err - }, "is asked"}, - {"the operator approves: switched to the indexer", func() (string, error) { - r.choose(t, r.lastAsk(t), OptionApprove, nil) - out, err := c.Decide() - return strings.Join(out, "; "), err - }, "reads its own sources from now"}, - {"pull-declares refused after it, naming the indexer", func() (string, error) { + {"pull-declares refused, naming the indexer", func() (string, error) { _, err := c.PullDeclares(Call{Caller: ControllerCaller, Pull: "novox/mesh-catalog#8", Head: "h1", Declares: map[string]any{}}) return "", err @@ -164,15 +77,6 @@ func TestTheTakeOverAndTheHandBack(t *testing.T) { res, err := c.Reconcile() return strings.Join(res.Candidates, "; "), err }, "from the indexer"}, - {"hand-back is gone, naming the record (774/S9/AC1)", func() (string, error) { - _, err := c.HandBack(Call{Why: "a difference was found after the switch", Caller: "person.jochen"}) - return "", err - }, "ADR 0565 §4"}, - {"a switch naming the controller is read as gone, and the indexer holds (774/S9/AC2)", func() (string, error) { - m.mirror(t, TakeoverState, SwitchKey, `{"source":"controller","by":"person.jochen","why":"old hand-back"}`) - res, err := c.Reconcile() - return res.SourceGone + "|" + string(m.resolved(t, "g14", "dunst", "width").Value), err - }, "is gone: config no longer reads its records"}, } for _, s := range steps { got, err := s.do() @@ -184,44 +88,7 @@ func TestTheTakeOverAndTheHandBack(t *testing.T) { t.Errorf("%s: said %q, want %q", s.name, text, s.want) } } - if len(m.handActs) != 0 { - t.Errorf("a hand-back that is gone recorded an act: %v", m.handActs) - } - if e, _ := m.Get(DeclaredState, "dunst"); e == nil || !strings.Contains(string(e.Value), `"manifest":"`) || !strings.Contains(string(e.Value), `"commit":"c1"`) { - t.Errorf("declared holds no dunst with its manifest: %v", e) - } - // An Approve that finds compare differing at the answer switches nothing. - c2, m2, r2 := anAgreeingMesh(t) - if _, err := c2.TakeOver(Call{Why: "now", Caller: "person.jochen"}); err != nil { - t.Fatal(err) - } - candidate(t, m2, "novox/mesh-catalog#9", "h9", `{"dunst":{"gap":{"kind":"","type":"number","default":2}}}`) - r2.choose(t, r2.lastAsk(t), OptionApprove, nil) - out, _ := c2.Decide() - if sw, _ := c2.source(); sw.Source != SourceInterim || !strings.Contains(strings.Join(out, ""), "difference") { - t.Errorf("an Approve while compare differs switched: %s, %v", sw.Source, out) + if sw, _ := c.source(); sw.Source != SourceIndexer { + t.Errorf("the source is %q", sw.Source) } } - -// lastAsk is the newest ask the router took. -func (r *standIn) lastAsk(t *testing.T) string { - t.Helper() - r.mu.Lock() - defer r.mu.Unlock() - var newest string - var at time.Time - for id, a := range r.asks { - if newest == "" || a.Expires.After(at) { - newest, at = id, a.Expires - } - } - if newest == "" { - t.Fatal("the router took no ask") - } - return newest -} - -func answered(a any) string { - raw, _ := json.Marshal(a) - return string(raw) -} diff --git a/modules/mesh-config/module.json b/modules/mesh-config/module.json index f8ae2d62..d62def76 100644 --- a/modules/mesh-config/module.json +++ b/modules/mesh-config/module.json @@ -7,10 +7,7 @@ "name": "mesh-config", "scope": "mesh", "serves": [ - "config", - "compare", - "take-over", - "hand-back" + "config" ] } ], @@ -40,9 +37,6 @@ "mesh-delivery-indexer.config-candidates" ], "tools": [ - "config_compare", - "config_take_over", - "config_hand_back", "config_declared", "config_resync" ], @@ -53,8 +47,7 @@ "proposals", "pulls", "kept", - "declared", - "takeover" + "declared" ], "logs": [ "history" diff --git a/modules/mesh-hand-acts/cmd/mesh-hand-acts/acts.go b/modules/mesh-hand-acts/cmd/mesh-hand-acts/acts.go index 289e97fe..83306052 100644 --- a/modules/mesh-hand-acts/cmd/mesh-hand-acts/acts.go +++ b/modules/mesh-hand-acts/cmd/mesh-hand-acts/acts.go @@ -30,11 +30,10 @@ import ( // The seat, the log, the states and the event, as mesh-sdk's handacts names them. const ( - Module = handacts.Module - Seat = handacts.Seat - ActsLog = handacts.ActsLog - WarrantsState = handacts.WarrantsState - ControllerActs = handacts.ControllerActs + Module = handacts.Module + Seat = handacts.Seat + ActsLog = handacts.ActsLog + WarrantsState = handacts.WarrantsState // RouterRecords is the router's record of every ask, `.` (ADR 0259): the warrant is read there. RouterRecords = "messenger.asks" RecordedEvent = handacts.EventRecorded diff --git a/modules/mesh-hand-acts/cmd/mesh-hand-acts/acts_test.go b/modules/mesh-hand-acts/cmd/mesh-hand-acts/acts_test.go index e0add639..b95c2d56 100644 --- a/modules/mesh-hand-acts/cmd/mesh-hand-acts/acts_test.go +++ b/modules/mesh-hand-acts/cmd/mesh-hand-acts/acts_test.go @@ -248,8 +248,8 @@ func TestHandActsReadsItsOwnLogAlone(t *testing.T) { put(ActsLog, VerbWarrant, CauseOperatorAnswer, "the operator", time.Hour) put(ActsLog, VerbWarrant, CauseOperatorAnswer, "the operator", 2*time.Hour) put(ActsLog, VerbRecord, "config", "ace.mesh-config", 30*24*time.Hour) - put(ControllerActs, VerbRecord, "never-read", "ace.old", time.Hour) - store.keysErr[ControllerActs] = errors.New("the controller's bucket must not be read") + put(controllerActs, VerbRecord, "never-read", "ace.old", time.Hour) + store.keysErr[controllerActs] = errors.New("the controller's bucket must not be read") cases := []struct { name string days int @@ -291,12 +291,12 @@ func TestHandActsReadsItsOwnLogAlone(t *testing.T) { // read and write nothing of the controller's bucket nor of the log (774/S10; research 072 row 26). func TestTheCopyOfTheControllersHandActsIsOver(t *testing.T) { l, store, _, now := newLog() - store.keysErr[ControllerActs] = errors.New("the controller's bucket must not be read") + store.keysErr[controllerActs] = errors.New("the controller's bucket must not be read") st, err := l.Copy("test", true) if err != nil || st.Done || !strings.Contains(st.Said, "no longer read") { t.Errorf("without a marker: %+v, %v", st, err) } - _ = store.Put(CopiedState, CopyKey, CopyMarker{At: *now, By: "start", Source: ControllerActs, Found: 606, Copied: 606}) + _ = store.Put(CopiedState, CopyKey, CopyMarker{At: *now, By: "start", Source: controllerActs, Found: 606, Copied: 606}) st, err = l.Copy("test", false) if err != nil || !st.Done || st.Marker.Copied != 606 || !strings.Contains(st.Said, "no longer read") || len(store.logKeys(ActsLog)) != 0 { t.Errorf("with a marker: %+v, %v", st, err) @@ -305,3 +305,6 @@ func TestTheCopyOfTheControllersHandActsIsOver(t *testing.T) { t.Errorf("copied says %+v, %v", s, err) } } + +// controllerActs is the controller's hand-act log as it was named: a test reads it never. +const controllerActs = "mesh-controller.hand-acts" From f8e4c1b0ae06b0acfe7ea484934b6fd652fc8231 Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 11:49:55 +0100 Subject: [PATCH 10/27] Stop serving the vault's move-asks, which only the controller called move-asks copied the controller's record of asks into the vault's once; the controller is not placed (ADR 0590) and nothing else calls it. move-in stays: the node-engine calls it. The drift test names the node's own composition now that the controller composes for none (issue 1126). Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- modules/mesh-vault/cmd/mesh-vault/move.go | 91 ------------------- .../mesh-vault/cmd/mesh-vault/move_test.go | 62 +------------ modules/mesh-vault/cmd/mesh-vault/tools.go | 22 ----- modules/mesh-vault/module.json | 1 - 4 files changed, 2 insertions(+), 174 deletions(-) diff --git a/modules/mesh-vault/cmd/mesh-vault/move.go b/modules/mesh-vault/cmd/mesh-vault/move.go index be9dab1b..3950af49 100644 --- a/modules/mesh-vault/cmd/mesh-vault/move.go +++ b/modules/mesh-vault/cmd/mesh-vault/move.go @@ -33,7 +33,6 @@ import ( "errors" "fmt" "slices" - "strconv" "strings" "time" @@ -259,96 +258,6 @@ func (v *Vault) MoveTake(caller, call, sealed, readBackTo string) (MovedIn, erro // ---- move-asks ---------------------------------------------------------------------------------------------- -// MovedAsk is one row of the controller's record of asks at a desk (its secret_ask table): no value. -type MovedAsk struct { - ID int64 `json:"id"` - Node string `json:"node"` - Module string `json:"module"` - Name string `json:"name"` - Desk string `json:"desk"` - AskedBy string `json:"asked_by"` - OpenedAt time.Time `json:"opened_at"` - EndedAt *time.Time `json:"ended_at,omitempty"` - Outcome string `json:"outcome,omitempty"` -} - -// AsksMoved is what a copy of the record of asks did. -type AsksMoved struct { - Copied int `json:"copied"` - Already int `json:"already"` -} - -// MovedAsksAtOnce bounds one call: the controller sends its record in parts. -const MovedAsksAtOnce = 500 - -// movedAskID is the vault's id of a row of the controller's record. -func movedAskID(id int64) string { return "controller-" + strconv.FormatInt(id, 10) } - -// MoveAsks copies rows of the controller's record of asks into the vault's, as they are: each ask's opening and, -// when it ended, its end — once, so a copy run again adds nothing. From the controller alone, whose record it is. -// Every row is judged before any is written. -func (v *Vault) MoveAsks(caller string, asks []MovedAsk) (AsksMoved, error) { - if err := fromTheController(caller, "move-asks"); err != nil { - return AsksMoved{}, err - } - if len(asks) > MovedAsksAtOnce { - return AsksMoved{}, fmt.Errorf("%d asks at once is more than %d; send them in parts", len(asks), MovedAsksAtOnce) - } - type lines struct{ opened, ended AskRecord } - var all []lines - for _, a := range asks { - secret, err := OwnSecret(a.Node, a.Module, a.Name) - if err != nil { - return AsksMoved{}, fmt.Errorf("ask %d: %w; nothing was copied", a.ID, err) - } - if !namePart.MatchString(a.Desk) || a.OpenedAt.IsZero() || a.ID <= 0 { - return AsksMoved{}, fmt.Errorf("ask %d names no desk, no time it opened or no id; nothing was copied", a.ID) - } - l := lines{opened: AskRecord{ID: movedAskID(a.ID), At: a.OpenedAt.UTC(), Event: AskOpened, Secret: secret, - Node: a.Node, Module: a.Module, Name: a.Name, Desk: a.Desk, AskedBy: askedByName(a.AskedBy), - Caller: ControllerCaller}} - if a.EndedAt != nil { - if a.Outcome != "given" && !askOutcomes[a.Outcome] { - return AsksMoved{}, fmt.Errorf("ask %d ended %q, which is no outcome the record knows; nothing was "+ - "copied", a.ID, a.Outcome) - } - l.ended = AskRecord{ID: movedAskID(a.ID), At: a.EndedAt.UTC(), Event: AskEnded, Secret: secret, - Outcome: a.Outcome} - } - all = append(all, l) - } - v.Store.asksMu.Lock() - defer v.Store.asksMu.Unlock() - held, err := v.Store.asks() - if err != nil { - return AsksMoved{}, fmt.Errorf("the record of asks cannot be read: %w; nothing was copied", err) - } - seen := map[string]bool{} - for _, r := range held { - if r.Event == AskOpened { - seen[r.ID] = true - } - } - out := AsksMoved{} - for _, l := range all { - if seen[l.opened.ID] { - out.Already++ - continue - } - if err := v.recordAsk(l.opened); err != nil { - return out, fmt.Errorf("ask %s could not be copied, after %d: %w", l.opened.ID, out.Copied, err) - } - if l.ended.ID != "" { - if err := v.recordAsk(l.ended); err != nil { - return out, fmt.Errorf("the end of ask %s could not be copied, after %d: %w", l.opened.ID, out.Copied, err) - } - } - seen[l.opened.ID] = true - out.Copied++ - } - return out, nil -} - // StateNodeKey records the sealing key the node-engine of caller's machine states in its own name (novox/hq ADR 0372, // issue 786), at its start and whenever the key changes, whether or not it ever moved a secret in. The machine is the // caller's, as the bus proved it (`node.`), never an argument. A first key is handled like a changed one: the diff --git a/modules/mesh-vault/cmd/mesh-vault/move_test.go b/modules/mesh-vault/cmd/mesh-vault/move_test.go index b6270be4..c4002845 100644 --- a/modules/mesh-vault/cmd/mesh-vault/move_test.go +++ b/modules/mesh-vault/cmd/mesh-vault/move_test.go @@ -239,57 +239,6 @@ func TestAMoveTakesNothingItCannotOpenOrReadBack(t *testing.T) { } } -// The controller's record of asks is copied as it is, once: each ask's opening and its end, who asked and at which -// desk, and the bounds then count them. From the controller alone. -func TestTheRecordOfAsksIsCopiedAsItIsOnce(t *testing.T) { - v := newVault(t, nil) - now := v.Now() - ended := now.Add(-30 * time.Second) - asks := []MovedAsk{ - {ID: 41, Node: "anchor", Module: "telegram", Name: "telegram-token", Desk: "laptop", AskedBy: "g14/claude-code", - OpenedAt: now.Add(-50 * time.Minute), EndedAt: &ended, Outcome: "given"}, - {ID: 42, Node: "anchor", Module: "telegram", Name: "telegram-token", Desk: "laptop", AskedBy: "g14/claude-code", - OpenedAt: now.Add(-40 * time.Minute), EndedAt: &ended, Outcome: "dismissed"}, - {ID: 43, Node: "anchor", Module: "telegram", Name: "telegram-token", Desk: "laptop", AskedBy: "ace/agent", - OpenedAt: now.Add(-20 * time.Minute)}, - } - if _, err := v.MoveAsks("node.anchor", asks); err == nil { - t.Error("a node-engine copied the record of asks") - } - copied, err := v.MoveAsks(ControllerCaller, asks) - if err != nil || copied.Copied != 3 || copied.Already != 0 { - t.Fatalf("copied %+v, %v", copied, err) - } - again, err := v.MoveAsks(ControllerCaller, asks) - if err != nil || again.Copied != 0 || again.Already != 3 { - t.Fatalf("copied again %+v, %v", again, err) - } - all, _ := v.Store.Asks(100) - if len(all) != 5 { - t.Fatalf("%d lines: %+v", len(all), all) - } - opened := map[string]AskRecord{} - for _, r := range all { - if r.Event == AskOpened { - opened[r.ID] = r - } - } - if r := opened["controller-41"]; r.Secret != "own/anchor/telegram/telegram-token" || r.AskedBy != "g14/claude-code" || - r.Desk != "laptop" || !r.At.Equal(asks[0].OpenedAt) || r.Caller != ControllerCaller { - t.Errorf("ask 41: %+v", r) - } - // Three asks in the hour, from the controller's record: the vault's bound holds them. - if _, err := v.AskOpen(ControllerCaller, telegramAsk("g14/claude-code")); err == nil || - !strings.Contains(err.Error(), "in the last hour") { - t.Errorf("an ask after three copied in the hour: %v", err) - } - bad := []MovedAsk{{ID: 44, Node: "anchor", Module: "telegram", Name: "x", Desk: "laptop", AskedBy: "a", - OpenedAt: now, EndedAt: &ended, Outcome: "whatever"}} - if _, err := v.MoveAsks(ControllerCaller, bad); err == nil { - t.Error("an ask that ended in no outcome the record knows was copied") - } -} - // The two steps as the runtime calls the tool: the caller is the one it proved, never an argument. func TestMoveInThroughTheTool(t *testing.T) { v := newVault(t, nil) @@ -317,13 +266,6 @@ func TestMoveInThroughTheTool(t *testing.T) { if rec.MadeAt.Year() != 2025 || rec.MovedFrom == nil || rec.MovedFrom.Generation != "g-1" { t.Errorf("kept %+v", rec) } - asks := toolNamed(t, definitions(&Env{Vault: v.Vault}), Seat+".move-asks") - moved, err := asks.runAs("controller", map[string]any{"asks": []any{map[string]any{"id": 7, "node": "anchor", - "module": "telegram", "name": "telegram-token", "desk": "laptop", "asked_by": "g14/claude-code", - "opened_at": "2026-10-01T10:00:00Z", "ended_at": "2026-10-01T10:00:20Z", "outcome": "given"}}}) - if err != nil || moved.(AsksMoved).Copied != 1 { - t.Fatalf("asks through the tool: %+v, %v", moved, err) - } } // Issue 1126, cause C4: a machine's node-engine hands the vault what runs of its own machine's own secret, where the @@ -445,7 +387,7 @@ func TestANodeEngineHandsTheVaultWhatRunsOnItsOwnMachine(t *testing.T) { Module: "postgres", Why: "the resource differs", Bodies: []delivery.ResourceBodies{{ID: "postgres.needs-superuser-password", Composed: `{"sealed":"` + delivery.MaskedAnotherValue + `"}`, Running: `{"sealed":"` + delivery.MaskedAnotherValue + `"}`}}}}} have, err := delivery.EncodeHaveNode(delivery.HaveNode{Candidates: map[string]delivery.CandidateAnswer{"pro": answer}, - Composes: delivery.ComposesController}) + Composes: delivery.ComposesOwn}) if err != nil { t.Fatal(err) } @@ -457,7 +399,7 @@ func TestANodeEngineHandsTheVaultWhatRunsOnItsOwnMachine(t *testing.T) { } if len(drift.Secrets) != 1 || drift.Secrets[0].Secret != "own/anchor/postgres/superuser-password" || drift.Secrets[0].Generation != 2 || drift.Secrets[0].Previous != 1 || drift.Secrets[0].Takeable || - len(drift.Nodes) != 1 || drift.Nodes[0].ValuesDiffer["pro"] != 1 || drift.Nodes[0].Composes != delivery.ComposesController { + len(drift.Nodes) != 1 || drift.Nodes[0].ValuesDiffer["pro"] != 1 || drift.Nodes[0].Composes != delivery.ComposesOwn { t.Errorf("own_drift: %+v", drift) } } diff --git a/modules/mesh-vault/cmd/mesh-vault/tools.go b/modules/mesh-vault/cmd/mesh-vault/tools.go index f384f15d..ad9bb635 100644 --- a/modules/mesh-vault/cmd/mesh-vault/tools.go +++ b/modules/mesh-vault/cmd/mesh-vault/tools.go @@ -350,28 +350,6 @@ func definitions(env *Env) []toolDef { } return v.OwnOfNode(caller, asked...) }}, - {Name: Seat + ".move-asks", - Description: "Copy rows of the controller's record of asks at a desk into the vault's, as they are and once " + - "(design 57's V3): from the controller alone, at most 500 at a time. No value is in any of them.", - Input: map[string]any{"type": "object", "properties": map[string]any{ - "asks": map[string]any{"type": "array", "description": "the controller's rows: id, node, module, name, " + - "desk, asked_by, opened_at, and ended_at and outcome when the ask ended", - "items": map[string]any{"type": "object"}}}}, - run: func(caller string, a map[string]any) (any, error) { - v, err := env.ready() - if err != nil { - return nil, err - } - raw, err := json.Marshal(a["asks"]) - if err != nil { - return nil, err - } - var asks []MovedAsk - if err := json.Unmarshal(raw, &asks); err != nil { - return nil, fmt.Errorf("asks is not the controller's rows: %w", err) - } - return v.MoveAsks(caller, asks) - }}, {Name: "secret_asks", Description: "The record of asks for a module's own secret at a desk, newest first: who asked as the bus named " + "them, for what, at which desk, when, and how each ended. Never a value.", diff --git a/modules/mesh-vault/module.json b/modules/mesh-vault/module.json index dcfa8eb1..964ecdbd 100644 --- a/modules/mesh-vault/module.json +++ b/modules/mesh-vault/module.json @@ -204,7 +204,6 @@ "rotate", "move-in", "node-key", - "move-asks", "own", "issue-account", "sign", From e7b3fd470bc9825277ce79a16f0108b07e7ab0c3 Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 11:52:51 +0100 Subject: [PATCH 11/27] Prove the bus tools' removals on the grant mesh-sdk composes The removal test took a grant written by hand; it now composes it with BusRemovalGrants for controller-leftovers and the node-engine's acts, so it proves the mesh's own grant is enough and no wider (issue 1126 B5). Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- modules/nats/cmd/nats-tools/removal_test.go | 24 ++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/modules/nats/cmd/nats-tools/removal_test.go b/modules/nats/cmd/nats-tools/removal_test.go index 9fa7008b..3e211b27 100644 --- a/modules/nats/cmd/nats-tools/removal_test.go +++ b/modules/nats/cmd/nats-tools/removal_test.go @@ -12,6 +12,8 @@ import ( "testing" "time" + "git.novox.be/novox/mesh-sdk/go/buscompose" + "git.novox.be/novox/mesh-sdk/go/catalogue" "github.com/nats-io/nats-server/v2/server" "github.com/nats-io/nats.go" "github.com/nats-io/nats.go/jetstream" @@ -25,25 +27,23 @@ import ( func TestTheRemovalToolsChangeOnlyWhatTheyAreAskedAndTheGrantAllows(t *testing.T) { dir := t.TempDir() conf := filepath.Join(dir, "nats.conf") + // Issue 1126 B5: the tools' grant as the mesh composes it for this module's word (mesh-sdk BusRemovalGrants), never + // a list written here, so the test proves the composed grant is enough and no wider. + grants, err := buscompose.BusRemovalGrants([]string{catalogue.RemovesControllerLeftovers, catalogue.RemovesEngineActs}, + []string{"novox"}) + if err != nil { + t.Fatal(err) + } + allow := `["` + strings.Join(grants, `", "`) + `"]` if err := os.WriteFile(conf, []byte(fmt.Sprintf(`listen: "127.0.0.1:-1" jetstream { store_dir: %q } accounts { MESH { jetstream: enabled, users: [ { user: "admin", password: "admin" }, { user: "nats-tools", password: "tools", permissions: { - publish: { allow: [ - "$JS.API.CONSUMER.INFO.DEAD_LETTER_NOTICES.controller", - "$JS.API.CONSUMER.DELETE.DEAD_LETTER_NOTICES.controller", - "$JS.API.STREAM.INFO.ASSIGNMENTS", - "$JS.API.STREAM.DELETE.ASSIGNMENTS", - "$JS.API.CONSUMER.INFO.EVENTS.controller-merges", - "$JS.API.CONSUMER.DELETE.EVENTS.controller-merges", - "$JS.API.STREAM.INFO.KV_mesh-controller_rollouts", - "$JS.API.STREAM.DELETE.KV_mesh-controller_rollouts", - "$JS.API.STREAM.INFO.KV_mesh-host_acts", - "$KV.mesh-host_acts.>" ] }, + publish: { allow: %s }, subscribe: { allow: ["_INBOX.nats-tools.>"] } } } ] } } -`, filepath.Join(dir, "js"))), 0o600); err != nil { +`, filepath.Join(dir, "js"), allow)), 0o600); err != nil { t.Fatal(err) } opts, err := server.ProcessConfigFile(conf) From 067117b8b88c64e5ac3002166cd34b0f61736f87 Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 11:55:54 +0100 Subject: [PATCH 12/27] Point the nats README's bus upgrade at the assigner's put and mesh-wants, since the controller's bus verb ended Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- modules/nats/README.md | 52 ++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 20 deletions(-) diff --git a/modules/nats/README.md b/modules/nats/README.md index 0994ea89..aeab2e77 100644 --- a/modules/nats/README.md +++ b/modules/nats/README.md @@ -77,8 +77,8 @@ live one**, which a person swaps in. mv /jetstream /jetstream && \ docker start mesh-broker-nats - The store kept aside is removed by a person once the bus is seen whole (`nats_streams`, the - controller's `doctor`). + The store kept aside is removed by a person once the bus is seen whole (`nats_streams`, + `nats_backlog`). A single stream can be restored into any server that does not hold it with `mesh-nats-snapshot restore --server --credential `; the archive is also what the nats CLI @@ -87,31 +87,43 @@ reads (`nats stream restore ` on an unpacked `streams//`). ## Upgrading the bus, and going back The bus is replaced only as a planned step a person starts (novox/hq ADR 0236, ADR 0480 clause 6): the -merge of a change to this module builds the bus and sends nothing. The steps, in this order: +merge of a change to this module builds the bus and sends nothing, and no rule of the assigner moves it +(`mesh-wants.upgrade` gives the bus the policy record, and refuses a person's other choice). The step is +a put of the assigner (novox/hq ADR 0546, ADR 0565 clauses 8 and 9). In this order: -1. **Nothing else runs.** No delivery plan is open (`mesh-controller.plans`). +1. **Read what it would do, and that nothing else moves.** `mesh-wants.bus` answers the fingerprint + of the bus module each node runs against the indexer's newest, and the last bus steps (from the + hand-act log and the assigner's puts of the bus). `mesh-delivery-assigner.assigner_puts` shows no + other put still open. 2. **Snapshot with the dump the bus runs now**, through the machine's backup holder (`/node-backup.now` for `nats` on the bus's machine), and verify the `bus.tar` it wrote with `/nats.nats_snapshot_verify` (it answers the file, its time and size, each stream's last - sequence, and `passed` or the first fault; run it after the dump and read `taken`). Note where it is: that is `snapshot-taken`. -3. **Ask the operator for the moment** on the proven channel, naming what it raises: bus maintenance is - open while the step runs; every bus connection is dropped for seconds and reconnects; conditions of - other modules may flash and clear. Go on only on their yes. -4. **Start it:** `mesh-controller.bus` with `upgrade` true, `why`, `reversible` true and `snapshot-taken`. - `reversible` is true because the server binary (the same digest), the data directory and the - configuration do not change; `TestTheStoreSurvivesTheNewDeclarationTheOldAndTheNewAgain` shows it: - the new declaration, then the old one, then the new again run on one store, each reading what the - one before wrote. -5. **After:** `nats_server`, `nats_streams` (every stream and bucket as before) and the controller's - `doctor`; the step ends done when the controller has checked every stream, every consumer and a - round trip (ADR 0236 section 40). Then wait for the next nightly dump and verify it: the upgrade is - finished only once that dump verified. -6. **Back:** a bus upgrade to the previous build puts the old declaration back on the same store; if the - store itself is hurt, restore the snapshot as described above. + sequence, and `passed` or the first fault; run it after the dump and read `taken`). This is the + known-good snapshot to come back to. +3. **Tell the operator what the step raises** before starting it: bus maintenance is open while the + step runs; every bus connection is dropped for seconds and reconnects; conditions of other modules + may flash and clear. +4. **Start it:** `mesh-delivery-assigner.assigner_put` with `node` (the bus's machine), `module` nats, + `version` (`newest` or the fingerprint `mesh-wants.bus` named) and `why`. The put asks the operator + first, on the proven channel, with the `why`; only on their yes does it go on. After the yes it has + the bus node's backup holder take the bus's snapshot again (it reads the holder's record back for + at most 15 minutes), then writes the composition, the grant and the machine's want, and records the + warrant in the hand-act log. Each step is said as the event `mesh-delivery-assigner.put`; wait on + it, and `assigner_puts` says where the put stands. The step is reversible because the server binary + (the same digest), the data directory and the configuration do not change; + `TestTheStoreSurvivesTheNewDeclarationTheOldAndTheNewAgain` shows it: the new declaration, then the + old one, then the new again run on one store, each reading what the one before wrote. +5. **After:** `nats_server` (the new release) and `nats_streams` (every stream and bucket as before). + The controller's `doctor`, which checked every stream, every consumer and a round trip (ADR 0236 + section 40), ended with the controller, and no verb has taken that check over yet: read + `nats_streams` and `nats_backlog` by hand for it. Then wait for the next nightly dump and verify it: + the upgrade is finished only once that dump verified. +6. **Back:** a put of the previous build (`assigner_put` with its fingerprint) puts the old declaration + back on the same store; if the store itself is hurt, restore the snapshot as described above. ## Tests -- `cmd/mesh-nats-snapshot`: `go test -tags integration -race ./...`, run by `mesh-controller.try` (they start throwaway containers; nobody runs them by hand) — a throwaway `nats:2.11` filled like the +- `cmd/mesh-nats-snapshot`: `go test -tags integration -race ./...`, run by the pull request's check (they start throwaway containers; nobody runs them by hand) — a throwaway `nats:2.11` filled like the mesh's bus (events with a gap deleted, a work queue part worked, buckets with history, deletes and a purge, an object, durable consumers, a memory stream) and written to throughout the snapshot; the snapshot restored into a fresh server and into a new store served by a third, each compared message From 4aa24ba013de4f7df905e23fb3ca60f304a762c4 Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 11:55:54 +0100 Subject: [PATCH 13/27] Drop mesh-conditions' use of operator-channel, since nothing in it asks the operator Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- modules/mesh-conditions/module.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/modules/mesh-conditions/module.json b/modules/mesh-conditions/module.json index 72000202..ce6ecbae 100644 --- a/modules/mesh-conditions/module.json +++ b/modules/mesh-conditions/module.json @@ -13,9 +13,6 @@ ] } ], - "uses": [ - "operator-channel" - ], "reads": [ "mesh-delivery-watchman.findings", "mesh-self-check.findings", From 70396caeab5bc6d69ac66fc118ceef4ffe64b9fa Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 11:56:55 +0100 Subject: [PATCH 14/27] Pin mesh-sdk to the group head of issue 1126 Every member builds against mesh-sdk 729a86b, the head of feat/1126-removal, so the group is checked as one contract. Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- checks/credentialform/go.mod | 2 +- checks/credentialform/go.sum | 4 ++-- checks/health/go.mod | 2 +- checks/health/go.sum | 4 ++-- checks/manifests/go.mod | 2 +- checks/manifests/go.sum | 4 ++-- checks/readable/go.mod | 2 +- checks/readable/go.sum | 4 ++-- modules/adwaita/go.mod | 2 +- modules/adwaita/go.sum | 4 ++-- modules/artifact-store-tools/go.mod | 2 +- modules/artifact-store-tools/go.sum | 4 ++-- modules/asus-zephyrus-g14/go.mod | 2 +- modules/asus-zephyrus-g14/go.sum | 4 ++-- modules/avahi/go.mod | 2 +- modules/avahi/go.sum | 4 ++-- modules/blueman/go.mod | 2 +- modules/blueman/go.sum | 4 ++-- modules/bluetooth/go.mod | 2 +- modules/bluetooth/go.sum | 4 ++-- modules/brother/go.mod | 2 +- modules/brother/go.sum | 4 ++-- modules/claude-code/go.mod | 2 +- modules/claude-code/go.sum | 4 ++-- modules/claude-licence-manager/go.mod | 2 +- modules/claude-licence-manager/go.sum | 4 ++-- modules/clipmenu/go.mod | 2 +- modules/clipmenu/go.sum | 4 ++-- modules/cups/go.mod | 2 +- modules/cups/go.sum | 4 ++-- modules/dbus/go.mod | 2 +- modules/dbus/go.sum | 4 ++-- modules/desk-channel/go.mod | 2 +- modules/desk-channel/go.sum | 4 ++-- modules/disk-load/go.mod | 2 +- modules/disk-load/go.sum | 4 ++-- modules/dmenu/go.mod | 2 +- modules/dmenu/go.sum | 4 ++-- modules/dnsmasq/go.mod | 2 +- modules/dnsmasq/go.sum | 4 ++-- modules/docker-compose/go.mod | 2 +- modules/docker-compose/go.sum | 4 ++-- modules/docker/go.mod | 2 +- modules/docker/go.sum | 4 ++-- modules/dunst/go.mod | 2 +- modules/dunst/go.sum | 4 ++-- modules/fail2ban/go.mod | 2 +- modules/fail2ban/go.sum | 4 ++-- modules/feh/go.mod | 2 +- modules/feh/go.sum | 4 ++-- modules/flatpak/go.mod | 2 +- modules/flatpak/go.sum | 4 ++-- modules/fonts/go.mod | 2 +- modules/fonts/go.sum | 4 ++-- modules/forticlient/go.mod | 2 +- modules/forticlient/go.sum | 4 ++-- modules/gitea/go.mod | 2 +- modules/gitea/go.sum | 4 ++-- modules/gnome-keyring/go.mod | 2 +- modules/gnome-keyring/go.sum | 4 ++-- modules/hostname/go.mod | 2 +- modules/hostname/go.sum | 4 ++-- modules/i3/go.mod | 2 +- modules/i3/go.sum | 4 ++-- modules/i3status-rust/go.mod | 2 +- modules/i3status-rust/go.sum | 4 ++-- modules/kernel/go.mod | 2 +- modules/kernel/go.sum | 4 ++-- modules/keycloak/go.mod | 2 +- modules/keycloak/go.sum | 4 ++-- modules/lemurs/go.mod | 2 +- modules/lemurs/go.sum | 4 ++-- modules/localization/go.mod | 2 +- modules/localization/go.sum | 4 ++-- modules/logrotate/go.mod | 2 +- modules/logrotate/go.sum | 4 ++-- modules/memory-pressure/go.mod | 2 +- modules/memory-pressure/go.sum | 4 ++-- modules/mesh-build-go/go.mod | 2 +- modules/mesh-build-go/go.sum | 4 ++-- modules/mesh-build-image/go.mod | 2 +- modules/mesh-build-image/go.sum | 4 ++-- modules/mesh-build-node/go.mod | 2 +- modules/mesh-build-node/go.sum | 4 ++-- modules/mesh-conditions/go.mod | 2 +- modules/mesh-conditions/go.sum | 6 ++---- modules/mesh-config/go.mod | 2 +- modules/mesh-config/go.sum | 18 ++---------------- modules/mesh-delivery-gate/go.mod | 2 +- modules/mesh-delivery-gate/go.sum | 4 ++-- modules/mesh-files/go.mod | 2 +- modules/mesh-files/go.sum | 4 ++-- modules/mesh-hand-acts/go.mod | 2 +- modules/mesh-hand-acts/go.sum | 6 ++---- modules/mesh-healers/go.mod | 2 +- modules/mesh-healers/go.sum | 6 ++---- modules/mesh-issues/go.mod | 2 +- modules/mesh-issues/go.sum | 4 ++-- modules/mesh-knowledge/go.mod | 2 +- modules/mesh-knowledge/go.sum | 4 ++-- modules/mesh-mail-notifier/go.mod | 2 +- modules/mesh-mail-notifier/go.sum | 4 ++-- modules/mesh-mail-reader/go.mod | 2 +- modules/mesh-mail-reader/go.sum | 4 ++-- modules/mesh-mail-web/go.mod | 2 +- modules/mesh-mail-web/go.sum | 4 ++-- modules/mesh-mail/go.mod | 2 +- modules/mesh-mail/go.sum | 4 ++-- modules/mesh-provisioner-client/go.mod | 2 +- modules/mesh-provisioner-client/go.sum | 4 ++-- modules/mesh-provisioner/go.mod | 2 +- modules/mesh-provisioner/go.sum | 4 ++-- modules/mesh-reads/go.mod | 2 +- modules/mesh-reads/go.sum | 4 ++-- modules/mesh-self-check/go.mod | 2 +- modules/mesh-self-check/go.sum | 4 ++-- modules/mesh-vault/go.mod | 2 +- modules/mesh-vault/go.sum | 6 ++---- modules/mesh-watcher/go.mod | 2 +- modules/mesh-watcher/go.sum | 6 ++---- modules/messenger/go.mod | 2 +- modules/messenger/go.sum | 6 ++---- modules/minio/go.mod | 2 +- modules/minio/go.sum | 4 ++-- modules/mounts/go.mod | 2 +- modules/mounts/go.sum | 4 ++-- modules/nats/go.mod | 2 +- modules/nats/go.sum | 6 ++---- modules/netcheck/go.mod | 2 +- modules/netcheck/go.sum | 4 ++-- modules/networkmanager/go.mod | 2 +- modules/networkmanager/go.sum | 4 ++-- modules/nextcloud-client/go.mod | 2 +- modules/nextcloud-client/go.sum | 4 ++-- modules/nfs-server/go.mod | 2 +- modules/nfs-server/go.sum | 4 ++-- modules/nm-applet/go.mod | 2 +- modules/nm-applet/go.sum | 4 ++-- modules/only-office/go.mod | 2 +- modules/only-office/go.sum | 4 ++-- modules/openrazer/go.mod | 2 +- modules/openrazer/go.sum | 4 ++-- modules/pacman/go.mod | 2 +- modules/pacman/go.sum | 6 ++---- modules/picom/go.mod | 2 +- modules/picom/go.sum | 4 ++-- modules/polychromatic/go.mod | 2 +- modules/polychromatic/go.sum | 4 ++-- modules/postgres/go.mod | 2 +- modules/postgres/go.sum | 4 ++-- modules/power/go.mod | 2 +- modules/power/go.sum | 4 ++-- modules/records/go.mod | 2 +- modules/records/go.sum | 4 ++-- modules/restic/go.mod | 2 +- modules/restic/go.sum | 4 ++-- modules/rofi/go.mod | 2 +- modules/rofi/go.sum | 4 ++-- modules/route-adapter/go.mod | 2 +- modules/route-adapter/go.sum | 4 ++-- modules/screen-lock/go.mod | 2 +- modules/screen-lock/go.sum | 4 ++-- modules/sensors/go.mod | 2 +- modules/sensors/go.sum | 4 ++-- modules/slack/go.mod | 2 +- modules/slack/go.sum | 4 ++-- modules/snapd/go.mod | 2 +- modules/snapd/go.sum | 4 ++-- modules/ssh-client/go.mod | 2 +- modules/ssh-client/go.sum | 4 ++-- modules/sudo/go.mod | 2 +- modules/sudo/go.sum | 4 ++-- modules/systemd-networkd/go.mod | 2 +- modules/systemd-networkd/go.sum | 4 ++-- modules/systemd-resolved/go.mod | 2 +- modules/systemd-resolved/go.sum | 4 ++-- modules/systemd/go.mod | 2 +- modules/systemd/go.sum | 4 ++-- modules/telegram/go.mod | 2 +- modules/telegram/go.sum | 4 ++-- modules/time-sync/go.mod | 2 +- modules/time-sync/go.sum | 4 ++-- modules/triggerhappy/go.mod | 2 +- modules/triggerhappy/go.sum | 4 ++-- modules/xclip/go.mod | 2 +- modules/xclip/go.sum | 4 ++-- modules/xdg/go.mod | 2 +- modules/xdg/go.sum | 4 ++-- modules/xorg/go.mod | 2 +- modules/xorg/go.sum | 4 ++-- modules/xterm/go.mod | 2 +- modules/xterm/go.sum | 4 ++-- modules/zfs/go.mod | 2 +- modules/zfs/go.sum | 4 ++-- 194 files changed, 291 insertions(+), 321 deletions(-) diff --git a/checks/credentialform/go.mod b/checks/credentialform/go.mod index d93aba9e..970cce7b 100644 --- a/checks/credentialform/go.mod +++ b/checks/credentialform/go.mod @@ -2,4 +2,4 @@ module checks/credentialform go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 diff --git a/checks/credentialform/go.sum b/checks/credentialform/go.sum index 2e60a9c1..dc89057e 100644 --- a/checks/credentialform/go.sum +++ b/checks/credentialform/go.sum @@ -1,2 +1,2 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= diff --git a/checks/health/go.mod b/checks/health/go.mod index f6aa1dd0..2779ead5 100644 --- a/checks/health/go.mod +++ b/checks/health/go.mod @@ -2,4 +2,4 @@ module checks/health go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 diff --git a/checks/health/go.sum b/checks/health/go.sum index 2e60a9c1..dc89057e 100644 --- a/checks/health/go.sum +++ b/checks/health/go.sum @@ -1,2 +1,2 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= diff --git a/checks/manifests/go.mod b/checks/manifests/go.mod index 74ac9fa2..8912562c 100644 --- a/checks/manifests/go.mod +++ b/checks/manifests/go.mod @@ -2,4 +2,4 @@ module checks/manifests go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 diff --git a/checks/manifests/go.sum b/checks/manifests/go.sum index 2e60a9c1..dc89057e 100644 --- a/checks/manifests/go.sum +++ b/checks/manifests/go.sum @@ -1,2 +1,2 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= diff --git a/checks/readable/go.mod b/checks/readable/go.mod index 3eeb6745..6a33f315 100644 --- a/checks/readable/go.mod +++ b/checks/readable/go.mod @@ -2,4 +2,4 @@ module checks/readable go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 diff --git a/checks/readable/go.sum b/checks/readable/go.sum index 2e60a9c1..dc89057e 100644 --- a/checks/readable/go.sum +++ b/checks/readable/go.sum @@ -1,2 +1,2 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= diff --git a/modules/adwaita/go.mod b/modules/adwaita/go.mod index 822beeda..2a4bcc37 100644 --- a/modules/adwaita/go.mod +++ b/modules/adwaita/go.mod @@ -2,7 +2,7 @@ module adwaita go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/adwaita/go.sum b/modules/adwaita/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/adwaita/go.sum +++ b/modules/adwaita/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/artifact-store-tools/go.mod b/modules/artifact-store-tools/go.mod index 306fa6a7..c111f083 100644 --- a/modules/artifact-store-tools/go.mod +++ b/modules/artifact-store-tools/go.mod @@ -3,7 +3,7 @@ module artifactstoretools go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/artifact-store-tools/go.sum b/modules/artifact-store-tools/go.sum index 5fc11b2f..ea0f85a7 100644 --- a/modules/artifact-store-tools/go.sum +++ b/modules/artifact-store-tools/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/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/asus-zephyrus-g14/go.mod b/modules/asus-zephyrus-g14/go.mod index 3aba4272..7d068f81 100644 --- a/modules/asus-zephyrus-g14/go.mod +++ b/modules/asus-zephyrus-g14/go.mod @@ -2,7 +2,7 @@ module asuszephyrusg14 go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/asus-zephyrus-g14/go.sum b/modules/asus-zephyrus-g14/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/asus-zephyrus-g14/go.sum +++ b/modules/asus-zephyrus-g14/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/avahi/go.mod b/modules/avahi/go.mod index 194f2095..3c0f3fc2 100644 --- a/modules/avahi/go.mod +++ b/modules/avahi/go.mod @@ -2,7 +2,7 @@ module avahi go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/avahi/go.sum b/modules/avahi/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/avahi/go.sum +++ b/modules/avahi/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/blueman/go.mod b/modules/blueman/go.mod index 0ea8fcf8..05b9b8c1 100644 --- a/modules/blueman/go.mod +++ b/modules/blueman/go.mod @@ -2,7 +2,7 @@ module blueman go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/blueman/go.sum b/modules/blueman/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/blueman/go.sum +++ b/modules/blueman/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/bluetooth/go.mod b/modules/bluetooth/go.mod index 90305d56..1422b5d8 100644 --- a/modules/bluetooth/go.mod +++ b/modules/bluetooth/go.mod @@ -2,7 +2,7 @@ module bluetooth go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/bluetooth/go.sum b/modules/bluetooth/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/bluetooth/go.sum +++ b/modules/bluetooth/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/brother/go.mod b/modules/brother/go.mod index de8edeeb..76d8cdd6 100644 --- a/modules/brother/go.mod +++ b/modules/brother/go.mod @@ -3,7 +3,7 @@ module brother go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/brother/go.sum b/modules/brother/go.sum index 5fc11b2f..ea0f85a7 100644 --- a/modules/brother/go.sum +++ b/modules/brother/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/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/claude-code/go.mod b/modules/claude-code/go.mod index 62e10cde..1252bc5e 100644 --- a/modules/claude-code/go.mod +++ b/modules/claude-code/go.mod @@ -2,7 +2,7 @@ module claude-code go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101085317-790d1c82d027 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require gopkg.in/yaml.v3 v3.0.1 diff --git a/modules/claude-code/go.sum b/modules/claude-code/go.sum index a164051c..2f2ce9ab 100644 --- a/modules/claude-code/go.sum +++ b/modules/claude-code/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101085317-790d1c82d027 h1:a33dsavoaqllh40eVICbhxi6Kero1EGSjt1V+2fa2Hk= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101085317-790d1c82d027/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/claude-licence-manager/go.mod b/modules/claude-licence-manager/go.mod index 3efeaade..d3ec0dfb 100644 --- a/modules/claude-licence-manager/go.mod +++ b/modules/claude-licence-manager/go.mod @@ -3,7 +3,7 @@ module claude-licence-manager go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/jackc/pgx/v5 v5.11.0 ) diff --git a/modules/claude-licence-manager/go.sum b/modules/claude-licence-manager/go.sum index 4491a899..822d6592 100644 --- a/modules/claude-licence-manager/go.sum +++ b/modules/claude-licence-manager/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/modules/clipmenu/go.mod b/modules/clipmenu/go.mod index 2997278d..099743b0 100644 --- a/modules/clipmenu/go.mod +++ b/modules/clipmenu/go.mod @@ -2,7 +2,7 @@ module clipmenu go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/clipmenu/go.sum b/modules/clipmenu/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/clipmenu/go.sum +++ b/modules/clipmenu/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/cups/go.mod b/modules/cups/go.mod index 37c7ffe2..de1917bb 100644 --- a/modules/cups/go.mod +++ b/modules/cups/go.mod @@ -2,7 +2,7 @@ module cups go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/cups/go.sum b/modules/cups/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/cups/go.sum +++ b/modules/cups/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/dbus/go.mod b/modules/dbus/go.mod index eb6ba19f..cea3398f 100644 --- a/modules/dbus/go.mod +++ b/modules/dbus/go.mod @@ -3,7 +3,7 @@ module dbus go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/godbus/dbus/v5 v5.1.0 ) diff --git a/modules/dbus/go.sum b/modules/dbus/go.sum index 5838cf9d..a177a7e2 100644 --- a/modules/dbus/go.sum +++ b/modules/dbus/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= diff --git a/modules/desk-channel/go.mod b/modules/desk-channel/go.mod index 671b39e5..d75ecbfc 100644 --- a/modules/desk-channel/go.mod +++ b/modules/desk-channel/go.mod @@ -2,7 +2,7 @@ module deskchannel go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/desk-channel/go.sum b/modules/desk-channel/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/desk-channel/go.sum +++ b/modules/desk-channel/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/disk-load/go.mod b/modules/disk-load/go.mod index ac2d4550..83836ead 100644 --- a/modules/disk-load/go.mod +++ b/modules/disk-load/go.mod @@ -3,7 +3,7 @@ module diskload go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/disk-load/go.sum b/modules/disk-load/go.sum index 5fc11b2f..ea0f85a7 100644 --- a/modules/disk-load/go.sum +++ b/modules/disk-load/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/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/dmenu/go.mod b/modules/dmenu/go.mod index 21b2c3ed..875344e5 100644 --- a/modules/dmenu/go.mod +++ b/modules/dmenu/go.mod @@ -2,7 +2,7 @@ module dmenu go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/dmenu/go.sum b/modules/dmenu/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/dmenu/go.sum +++ b/modules/dmenu/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/dnsmasq/go.mod b/modules/dnsmasq/go.mod index c0e43397..a4dc2004 100644 --- a/modules/dnsmasq/go.mod +++ b/modules/dnsmasq/go.mod @@ -2,7 +2,7 @@ module dnsmasq go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/dnsmasq/go.sum b/modules/dnsmasq/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/dnsmasq/go.sum +++ b/modules/dnsmasq/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/docker-compose/go.mod b/modules/docker-compose/go.mod index f5d24ee4..c2916f73 100644 --- a/modules/docker-compose/go.mod +++ b/modules/docker-compose/go.mod @@ -2,7 +2,7 @@ module docker-compose go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/docker-compose/go.sum b/modules/docker-compose/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/docker-compose/go.sum +++ b/modules/docker-compose/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/docker/go.mod b/modules/docker/go.mod index ea93997c..3589069d 100644 --- a/modules/docker/go.mod +++ b/modules/docker/go.mod @@ -2,7 +2,7 @@ module docker go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/docker/go.sum b/modules/docker/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/docker/go.sum +++ b/modules/docker/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/dunst/go.mod b/modules/dunst/go.mod index 0c2c5221..7668704e 100644 --- a/modules/dunst/go.mod +++ b/modules/dunst/go.mod @@ -2,7 +2,7 @@ module dunst go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/dunst/go.sum b/modules/dunst/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/dunst/go.sum +++ b/modules/dunst/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/fail2ban/go.mod b/modules/fail2ban/go.mod index 0062e978..aec1dc5a 100644 --- a/modules/fail2ban/go.mod +++ b/modules/fail2ban/go.mod @@ -2,7 +2,7 @@ module fail2ban go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/fail2ban/go.sum b/modules/fail2ban/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/fail2ban/go.sum +++ b/modules/fail2ban/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/feh/go.mod b/modules/feh/go.mod index c8a1397e..94abd17d 100644 --- a/modules/feh/go.mod +++ b/modules/feh/go.mod @@ -2,7 +2,7 @@ module feh go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/feh/go.sum b/modules/feh/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/feh/go.sum +++ b/modules/feh/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/flatpak/go.mod b/modules/flatpak/go.mod index a3f1a99c..14f26305 100644 --- a/modules/flatpak/go.mod +++ b/modules/flatpak/go.mod @@ -2,7 +2,7 @@ module flatpak go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/flatpak/go.sum b/modules/flatpak/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/flatpak/go.sum +++ b/modules/flatpak/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/fonts/go.mod b/modules/fonts/go.mod index 702b9ba2..ffc6b3d7 100644 --- a/modules/fonts/go.mod +++ b/modules/fonts/go.mod @@ -2,7 +2,7 @@ module fonts go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/fonts/go.sum b/modules/fonts/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/fonts/go.sum +++ b/modules/fonts/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/forticlient/go.mod b/modules/forticlient/go.mod index 5b8fc59c..07bbbb3e 100644 --- a/modules/forticlient/go.mod +++ b/modules/forticlient/go.mod @@ -2,7 +2,7 @@ module forticlient go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/forticlient/go.sum b/modules/forticlient/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/forticlient/go.sum +++ b/modules/forticlient/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/gitea/go.mod b/modules/gitea/go.mod index 1f43ab6a..51def49c 100644 --- a/modules/gitea/go.mod +++ b/modules/gitea/go.mod @@ -3,7 +3,7 @@ module gitea go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101085317-790d1c82d027 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 golang.org/x/crypto v0.57.0 diff --git a/modules/gitea/go.sum b/modules/gitea/go.sum index 37e06a87..ea0f85a7 100644 --- a/modules/gitea/go.sum +++ b/modules/gitea/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101085317-790d1c82d027 h1:a33dsavoaqllh40eVICbhxi6Kero1EGSjt1V+2fa2Hk= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101085317-790d1c82d027/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/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/gnome-keyring/go.mod b/modules/gnome-keyring/go.mod index ab503cdd..48866836 100644 --- a/modules/gnome-keyring/go.mod +++ b/modules/gnome-keyring/go.mod @@ -2,7 +2,7 @@ module gnomekeyring go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/gnome-keyring/go.sum b/modules/gnome-keyring/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/gnome-keyring/go.sum +++ b/modules/gnome-keyring/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/hostname/go.mod b/modules/hostname/go.mod index b6304b58..3c262dad 100644 --- a/modules/hostname/go.mod +++ b/modules/hostname/go.mod @@ -2,7 +2,7 @@ module hostname go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/hostname/go.sum b/modules/hostname/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/hostname/go.sum +++ b/modules/hostname/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/i3/go.mod b/modules/i3/go.mod index 526f5c8c..61d0c84a 100644 --- a/modules/i3/go.mod +++ b/modules/i3/go.mod @@ -2,7 +2,7 @@ module i3 go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/i3/go.sum b/modules/i3/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/i3/go.sum +++ b/modules/i3/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/i3status-rust/go.mod b/modules/i3status-rust/go.mod index 07186032..86549e41 100644 --- a/modules/i3status-rust/go.mod +++ b/modules/i3status-rust/go.mod @@ -2,7 +2,7 @@ module i3statusrust go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/i3status-rust/go.sum b/modules/i3status-rust/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/i3status-rust/go.sum +++ b/modules/i3status-rust/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/kernel/go.mod b/modules/kernel/go.mod index bf7b51bf..6bde2b1c 100644 --- a/modules/kernel/go.mod +++ b/modules/kernel/go.mod @@ -2,7 +2,7 @@ module kernel go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/kernel/go.sum b/modules/kernel/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/kernel/go.sum +++ b/modules/kernel/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/keycloak/go.mod b/modules/keycloak/go.mod index 5bf204e2..b739b653 100644 --- a/modules/keycloak/go.mod +++ b/modules/keycloak/go.mod @@ -2,7 +2,7 @@ module keycloak go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/keycloak/go.sum b/modules/keycloak/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/keycloak/go.sum +++ b/modules/keycloak/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/lemurs/go.mod b/modules/lemurs/go.mod index b121689b..33643bf5 100644 --- a/modules/lemurs/go.mod +++ b/modules/lemurs/go.mod @@ -2,7 +2,7 @@ module lemurs go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/lemurs/go.sum b/modules/lemurs/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/lemurs/go.sum +++ b/modules/lemurs/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/localization/go.mod b/modules/localization/go.mod index f96ff303..cf5c7ccb 100644 --- a/modules/localization/go.mod +++ b/modules/localization/go.mod @@ -2,7 +2,7 @@ module localization go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/localization/go.sum b/modules/localization/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/localization/go.sum +++ b/modules/localization/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/logrotate/go.mod b/modules/logrotate/go.mod index e0320643..d952d2bc 100644 --- a/modules/logrotate/go.mod +++ b/modules/logrotate/go.mod @@ -2,7 +2,7 @@ module logrotate go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/logrotate/go.sum b/modules/logrotate/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/logrotate/go.sum +++ b/modules/logrotate/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/memory-pressure/go.mod b/modules/memory-pressure/go.mod index 05600558..ba6eda2e 100644 --- a/modules/memory-pressure/go.mod +++ b/modules/memory-pressure/go.mod @@ -2,7 +2,7 @@ module memorypressure go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/memory-pressure/go.sum b/modules/memory-pressure/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/memory-pressure/go.sum +++ b/modules/memory-pressure/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/mesh-build-go/go.mod b/modules/mesh-build-go/go.mod index 01cd3a12..e0ce7e20 100644 --- a/modules/mesh-build-go/go.mod +++ b/modules/mesh-build-go/go.mod @@ -3,7 +3,7 @@ module meshbuildgo go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101143343-67354f8e019a + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/distribution/distribution/v3 v3.1.2 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 diff --git a/modules/mesh-build-go/go.sum b/modules/mesh-build-go/go.sum index fa773838..b64704ef 100644 --- a/modules/mesh-build-go/go.sum +++ b/modules/mesh-build-go/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101143343-67354f8e019a h1:AChSJUmHyOZ5smiuTrtDZNjetYNTFb+anRFjXIQHbSA= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101143343-67354f8e019a/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/alicebob/miniredis/v2 v2.35.0 h1:QwLphYqCEAo1eu1TqPRN2jgVMPBweeQcR21jeqDCONI= github.com/alicebob/miniredis/v2 v2.35.0/go.mod h1:TcL7YfarKPGDAthEtl5NBeHZfeUQj6OXMm/+iu5cLMM= github.com/antithesishq/antithesis-sdk-go v0.7.0-default-no-op h1:Z/MZK75wC/NSrkgqeNIa7jexam9uWzhLmFTSCPI/kn0= diff --git a/modules/mesh-build-image/go.mod b/modules/mesh-build-image/go.mod index 75ad1562..afcf3be6 100644 --- a/modules/mesh-build-image/go.mod +++ b/modules/mesh-build-image/go.mod @@ -3,7 +3,7 @@ module meshbuildimage go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-build-image/go.sum b/modules/mesh-build-image/go.sum index 5fc11b2f..ea0f85a7 100644 --- a/modules/mesh-build-image/go.sum +++ b/modules/mesh-build-image/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/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-build-node/go.mod b/modules/mesh-build-node/go.mod index 175b4028..8aae6074 100644 --- a/modules/mesh-build-node/go.mod +++ b/modules/mesh-build-node/go.mod @@ -3,7 +3,7 @@ module meshbuildnode go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101143343-67354f8e019a + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/distribution/distribution/v3 v3.1.2 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-build-node/go.sum b/modules/mesh-build-node/go.sum index 376b4911..e2c1661f 100644 --- a/modules/mesh-build-node/go.sum +++ b/modules/mesh-build-node/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101143343-67354f8e019a h1:AChSJUmHyOZ5smiuTrtDZNjetYNTFb+anRFjXIQHbSA= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101143343-67354f8e019a/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/alicebob/miniredis/v2 v2.35.0 h1:QwLphYqCEAo1eu1TqPRN2jgVMPBweeQcR21jeqDCONI= github.com/alicebob/miniredis/v2 v2.35.0/go.mod h1:TcL7YfarKPGDAthEtl5NBeHZfeUQj6OXMm/+iu5cLMM= github.com/antithesishq/antithesis-sdk-go v0.7.0-default-no-op h1:Z/MZK75wC/NSrkgqeNIa7jexam9uWzhLmFTSCPI/kn0= diff --git a/modules/mesh-conditions/go.mod b/modules/mesh-conditions/go.mod index dc938a9b..2a5efe00 100644 --- a/modules/mesh-conditions/go.mod +++ b/modules/mesh-conditions/go.mod @@ -3,7 +3,7 @@ module mesh-conditions go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-conditions/go.sum b/modules/mesh-conditions/go.sum index 82531029..ea0f85a7 100644 --- a/modules/mesh-conditions/go.sum +++ b/modules/mesh-conditions/go.sum @@ -1,7 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c h1:/YCxh+NYfqry3PxZYY1nQXaccupobxpsFt8c9BYuGBg= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/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-config/go.mod b/modules/mesh-config/go.mod index 383447b2..ddb82ac8 100644 --- a/modules/mesh-config/go.mod +++ b/modules/mesh-config/go.mod @@ -2,7 +2,7 @@ module mesh-config go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/mesh-config/go.sum b/modules/mesh-config/go.sum index b55ad16e..91c4c9e2 100644 --- a/modules/mesh-config/go.sum +++ b/modules/mesh-config/go.sum @@ -1,19 +1,7 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101085317-790d1c82d027 h1:a33dsavoaqllh40eVICbhxi6Kero1EGSjt1V+2fa2Hk= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101085317-790d1c82d027/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c h1:/YCxh+NYfqry3PxZYY1nQXaccupobxpsFt8c9BYuGBg= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c/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= -github.com/google/go-tpm v0.9.8/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u6bVUY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= -github.com/minio/highwayhash v1.0.4 h1:asJizugGgchQod2ja9NJlGOWq4s7KsAWr5XUc9Clgl4= -github.com/minio/highwayhash v1.0.4/go.mod h1:GGYsuwP/fPD6Y9hMiXuapVvlIUEhFhMTh0rxU3ik1LQ= -github.com/nats-io/jwt/v2 v2.8.1 h1:V0xpGuD/N8Mi+fQNDynXohVvp7ZztevW5io8CUWlPmU= -github.com/nats-io/jwt/v2 v2.8.1/go.mod h1:nWnOEEiVMiKHQpnAy4eXlizVEtSfzacZ1Q43LIRavZg= -github.com/nats-io/nats-server/v2 v2.11.17 h1:GKEghcFK6A+aFx11Yf1LjgLC3txAwvyhnYzhBIQZA8I= -github.com/nats-io/nats-server/v2 v2.11.17/go.mod h1:B1sFVz4StNosQ903ak4N1G01Fl/9f8e06mXpFIE2K24= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= github.com/nats-io/nats.go v1.54.0/go.mod h1:y+DZoD1oBOYfZTU681eTUiUjI0vbqYGixNVFHcjHJ0k= github.com/nats-io/nkeys v0.4.16 h1:rd5oAuLOb8mnAycB0xleuEBNS1pVVnN0fv/FF34Eypg= @@ -24,5 +12,3 @@ golang.org/x/crypto v0.57.0 h1:3ZVCjf8Ggz7zneR/EHRVx68Ctf+2pmIMP2UFhh9cC6M= golang.org/x/crypto v0.57.0/go.mod h1:Fdz0i5U6CoizGwLda9DttjSk6qlZo25zYNtR+ycvuZA= golang.org/x/sys v0.48.0 h1:bbX/i/6MgT9BVLM9RT1thmxL04yeTAhbEz4SyadbXoo= golang.org/x/sys v0.48.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og= -golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= -golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= diff --git a/modules/mesh-delivery-gate/go.mod b/modules/mesh-delivery-gate/go.mod index 31525e40..e4fdacaf 100644 --- a/modules/mesh-delivery-gate/go.mod +++ b/modules/mesh-delivery-gate/go.mod @@ -3,7 +3,7 @@ module mesh-delivery-gate go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 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-gate/go.sum b/modules/mesh-delivery-gate/go.sum index 5fc11b2f..ea0f85a7 100644 --- a/modules/mesh-delivery-gate/go.sum +++ b/modules/mesh-delivery-gate/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/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-files/go.mod b/modules/mesh-files/go.mod index ac4bc2ab..e62741ad 100644 --- a/modules/mesh-files/go.mod +++ b/modules/mesh-files/go.mod @@ -2,7 +2,7 @@ module mesh-files go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/mesh-files/go.sum b/modules/mesh-files/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/mesh-files/go.sum +++ b/modules/mesh-files/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/mesh-hand-acts/go.mod b/modules/mesh-hand-acts/go.mod index 559740c6..1c401f74 100644 --- a/modules/mesh-hand-acts/go.mod +++ b/modules/mesh-hand-acts/go.mod @@ -3,7 +3,7 @@ module mesh-hand-acts go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-hand-acts/go.sum b/modules/mesh-hand-acts/go.sum index 82531029..ea0f85a7 100644 --- a/modules/mesh-hand-acts/go.sum +++ b/modules/mesh-hand-acts/go.sum @@ -1,7 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c h1:/YCxh+NYfqry3PxZYY1nQXaccupobxpsFt8c9BYuGBg= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/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-healers/go.mod b/modules/mesh-healers/go.mod index 8037df55..6679e792 100644 --- a/modules/mesh-healers/go.mod +++ b/modules/mesh-healers/go.mod @@ -3,7 +3,7 @@ module mesh-healers go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-healers/go.sum b/modules/mesh-healers/go.sum index 60e9ab18..ea0f85a7 100644 --- a/modules/mesh-healers/go.sum +++ b/modules/mesh-healers/go.sum @@ -1,7 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101085317-790d1c82d027 h1:a33dsavoaqllh40eVICbhxi6Kero1EGSjt1V+2fa2Hk= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101085317-790d1c82d027/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c h1:/YCxh+NYfqry3PxZYY1nQXaccupobxpsFt8c9BYuGBg= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/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-issues/go.mod b/modules/mesh-issues/go.mod index 0a9245b2..fa92579f 100644 --- a/modules/mesh-issues/go.mod +++ b/modules/mesh-issues/go.mod @@ -3,7 +3,7 @@ module mesh-issues go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-issues/go.sum b/modules/mesh-issues/go.sum index 5fc11b2f..ea0f85a7 100644 --- a/modules/mesh-issues/go.sum +++ b/modules/mesh-issues/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/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-knowledge/go.mod b/modules/mesh-knowledge/go.mod index 31d7dad4..e51163bd 100644 --- a/modules/mesh-knowledge/go.mod +++ b/modules/mesh-knowledge/go.mod @@ -3,7 +3,7 @@ module mesh-knowledge go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/jackc/pgx/v5 v5.11.0 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 diff --git a/modules/mesh-knowledge/go.sum b/modules/mesh-knowledge/go.sum index 75269f23..7cbd6f69 100644 --- a/modules/mesh-knowledge/go.sum +++ b/modules/mesh-knowledge/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/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/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/modules/mesh-mail-notifier/go.mod b/modules/mesh-mail-notifier/go.mod index 4df56b41..dbb3ea38 100644 --- a/modules/mesh-mail-notifier/go.mod +++ b/modules/mesh-mail-notifier/go.mod @@ -2,7 +2,7 @@ module mesh-mail-notifier go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/mesh-mail-notifier/go.sum b/modules/mesh-mail-notifier/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/mesh-mail-notifier/go.sum +++ b/modules/mesh-mail-notifier/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/mesh-mail-reader/go.mod b/modules/mesh-mail-reader/go.mod index f12a1321..a7c37282 100644 --- a/modules/mesh-mail-reader/go.mod +++ b/modules/mesh-mail-reader/go.mod @@ -3,7 +3,7 @@ module mesh-mail-reader go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/jackc/pgx/v5 v5.11.0 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 diff --git a/modules/mesh-mail-reader/go.sum b/modules/mesh-mail-reader/go.sum index 75269f23..7cbd6f69 100644 --- a/modules/mesh-mail-reader/go.sum +++ b/modules/mesh-mail-reader/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/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/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/modules/mesh-mail-web/go.mod b/modules/mesh-mail-web/go.mod index 71e8c4a2..bfbe7313 100644 --- a/modules/mesh-mail-web/go.mod +++ b/modules/mesh-mail-web/go.mod @@ -3,7 +3,7 @@ module mesh-mail-web go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/coreos/go-oidc/v3 v3.21.0 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 diff --git a/modules/mesh-mail-web/go.sum b/modules/mesh-mail-web/go.sum index 6612f8aa..34e8caf5 100644 --- a/modules/mesh-mail-web/go.sum +++ b/modules/mesh-mail-web/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/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/coreos/go-oidc/v3 v3.21.0 h1:wZo4Q9Pum8dYEj0eMUPrqR+kvuGkeUplbLpNCkBqoWM= diff --git a/modules/mesh-mail/go.mod b/modules/mesh-mail/go.mod index 5f6c5f94..07c83731 100644 --- a/modules/mesh-mail/go.mod +++ b/modules/mesh-mail/go.mod @@ -3,7 +3,7 @@ module mesh-mail go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/emersion/go-imap/v2 v2.0.0-beta.8 github.com/emersion/go-message v0.18.2 github.com/jackc/pgx/v5 v5.11.0 diff --git a/modules/mesh-mail/go.sum b/modules/mesh-mail/go.sum index 35eb627a..f8ccf638 100644 --- a/modules/mesh-mail/go.sum +++ b/modules/mesh-mail/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/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/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/modules/mesh-provisioner-client/go.mod b/modules/mesh-provisioner-client/go.mod index 317477c9..33703d51 100644 --- a/modules/mesh-provisioner-client/go.mod +++ b/modules/mesh-provisioner-client/go.mod @@ -3,7 +3,7 @@ module mesh-provisioner-client go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 golang.org/x/sys v0.48.0 diff --git a/modules/mesh-provisioner-client/go.sum b/modules/mesh-provisioner-client/go.sum index 5fc11b2f..ea0f85a7 100644 --- a/modules/mesh-provisioner-client/go.sum +++ b/modules/mesh-provisioner-client/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/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-provisioner/go.mod b/modules/mesh-provisioner/go.mod index 19748507..02f62084 100644 --- a/modules/mesh-provisioner/go.mod +++ b/modules/mesh-provisioner/go.mod @@ -3,7 +3,7 @@ module mesh-provisioner go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101151945-b2a27ed5cec4 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-provisioner/go.sum b/modules/mesh-provisioner/go.sum index 4903c2c3..ea0f85a7 100644 --- a/modules/mesh-provisioner/go.sum +++ b/modules/mesh-provisioner/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101151945-b2a27ed5cec4 h1:xeuMBwOHNKrVUdGVg7Bdv5tkdueBvngwJFyk6n10rp0= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101151945-b2a27ed5cec4/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/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-reads/go.mod b/modules/mesh-reads/go.mod index c6fca148..6406e8a6 100644 --- a/modules/mesh-reads/go.mod +++ b/modules/mesh-reads/go.mod @@ -2,7 +2,7 @@ module mesh-reads go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/mesh-reads/go.sum b/modules/mesh-reads/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/mesh-reads/go.sum +++ b/modules/mesh-reads/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/mesh-self-check/go.mod b/modules/mesh-self-check/go.mod index e707d96f..bf8a78df 100644 --- a/modules/mesh-self-check/go.mod +++ b/modules/mesh-self-check/go.mod @@ -3,7 +3,7 @@ module mesh-self-check go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-self-check/go.sum b/modules/mesh-self-check/go.sum index 5fc11b2f..ea0f85a7 100644 --- a/modules/mesh-self-check/go.sum +++ b/modules/mesh-self-check/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/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-vault/go.mod b/modules/mesh-vault/go.mod index c3a48a37..aa633162 100644 --- a/modules/mesh-vault/go.mod +++ b/modules/mesh-vault/go.mod @@ -3,7 +3,7 @@ module mesh-vault go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102004146-dff0ce2abb21 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 golang.org/x/crypto v0.57.0 diff --git a/modules/mesh-vault/go.sum b/modules/mesh-vault/go.sum index 4ab391eb..ea0f85a7 100644 --- a/modules/mesh-vault/go.sum +++ b/modules/mesh-vault/go.sum @@ -1,7 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102004146-dff0ce2abb21 h1:4I4ayo0fZYP4PBfEX1sGDDd6arnw5IQJySJ3jcFobPM= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102004146-dff0ce2abb21/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/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-watcher/go.mod b/modules/mesh-watcher/go.mod index bef1bb30..04f2109e 100644 --- a/modules/mesh-watcher/go.mod +++ b/modules/mesh-watcher/go.mod @@ -2,7 +2,7 @@ module mesh-watcher go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/mesh-watcher/go.sum b/modules/mesh-watcher/go.sum index 733cedc9..91c4c9e2 100644 --- a/modules/mesh-watcher/go.sum +++ b/modules/mesh-watcher/go.sum @@ -1,7 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c h1:/YCxh+NYfqry3PxZYY1nQXaccupobxpsFt8c9BYuGBg= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/messenger/go.mod b/modules/messenger/go.mod index b208cdd4..acb01ee6 100644 --- a/modules/messenger/go.mod +++ b/modules/messenger/go.mod @@ -3,7 +3,7 @@ module messenger go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/messenger/go.sum b/modules/messenger/go.sum index 82531029..ea0f85a7 100644 --- a/modules/messenger/go.sum +++ b/modules/messenger/go.sum @@ -1,7 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c h1:/YCxh+NYfqry3PxZYY1nQXaccupobxpsFt8c9BYuGBg= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/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/minio/go.mod b/modules/minio/go.mod index 75ab5fd7..6f1f8cb5 100644 --- a/modules/minio/go.mod +++ b/modules/minio/go.mod @@ -2,7 +2,7 @@ module minio go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/minio/go.sum b/modules/minio/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/minio/go.sum +++ b/modules/minio/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/mounts/go.mod b/modules/mounts/go.mod index d172bb6c..cfd1a585 100644 --- a/modules/mounts/go.mod +++ b/modules/mounts/go.mod @@ -2,7 +2,7 @@ module mounts go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/mounts/go.sum b/modules/mounts/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/mounts/go.sum +++ b/modules/mounts/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/nats/go.mod b/modules/nats/go.mod index 139186ff..f856af48 100644 --- a/modules/nats/go.mod +++ b/modules/nats/go.mod @@ -3,7 +3,7 @@ module nats-tools go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/klauspost/compress v1.20.0 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 diff --git a/modules/nats/go.sum b/modules/nats/go.sum index 82531029..ea0f85a7 100644 --- a/modules/nats/go.sum +++ b/modules/nats/go.sum @@ -1,7 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c h1:/YCxh+NYfqry3PxZYY1nQXaccupobxpsFt8c9BYuGBg= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/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/netcheck/go.mod b/modules/netcheck/go.mod index 5ba1db6b..83f912e8 100644 --- a/modules/netcheck/go.mod +++ b/modules/netcheck/go.mod @@ -2,7 +2,7 @@ module netcheck go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/netcheck/go.sum b/modules/netcheck/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/netcheck/go.sum +++ b/modules/netcheck/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/networkmanager/go.mod b/modules/networkmanager/go.mod index eacbf5b9..c1cf3b21 100644 --- a/modules/networkmanager/go.mod +++ b/modules/networkmanager/go.mod @@ -2,7 +2,7 @@ module networkmanager go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/networkmanager/go.sum b/modules/networkmanager/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/networkmanager/go.sum +++ b/modules/networkmanager/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/nextcloud-client/go.mod b/modules/nextcloud-client/go.mod index c6a1437d..a1ad717a 100644 --- a/modules/nextcloud-client/go.mod +++ b/modules/nextcloud-client/go.mod @@ -2,7 +2,7 @@ module nextcloud-client go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/nextcloud-client/go.sum b/modules/nextcloud-client/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/nextcloud-client/go.sum +++ b/modules/nextcloud-client/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/nfs-server/go.mod b/modules/nfs-server/go.mod index 7da37961..867097af 100644 --- a/modules/nfs-server/go.mod +++ b/modules/nfs-server/go.mod @@ -2,7 +2,7 @@ module nfsserver go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/nfs-server/go.sum b/modules/nfs-server/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/nfs-server/go.sum +++ b/modules/nfs-server/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/nm-applet/go.mod b/modules/nm-applet/go.mod index 41c80a78..869e55d7 100644 --- a/modules/nm-applet/go.mod +++ b/modules/nm-applet/go.mod @@ -2,7 +2,7 @@ module nm-applet go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/nm-applet/go.sum b/modules/nm-applet/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/nm-applet/go.sum +++ b/modules/nm-applet/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/only-office/go.mod b/modules/only-office/go.mod index 8e118b61..43a041f0 100644 --- a/modules/only-office/go.mod +++ b/modules/only-office/go.mod @@ -3,7 +3,7 @@ module only-office go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/only-office/go.sum b/modules/only-office/go.sum index 5fc11b2f..ea0f85a7 100644 --- a/modules/only-office/go.sum +++ b/modules/only-office/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/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/openrazer/go.mod b/modules/openrazer/go.mod index 09ce4c6b..72517353 100644 --- a/modules/openrazer/go.mod +++ b/modules/openrazer/go.mod @@ -2,7 +2,7 @@ module openrazer go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/openrazer/go.sum b/modules/openrazer/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/openrazer/go.sum +++ b/modules/openrazer/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/pacman/go.mod b/modules/pacman/go.mod index 7e9a6002..cd524249 100644 --- a/modules/pacman/go.mod +++ b/modules/pacman/go.mod @@ -3,7 +3,7 @@ module pacman go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/nats-io/nats-server/v2 v2.11.17 ) diff --git a/modules/pacman/go.sum b/modules/pacman/go.sum index c4ff816c..ea0f85a7 100644 --- a/modules/pacman/go.sum +++ b/modules/pacman/go.sum @@ -1,7 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101151945-b2a27ed5cec4 h1:xeuMBwOHNKrVUdGVg7Bdv5tkdueBvngwJFyk6n10rp0= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101151945-b2a27ed5cec4/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c h1:/YCxh+NYfqry3PxZYY1nQXaccupobxpsFt8c9BYuGBg= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101235037-c21d8fd9692c/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/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/picom/go.mod b/modules/picom/go.mod index e3c44e6a..a17fd938 100644 --- a/modules/picom/go.mod +++ b/modules/picom/go.mod @@ -2,7 +2,7 @@ module picom go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/picom/go.sum b/modules/picom/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/picom/go.sum +++ b/modules/picom/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/polychromatic/go.mod b/modules/polychromatic/go.mod index c59d9b8a..34791051 100644 --- a/modules/polychromatic/go.mod +++ b/modules/polychromatic/go.mod @@ -2,7 +2,7 @@ module polychromatic go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/polychromatic/go.sum b/modules/polychromatic/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/polychromatic/go.sum +++ b/modules/polychromatic/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/postgres/go.mod b/modules/postgres/go.mod index d3731141..fe4d8016 100644 --- a/modules/postgres/go.mod +++ b/modules/postgres/go.mod @@ -3,7 +3,7 @@ module postgres go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/jackc/pgx/v5 v5.11.0 ) diff --git a/modules/postgres/go.sum b/modules/postgres/go.sum index 4491a899..822d6592 100644 --- a/modules/postgres/go.sum +++ b/modules/postgres/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/modules/power/go.mod b/modules/power/go.mod index 2c9dde5d..74796ae0 100644 --- a/modules/power/go.mod +++ b/modules/power/go.mod @@ -3,7 +3,7 @@ module power go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/godbus/dbus/v5 v5.1.0 ) diff --git a/modules/power/go.sum b/modules/power/go.sum index 5838cf9d..a177a7e2 100644 --- a/modules/power/go.sum +++ b/modules/power/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= diff --git a/modules/records/go.mod b/modules/records/go.mod index 2598e930..1b525f66 100644 --- a/modules/records/go.mod +++ b/modules/records/go.mod @@ -2,7 +2,7 @@ module records go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/records/go.sum b/modules/records/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/records/go.sum +++ b/modules/records/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/restic/go.mod b/modules/restic/go.mod index 8ac27286..1ab4edfa 100644 --- a/modules/restic/go.mod +++ b/modules/restic/go.mod @@ -2,7 +2,7 @@ module restic go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/restic/go.sum b/modules/restic/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/restic/go.sum +++ b/modules/restic/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/rofi/go.mod b/modules/rofi/go.mod index 625f6202..a8247d2d 100644 --- a/modules/rofi/go.mod +++ b/modules/rofi/go.mod @@ -2,7 +2,7 @@ module rofi go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/rofi/go.sum b/modules/rofi/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/rofi/go.sum +++ b/modules/rofi/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/route-adapter/go.mod b/modules/route-adapter/go.mod index 79f4a837..a888c751 100644 --- a/modules/route-adapter/go.mod +++ b/modules/route-adapter/go.mod @@ -2,7 +2,7 @@ module route-adapter go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/route-adapter/go.sum b/modules/route-adapter/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/route-adapter/go.sum +++ b/modules/route-adapter/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/screen-lock/go.mod b/modules/screen-lock/go.mod index 5a7049e6..6377060a 100644 --- a/modules/screen-lock/go.mod +++ b/modules/screen-lock/go.mod @@ -2,7 +2,7 @@ module screenlock go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/screen-lock/go.sum b/modules/screen-lock/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/screen-lock/go.sum +++ b/modules/screen-lock/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/sensors/go.mod b/modules/sensors/go.mod index 84026813..b352dedf 100644 --- a/modules/sensors/go.mod +++ b/modules/sensors/go.mod @@ -2,7 +2,7 @@ module sensors go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/sensors/go.sum b/modules/sensors/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/sensors/go.sum +++ b/modules/sensors/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/slack/go.mod b/modules/slack/go.mod index c113a3b2..17e89109 100644 --- a/modules/slack/go.mod +++ b/modules/slack/go.mod @@ -2,7 +2,7 @@ module slack go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/slack/go.sum b/modules/slack/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/slack/go.sum +++ b/modules/slack/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/snapd/go.mod b/modules/snapd/go.mod index 0076f5e9..f6991c58 100644 --- a/modules/snapd/go.mod +++ b/modules/snapd/go.mod @@ -2,7 +2,7 @@ module snapd go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/snapd/go.sum b/modules/snapd/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/snapd/go.sum +++ b/modules/snapd/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/ssh-client/go.mod b/modules/ssh-client/go.mod index 0b3ab24e..6e6759b3 100644 --- a/modules/ssh-client/go.mod +++ b/modules/ssh-client/go.mod @@ -3,7 +3,7 @@ module sshclient go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/ssh-client/go.sum b/modules/ssh-client/go.sum index 5fc11b2f..ea0f85a7 100644 --- a/modules/ssh-client/go.sum +++ b/modules/ssh-client/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/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/sudo/go.mod b/modules/sudo/go.mod index 42f1ac5f..67698c76 100644 --- a/modules/sudo/go.mod +++ b/modules/sudo/go.mod @@ -2,7 +2,7 @@ module sudo go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/sudo/go.sum b/modules/sudo/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/sudo/go.sum +++ b/modules/sudo/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/systemd-networkd/go.mod b/modules/systemd-networkd/go.mod index 7beb65a3..8f098d43 100644 --- a/modules/systemd-networkd/go.mod +++ b/modules/systemd-networkd/go.mod @@ -2,7 +2,7 @@ module systemd-networkd go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/systemd-networkd/go.sum b/modules/systemd-networkd/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/systemd-networkd/go.sum +++ b/modules/systemd-networkd/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/systemd-resolved/go.mod b/modules/systemd-resolved/go.mod index 989a52d2..088f704f 100644 --- a/modules/systemd-resolved/go.mod +++ b/modules/systemd-resolved/go.mod @@ -2,7 +2,7 @@ module systemd-resolved go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/systemd-resolved/go.sum b/modules/systemd-resolved/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/systemd-resolved/go.sum +++ b/modules/systemd-resolved/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/systemd/go.mod b/modules/systemd/go.mod index 275d1914..f9d9ba8b 100644 --- a/modules/systemd/go.mod +++ b/modules/systemd/go.mod @@ -2,7 +2,7 @@ module systemd-tools go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/systemd/go.sum b/modules/systemd/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/systemd/go.sum +++ b/modules/systemd/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/telegram/go.mod b/modules/telegram/go.mod index 86439ed3..023ca0b3 100644 --- a/modules/telegram/go.mod +++ b/modules/telegram/go.mod @@ -2,7 +2,7 @@ module telegram go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/telegram/go.sum b/modules/telegram/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/telegram/go.sum +++ b/modules/telegram/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/time-sync/go.mod b/modules/time-sync/go.mod index aeed8f4a..78bf3826 100644 --- a/modules/time-sync/go.mod +++ b/modules/time-sync/go.mod @@ -2,7 +2,7 @@ module time-sync go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/time-sync/go.sum b/modules/time-sync/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/time-sync/go.sum +++ b/modules/time-sync/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/triggerhappy/go.mod b/modules/triggerhappy/go.mod index 613c422d..25bb3a59 100644 --- a/modules/triggerhappy/go.mod +++ b/modules/triggerhappy/go.mod @@ -2,7 +2,7 @@ module triggerhappy go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/triggerhappy/go.sum b/modules/triggerhappy/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/triggerhappy/go.sum +++ b/modules/triggerhappy/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/xclip/go.mod b/modules/xclip/go.mod index eb24a241..64743929 100644 --- a/modules/xclip/go.mod +++ b/modules/xclip/go.mod @@ -2,7 +2,7 @@ module xclip go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/xclip/go.sum b/modules/xclip/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/xclip/go.sum +++ b/modules/xclip/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/xdg/go.mod b/modules/xdg/go.mod index 4cc4075d..b6824243 100644 --- a/modules/xdg/go.mod +++ b/modules/xdg/go.mod @@ -2,7 +2,7 @@ module xdg go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/xdg/go.sum b/modules/xdg/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/xdg/go.sum +++ b/modules/xdg/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/xorg/go.mod b/modules/xorg/go.mod index f29ee7a0..6b772760 100644 --- a/modules/xorg/go.mod +++ b/modules/xorg/go.mod @@ -2,7 +2,7 @@ module xorg go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/xorg/go.sum b/modules/xorg/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/xorg/go.sum +++ b/modules/xorg/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/xterm/go.mod b/modules/xterm/go.mod index e00ee53f..5fc380c2 100644 --- a/modules/xterm/go.mod +++ b/modules/xterm/go.mod @@ -2,7 +2,7 @@ module xterm go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/xterm/go.sum b/modules/xterm/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/xterm/go.sum +++ b/modules/xterm/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/zfs/go.mod b/modules/zfs/go.mod index 318b8104..63e46d0e 100644 --- a/modules/zfs/go.mod +++ b/modules/zfs/go.mod @@ -2,7 +2,7 @@ module zfstools go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/zfs/go.sum b/modules/zfs/go.sum index 443d5298..91c4c9e2 100644 --- a/modules/zfs/go.sum +++ b/modules/zfs/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915 h1:x8k7IeMirMTxUo8BH+xUO+MDnHYgU+636jl1NIw1wvs= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101022206-8af6e7266915/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= From 344fc6f6bf45b90470c805f6d31324efd8a2481d Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 12:04:30 +0100 Subject: [PATCH 15/27] End the self-check's bus-consumer probe, whose consumers were the controller's With the controller ended mesh-sdk defines no mesh consumer, so the probe judged none and always passed (issue 1126). The account consumers are the grants part's, which now says their differences and delays as conditions of its own; the probe's three kinds are carried as ended in mesh-conditions' table. Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- .../cmd/mesh-conditions/homes.go | 12 ++- .../cmd/mesh-conditions/keeper_test.go | 10 ++- .../cmd/mesh-self-check/observation.go | 10 --- .../cmd/mesh-self-check/probes.go | 83 +------------------ .../cmd/mesh-self-check/probes_test.go | 15 +--- .../cmd/mesh-self-check/selfcheck_test.go | 2 +- .../cmd/mesh-self-check/tools.go | 2 +- 7 files changed, 23 insertions(+), 111 deletions(-) diff --git a/modules/mesh-conditions/cmd/mesh-conditions/homes.go b/modules/mesh-conditions/cmd/mesh-conditions/homes.go index a1c25a10..86072e9f 100644 --- a/modules/mesh-conditions/cmd/mesh-conditions/homes.go +++ b/modules/mesh-conditions/cmd/mesh-conditions/homes.go @@ -28,6 +28,9 @@ type Home struct { // Dropped is the reason of the probes the operator dropped from this release (D2, D3, D4, D12, D-heard, D-root, D11, // and D13's data held twice): their kinds end with the controller and are carried until the lease write. +// EndedD6 is the reason of the bus-consumer probe's kinds: the probe ended with the controller (issue 1126). +const EndedD6 = "ended with the controller on 2026-11-02; the grants part says its account consumers' differences and delays (issue 1126)" + const Dropped = "dropped 2026-10-30 by the operator; the owning module declares its own check later (research 074)" // The kinds' homes, by kind: ADR 0564's rows, and the 63 kinds the controller's code raises that the record left without @@ -61,9 +64,6 @@ var Homes = map[string]Home{ "directory-used-as-found": {Source: "health", Controller: true, Observer: watchman}, // The self-check's probes (clause 6, the Context's table). "lease-split": {Source: "D5", Controller: true, Observer: selfCheck}, // a seat held once answers from two holders - "consumer-wrong": {Source: "D6", Controller: true, Observer: selfCheck}, - "consumer-lost": {Source: "D6", Controller: true, Observer: selfCheck}, // and the watchman's S9 - "consumer-behind": {Source: "D6", Controller: true, Observer: selfCheck}, "stream-wrong": {Source: "D7", Controller: true, Observer: selfCheck}, "own-address-banned": {Source: "D8", Controller: true, Observer: selfCheck}, "data-unmeasured": {Source: "D13", Controller: true, Observer: selfCheck}, @@ -118,6 +118,12 @@ var Homes = map[string]Home{ // is carried until then, approved by the operator on 2026-10-31 (issue 1952); ADR 0564's table had homed it with the // assigner, which writes no such finding, and the lead records the change of the record. "bus-upgrade-failed": {Source: "DB", Controller: true, Carried: true}, + // The self-check's bus-consumer probe (D6) judged the consumers the controller defined, and ended with it (issue + // 1126): the account consumers are the grants part's, which raises mesh-grants.consumer-differs and + // mesh-grants.consumer-behind of its own. Its kinds are carried, as the others that end with the controller. + "consumer-wrong": {Source: "D6", Controller: true, Carried: true, Why: EndedD6}, + "consumer-lost": {Source: "D6", Controller: true, Carried: true, Why: EndedD6}, + "consumer-behind": {Source: "D6", Controller: true, Carried: true, Why: EndedD6}, // The probes the operator dropped from this release (D2 resolvers, D3 holders, D4 archives, D12 bindings, D-heard // withheld hearings, D-root, D11 retired data, and D13's data held twice): their kinds are carried until the lease // write. diff --git a/modules/mesh-conditions/cmd/mesh-conditions/keeper_test.go b/modules/mesh-conditions/cmd/mesh-conditions/keeper_test.go index 01367614..c2d6b3bb 100644 --- a/modules/mesh-conditions/cmd/mesh-conditions/keeper_test.go +++ b/modules/mesh-conditions/cmd/mesh-conditions/keeper_test.go @@ -287,8 +287,14 @@ func TestEveryControllerKindHasItsHome(t *testing.T) { t.Errorf("the dropped probe's kind %s is %+v", kind, h) } } - // And the controller's own bus upgrade, carried (the operator, 2026-10-31): 34. - if len(Homes) != 84 || carried != 34 { // 19 of ADR 0564, the 63 of the table, plan-failed and stalled + // And the controller's own bus upgrade, carried (the operator, 2026-10-31): 34; and the bus-consumer probe's three + // kinds, ended with the controller (issue 1126): 37. + for _, kind := range []string{"consumer-wrong", "consumer-lost", "consumer-behind"} { + if h := Homes[kind]; !h.Carried || h.Observer != "" || h.Why != EndedD6 { + t.Errorf("the ended probe's kind %s is %+v", kind, h) + } + } + if len(Homes) != 84 || carried != 37 { // 19 of ADR 0564, the 63 of the table, plan-failed and stalled t.Errorf("the table holds %d kinds, %d carried", len(Homes), carried) } } diff --git a/modules/mesh-self-check/cmd/mesh-self-check/observation.go b/modules/mesh-self-check/cmd/mesh-self-check/observation.go index ac535f44..782d6bd0 100644 --- a/modules/mesh-self-check/cmd/mesh-self-check/observation.go +++ b/modules/mesh-self-check/cmd/mesh-self-check/observation.go @@ -107,16 +107,6 @@ type plain struct{ Headline, Explanation, Resolved, Needs string } // words are the controller's words for each kind the self-check raises (mesh-controller plain_words.go), the // controller's name for itself replaced by the self-check's where the words spoke of it. var words = map[string]plain{ - "consumer-lost": {Headline: "A listener on the bus is gone", - Explanation: "One of the mesh's listeners is no longer on the bus; the next send sets it up again.", - Resolved: "The listener is back"}, - "consumer-wrong": {Headline: "A listener on the bus is set up wrong", - Explanation: "One of the mesh's listeners on the bus is missing or not as defined; the next send sets it up again.", - Resolved: "The listener is set up right again"}, - "consumer-behind": {Headline: "Messages pile up for a listener", - Explanation: "One of the mesh's listeners on the bus is far behind, so what it handles happens late. A healer " + - "restarts it if it stays.", - Resolved: "The listener caught up"}, "stream-wrong": {Headline: "Part of the bus's storage is wrong", Needs: "check the machine the bus runs on; the details say what is missing.", Explanation: "A store the mesh keeps on the bus is missing or not as defined, so what it keeps there may be lost.", diff --git a/modules/mesh-self-check/cmd/mesh-self-check/probes.go b/modules/mesh-self-check/cmd/mesh-self-check/probes.go index 5e0d3db3..f78e8f5a 100644 --- a/modules/mesh-self-check/cmd/mesh-self-check/probes.go +++ b/modules/mesh-self-check/cmd/mesh-self-check/probes.go @@ -4,8 +4,9 @@ package main // each with its assertion unchanged, reading its facts where they live on the bus. A probe whose facts have no home // on the bus yet answers deferred, naming them, and is never a pass (tracked by issue 1952). Not registered, as the // table says: D1 (nodes compose their own; a refusal is the watchman's S21), D10 (a want ahead of its have is the -// watchman's pulse), D5, D9 and H-controller (they end with the controller), stuck (the watchman's own finding) and -// the bus step (its home is issue 1953's). +// watchman's pulse), D5, D9 and H-controller (they end with the controller), stuck (the watchman's own finding), the +// bus step (its home is issue 1953's), and D6: the consumers it judged were the controller's, and the account consumers +// are the grants part's, which raises mesh-grants.consumer-differs and mesh-grants.consumer-behind (issue 1126). import ( "context" @@ -26,7 +27,6 @@ const ( SignalsVerb = "seat:mesh-watchdogs.signals" notOnTheBus = "the bus module's tools (nats_streams) answer this only once asked; " storeOnly = "held only in the controller's store today" - behindBound = 1000 reconnectMax = 12 ) @@ -50,9 +50,6 @@ func Registry() []Probe { "records are " + storeOnly + ", and the watchman's presence has no read granted to this module"}, {ID: "D4", Asserts: "every kept archive is held by a manifest", From: "issue 253", Kind: "archives-unheld", Deferred: "the artifact store's kept archives with the manifests that hold them: the archive index is " + storeOnly}, - {ID: "D6", Asserts: "every durable consumer the mesh expects exists with its definition, and is near its " + - "stream's head", From: "issues 248, 266", Kind: "consumer-wrong", - Raises: []string{"consumer-lost", "consumer-behind"}, Run: probeConsumers}, {ID: "D7", Asserts: "every stream the mesh defines exists with its definition", From: "issue 208", Kind: "stream-wrong", Run: probeStreams}, {ID: "D8", Asserts: "no address the mesh owns — a machine's private address or its endpoint — is in a ban list", @@ -150,80 +147,6 @@ func expectedConsumers() map[string][]buscompose.Consumer { return out } -// probeConsumers is D6: every durable consumer the mesh defines exists as defined, and is near its stream's head. -func probeConsumers(ctx context.Context, c *Checker) ([]Observation, error) { - var out []Observation - byStream := expectedConsumers() - streams := make([]string, 0, len(byStream)) - for s := range byStream { - streams = append(streams, s) - } - sort.Strings(streams) - for _, stream := range streams { - if ctx.Err() != nil { - return nil, ctx.Err() - } - rows, err := c.streams(stream) - held := map[string]consumerRow{} - switch { - case errors.Is(err, errNoStream): - case err != nil: - return nil, err - default: - for _, r := range rows { - for _, cr := range r.Consumers { - held[cr.Name] = cr - } - } - } - for _, want := range byStream[stream] { - who := want.Stream + "." + want.Name - have, ok := held[want.Name] - if !ok { - out = append(out, Observation{Kind: "consumer-lost", Ref: "missing", Severity: Warning, - Subject: Subject{Scope: ScopeBus, ID: who}, - Summary: fmt.Sprintf("%s is not on the bus: what it delivers reaches nobody", consumerWords(want)), - Said: "no consumer " + want.Name + " on " + want.Stream}) - continue - } - if differs := consumerDiffers(want, have); differs != "" { - out = append(out, Observation{Ref: "redefined", Severity: Warning, Subject: Subject{Scope: ScopeBus, ID: who}, - Summary: fmt.Sprintf("%s is not as the mesh defines it: %s", consumerWords(want), differs), - Said: differs}) - } - if want.Stream != "NODES" && have.Pending > behindBound { - // One look at a consumer a burst put behind is not one that stays behind: held for the next run, - // so healer H4 resets nothing on a single sample (novox/hq issue 277). - out = append(out, Observation{Kind: "consumer-behind", Ref: "behind", Severity: Warning, Confirm: true, - Subject: Subject{Scope: ScopeBus, ID: who}, - Summary: fmt.Sprintf("%s is %d message(s) behind its stream's head", consumerWords(want), have.Pending), - Said: fmt.Sprintf("%d pending, %d handed out and not settled", have.Pending, have.Unacked)}) - } - } - } - return sorted(out), nil -} - -// consumerDiffers is what about a consumer on the bus is not as defined, of what the bus module says of it: its -// filters, its shape (push or pull) and how often it hands a message over. Empty when nothing is. -func consumerDiffers(want buscompose.Consumer, have consumerRow) string { - var differs []string - haveFilters := slices.Clone(have.Filters) - wantFilters := slices.Clone(want.Filters) - sort.Strings(haveFilters) - sort.Strings(wantFilters) - if !slices.Equal(haveFilters, wantFilters) { - differs = append(differs, fmt.Sprintf("filters %v, defined %v", haveFilters, wantFilters)) - } - if want.MaxDeliver != 0 && have.MaxDeliver != int64(want.MaxDeliver) { - differs = append(differs, fmt.Sprintf("hands a message over %d times, defined %d", have.MaxDeliver, want.MaxDeliver)) - } - if wantPush, havePush := want.Push || want.Queue != "", have.Kind == "push"; wantPush != havePush { - differs = append(differs, "delivers by the other shape (push or pull) than defined") - } - return strings.Join(differs, "; ") -} - // probeStreams is D7: every stream the mesh defines exists as defined. func probeStreams(ctx context.Context, c *Checker) ([]Observation, error) { rows, err := c.streams("") diff --git a/modules/mesh-self-check/cmd/mesh-self-check/probes_test.go b/modules/mesh-self-check/cmd/mesh-self-check/probes_test.go index e1789f93..d980724c 100644 --- a/modules/mesh-self-check/cmd/mesh-self-check/probes_test.go +++ b/modules/mesh-self-check/cmd/mesh-self-check/probes_test.go @@ -129,19 +129,6 @@ func TestTheBusProbes(t *testing.T) { err string mesh *memStore // the bus states the machine probes read; nil reads none }{ - {"D6 all as defined", probeConsumers, bus{}, nil, "", nil}, - {"D6 a consumer gone", probeConsumers, bus{drop: map[string]bool{"DEAD_LETTER_NOTICES.controller": true}}, - []string{"bus.DEAD_LETTER_NOTICES.controller.missing"}, "", nil}, - {"D6 a stream gone takes its consumers", probeConsumers, bus{drop: map[string]bool{"CONTROL": true}}, - []string{"bus.CONTROL.controller.missing"}, "", nil}, - {"D6 redefined and far behind", probeConsumers, bus{change: func(rows map[string]*streamRow) { - for i, c := range rows["EVENTS"].Consumers { - if c.Name == "controller" { - rows["EVENTS"].Consumers[i].MaxDeliver, rows["EVENTS"].Consumers[i].Pending = 9, 5000 - } - } - }}, []string{"bus.EVENTS.controller.behind", "bus.EVENTS.controller.redefined"}, "", nil}, - {"D6 the bus module silent", probeConsumers, bus{asksFail: errors.New("no responders")}, nil, "did not answer", nil}, {"D7 all as defined", probeStreams, bus{}, nil, "", nil}, {"D7 missing and redefined", probeStreams, bus{drop: map[string]bool{"NODES": true}, change: func(rows map[string]*streamRow) { rows["EVENTS"].Retention = "workqueue" @@ -361,7 +348,7 @@ func agents(verdicts map[string]string) *memStore { // The registry holds exactly the probes ADR 0564's table moves here, each with a kind, and a deferred one names what // it lacks; the probes that end with the controller or moved to the watchman are not in it (issue 1952 SC4). func TestTheRegistryIsADR0564sTable(t *testing.T) { - moved := []string{"D2", "D3", "D4", "D6", "D7", "D8", "D11", "D12", "D13", "D15", "DA", "D-root", "D-fill", "D-heard", + moved := []string{"D2", "D3", "D4", "D7", "D8", "D11", "D12", "D13", "D15", "DA", "D-root", "D-fill", "D-heard", "DW", "H-bus"} var ids []string for _, p := range Registry() { diff --git a/modules/mesh-self-check/cmd/mesh-self-check/selfcheck_test.go b/modules/mesh-self-check/cmd/mesh-self-check/selfcheck_test.go index 09fa8f5c..ec294bb0 100644 --- a/modules/mesh-self-check/cmd/mesh-self-check/selfcheck_test.go +++ b/modules/mesh-self-check/cmd/mesh-self-check/selfcheck_test.go @@ -120,7 +120,7 @@ func TestARunWritesFindingsAsTheyChange(t *testing.T) { deferred := Probe{ID: "P2", Kind: "resolver-wrong", Deferred: "the overlay's addresses"} missing := Observation{Ref: "stream-missing", Severity: Urgent, Subject: Subject{Scope: ScopeBus, ID: "EVENTS"}, Summary: "the stream EVENTS is not on the bus"} - behind := Observation{Kind: "consumer-behind", Ref: "behind", Severity: Warning, Confirm: true, + behind := Observation{Kind: "bus-reconnects", Ref: "behind", Severity: Warning, Confirm: true, Subject: Subject{Scope: ScopeBus, ID: "EVENTS.controller"}, Summary: "far behind"} store := newStore() c, said := checker(store, steady, deferred) diff --git a/modules/mesh-self-check/cmd/mesh-self-check/tools.go b/modules/mesh-self-check/cmd/mesh-self-check/tools.go index 80e256d1..446ee344 100644 --- a/modules/mesh-self-check/cmd/mesh-self-check/tools.go +++ b/modules/mesh-self-check/cmd/mesh-self-check/tools.go @@ -39,7 +39,7 @@ func Tools(c *Checker) []stdio.Tool { "every probe now and answers that run; probe= gives one probe's verdict whole, every finding.", Input: obj(map[string]any{ "run": map[string]any{"type": "boolean", "description": "run every probe now"}, - "probe": map[string]any{"type": "string", "description": "one probe's verdict, whole, e.g. D6"}}), + "probe": map[string]any{"type": "string", "description": "one probe's verdict, whole, e.g. D7"}}), Run: func(a map[string]any) (any, error) { return c.Doctor(boolArg(a, "run"), strArg(a, "probe"), "asked by "+stdio.CallerOf(a)) }}, From 0f0ec66e9ab42ffc0be3cbae3b4515aa74388d86 Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 12:05:09 +0100 Subject: [PATCH 16/27] nox records the hand act a sensitive vault verb is warranted by MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Each sensitive vault verb judges its own caller, and nox reaches the vault as its machine's runtime, never as a person, so it could use none of them. Before rotate, retire approve, cleanup delete and secret export nox records the act through mesh-hand-acts (the vault verb as its verb, what it acts on as its what) and names it as act; a refused recording calls the vault not at all (ADR 0590 §8, issue 1126 review 1). Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- modules/mesh-cli/cmd/mesh-cli/commands.go | 41 +++++++++++++++--- modules/mesh-cli/cmd/mesh-cli/main.go | 32 ++++++++++++++ modules/mesh-cli/cmd/mesh-cli/main_test.go | 42 ++++++++++++++++--- .../cmd/mesh-vault/sensitive_test.go | 23 ++++++++++ 4 files changed, 128 insertions(+), 10 deletions(-) diff --git a/modules/mesh-cli/cmd/mesh-cli/commands.go b/modules/mesh-cli/cmd/mesh-cli/commands.go index c18f1d22..6513750b 100644 --- a/modules/mesh-cli/cmd/mesh-cli/commands.go +++ b/modules/mesh-cli/cmd/mesh-cli/commands.go @@ -61,12 +61,33 @@ func (u usageError) Error() string { return u.msg } func usageErr(format string, a ...any) error { return usageError{fmt.Sprintf(format, a...)} } -// call is what one line asks: an address and its arguments. +// call is what one line asks: an address and its arguments. For a sensitive vault verb, its argument `act` holds the +// *handAct that warrants it until run records the act and puts its id there. type call struct { Address string Args map[string]any } +// handAct is the act nox records through mesh-hand-acts before a sensitive vault verb, and names to it as `act`: each such +// verb judges its own caller, and nox reaches the vault as its machine's runtime, never as a person (novox/hq ADR 0590 +// §8). Its verb is the vault verb's address; its what names what the verb acts on, several names space-separated. +type handAct struct { + Verb, What, Why string +} + +// warranted is c with the hand act that warrants it, for the vault verb at its address. +func warranted(c call, what string) call { + why, _ := c.Args["why"].(string) + if strings.TrimSpace(why) == "" { + why = "asked at the operator's terminal" + } + if c.Args == nil { + c.Args = map[string]any{} + } + c.Args["act"] = &handAct{Verb: c.Address, What: what, Why: why} + return c +} + // command is one of nox's lines. type command struct { words []string @@ -287,7 +308,10 @@ var commands = []command{ return call{"mesh-config.config", a}, err }}, {words: []string{"secret", "export"}, does: "every secret the vault holds, as its copy sealed to the operator key", - build: fixed("mesh-vault.secret_vault_export")}, + build: func(l line) (call, error) { + c, err := fixed("mesh-vault.secret_vault_export")(l) + return warranted(c, "the vault's sealed copies"), err + }}, {words: []string{"secret", "accept"}, instead: "mesh-vault.accept takes a value from the controller alone, and no seat takes one from a person yet; a module's own secret is asked at a desk (mesh-vault.secret-ask)"}, {words: []string{"secret", "recover"}, instead: "opening a sealed copy locally is not built yet (beside nox enrol open); nox secret export gives the sealed copies"}, {words: []string{"secret"}, instead: "nox secret export; mesh-vault.rotate makes one anew"}, @@ -304,11 +328,18 @@ var commands = []command{ if !l.has("why") { return call{}, usageErr("give --why") } - return call{"mesh-vault.rotate", pick(l, "node", "module", "name", "provider", "provision", "consumer", "consumer_module", "why")}, nil + what := "provision/" + l.flags["provider"] + "/" + l.flags["provision"] + if l.has("node") || l.has("module") || l.has("name") { + what = "own/" + l.flags["node"] + "/" + l.flags["module"] + "/" + l.flags["name"] + } + return warranted(call{"mesh-vault.rotate", pick(l, "node", "module", "name", "provider", "provision", "consumer", "consumer_module", "why")}, what), nil }}, {words: []string{"identity", "show"}, does: "the vault's signing key and authority", build: fixed("mesh-vault.vault_signers")}, {words: []string{"retire", "approve"}, usage: "... --why ", does: "retire the set waiting for a person", - allowed: []string{"why"}, build: retirement("mesh-vault.provisioner_retire_approve")}, + allowed: []string{"why"}, build: func(l line) (call, error) { + c, err := retirement("mesh-vault.provisioner_retire_approve")(l) + return warranted(c, strings.Join(l.pos, " ")), err + }}, {words: []string{"retire", "reject"}, usage: "... --why ", does: "keep the set waiting for a person active", allowed: []string{"why"}, build: retirement("mesh-vault.provisioner_retire_reject")}, {words: []string{"retire"}, does: "every retirement waiting for a person", build: fixed("mesh-vault.provisioner_retirement")}, @@ -324,7 +355,7 @@ var commands = []command{ if l.has("confirm") { a["confirm"] = l.pos[0] } - return call{"mesh-vault.provisioner_delete", a}, nil + return warranted(call{"mesh-vault.provisioner_delete", a}, l.pos[0]), nil }}, {words: []string{"cleanup"}, does: "every retired holder per provider", build: fixed("mesh-vault.provisioner_retirement")}, {words: []string{"artifacts"}, usage: "[--collected]", does: "every artifact the mesh made: kept and why, or eligible", diff --git a/modules/mesh-cli/cmd/mesh-cli/main.go b/modules/mesh-cli/cmd/mesh-cli/main.go index 74d34709..e48c3db5 100644 --- a/modules/mesh-cli/cmd/mesh-cli/main.go +++ b/modules/mesh-cli/cmd/mesh-cli/main.go @@ -7,6 +7,7 @@ package main import ( "context" + "encoding/json" "errors" "fmt" "io" @@ -89,12 +90,43 @@ func run(ctx context.Context, args []string, stdout, stderr io.Writer) int { fmt.Fprintf(stderr, "mesh-cli: %v. Nothing was called\n nox %s %s\n", err, strings.Join(c.words, " "), c.usage) return 2 } + if h, ok := k.Args["act"].(*handAct); ok { + id, code := recordAct(ctx, *h, stderr) + if code != 0 { + return code + } + k.Args["act"] = id + } if k.Address == "mesh-delivery-view.view_status" { return status(ctx, stdout, stderr) } return show(ctx, "mesh_call", map[string]any{"address": k.Address, "arguments": k.Args}, c.render, stdout, stderr) } +// recordAct records the hand act a sensitive vault verb is warranted by, through mesh-hand-acts, and answers its id; +// a recording refused or unread calls the vault not at all (novox/hq ADR 0590 §8). +func recordAct(ctx context.Context, h handAct, stderr io.Writer) (string, int) { + a, err := meshCall(ctx, "mesh-hand-acts.hand-act", map[string]any{"verb": h.Verb, "what": h.What, "why": h.Why, + "cause": "operator"}) + if err != nil { + return "", failed(err, stderr) + } + if a.IsError { + fmt.Fprintln(stderr, "mesh-cli: the hand act was not recorded, so "+h.Verb+" was not called: "+strings.TrimRight(a.Text, "\n")) + return "", 1 + } + var rec struct { + Act struct { + ID string `json:"id"` + } `json:"act"` + } + if err := json.NewDecoder(strings.NewReader(a.Text)).Decode(&rec); err != nil || rec.Act.ID == "" { + fmt.Fprintf(stderr, "mesh-cli: mesh-hand-acts answered no act's id (%q), so %s was not called\n", a.Text, h.Verb) + return "", 1 + } + return rec.Act.ID, 0 +} + // noOwner says a line has no owner since the controller went, and what to use. func noOwner(what, instead string, stderr io.Writer) int { fmt.Fprintf(stderr, "mesh-cli: nox %s: %s.\n", what, gone) diff --git a/modules/mesh-cli/cmd/mesh-cli/main_test.go b/modules/mesh-cli/cmd/mesh-cli/main_test.go index 7f892a5a..e22808e9 100644 --- a/modules/mesh-cli/cmd/mesh-cli/main_test.go +++ b/modules/mesh-cli/cmd/mesh-cli/main_test.go @@ -120,12 +120,7 @@ func TestEachLineCallsItsOwner(t *testing.T) { {"settings set zsh execute withhold --node g14 --why test", "mesh-config.config", `{"action":"set","key":"execute","module":"zsh","node":"g14","value":"withhold","why":"test"}`}, {"settings clear zsh execute --node g14 --why test", "mesh-config.config", `{"action":"clear","key":"execute","module":"zsh","node":"g14","why":"test"}`}, {"config history --key k --limit 5", "mesh-config.config", `{"action":"history","key":"k","limit":5}`}, - {"secret export", "mesh-vault.secret_vault_export", `{}`}, {"operator key show", "mesh-vault.vault_status", `{}`}, - {"rotate --node ace --module plex --name token --why leak", "mesh-vault.rotate", `{"module":"plex","name":"token","node":"ace","why":"leak"}`}, - {"retire approve c1 c2 --why done", "mesh-vault.provisioner_retire_approve", `{"consumers":["c1","c2"],"why":"done"}`}, - {"cleanup delete ace.plex --why done --confirm", "mesh-vault.provisioner_delete", `{"confirm":"ace.plex","consumer":"ace.plex","why":"done"}`}, - {"cleanup delete ace.plex --why dry", "mesh-vault.provisioner_delete", `{"consumer":"ace.plex","why":"dry"}`}, {"collect --confirm --why space", "mesh-artifact-sweep.collect", `{"confirm":"true","why":"space"}`}, {"images ace", "mesh-artifact-sweep.images", `{"node":"ace"}`}, {"licence use g14 work", "anthropic-licence-manager.switch", `{"consumer":"g14","licence":"work"}`}, @@ -285,3 +280,40 @@ func TestEveryLineIsInTheHelpOnce(t *testing.T) { } } } + +// ADR 0590 §8 (issue 1126 review 1): each sensitive vault verb judges its own caller, and nox reaches the vault as its +// machine's runtime, so nox first records the hand act that warrants the line through mesh-hand-acts (the vault verb as +// its verb, what it acts on as its what) and names it as `act`; a recording refused calls the vault not at all. +func TestASensitiveLineRecordsItsHandActAndNamesIt(t *testing.T) { + recorded := `{"act":{"id":"act-7","verb":"mesh-vault.x"},"said":"recorded"}` + for _, c := range []struct{ line, address, verb, what, args string }{ + {"secret export", "mesh-vault.secret_vault_export", "mesh-vault.secret_vault_export", "the vault's sealed copies", `{"act":"act-7"}`}, + {"rotate --node ace --module plex --name token --why leak", "mesh-vault.rotate", "mesh-vault.rotate", "own/ace/plex/token", + `{"act":"act-7","module":"plex","name":"token","node":"ace","why":"leak"}`}, + {"rotate --provider novox --provision postgres --why yearly", "mesh-vault.rotate", "mesh-vault.rotate", "provision/novox/postgres", + `{"act":"act-7","provider":"novox","provision":"postgres","why":"yearly"}`}, + {"retire approve c1 c2 --why done", "mesh-vault.provisioner_retire_approve", "mesh-vault.provisioner_retire_approve", "c1 c2", + `{"act":"act-7","consumers":["c1","c2"],"why":"done"}`}, + {"cleanup delete ace.plex --why done --confirm", "mesh-vault.provisioner_delete", "mesh-vault.provisioner_delete", "ace.plex", + `{"act":"act-7","confirm":"ace.plex","consumer":"ace.plex","why":"done"}`}, + {"cleanup delete ace.plex --why dry", "mesh-vault.provisioner_delete", "mesh-vault.provisioner_delete", "ace.plex", + `{"act":"act-7","consumer":"ace.plex","why":"dry"}`}, + } { + got := console(t, map[string]string{"mesh-hand-acts.hand-act": recorded}) + code, _, errOut := runLine(strings.Fields(c.line)...) + if code != 0 || len(*got) != 2 || (*got)[0].Address != "mesh-hand-acts.hand-act" || (*got)[1].Address != c.address || + (*got)[1].Args != c.args { + t.Errorf("nox %s: exit %d, asked %+v, stderr %q", c.line, code, *got, errOut) + continue + } + var act map[string]any + _ = json.Unmarshal([]byte((*got)[0].Args), &act) + if act["verb"] != c.verb || act["what"] != c.what || act["why"] == "" || act["cause"] == "" { + t.Errorf("nox %s recorded %v", c.line, act) + } + } + got := console(t, map[string]string{"mesh-hand-acts.hand-act": "!nothing serves seat:mesh-hand-acts.hand-act"}) + if code, _, errOut := runLine("secret", "export"); code != 1 || len(*got) != 1 || !strings.Contains(errOut, "nothing serves") { + t.Errorf("a refused recording: exit %d, asked %+v, %q", code, *got, errOut) + } +} diff --git a/modules/mesh-vault/cmd/mesh-vault/sensitive_test.go b/modules/mesh-vault/cmd/mesh-vault/sensitive_test.go index d0e53eca..1caa959c 100644 --- a/modules/mesh-vault/cmd/mesh-vault/sensitive_test.go +++ b/modules/mesh-vault/cmd/mesh-vault/sensitive_test.go @@ -70,3 +70,26 @@ func TestTheSensitiveToolsRefuseACallerTheyDoNotJudgeTheirs(t *testing.T) { t.Errorf("a listing without sealed copies was refused: %v", err) } } + +// Review 1 of issue 1126: nox reaches the vault as its machine's runtime (`.node-tools`), never as a person; it +// records the hand act first and names it, and so the export answers it, and refuses it without. +func TestNoxsRuntimeExportsWithItsHandActAndIsRefusedWithout(t *testing.T) { + v := newVault(t, nil) + if _, err := v.Put("pair/postgres/gitea", "x", "the test"); err != nil { + t.Fatal(err) + } + v.ReadAct = func(id string) (*HandActSeen, error) { + if id != "nox-1" { + return nil, nil + } + return &HandActSeen{ID: id, By: "shanks.node-tools", At: v.Now(), Verb: "mesh-vault." + SensitiveVaultExport, + Args: []string{"the vault's sealed copies"}}, nil + } + export := toolNamed(t, definitions(&Env{Vault: v.Vault}), SensitiveVaultExport) + if _, err := export.runAs("shanks.node-tools", map[string]any{}); err == nil || !strings.Contains(err.Error(), "named none") { + t.Errorf("an export with no act: %v", err) + } + if _, err := export.runAs("shanks.node-tools", map[string]any{"act": "nox-1"}); err != nil { + t.Errorf("an export with nox's act: %v", err) + } +} From 9e9877e6ec8f6f2524d1705e30323c08d7d290f7 Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 12:05:27 +0100 Subject: [PATCH 17/27] Let one hand act warrant a retirement of several consumers mesh-hand-acts records one what per act, so an approve of two consumers could never be warranted. The judge reads each word of the act's what as a name, and nox records one act listing the consumers (issue 1126 review 1). Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- modules/mesh-vault/cmd/mesh-vault/sensitive.go | 9 +++++++-- modules/mesh-vault/cmd/mesh-vault/sensitive_test.go | 4 ++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/modules/mesh-vault/cmd/mesh-vault/sensitive.go b/modules/mesh-vault/cmd/mesh-vault/sensitive.go index a9c3e486..1bad865a 100644 --- a/modules/mesh-vault/cmd/mesh-vault/sensitive.go +++ b/modules/mesh-vault/cmd/mesh-vault/sensitive.go @@ -8,7 +8,7 @@ package main // - the operator's account: a caller the runtime proves as `person.`; or // - a recorded hand act: any other proven caller names (`act`) the hand act it recorded through mesh-hand-acts for // this verb, read back here by its id: recorded by that same caller, within HandActWithin, for this verb, and -// naming what it acts on when the verb acts on something named. +// naming what it acts on when the verb acts on something named (several names in one act's what, space-separated). // // Nothing else passes: an unproven caller, a module with no act, an act of another caller, verb or subject. A `by` // argument is a word, never the proof (actOf keeps it beside the proven caller). @@ -65,8 +65,13 @@ func JudgeSensitive(read ActReader, now func() time.Time, caller, verb, act stri case a.Verb != verb && !strings.HasSuffix(a.Verb, "."+verb): return fmt.Errorf("%s: the hand act %s is %q: it warrants no %s", verb, act, a.Verb, verb) } + // mesh-hand-acts records one what; an act for several names lists them space-separated, so each word is a name. + var named []string + for _, arg := range a.Args { + named = append(named, strings.Fields(arg)...) + } for _, name := range about { - if !slices.Contains(a.Args, name) { + if !slices.Contains(named, name) { return fmt.Errorf("%s: the hand act %s names %s, not %s", verb, act, strings.Join(a.Args, " "), name) } } diff --git a/modules/mesh-vault/cmd/mesh-vault/sensitive_test.go b/modules/mesh-vault/cmd/mesh-vault/sensitive_test.go index 1caa959c..962dae66 100644 --- a/modules/mesh-vault/cmd/mesh-vault/sensitive_test.go +++ b/modules/mesh-vault/cmd/mesh-vault/sensitive_test.go @@ -16,6 +16,8 @@ func TestEachSensitiveVerbJudgesItsOwnCaller(t *testing.T) { "old": {ID: "old", By: "novox.mesh-healers", At: now.Add(-25 * time.Hour), Verb: "rotate", Args: []string{"own/g14/app/key"}}, "other": {ID: "other", By: "novox.mesh-config", At: now.Add(-time.Hour), Verb: "rotate", Args: []string{"own/g14/app/key"}}, "del": {ID: "del", By: "novox.mesh-healers", At: now.Add(-time.Hour), Verb: "provisioner_delete", Args: []string{"d-app"}}, + // As mesh-hand-acts records nox's act: one what, the consumers space-separated (review 1 of issue 1126). + "two": {ID: "two", By: "shanks.node-tools", At: now.Add(-time.Minute), Verb: "mesh-vault.provisioner_retire_approve", Args: []string{"c1 c2"}}, } read := func(id string) (*HandActSeen, error) { if a, ok := acts[id]; ok { @@ -41,6 +43,8 @@ func TestEachSensitiveVerbJudgesItsOwnCaller(t *testing.T) { {"an act too old", "novox.mesh-healers", SensitiveRotate, "old", []string{"own/g14/app/key"}, "older than"}, {"an act not recorded", "novox.mesh-healers", SensitiveDelete, "none", []string{"d-app"}, "holds no hand act"}, {"a delete's own act", "novox.mesh-healers", SensitiveDelete, "del", []string{"d-app"}, ""}, + {"one act for two consumers", "shanks.node-tools", SensitiveRetireApprove, "two", []string{"c1", "c2"}, ""}, + {"one act naming two, asked for a third", "shanks.node-tools", SensitiveRetireApprove, "two", []string{"c1", "c3"}, "not c3"}, } { err := JudgeSensitive(read, clock, row.caller, row.verb, row.act, row.about...) if (row.want == "") != (err == nil) || (err != nil && !strings.Contains(err.Error(), row.want)) { From 3ed3266dded964be415f2765b831f23fad7ea852 Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 12:07:26 +0100 Subject: [PATCH 18/27] End healers H3 and H4 and the bus-health probe's consumer half with the controller Nobody raises a lost or a far-behind consumer since the self-check's bus-consumer probe ended (issue 1126): the grants part makes a missing account consumer itself and says one far behind as mesh-grants.consumer-behind, and H4's repair was the controller's. The mesh defines no consumer of its own, so H-bus's consumer half judged nothing. Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- modules/mesh-healers/README.md | 7 +- .../mesh-healers/cmd/mesh-healers/healers.go | 61 +++-------------- .../cmd/mesh-healers/healers_test.go | 61 +++++++++-------- .../cmd/mesh-healers/manifest_test.go | 2 +- .../mesh-healers/whole_integration_test.go | 58 ++++------------ modules/mesh-healers/module.json | 1 - .../cmd/mesh-self-check/probes.go | 68 +++---------------- .../cmd/mesh-self-check/probes_test.go | 19 +----- 8 files changed, 75 insertions(+), 202 deletions(-) diff --git a/modules/mesh-healers/README.md b/modules/mesh-healers/README.md index 2563ada9..4e4a7330 100644 --- a/modules/mesh-healers/README.md +++ b/modules/mesh-healers/README.md @@ -7,9 +7,10 @@ binary (`cmd/mesh-healers`), served by a runtime of its own on its own bus accou It hears the condition keeper's `condition-raised` and `condition-changed` (seat `mesh-conditions`) on a durable consumer. A condition whose kind a healer answers is acted on within the healer's budget, its settle and the mesh-wide -brake (twelve acts an hour). A repair is a call of the seat or tool that owns the act: H3 asks the grants part's -`grants_assert` for the module whose consumer is gone. H4 (the controller's own consumer) and H5 (the provider's own -repair) are registered and run elsewhere. +brake (twelve acts an hour). A repair is a call of the seat or tool that owns the act. No healer acts here today: H3 +(a lost consumer) and H4 (a consumer far behind) ended with the controller (issue 1126), since nobody raises their kinds +any more; the grants part makes a missing account consumer itself and raises `mesh-grants.consumer-behind` of its own. +H5 (the provider's own repair) is registered and runs in the provider. Each act is begun by a create of its key in `attempts` before it is made and finished after, so a holder that dies mid-act has spent it and a second instance cannot begin it again. The condition keeper writes the condition's diff --git a/modules/mesh-healers/cmd/mesh-healers/healers.go b/modules/mesh-healers/cmd/mesh-healers/healers.go index 778016a5..7cb958af 100644 --- a/modules/mesh-healers/cmd/mesh-healers/healers.go +++ b/modules/mesh-healers/cmd/mesh-healers/healers.go @@ -3,7 +3,7 @@ package main // The healers (novox/hq ADR 0564 §7, §8; ADR 0231): a known failure heals itself, under a brake, and every repair is // said. The registry is compiled in; mesh-healers hears `condition-raised` and `condition-changed` of the seat // mesh-conditions on a durable consumer, instead of looking every half minute. A repair is a call of the seat or tool -// that owns the act (H3: the grants part's grants_assert). Each act is begun by a create of its key in the bucket +// that owns the act. Each act is begun by a create of its key in the bucket // `attempts` before it is made and finished after, so a holder that dies mid-act has spent it and a second instance // cannot begin the same act; budgets, settles and the mesh-wide brake count from there. Success is never the // healer's to say: the condition clears when its observer no longer sees it, and the condition keeper writes `tried`, @@ -25,7 +25,6 @@ import ( "time" stdio "git.novox.be/novox/mesh-sdk/go" - "git.novox.be/novox/mesh-sdk/go/buscompose" "git.novox.be/novox/mesh-sdk/go/handacts" "git.novox.be/novox/mesh-sdk/go/health" ) @@ -50,8 +49,6 @@ const ( // The events it hears: the keeper's, on the seat mesh-conditions. RaisedEvent = "mesh-conditions.condition-raised" ChangedEvent = "mesh-conditions.condition-changed" - // AssertTool is the grants part's tool that asserts a module's buckets, logs and streams again. - AssertTool = "mesh-grants.grants_assert" ) // The mesh-wide brake (to-be 45 §7): how many acts all healers together may take in an hour. @@ -132,7 +129,8 @@ type Healer struct { Budget int Window time.Duration Settle time.Duration - // ActsIn is where the repair runs: here, or a module that repairs its own (H5), or the controller (H4). + // ActsIn is where the repair runs: here, or a module that repairs its own (H5), or nowhere for a healer that ended + // with the controller (H3, H4). ActsIn string // applies says whether this condition is one it may act on, and what its budget counts against; why when not. applies func(c Condition) (budget string, ok bool, why string) @@ -143,6 +141,12 @@ type Healer struct { // actsHere marks a healer whose repair mesh-healers makes. const actsHere = "mesh-healers" +// EndedWithTheController is where H3 and H4 act: nowhere (issue 1126). Nobody raises consumer-lost or consumer-behind +// since the self-check's bus-consumer probe ended with the controller; the grants part creates a missing account +// consumer itself and raises mesh-grants.consumer-behind of its own, and H4's repair was the controller's. +const EndedWithTheController = "nowhere: ended with the controller (issue 1126); the grants part makes a missing account " + + "consumer itself and says one far behind as mesh-grants.consumer-behind" + // Registry is to-be 45 §7's table, compiled in: every healer the mesh has, the ones mesh-healers runs with their act. func Registry() []Healer { return []Healer{ @@ -150,14 +154,12 @@ func Registry() []Healer { Condition: "a durable consumer of a module the bus does not hold (D6), or a seat's holder that does not answer (D3)", Repair: "assert the module's buckets, logs and streams again through the grants part (grants_assert)", Then: "resolver operator, urgent", From: "a controller restarted to make a missing object again (208, 248)", - Budget: 1, Window: time.Hour, Settle: 6 * time.Minute, ActsIn: actsHere, - applies: appliesToAModulesObject, repair: assertAgain}, + Budget: 1, Window: time.Hour, Settle: 6 * time.Minute, ActsIn: EndedWithTheController}, {ID: "H4", Kinds: []string{"consumer-behind"}, Condition: "a durable consumer far behind its stream's head (D6) that the stream table marks resettable", Repair: "re-make the consumer to deliver from now; the one marked resettable is the controller's own", Then: "resolver operator, urgent", From: "a consumer re-made from now by hand (248)", - Budget: 1, Window: 24 * time.Hour, Settle: 6 * time.Minute, - ActsIn: "the controller, until its lease: the one consumer marked resettable is its own (ADR 0564 §7)"}, + Budget: 1, Window: 24 * time.Hour, Settle: 6 * time.Minute, ActsIn: EndedWithTheController}, {ID: "H5", Kinds: []string{"provider-failing"}, Condition: "the identity provider's administrator refusing the mesh's secret (provider-failing)", Repair: "the provider repairs it itself through the server's own bootstrap command (ADR 0224 §5)", @@ -557,47 +559,6 @@ func (h *Healers) see(source string, found []Observation) { } } -// --- H3 -------------------------------------------------------------------------------------------------------- - -// moduleOf is the module whose objects a condition names: a consumer of a module's own (`.`). The -// controller's own consumers are not a module's: they go with the controller's leftovers (issue 1126). -func moduleOf(c Condition) (string, string) { - stream, consumer, ok := strings.Cut(c.Subject.ID, ".") - if c.Kind != "consumer-lost" || !ok || stream == "" || consumer == "" { - return "", "it names no consumer of a module whose objects the grants part asserts" - } - if consumer == buscompose.ControllerName || strings.HasPrefix(consumer, buscompose.ControllerName+"-") { - return "", "the consumer is the controller's own, which the grants part does not assert" - } - return consumer, "" -} - -// appliesToAModulesObject is H3's: a module's consumer the bus does not hold, its budget per condition. -func appliesToAModulesObject(c Condition) (string, bool, string) { - if _, why := moduleOf(c); why != "" { - return "", false, why - } - return c.Key, true, "" -} - -// assertAgain is H3: the grants part asserts the module's buckets, logs and streams again. -func assertAgain(h *Healers, c Condition) (string, string, error) { - module, why := moduleOf(c) - if module == "" { - return "", "", errors.New(why) - } - raw, err := h.Ask(AssertTool, map[string]any{"module": module}) - if err != nil { - return "", "", fmt.Errorf("the grants part did not assert %s: %w", module, err) - } - var a struct { - Says string `json:"says"` - } - _ = json.Unmarshal(raw, &a) - return "asserted " + module + "'s buckets, logs and streams again through the grants part", - orSaid(a.Says, "the grants part answered") + "; the probe that raised it says on its next run whether it is there", nil -} - func orSaid(s, otherwise string) string { if strings.TrimSpace(s) == "" { return otherwise diff --git a/modules/mesh-healers/cmd/mesh-healers/healers_test.go b/modules/mesh-healers/cmd/mesh-healers/healers_test.go index ddf57bd4..8af1a6af 100644 --- a/modules/mesh-healers/cmd/mesh-healers/healers_test.go +++ b/modules/mesh-healers/cmd/mesh-healers/healers_test.go @@ -138,7 +138,7 @@ func newWorld() *world { // fresh is the healers started again over the same buckets: nothing of the last one's memory, its wakes forgotten. func (w *world) fresh() { - w.h = &Healers{Store: w.store, Registry: Registry(), Logf: func(string, ...any) {}, + w.h = &Healers{Store: w.store, Registry: append(Registry(), drill), Logf: func(string, ...any) {}, Now: func() time.Time { return w.now }, Ask: func(key string, body any) (json.RawMessage, error) { raw, _ := json.Marshal(body) @@ -154,9 +154,22 @@ func (w *world) fresh() { } } -// lost is a module's consumer the bus does not hold, as D6 raises it. +// drill is a healer of the tests alone: no healer acts here since H3 ended with the controller (issue 1126), and the +// budget, the settle, the escalation and the brake are every healer's, judged on it. +var drill = Healer{ID: "HD", Kinds: []string{"drill-broken"}, Condition: "a drill", Repair: "ask the drill again", + Then: "resolver operator, urgent", From: "a test", Budget: 1, Window: time.Hour, Settle: 6 * time.Minute, ActsIn: actsHere, + applies: func(c Condition) (string, bool, string) { return c.Key, true, "" }, + repair: func(h *Healers, c Condition) (string, string, error) { + _, module, _ := strings.Cut(c.Subject.ID, ".") + if _, err := h.Ask("drill.repair", map[string]any{"module": module}); err != nil { + return "", "", err + } + return "asked the drill again", "the drill answered", nil + }} + +// lost is a condition the drill healer answers, on a module. func lost(module string) Condition { - return Condition{Key: "bus.EVENTS." + module + ".missing", Kind: "consumer-lost", Severity: "warning", Resolver: "self", + return Condition{Key: "bus.EVENTS." + module + ".missing", Kind: "drill-broken", Severity: "warning", Resolver: "self", Subject: Subject{Scope: "bus", ID: "EVENTS." + module}} } @@ -179,7 +192,7 @@ func TestTheHealersActWithNoLease(t *testing.T) { t.Fatalf("attempts %v, would %v, asked %v, said %+v", attempts, would, w.asked, w.said) } a := w.store.attempt(t, attempts[0]) - if a.Outcome != OutcomeActed || a.Finished == nil || a.Healer != "H3" || a.Condition != "bus.EVENTS.records.missing" { + if a.Outcome != OutcomeActed || a.Finished == nil || a.Healer != "HD" || a.Condition != "bus.EVENTS.records.missing" { t.Errorf("the attempt is %+v", a) } } @@ -257,7 +270,7 @@ func TestBudgetSettleEscalationAndBrake(t *testing.T) { } // A second instance cannot begin the act an attempt's key already holds. x := newWorld() - _ = x.store.CreateTTL(AttemptsState, attemptKey("H3", lost("mail").Key, x.now.UTC()), Attempt{}, KeptFor) + _ = x.store.CreateTTL(AttemptsState, attemptKey("HD", lost("mail").Key, x.now.UTC()), Attempt{}, KeptFor) if said, _ := x.h.Judge(lost("mail"), ""); !strings.Contains(said, "another instance") || len(x.asked) != 0 { t.Errorf("a second instance acted: %q, asked %v", said, x.asked) } @@ -265,7 +278,7 @@ func TestBudgetSettleEscalationAndBrake(t *testing.T) { b := newWorld() for i := 0; i < BrakeLimit; i++ { b.now = b.now.Add(time.Minute) - _ = b.store.CreateTTL(AttemptsState, attemptKey("H3", "x", b.now), Attempt{Healer: "H3", Condition: "x", BudgetKey: "x", + _ = b.store.CreateTTL(AttemptsState, attemptKey("HD", "x", b.now), Attempt{Healer: "HD", Condition: "x", BudgetKey: "x", Outcome: OutcomeActed, Begun: b.now}, KeptFor) } if said, _ := b.h.Judge(lost("mail"), ""); !strings.Contains(said, "stopped") || len(b.asked) != 0 { @@ -298,24 +311,15 @@ func TestBudgetSettleEscalationAndBrake(t *testing.T) { } } -// H3 answers a module's consumer the bus does not hold, never the controller's own or a condition naming no consumer; -// the registry holds every healer the mesh has, H3 run here, H4 and H5 run elsewhere (ADR 0231 §2, ADR 0564 §7). -func TestTheRegistryAndWhatH3Answers(t *testing.T) { - cases := []struct { - c Condition - holds bool - }{ - {lost("records"), true}, - {lost("controller"), false}, - {lost("controller-merges"), false}, - {Condition{Key: "seat.x.silent", Kind: "holder-silent", Subject: Subject{Scope: "seat", ID: "issue-tracker"}}, false}, - {Condition{Key: "bus.EVENTS.records.behind", Kind: "consumer-behind", Subject: Subject{Scope: "bus", ID: "EVENTS.records"}}, false}, - } - for _, tc := range cases { - w := newWorld() - said, _ := w.h.Judge(tc.c, "") - if acted := len(w.asked) == 1; acted != tc.holds { - t.Errorf("%s: acted %v, want %v (%s)", tc.c.Key, acted, tc.holds, said) +// The registry holds every healer the mesh has: none acts here since H3 and H4 ended with the controller, whose kinds +// nobody raises any more, and H5 runs in the provider (ADR 0231 §2, ADR 0564 §7, issue 1126). +func TestTheRegistryActsOnNothingHere(t *testing.T) { + w := newWorld() + w.h.Registry = Registry() + for _, kind := range []string{"consumer-lost", "holder-silent", "consumer-behind"} { + c := Condition{Key: "bus.EVENTS.records." + kind, Kind: kind, Subject: Subject{Scope: "bus", ID: "EVENTS.records"}} + if said, _ := w.h.Judge(c, ""); len(w.asked) != 0 || !strings.Contains(said, "no healer here") { + t.Errorf("%s: %q, asked %v", kind, said, w.asked) } } runs := map[string]bool{} @@ -324,9 +328,12 @@ func TestTheRegistryAndWhatH3Answers(t *testing.T) { t.Errorf("%s is not a whole row: %+v", r.ID, r) } runs[r.ID] = r.repair != nil + if (r.ID == "H3" || r.ID == "H4") && r.ActsIn != EndedWithTheController { + t.Errorf("%s is not marked ended with the controller: %q", r.ID, r.ActsIn) + } } - if !runs["H3"] || runs["H4"] || runs["H5"] || len(runs) != 3 { - t.Errorf("the healers run here are %v, want H3 alone of H3, H4, H5", runs) + if runs["H3"] || runs["H4"] || runs["H5"] || len(runs) != 3 { + t.Errorf("the healers run here are %v, want none of H3, H4, H5", runs) } } @@ -402,7 +409,7 @@ func TestTheVerbsAndReads(t *testing.T) { t.Fatal(err) } a := answer.(map[string]any) - if a["acting"] != true || len(a["acts"].([]Attempt)) != 1 || len(a["healers"].([]map[string]any)) != 3 { + if a["acting"] != true || len(a["acts"].([]Attempt)) != 1 || len(a["healers"].([]map[string]any)) != 4 { // H3, H4, H5 and the drill t.Errorf("healers answered %v", a) } // drill records into mesh-hand-acts as a drill, and never into the controller's log (ADR 0565 §11, issue 1955). diff --git a/modules/mesh-healers/cmd/mesh-healers/manifest_test.go b/modules/mesh-healers/cmd/mesh-healers/manifest_test.go index 8a6bd2cc..001969cc 100644 --- a/modules/mesh-healers/cmd/mesh-healers/manifest_test.go +++ b/modules/mesh-healers/cmd/mesh-healers/manifest_test.go @@ -49,7 +49,7 @@ func TestTheManifestSaysWhatTheCodeDoes(t *testing.T) { }{ {"emits (healer-acted is the seat's, said on its subject)", m.Emits, nil}, {"consumes", m.Consumes, []string{RaisedEvent, ChangedEvent, RecordedEvent}}, - {"invokes", m.Invokes, []string{AssertTool, "seat:mesh-hand-acts.hand-act", "seat:mesh-hand-acts.hand-acts"}}, + {"invokes", m.Invokes, []string{"seat:mesh-hand-acts.hand-act", "seat:mesh-hand-acts.hand-acts"}}, {"reads", m.Reads, []string{ConditionsRead}}, } { if !slices.Equal(c.got, c.want) { diff --git a/modules/mesh-healers/cmd/mesh-healers/whole_integration_test.go b/modules/mesh-healers/cmd/mesh-healers/whole_integration_test.go index be4abc4e..fcb56242 100644 --- a/modules/mesh-healers/cmd/mesh-healers/whole_integration_test.go +++ b/modules/mesh-healers/cmd/mesh-healers/whole_integration_test.go @@ -261,11 +261,7 @@ func (p *player) handle(m wire) { p.mu.Lock() p.asked = append(p.asked, ask.Key+" "+string(ask.Body)) p.mu.Unlock() - if ask.Key != AssertTool { - p.answer(m.ID, nil, errors.New("nats: no responders available for request")) - return - } - p.answer(m.ID, map[string]any{"says": "1 the bus lacks: created at this ask"}, nil) + p.answer(m.ID, nil, errors.New("nats: no responders available for request")) default: p.answer(m.ID, nil, errors.New("nats: no responders available for request")) } @@ -320,8 +316,10 @@ func raised(key, module string) []byte { return raw } -// 1952/H3, 1126/A4: an induced failure with no lease key; the healer acts, and brakes. -func TestTheHealersWholeActOnTheBusAndBrake(t *testing.T) { +// 1952, 1126/A4: the module whole on a bus, with no lease key: it says the healers act and hears the keeper's conditions; +// a lost consumer, which H3 answered until it ended with the controller (issue 1126), is passed over: no act begun, +// nothing asked. The budget, settle and brake are judged in the unit tests on a drill healer. +func TestTheHealersWholeHearTheKeeperAndPassOverWhatEnded(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) t.Cleanup(cancel) dir := t.TempDir() @@ -385,49 +383,21 @@ func TestTheHealersWholeActOnTheBusAndBrake(t *testing.T) { // The runtime's consumer holds an event until the bundle subscribes: delivered once it hears them. eventually(t, "the healers hearing the keeper's conditions", func() bool { return p.hears(RaisedEvent) && p.hears(ChangedEvent) }) - // No lease key: the induced failure is acted on. + // What ended with the controller is passed over: no act begun, nothing asked, nothing said. p.deliver(RaisedEvent, raised("bus.EVENTS.records.missing", "records")) - eventually(t, "the act begun and finished on the bus", func() bool { - k := keys(Module + "_" + AttemptsState) - if len(k) != 1 { - return false - } - e, err := bucket(Module+"_"+AttemptsState).Get(ctx, k[0]) - return err == nil && strings.Contains(string(e.Value()), `"outcome":"acted"`) - }) + if msg, err := acted.NextMsg(3 * time.Second); err == nil { + t.Fatalf("a healer acted on a lost consumer: %s", msg.Data) + } + if k := keys(Module + "_" + AttemptsState); len(k) != 0 { + t.Errorf("an act was begun: %v", k) + } if k := keys(Module + "_" + WouldState); len(k) != 0 { t.Errorf("written as would: %v", k) } - msg, err := acted.NextMsg(10 * time.Second) - if err != nil || !strings.Contains(string(msg.Data), `"healer":"H3"`) { - t.Fatalf("healer-acted was not said: %v", err) - } p.mu.Lock() asked := strings.Join(p.asked, "\n") p.mu.Unlock() - if !strings.Contains(asked, AssertTool+` {"module":"records"}`) { - t.Errorf("the grants part was asked %s", asked) - } - // Eleven more acts within the hour: the twelfth was the limit, and the next condition meets the brake. - attempts := bucket(Module + "_" + AttemptsState) - for i := 0; i < BrakeLimit-1; i++ { - begun := time.Now().Add(-time.Duration(i+1) * time.Minute).UTC() - raw, _ := json.Marshal(Attempt{Healer: "H3", Condition: fmt.Sprintf("bus.EVENTS.m%d.missing", i), BudgetKey: "x", - Outcome: OutcomeActed, Begun: begun}) - if _, err := attempts.Put(ctx, attemptKey("H3", fmt.Sprintf("bus.EVENTS.m%d.missing", i), begun), raw); err != nil { - t.Fatal(err) - } - } - p.deliver(RaisedEvent, raised("bus.EVENTS.mail.missing", "mail")) - eventually(t, "the brake written as a finding on the bus", func() bool { - e, err := bucket(Module+"_"+FindingsState).Get(ctx, brakeKey) - if err != nil { - return false - } - f, err := health.DecodeFinding(e.Value()) - return err == nil && f.Severity == health.Urgent && f.Kind == "healers-braked" - }) - if n := len(keys(Module + "_" + AttemptsState)); n != BrakeLimit { - t.Errorf("past the brake the attempts are %d, want %d", n, BrakeLimit) + if strings.Contains(asked, "grants") || strings.Contains(asked, "records") { + t.Errorf("the healers asked about the lost consumer: %s", asked) } } diff --git a/modules/mesh-healers/module.json b/modules/mesh-healers/module.json index 041b1612..08871f82 100644 --- a/modules/mesh-healers/module.json +++ b/modules/mesh-healers/module.json @@ -19,7 +19,6 @@ "mesh-hand-acts.act-recorded" ], "invokes": [ - "mesh-grants.grants_assert", "seat:mesh-hand-acts.hand-act", "seat:mesh-hand-acts.hand-acts" ], diff --git a/modules/mesh-self-check/cmd/mesh-self-check/probes.go b/modules/mesh-self-check/cmd/mesh-self-check/probes.go index f78e8f5a..150c4265 100644 --- a/modules/mesh-self-check/cmd/mesh-self-check/probes.go +++ b/modules/mesh-self-check/cmd/mesh-self-check/probes.go @@ -81,7 +81,7 @@ func Registry() []Probe { Deferred: "the grants of restricted streams with what each machine composed for them: " + storeOnly}, {ID: "DW", Asserts: "the watchdogs answer: the watchman holds the seat mesh-watchdogs and answers signals", From: "ADR 0227 rule 6: the watchers are watched", Kind: "watchdogs-silent", Run: probeWatchdogs}, - {ID: "H-bus", Asserts: "every stream and durable consumer the mesh defines is on the bus, and a request crosses it " + + {ID: "H-bus", Asserts: "every stream the mesh defines is on the bus, and a request crosses it " + "to the bus's machine and back", From: "ADR 0236, to-be 45 §8", Kind: "core-unhealthy", Run: probeBusHealth}, } } @@ -94,20 +94,10 @@ type streamsAnswer struct { } type streamRow struct { - Name string `json:"name"` - Subjects []string `json:"subjects"` - Retention string `json:"retention"` - MaxPerSubject int64 `json:"max_per_subject"` - Consumers []consumerRow `json:"consumer_detail"` -} - -type consumerRow struct { - Name string `json:"name"` - Kind string `json:"kind"` - Filters []string `json:"filters"` - Pending int64 `json:"pending"` - Unacked int64 `json:"unacknowledged"` - MaxDeliver int64 `json:"max_deliver"` + Name string `json:"name"` + Subjects []string `json:"subjects"` + Retention string `json:"retention"` + MaxPerSubject int64 `json:"max_per_subject"` } // errNoStream is a stream the bus module says it does not hold. @@ -133,20 +123,6 @@ func (c *Checker) streams(stream string) ([]streamRow, error) { return a.Detail, nil } -// consumerWords is a consumer as the mesh says it, with its name. -func consumerWords(c buscompose.Consumer) string { - return fmt.Sprintf("the consumer %s on %s", c.Name, c.Stream) -} - -// expectedConsumers are the durable consumers the mesh defines, by stream. -func expectedConsumers() map[string][]buscompose.Consumer { - out := map[string][]buscompose.Consumer{} - for _, c := range buscompose.MeshConsumers() { - out[c.Stream] = append(out[c.Stream], c) - } - return out -} - // probeStreams is D7: every stream the mesh defines exists as defined. func probeStreams(ctx context.Context, c *Checker) ([]Observation, error) { rows, err := c.streams("") @@ -308,8 +284,9 @@ func probeWatchdogs(_ context.Context, c *Checker) ([]Observation, error) { return nil, nil } -// probeBusHealth is H-bus: every stream and durable consumer the mesh defines is on the bus, and a request crosses it -// to the bus module's machine and back. The question to the bus module is that request: an answer is its round trip, +// probeBusHealth is H-bus: every stream the mesh defines is on the bus, and a request crosses it to the bus module's +// machine and back. The mesh defines no durable consumer of its own since the controller ended: the account consumers +// are the grants part's to make and judge (issue 1126). The question to the bus module is that request: an answer is its round trip, // and no answer is no pass. func probeBusHealth(ctx context.Context, c *Checker) ([]Observation, error) { rows, err := c.streams("") @@ -326,35 +303,6 @@ func probeBusHealth(ctx context.Context, c *Checker) ([]Observation, error) { problems = append(problems, "the stream "+s.Name+" is missing") } } - byStream := expectedConsumers() - streams := make([]string, 0, len(byStream)) - for s := range byStream { - streams = append(streams, s) - } - sort.Strings(streams) - for _, stream := range streams { - if !held[stream] { - continue // said above - } - if ctx.Err() != nil { - return nil, ctx.Err() - } - detail, err := c.streams(stream) - if err != nil && !errors.Is(err, errNoStream) { - return nil, err - } - have := map[string]bool{} - for _, r := range detail { - for _, cr := range r.Consumers { - have[cr.Name] = true - } - } - for _, want := range byStream[stream] { - if !have[want.Name] { - problems = append(problems, consumerWords(want)+" is missing") - } - } - } if len(problems) == 0 { return nil, nil } diff --git a/modules/mesh-self-check/cmd/mesh-self-check/probes_test.go b/modules/mesh-self-check/cmd/mesh-self-check/probes_test.go index d980724c..5201d92f 100644 --- a/modules/mesh-self-check/cmd/mesh-self-check/probes_test.go +++ b/modules/mesh-self-check/cmd/mesh-self-check/probes_test.go @@ -44,17 +44,6 @@ func (b bus) rows() map[string]*streamRow { } rows[s.Name] = &streamRow{Name: s.Name, Subjects: s.Subjects, Retention: retention, MaxPerSubject: per} } - for _, c := range buscompose.MeshConsumers() { - r := rows[c.Stream] - if r == nil || b.drop[c.Stream+"."+c.Name] { - continue - } - kind := "pull" - if c.Push || c.Queue != "" { - kind = "push" - } - r.Consumers = append(r.Consumers, consumerRow{Name: c.Name, Kind: kind, Filters: c.Filters, MaxDeliver: int64(c.MaxDeliver)}) - } if b.change != nil { b.change(rows) } @@ -71,9 +60,7 @@ func (b bus) ask(key string, body any) (json.RawMessage, error) { var detail []streamRow for name, r := range b.rows() { if stream == "" { - row := *r - row.Consumers = nil - detail = append(detail, row) + detail = append(detail, *r) } else if name == stream { detail = append(detail, *r) } @@ -141,8 +128,8 @@ func TestTheBusProbes(t *testing.T) { {"DW answers", probeWatchdogs, bus{}, nil, "", nil}, {"DW silent", probeWatchdogs, bus{signals: errors.New("no responders")}, []string{"core.watchdogs.silent"}, "", nil}, {"H-bus healthy", probeBusHealth, bus{}, nil, "", nil}, - {"H-bus a stream and a consumer missing", probeBusHealth, - bus{drop: map[string]bool{"NODES": true, "EVENTS.controller-merges": true}}, []string{"bus.mesh.unhealthy"}, "", nil}, + {"H-bus a stream missing", probeBusHealth, + bus{drop: map[string]bool{"NODES": true}}, []string{"bus.mesh.unhealthy"}, "", nil}, {"H-bus no round trip", probeBusHealth, bus{asksFail: errors.New("timeout")}, nil, "no request crossed", nil}, // D8 (issue 238): placement's addresses and endpoints against each heard holder's ban list. {"D8 nothing of the mesh banned", probeBans, bus{banned: map[string]string{"ace": `{"banned":["198.51.100.7"]}`, From ecc762127458b276304fabc500190ea5b49861cc Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 12:13:00 +0100 Subject: [PATCH 19/27] Privilege no caller named controller in the vault; match a hand act's verb exactly The controller is not placed (ADR 0590), yet the vault still answered a caller named controller alone (accept), took its relay of who asked (secret-ask, rotate's by) and sealed it the core's credentials. Those branches and accept go with their tests; a node's account alone is never minted or rotated here. The sensitive-verb judge now needs the act's verb to be the vault's own, mesh-vault., not any verb ending so (issue 1126 review 1). Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- modules/mesh-vault/README.md | 10 +- modules/mesh-vault/cmd/mesh-vault/core.go | 38 ----- .../mesh-vault/cmd/mesh-vault/core_test.go | 72 --------- modules/mesh-vault/cmd/mesh-vault/intake.go | 110 +------------- .../mesh-vault/cmd/mesh-vault/intake_test.go | 137 ++++++------------ .../cmd/mesh-vault/issued_account_test.go | 21 +-- modules/mesh-vault/cmd/mesh-vault/mint.go | 11 +- .../mesh-vault/cmd/mesh-vault/mint_test.go | 3 +- .../cmd/mesh-vault/owncalls_test.go | 19 ++- .../cmd/mesh-vault/perholder_test.go | 5 +- modules/mesh-vault/cmd/mesh-vault/rotation.go | 6 +- .../mesh-vault/cmd/mesh-vault/sensitive.go | 2 +- .../cmd/mesh-vault/sensitive_test.go | 11 +- modules/mesh-vault/cmd/mesh-vault/tools.go | 34 +---- modules/mesh-vault/cmd/mesh-vault/vault.go | 7 - modules/mesh-vault/module.json | 1 - 16 files changed, 88 insertions(+), 399 deletions(-) diff --git a/modules/mesh-vault/README.md b/modules/mesh-vault/README.md index c633a034..75b089c7 100644 --- a/modules/mesh-vault/README.md +++ b/modules/mesh-vault/README.md @@ -136,7 +136,7 @@ the declaration sealed by the vault to their machine, which the controller carri machine's sealing key as its own node-engine stated it in its own name, in `move-in`'s first step (`sealing_key`). A machine whose engine stated none, any other key, any other module and any other name are refused and recorded. -## Taking values in: `accept`, `secret-ask`, `issued`, `rotate` +## Taking values in: `secret-ask`, `issued`, `rotate` Design 57's V2 (issue 675; ADR 0349 clauses 8 to 10, ADR 0277 §22–§27 and ADR 0305 with the vault in the controller's place). `intake.go`. @@ -156,12 +156,8 @@ controller still asks them itself for a module filled the old way, until R1 (iss answer both until then. Everything the vault keeps is its account's: its directories, the export it keeps, the grant files the controller still writes for it. -- `accept` — two steps: node, module, name (a module's own secret) or provider, provision (a provision's one - credential), and `by`; then `call` and `sealed`. The controller's terminal seals the value it read to the call's - key before it leaves the terminal. Kept with origin `accepted`; an accepted provision credential is never remade - (`rotate` refuses it); a value a provider's software issued is not taken by `accept`. -- `secret-ask` — one step: node, module, name, desk and `asked_by` (who asked the controller, as the bus named its - caller). The ask is recorded in `asks.jsonl` before anything else, and refused while another ask for the same +- `secret-ask` — one step: node, module, name and desk, asked by a caller the vault's manifest names (`accept`, and + the controller's relay of who asked it, went with the controller, ADR 0590). The ask is recorded in `asks.jsonl` before anything else, and refused while another ask for the same secret is open (two minutes at most) or when three were made in the last hour. The vault then asks the desk's prompt itself, naming who asked as the record has it, with `timeout_seconds` 20. The answer is how it ended (`given`, dismissed, timed-out, empty, refused, failed) and who asked; how each ask ended is recorded. diff --git a/modules/mesh-vault/cmd/mesh-vault/core.go b/modules/mesh-vault/cmd/mesh-vault/core.go index 985fe26d..b0264c61 100644 --- a/modules/mesh-vault/cmd/mesh-vault/core.go +++ b/modules/mesh-vault/cmd/mesh-vault/core.go @@ -20,7 +20,6 @@ import ( "fmt" "os" "path/filepath" - "slices" "strings" "time" ) @@ -103,40 +102,3 @@ func (v *Vault) recordNodeKey(node, key, caller string) error { } return nil } - -// coreRefusal says why the controller may not have name sealed to key, or "" when it may: name is a core module's -// own secret and key is its machine's sealing key as that machine's engine stated it. -func (v *Vault) coreRefusal(name, key string) string { - parts := strings.Split(name, "/") - if len(parts) != 4 || parts[0] != "own" { - return fmt.Sprintf("the controller is handed a core module's own secret alone, own//<%s>/, sealed "+ - "to its machine (ADR 0349 §16); %s is not one", strings.Join(CoreModules, "|"), name) - } - node, module := parts[1], parts[2] - if !slices.Contains(CoreModules, module) { - return fmt.Sprintf("%s is not one of the core's modules (%s): its secrets reach its machine through the "+ - "provisioner or its declaration, never through the controller's ask (ADR 0349 §16)", module, - strings.Join(CoreModules, ", ")) - } - stated, held, err := v.Store.NodeKey(node) - if err != nil { - return fmt.Sprintf("%s's sealing key cannot be read: %v", node, err) - } - if !held { - return fmt.Sprintf("%s's node-engine has stated no sealing key to the vault (it does so at the move), so "+ - "there is no key of that machine's own to seal %s to", node, name) - } - want, err := publicPEM(stated) - if err != nil { - return fmt.Sprintf("%s's sealing key as recorded is not usable: %v", node, err) - } - named, err := askerKey(key) - if err != nil { - return err.Error() - } - if named != want { - return fmt.Sprintf("%s is sealed only to %s's sealing key as its node-engine stated it, and the key named "+ - "is another", name, node) - } - return "" -} diff --git a/modules/mesh-vault/cmd/mesh-vault/core_test.go b/modules/mesh-vault/cmd/mesh-vault/core_test.go index bbc6826e..5ea24183 100644 --- a/modules/mesh-vault/cmd/mesh-vault/core_test.go +++ b/modules/mesh-vault/cmd/mesh-vault/core_test.go @@ -20,7 +20,6 @@ import ( "testing" "time" - "git.novox.be/novox/mesh-sdk/go/seal" "github.com/nats-io/nats-server/v2/server" "github.com/nats-io/nats.go" ) @@ -205,74 +204,3 @@ authorization { type errString string func (e errString) Error() string { return string(e) } - -func TestOnARealBusTheControllerGetsACoreCredentialSealedOnlyToItsNodesKey(t *testing.T) { - ask, anchorPub, anchorPriv, heard := coreOnABus(t) - - got, err := ask("own/anchor/mesh-provisioner-client/provisioner-broker", pemOf(t, anchorPub)) - if err != nil { - t.Fatal(err) - } - if got.Name != "own/anchor/mesh-provisioner-client/provisioner-broker" || got.Generation != 1 { - t.Errorf("answered %+v", got) - } - opened, err := seal.Open(got.Sealed, anchorPriv) - if err != nil || opened != brokerValue { - t.Fatalf("anchor's key opens %q, %v", opened, err) - } - - // The controller's own key, or any key but anchor's, is refused: it carries the box and never opens it. - mine, err := seal.GenerateKeyPair() - if err != nil { - t.Fatal(err) - } - if got, err := ask("own/anchor/mesh-provisioner-client/provisioner-broker", mine.PublicKey); err == nil { - t.Errorf("the controller was handed anchor's core credential sealed to its own key: %+v", got) - } else if !strings.Contains(err.Error(), "sealing key") { - t.Errorf("refused for another reason: %v", err) - } - // A module that is not the core's is refused, though anchor's key is the one named. - if got, err := ask("own/anchor/postgres/superuser-password", pemOf(t, anchorPub)); err == nil { - t.Errorf("the controller was handed a leaf module's secret: %+v", got) - } else if !strings.Contains(err.Error(), "core") { - t.Errorf("refused for another reason: %v", err) - } - // A machine whose engine stated no key: nothing to seal to, so nothing is handed. - laptopPub, _ := aSealingKey(t) - if _, err := ask("own/laptop/nats/broker", pemOf(t, laptopPub)); err == nil { - t.Error("the controller was handed a core credential for a machine whose engine stated no key") - } - - all := heard() - if !strings.Contains(all, "mesh.seat.mesh-vault.call.get.controller") { - t.Fatalf("the listener heard nothing of the asks:\n%s", all) - } - for _, v := range []string{brokerValue, movedValue} { - for _, form := range []string{v, base64.StdEncoding.EncodeToString([]byte(v))} { - if strings.Contains(all, form) { - t.Fatal("a value crossed the bus in the clear") - } - } - } -} - -// Only the controller is answered by this rule: a machine's client asking for a core credential, which no plan -// names, is still refused by the running rule, and a node-engine is not an asker. -func TestTheCoreRuleAnswersTheControllerAlone(t *testing.T) { - v := newVault(t, Declared{Read: assignments{}.read}) - pub, _ := aSealingKey(t) - if _, err := moveIn(t, v, "node.anchor", clientsBroker(pub), brokerValue); err != nil { - t.Fatal(err) - } - for _, caller := range []string{"provisioner.anchor", "node.anchor", "anchor.mesh-provisioner-client"} { - if _, err := v.Get(caller, "own/anchor/mesh-provisioner-client/provisioner-broker", pemOf(t, pub)); err == nil { - t.Errorf("%s was handed a core credential", caller) - } - } - // The controller is answered for nothing else: not a pair credential, not a provision's. - for _, name := range []string{"pair/anchor/postgres/anchor/gitea", "provision/anchor/postgres"} { - if _, err := v.Get(ControllerCaller, name, pemOf(t, pub)); err == nil { - t.Errorf("the controller was handed %s", name) - } - } -} diff --git a/modules/mesh-vault/cmd/mesh-vault/intake.go b/modules/mesh-vault/cmd/mesh-vault/intake.go index 9e76e0b6..f37d4378 100644 --- a/modules/mesh-vault/cmd/mesh-vault/intake.go +++ b/modules/mesh-vault/cmd/mesh-vault/intake.go @@ -86,8 +86,6 @@ func ProvisionSecret(provider, provision string) (string, error) { // callKey is one call's key and what the call takes in. Never written anywhere. type callKey struct { verb, secret, by string - // origin is what an `accept` call keeps the value as: accepted, or issued for a covered account (issue 787). - origin string // ask is the ask's record for `secret-ask`, which the call's id is. ask *AskRecord // move is what `move-in` takes: the row of the controller's store (move.go). @@ -107,19 +105,6 @@ type Opened struct { AskedBy string `json:"asked_by,omitempty"` } -// fromTheController refuses every caller but the controller: only it asks the vault to take a value in, and only -// it carries a value given at its terminal. -func fromTheController(caller, verb string) error { - if caller != ControllerCaller { - if caller == "" { - caller = stdio.Unproven - } - return fmt.Errorf("%s takes a value from the controller alone, which carries it sealed to this vault's key "+ - "for one call; %s is not the controller", verb, caller) - } - return nil -} - // fromAGrantedCaller refuses a caller the runtime did not prove: `rotate` and `issued` answer every caller whose // manifest invokes them, which the bus grants it (novox/hq ADR 0570, Consequences), no longer the controller alone. func fromAGrantedCaller(caller, verb string) error { @@ -258,80 +243,6 @@ func NamedAccount(secret string) bool { return len(parts) == 4 && parts[0] == "own" && (parts[3] == "broker" || parts[3] == "provisioner-broker") } -// AcceptOpen opens a call to take a value given at the controller's terminal for secret, which the terminal -// seals to the call's key before it leaves it (ADR 0349 clause 8: the vault alone opens an accepted value). -// -// **With origin issued it is a covered account the controller minted** (ADR 0374, issue 787): the controller alone -// hands it, for a covered secret alone, and a re-issue replaces the value in place. Without origin it is a value -// given at the terminal, as before. -func (v *Vault) AcceptOpen(caller, secret, by, origin string) (Opened, error) { - if err := fromTheController(caller, "accept"); err != nil { - return Opened{}, err - } - if err := validName(secret); err != nil { - return Opened{}, err - } - kept := OriginAccepted - switch origin { - case "": - if rec, held, err := v.Store.Read(secret); err != nil { - return Opened{}, err - } else if held && rec.Origin == OriginIssued && !Covered(secret) { - return Opened{}, fmt.Errorf("%s is issued by its provider's software, and `secret issued` is the only way "+ - "it enters the vault (ADR 0305 §10); nothing is taken", secret) - } - case OriginIssued: - if !Covered(secret) { - return Opened{}, fmt.Errorf("%s is not a bus account the controller mints for a core or moved module "+ - "(%s), so it is not handed with origin issued; nothing is taken", secret, strings.Join(CoveredSecrets, ", ")) - } - kept = OriginIssued - default: - return Opened{}, fmt.Errorf("the origin %q is not one accept takes (issued, or none for a value given at the "+ - "terminal); nothing is taken", origin) - } - id, key, err := v.openCall("accept", secret, by, nil) - if err != nil { - return Opened{}, err - } - v.callsMu.Lock() - if c := v.pending[id]; c != nil { - c.origin = kept - } - v.callsMu.Unlock() - return Opened{Call: id, SealTo: key, Secret: secret}, nil -} - -// AcceptTake opens the value sealed to the call's key and keeps it, accepted: never remade by the vault. -func (v *Vault) AcceptTake(caller, call, sealed string) (Changed, error) { - if err := fromTheController(caller, "accept"); err != nil { - return Changed{}, err - } - c, err := v.takeCall("accept", call) - if err != nil { - return Changed{}, err - } - value, err := c.open(sealed) - if err != nil { - return Changed{}, err - } - defer zero(value) - if strings.TrimSpace(string(value)) == "" { - return Changed{}, errors.New("the value given is empty; nothing was taken") - } - origin := c.origin - if origin == "" { - origin = OriginAccepted - } - if origin == OriginIssued { - // **The vault's mint wins** (issue 774): during the delivery a controller older than the hand-over may still mint - // a covered account and hand it here; it never replaces an account the vault minted, judged under the store's - // lock, so the value and the hash the bus loaded stay the vault's. - return v.keepWith(c.secret, string(value), someoneOr(c.by, caller), caller, origin, keepOptions{refuse: v.vaultMinted}) - } - return v.keep(c.secret, string(value), someoneOr(c.by, caller), caller, origin) -} - // vaultMinted refuses a value handed for a secret holding an account the vault minted itself (mint.go): one is never // replaced but by the vault's own rotation. func (v *Vault) vaultMinted(before Record) string { @@ -351,26 +262,19 @@ func (v *Vault) vaultMinted(before Record) string { // AskOf is what an ask is for, and where. type AskOf struct { Node, Module, Name, Desk string - // AskedBy is who asked the controller, as the bus named its caller; the controller's word, taken from the - // controller alone. A caller asking directly is named by the runtime's proof, never by this (ADR 0563 §8). - AskedBy string } -// askedByFor is who asked a secret-ask as the bus says it (novox/hq ADR 0563 §8): for a call relayed by the controller, -// the caller the bus named to the controller, which it takes from the controller alone, as before; for a caller the -// manifest names, that caller as the runtime proved it. Any other caller is refused: no caller names itself. +// askedByFor is who asked a secret-ask as the bus says it (novox/hq ADR 0563 §8): a caller the manifest names, as the +// runtime proved it. Any other caller is refused: no caller names itself, and none relays another's word. func (v *Vault) askedByFor(caller string, a AskOf) (string, error) { - switch { - case caller == ControllerCaller: - return askedByName(a.AskedBy), nil - case v.AskCallers.Allows(caller): + if v.AskCallers.Allows(caller) { return askedByName(caller), nil } if caller == "" { caller = stdio.Unproven } - return "", fmt.Errorf("secret-ask answers the controller and the callers the vault's manifest names, and %s is "+ - "neither; nobody was asked to type anything", caller) + return "", fmt.Errorf("secret-ask answers the callers the vault's manifest names, and %s is not one; nobody was "+ + "asked to type anything", caller) } // AskOpen records an ask for a module's own secret before any prompt opens, holding its bounds — one open ask @@ -787,9 +691,7 @@ func (v *Vault) RotateFor(caller, secret string, one Narrow, by, why string) (Ch if err := fromAGrantedCaller(caller, "rotate"); err != nil { return Changed{}, err } - if caller != ControllerCaller { - by = "" // only the controller relays who asked at its terminal; any other caller is who asked - } + by = "" // who asked is the caller the runtime proved: no caller relays another's word (novox/hq ADR 0590) if strings.TrimSpace(why) == "" { return Changed{}, errors.New("not rotated: a rotation says why it was asked (`why`)") } diff --git a/modules/mesh-vault/cmd/mesh-vault/intake_test.go b/modules/mesh-vault/cmd/mesh-vault/intake_test.go index 6f25174d..610b84d0 100644 --- a/modules/mesh-vault/cmd/mesh-vault/intake_test.go +++ b/modules/mesh-vault/cmd/mesh-vault/intake_test.go @@ -75,7 +75,7 @@ func everything(t *testing.T, v testVault, more ...any) string { const typedAtTheDesk = "123456789:AAEhBP0av28P4XFQnIuR-o-7Xnz1kkUzW3g" func telegramAsk(by string) AskOf { - return AskOf{Node: "anchor", Module: "telegram", Name: "telegram-token", Desk: "laptop", AskedBy: by} + return AskOf{Node: "anchor", Module: "telegram", Name: "telegram-token", Desk: "laptop"} } // ---- the vault's secret-ask test (ADR 0349 "How it is checked") --------------------------------------------- @@ -84,33 +84,34 @@ func telegramAsk(by string) AskOf { // it; the typed value opens only in the vault; the controller carries ciphertext only. func TestAnAskIsRecordedBeforeThePromptAndTheTypedValueOpensOnlyInTheVault(t *testing.T) { v := newVault(t, AllowList{"anchor.node-provisioner": {"own/anchor/telegram/telegram-token"}}) - opened, err := v.AskOpen(ControllerCaller, telegramAsk("g14/claude-code, via the console")) + v.AskCallers = stdio.Callers{"g14.claude-code"} + opened, err := v.AskOpen("g14.claude-code", telegramAsk("g14/claude-code, via the console")) if err != nil { t.Fatal(err) } // Recorded before any prompt opens: the record holds the ask now, with no end. asks, _ := v.Store.Asks(10) - if len(asks) != 1 || asks[0].Event != AskOpened || asks[0].ID != opened.Call || asks[0].AskedBy != "g14/claude-code" || - asks[0].Caller != ControllerCaller || asks[0].Desk != "laptop" || asks[0].Secret != "own/anchor/telegram/telegram-token" { + if len(asks) != 1 || asks[0].Event != AskOpened || asks[0].ID != opened.Call || asks[0].AskedBy != "g14.claude-code" || + asks[0].Caller != "g14.claude-code" || asks[0].Desk != "laptop" || asks[0].Secret != "own/anchor/telegram/telegram-token" { t.Fatalf("the record before the prompt: %+v", asks) } // The prompt names the asker as the bus named it, cut to a name: what the vault answers is what it recorded. - if opened.AskedBy != "g14/claude-code" { + if opened.AskedBy != "g14.claude-code" { t.Errorf("the prompt would name %q", opened.AskedBy) } // The desk seals what is typed to the call's key; the controller passes it on. - changed, err := v.AskEnd(ControllerCaller, opened.Call, sealToCall(t, opened.SealTo, typedAtTheDesk+"\n"), "") + changed, err := v.AskEnd("g14.claude-code", opened.Call, sealToCall(t, opened.SealTo, typedAtTheDesk+"\n"), "") if err != nil { t.Fatal(err) } - if changed.Generation != 1 || changed.By != "g14/claude-code" { + if changed.Generation != 1 || changed.By != "g14.claude-code" { t.Errorf("kept as %+v", changed) } if got := handedTo(t, v, "anchor.node-provisioner", "own/anchor/telegram/telegram-token"); got != typedAtTheDesk { t.Errorf("the vault holds %q, not what was typed with its line ending taken off", got) } rec, _, _ := v.Store.Read("own/anchor/telegram/telegram-token") - if rec.Origin != OriginTyped || rec.ChangedBy != "g14/claude-code" || rec.ChangedVia != ControllerCaller { + if rec.Origin != OriginTyped || rec.ChangedBy != "g14.claude-code" || rec.ChangedVia != "" { t.Errorf("the record says origin %q, by %q, via %q", rec.Origin, rec.ChangedBy, rec.ChangedVia) } asks, _ = v.Store.Asks(10) @@ -125,33 +126,34 @@ func TestAnAskIsRecordedBeforeThePromptAndTheTypedValueOpensOnlyInTheVault(t *te // One open ask per secret, and three an hour (ADR 0277 §24), read from the vault's own record. func TestAnAskIsBoundedToOneOpenPerSecretAndThreeAnHour(t *testing.T) { v := newVault(t, nil) - first, err := v.AskOpen(ControllerCaller, telegramAsk("g14.claude-code")) + v.AskCallers = stdio.Callers{"g14.claude-code"} + first, err := v.AskOpen("g14.claude-code", telegramAsk("g14.claude-code")) if err != nil { t.Fatal(err) } - if _, err := v.AskOpen(ControllerCaller, telegramAsk("ace.claude-code")); err == nil || + if _, err := v.AskOpen("g14.claude-code", telegramAsk("ace.claude-code")); err == nil || !strings.Contains(err.Error(), "still open (asked by g14.claude-code)") { t.Fatalf("a second ask while one is open: %v", err) } // Another secret is not held back by it. other := telegramAsk("ace.claude-code") other.Name = "webhook-secret" - if _, err := v.AskOpen(ControllerCaller, other); err != nil { + if _, err := v.AskOpen("g14.claude-code", other); err != nil { t.Fatalf("another secret's ask was held back: %v", err) } - if _, err := v.AskEnd(ControllerCaller, first.Call, "", "dismissed"); err != nil { + if _, err := v.AskEnd("g14.claude-code", first.Call, "", "dismissed"); err != nil { t.Fatal(err) } for i := 0; i < 2; i++ { - o, err := v.AskOpen(ControllerCaller, telegramAsk("g14.claude-code")) + o, err := v.AskOpen("g14.claude-code", telegramAsk("g14.claude-code")) if err != nil { t.Fatalf("ask %d of the hour: %v", i+2, err) } - if _, err := v.AskEnd(ControllerCaller, o.Call, "", "timed-out"); err != nil { + if _, err := v.AskEnd("g14.claude-code", o.Call, "", "timed-out"); err != nil { t.Fatal(err) } } - if _, err := v.AskOpen(ControllerCaller, telegramAsk("g14.claude-code")); err == nil || + if _, err := v.AskOpen("g14.claude-code", telegramAsk("g14.claude-code")); err == nil || !strings.Contains(err.Error(), "3 times in the last hour") { t.Fatalf("a fourth ask in the hour: %v", err) } @@ -165,13 +167,14 @@ func TestAnAskIsBoundedToOneOpenPerSecretAndThreeAnHour(t *testing.T) { } // An ask left open counts as open for SecretAskOpenFor only: a prompt that died does not hold the secret. w := newVault(t, nil) + w.AskCallers = stdio.Callers{"g14.claude-code"} clock := time.Date(2026, 10, 14, 9, 0, 0, 0, time.UTC) w.Now = func() time.Time { return clock } - if _, err := w.AskOpen(ControllerCaller, telegramAsk("g14.claude-code")); err != nil { + if _, err := w.AskOpen("g14.claude-code", telegramAsk("g14.claude-code")); err != nil { t.Fatal(err) } clock = clock.Add(SecretAskOpenFor + time.Second) - if _, err := w.AskOpen(ControllerCaller, telegramAsk("g14.claude-code")); err != nil { + if _, err := w.AskOpen("g14.claude-code", telegramAsk("g14.claude-code")); err != nil { t.Errorf("an ask left open past its time still held the secret: %v", err) } // 774 (ADR 0563 §8): a caller the manifest names asks directly, is named by its proven caller and never by the @@ -186,7 +189,7 @@ func TestAnAskIsBoundedToOneOpenPerSecretAndThreeAnHour(t *testing.T) { if err != nil || opened.AskedBy != "g14.node-tools" { t.Fatalf("a named caller's ask: %+v, %v", opened, err) } - if _, err := x.AskEnd(ControllerCaller, opened.Call, "", "dismissed"); err == nil { + if _, err := x.AskEnd("g14.claude-code", opened.Call, "", "dismissed"); err == nil { t.Error("another caller ended a named caller's ask") } if _, err := x.AskOpen("ace.node-tools", telegramAsk("")); err == nil || !strings.Contains(err.Error(), "still open (asked by g14.node-tools)") { @@ -199,10 +202,11 @@ func TestAnAskIsBoundedToOneOpenPerSecretAndThreeAnHour(t *testing.T) { }) } -// Only the controller reaches a desk's prompt, so only it opens and ends an ask; a value not sealed to the -// call's key, or a call that waited too long, keeps nothing. -func TestAnAskIsTakenFromTheControllerAloneAndOnlySealedToItsCall(t *testing.T) { +// Only a caller the vault's manifest names opens an ask, and only it ends it; a value not sealed to the call's key, or +// a call that waited too long, keeps nothing. +func TestAnAskIsTakenFromANamedCallerAloneAndOnlySealedToItsCall(t *testing.T) { v := newVault(t, nil) + v.AskCallers = stdio.Callers{"g14.claude-code"} for _, caller := range []string{"g14.node-tools", "unproven", "", "person.jochen"} { if _, err := v.AskOpen(caller, telegramAsk("x")); err == nil { t.Errorf("%q opened an ask", caller) @@ -211,7 +215,7 @@ func TestAnAskIsTakenFromTheControllerAloneAndOnlySealedToItsCall(t *testing.T) if asks, _ := v.Store.Asks(10); len(asks) != 0 { t.Fatalf("a refused caller filled the record: %+v", asks) } - opened, err := v.AskOpen(ControllerCaller, telegramAsk("g14.claude-code")) + opened, err := v.AskOpen("g14.claude-code", telegramAsk("g14.claude-code")) if err != nil { t.Fatal(err) } @@ -219,7 +223,7 @@ func TestAnAskIsTakenFromTheControllerAloneAndOnlySealedToItsCall(t *testing.T) t.Error("another caller ended the ask") } other, _, _ := box.GenerateKey(rand.Reader) - if _, err := v.AskEnd(ControllerCaller, opened.Call, sealToCall(t, base64.StdEncoding.EncodeToString(other[:]), "x"), ""); err == nil || + if _, err := v.AskEnd("g14.claude-code", opened.Call, sealToCall(t, base64.StdEncoding.EncodeToString(other[:]), "x"), ""); err == nil || !strings.Contains(err.Error(), "not sealed to this call") { t.Errorf("a value sealed to another key: %v", err) } @@ -227,7 +231,7 @@ func TestAnAskIsTakenFromTheControllerAloneAndOnlySealedToItsCall(t *testing.T) t.Error("a value not sealed to the call was kept") } // The call's key is forgotten once used: the same call cannot be answered twice. - if _, err := v.AskEnd(ControllerCaller, opened.Call, sealToCall(t, opened.SealTo, "x"), ""); err == nil { + if _, err := v.AskEnd("g14.claude-code", opened.Call, sealToCall(t, opened.SealTo, "x"), ""); err == nil { t.Error("a call was answered twice") } asks, _ := v.Store.Asks(1) @@ -237,18 +241,18 @@ func TestAnAskIsTakenFromTheControllerAloneAndOnlySealedToItsCall(t *testing.T) // A call that waited longer than its time is closed. clock := time.Date(2026, 10, 14, 9, 0, 0, 0, time.UTC) v.Now = func() time.Time { return clock } - late, err := v.IssuedOpen(ControllerCaller, "plex-api", "anchor", "plex") + late, err := v.IssuedOpen("g14.claude-code", "plex-api", "anchor", "plex") if err != nil { t.Fatal(err) } clock = clock.Add(CallOpenFor + time.Second) - if _, err := v.IssuedTake(ControllerCaller, late.Call, sealToCall(t, late.SealTo, "x")); err == nil { + if _, err := v.IssuedTake("g14.claude-code", late.Call, sealToCall(t, late.SealTo, "x")); err == nil { t.Error("a call that waited too long was taken") } // An empty answer gives nothing and says so. clock = clock.Add(time.Hour) - empty, _ := v.AskOpen(ControllerCaller, telegramAsk("g14.claude-code")) - if _, err := v.AskEnd(ControllerCaller, empty.Call, sealToCall(t, empty.SealTo, " \n"), ""); err == nil { + empty, _ := v.AskOpen("g14.claude-code", telegramAsk("g14.claude-code")) + if _, err := v.AskEnd("g14.claude-code", empty.Call, sealToCall(t, empty.SealTo, " \n"), ""); err == nil { t.Error("an empty answer was kept") } if asks, _ := v.Store.Asks(1); asks[0].Outcome != "empty" { @@ -365,62 +369,14 @@ func TestAnIssuingProviderAnswersOnlyTheVaultsCallSealedToTheVault(t *testing.T) !strings.Contains(err.Error(), "software") { t.Errorf("rotate of an issued value: %v", err) } - if _, err := v.AcceptOpen(ControllerCaller, "provision/anchor/plex-api", "person.jochen", ""); err == nil { - t.Error("an issued value was taken by accept") - } if strings.Contains(everything(t, v), "plex-token") { t.Fatal("the issued value is in something the vault said or wrote in the clear") } } -// ---- accept and rotate ------------------------------------------------------------------------------------- - -// A value given at the controller's terminal is sealed there to the vault's call and opened here alone; an -// accepted provision's credential is never remade; a module's own given value rotates as a made one (ADR 0228). -func TestAnAcceptedValueOpensInTheVaultAloneAndIsNotRemade(t *testing.T) { - v := newVault(t, AllowList{"g14.node-provisioner": {"provision/novox/postgres", "own/g14/dunst/token"}}) - if _, err := v.AcceptOpen("g14.claude-code", "provision/novox/postgres", "", ""); err == nil { - t.Error("accept was opened for a caller that is not the controller") - } - for name, value := range map[string]string{"provision/novox/postgres": "pw-of-last-year", "own/g14/dunst/token": "tok"} { - opened, err := v.AcceptOpen(ControllerCaller, name, "jochen", "") - if err != nil { - t.Fatal(err) - } - changed, err := v.AcceptTake(ControllerCaller, opened.Call, sealToCall(t, opened.SealTo, value)) - if err != nil { - t.Fatal(err) - } - if changed.By != "jochen" { - t.Errorf("%s accepted by %q", name, changed.By) - } - if got := handedTo(t, v, "g14.node-provisioner", name); got != value { - t.Errorf("%s holds %q", name, got) - } - rec, _, _ := v.Store.Read(name) - if rec.Origin != OriginAccepted || rec.ChangedVia != ControllerCaller { - t.Errorf("%s: origin %q via %q", name, rec.Origin, rec.ChangedVia) - } - } - if _, err := v.Rotate(ControllerCaller, "provision/novox/postgres", "jochen", "leaked"); err == nil || - !strings.Contains(err.Error(), "not remade") { - t.Errorf("rotate of an accepted credential: %v", err) - } - rotated, err := v.Rotate(ControllerCaller, "own/g14/dunst/token", "jochen", "leaked") - if err != nil || rotated.Generation != 2 { - t.Fatalf("rotate of a module's own given value: %+v %v", rotated, err) - } - if got := handedTo(t, v, "g14.node-provisioner", "own/g14/dunst/token"); got == "tok" || len(got) != 40 { - t.Errorf("rotated to %q", got) - } - if strings.Contains(everything(t, v), "pw-of-last-year") { - t.Fatal("an accepted value is in something the vault said or wrote in the clear") - } -} - // Rotate: refused for a secret not held and for an unproven caller; who asked is the proven caller, or the // person the controller names when it carries the act — both kept. -func TestRotateKeepsWhoAskedAndWhoCarriedIt(t *testing.T) { +func TestRotateKeepsTheProvenCallerAsWhoAsked(t *testing.T) { v := newVault(t, nil) if _, err := v.Rotate(ControllerCaller, "own/g14/dunst/token", "jochen", "leaked"); err == nil { t.Error("a secret not held was rotated") @@ -431,11 +387,12 @@ func TestRotateKeepsWhoAskedAndWhoCarriedIt(t *testing.T) { if _, err := v.Rotate("unproven", "own/g14/dunst/token", "", "leaked"); err == nil { t.Error("an unproven caller rotated") } - if _, err := v.Rotate(ControllerCaller, "own/g14/dunst/token", "jochen", "leaked"); err != nil { + // A `by` is a word, never who asked: who asked is the caller the runtime proved (no caller relays another's, ADR 0590). + if _, err := v.Rotate("person.jochen", "own/g14/dunst/token", "someone else", "leaked"); err != nil { t.Fatal(err) } rec, _, _ := v.Store.Read("own/g14/dunst/token") - if rec.ChangedBy != "jochen" || rec.ChangedVia != ControllerCaller || rec.Generation != 2 { + if rec.ChangedBy != "person.jochen" || rec.ChangedVia != "" || rec.Generation != 2 { t.Errorf("by %q via %q generation %d", rec.ChangedBy, rec.ChangedVia, rec.Generation) } } @@ -491,6 +448,7 @@ func TestTheNamesOfWhatIsTakenIn(t *testing.T) { // Each verb takes its caller from the runtime, never from its arguments, and names its secret one way only. func TestTheVerbsTakeTheirCallerFromTheRuntime(t *testing.T) { v := newVault(t, nil) + v.AskCallers = stdio.Callers{"g14.claude-code"} env := &Env{Vault: v.Vault} defs := definitions(env) var asked []map[string]any @@ -499,11 +457,11 @@ func TestTheVerbsTakeTheirCallerFromTheRuntime(t *testing.T) { "plex.plex_issued_credential@anchor": standInProvider(&software)}}).ask ask := toolNamed(t, defs, Seat+".secret-ask") args := map[string]any{"node": "anchor", "module": "telegram", "name": "telegram-token", "desk": "laptop", - "asked_by": "g14.claude-code", "caller": ControllerCaller} + "caller": "ace.claude-code"} if _, err := ask.Run(args); err == nil { t.Error("an ask opened for a caller named in the arguments") } - answer, err := ask.runAs(ControllerCaller, args) + answer, err := ask.runAs("g14.claude-code", args) if err != nil || answer.(Asked).Outcome != "given" || len(asked) != 1 { t.Fatalf("secret-ask: %+v %v", answer, err) } @@ -512,18 +470,6 @@ func TestTheVerbsTakeTheirCallerFromTheRuntime(t *testing.T) { t.Fatalf("secret_asks: %v %v", listed, err) } - accept := toolNamed(t, defs, Seat+".accept") - if _, err := accept.runAs(ControllerCaller, map[string]any{"node": "g14", "provision": "postgres"}); err == nil { - t.Error("accept took a name both ways") - } - answer, err = accept.runAs(ControllerCaller, map[string]any{"provider": "novox", "provision": "postgres", "by": "jochen"}) - if err != nil { - t.Fatal(err) - } - o := answer.(Opened) - if _, err := accept.runAs(ControllerCaller, map[string]any{"call": o.Call, "sealed": sealToCall(t, o.SealTo, "pw")}); err != nil { - t.Fatal(err) - } rotate := toolNamed(t, defs, Seat+".rotate") if _, err := rotate.runAs("g14.claude-code", map[string]any{"node": "g14", "module": "dunst", "name": "token"}); err == nil { t.Error("a secret not held was rotated through the verb") @@ -547,7 +493,8 @@ func TestTheVerbsTakeTheirCallerFromTheRuntime(t *testing.T) { // With the lock held elsewhere, AskEnd waits, and writes nothing until it is let go. func TestTheEndOfAnAskIsWrittenUnderTheRecordsLock(t *testing.T) { v := newVault(t, nil) - opened, err := v.AskOpen(ControllerCaller, telegramAsk("g14.claude-code")) + v.AskCallers = stdio.Callers{"g14.claude-code"} + opened, err := v.AskOpen("g14.claude-code", telegramAsk("g14.claude-code")) if err != nil { t.Fatal(err) } @@ -562,7 +509,7 @@ func TestTheEndOfAnAskIsWrittenUnderTheRecordsLock(t *testing.T) { v.Store.asksMu.Lock() done := make(chan error, 1) go func() { - _, err := v.AskEnd(ControllerCaller, opened.Call, "", "dismissed") + _, err := v.AskEnd("g14.claude-code", opened.Call, "", "dismissed") done <- err }() select { diff --git a/modules/mesh-vault/cmd/mesh-vault/issued_account_test.go b/modules/mesh-vault/cmd/mesh-vault/issued_account_test.go index 41f600e5..3d49ba92 100644 --- a/modules/mesh-vault/cmd/mesh-vault/issued_account_test.go +++ b/modules/mesh-vault/cmd/mesh-vault/issued_account_test.go @@ -87,13 +87,11 @@ func eventsNamed(v testVault, from int, name string) int { // ADR 0374, issue 787): kept as that module's own secret on that machine, served to the controller's core get and to // the moved module's client, replaced in place on a re-issue with `secret-changed`, and never made anew by the vault. +// handIssued keeps a covered account as the controller's accept kept one with origin issued (accept went with the +// controller, ADR 0590): what the vault holds of it is served, hashed and never made anew. func handIssued(t *testing.T, v testVault, caller, secret, value string) (Changed, error) { t.Helper() - opened, err := v.AcceptOpen(caller, secret, "module issue", OriginIssued) - if err != nil { - return Changed{}, err - } - return v.AcceptTake(caller, opened.Call, sealToCall(t, opened.SealTo, value)) + return v.keepWith(secret, value, "module issue", caller, OriginIssued, keepOptions{refuse: v.vaultMinted}) } func TestAHandedBusAccountIsKeptServedReplacedAndNeverMadeByTheVault(t *testing.T) { @@ -142,19 +140,6 @@ func TestAHandedBusAccountIsKeptServedReplacedAndNeverMadeByTheVault(t *testing. t.Errorf("a refused rotation changed the value to %q", got) } - // A secret that is not a covered account is not handed with origin issued; and only the controller hands one. - if _, err := v.AcceptOpen(ControllerCaller, "own/g14/moved-bot/token", "x", OriginIssued); err == nil { - t.Error("origin issued was taken for a secret that is not a bus account") - } - if _, err := v.AcceptOpen(ControllerCaller, "provision/anchor/postgres", "x", OriginIssued); err == nil { - t.Error("origin issued was taken for a provision's credential") - } - if _, err := v.AcceptOpen("g14.moved-bot", moved, "x", OriginIssued); err == nil { - t.Error("a caller that is not the controller handed a covered account") - } - if _, err := v.AcceptOpen(ControllerCaller, moved, "x", "made"); err == nil { - t.Error("an origin accept does not take was taken") - } if strings.Contains(everything(t, v), "first-pw") || strings.Contains(everything(t, v), "second-pw") { t.Fatal("a handed account is in something the vault said or wrote in the clear") } diff --git a/modules/mesh-vault/cmd/mesh-vault/mint.go b/modules/mesh-vault/cmd/mesh-vault/mint.go index 414cf5bd..3b20a47e 100644 --- a/modules/mesh-vault/cmd/mesh-vault/mint.go +++ b/modules/mesh-vault/cmd/mesh-vault/mint.go @@ -372,9 +372,8 @@ func (v *Vault) IssueAccount(caller, user string) (any, error) { if user == "" { return nil, errors.New("issue-account names a bus user (`user`), e.g. ace.mesh-build-go") } - if nodeOrController(user) { - return nil, fmt.Errorf("%s is never minted by the vault: a node's account and the controller's keep the hash they "+ - "have (ADR 0561 §4)", user) + if nodeAccount(user) { + return nil, fmt.Errorf("%s is never minted by the vault: a node's account keeps the hash it has (ADR 0561 §4)", user) } raw, found, err := []byte(nil), false, error(nil) if v.WantRead != nil { @@ -417,7 +416,7 @@ func (v *Vault) wanted(user string) (buscompose.WantedAccount, bool) { return w, ok } -// nodeOrController says user is a node's account or the controller's: never minted here (ADR 0561 §4, §9). -func nodeOrController(user string) bool { - return user == ControllerCaller || strings.HasPrefix(user, "node.") +// nodeAccount says user is a node's account: never minted here (ADR 0561 §4, §9). +func nodeAccount(user string) bool { + return strings.HasPrefix(user, "node.") } diff --git a/modules/mesh-vault/cmd/mesh-vault/mint_test.go b/modules/mesh-vault/cmd/mesh-vault/mint_test.go index d1fc78b3..8ca556f6 100644 --- a/modules/mesh-vault/cmd/mesh-vault/mint_test.go +++ b/modules/mesh-vault/cmd/mesh-vault/mint_test.go @@ -161,8 +161,7 @@ func TestIssueAccountMintsOneWantedUserNowAndRefusesTheRest(t *testing.T) { return nil, false, nil } for user, says := range map[string]string{ - "node.ace": "never minted", - "controller": "never minted", + "node.ace": "never minted", } { if _, err := v.IssueAccount("person.jochen", user); err == nil || !strings.Contains(err.Error(), says) { t.Errorf("%s: %v, want a refusal saying %q", user, err, says) diff --git a/modules/mesh-vault/cmd/mesh-vault/owncalls_test.go b/modules/mesh-vault/cmd/mesh-vault/owncalls_test.go index 5629bc5d..74352692 100644 --- a/modules/mesh-vault/cmd/mesh-vault/owncalls_test.go +++ b/modules/mesh-vault/cmd/mesh-vault/owncalls_test.go @@ -10,6 +10,7 @@ import ( "encoding/base64" "encoding/json" "errors" + stdio "git.novox.be/novox/mesh-sdk/go" "strings" "sync" "testing" @@ -93,15 +94,16 @@ func aDesk(typed string, asked *[]map[string]any) func(string, map[string]any) ( // is typed opened here alone; what crossed is a key and a sealed box. func TestTheVaultAsksTheDesksPromptItselfAndOnlyASealedValueCrosses(t *testing.T) { v := newVault(t, AllowList{"anchor.node-provisioner": {"own/anchor/telegram/telegram-token"}}) + v.AskCallers = stdio.Callers{"g14.claude-code"} var asked []map[string]any mesh := &aMesh{desk: aDesk(typedAtTheDesk, &asked)} v.Ask = mesh.ask - got, err := v.AskAtDesk(ControllerCaller, telegramAsk("g14/claude-code, via the console")) + got, err := v.AskAtDesk("g14.claude-code", telegramAsk("g14/claude-code, via the console")) if err != nil { t.Fatal(err) } - if got.Outcome != "given" || got.Generation != 1 || got.AskedBy != "g14/claude-code" || + if got.Outcome != "given" || got.Generation != 1 || got.AskedBy != "g14.claude-code" || got.Secret != "own/anchor/telegram/telegram-token" { t.Errorf("answered %+v", got) } @@ -109,7 +111,7 @@ func TestTheVaultAsksTheDesksPromptItselfAndOnlyASealedValueCrosses(t *testing.T t.Fatalf("the vault asked %v", mesh.keys) } p := asked[0] - if p["asked_by"] != "g14/claude-code" || p["module"] != "telegram" || p["secret"] != "telegram-token" || + if p["asked_by"] != "g14.claude-code" || p["module"] != "telegram" || p["secret"] != "telegram-token" || p["node"] != "anchor" || p["seal_to"] == "" || p["timeout_seconds"] != float64(DeskPromptFor) { t.Errorf("the prompt was asked %v", p) } @@ -117,7 +119,7 @@ func TestTheVaultAsksTheDesksPromptItselfAndOnlyASealedValueCrosses(t *testing.T t.Errorf("the vault holds %q", v) } rec, _, _ := v.Store.Read("own/anchor/telegram/telegram-token") - if rec.Origin != OriginTyped || rec.ChangedBy != "g14/claude-code" || rec.ChangedVia != ControllerCaller { + if rec.Origin != OriginTyped || rec.ChangedBy != "g14.claude-code" || rec.ChangedVia != "" { t.Errorf("the record: origin %q by %q via %q", rec.Origin, rec.ChangedBy, rec.ChangedVia) } asks, _ := v.Store.Asks(10) @@ -131,9 +133,10 @@ func TestTheVaultAsksTheDesksPromptItselfAndOnlyASealedValueCrosses(t *testing.T // Dismissed and timed out end the ask so, and keep nothing. for typed, outcome := range map[string]string{"": "dismissed", "\x00timeout": "timed-out"} { w := newVault(t, nil) + w.AskCallers = stdio.Callers{"g14.claude-code"} var a []map[string]any w.Ask = (&aMesh{desk: aDesk(typed, &a)}).ask - got, err := w.AskAtDesk(ControllerCaller, telegramAsk("g14.claude-code")) + got, err := w.AskAtDesk("g14.claude-code", telegramAsk("g14.claude-code")) if err != nil || got.Outcome != outcome { t.Errorf("%s: %+v %v", outcome, got, err) } @@ -146,15 +149,17 @@ func TestTheVaultAsksTheDesksPromptItselfAndOnlyASealedValueCrosses(t *testing.T } // Answered empty: the operator's answer, said so, nothing kept. e := newVault(t, nil) + e.AskCallers = stdio.Callers{"g14.claude-code"} var ea []map[string]any e.Ask = (&aMesh{desk: aDesk(" ", &ea)}).ask - if got, err := e.AskAtDesk(ControllerCaller, telegramAsk("g14.claude-code")); err != nil || got.Outcome != "empty" { + if got, err := e.AskAtDesk("g14.claude-code", telegramAsk("g14.claude-code")); err != nil || got.Outcome != "empty" { t.Errorf("empty: %+v %v", got, err) } // The desk cannot be asked: refused, recorded so. r := newVault(t, nil) + r.AskCallers = stdio.Callers{"g14.claude-code"} r.Ask = (&aMesh{}).ask - if _, err := r.AskAtDesk(ControllerCaller, telegramAsk("g14.claude-code")); err == nil { + if _, err := r.AskAtDesk("g14.claude-code", telegramAsk("g14.claude-code")); err == nil { t.Error("an ask nobody answered was said to be done") } if asks, _ := r.Store.Asks(1); asks[0].Outcome != "refused" { diff --git a/modules/mesh-vault/cmd/mesh-vault/perholder_test.go b/modules/mesh-vault/cmd/mesh-vault/perholder_test.go index 440e8752..b739c84e 100644 --- a/modules/mesh-vault/cmd/mesh-vault/perholder_test.go +++ b/modules/mesh-vault/cmd/mesh-vault/perholder_test.go @@ -153,13 +153,10 @@ func TestAProviderIssuesAValueForEachHolderAndEachHolderGetsOnlyItsOwn(t *testin moved.Holders[1].Generation != 2 { t.Errorf("renewed: %+v %v", moved, err) } - // A holder's value is issued by the software: never rotated, never accepted. + // A holder's value is issued by the software: never rotated. if _, err := v.Rotate(ControllerCaller, laptopsToken, "jochen", "test"); err == nil { t.Error("a holder's issued value was rotated") } - if _, err := v.AcceptOpen(ControllerCaller, laptopsToken, "jochen", ""); err == nil { - t.Error("a holder's issued value was opened for accept") - } } // A holder the tool was not asked about, a holder twice, a value not sealed to the call, or an answer of both diff --git a/modules/mesh-vault/cmd/mesh-vault/rotation.go b/modules/mesh-vault/cmd/mesh-vault/rotation.go index 4322e626..d69d71a3 100644 --- a/modules/mesh-vault/cmd/mesh-vault/rotation.go +++ b/modules/mesh-vault/cmd/mesh-vault/rotation.go @@ -35,11 +35,11 @@ func (v *Vault) LoadedListHeard(revision uint64) { } // BeginRotation records a rotation of user's account at the loaded list's revision, under the one rule: none for a -// node's account or the controller's, none while minting is off, none of an account the vault did not make or was not +// node's account, none while minting is off, none of an account the vault did not make or was not // handed, none twice for one account, and none when another began at this revision. func (v *Vault) BeginRotation(user string) (Rotating, error) { - if nodeOrController(user) { - return Rotating{}, fmt.Errorf("%s does not rotate here: a node's account and the controller's keep the hash they have (ADR 0561 §4)", user) + if nodeAccount(user) { + return Rotating{}, fmt.Errorf("%s does not rotate here: a node's account keeps the hash it has (ADR 0561 §4)", user) } v.minting.mu.Lock() revision := v.minting.loadedRevision diff --git a/modules/mesh-vault/cmd/mesh-vault/sensitive.go b/modules/mesh-vault/cmd/mesh-vault/sensitive.go index 1bad865a..ef0d540b 100644 --- a/modules/mesh-vault/cmd/mesh-vault/sensitive.go +++ b/modules/mesh-vault/cmd/mesh-vault/sensitive.go @@ -62,7 +62,7 @@ func JudgeSensitive(read ActReader, now func() time.Time, caller, verb, act stri return fmt.Errorf("%s: the hand act %s was recorded by %s, not by %s who asks", verb, act, a.By, caller) case now().Sub(a.At) > HandActWithin: return fmt.Errorf("%s: the hand act %s is older than %s: record a new one", verb, act, HandActWithin) - case a.Verb != verb && !strings.HasSuffix(a.Verb, "."+verb): + case a.Verb != Seat+"."+verb: return fmt.Errorf("%s: the hand act %s is %q: it warrants no %s", verb, act, a.Verb, verb) } // mesh-hand-acts records one what; an act for several names lists them space-separated, so each word is a name. diff --git a/modules/mesh-vault/cmd/mesh-vault/sensitive_test.go b/modules/mesh-vault/cmd/mesh-vault/sensitive_test.go index 962dae66..e7b33417 100644 --- a/modules/mesh-vault/cmd/mesh-vault/sensitive_test.go +++ b/modules/mesh-vault/cmd/mesh-vault/sensitive_test.go @@ -13,9 +13,12 @@ func TestEachSensitiveVerbJudgesItsOwnCaller(t *testing.T) { now := time.Date(2026, 11, 2, 12, 0, 0, 0, time.UTC) acts := map[string]HandActSeen{ "mine": {ID: "mine", By: "novox.mesh-healers", At: now.Add(-time.Hour), Verb: "mesh-vault.rotate", Args: []string{"own/g14/app/key"}}, - "old": {ID: "old", By: "novox.mesh-healers", At: now.Add(-25 * time.Hour), Verb: "rotate", Args: []string{"own/g14/app/key"}}, - "other": {ID: "other", By: "novox.mesh-config", At: now.Add(-time.Hour), Verb: "rotate", Args: []string{"own/g14/app/key"}}, - "del": {ID: "del", By: "novox.mesh-healers", At: now.Add(-time.Hour), Verb: "provisioner_delete", Args: []string{"d-app"}}, + "old": {ID: "old", By: "novox.mesh-healers", At: now.Add(-25 * time.Hour), Verb: "mesh-vault.rotate", Args: []string{"own/g14/app/key"}}, + "other": {ID: "other", By: "novox.mesh-config", At: now.Add(-time.Hour), Verb: "mesh-vault.rotate", Args: []string{"own/g14/app/key"}}, + "del": {ID: "del", By: "novox.mesh-healers", At: now.Add(-time.Hour), Verb: "mesh-vault.provisioner_delete", Args: []string{"d-app"}}, + // Review 1: a verb of another seat or module that ends in the vault verb's name warrants nothing. + "alike": {ID: "alike", By: "novox.mesh-healers", At: now.Add(-time.Hour), Verb: "other-module.rotate", Args: []string{"own/g14/app/key"}}, + "bare": {ID: "bare", By: "novox.mesh-healers", At: now.Add(-time.Hour), Verb: "rotate", Args: []string{"own/g14/app/key"}}, // As mesh-hand-acts records nox's act: one what, the consumers space-separated (review 1 of issue 1126). "two": {ID: "two", By: "shanks.node-tools", At: now.Add(-time.Minute), Verb: "mesh-vault.provisioner_retire_approve", Args: []string{"c1 c2"}}, } @@ -43,6 +46,8 @@ func TestEachSensitiveVerbJudgesItsOwnCaller(t *testing.T) { {"an act too old", "novox.mesh-healers", SensitiveRotate, "old", []string{"own/g14/app/key"}, "older than"}, {"an act not recorded", "novox.mesh-healers", SensitiveDelete, "none", []string{"d-app"}, "holds no hand act"}, {"a delete's own act", "novox.mesh-healers", SensitiveDelete, "del", []string{"d-app"}, ""}, + {"an act of another seat's rotate", "novox.mesh-healers", SensitiveRotate, "alike", []string{"own/g14/app/key"}, "warrants no rotate"}, + {"an act naming the verb without its seat", "novox.mesh-healers", SensitiveRotate, "bare", []string{"own/g14/app/key"}, "warrants no rotate"}, {"one act for two consumers", "shanks.node-tools", SensitiveRetireApprove, "two", []string{"c1", "c2"}, ""}, {"one act naming two, asked for a third", "shanks.node-tools", SensitiveRetireApprove, "two", []string{"c1", "c3"}, "not c3"}, } { diff --git a/modules/mesh-vault/cmd/mesh-vault/tools.go b/modules/mesh-vault/cmd/mesh-vault/tools.go index ad9bb635..16dd07c5 100644 --- a/modules/mesh-vault/cmd/mesh-vault/tools.go +++ b/modules/mesh-vault/cmd/mesh-vault/tools.go @@ -93,36 +93,9 @@ func definitions(env *Env) []toolDef { key, _ := a["public_key"].(string) return env.Vault.Get(caller, strings.TrimSpace(name), key) }}, - {Name: Seat + ".accept", - Description: "Take a value given at the controller's terminal (ADR 0349 clause 8), in two steps from the " + - "controller alone: name the secret (node, module and name for a module's own; provider and provision " + - "for a provision's one credential) and get a call and a key made for it; then send the call and the " + - "value sealed to that key. The vault alone opens it, and never remakes an accepted credential. With " + - "origin issued it keeps a covered bus account the controller minted, replacing it in place.", - Input: intakeInput(map[string]string{"node": "the machine, for a module's own secret", - "module": "the module, for a module's own secret", "name": "the secret's name in the module", - "provider": "the provider's machine, for a provision's credential", "provision": "the provision", - "by": "who gave it at the terminal, as the controller names them", - "origin": "issued for a bus account the controller minted for a core or moved module and hands at " + - "once (ADR 0374, issue 787), kept as that module's own secret and replaced in place on a " + - "re-issue; left out for a value given at the terminal"}), - run: func(caller string, a map[string]any) (any, error) { - v, err := env.ready() - if err != nil { - return nil, err - } - if call := arg(a, "call"); call != "" { - return v.AcceptTake(caller, call, arg(a, "sealed")) - } - secret, err := secretNamed(a) - if err != nil { - return nil, err - } - return v.AcceptOpen(caller, secret, arg(a, "by"), arg(a, "origin")) - }}, {Name: Seat + ".secret-ask", Description: "Ask the operator for a module's own secret at a desk (ADR 0349 clause 9, ADR 0277 §22–§27), " + - "asked by the controller (naming asked_by) or by a caller the vault's manifest names, itself named by the " + + "asked by a caller the vault's manifest names, itself named by the " + "bus (ADR 0563 §8): node, module, name and desk. The ask is recorded before any " + "prompt opens — one open ask per secret and three an hour — and the vault asks the desk's prompt itself, " + "in its own name, with a key made for the call; what is typed opens in the vault alone. Answers how the " + @@ -130,15 +103,14 @@ func definitions(env *Env) []toolDef { "the value.", Input: map[string]any{"type": "object", "properties": map[string]any{ "node": str("the machine the secret is for"), "module": str("the module"), - "name": str("the secret's name in the module"), "desk": str("the machine whose prompt asks"), - "asked_by": str("from the controller alone: who asked it, as the bus named its caller")}}, + "name": str("the secret's name in the module"), "desk": str("the machine whose prompt asks")}}, run: func(caller string, a map[string]any) (any, error) { v, err := env.ready() if err != nil { return nil, err } return v.AskAtDesk(caller, AskOf{Node: arg(a, "node"), Module: arg(a, "module"), Name: arg(a, "name"), - Desk: arg(a, "desk"), AskedBy: arg(a, "asked_by")}) + Desk: arg(a, "desk")}) }}, {Name: Seat + ".issued", Description: "Take the credential a provider's software issued for a provision (ADR 0349 clause 10, ADR 0305), " + diff --git a/modules/mesh-vault/cmd/mesh-vault/vault.go b/modules/mesh-vault/cmd/mesh-vault/vault.go index 531e8349..7cd0b706 100644 --- a/modules/mesh-vault/cmd/mesh-vault/vault.go +++ b/modules/mesh-vault/cmd/mesh-vault/vault.go @@ -370,15 +370,8 @@ func (v *Vault) Get(caller, name, publicKey string) (Answer, error) { _ = v.recordHanding(Handing{To: caller, Name: name, Outcome: "refused", Why: why}) return Answer{}, fmt.Errorf("%s may not ask for %s: %s", caller, name, why) } - // The core's own credentials, to the controller alone, sealed only to their machine's key (ADR 0349 §16). if isLogin { // Judged above: the node's own engine, sealed to its own key. - } else if caller == ControllerCaller { - if why := v.coreRefusal(name, publicKey); why != "" { - v.log("refused %s to %s: %s", name, caller, why) - _ = v.recordHanding(Handing{To: caller, Name: name, Outcome: "refused", Why: why}) - return Answer{}, fmt.Errorf("%s may not ask for %s: %s", caller, name, why) - } } else if ok, why := askers.May(caller, name); !ok { if reason, notYet := strings.CutPrefix(why, notYetPrefix); notYet { // Not a refusal (issue 928): the client waits and asks again, and nothing is recorded against it. diff --git a/modules/mesh-vault/module.json b/modules/mesh-vault/module.json index 964ecdbd..72758138 100644 --- a/modules/mesh-vault/module.json +++ b/modules/mesh-vault/module.json @@ -198,7 +198,6 @@ "scope": "mesh", "serves": [ "get", - "accept", "secret-ask", "issued", "rotate", From fda81c129eeaa2c2f829cd75b662ca80b7f6432f Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 12:17:27 +0100 Subject: [PATCH 20/27] Key each provision with the plan entry it is composed from mesh-provisioner keys provisions from a consumer's wanted and newest builds but writes the wanted build's plan alone, so a requirement the newest build adds was never bound. Each key now carries its plan entry, and a key ahead of its want says in its why that no plan names it yet and its provider binds it from the entry (issue 1126 review 1). Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- .../cmd/mesh-provisioner/holder.go | 27 ++++++++++++++++--- .../cmd/mesh-provisioner/holder_test.go | 24 +++++++++++++++++ 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/modules/mesh-provisioner/cmd/mesh-provisioner/holder.go b/modules/mesh-provisioner/cmd/mesh-provisioner/holder.go index a15e1abc..c1ddc169 100644 --- a/modules/mesh-provisioner/cmd/mesh-provisioner/holder.go +++ b/modules/mesh-provisioner/cmd/mesh-provisioner/holder.go @@ -194,14 +194,20 @@ func (h *Holder) ComposeNode(ctx context.Context, node string) (out Composed, er lap("plans written") needed := map[string]provisions.Provision{} elsewhere := map[string]provisions.Provision{} + // ahead are the keys only the newest build of their consumer requires: the plan written, its wanted build's, names + // them not yet, and the provider binds them from the entry they carry (issue 1126). + ahead := map[string]string{} vaultNode := h.vaultNode() - for _, plans := range []map[string]catalogue.Plan{atWants, newest} { + for i, plans := range []map[string]catalogue.Plan{atWants, newest} { for module, plan := range plans { for _, p := range plan.Provisions { consumer := provisions.End{Module: module, Node: node} provider := provisions.End{Module: p.ProviderModule, Node: p.Provider} + // The key carries the plan entry it is composed from (issue 1126): the wanted build's where its plan names + // it, the newest's otherwise, so its provider binds it whichever plan the seat keeps. + entry := p pv := provisions.Provision{Provision: p.Provision, Local: p.Local, Consumer: consumer, Provider: provider, - DependsOn: provisions.DependsOn(consumer, p, h.providerPlan(p, node, atWants))} + DependsOn: provisions.DependsOn(consumer, p, h.providerPlan(p, node, atWants)), Plan: &entry} key, err := pv.Key() if err != nil { out.Problems = append(out.Problems, err.Error()) @@ -209,6 +215,9 @@ func (h *Holder) ComposeNode(ctx context.Context, node string) (out Composed, er } if _, seen := needed[key]; !seen { needed[key] = pv + if i == 1 { + ahead[key] = module + } } // Its credential is a provision of its own, the vault's (clause 6): on the consumer's node for a value of the // consumer's own, on the provider's for the provider's one shared value. @@ -237,7 +246,7 @@ func (h *Holder) ComposeNode(ctx context.Context, node string) (out Composed, er } } h.judgeElsewhere(elsewhere, &out) - h.judgeNode(node, needed, heldAtWants, &out) + h.judgeNode(node, needed, ahead, heldAtWants, &out) lap("provisions judged") return out, nil } @@ -468,7 +477,8 @@ func (h *Holder) writePlans(node string, plans map[string]catalogue.Plan, held m // judgeNode brings the node's provision keys to what is needed and what each provider said. A key of a module held on // the node (heldModules) that its composition no longer names is left as it is: not composed is not unneeded. -func (h *Holder) judgeNode(node string, needed map[string]provisions.Provision, heldModules map[string]string, out *Composed) { +func (h *Holder) judgeNode(node string, needed map[string]provisions.Provision, ahead map[string]string, + heldModules map[string]string, out *Composed) { held := h.held(node) for key, have := range held { if _, isNeeded := needed[key]; !isNeeded && have.Consumer.Node == node { @@ -497,6 +507,15 @@ func (h *Holder) judgeNode(node string, needed map[string]provisions.Provision, next.Reference = have.Reference } h.outcome(key, &next) + if module, isAhead := ahead[key]; isAhead && next.State == provisions.Asked { + // The reason the provider's helper says too: no plan names it yet, and it binds it from this key's entry. + why := "no plan names it yet: the newest build of " + module + " requires it and its wanted build does " + + "not, so its provider binds it from this key's plan entry" + if next.Why != "" { + why += "; " + next.Why + } + next.Why = why + } case have.State == provisions.Retiring: next = have if next.Ask == "" && next.Warrant == nil { diff --git a/modules/mesh-provisioner/cmd/mesh-provisioner/holder_test.go b/modules/mesh-provisioner/cmd/mesh-provisioner/holder_test.go index 31638dc1..30a7a8bc 100644 --- a/modules/mesh-provisioner/cmd/mesh-provisioner/holder_test.go +++ b/modules/mesh-provisioner/cmd/mesh-provisioner/holder_test.go @@ -540,3 +540,27 @@ func TestAProvidersOutcomeIsReadPerOffer(t *testing.T) { } } } + +// Issue 1126 review 1 (mcp-endpoint asked on ace and shanks, 2026-11-02 11:56): a requirement the consumer's newest build +// adds is keyed before its want, and the plan the seat keeps is its wanted build's, which names it not; the key carries +// the plan entry it was composed from, so the provider binds it, and its why says no plan names it yet. A key its +// wanted plan names carries that plan's entry. +func TestAKeyAheadOfItsWantCarriesItsPlanEntryAndSaysWhy(t *testing.T) { + m := newMesh() + m.atWant["g14"] = map[string]catalogue.Plan{"gitea": planOf(pgDB)} + ahead := oidc + ahead.As = "gitea-g14" + m.atNewest["g14"] = map[string]catalogue.Plan{"gitea": planOf(pgDB, ahead)} + m.compose(t, "g14") + kc := m.state(t, "g14.gitea.oidc-client") + if kc.Plan == nil || kc.Plan.Provision != "oidc-client" || kc.Plan.ProviderModule != "keycloak" || kc.Plan.As != "gitea-g14" { + t.Errorf("the key ahead of its want carries %+v", kc.Plan) + } + if kc.State != provisions.Asked || !strings.Contains(kc.Why, "no plan names it") { + t.Errorf("the key ahead of its want: %s %q", kc.State, kc.Why) + } + if pg := m.state(t, "g14.gitea.postgres-database"); pg.Plan == nil || pg.Plan.ProviderModule != "postgres" || + strings.Contains(pg.Why, "no plan names it") { + t.Errorf("the planned key: %+v", pg) + } +} From 9a3ead8fcd0e4dea55dd3d900da585087211dd6f Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 12:18:38 +0100 Subject: [PATCH 21/27] Carry the plan entry only on a key no plan names A reader on an older mesh-sdk refuses a provision field it does not know, so a key a plan names carries no entry: such readers skip only a key ahead of its consumer's want, which they could never bind (issue 1126 review 1). Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- .../mesh-provisioner/cmd/mesh-provisioner/holder.go | 12 +++++++----- .../cmd/mesh-provisioner/holder_test.go | 7 ++++--- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/modules/mesh-provisioner/cmd/mesh-provisioner/holder.go b/modules/mesh-provisioner/cmd/mesh-provisioner/holder.go index c1ddc169..fb00bf2b 100644 --- a/modules/mesh-provisioner/cmd/mesh-provisioner/holder.go +++ b/modules/mesh-provisioner/cmd/mesh-provisioner/holder.go @@ -203,21 +203,23 @@ func (h *Holder) ComposeNode(ctx context.Context, node string) (out Composed, er for _, p := range plan.Provisions { consumer := provisions.End{Module: module, Node: node} provider := provisions.End{Module: p.ProviderModule, Node: p.Provider} - // The key carries the plan entry it is composed from (issue 1126): the wanted build's where its plan names - // it, the newest's otherwise, so its provider binds it whichever plan the seat keeps. - entry := p pv := provisions.Provision{Provision: p.Provision, Local: p.Local, Consumer: consumer, Provider: provider, - DependsOn: provisions.DependsOn(consumer, p, h.providerPlan(p, node, atWants)), Plan: &entry} + DependsOn: provisions.DependsOn(consumer, p, h.providerPlan(p, node, atWants))} key, err := pv.Key() if err != nil { out.Problems = append(out.Problems, err.Error()) continue } if _, seen := needed[key]; !seen { - needed[key] = pv if i == 1 { + // A key no plan names carries the newest build's entry, so its provider binds it (issue 1126). Only + // it: a reader on an older mesh-sdk refuses a field it does not know, and skips then only a key it + // could never bind anyway. + entry := p + pv.Plan = &entry ahead[key] = module } + needed[key] = pv } // Its credential is a provision of its own, the vault's (clause 6): on the consumer's node for a value of the // consumer's own, on the provider's for the provider's one shared value. diff --git a/modules/mesh-provisioner/cmd/mesh-provisioner/holder_test.go b/modules/mesh-provisioner/cmd/mesh-provisioner/holder_test.go index 30a7a8bc..d737cc94 100644 --- a/modules/mesh-provisioner/cmd/mesh-provisioner/holder_test.go +++ b/modules/mesh-provisioner/cmd/mesh-provisioner/holder_test.go @@ -544,7 +544,7 @@ func TestAProvidersOutcomeIsReadPerOffer(t *testing.T) { // Issue 1126 review 1 (mcp-endpoint asked on ace and shanks, 2026-11-02 11:56): a requirement the consumer's newest build // adds is keyed before its want, and the plan the seat keeps is its wanted build's, which names it not; the key carries // the plan entry it was composed from, so the provider binds it, and its why says no plan names it yet. A key its -// wanted plan names carries that plan's entry. +// wanted plan names carries none. func TestAKeyAheadOfItsWantCarriesItsPlanEntryAndSaysWhy(t *testing.T) { m := newMesh() m.atWant["g14"] = map[string]catalogue.Plan{"gitea": planOf(pgDB)} @@ -559,8 +559,9 @@ func TestAKeyAheadOfItsWantCarriesItsPlanEntryAndSaysWhy(t *testing.T) { if kc.State != provisions.Asked || !strings.Contains(kc.Why, "no plan names it") { t.Errorf("the key ahead of its want: %s %q", kc.State, kc.Why) } - if pg := m.state(t, "g14.gitea.postgres-database"); pg.Plan == nil || pg.Plan.ProviderModule != "postgres" || - strings.Contains(pg.Why, "no plan names it") { + // A key a plan names carries no entry: a reader on an older mesh-sdk, which refused a field it did not know, reads it + // still, and skips only a key ahead of its want, which it could never bind (review 1). + if pg := m.state(t, "g14.gitea.postgres-database"); pg.Plan != nil || strings.Contains(pg.Why, "no plan names it") { t.Errorf("the planned key: %+v", pg) } } From 04379702e5466a380209c3936dacaaafce0993a0 Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 12:20:14 +0100 Subject: [PATCH 22/27] Pin mesh-sdk to the group head of issue 1126 Every member builds against mesh-sdk f569924, the head of feat/1126-removal, so the group is checked as one contract. Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- checks/credentialform/go.mod | 2 +- checks/credentialform/go.sum | 4 ++-- checks/health/go.mod | 2 +- checks/health/go.sum | 4 ++-- checks/manifests/go.mod | 2 +- checks/manifests/go.sum | 4 ++-- checks/readable/go.mod | 2 +- checks/readable/go.sum | 4 ++-- modules/adwaita/go.mod | 2 +- modules/adwaita/go.sum | 4 ++-- modules/artifact-store-tools/go.mod | 2 +- modules/artifact-store-tools/go.sum | 4 ++-- modules/asus-zephyrus-g14/go.mod | 2 +- modules/asus-zephyrus-g14/go.sum | 4 ++-- modules/avahi/go.mod | 2 +- modules/avahi/go.sum | 4 ++-- modules/blueman/go.mod | 2 +- modules/blueman/go.sum | 4 ++-- modules/bluetooth/go.mod | 2 +- modules/bluetooth/go.sum | 4 ++-- modules/brother/go.mod | 2 +- modules/brother/go.sum | 4 ++-- modules/claude-code/go.mod | 2 +- modules/claude-code/go.sum | 4 ++-- modules/claude-licence-manager/go.mod | 2 +- modules/claude-licence-manager/go.sum | 4 ++-- modules/clipmenu/go.mod | 2 +- modules/clipmenu/go.sum | 4 ++-- modules/cups/go.mod | 2 +- modules/cups/go.sum | 4 ++-- modules/dbus/go.mod | 2 +- modules/dbus/go.sum | 4 ++-- modules/desk-channel/go.mod | 2 +- modules/desk-channel/go.sum | 4 ++-- modules/disk-load/go.mod | 2 +- modules/disk-load/go.sum | 4 ++-- modules/dmenu/go.mod | 2 +- modules/dmenu/go.sum | 4 ++-- modules/dnsmasq/go.mod | 2 +- modules/dnsmasq/go.sum | 4 ++-- modules/docker-compose/go.mod | 2 +- modules/docker-compose/go.sum | 4 ++-- modules/docker/go.mod | 2 +- modules/docker/go.sum | 4 ++-- modules/dunst/go.mod | 2 +- modules/dunst/go.sum | 4 ++-- modules/fail2ban/go.mod | 2 +- modules/fail2ban/go.sum | 4 ++-- modules/feh/go.mod | 2 +- modules/feh/go.sum | 4 ++-- modules/flatpak/go.mod | 2 +- modules/flatpak/go.sum | 4 ++-- modules/fonts/go.mod | 2 +- modules/fonts/go.sum | 4 ++-- modules/forticlient/go.mod | 2 +- modules/forticlient/go.sum | 4 ++-- modules/gitea/go.mod | 2 +- modules/gitea/go.sum | 4 ++-- modules/gnome-keyring/go.mod | 2 +- modules/gnome-keyring/go.sum | 4 ++-- modules/hostname/go.mod | 2 +- modules/hostname/go.sum | 4 ++-- modules/i3/go.mod | 2 +- modules/i3/go.sum | 4 ++-- modules/i3status-rust/go.mod | 2 +- modules/i3status-rust/go.sum | 4 ++-- modules/kernel/go.mod | 2 +- modules/kernel/go.sum | 4 ++-- modules/keycloak/go.mod | 2 +- modules/keycloak/go.sum | 4 ++-- modules/lemurs/go.mod | 2 +- modules/lemurs/go.sum | 4 ++-- modules/localization/go.mod | 2 +- modules/localization/go.sum | 4 ++-- modules/logrotate/go.mod | 2 +- modules/logrotate/go.sum | 4 ++-- modules/memory-pressure/go.mod | 2 +- modules/memory-pressure/go.sum | 4 ++-- modules/mesh-build-go/go.mod | 2 +- modules/mesh-build-go/go.sum | 4 ++-- modules/mesh-build-image/go.mod | 2 +- modules/mesh-build-image/go.sum | 4 ++-- modules/mesh-build-node/go.mod | 2 +- modules/mesh-build-node/go.sum | 4 ++-- modules/mesh-conditions/go.mod | 2 +- modules/mesh-conditions/go.sum | 4 ++-- modules/mesh-config/go.mod | 2 +- modules/mesh-config/go.sum | 4 ++-- modules/mesh-delivery-gate/go.mod | 2 +- modules/mesh-delivery-gate/go.sum | 4 ++-- modules/mesh-files/go.mod | 2 +- modules/mesh-files/go.sum | 4 ++-- modules/mesh-hand-acts/go.mod | 2 +- modules/mesh-hand-acts/go.sum | 4 ++-- modules/mesh-healers/go.mod | 2 +- modules/mesh-healers/go.sum | 4 ++-- modules/mesh-issues/go.mod | 2 +- modules/mesh-issues/go.sum | 4 ++-- modules/mesh-knowledge/go.mod | 2 +- modules/mesh-knowledge/go.sum | 4 ++-- modules/mesh-mail-notifier/go.mod | 2 +- modules/mesh-mail-notifier/go.sum | 4 ++-- modules/mesh-mail-reader/go.mod | 2 +- modules/mesh-mail-reader/go.sum | 4 ++-- modules/mesh-mail-web/go.mod | 2 +- modules/mesh-mail-web/go.sum | 4 ++-- modules/mesh-mail/go.mod | 2 +- modules/mesh-mail/go.sum | 4 ++-- modules/mesh-provisioner-client/go.mod | 2 +- modules/mesh-provisioner-client/go.sum | 4 ++-- modules/mesh-provisioner/go.mod | 2 +- modules/mesh-provisioner/go.sum | 4 ++-- modules/mesh-reads/go.mod | 2 +- modules/mesh-reads/go.sum | 4 ++-- modules/mesh-self-check/go.mod | 2 +- modules/mesh-self-check/go.sum | 4 ++-- modules/mesh-vault/go.mod | 2 +- modules/mesh-vault/go.sum | 4 ++-- modules/mesh-watcher/go.mod | 2 +- modules/mesh-watcher/go.sum | 4 ++-- modules/messenger/go.mod | 2 +- modules/messenger/go.sum | 4 ++-- modules/minio/go.mod | 2 +- modules/minio/go.sum | 4 ++-- modules/mounts/go.mod | 2 +- modules/mounts/go.sum | 4 ++-- modules/nats/go.mod | 2 +- modules/nats/go.sum | 4 ++-- modules/netcheck/go.mod | 2 +- modules/netcheck/go.sum | 4 ++-- modules/networkmanager/go.mod | 2 +- modules/networkmanager/go.sum | 4 ++-- modules/nextcloud-client/go.mod | 2 +- modules/nextcloud-client/go.sum | 4 ++-- modules/nfs-server/go.mod | 2 +- modules/nfs-server/go.sum | 4 ++-- modules/nm-applet/go.mod | 2 +- modules/nm-applet/go.sum | 4 ++-- modules/only-office/go.mod | 2 +- modules/only-office/go.sum | 4 ++-- modules/openrazer/go.mod | 2 +- modules/openrazer/go.sum | 4 ++-- modules/pacman/go.mod | 2 +- modules/pacman/go.sum | 4 ++-- modules/picom/go.mod | 2 +- modules/picom/go.sum | 4 ++-- modules/polychromatic/go.mod | 2 +- modules/polychromatic/go.sum | 4 ++-- modules/postgres/go.mod | 2 +- modules/postgres/go.sum | 4 ++-- modules/power/go.mod | 2 +- modules/power/go.sum | 4 ++-- modules/records/go.mod | 2 +- modules/records/go.sum | 4 ++-- modules/restic/go.mod | 2 +- modules/restic/go.sum | 4 ++-- modules/rofi/go.mod | 2 +- modules/rofi/go.sum | 4 ++-- modules/route-adapter/go.mod | 2 +- modules/route-adapter/go.sum | 4 ++-- modules/screen-lock/go.mod | 2 +- modules/screen-lock/go.sum | 4 ++-- modules/sensors/go.mod | 2 +- modules/sensors/go.sum | 4 ++-- modules/slack/go.mod | 2 +- modules/slack/go.sum | 4 ++-- modules/snapd/go.mod | 2 +- modules/snapd/go.sum | 4 ++-- modules/ssh-client/go.mod | 2 +- modules/ssh-client/go.sum | 4 ++-- modules/sudo/go.mod | 2 +- modules/sudo/go.sum | 4 ++-- modules/systemd-networkd/go.mod | 2 +- modules/systemd-networkd/go.sum | 4 ++-- modules/systemd-resolved/go.mod | 2 +- modules/systemd-resolved/go.sum | 4 ++-- modules/systemd/go.mod | 2 +- modules/systemd/go.sum | 4 ++-- modules/telegram/go.mod | 2 +- modules/telegram/go.sum | 4 ++-- modules/time-sync/go.mod | 2 +- modules/time-sync/go.sum | 4 ++-- modules/triggerhappy/go.mod | 2 +- modules/triggerhappy/go.sum | 4 ++-- modules/xclip/go.mod | 2 +- modules/xclip/go.sum | 4 ++-- modules/xdg/go.mod | 2 +- modules/xdg/go.sum | 4 ++-- modules/xorg/go.mod | 2 +- modules/xorg/go.sum | 4 ++-- modules/xterm/go.mod | 2 +- modules/xterm/go.sum | 4 ++-- modules/zfs/go.mod | 2 +- modules/zfs/go.sum | 4 ++-- 194 files changed, 291 insertions(+), 291 deletions(-) diff --git a/checks/credentialform/go.mod b/checks/credentialform/go.mod index 970cce7b..102643b1 100644 --- a/checks/credentialform/go.mod +++ b/checks/credentialform/go.mod @@ -2,4 +2,4 @@ module checks/credentialform go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 diff --git a/checks/credentialform/go.sum b/checks/credentialform/go.sum index dc89057e..4604a84f 100644 --- a/checks/credentialform/go.sum +++ b/checks/credentialform/go.sum @@ -1,2 +1,2 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= diff --git a/checks/health/go.mod b/checks/health/go.mod index 2779ead5..5a4adff0 100644 --- a/checks/health/go.mod +++ b/checks/health/go.mod @@ -2,4 +2,4 @@ module checks/health go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 diff --git a/checks/health/go.sum b/checks/health/go.sum index dc89057e..4604a84f 100644 --- a/checks/health/go.sum +++ b/checks/health/go.sum @@ -1,2 +1,2 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= diff --git a/checks/manifests/go.mod b/checks/manifests/go.mod index 8912562c..19521716 100644 --- a/checks/manifests/go.mod +++ b/checks/manifests/go.mod @@ -2,4 +2,4 @@ module checks/manifests go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 diff --git a/checks/manifests/go.sum b/checks/manifests/go.sum index dc89057e..4604a84f 100644 --- a/checks/manifests/go.sum +++ b/checks/manifests/go.sum @@ -1,2 +1,2 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= diff --git a/checks/readable/go.mod b/checks/readable/go.mod index 6a33f315..30bfe52f 100644 --- a/checks/readable/go.mod +++ b/checks/readable/go.mod @@ -2,4 +2,4 @@ module checks/readable go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 diff --git a/checks/readable/go.sum b/checks/readable/go.sum index dc89057e..4604a84f 100644 --- a/checks/readable/go.sum +++ b/checks/readable/go.sum @@ -1,2 +1,2 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= diff --git a/modules/adwaita/go.mod b/modules/adwaita/go.mod index 2a4bcc37..231ef6d8 100644 --- a/modules/adwaita/go.mod +++ b/modules/adwaita/go.mod @@ -2,7 +2,7 @@ module adwaita go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/adwaita/go.sum b/modules/adwaita/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/adwaita/go.sum +++ b/modules/adwaita/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/artifact-store-tools/go.mod b/modules/artifact-store-tools/go.mod index c111f083..a92f4d27 100644 --- a/modules/artifact-store-tools/go.mod +++ b/modules/artifact-store-tools/go.mod @@ -3,7 +3,7 @@ module artifactstoretools go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/artifact-store-tools/go.sum b/modules/artifact-store-tools/go.sum index ea0f85a7..d37e5982 100644 --- a/modules/artifact-store-tools/go.sum +++ b/modules/artifact-store-tools/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/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/asus-zephyrus-g14/go.mod b/modules/asus-zephyrus-g14/go.mod index 7d068f81..cb4b173f 100644 --- a/modules/asus-zephyrus-g14/go.mod +++ b/modules/asus-zephyrus-g14/go.mod @@ -2,7 +2,7 @@ module asuszephyrusg14 go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/asus-zephyrus-g14/go.sum b/modules/asus-zephyrus-g14/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/asus-zephyrus-g14/go.sum +++ b/modules/asus-zephyrus-g14/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/avahi/go.mod b/modules/avahi/go.mod index 3c0f3fc2..f1c6061c 100644 --- a/modules/avahi/go.mod +++ b/modules/avahi/go.mod @@ -2,7 +2,7 @@ module avahi go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/avahi/go.sum b/modules/avahi/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/avahi/go.sum +++ b/modules/avahi/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/blueman/go.mod b/modules/blueman/go.mod index 05b9b8c1..e3afdce8 100644 --- a/modules/blueman/go.mod +++ b/modules/blueman/go.mod @@ -2,7 +2,7 @@ module blueman go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/blueman/go.sum b/modules/blueman/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/blueman/go.sum +++ b/modules/blueman/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/bluetooth/go.mod b/modules/bluetooth/go.mod index 1422b5d8..843647c6 100644 --- a/modules/bluetooth/go.mod +++ b/modules/bluetooth/go.mod @@ -2,7 +2,7 @@ module bluetooth go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/bluetooth/go.sum b/modules/bluetooth/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/bluetooth/go.sum +++ b/modules/bluetooth/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/brother/go.mod b/modules/brother/go.mod index 76d8cdd6..0cb6b28c 100644 --- a/modules/brother/go.mod +++ b/modules/brother/go.mod @@ -3,7 +3,7 @@ module brother go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/brother/go.sum b/modules/brother/go.sum index ea0f85a7..d37e5982 100644 --- a/modules/brother/go.sum +++ b/modules/brother/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/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/claude-code/go.mod b/modules/claude-code/go.mod index 1252bc5e..637d85ac 100644 --- a/modules/claude-code/go.mod +++ b/modules/claude-code/go.mod @@ -2,7 +2,7 @@ module claude-code go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require gopkg.in/yaml.v3 v3.0.1 diff --git a/modules/claude-code/go.sum b/modules/claude-code/go.sum index 2f2ce9ab..35067935 100644 --- a/modules/claude-code/go.sum +++ b/modules/claude-code/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/claude-licence-manager/go.mod b/modules/claude-licence-manager/go.mod index d3ec0dfb..a72818e2 100644 --- a/modules/claude-licence-manager/go.mod +++ b/modules/claude-licence-manager/go.mod @@ -3,7 +3,7 @@ module claude-licence-manager go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/jackc/pgx/v5 v5.11.0 ) diff --git a/modules/claude-licence-manager/go.sum b/modules/claude-licence-manager/go.sum index 822d6592..30f9ac33 100644 --- a/modules/claude-licence-manager/go.sum +++ b/modules/claude-licence-manager/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/modules/clipmenu/go.mod b/modules/clipmenu/go.mod index 099743b0..2828c29a 100644 --- a/modules/clipmenu/go.mod +++ b/modules/clipmenu/go.mod @@ -2,7 +2,7 @@ module clipmenu go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/clipmenu/go.sum b/modules/clipmenu/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/clipmenu/go.sum +++ b/modules/clipmenu/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/cups/go.mod b/modules/cups/go.mod index de1917bb..3eef284d 100644 --- a/modules/cups/go.mod +++ b/modules/cups/go.mod @@ -2,7 +2,7 @@ module cups go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/cups/go.sum b/modules/cups/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/cups/go.sum +++ b/modules/cups/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/dbus/go.mod b/modules/dbus/go.mod index cea3398f..2c823a56 100644 --- a/modules/dbus/go.mod +++ b/modules/dbus/go.mod @@ -3,7 +3,7 @@ module dbus go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/godbus/dbus/v5 v5.1.0 ) diff --git a/modules/dbus/go.sum b/modules/dbus/go.sum index a177a7e2..445ff65c 100644 --- a/modules/dbus/go.sum +++ b/modules/dbus/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= diff --git a/modules/desk-channel/go.mod b/modules/desk-channel/go.mod index d75ecbfc..4965d967 100644 --- a/modules/desk-channel/go.mod +++ b/modules/desk-channel/go.mod @@ -2,7 +2,7 @@ module deskchannel go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/desk-channel/go.sum b/modules/desk-channel/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/desk-channel/go.sum +++ b/modules/desk-channel/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/disk-load/go.mod b/modules/disk-load/go.mod index 83836ead..091f4577 100644 --- a/modules/disk-load/go.mod +++ b/modules/disk-load/go.mod @@ -3,7 +3,7 @@ module diskload go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/disk-load/go.sum b/modules/disk-load/go.sum index ea0f85a7..d37e5982 100644 --- a/modules/disk-load/go.sum +++ b/modules/disk-load/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/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/dmenu/go.mod b/modules/dmenu/go.mod index 875344e5..9cb92c4c 100644 --- a/modules/dmenu/go.mod +++ b/modules/dmenu/go.mod @@ -2,7 +2,7 @@ module dmenu go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/dmenu/go.sum b/modules/dmenu/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/dmenu/go.sum +++ b/modules/dmenu/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/dnsmasq/go.mod b/modules/dnsmasq/go.mod index a4dc2004..f60ba7da 100644 --- a/modules/dnsmasq/go.mod +++ b/modules/dnsmasq/go.mod @@ -2,7 +2,7 @@ module dnsmasq go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/dnsmasq/go.sum b/modules/dnsmasq/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/dnsmasq/go.sum +++ b/modules/dnsmasq/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/docker-compose/go.mod b/modules/docker-compose/go.mod index c2916f73..eea288c2 100644 --- a/modules/docker-compose/go.mod +++ b/modules/docker-compose/go.mod @@ -2,7 +2,7 @@ module docker-compose go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/docker-compose/go.sum b/modules/docker-compose/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/docker-compose/go.sum +++ b/modules/docker-compose/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/docker/go.mod b/modules/docker/go.mod index 3589069d..ef7c988d 100644 --- a/modules/docker/go.mod +++ b/modules/docker/go.mod @@ -2,7 +2,7 @@ module docker go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/docker/go.sum b/modules/docker/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/docker/go.sum +++ b/modules/docker/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/dunst/go.mod b/modules/dunst/go.mod index 7668704e..05bee444 100644 --- a/modules/dunst/go.mod +++ b/modules/dunst/go.mod @@ -2,7 +2,7 @@ module dunst go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/dunst/go.sum b/modules/dunst/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/dunst/go.sum +++ b/modules/dunst/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/fail2ban/go.mod b/modules/fail2ban/go.mod index aec1dc5a..710efcc7 100644 --- a/modules/fail2ban/go.mod +++ b/modules/fail2ban/go.mod @@ -2,7 +2,7 @@ module fail2ban go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/fail2ban/go.sum b/modules/fail2ban/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/fail2ban/go.sum +++ b/modules/fail2ban/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/feh/go.mod b/modules/feh/go.mod index 94abd17d..00a0cc23 100644 --- a/modules/feh/go.mod +++ b/modules/feh/go.mod @@ -2,7 +2,7 @@ module feh go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/feh/go.sum b/modules/feh/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/feh/go.sum +++ b/modules/feh/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/flatpak/go.mod b/modules/flatpak/go.mod index 14f26305..a35cb06a 100644 --- a/modules/flatpak/go.mod +++ b/modules/flatpak/go.mod @@ -2,7 +2,7 @@ module flatpak go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/flatpak/go.sum b/modules/flatpak/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/flatpak/go.sum +++ b/modules/flatpak/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/fonts/go.mod b/modules/fonts/go.mod index ffc6b3d7..b803f9b1 100644 --- a/modules/fonts/go.mod +++ b/modules/fonts/go.mod @@ -2,7 +2,7 @@ module fonts go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/fonts/go.sum b/modules/fonts/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/fonts/go.sum +++ b/modules/fonts/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/forticlient/go.mod b/modules/forticlient/go.mod index 07bbbb3e..237d53c1 100644 --- a/modules/forticlient/go.mod +++ b/modules/forticlient/go.mod @@ -2,7 +2,7 @@ module forticlient go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/forticlient/go.sum b/modules/forticlient/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/forticlient/go.sum +++ b/modules/forticlient/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/gitea/go.mod b/modules/gitea/go.mod index 51def49c..69facc1c 100644 --- a/modules/gitea/go.mod +++ b/modules/gitea/go.mod @@ -3,7 +3,7 @@ module gitea go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 golang.org/x/crypto v0.57.0 diff --git a/modules/gitea/go.sum b/modules/gitea/go.sum index ea0f85a7..d37e5982 100644 --- a/modules/gitea/go.sum +++ b/modules/gitea/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/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/gnome-keyring/go.mod b/modules/gnome-keyring/go.mod index 48866836..8a4e788a 100644 --- a/modules/gnome-keyring/go.mod +++ b/modules/gnome-keyring/go.mod @@ -2,7 +2,7 @@ module gnomekeyring go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/gnome-keyring/go.sum b/modules/gnome-keyring/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/gnome-keyring/go.sum +++ b/modules/gnome-keyring/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/hostname/go.mod b/modules/hostname/go.mod index 3c262dad..b3aa8958 100644 --- a/modules/hostname/go.mod +++ b/modules/hostname/go.mod @@ -2,7 +2,7 @@ module hostname go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/hostname/go.sum b/modules/hostname/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/hostname/go.sum +++ b/modules/hostname/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/i3/go.mod b/modules/i3/go.mod index 61d0c84a..0f2d9acd 100644 --- a/modules/i3/go.mod +++ b/modules/i3/go.mod @@ -2,7 +2,7 @@ module i3 go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/i3/go.sum b/modules/i3/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/i3/go.sum +++ b/modules/i3/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/i3status-rust/go.mod b/modules/i3status-rust/go.mod index 86549e41..bca47439 100644 --- a/modules/i3status-rust/go.mod +++ b/modules/i3status-rust/go.mod @@ -2,7 +2,7 @@ module i3statusrust go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/i3status-rust/go.sum b/modules/i3status-rust/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/i3status-rust/go.sum +++ b/modules/i3status-rust/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/kernel/go.mod b/modules/kernel/go.mod index 6bde2b1c..6212aeff 100644 --- a/modules/kernel/go.mod +++ b/modules/kernel/go.mod @@ -2,7 +2,7 @@ module kernel go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/kernel/go.sum b/modules/kernel/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/kernel/go.sum +++ b/modules/kernel/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/keycloak/go.mod b/modules/keycloak/go.mod index b739b653..c9a099bb 100644 --- a/modules/keycloak/go.mod +++ b/modules/keycloak/go.mod @@ -2,7 +2,7 @@ module keycloak go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/keycloak/go.sum b/modules/keycloak/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/keycloak/go.sum +++ b/modules/keycloak/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/lemurs/go.mod b/modules/lemurs/go.mod index 33643bf5..9c280154 100644 --- a/modules/lemurs/go.mod +++ b/modules/lemurs/go.mod @@ -2,7 +2,7 @@ module lemurs go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/lemurs/go.sum b/modules/lemurs/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/lemurs/go.sum +++ b/modules/lemurs/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/localization/go.mod b/modules/localization/go.mod index cf5c7ccb..8266c382 100644 --- a/modules/localization/go.mod +++ b/modules/localization/go.mod @@ -2,7 +2,7 @@ module localization go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/localization/go.sum b/modules/localization/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/localization/go.sum +++ b/modules/localization/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/logrotate/go.mod b/modules/logrotate/go.mod index d952d2bc..09adb00e 100644 --- a/modules/logrotate/go.mod +++ b/modules/logrotate/go.mod @@ -2,7 +2,7 @@ module logrotate go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/logrotate/go.sum b/modules/logrotate/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/logrotate/go.sum +++ b/modules/logrotate/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/memory-pressure/go.mod b/modules/memory-pressure/go.mod index ba6eda2e..2e7b894c 100644 --- a/modules/memory-pressure/go.mod +++ b/modules/memory-pressure/go.mod @@ -2,7 +2,7 @@ module memorypressure go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/memory-pressure/go.sum b/modules/memory-pressure/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/memory-pressure/go.sum +++ b/modules/memory-pressure/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/mesh-build-go/go.mod b/modules/mesh-build-go/go.mod index e0ce7e20..b0d14dd1 100644 --- a/modules/mesh-build-go/go.mod +++ b/modules/mesh-build-go/go.mod @@ -3,7 +3,7 @@ module meshbuildgo go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/distribution/distribution/v3 v3.1.2 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 diff --git a/modules/mesh-build-go/go.sum b/modules/mesh-build-go/go.sum index b64704ef..cc6c02b2 100644 --- a/modules/mesh-build-go/go.sum +++ b/modules/mesh-build-go/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/alicebob/miniredis/v2 v2.35.0 h1:QwLphYqCEAo1eu1TqPRN2jgVMPBweeQcR21jeqDCONI= github.com/alicebob/miniredis/v2 v2.35.0/go.mod h1:TcL7YfarKPGDAthEtl5NBeHZfeUQj6OXMm/+iu5cLMM= github.com/antithesishq/antithesis-sdk-go v0.7.0-default-no-op h1:Z/MZK75wC/NSrkgqeNIa7jexam9uWzhLmFTSCPI/kn0= diff --git a/modules/mesh-build-image/go.mod b/modules/mesh-build-image/go.mod index afcf3be6..40c3f538 100644 --- a/modules/mesh-build-image/go.mod +++ b/modules/mesh-build-image/go.mod @@ -3,7 +3,7 @@ module meshbuildimage go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-build-image/go.sum b/modules/mesh-build-image/go.sum index ea0f85a7..d37e5982 100644 --- a/modules/mesh-build-image/go.sum +++ b/modules/mesh-build-image/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/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-build-node/go.mod b/modules/mesh-build-node/go.mod index 8aae6074..34957f4d 100644 --- a/modules/mesh-build-node/go.mod +++ b/modules/mesh-build-node/go.mod @@ -3,7 +3,7 @@ module meshbuildnode go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/distribution/distribution/v3 v3.1.2 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-build-node/go.sum b/modules/mesh-build-node/go.sum index e2c1661f..295b8cc3 100644 --- a/modules/mesh-build-node/go.sum +++ b/modules/mesh-build-node/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/alicebob/miniredis/v2 v2.35.0 h1:QwLphYqCEAo1eu1TqPRN2jgVMPBweeQcR21jeqDCONI= github.com/alicebob/miniredis/v2 v2.35.0/go.mod h1:TcL7YfarKPGDAthEtl5NBeHZfeUQj6OXMm/+iu5cLMM= github.com/antithesishq/antithesis-sdk-go v0.7.0-default-no-op h1:Z/MZK75wC/NSrkgqeNIa7jexam9uWzhLmFTSCPI/kn0= diff --git a/modules/mesh-conditions/go.mod b/modules/mesh-conditions/go.mod index 2a5efe00..fe87bde2 100644 --- a/modules/mesh-conditions/go.mod +++ b/modules/mesh-conditions/go.mod @@ -3,7 +3,7 @@ module mesh-conditions go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-conditions/go.sum b/modules/mesh-conditions/go.sum index ea0f85a7..d37e5982 100644 --- a/modules/mesh-conditions/go.sum +++ b/modules/mesh-conditions/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/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-config/go.mod b/modules/mesh-config/go.mod index ddb82ac8..686dbf0e 100644 --- a/modules/mesh-config/go.mod +++ b/modules/mesh-config/go.mod @@ -2,7 +2,7 @@ module mesh-config go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/mesh-config/go.sum b/modules/mesh-config/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/mesh-config/go.sum +++ b/modules/mesh-config/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/mesh-delivery-gate/go.mod b/modules/mesh-delivery-gate/go.mod index e4fdacaf..765fcda2 100644 --- a/modules/mesh-delivery-gate/go.mod +++ b/modules/mesh-delivery-gate/go.mod @@ -3,7 +3,7 @@ module mesh-delivery-gate go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 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-gate/go.sum b/modules/mesh-delivery-gate/go.sum index ea0f85a7..d37e5982 100644 --- a/modules/mesh-delivery-gate/go.sum +++ b/modules/mesh-delivery-gate/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/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-files/go.mod b/modules/mesh-files/go.mod index e62741ad..c95e2e80 100644 --- a/modules/mesh-files/go.mod +++ b/modules/mesh-files/go.mod @@ -2,7 +2,7 @@ module mesh-files go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/mesh-files/go.sum b/modules/mesh-files/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/mesh-files/go.sum +++ b/modules/mesh-files/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/mesh-hand-acts/go.mod b/modules/mesh-hand-acts/go.mod index 1c401f74..023805c6 100644 --- a/modules/mesh-hand-acts/go.mod +++ b/modules/mesh-hand-acts/go.mod @@ -3,7 +3,7 @@ module mesh-hand-acts go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-hand-acts/go.sum b/modules/mesh-hand-acts/go.sum index ea0f85a7..d37e5982 100644 --- a/modules/mesh-hand-acts/go.sum +++ b/modules/mesh-hand-acts/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/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-healers/go.mod b/modules/mesh-healers/go.mod index 6679e792..1abd71f6 100644 --- a/modules/mesh-healers/go.mod +++ b/modules/mesh-healers/go.mod @@ -3,7 +3,7 @@ module mesh-healers go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-healers/go.sum b/modules/mesh-healers/go.sum index ea0f85a7..d37e5982 100644 --- a/modules/mesh-healers/go.sum +++ b/modules/mesh-healers/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/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-issues/go.mod b/modules/mesh-issues/go.mod index fa92579f..ad285222 100644 --- a/modules/mesh-issues/go.mod +++ b/modules/mesh-issues/go.mod @@ -3,7 +3,7 @@ module mesh-issues go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-issues/go.sum b/modules/mesh-issues/go.sum index ea0f85a7..d37e5982 100644 --- a/modules/mesh-issues/go.sum +++ b/modules/mesh-issues/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/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-knowledge/go.mod b/modules/mesh-knowledge/go.mod index e51163bd..aa5ad388 100644 --- a/modules/mesh-knowledge/go.mod +++ b/modules/mesh-knowledge/go.mod @@ -3,7 +3,7 @@ module mesh-knowledge go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/jackc/pgx/v5 v5.11.0 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 diff --git a/modules/mesh-knowledge/go.sum b/modules/mesh-knowledge/go.sum index 7cbd6f69..a299bc95 100644 --- a/modules/mesh-knowledge/go.sum +++ b/modules/mesh-knowledge/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/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/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/modules/mesh-mail-notifier/go.mod b/modules/mesh-mail-notifier/go.mod index dbb3ea38..2e935f6e 100644 --- a/modules/mesh-mail-notifier/go.mod +++ b/modules/mesh-mail-notifier/go.mod @@ -2,7 +2,7 @@ module mesh-mail-notifier go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/mesh-mail-notifier/go.sum b/modules/mesh-mail-notifier/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/mesh-mail-notifier/go.sum +++ b/modules/mesh-mail-notifier/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/mesh-mail-reader/go.mod b/modules/mesh-mail-reader/go.mod index a7c37282..a2ad21b5 100644 --- a/modules/mesh-mail-reader/go.mod +++ b/modules/mesh-mail-reader/go.mod @@ -3,7 +3,7 @@ module mesh-mail-reader go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/jackc/pgx/v5 v5.11.0 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 diff --git a/modules/mesh-mail-reader/go.sum b/modules/mesh-mail-reader/go.sum index 7cbd6f69..a299bc95 100644 --- a/modules/mesh-mail-reader/go.sum +++ b/modules/mesh-mail-reader/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/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/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/modules/mesh-mail-web/go.mod b/modules/mesh-mail-web/go.mod index bfbe7313..0dcbeeb8 100644 --- a/modules/mesh-mail-web/go.mod +++ b/modules/mesh-mail-web/go.mod @@ -3,7 +3,7 @@ module mesh-mail-web go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/coreos/go-oidc/v3 v3.21.0 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 diff --git a/modules/mesh-mail-web/go.sum b/modules/mesh-mail-web/go.sum index 34e8caf5..5c45f9e8 100644 --- a/modules/mesh-mail-web/go.sum +++ b/modules/mesh-mail-web/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/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/coreos/go-oidc/v3 v3.21.0 h1:wZo4Q9Pum8dYEj0eMUPrqR+kvuGkeUplbLpNCkBqoWM= diff --git a/modules/mesh-mail/go.mod b/modules/mesh-mail/go.mod index 07c83731..0ff1d4a4 100644 --- a/modules/mesh-mail/go.mod +++ b/modules/mesh-mail/go.mod @@ -3,7 +3,7 @@ module mesh-mail go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/emersion/go-imap/v2 v2.0.0-beta.8 github.com/emersion/go-message v0.18.2 github.com/jackc/pgx/v5 v5.11.0 diff --git a/modules/mesh-mail/go.sum b/modules/mesh-mail/go.sum index f8ccf638..5cd44b7a 100644 --- a/modules/mesh-mail/go.sum +++ b/modules/mesh-mail/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/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/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/modules/mesh-provisioner-client/go.mod b/modules/mesh-provisioner-client/go.mod index 33703d51..b00801c1 100644 --- a/modules/mesh-provisioner-client/go.mod +++ b/modules/mesh-provisioner-client/go.mod @@ -3,7 +3,7 @@ module mesh-provisioner-client go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 golang.org/x/sys v0.48.0 diff --git a/modules/mesh-provisioner-client/go.sum b/modules/mesh-provisioner-client/go.sum index ea0f85a7..d37e5982 100644 --- a/modules/mesh-provisioner-client/go.sum +++ b/modules/mesh-provisioner-client/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/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-provisioner/go.mod b/modules/mesh-provisioner/go.mod index 02f62084..8a4f096e 100644 --- a/modules/mesh-provisioner/go.mod +++ b/modules/mesh-provisioner/go.mod @@ -3,7 +3,7 @@ module mesh-provisioner go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-provisioner/go.sum b/modules/mesh-provisioner/go.sum index ea0f85a7..d37e5982 100644 --- a/modules/mesh-provisioner/go.sum +++ b/modules/mesh-provisioner/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/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-reads/go.mod b/modules/mesh-reads/go.mod index 6406e8a6..e4b1d9d9 100644 --- a/modules/mesh-reads/go.mod +++ b/modules/mesh-reads/go.mod @@ -2,7 +2,7 @@ module mesh-reads go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/mesh-reads/go.sum b/modules/mesh-reads/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/mesh-reads/go.sum +++ b/modules/mesh-reads/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/mesh-self-check/go.mod b/modules/mesh-self-check/go.mod index bf8a78df..c618e9ae 100644 --- a/modules/mesh-self-check/go.mod +++ b/modules/mesh-self-check/go.mod @@ -3,7 +3,7 @@ module mesh-self-check go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-self-check/go.sum b/modules/mesh-self-check/go.sum index ea0f85a7..d37e5982 100644 --- a/modules/mesh-self-check/go.sum +++ b/modules/mesh-self-check/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/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-vault/go.mod b/modules/mesh-vault/go.mod index aa633162..ccc4dba0 100644 --- a/modules/mesh-vault/go.mod +++ b/modules/mesh-vault/go.mod @@ -3,7 +3,7 @@ module mesh-vault go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 golang.org/x/crypto v0.57.0 diff --git a/modules/mesh-vault/go.sum b/modules/mesh-vault/go.sum index ea0f85a7..d37e5982 100644 --- a/modules/mesh-vault/go.sum +++ b/modules/mesh-vault/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/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-watcher/go.mod b/modules/mesh-watcher/go.mod index 04f2109e..6f6129ea 100644 --- a/modules/mesh-watcher/go.mod +++ b/modules/mesh-watcher/go.mod @@ -2,7 +2,7 @@ module mesh-watcher go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/mesh-watcher/go.sum b/modules/mesh-watcher/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/mesh-watcher/go.sum +++ b/modules/mesh-watcher/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/messenger/go.mod b/modules/messenger/go.mod index acb01ee6..72cfa00f 100644 --- a/modules/messenger/go.mod +++ b/modules/messenger/go.mod @@ -3,7 +3,7 @@ module messenger go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/messenger/go.sum b/modules/messenger/go.sum index ea0f85a7..d37e5982 100644 --- a/modules/messenger/go.sum +++ b/modules/messenger/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/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/minio/go.mod b/modules/minio/go.mod index 6f1f8cb5..44bbd250 100644 --- a/modules/minio/go.mod +++ b/modules/minio/go.mod @@ -2,7 +2,7 @@ module minio go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/minio/go.sum b/modules/minio/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/minio/go.sum +++ b/modules/minio/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/mounts/go.mod b/modules/mounts/go.mod index cfd1a585..0aae0836 100644 --- a/modules/mounts/go.mod +++ b/modules/mounts/go.mod @@ -2,7 +2,7 @@ module mounts go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/mounts/go.sum b/modules/mounts/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/mounts/go.sum +++ b/modules/mounts/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/nats/go.mod b/modules/nats/go.mod index f856af48..361df90e 100644 --- a/modules/nats/go.mod +++ b/modules/nats/go.mod @@ -3,7 +3,7 @@ module nats-tools go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/klauspost/compress v1.20.0 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 diff --git a/modules/nats/go.sum b/modules/nats/go.sum index ea0f85a7..d37e5982 100644 --- a/modules/nats/go.sum +++ b/modules/nats/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/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/netcheck/go.mod b/modules/netcheck/go.mod index 83f912e8..28220c85 100644 --- a/modules/netcheck/go.mod +++ b/modules/netcheck/go.mod @@ -2,7 +2,7 @@ module netcheck go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/netcheck/go.sum b/modules/netcheck/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/netcheck/go.sum +++ b/modules/netcheck/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/networkmanager/go.mod b/modules/networkmanager/go.mod index c1cf3b21..7921948f 100644 --- a/modules/networkmanager/go.mod +++ b/modules/networkmanager/go.mod @@ -2,7 +2,7 @@ module networkmanager go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/networkmanager/go.sum b/modules/networkmanager/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/networkmanager/go.sum +++ b/modules/networkmanager/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/nextcloud-client/go.mod b/modules/nextcloud-client/go.mod index a1ad717a..f930f455 100644 --- a/modules/nextcloud-client/go.mod +++ b/modules/nextcloud-client/go.mod @@ -2,7 +2,7 @@ module nextcloud-client go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/nextcloud-client/go.sum b/modules/nextcloud-client/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/nextcloud-client/go.sum +++ b/modules/nextcloud-client/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/nfs-server/go.mod b/modules/nfs-server/go.mod index 867097af..855dd411 100644 --- a/modules/nfs-server/go.mod +++ b/modules/nfs-server/go.mod @@ -2,7 +2,7 @@ module nfsserver go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/nfs-server/go.sum b/modules/nfs-server/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/nfs-server/go.sum +++ b/modules/nfs-server/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/nm-applet/go.mod b/modules/nm-applet/go.mod index 869e55d7..2cdefe1e 100644 --- a/modules/nm-applet/go.mod +++ b/modules/nm-applet/go.mod @@ -2,7 +2,7 @@ module nm-applet go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/nm-applet/go.sum b/modules/nm-applet/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/nm-applet/go.sum +++ b/modules/nm-applet/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/only-office/go.mod b/modules/only-office/go.mod index 43a041f0..ee2fcb37 100644 --- a/modules/only-office/go.mod +++ b/modules/only-office/go.mod @@ -3,7 +3,7 @@ module only-office go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/only-office/go.sum b/modules/only-office/go.sum index ea0f85a7..d37e5982 100644 --- a/modules/only-office/go.sum +++ b/modules/only-office/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/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/openrazer/go.mod b/modules/openrazer/go.mod index 72517353..57ec450c 100644 --- a/modules/openrazer/go.mod +++ b/modules/openrazer/go.mod @@ -2,7 +2,7 @@ module openrazer go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/openrazer/go.sum b/modules/openrazer/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/openrazer/go.sum +++ b/modules/openrazer/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/pacman/go.mod b/modules/pacman/go.mod index cd524249..95f80a76 100644 --- a/modules/pacman/go.mod +++ b/modules/pacman/go.mod @@ -3,7 +3,7 @@ module pacman go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/nats-io/nats-server/v2 v2.11.17 ) diff --git a/modules/pacman/go.sum b/modules/pacman/go.sum index ea0f85a7..d37e5982 100644 --- a/modules/pacman/go.sum +++ b/modules/pacman/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/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/picom/go.mod b/modules/picom/go.mod index a17fd938..21644553 100644 --- a/modules/picom/go.mod +++ b/modules/picom/go.mod @@ -2,7 +2,7 @@ module picom go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/picom/go.sum b/modules/picom/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/picom/go.sum +++ b/modules/picom/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/polychromatic/go.mod b/modules/polychromatic/go.mod index 34791051..3baea465 100644 --- a/modules/polychromatic/go.mod +++ b/modules/polychromatic/go.mod @@ -2,7 +2,7 @@ module polychromatic go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/polychromatic/go.sum b/modules/polychromatic/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/polychromatic/go.sum +++ b/modules/polychromatic/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/postgres/go.mod b/modules/postgres/go.mod index fe4d8016..922d28cc 100644 --- a/modules/postgres/go.mod +++ b/modules/postgres/go.mod @@ -3,7 +3,7 @@ module postgres go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/jackc/pgx/v5 v5.11.0 ) diff --git a/modules/postgres/go.sum b/modules/postgres/go.sum index 822d6592..30f9ac33 100644 --- a/modules/postgres/go.sum +++ b/modules/postgres/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/modules/power/go.mod b/modules/power/go.mod index 74796ae0..9578bab2 100644 --- a/modules/power/go.mod +++ b/modules/power/go.mod @@ -3,7 +3,7 @@ module power go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/godbus/dbus/v5 v5.1.0 ) diff --git a/modules/power/go.sum b/modules/power/go.sum index a177a7e2..445ff65c 100644 --- a/modules/power/go.sum +++ b/modules/power/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= diff --git a/modules/records/go.mod b/modules/records/go.mod index 1b525f66..14733ef6 100644 --- a/modules/records/go.mod +++ b/modules/records/go.mod @@ -2,7 +2,7 @@ module records go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/records/go.sum b/modules/records/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/records/go.sum +++ b/modules/records/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/restic/go.mod b/modules/restic/go.mod index 1ab4edfa..b67a05a9 100644 --- a/modules/restic/go.mod +++ b/modules/restic/go.mod @@ -2,7 +2,7 @@ module restic go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/restic/go.sum b/modules/restic/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/restic/go.sum +++ b/modules/restic/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/rofi/go.mod b/modules/rofi/go.mod index a8247d2d..d7e0dfdc 100644 --- a/modules/rofi/go.mod +++ b/modules/rofi/go.mod @@ -2,7 +2,7 @@ module rofi go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/rofi/go.sum b/modules/rofi/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/rofi/go.sum +++ b/modules/rofi/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/route-adapter/go.mod b/modules/route-adapter/go.mod index a888c751..1bbd93c5 100644 --- a/modules/route-adapter/go.mod +++ b/modules/route-adapter/go.mod @@ -2,7 +2,7 @@ module route-adapter go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/route-adapter/go.sum b/modules/route-adapter/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/route-adapter/go.sum +++ b/modules/route-adapter/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/screen-lock/go.mod b/modules/screen-lock/go.mod index 6377060a..f2f5d3ac 100644 --- a/modules/screen-lock/go.mod +++ b/modules/screen-lock/go.mod @@ -2,7 +2,7 @@ module screenlock go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/screen-lock/go.sum b/modules/screen-lock/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/screen-lock/go.sum +++ b/modules/screen-lock/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/sensors/go.mod b/modules/sensors/go.mod index b352dedf..ad09f717 100644 --- a/modules/sensors/go.mod +++ b/modules/sensors/go.mod @@ -2,7 +2,7 @@ module sensors go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/sensors/go.sum b/modules/sensors/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/sensors/go.sum +++ b/modules/sensors/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/slack/go.mod b/modules/slack/go.mod index 17e89109..c968b55f 100644 --- a/modules/slack/go.mod +++ b/modules/slack/go.mod @@ -2,7 +2,7 @@ module slack go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/slack/go.sum b/modules/slack/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/slack/go.sum +++ b/modules/slack/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/snapd/go.mod b/modules/snapd/go.mod index f6991c58..21977085 100644 --- a/modules/snapd/go.mod +++ b/modules/snapd/go.mod @@ -2,7 +2,7 @@ module snapd go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/snapd/go.sum b/modules/snapd/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/snapd/go.sum +++ b/modules/snapd/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/ssh-client/go.mod b/modules/ssh-client/go.mod index 6e6759b3..aa044960 100644 --- a/modules/ssh-client/go.mod +++ b/modules/ssh-client/go.mod @@ -3,7 +3,7 @@ module sshclient go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/ssh-client/go.sum b/modules/ssh-client/go.sum index ea0f85a7..d37e5982 100644 --- a/modules/ssh-client/go.sum +++ b/modules/ssh-client/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/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/sudo/go.mod b/modules/sudo/go.mod index 67698c76..c168746f 100644 --- a/modules/sudo/go.mod +++ b/modules/sudo/go.mod @@ -2,7 +2,7 @@ module sudo go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/sudo/go.sum b/modules/sudo/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/sudo/go.sum +++ b/modules/sudo/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/systemd-networkd/go.mod b/modules/systemd-networkd/go.mod index 8f098d43..6a4bc42b 100644 --- a/modules/systemd-networkd/go.mod +++ b/modules/systemd-networkd/go.mod @@ -2,7 +2,7 @@ module systemd-networkd go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/systemd-networkd/go.sum b/modules/systemd-networkd/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/systemd-networkd/go.sum +++ b/modules/systemd-networkd/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/systemd-resolved/go.mod b/modules/systemd-resolved/go.mod index 088f704f..033f8d0a 100644 --- a/modules/systemd-resolved/go.mod +++ b/modules/systemd-resolved/go.mod @@ -2,7 +2,7 @@ module systemd-resolved go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/systemd-resolved/go.sum b/modules/systemd-resolved/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/systemd-resolved/go.sum +++ b/modules/systemd-resolved/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/systemd/go.mod b/modules/systemd/go.mod index f9d9ba8b..74c6529b 100644 --- a/modules/systemd/go.mod +++ b/modules/systemd/go.mod @@ -2,7 +2,7 @@ module systemd-tools go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/systemd/go.sum b/modules/systemd/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/systemd/go.sum +++ b/modules/systemd/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/telegram/go.mod b/modules/telegram/go.mod index 023ca0b3..1a2c3497 100644 --- a/modules/telegram/go.mod +++ b/modules/telegram/go.mod @@ -2,7 +2,7 @@ module telegram go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/telegram/go.sum b/modules/telegram/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/telegram/go.sum +++ b/modules/telegram/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/time-sync/go.mod b/modules/time-sync/go.mod index 78bf3826..fc189d14 100644 --- a/modules/time-sync/go.mod +++ b/modules/time-sync/go.mod @@ -2,7 +2,7 @@ module time-sync go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/time-sync/go.sum b/modules/time-sync/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/time-sync/go.sum +++ b/modules/time-sync/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/triggerhappy/go.mod b/modules/triggerhappy/go.mod index 25bb3a59..a33c0c1e 100644 --- a/modules/triggerhappy/go.mod +++ b/modules/triggerhappy/go.mod @@ -2,7 +2,7 @@ module triggerhappy go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/triggerhappy/go.sum b/modules/triggerhappy/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/triggerhappy/go.sum +++ b/modules/triggerhappy/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/xclip/go.mod b/modules/xclip/go.mod index 64743929..a07d1bc3 100644 --- a/modules/xclip/go.mod +++ b/modules/xclip/go.mod @@ -2,7 +2,7 @@ module xclip go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/xclip/go.sum b/modules/xclip/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/xclip/go.sum +++ b/modules/xclip/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/xdg/go.mod b/modules/xdg/go.mod index b6824243..5cc2237e 100644 --- a/modules/xdg/go.mod +++ b/modules/xdg/go.mod @@ -2,7 +2,7 @@ module xdg go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/xdg/go.sum b/modules/xdg/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/xdg/go.sum +++ b/modules/xdg/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/xorg/go.mod b/modules/xorg/go.mod index 6b772760..ce87a439 100644 --- a/modules/xorg/go.mod +++ b/modules/xorg/go.mod @@ -2,7 +2,7 @@ module xorg go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/xorg/go.sum b/modules/xorg/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/xorg/go.sum +++ b/modules/xorg/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/xterm/go.mod b/modules/xterm/go.mod index 5fc380c2..3fb24444 100644 --- a/modules/xterm/go.mod +++ b/modules/xterm/go.mod @@ -2,7 +2,7 @@ module xterm go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/xterm/go.sum b/modules/xterm/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/xterm/go.sum +++ b/modules/xterm/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/zfs/go.mod b/modules/zfs/go.mod index 63e46d0e..215fdaae 100644 --- a/modules/zfs/go.mod +++ b/modules/zfs/go.mod @@ -2,7 +2,7 @@ module zfstools go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/zfs/go.sum b/modules/zfs/go.sum index 91c4c9e2..fa41eb3f 100644 --- a/modules/zfs/go.sum +++ b/modules/zfs/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343 h1:+n2kwWJoSP30Jp/0dNaNqHt7A0dsfy2YWxep2inVueo= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102104825-729a86b62343/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= From 0ef81d85b35e12a68c3bdda6822e398e0e453bee Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 12:23:02 +0100 Subject: [PATCH 23/27] Count nox's warrant acts for a vault verb as the operator's decisions nox records a hand act before each sensitive vault verb, with the verb's address as its verb and cause operator; two in a fortnight raised a false healer-wanted. mesh-healers reads those four verbs as decisions by design (issue 1126 review 2). Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- modules/mesh-healers/cmd/mesh-healers/healers_test.go | 8 +++++++- modules/mesh-healers/cmd/mesh-healers/wanted.go | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/modules/mesh-healers/cmd/mesh-healers/healers_test.go b/modules/mesh-healers/cmd/mesh-healers/healers_test.go index 8af1a6af..fd8b6d70 100644 --- a/modules/mesh-healers/cmd/mesh-healers/healers_test.go +++ b/modules/mesh-healers/cmd/mesh-healers/healers_test.go @@ -3,6 +3,7 @@ package main import ( "encoding/json" "errors" + "fmt" "slices" "sort" "strings" @@ -364,6 +365,11 @@ func TestACauseRepairedByHandTwiceIsAHealerWanted(t *testing.T) { act("a6", "conditions silence", "operator-answer", time.Hour) act("a7", "hand-act record", "relogin", 20*24*time.Hour) act("a8", "hand-act record", "relogin", time.Hour) + // nox's acts warranting a sensitive vault verb are the operator's decisions, not repairs (issue 1126 review 2). + for i, verb := range []string{"mesh-vault.rotate", "mesh-vault.provisioner_retire_approve", "mesh-vault.provisioner_delete", + "mesh-vault.secret_vault_export"} { + act(fmt.Sprintf("n%d", i), verb, "operator", time.Hour) + } want := []string{"mesh.hand-acts.consumer-behind.healer-wanted"} if keys := w.store.keys(FindingsState); !slices.Equal(keys, want) { t.Fatalf("findings %v, want %v", keys, want) @@ -380,7 +386,7 @@ func TestACauseRepairedByHandTwiceIsAHealerWanted(t *testing.T) { if keys := w.store.keys(FindingsState); len(keys) != 0 { t.Errorf("past the fortnight the finding stays: %v", keys) } - if len(w.h.acts) != 8 { + if len(w.h.acts) != 12 { t.Errorf("an act heard twice or listed after it was heard is kept twice: %d acts", len(w.h.acts)) } } diff --git a/modules/mesh-healers/cmd/mesh-healers/wanted.go b/modules/mesh-healers/cmd/mesh-healers/wanted.go index 9d111b5c..2b83a20a 100644 --- a/modules/mesh-healers/cmd/mesh-healers/wanted.go +++ b/modules/mesh-healers/cmd/mesh-healers/wanted.go @@ -57,6 +57,12 @@ var decided = map[string][]string{ "secret accept": nil, "secret rotate": {"leaked-in-logs"}, "rotate": {"leaked-in-logs"}, + // The acts nox records to warrant a sensitive vault verb, the vault verb's address as its verb (issue 1126): the + // operator's decision, whatever its cause. + "mesh-vault.rotate": nil, + "mesh-vault.provisioner_retire_approve": nil, + "mesh-vault.provisioner_delete": nil, + "mesh-vault.secret_vault_export": nil, } // personsDecision is whether an act is a person's decision by design, by the verb that recorded it. From 067f2f4d612922268feb6a03fda70e6afe6a8db5 Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 12:24:41 +0100 Subject: [PATCH 24/27] Record no hand act for a cleanup that deletes nothing nox cleanup delete without --confirm deletes nothing; the vault refuses it for its missing confirm alone and judges only a confirmed delete, and nox records the warranting act only for that one (issue 1126 review 2). Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- modules/mesh-cli/cmd/mesh-cli/commands.go | 6 ++++-- modules/mesh-cli/cmd/mesh-cli/main_test.go | 4 ++-- .../mesh-vault/cmd/mesh-vault/sensitive_test.go | 14 ++++++++++++++ modules/mesh-vault/cmd/mesh-vault/tools.go | 10 +++++++--- 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/modules/mesh-cli/cmd/mesh-cli/commands.go b/modules/mesh-cli/cmd/mesh-cli/commands.go index 6513750b..93f56405 100644 --- a/modules/mesh-cli/cmd/mesh-cli/commands.go +++ b/modules/mesh-cli/cmd/mesh-cli/commands.go @@ -352,9 +352,11 @@ var commands = []command{ a["consumer"] = l.pos[0] // The vault deletes only when confirm repeats the holder's name (mesh-vault retirement.go); without // --confirm it answers what it would delete. - if l.has("confirm") { - a["confirm"] = l.pos[0] + if !l.has("confirm") { + // Without --confirm the vault deletes nothing and says so: no act is recorded for it. + return call{"mesh-vault.provisioner_delete", a}, nil } + a["confirm"] = l.pos[0] return warranted(call{"mesh-vault.provisioner_delete", a}, l.pos[0]), nil }}, {words: []string{"cleanup"}, does: "every retired holder per provider", build: fixed("mesh-vault.provisioner_retirement")}, diff --git a/modules/mesh-cli/cmd/mesh-cli/main_test.go b/modules/mesh-cli/cmd/mesh-cli/main_test.go index e22808e9..3caa0897 100644 --- a/modules/mesh-cli/cmd/mesh-cli/main_test.go +++ b/modules/mesh-cli/cmd/mesh-cli/main_test.go @@ -121,6 +121,8 @@ func TestEachLineCallsItsOwner(t *testing.T) { {"settings clear zsh execute --node g14 --why test", "mesh-config.config", `{"action":"clear","key":"execute","module":"zsh","node":"g14","why":"test"}`}, {"config history --key k --limit 5", "mesh-config.config", `{"action":"history","key":"k","limit":5}`}, {"operator key show", "mesh-vault.vault_status", `{}`}, + // A cleanup without --confirm deletes nothing, so no hand act is recorded for it (issue 1126 review 2). + {"cleanup delete ace.plex --why dry", "mesh-vault.provisioner_delete", `{"consumer":"ace.plex","why":"dry"}`}, {"collect --confirm --why space", "mesh-artifact-sweep.collect", `{"confirm":"true","why":"space"}`}, {"images ace", "mesh-artifact-sweep.images", `{"node":"ace"}`}, {"licence use g14 work", "anthropic-licence-manager.switch", `{"consumer":"g14","licence":"work"}`}, @@ -296,8 +298,6 @@ func TestASensitiveLineRecordsItsHandActAndNamesIt(t *testing.T) { `{"act":"act-7","consumers":["c1","c2"],"why":"done"}`}, {"cleanup delete ace.plex --why done --confirm", "mesh-vault.provisioner_delete", "mesh-vault.provisioner_delete", "ace.plex", `{"act":"act-7","confirm":"ace.plex","consumer":"ace.plex","why":"done"}`}, - {"cleanup delete ace.plex --why dry", "mesh-vault.provisioner_delete", "mesh-vault.provisioner_delete", "ace.plex", - `{"act":"act-7","consumer":"ace.plex","why":"dry"}`}, } { got := console(t, map[string]string{"mesh-hand-acts.hand-act": recorded}) code, _, errOut := runLine(strings.Fields(c.line)...) diff --git a/modules/mesh-vault/cmd/mesh-vault/sensitive_test.go b/modules/mesh-vault/cmd/mesh-vault/sensitive_test.go index e7b33417..89380d44 100644 --- a/modules/mesh-vault/cmd/mesh-vault/sensitive_test.go +++ b/modules/mesh-vault/cmd/mesh-vault/sensitive_test.go @@ -102,3 +102,17 @@ func TestNoxsRuntimeExportsWithItsHandActAndIsRefusedWithout(t *testing.T) { t.Errorf("an export with nox's act: %v", err) } } + +// Review 2 of issue 1126: a delete without its confirm deletes nothing, so it is refused for that, never judged as an +// act wanting a hand act; nox records none for it. +func TestADeleteWithoutConfirmIsRefusedForItsConfirmAlone(t *testing.T) { + del := toolNamed(t, definitions(&Env{Custody: retiredC(t).Custody}), "provisioner_delete") + if _, err := del.runAs("shanks.node-tools", map[string]any{"consumer": "d-app", "why": "look"}); err == nil || + !strings.Contains(err.Error(), "confirm must repeat") { + t.Errorf("an unconfirmed delete: %v", err) + } + if _, err := del.runAs("shanks.node-tools", map[string]any{"consumer": "d-app", "confirm": "d-app", "why": "gone"}); err == nil || + !strings.Contains(err.Error(), "named none") { + t.Errorf("a confirmed delete with no act: %v", err) + } +} diff --git a/modules/mesh-vault/cmd/mesh-vault/tools.go b/modules/mesh-vault/cmd/mesh-vault/tools.go index 16dd07c5..9cdcff77 100644 --- a/modules/mesh-vault/cmd/mesh-vault/tools.go +++ b/modules/mesh-vault/cmd/mesh-vault/tools.go @@ -540,13 +540,17 @@ func definitions(env *Env) []toolDef { Input: actInput(false, true), run: func(caller string, a map[string]any) (any, error) { consumer, _ := a["consumer"].(string) - if err := env.judge(caller, SensitiveDelete, a, consumer); err != nil { - return nil, err + confirm, _ := a["confirm"].(string) + // A delete without its confirm deletes nothing and is refused for that alone (Custody.Delete); one + // confirmed is judged. + if confirm != "" { + if err := env.judge(caller, SensitiveDelete, a, consumer); err != nil { + return nil, err + } } if env.Custody == nil { return nil, errors.New("the vault has no custody ledger") } - confirm, _ := a["confirm"].(string) if err := env.Custody.Delete(consumer, confirm, actOf(caller, a)); err != nil { return nil, err } From 7f8701637f9d5b24c64b000921e266fcf195fcca Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 12:27:34 +0100 Subject: [PATCH 25/27] Pin mesh-sdk to the group head of issue 1126 Every member builds against mesh-sdk abf5eac, the head of feat/1126-removal, so the group is checked as one contract. Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- checks/credentialform/go.mod | 2 +- checks/credentialform/go.sum | 4 ++-- checks/health/go.mod | 2 +- checks/health/go.sum | 4 ++-- checks/manifests/go.mod | 2 +- checks/manifests/go.sum | 4 ++-- checks/readable/go.mod | 2 +- checks/readable/go.sum | 4 ++-- modules/adwaita/go.mod | 2 +- modules/adwaita/go.sum | 4 ++-- modules/artifact-store-tools/go.mod | 2 +- modules/artifact-store-tools/go.sum | 4 ++-- modules/asus-zephyrus-g14/go.mod | 2 +- modules/asus-zephyrus-g14/go.sum | 4 ++-- modules/avahi/go.mod | 2 +- modules/avahi/go.sum | 4 ++-- modules/blueman/go.mod | 2 +- modules/blueman/go.sum | 4 ++-- modules/bluetooth/go.mod | 2 +- modules/bluetooth/go.sum | 4 ++-- modules/brother/go.mod | 2 +- modules/brother/go.sum | 4 ++-- modules/claude-code/go.mod | 2 +- modules/claude-code/go.sum | 4 ++-- modules/claude-licence-manager/go.mod | 2 +- modules/claude-licence-manager/go.sum | 4 ++-- modules/clipmenu/go.mod | 2 +- modules/clipmenu/go.sum | 4 ++-- modules/cups/go.mod | 2 +- modules/cups/go.sum | 4 ++-- modules/dbus/go.mod | 2 +- modules/dbus/go.sum | 4 ++-- modules/desk-channel/go.mod | 2 +- modules/desk-channel/go.sum | 4 ++-- modules/disk-load/go.mod | 2 +- modules/disk-load/go.sum | 4 ++-- modules/dmenu/go.mod | 2 +- modules/dmenu/go.sum | 4 ++-- modules/dnsmasq/go.mod | 2 +- modules/dnsmasq/go.sum | 4 ++-- modules/docker-compose/go.mod | 2 +- modules/docker-compose/go.sum | 4 ++-- modules/docker/go.mod | 2 +- modules/docker/go.sum | 4 ++-- modules/dunst/go.mod | 2 +- modules/dunst/go.sum | 4 ++-- modules/fail2ban/go.mod | 2 +- modules/fail2ban/go.sum | 4 ++-- modules/feh/go.mod | 2 +- modules/feh/go.sum | 4 ++-- modules/flatpak/go.mod | 2 +- modules/flatpak/go.sum | 4 ++-- modules/fonts/go.mod | 2 +- modules/fonts/go.sum | 4 ++-- modules/forticlient/go.mod | 2 +- modules/forticlient/go.sum | 4 ++-- modules/gitea/go.mod | 2 +- modules/gitea/go.sum | 4 ++-- modules/gnome-keyring/go.mod | 2 +- modules/gnome-keyring/go.sum | 4 ++-- modules/hostname/go.mod | 2 +- modules/hostname/go.sum | 4 ++-- modules/i3/go.mod | 2 +- modules/i3/go.sum | 4 ++-- modules/i3status-rust/go.mod | 2 +- modules/i3status-rust/go.sum | 4 ++-- modules/kernel/go.mod | 2 +- modules/kernel/go.sum | 4 ++-- modules/keycloak/go.mod | 2 +- modules/keycloak/go.sum | 4 ++-- modules/lemurs/go.mod | 2 +- modules/lemurs/go.sum | 4 ++-- modules/localization/go.mod | 2 +- modules/localization/go.sum | 4 ++-- modules/logrotate/go.mod | 2 +- modules/logrotate/go.sum | 4 ++-- modules/memory-pressure/go.mod | 2 +- modules/memory-pressure/go.sum | 4 ++-- modules/mesh-build-go/go.mod | 2 +- modules/mesh-build-go/go.sum | 4 ++-- modules/mesh-build-image/go.mod | 2 +- modules/mesh-build-image/go.sum | 4 ++-- modules/mesh-build-node/go.mod | 2 +- modules/mesh-build-node/go.sum | 4 ++-- modules/mesh-conditions/go.mod | 2 +- modules/mesh-conditions/go.sum | 4 ++-- modules/mesh-config/go.mod | 2 +- modules/mesh-config/go.sum | 4 ++-- modules/mesh-delivery-gate/go.mod | 2 +- modules/mesh-delivery-gate/go.sum | 4 ++-- modules/mesh-files/go.mod | 2 +- modules/mesh-files/go.sum | 4 ++-- modules/mesh-hand-acts/go.mod | 2 +- modules/mesh-hand-acts/go.sum | 4 ++-- modules/mesh-healers/go.mod | 2 +- modules/mesh-healers/go.sum | 4 ++-- modules/mesh-issues/go.mod | 2 +- modules/mesh-issues/go.sum | 4 ++-- modules/mesh-knowledge/go.mod | 2 +- modules/mesh-knowledge/go.sum | 4 ++-- modules/mesh-mail-notifier/go.mod | 2 +- modules/mesh-mail-notifier/go.sum | 4 ++-- modules/mesh-mail-reader/go.mod | 2 +- modules/mesh-mail-reader/go.sum | 4 ++-- modules/mesh-mail-web/go.mod | 2 +- modules/mesh-mail-web/go.sum | 4 ++-- modules/mesh-mail/go.mod | 2 +- modules/mesh-mail/go.sum | 4 ++-- modules/mesh-provisioner-client/go.mod | 2 +- modules/mesh-provisioner-client/go.sum | 4 ++-- modules/mesh-provisioner/go.mod | 2 +- modules/mesh-provisioner/go.sum | 4 ++-- modules/mesh-reads/go.mod | 2 +- modules/mesh-reads/go.sum | 4 ++-- modules/mesh-self-check/go.mod | 2 +- modules/mesh-self-check/go.sum | 4 ++-- modules/mesh-vault/go.mod | 2 +- modules/mesh-vault/go.sum | 4 ++-- modules/mesh-watcher/go.mod | 2 +- modules/mesh-watcher/go.sum | 4 ++-- modules/messenger/go.mod | 2 +- modules/messenger/go.sum | 4 ++-- modules/minio/go.mod | 2 +- modules/minio/go.sum | 4 ++-- modules/mounts/go.mod | 2 +- modules/mounts/go.sum | 4 ++-- modules/nats/go.mod | 2 +- modules/nats/go.sum | 4 ++-- modules/netcheck/go.mod | 2 +- modules/netcheck/go.sum | 4 ++-- modules/networkmanager/go.mod | 2 +- modules/networkmanager/go.sum | 4 ++-- modules/nextcloud-client/go.mod | 2 +- modules/nextcloud-client/go.sum | 4 ++-- modules/nfs-server/go.mod | 2 +- modules/nfs-server/go.sum | 4 ++-- modules/nm-applet/go.mod | 2 +- modules/nm-applet/go.sum | 4 ++-- modules/only-office/go.mod | 2 +- modules/only-office/go.sum | 4 ++-- modules/openrazer/go.mod | 2 +- modules/openrazer/go.sum | 4 ++-- modules/pacman/go.mod | 2 +- modules/pacman/go.sum | 4 ++-- modules/picom/go.mod | 2 +- modules/picom/go.sum | 4 ++-- modules/polychromatic/go.mod | 2 +- modules/polychromatic/go.sum | 4 ++-- modules/postgres/go.mod | 2 +- modules/postgres/go.sum | 4 ++-- modules/power/go.mod | 2 +- modules/power/go.sum | 4 ++-- modules/records/go.mod | 2 +- modules/records/go.sum | 4 ++-- modules/restic/go.mod | 2 +- modules/restic/go.sum | 4 ++-- modules/rofi/go.mod | 2 +- modules/rofi/go.sum | 4 ++-- modules/route-adapter/go.mod | 2 +- modules/route-adapter/go.sum | 4 ++-- modules/screen-lock/go.mod | 2 +- modules/screen-lock/go.sum | 4 ++-- modules/sensors/go.mod | 2 +- modules/sensors/go.sum | 4 ++-- modules/slack/go.mod | 2 +- modules/slack/go.sum | 4 ++-- modules/snapd/go.mod | 2 +- modules/snapd/go.sum | 4 ++-- modules/ssh-client/go.mod | 2 +- modules/ssh-client/go.sum | 4 ++-- modules/sudo/go.mod | 2 +- modules/sudo/go.sum | 4 ++-- modules/systemd-networkd/go.mod | 2 +- modules/systemd-networkd/go.sum | 4 ++-- modules/systemd-resolved/go.mod | 2 +- modules/systemd-resolved/go.sum | 4 ++-- modules/systemd/go.mod | 2 +- modules/systemd/go.sum | 4 ++-- modules/telegram/go.mod | 2 +- modules/telegram/go.sum | 4 ++-- modules/time-sync/go.mod | 2 +- modules/time-sync/go.sum | 4 ++-- modules/triggerhappy/go.mod | 2 +- modules/triggerhappy/go.sum | 4 ++-- modules/xclip/go.mod | 2 +- modules/xclip/go.sum | 4 ++-- modules/xdg/go.mod | 2 +- modules/xdg/go.sum | 4 ++-- modules/xorg/go.mod | 2 +- modules/xorg/go.sum | 4 ++-- modules/xterm/go.mod | 2 +- modules/xterm/go.sum | 4 ++-- modules/zfs/go.mod | 2 +- modules/zfs/go.sum | 4 ++-- 194 files changed, 291 insertions(+), 291 deletions(-) diff --git a/checks/credentialform/go.mod b/checks/credentialform/go.mod index 102643b1..021ef82f 100644 --- a/checks/credentialform/go.mod +++ b/checks/credentialform/go.mod @@ -2,4 +2,4 @@ module checks/credentialform go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 diff --git a/checks/credentialform/go.sum b/checks/credentialform/go.sum index 4604a84f..1126fe29 100644 --- a/checks/credentialform/go.sum +++ b/checks/credentialform/go.sum @@ -1,2 +1,2 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= diff --git a/checks/health/go.mod b/checks/health/go.mod index 5a4adff0..15a37ef7 100644 --- a/checks/health/go.mod +++ b/checks/health/go.mod @@ -2,4 +2,4 @@ module checks/health go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 diff --git a/checks/health/go.sum b/checks/health/go.sum index 4604a84f..1126fe29 100644 --- a/checks/health/go.sum +++ b/checks/health/go.sum @@ -1,2 +1,2 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= diff --git a/checks/manifests/go.mod b/checks/manifests/go.mod index 19521716..5e224f2a 100644 --- a/checks/manifests/go.mod +++ b/checks/manifests/go.mod @@ -2,4 +2,4 @@ module checks/manifests go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 diff --git a/checks/manifests/go.sum b/checks/manifests/go.sum index 4604a84f..1126fe29 100644 --- a/checks/manifests/go.sum +++ b/checks/manifests/go.sum @@ -1,2 +1,2 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= diff --git a/checks/readable/go.mod b/checks/readable/go.mod index 30bfe52f..c9ab7b7a 100644 --- a/checks/readable/go.mod +++ b/checks/readable/go.mod @@ -2,4 +2,4 @@ module checks/readable go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 diff --git a/checks/readable/go.sum b/checks/readable/go.sum index 4604a84f..1126fe29 100644 --- a/checks/readable/go.sum +++ b/checks/readable/go.sum @@ -1,2 +1,2 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= diff --git a/modules/adwaita/go.mod b/modules/adwaita/go.mod index 231ef6d8..eb8b29a5 100644 --- a/modules/adwaita/go.mod +++ b/modules/adwaita/go.mod @@ -2,7 +2,7 @@ module adwaita go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/adwaita/go.sum b/modules/adwaita/go.sum index fa41eb3f..655670ff 100644 --- a/modules/adwaita/go.sum +++ b/modules/adwaita/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/artifact-store-tools/go.mod b/modules/artifact-store-tools/go.mod index a92f4d27..599391fa 100644 --- a/modules/artifact-store-tools/go.mod +++ b/modules/artifact-store-tools/go.mod @@ -3,7 +3,7 @@ module artifactstoretools go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/artifact-store-tools/go.sum b/modules/artifact-store-tools/go.sum index d37e5982..ebd4e0f2 100644 --- a/modules/artifact-store-tools/go.sum +++ b/modules/artifact-store-tools/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/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/asus-zephyrus-g14/go.mod b/modules/asus-zephyrus-g14/go.mod index cb4b173f..1affd175 100644 --- a/modules/asus-zephyrus-g14/go.mod +++ b/modules/asus-zephyrus-g14/go.mod @@ -2,7 +2,7 @@ module asuszephyrusg14 go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/asus-zephyrus-g14/go.sum b/modules/asus-zephyrus-g14/go.sum index fa41eb3f..655670ff 100644 --- a/modules/asus-zephyrus-g14/go.sum +++ b/modules/asus-zephyrus-g14/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/avahi/go.mod b/modules/avahi/go.mod index f1c6061c..de5d61e2 100644 --- a/modules/avahi/go.mod +++ b/modules/avahi/go.mod @@ -2,7 +2,7 @@ module avahi go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/avahi/go.sum b/modules/avahi/go.sum index fa41eb3f..655670ff 100644 --- a/modules/avahi/go.sum +++ b/modules/avahi/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/blueman/go.mod b/modules/blueman/go.mod index e3afdce8..ac005193 100644 --- a/modules/blueman/go.mod +++ b/modules/blueman/go.mod @@ -2,7 +2,7 @@ module blueman go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/blueman/go.sum b/modules/blueman/go.sum index fa41eb3f..655670ff 100644 --- a/modules/blueman/go.sum +++ b/modules/blueman/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/bluetooth/go.mod b/modules/bluetooth/go.mod index 843647c6..964dfaba 100644 --- a/modules/bluetooth/go.mod +++ b/modules/bluetooth/go.mod @@ -2,7 +2,7 @@ module bluetooth go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/bluetooth/go.sum b/modules/bluetooth/go.sum index fa41eb3f..655670ff 100644 --- a/modules/bluetooth/go.sum +++ b/modules/bluetooth/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/brother/go.mod b/modules/brother/go.mod index 0cb6b28c..49887617 100644 --- a/modules/brother/go.mod +++ b/modules/brother/go.mod @@ -3,7 +3,7 @@ module brother go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/brother/go.sum b/modules/brother/go.sum index d37e5982..ebd4e0f2 100644 --- a/modules/brother/go.sum +++ b/modules/brother/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/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/claude-code/go.mod b/modules/claude-code/go.mod index 637d85ac..88ab7bdb 100644 --- a/modules/claude-code/go.mod +++ b/modules/claude-code/go.mod @@ -2,7 +2,7 @@ module claude-code go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require gopkg.in/yaml.v3 v3.0.1 diff --git a/modules/claude-code/go.sum b/modules/claude-code/go.sum index 35067935..a11c9aa4 100644 --- a/modules/claude-code/go.sum +++ b/modules/claude-code/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/claude-licence-manager/go.mod b/modules/claude-licence-manager/go.mod index a72818e2..fe684b1b 100644 --- a/modules/claude-licence-manager/go.mod +++ b/modules/claude-licence-manager/go.mod @@ -3,7 +3,7 @@ module claude-licence-manager go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/jackc/pgx/v5 v5.11.0 ) diff --git a/modules/claude-licence-manager/go.sum b/modules/claude-licence-manager/go.sum index 30f9ac33..d345545c 100644 --- a/modules/claude-licence-manager/go.sum +++ b/modules/claude-licence-manager/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/modules/clipmenu/go.mod b/modules/clipmenu/go.mod index 2828c29a..61f36353 100644 --- a/modules/clipmenu/go.mod +++ b/modules/clipmenu/go.mod @@ -2,7 +2,7 @@ module clipmenu go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/clipmenu/go.sum b/modules/clipmenu/go.sum index fa41eb3f..655670ff 100644 --- a/modules/clipmenu/go.sum +++ b/modules/clipmenu/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/cups/go.mod b/modules/cups/go.mod index 3eef284d..a65da3ad 100644 --- a/modules/cups/go.mod +++ b/modules/cups/go.mod @@ -2,7 +2,7 @@ module cups go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/cups/go.sum b/modules/cups/go.sum index fa41eb3f..655670ff 100644 --- a/modules/cups/go.sum +++ b/modules/cups/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/dbus/go.mod b/modules/dbus/go.mod index 2c823a56..cd9a329c 100644 --- a/modules/dbus/go.mod +++ b/modules/dbus/go.mod @@ -3,7 +3,7 @@ module dbus go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/godbus/dbus/v5 v5.1.0 ) diff --git a/modules/dbus/go.sum b/modules/dbus/go.sum index 445ff65c..f62c1e17 100644 --- a/modules/dbus/go.sum +++ b/modules/dbus/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= diff --git a/modules/desk-channel/go.mod b/modules/desk-channel/go.mod index 4965d967..88a561f6 100644 --- a/modules/desk-channel/go.mod +++ b/modules/desk-channel/go.mod @@ -2,7 +2,7 @@ module deskchannel go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/desk-channel/go.sum b/modules/desk-channel/go.sum index fa41eb3f..655670ff 100644 --- a/modules/desk-channel/go.sum +++ b/modules/desk-channel/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/disk-load/go.mod b/modules/disk-load/go.mod index 091f4577..dfcf98ae 100644 --- a/modules/disk-load/go.mod +++ b/modules/disk-load/go.mod @@ -3,7 +3,7 @@ module diskload go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/disk-load/go.sum b/modules/disk-load/go.sum index d37e5982..ebd4e0f2 100644 --- a/modules/disk-load/go.sum +++ b/modules/disk-load/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/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/dmenu/go.mod b/modules/dmenu/go.mod index 9cb92c4c..5237959e 100644 --- a/modules/dmenu/go.mod +++ b/modules/dmenu/go.mod @@ -2,7 +2,7 @@ module dmenu go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/dmenu/go.sum b/modules/dmenu/go.sum index fa41eb3f..655670ff 100644 --- a/modules/dmenu/go.sum +++ b/modules/dmenu/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/dnsmasq/go.mod b/modules/dnsmasq/go.mod index f60ba7da..eca7351e 100644 --- a/modules/dnsmasq/go.mod +++ b/modules/dnsmasq/go.mod @@ -2,7 +2,7 @@ module dnsmasq go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/dnsmasq/go.sum b/modules/dnsmasq/go.sum index fa41eb3f..655670ff 100644 --- a/modules/dnsmasq/go.sum +++ b/modules/dnsmasq/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/docker-compose/go.mod b/modules/docker-compose/go.mod index eea288c2..c534f9c3 100644 --- a/modules/docker-compose/go.mod +++ b/modules/docker-compose/go.mod @@ -2,7 +2,7 @@ module docker-compose go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/docker-compose/go.sum b/modules/docker-compose/go.sum index fa41eb3f..655670ff 100644 --- a/modules/docker-compose/go.sum +++ b/modules/docker-compose/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/docker/go.mod b/modules/docker/go.mod index ef7c988d..21e968ab 100644 --- a/modules/docker/go.mod +++ b/modules/docker/go.mod @@ -2,7 +2,7 @@ module docker go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/docker/go.sum b/modules/docker/go.sum index fa41eb3f..655670ff 100644 --- a/modules/docker/go.sum +++ b/modules/docker/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/dunst/go.mod b/modules/dunst/go.mod index 05bee444..ff28c4b9 100644 --- a/modules/dunst/go.mod +++ b/modules/dunst/go.mod @@ -2,7 +2,7 @@ module dunst go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/dunst/go.sum b/modules/dunst/go.sum index fa41eb3f..655670ff 100644 --- a/modules/dunst/go.sum +++ b/modules/dunst/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/fail2ban/go.mod b/modules/fail2ban/go.mod index 710efcc7..744f5199 100644 --- a/modules/fail2ban/go.mod +++ b/modules/fail2ban/go.mod @@ -2,7 +2,7 @@ module fail2ban go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/fail2ban/go.sum b/modules/fail2ban/go.sum index fa41eb3f..655670ff 100644 --- a/modules/fail2ban/go.sum +++ b/modules/fail2ban/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/feh/go.mod b/modules/feh/go.mod index 00a0cc23..e30b0520 100644 --- a/modules/feh/go.mod +++ b/modules/feh/go.mod @@ -2,7 +2,7 @@ module feh go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/feh/go.sum b/modules/feh/go.sum index fa41eb3f..655670ff 100644 --- a/modules/feh/go.sum +++ b/modules/feh/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/flatpak/go.mod b/modules/flatpak/go.mod index a35cb06a..8f75bbeb 100644 --- a/modules/flatpak/go.mod +++ b/modules/flatpak/go.mod @@ -2,7 +2,7 @@ module flatpak go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/flatpak/go.sum b/modules/flatpak/go.sum index fa41eb3f..655670ff 100644 --- a/modules/flatpak/go.sum +++ b/modules/flatpak/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/fonts/go.mod b/modules/fonts/go.mod index b803f9b1..37d85c9f 100644 --- a/modules/fonts/go.mod +++ b/modules/fonts/go.mod @@ -2,7 +2,7 @@ module fonts go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/fonts/go.sum b/modules/fonts/go.sum index fa41eb3f..655670ff 100644 --- a/modules/fonts/go.sum +++ b/modules/fonts/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/forticlient/go.mod b/modules/forticlient/go.mod index 237d53c1..2a04a9e9 100644 --- a/modules/forticlient/go.mod +++ b/modules/forticlient/go.mod @@ -2,7 +2,7 @@ module forticlient go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/forticlient/go.sum b/modules/forticlient/go.sum index fa41eb3f..655670ff 100644 --- a/modules/forticlient/go.sum +++ b/modules/forticlient/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/gitea/go.mod b/modules/gitea/go.mod index 69facc1c..afd6cf2c 100644 --- a/modules/gitea/go.mod +++ b/modules/gitea/go.mod @@ -3,7 +3,7 @@ module gitea go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 golang.org/x/crypto v0.57.0 diff --git a/modules/gitea/go.sum b/modules/gitea/go.sum index d37e5982..ebd4e0f2 100644 --- a/modules/gitea/go.sum +++ b/modules/gitea/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/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/gnome-keyring/go.mod b/modules/gnome-keyring/go.mod index 8a4e788a..c471cc17 100644 --- a/modules/gnome-keyring/go.mod +++ b/modules/gnome-keyring/go.mod @@ -2,7 +2,7 @@ module gnomekeyring go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/gnome-keyring/go.sum b/modules/gnome-keyring/go.sum index fa41eb3f..655670ff 100644 --- a/modules/gnome-keyring/go.sum +++ b/modules/gnome-keyring/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/hostname/go.mod b/modules/hostname/go.mod index b3aa8958..c357f9c3 100644 --- a/modules/hostname/go.mod +++ b/modules/hostname/go.mod @@ -2,7 +2,7 @@ module hostname go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/hostname/go.sum b/modules/hostname/go.sum index fa41eb3f..655670ff 100644 --- a/modules/hostname/go.sum +++ b/modules/hostname/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/i3/go.mod b/modules/i3/go.mod index 0f2d9acd..7d068b38 100644 --- a/modules/i3/go.mod +++ b/modules/i3/go.mod @@ -2,7 +2,7 @@ module i3 go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/i3/go.sum b/modules/i3/go.sum index fa41eb3f..655670ff 100644 --- a/modules/i3/go.sum +++ b/modules/i3/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/i3status-rust/go.mod b/modules/i3status-rust/go.mod index bca47439..0c50f682 100644 --- a/modules/i3status-rust/go.mod +++ b/modules/i3status-rust/go.mod @@ -2,7 +2,7 @@ module i3statusrust go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/i3status-rust/go.sum b/modules/i3status-rust/go.sum index fa41eb3f..655670ff 100644 --- a/modules/i3status-rust/go.sum +++ b/modules/i3status-rust/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/kernel/go.mod b/modules/kernel/go.mod index 6212aeff..6900b64f 100644 --- a/modules/kernel/go.mod +++ b/modules/kernel/go.mod @@ -2,7 +2,7 @@ module kernel go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/kernel/go.sum b/modules/kernel/go.sum index fa41eb3f..655670ff 100644 --- a/modules/kernel/go.sum +++ b/modules/kernel/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/keycloak/go.mod b/modules/keycloak/go.mod index c9a099bb..8e585c99 100644 --- a/modules/keycloak/go.mod +++ b/modules/keycloak/go.mod @@ -2,7 +2,7 @@ module keycloak go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/keycloak/go.sum b/modules/keycloak/go.sum index fa41eb3f..655670ff 100644 --- a/modules/keycloak/go.sum +++ b/modules/keycloak/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/lemurs/go.mod b/modules/lemurs/go.mod index 9c280154..484405f2 100644 --- a/modules/lemurs/go.mod +++ b/modules/lemurs/go.mod @@ -2,7 +2,7 @@ module lemurs go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/lemurs/go.sum b/modules/lemurs/go.sum index fa41eb3f..655670ff 100644 --- a/modules/lemurs/go.sum +++ b/modules/lemurs/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/localization/go.mod b/modules/localization/go.mod index 8266c382..348764e6 100644 --- a/modules/localization/go.mod +++ b/modules/localization/go.mod @@ -2,7 +2,7 @@ module localization go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/localization/go.sum b/modules/localization/go.sum index fa41eb3f..655670ff 100644 --- a/modules/localization/go.sum +++ b/modules/localization/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/logrotate/go.mod b/modules/logrotate/go.mod index 09adb00e..48144d02 100644 --- a/modules/logrotate/go.mod +++ b/modules/logrotate/go.mod @@ -2,7 +2,7 @@ module logrotate go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/logrotate/go.sum b/modules/logrotate/go.sum index fa41eb3f..655670ff 100644 --- a/modules/logrotate/go.sum +++ b/modules/logrotate/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/memory-pressure/go.mod b/modules/memory-pressure/go.mod index 2e7b894c..03102de2 100644 --- a/modules/memory-pressure/go.mod +++ b/modules/memory-pressure/go.mod @@ -2,7 +2,7 @@ module memorypressure go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/memory-pressure/go.sum b/modules/memory-pressure/go.sum index fa41eb3f..655670ff 100644 --- a/modules/memory-pressure/go.sum +++ b/modules/memory-pressure/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/mesh-build-go/go.mod b/modules/mesh-build-go/go.mod index b0d14dd1..ecc6c384 100644 --- a/modules/mesh-build-go/go.mod +++ b/modules/mesh-build-go/go.mod @@ -3,7 +3,7 @@ module meshbuildgo go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/distribution/distribution/v3 v3.1.2 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 diff --git a/modules/mesh-build-go/go.sum b/modules/mesh-build-go/go.sum index cc6c02b2..273a19b8 100644 --- a/modules/mesh-build-go/go.sum +++ b/modules/mesh-build-go/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/alicebob/miniredis/v2 v2.35.0 h1:QwLphYqCEAo1eu1TqPRN2jgVMPBweeQcR21jeqDCONI= github.com/alicebob/miniredis/v2 v2.35.0/go.mod h1:TcL7YfarKPGDAthEtl5NBeHZfeUQj6OXMm/+iu5cLMM= github.com/antithesishq/antithesis-sdk-go v0.7.0-default-no-op h1:Z/MZK75wC/NSrkgqeNIa7jexam9uWzhLmFTSCPI/kn0= diff --git a/modules/mesh-build-image/go.mod b/modules/mesh-build-image/go.mod index 40c3f538..9d012d8d 100644 --- a/modules/mesh-build-image/go.mod +++ b/modules/mesh-build-image/go.mod @@ -3,7 +3,7 @@ module meshbuildimage go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-build-image/go.sum b/modules/mesh-build-image/go.sum index d37e5982..ebd4e0f2 100644 --- a/modules/mesh-build-image/go.sum +++ b/modules/mesh-build-image/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/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-build-node/go.mod b/modules/mesh-build-node/go.mod index 34957f4d..62a70986 100644 --- a/modules/mesh-build-node/go.mod +++ b/modules/mesh-build-node/go.mod @@ -3,7 +3,7 @@ module meshbuildnode go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/distribution/distribution/v3 v3.1.2 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-build-node/go.sum b/modules/mesh-build-node/go.sum index 295b8cc3..b2cee3b1 100644 --- a/modules/mesh-build-node/go.sum +++ b/modules/mesh-build-node/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/alicebob/miniredis/v2 v2.35.0 h1:QwLphYqCEAo1eu1TqPRN2jgVMPBweeQcR21jeqDCONI= github.com/alicebob/miniredis/v2 v2.35.0/go.mod h1:TcL7YfarKPGDAthEtl5NBeHZfeUQj6OXMm/+iu5cLMM= github.com/antithesishq/antithesis-sdk-go v0.7.0-default-no-op h1:Z/MZK75wC/NSrkgqeNIa7jexam9uWzhLmFTSCPI/kn0= diff --git a/modules/mesh-conditions/go.mod b/modules/mesh-conditions/go.mod index fe87bde2..8efb38bf 100644 --- a/modules/mesh-conditions/go.mod +++ b/modules/mesh-conditions/go.mod @@ -3,7 +3,7 @@ module mesh-conditions go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-conditions/go.sum b/modules/mesh-conditions/go.sum index d37e5982..ebd4e0f2 100644 --- a/modules/mesh-conditions/go.sum +++ b/modules/mesh-conditions/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/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-config/go.mod b/modules/mesh-config/go.mod index 686dbf0e..6a1e13bb 100644 --- a/modules/mesh-config/go.mod +++ b/modules/mesh-config/go.mod @@ -2,7 +2,7 @@ module mesh-config go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/mesh-config/go.sum b/modules/mesh-config/go.sum index fa41eb3f..655670ff 100644 --- a/modules/mesh-config/go.sum +++ b/modules/mesh-config/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/mesh-delivery-gate/go.mod b/modules/mesh-delivery-gate/go.mod index 765fcda2..d8a2afd2 100644 --- a/modules/mesh-delivery-gate/go.mod +++ b/modules/mesh-delivery-gate/go.mod @@ -3,7 +3,7 @@ module mesh-delivery-gate go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 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-gate/go.sum b/modules/mesh-delivery-gate/go.sum index d37e5982..ebd4e0f2 100644 --- a/modules/mesh-delivery-gate/go.sum +++ b/modules/mesh-delivery-gate/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/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-files/go.mod b/modules/mesh-files/go.mod index c95e2e80..3c9645de 100644 --- a/modules/mesh-files/go.mod +++ b/modules/mesh-files/go.mod @@ -2,7 +2,7 @@ module mesh-files go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/mesh-files/go.sum b/modules/mesh-files/go.sum index fa41eb3f..655670ff 100644 --- a/modules/mesh-files/go.sum +++ b/modules/mesh-files/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/mesh-hand-acts/go.mod b/modules/mesh-hand-acts/go.mod index 023805c6..a96e2745 100644 --- a/modules/mesh-hand-acts/go.mod +++ b/modules/mesh-hand-acts/go.mod @@ -3,7 +3,7 @@ module mesh-hand-acts go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-hand-acts/go.sum b/modules/mesh-hand-acts/go.sum index d37e5982..ebd4e0f2 100644 --- a/modules/mesh-hand-acts/go.sum +++ b/modules/mesh-hand-acts/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/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-healers/go.mod b/modules/mesh-healers/go.mod index 1abd71f6..f43bc572 100644 --- a/modules/mesh-healers/go.mod +++ b/modules/mesh-healers/go.mod @@ -3,7 +3,7 @@ module mesh-healers go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-healers/go.sum b/modules/mesh-healers/go.sum index d37e5982..ebd4e0f2 100644 --- a/modules/mesh-healers/go.sum +++ b/modules/mesh-healers/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/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-issues/go.mod b/modules/mesh-issues/go.mod index ad285222..06ae9946 100644 --- a/modules/mesh-issues/go.mod +++ b/modules/mesh-issues/go.mod @@ -3,7 +3,7 @@ module mesh-issues go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-issues/go.sum b/modules/mesh-issues/go.sum index d37e5982..ebd4e0f2 100644 --- a/modules/mesh-issues/go.sum +++ b/modules/mesh-issues/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/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-knowledge/go.mod b/modules/mesh-knowledge/go.mod index aa5ad388..a6d68d14 100644 --- a/modules/mesh-knowledge/go.mod +++ b/modules/mesh-knowledge/go.mod @@ -3,7 +3,7 @@ module mesh-knowledge go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/jackc/pgx/v5 v5.11.0 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 diff --git a/modules/mesh-knowledge/go.sum b/modules/mesh-knowledge/go.sum index a299bc95..6fff9fdf 100644 --- a/modules/mesh-knowledge/go.sum +++ b/modules/mesh-knowledge/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/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/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/modules/mesh-mail-notifier/go.mod b/modules/mesh-mail-notifier/go.mod index 2e935f6e..e9c98c99 100644 --- a/modules/mesh-mail-notifier/go.mod +++ b/modules/mesh-mail-notifier/go.mod @@ -2,7 +2,7 @@ module mesh-mail-notifier go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/mesh-mail-notifier/go.sum b/modules/mesh-mail-notifier/go.sum index fa41eb3f..655670ff 100644 --- a/modules/mesh-mail-notifier/go.sum +++ b/modules/mesh-mail-notifier/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/mesh-mail-reader/go.mod b/modules/mesh-mail-reader/go.mod index a2ad21b5..d30f7ace 100644 --- a/modules/mesh-mail-reader/go.mod +++ b/modules/mesh-mail-reader/go.mod @@ -3,7 +3,7 @@ module mesh-mail-reader go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/jackc/pgx/v5 v5.11.0 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 diff --git a/modules/mesh-mail-reader/go.sum b/modules/mesh-mail-reader/go.sum index a299bc95..6fff9fdf 100644 --- a/modules/mesh-mail-reader/go.sum +++ b/modules/mesh-mail-reader/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/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/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/modules/mesh-mail-web/go.mod b/modules/mesh-mail-web/go.mod index 0dcbeeb8..08cb2d3a 100644 --- a/modules/mesh-mail-web/go.mod +++ b/modules/mesh-mail-web/go.mod @@ -3,7 +3,7 @@ module mesh-mail-web go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/coreos/go-oidc/v3 v3.21.0 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 diff --git a/modules/mesh-mail-web/go.sum b/modules/mesh-mail-web/go.sum index 5c45f9e8..94b599b0 100644 --- a/modules/mesh-mail-web/go.sum +++ b/modules/mesh-mail-web/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/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/coreos/go-oidc/v3 v3.21.0 h1:wZo4Q9Pum8dYEj0eMUPrqR+kvuGkeUplbLpNCkBqoWM= diff --git a/modules/mesh-mail/go.mod b/modules/mesh-mail/go.mod index 0ff1d4a4..6a6f27cf 100644 --- a/modules/mesh-mail/go.mod +++ b/modules/mesh-mail/go.mod @@ -3,7 +3,7 @@ module mesh-mail go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/emersion/go-imap/v2 v2.0.0-beta.8 github.com/emersion/go-message v0.18.2 github.com/jackc/pgx/v5 v5.11.0 diff --git a/modules/mesh-mail/go.sum b/modules/mesh-mail/go.sum index 5cd44b7a..43d91624 100644 --- a/modules/mesh-mail/go.sum +++ b/modules/mesh-mail/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/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/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/modules/mesh-provisioner-client/go.mod b/modules/mesh-provisioner-client/go.mod index b00801c1..afab2282 100644 --- a/modules/mesh-provisioner-client/go.mod +++ b/modules/mesh-provisioner-client/go.mod @@ -3,7 +3,7 @@ module mesh-provisioner-client go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 golang.org/x/sys v0.48.0 diff --git a/modules/mesh-provisioner-client/go.sum b/modules/mesh-provisioner-client/go.sum index d37e5982..ebd4e0f2 100644 --- a/modules/mesh-provisioner-client/go.sum +++ b/modules/mesh-provisioner-client/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/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-provisioner/go.mod b/modules/mesh-provisioner/go.mod index 8a4f096e..c752b8f5 100644 --- a/modules/mesh-provisioner/go.mod +++ b/modules/mesh-provisioner/go.mod @@ -3,7 +3,7 @@ module mesh-provisioner go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-provisioner/go.sum b/modules/mesh-provisioner/go.sum index d37e5982..ebd4e0f2 100644 --- a/modules/mesh-provisioner/go.sum +++ b/modules/mesh-provisioner/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/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-reads/go.mod b/modules/mesh-reads/go.mod index e4b1d9d9..a9ebfc7c 100644 --- a/modules/mesh-reads/go.mod +++ b/modules/mesh-reads/go.mod @@ -2,7 +2,7 @@ module mesh-reads go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/mesh-reads/go.sum b/modules/mesh-reads/go.sum index fa41eb3f..655670ff 100644 --- a/modules/mesh-reads/go.sum +++ b/modules/mesh-reads/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/mesh-self-check/go.mod b/modules/mesh-self-check/go.mod index c618e9ae..ac1a36d3 100644 --- a/modules/mesh-self-check/go.mod +++ b/modules/mesh-self-check/go.mod @@ -3,7 +3,7 @@ module mesh-self-check go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-self-check/go.sum b/modules/mesh-self-check/go.sum index d37e5982..ebd4e0f2 100644 --- a/modules/mesh-self-check/go.sum +++ b/modules/mesh-self-check/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/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-vault/go.mod b/modules/mesh-vault/go.mod index ccc4dba0..fd4d77f4 100644 --- a/modules/mesh-vault/go.mod +++ b/modules/mesh-vault/go.mod @@ -3,7 +3,7 @@ module mesh-vault go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 golang.org/x/crypto v0.57.0 diff --git a/modules/mesh-vault/go.sum b/modules/mesh-vault/go.sum index d37e5982..ebd4e0f2 100644 --- a/modules/mesh-vault/go.sum +++ b/modules/mesh-vault/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/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-watcher/go.mod b/modules/mesh-watcher/go.mod index 6f6129ea..3e8ae9b0 100644 --- a/modules/mesh-watcher/go.mod +++ b/modules/mesh-watcher/go.mod @@ -2,7 +2,7 @@ module mesh-watcher go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/mesh-watcher/go.sum b/modules/mesh-watcher/go.sum index fa41eb3f..655670ff 100644 --- a/modules/mesh-watcher/go.sum +++ b/modules/mesh-watcher/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/messenger/go.mod b/modules/messenger/go.mod index 72cfa00f..1423964e 100644 --- a/modules/messenger/go.mod +++ b/modules/messenger/go.mod @@ -3,7 +3,7 @@ module messenger go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/messenger/go.sum b/modules/messenger/go.sum index d37e5982..ebd4e0f2 100644 --- a/modules/messenger/go.sum +++ b/modules/messenger/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/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/minio/go.mod b/modules/minio/go.mod index 44bbd250..64717ee0 100644 --- a/modules/minio/go.mod +++ b/modules/minio/go.mod @@ -2,7 +2,7 @@ module minio go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/minio/go.sum b/modules/minio/go.sum index fa41eb3f..655670ff 100644 --- a/modules/minio/go.sum +++ b/modules/minio/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/mounts/go.mod b/modules/mounts/go.mod index 0aae0836..6b9009ae 100644 --- a/modules/mounts/go.mod +++ b/modules/mounts/go.mod @@ -2,7 +2,7 @@ module mounts go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/mounts/go.sum b/modules/mounts/go.sum index fa41eb3f..655670ff 100644 --- a/modules/mounts/go.sum +++ b/modules/mounts/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/nats/go.mod b/modules/nats/go.mod index 361df90e..fff7bd8a 100644 --- a/modules/nats/go.mod +++ b/modules/nats/go.mod @@ -3,7 +3,7 @@ module nats-tools go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/klauspost/compress v1.20.0 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 diff --git a/modules/nats/go.sum b/modules/nats/go.sum index d37e5982..ebd4e0f2 100644 --- a/modules/nats/go.sum +++ b/modules/nats/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/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/netcheck/go.mod b/modules/netcheck/go.mod index 28220c85..6d3c284c 100644 --- a/modules/netcheck/go.mod +++ b/modules/netcheck/go.mod @@ -2,7 +2,7 @@ module netcheck go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/netcheck/go.sum b/modules/netcheck/go.sum index fa41eb3f..655670ff 100644 --- a/modules/netcheck/go.sum +++ b/modules/netcheck/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/networkmanager/go.mod b/modules/networkmanager/go.mod index 7921948f..6dd75e7c 100644 --- a/modules/networkmanager/go.mod +++ b/modules/networkmanager/go.mod @@ -2,7 +2,7 @@ module networkmanager go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/networkmanager/go.sum b/modules/networkmanager/go.sum index fa41eb3f..655670ff 100644 --- a/modules/networkmanager/go.sum +++ b/modules/networkmanager/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/nextcloud-client/go.mod b/modules/nextcloud-client/go.mod index f930f455..c8e96ead 100644 --- a/modules/nextcloud-client/go.mod +++ b/modules/nextcloud-client/go.mod @@ -2,7 +2,7 @@ module nextcloud-client go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/nextcloud-client/go.sum b/modules/nextcloud-client/go.sum index fa41eb3f..655670ff 100644 --- a/modules/nextcloud-client/go.sum +++ b/modules/nextcloud-client/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/nfs-server/go.mod b/modules/nfs-server/go.mod index 855dd411..00dfaeff 100644 --- a/modules/nfs-server/go.mod +++ b/modules/nfs-server/go.mod @@ -2,7 +2,7 @@ module nfsserver go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/nfs-server/go.sum b/modules/nfs-server/go.sum index fa41eb3f..655670ff 100644 --- a/modules/nfs-server/go.sum +++ b/modules/nfs-server/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/nm-applet/go.mod b/modules/nm-applet/go.mod index 2cdefe1e..00c35e1b 100644 --- a/modules/nm-applet/go.mod +++ b/modules/nm-applet/go.mod @@ -2,7 +2,7 @@ module nm-applet go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/nm-applet/go.sum b/modules/nm-applet/go.sum index fa41eb3f..655670ff 100644 --- a/modules/nm-applet/go.sum +++ b/modules/nm-applet/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/only-office/go.mod b/modules/only-office/go.mod index ee2fcb37..c95a4d6b 100644 --- a/modules/only-office/go.mod +++ b/modules/only-office/go.mod @@ -3,7 +3,7 @@ module only-office go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/only-office/go.sum b/modules/only-office/go.sum index d37e5982..ebd4e0f2 100644 --- a/modules/only-office/go.sum +++ b/modules/only-office/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/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/openrazer/go.mod b/modules/openrazer/go.mod index 57ec450c..bda5be70 100644 --- a/modules/openrazer/go.mod +++ b/modules/openrazer/go.mod @@ -2,7 +2,7 @@ module openrazer go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/openrazer/go.sum b/modules/openrazer/go.sum index fa41eb3f..655670ff 100644 --- a/modules/openrazer/go.sum +++ b/modules/openrazer/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/pacman/go.mod b/modules/pacman/go.mod index 95f80a76..a7da4e18 100644 --- a/modules/pacman/go.mod +++ b/modules/pacman/go.mod @@ -3,7 +3,7 @@ module pacman go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/nats-io/nats-server/v2 v2.11.17 ) diff --git a/modules/pacman/go.sum b/modules/pacman/go.sum index d37e5982..ebd4e0f2 100644 --- a/modules/pacman/go.sum +++ b/modules/pacman/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/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/picom/go.mod b/modules/picom/go.mod index 21644553..5faa21dd 100644 --- a/modules/picom/go.mod +++ b/modules/picom/go.mod @@ -2,7 +2,7 @@ module picom go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/picom/go.sum b/modules/picom/go.sum index fa41eb3f..655670ff 100644 --- a/modules/picom/go.sum +++ b/modules/picom/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/polychromatic/go.mod b/modules/polychromatic/go.mod index 3baea465..390707b4 100644 --- a/modules/polychromatic/go.mod +++ b/modules/polychromatic/go.mod @@ -2,7 +2,7 @@ module polychromatic go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/polychromatic/go.sum b/modules/polychromatic/go.sum index fa41eb3f..655670ff 100644 --- a/modules/polychromatic/go.sum +++ b/modules/polychromatic/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/postgres/go.mod b/modules/postgres/go.mod index 922d28cc..5c22f026 100644 --- a/modules/postgres/go.mod +++ b/modules/postgres/go.mod @@ -3,7 +3,7 @@ module postgres go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/jackc/pgx/v5 v5.11.0 ) diff --git a/modules/postgres/go.sum b/modules/postgres/go.sum index 30f9ac33..d345545c 100644 --- a/modules/postgres/go.sum +++ b/modules/postgres/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/modules/power/go.mod b/modules/power/go.mod index 9578bab2..4fdf1c01 100644 --- a/modules/power/go.mod +++ b/modules/power/go.mod @@ -3,7 +3,7 @@ module power go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/godbus/dbus/v5 v5.1.0 ) diff --git a/modules/power/go.sum b/modules/power/go.sum index 445ff65c..f62c1e17 100644 --- a/modules/power/go.sum +++ b/modules/power/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= diff --git a/modules/records/go.mod b/modules/records/go.mod index 14733ef6..31996e26 100644 --- a/modules/records/go.mod +++ b/modules/records/go.mod @@ -2,7 +2,7 @@ module records go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/records/go.sum b/modules/records/go.sum index fa41eb3f..655670ff 100644 --- a/modules/records/go.sum +++ b/modules/records/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/restic/go.mod b/modules/restic/go.mod index b67a05a9..ae1f1ca6 100644 --- a/modules/restic/go.mod +++ b/modules/restic/go.mod @@ -2,7 +2,7 @@ module restic go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/restic/go.sum b/modules/restic/go.sum index fa41eb3f..655670ff 100644 --- a/modules/restic/go.sum +++ b/modules/restic/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/rofi/go.mod b/modules/rofi/go.mod index d7e0dfdc..ae6b6c61 100644 --- a/modules/rofi/go.mod +++ b/modules/rofi/go.mod @@ -2,7 +2,7 @@ module rofi go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/rofi/go.sum b/modules/rofi/go.sum index fa41eb3f..655670ff 100644 --- a/modules/rofi/go.sum +++ b/modules/rofi/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/route-adapter/go.mod b/modules/route-adapter/go.mod index 1bbd93c5..d505c8e7 100644 --- a/modules/route-adapter/go.mod +++ b/modules/route-adapter/go.mod @@ -2,7 +2,7 @@ module route-adapter go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/route-adapter/go.sum b/modules/route-adapter/go.sum index fa41eb3f..655670ff 100644 --- a/modules/route-adapter/go.sum +++ b/modules/route-adapter/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/screen-lock/go.mod b/modules/screen-lock/go.mod index f2f5d3ac..a10db3b8 100644 --- a/modules/screen-lock/go.mod +++ b/modules/screen-lock/go.mod @@ -2,7 +2,7 @@ module screenlock go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/screen-lock/go.sum b/modules/screen-lock/go.sum index fa41eb3f..655670ff 100644 --- a/modules/screen-lock/go.sum +++ b/modules/screen-lock/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/sensors/go.mod b/modules/sensors/go.mod index ad09f717..d38d67bb 100644 --- a/modules/sensors/go.mod +++ b/modules/sensors/go.mod @@ -2,7 +2,7 @@ module sensors go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/sensors/go.sum b/modules/sensors/go.sum index fa41eb3f..655670ff 100644 --- a/modules/sensors/go.sum +++ b/modules/sensors/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/slack/go.mod b/modules/slack/go.mod index c968b55f..cb076db9 100644 --- a/modules/slack/go.mod +++ b/modules/slack/go.mod @@ -2,7 +2,7 @@ module slack go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/slack/go.sum b/modules/slack/go.sum index fa41eb3f..655670ff 100644 --- a/modules/slack/go.sum +++ b/modules/slack/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/snapd/go.mod b/modules/snapd/go.mod index 21977085..7fa54dcb 100644 --- a/modules/snapd/go.mod +++ b/modules/snapd/go.mod @@ -2,7 +2,7 @@ module snapd go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/snapd/go.sum b/modules/snapd/go.sum index fa41eb3f..655670ff 100644 --- a/modules/snapd/go.sum +++ b/modules/snapd/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/ssh-client/go.mod b/modules/ssh-client/go.mod index aa044960..39b08a69 100644 --- a/modules/ssh-client/go.mod +++ b/modules/ssh-client/go.mod @@ -3,7 +3,7 @@ module sshclient go 1.26.0 require ( - git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 github.com/nats-io/nats-server/v2 v2.11.17 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/ssh-client/go.sum b/modules/ssh-client/go.sum index d37e5982..ebd4e0f2 100644 --- a/modules/ssh-client/go.sum +++ b/modules/ssh-client/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/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/sudo/go.mod b/modules/sudo/go.mod index c168746f..72ae4884 100644 --- a/modules/sudo/go.mod +++ b/modules/sudo/go.mod @@ -2,7 +2,7 @@ module sudo go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/sudo/go.sum b/modules/sudo/go.sum index fa41eb3f..655670ff 100644 --- a/modules/sudo/go.sum +++ b/modules/sudo/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/systemd-networkd/go.mod b/modules/systemd-networkd/go.mod index 6a4bc42b..b2dc08d6 100644 --- a/modules/systemd-networkd/go.mod +++ b/modules/systemd-networkd/go.mod @@ -2,7 +2,7 @@ module systemd-networkd go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/systemd-networkd/go.sum b/modules/systemd-networkd/go.sum index fa41eb3f..655670ff 100644 --- a/modules/systemd-networkd/go.sum +++ b/modules/systemd-networkd/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/systemd-resolved/go.mod b/modules/systemd-resolved/go.mod index 033f8d0a..7478e23d 100644 --- a/modules/systemd-resolved/go.mod +++ b/modules/systemd-resolved/go.mod @@ -2,7 +2,7 @@ module systemd-resolved go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/systemd-resolved/go.sum b/modules/systemd-resolved/go.sum index fa41eb3f..655670ff 100644 --- a/modules/systemd-resolved/go.sum +++ b/modules/systemd-resolved/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/systemd/go.mod b/modules/systemd/go.mod index 74c6529b..9738c320 100644 --- a/modules/systemd/go.mod +++ b/modules/systemd/go.mod @@ -2,7 +2,7 @@ module systemd-tools go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/systemd/go.sum b/modules/systemd/go.sum index fa41eb3f..655670ff 100644 --- a/modules/systemd/go.sum +++ b/modules/systemd/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/telegram/go.mod b/modules/telegram/go.mod index 1a2c3497..07d17b88 100644 --- a/modules/telegram/go.mod +++ b/modules/telegram/go.mod @@ -2,7 +2,7 @@ module telegram go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/telegram/go.sum b/modules/telegram/go.sum index fa41eb3f..655670ff 100644 --- a/modules/telegram/go.sum +++ b/modules/telegram/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/time-sync/go.mod b/modules/time-sync/go.mod index fc189d14..fa0c66e8 100644 --- a/modules/time-sync/go.mod +++ b/modules/time-sync/go.mod @@ -2,7 +2,7 @@ module time-sync go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/time-sync/go.sum b/modules/time-sync/go.sum index fa41eb3f..655670ff 100644 --- a/modules/time-sync/go.sum +++ b/modules/time-sync/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/triggerhappy/go.mod b/modules/triggerhappy/go.mod index a33c0c1e..b88189f6 100644 --- a/modules/triggerhappy/go.mod +++ b/modules/triggerhappy/go.mod @@ -2,7 +2,7 @@ module triggerhappy go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/triggerhappy/go.sum b/modules/triggerhappy/go.sum index fa41eb3f..655670ff 100644 --- a/modules/triggerhappy/go.sum +++ b/modules/triggerhappy/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/xclip/go.mod b/modules/xclip/go.mod index a07d1bc3..dcc8f7e1 100644 --- a/modules/xclip/go.mod +++ b/modules/xclip/go.mod @@ -2,7 +2,7 @@ module xclip go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/xclip/go.sum b/modules/xclip/go.sum index fa41eb3f..655670ff 100644 --- a/modules/xclip/go.sum +++ b/modules/xclip/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/xdg/go.mod b/modules/xdg/go.mod index 5cc2237e..c4302e9d 100644 --- a/modules/xdg/go.mod +++ b/modules/xdg/go.mod @@ -2,7 +2,7 @@ module xdg go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/xdg/go.sum b/modules/xdg/go.sum index fa41eb3f..655670ff 100644 --- a/modules/xdg/go.sum +++ b/modules/xdg/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/xorg/go.mod b/modules/xorg/go.mod index ce87a439..2d864e65 100644 --- a/modules/xorg/go.mod +++ b/modules/xorg/go.mod @@ -2,7 +2,7 @@ module xorg go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/xorg/go.sum b/modules/xorg/go.sum index fa41eb3f..655670ff 100644 --- a/modules/xorg/go.sum +++ b/modules/xorg/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/xterm/go.mod b/modules/xterm/go.mod index 3fb24444..0b5894c9 100644 --- a/modules/xterm/go.mod +++ b/modules/xterm/go.mod @@ -2,7 +2,7 @@ module xterm go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/xterm/go.sum b/modules/xterm/go.sum index fa41eb3f..655670ff 100644 --- a/modules/xterm/go.sum +++ b/modules/xterm/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= diff --git a/modules/zfs/go.mod b/modules/zfs/go.mod index 215fdaae..0a37acd3 100644 --- a/modules/zfs/go.mod +++ b/modules/zfs/go.mod @@ -2,7 +2,7 @@ module zfstools go 1.26.0 -require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/zfs/go.sum b/modules/zfs/go.sum index fa41eb3f..655670ff 100644 --- a/modules/zfs/go.sum +++ b/modules/zfs/go.sum @@ -1,5 +1,5 @@ -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794 h1:/yChE1zgvQsglpBEIl0j550cr8b4m6DfYjddWHjlQK8= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102111821-f56992403794/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791 h1:7SYIDPMxbPBr8dMB6k9fYsgVt4ZyWVL41q4LMFsfAvs= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261102112556-abf5eace7791/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= github.com/klauspost/compress v1.20.0 h1:a3C1ke2ohxFymNlb2HWAHjDeKCI90scRskErZkR0ezA= github.com/klauspost/compress v1.20.0/go.mod h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI= github.com/nats-io/nats.go v1.54.0 h1:vsXoOxjHp/GmPUN+EcI7uOf/uB+iAP+kEsAFNQN0yzA= From 7c5df1d7aa29165069d4057ee6daa33ddd65eba6 Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 12:49:38 +0100 Subject: [PATCH 26/27] Decide a pin on a pull request head from the forge, not from go's words The group's check has no name lookup, so go failed on the network before it could say it knew no such revision, and the fetch, reading go's words, took the asked head for a download failure. Whether a commit is a pull request's head is now the forge's fact, asked whenever go cannot fetch it; go's words only label a commit on no head (issue 1748, issue 1126 review 2). Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- .../mesh-build-go/cmd/mesh-build-go/pins.go | 19 ++++++++++++++++-- .../cmd/mesh-build-go/versions.go | 17 +++++++++------- .../cmd/mesh-build-go/versions_test.go | 20 ++++++++++++------- 3 files changed, 40 insertions(+), 16 deletions(-) diff --git a/modules/mesh-build-go/cmd/mesh-build-go/pins.go b/modules/mesh-build-go/cmd/mesh-build-go/pins.go index d8b2f05f..a4452e41 100644 --- a/modules/mesh-build-go/cmd/mesh-build-go/pins.go +++ b/modules/mesh-build-go/cmd/mesh-build-go/pins.go @@ -10,6 +10,7 @@ package main import ( "context" + "errors" "fmt" "os" "path/filepath" @@ -106,10 +107,14 @@ func (m *Module) resolvePins(ctx context.Context, root, dir, failure string) (bo } progress := false for _, p := range forgePins(string(raw)) { - if !unknownRevision(failure) || !strings.Contains(failure, p.short) || strings.Contains(done, "replace "+p.module+" =>") { + if !strings.Contains(failure, p.short) || strings.Contains(done, "replace "+p.module+" =>") { continue } where, err := m.placePin(ctx, root, p, failure) + if errors.Is(err, errNotAHead) { + // On no pull request head: go's failure is the caller's, in go's own words (issue 1748). + continue + } if err != nil { return false, err } @@ -121,8 +126,15 @@ func (m *Module) resolvePins(ctx context.Context, root, dir, failure string) (bo return progress, nil } +// errNotAHead is a pin whose commit no pull request head of the forge carries, when go's failure was not go knowing no +// such revision: the failure is the network's or the forge's, and the caller says it in go's words (issue 1748). +var errNotAHead = errors.New("on no pull request head") + // placePin finds the commit of a pin among the pull request heads of the forge, places the repository at it beside -// the workspace (the way a fetch places a sibling) and answers the directory of the module in it. +// the workspace (the way a fetch places a sibling) and answers the directory of the module in it. **Whether a commit is +// a head is the forge's fact** (issue 1126 review 2), never read from go's words: a group's check may have no name lookup, +// and go then fails on the network before it can say it knows no such revision. go's failure only labels a commit on no +// head: an unknown revision is said so, any other failure is errNotAHead, the caller's to say. func (m *Module) placePin(ctx context.Context, root string, p pin, failure string) (string, error) { repository := "novox/" + p.repo r := m.Run(ctx, []string{"GIT_TERMINAL_PROMPT=0"}, "git", "-c", "credential.helper=", "ls-remote", m.remote(repository), "refs/pull/*/head") @@ -137,6 +149,9 @@ func (m *Module) placePin(ctx context.Context, root string, p pin, failure strin } } if commit == "" { + if !unknownRevision(failure) { + return "", errNotAHead + } return "", fmt.Errorf("the pin of %s at commit %s is on no pull request head of %s on the forge; go said: %s", p.module, p.short, repository, causeLine(failure)) } // One placement per repository and commit, shared by every go.mod directory of the tree that pins it. diff --git a/modules/mesh-build-go/cmd/mesh-build-go/versions.go b/modules/mesh-build-go/cmd/mesh-build-go/versions.go index d580c04f..726319b6 100644 --- a/modules/mesh-build-go/cmd/mesh-build-go/versions.go +++ b/modules/mesh-build-go/cmd/mesh-build-go/versions.go @@ -17,6 +17,7 @@ package main import ( "context" "encoding/json" + "errors" "fmt" "maps" "os" @@ -102,16 +103,18 @@ func (m *Module) takeVersion(ctx context.Context, root, dir string, tv *TakenVer _ = json.Unmarshal([]byte(r.Stdout), &info) if r.Status != 0 || r.Err != "" || info.Version == "" || info.Error != "" { // Not a commit Go can fetch: the head of a group's pull request (ADR 0573 §4), placed from the forge's heads. + // Whether it is one is the forge's fact (placePin), whatever go said. failure := strings.TrimSpace(info.Error + "\n" + r.Err + "\n" + r.Stderr) - if !unknownRevision(failure) { - // A download that failed for another cause (the forge or the resolver did not answer) says nothing of the pin: it - // fails with go's own words, and not as a kind the builder holds until the module changes (issue 1748). - return fmt.Errorf("downloading the asked version %s of %s failed (a download failure that may be retaken): %s", tv.Asked, tv.Package, causeLine(failure)) - } repo, sub, _ := strings.Cut(strings.TrimPrefix(tv.Package, forgePrefix), "/") p := pin{module: tv.Package, repo: repo, sub: sub, short: tv.Asked[:12]} pins.Lock() where, err := m.placePin(ctx, root, p, failure) + if errors.Is(err, errNotAHead) { + pins.Unlock() + // On no head, and go failed for another cause (the forge or the resolver did not answer): it fails with go's own + // words, and not as a kind the builder holds until the module changes (issue 1748). + return fmt.Errorf("downloading the asked version %s of %s failed (a download failure that may be retaken): %s", tv.Asked, tv.Package, causeLine(failure)) + } if err == nil { err = m.replaceInModfile(dir, tv.Package, where) } @@ -270,8 +273,8 @@ func comparePre(a, b string) int { } // unknownRevision says whether a go failure is go not knowing the revision (cmd/go's "unknown revision" and the -// "invalid version" it wraps it in): the only failure that means a commit no tag or trunk holds, which may be the head of a -// pull request. Every other failure is the network's or the forge's. +// "invalid version" it wraps it in): it labels a commit the forge holds on no pull request head (placePin), and decides +// nothing; every other failure is the network's or the forge's. func unknownRevision(failure string) bool { return strings.Contains(failure, "unknown revision") || strings.Contains(failure, "invalid version") } diff --git a/modules/mesh-build-go/cmd/mesh-build-go/versions_test.go b/modules/mesh-build-go/cmd/mesh-build-go/versions_test.go index 00c82a64..b5288c37 100644 --- a/modules/mesh-build-go/cmd/mesh-build-go/versions_test.go +++ b/modules/mesh-build-go/cmd/mesh-build-go/versions_test.go @@ -20,6 +20,7 @@ import ( func TestAnAskedVersionIsWrittenIntoTheModfileWhateverGoModNames(t *testing.T) { const sdk = "git.novox.be/novox/mesh-sdk/go" trunk := strings.Repeat("a", 40) + offHead := strings.Repeat("b", 40) // a commit no pull request's head carries for _, c := range []struct { name, asked, answer string failing bool @@ -35,11 +36,16 @@ func TestAnAskedVersionIsWrittenIntoTheModfileWhateverGoModNames(t *testing.T) { {name: "a group's head Go cannot fetch", asked: commitSHA, failing: true, answer: `{"Path":"` + sdk + `","Error":"invalid version: unknown revision ` + pinShort + `"}`, built: commitSHA, said: "placed from the pull request's head"}, - // The wording of go's errors: "unknown revision" is in cmd/go/internal/modfetch/coderepo_test.go; the lookup and - // connection texts are those of issue 1748's report and of the dial errors go prints for an unreachable forge. - {name: "a lookup that times out is no pin", asked: commitSHA, failing: true, failsWith: "i/o timeout", - answer: `{"Path":"` + sdk + `","Error":"git.novox.be/novox/mesh-sdk/go@` + commitSHA + `: dial tcp: lookup git.novox.be on 10.10.0.3:53: read udp 10.10.0.3:42292->10.10.0.3:53: i/o timeout"}`}, - {name: "a refused connection is no pin", asked: commitSHA, failing: true, failsWith: "connection refused", + // Whether a commit is a pull request's head is the forge's fact, never read from go's words (issue 1126 review 2): + // a head is placed whatever go said (the group's check has no name lookup, so go fails on the network first), and + // go's words only label a commit on no head. The wording: "unknown revision" is cmd/go's + // (modfetch/coderepo_test.go); the lookup and connection texts are those of issue 1748 and the check of 12:42. + {name: "a head go cannot even look up is placed", asked: commitSHA, failing: true, + answer: `{"Path":"` + sdk + `","Error":"git.novox.be/novox/mesh-sdk/go@` + commitSHA + `: dial tcp: lookup git.novox.be on [::1]:53: connection refused"}`, + built: commitSHA, said: "placed from the pull request's head"}, + {name: "a lookup that times out is no pin", asked: offHead, failing: true, failsWith: "i/o timeout", + answer: `{"Path":"` + sdk + `","Error":"git.novox.be/novox/mesh-sdk/go@` + offHead + `: dial tcp: lookup git.novox.be on 10.10.0.3:53: read udp 10.10.0.3:42292->10.10.0.3:53: i/o timeout"}`}, + {name: "a refused connection is no pin", asked: offHead, failing: true, failsWith: "connection refused", answer: `{"Path":"` + sdk + `","Error":"git ls-remote -q origin in /tmp/gopath: dial tcp 10.10.0.1:443: connect: connection refused"}`}, } { t.Run(c.name, func(t *testing.T) { @@ -78,8 +84,8 @@ func TestAnAskedVersionIsWrittenIntoTheModfileWhateverGoModNames(t *testing.T) { st := states.waitEnd(t) if c.failsWith != "" { if st.State != delivery.StepFailed || !strings.Contains(st.Reason, c.failsWith) || strings.Contains(st.Reason, "no pull request head") || - !strings.Contains(st.Reason, "may be retaken") || delivery.FailedUntilChanged(st.Reason) || h.ran("ls-remote") { - t.Errorf("the download failure ended %s: %q (ls-remote ran: %v)", st.State, st.Reason, h.ran("ls-remote")) + !strings.Contains(st.Reason, "may be retaken") || delivery.FailedUntilChanged(st.Reason) { + t.Errorf("the download failure ended %s: %q", st.State, st.Reason) } return } From fa6dc3a48b0c687cdcbd39255d50673bf1c6d950 Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 2 Nov 2026 12:52:10 +0100 Subject: [PATCH 27/27] Retake a pin whose forge listing failed, naming the forge's cause When the forge's listing of pull request heads fails, the fetch now says it as a download failure that may be retaken, so a forge outage is asked again and not held as a refusal (issue 1748, issue 1126 review 3). Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- modules/mesh-build-go/cmd/mesh-build-go/pins.go | 3 ++- modules/mesh-build-go/cmd/mesh-build-go/versions_test.go | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/modules/mesh-build-go/cmd/mesh-build-go/pins.go b/modules/mesh-build-go/cmd/mesh-build-go/pins.go index a4452e41..69061e2a 100644 --- a/modules/mesh-build-go/cmd/mesh-build-go/pins.go +++ b/modules/mesh-build-go/cmd/mesh-build-go/pins.go @@ -139,7 +139,8 @@ func (m *Module) placePin(ctx context.Context, root string, p pin, failure strin repository := "novox/" + p.repo r := m.Run(ctx, []string{"GIT_TERMINAL_PROMPT=0"}, "git", "-c", "credential.helper=", "ls-remote", m.remote(repository), "refs/pull/*/head") if r.Status != 0 || r.Err != "" { - return "", fmt.Errorf("the pin of %s at commit %s: listing the pull requests of %s: %s", p.module, p.short, repository, forgekey.Said(r.Err+"\n"+r.Stderr)) + // The forge did not answer: retaken, with its own cause, never held as a refusal until the module changes (issue 1748). + return "", fmt.Errorf("the pin of %s at commit %s: listing the pull requests of %s failed (a download failure that may be retaken): %s", p.module, p.short, repository, forgekey.Said(r.Err+"\n"+r.Stderr)) } commit, ref := "", "" for _, l := range strings.Split(r.Stdout, "\n") { diff --git a/modules/mesh-build-go/cmd/mesh-build-go/versions_test.go b/modules/mesh-build-go/cmd/mesh-build-go/versions_test.go index b5288c37..3d28eafd 100644 --- a/modules/mesh-build-go/cmd/mesh-build-go/versions_test.go +++ b/modules/mesh-build-go/cmd/mesh-build-go/versions_test.go @@ -26,6 +26,7 @@ func TestAnAskedVersionIsWrittenIntoTheModfileWhateverGoModNames(t *testing.T) { failing bool built, said, edit string failsWith string // a download failure that is not an unknown revision: the step fails with go's own words + forgeDown bool // the forge's listing of pull request heads fails too }{ {name: "a trunk commit newer than go.mod's", asked: trunk, answer: `{"Path":"` + sdk + `","Version":"v0.1.15-0.20261101000000-aaaaaaaaaaaa","Sum":"h1:zip=","GoModSum":"h1:mod="}`, @@ -45,6 +46,10 @@ func TestAnAskedVersionIsWrittenIntoTheModfileWhateverGoModNames(t *testing.T) { built: commitSHA, said: "placed from the pull request's head"}, {name: "a lookup that times out is no pin", asked: offHead, failing: true, failsWith: "i/o timeout", answer: `{"Path":"` + sdk + `","Error":"git.novox.be/novox/mesh-sdk/go@` + offHead + `: dial tcp: lookup git.novox.be on 10.10.0.3:53: read udp 10.10.0.3:42292->10.10.0.3:53: i/o timeout"}`}, + // The forge's own listing failing is a failure that may be retaken too, with its own cause (review 3). + {name: "a forge that cannot be listed is retaken", asked: commitSHA, failing: true, forgeDown: true, + failsWith: "unable to access the forge", + answer: `{"Path":"` + sdk + `","Error":"invalid version: unknown revision ` + pinShort + `"}`}, {name: "a refused connection is no pin", asked: offHead, failing: true, failsWith: "connection refused", answer: `{"Path":"` + sdk + `","Error":"git ls-remote -q origin in /tmp/gopath: dial tcp 10.10.0.1:443: connect: connection refused"}`}, } { @@ -66,6 +71,9 @@ func TestAnAskedVersionIsWrittenIntoTheModfileWhateverGoModNames(t *testing.T) { if name == "go" && strings.Contains(line, "/other mod ") { return forgekey.Ran{} // other/ requires nothing Go cannot fetch } + if name == "git" && strings.Contains(line, "ls-remote") && c.forgeDown { + return forgekey.Ran{Status: 128, Stderr: "fatal: unable to access the forge: Could not resolve host\n"} + } if name == "go" && strings.Contains(line, " mod download -json "+sdk+"@") { h.mu.Lock() h.cmds = append(h.cmds, cmdRecord{env: env, line: line})