From 816cf74764eba5a3c38e955d7b0b54db6b7c154c Mon Sep 17 00:00:00 2001 From: jochen Date: Sun, 1 Nov 2026 03:36:56 +0100 Subject: [PATCH] claude-code records its warrant through the hand-act seat, and the group's modules pin mesh-sdk at 8311ecb Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL --- .../claude-code/cmd/claude-code/proposals.go | 6 ++-- .../cmd/claude-code/warrant_seat_test.go | 31 +++++++++++++++++++ modules/claude-code/go.mod | 2 +- modules/claude-code/go.sum | 4 +-- modules/claude-code/module.json | 3 ++ modules/mesh-config/go.mod | 2 +- modules/mesh-config/go.sum | 4 +-- modules/mesh-healers/go.mod | 2 +- modules/mesh-healers/go.sum | 4 +-- modules/pacman/go.mod | 2 +- modules/pacman/go.sum | 4 +-- 11 files changed, 49 insertions(+), 15 deletions(-) create mode 100644 modules/claude-code/cmd/claude-code/warrant_seat_test.go diff --git a/modules/claude-code/cmd/claude-code/proposals.go b/modules/claude-code/cmd/claude-code/proposals.go index 9f878b66..897c0a77 100644 --- a/modules/claude-code/cmd/claude-code/proposals.go +++ b/modules/claude-code/cmd/claude-code/proposals.go @@ -696,7 +696,7 @@ type ProposalStore interface { Get(key string) (json.RawMessage, bool, error) } -// Recorder records a warrant in the controller's hand-act log: the controller reads the warrant from the +// Recorder records a warrant in the hand-act log of the seat mesh-hand-acts: the controller reads the warrant from the // router's own record, never from this module. type Recorder func(ask string) error @@ -708,9 +708,9 @@ func (sdkAskBus) Publish(subject string, body any, id string) error { func (sdkAskBus) Record(id string) (*stdio.StateEntry, error) { return stdio.SeatRecord("", id) } func (sdkAskBus) Kinds() ([]stdio.KindHeld, error) { return stdio.SeatKinds() } -// recordWarrant asks the controller to record a warrant this module acted on. +// recordWarrant asks the seat mesh-hand-acts (ADR 0565 clause 11) to record a warrant this module acted on. func recordWarrant(ask string) error { - _, err := stdio.Ask("seat:mesh-controller.warranted", map[string]any{"asker": Module, "ask": ask}) + _, err := stdio.Ask("seat:mesh-hand-acts.warranted", map[string]any{"asker": Module, "ask": ask}) return err } diff --git a/modules/claude-code/cmd/claude-code/warrant_seat_test.go b/modules/claude-code/cmd/claude-code/warrant_seat_test.go new file mode 100644 index 00000000..07f4bfd8 --- /dev/null +++ b/modules/claude-code/cmd/claude-code/warrant_seat_test.go @@ -0,0 +1,31 @@ +package main + +import ( + "encoding/json" + "os" + "slices" + "strings" + "testing" +) + +// The warrant is recorded through the seat mesh-hand-acts, which the manifest invokes, and no verb of the controller +// is invoked (ADR 0565 clause 11, issue 1953). +func TestTheWarrantIsRecordedThroughTheHandActSeat(t *testing.T) { + raw, err := os.ReadFile("../../module.json") + if err != nil { + t.Fatal(err) + } + var m struct { + Invokes []string `json:"invokes"` + } + if err := json.Unmarshal(raw, &m); err != nil { + t.Fatal(err) + } + if !slices.Equal(m.Invokes, []string{"seat:mesh-hand-acts.warranted"}) { + t.Errorf("invokes = %v", m.Invokes) + } + src, _ := os.ReadFile("proposals.go") + if !strings.Contains(string(src), `"seat:mesh-hand-acts.warranted"`) || strings.Contains(string(src), "seat:mesh-controller.warranted") { + t.Error("recordWarrant does not ask the hand-act seat alone") + } +} diff --git a/modules/claude-code/go.mod b/modules/claude-code/go.mod index 5b6d9e50..09f56508 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.20261101020750-62cddf4efc62 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101023317-8311ecb84911 require gopkg.in/yaml.v3 v3.0.1 diff --git a/modules/claude-code/go.sum b/modules/claude-code/go.sum index 0dcb13fe..15d7e96b 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.20261101020750-62cddf4efc62 h1:R5C8ICjiaDITHRFR/uIATwARPPXKxssUC70m0svstb0= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101020750-62cddf4efc62/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101023317-8311ecb84911 h1:+82ygf2hiY5Mhwfmc1xfCe9e/KY/5ObBuE2LecM37qI= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101023317-8311ecb84911/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-code/module.json b/modules/claude-code/module.json index 9f85df0c..48f1a194 100644 --- a/modules/claude-code/module.json +++ b/modules/claude-code/module.json @@ -22,6 +22,9 @@ "uses": [ "operator-channel" ], + "invokes": [ + "seat:mesh-hand-acts.warranted" + ], "state": [ "servers", "holdings", diff --git a/modules/mesh-config/go.mod b/modules/mesh-config/go.mod index 09062b50..360eb3e6 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.20261101020750-62cddf4efc62 +require git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101023317-8311ecb84911 require ( github.com/klauspost/compress v1.20.0 // indirect diff --git a/modules/mesh-config/go.sum b/modules/mesh-config/go.sum index e03fb169..7e56deab 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.20261101020750-62cddf4efc62 h1:R5C8ICjiaDITHRFR/uIATwARPPXKxssUC70m0svstb0= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101020750-62cddf4efc62/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101023317-8311ecb84911 h1:+82ygf2hiY5Mhwfmc1xfCe9e/KY/5ObBuE2LecM37qI= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101023317-8311ecb84911/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 a7e35006..62d37631 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.20261101020750-62cddf4efc62 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101023317-8311ecb84911 github.com/nats-io/nats.go v1.54.0 ) diff --git a/modules/mesh-healers/go.sum b/modules/mesh-healers/go.sum index 0972beb7..7c17f85c 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.20261101020750-62cddf4efc62 h1:R5C8ICjiaDITHRFR/uIATwARPPXKxssUC70m0svstb0= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101020750-62cddf4efc62/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101023317-8311ecb84911 h1:+82ygf2hiY5Mhwfmc1xfCe9e/KY/5ObBuE2LecM37qI= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101023317-8311ecb84911/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/pacman/go.mod b/modules/pacman/go.mod index c4087be6..17a3a3a0 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.20261101020750-62cddf4efc62 + git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101023317-8311ecb84911 github.com/nats-io/nats-server/v2 v2.11.17 ) diff --git a/modules/pacman/go.sum b/modules/pacman/go.sum index 0972beb7..7c17f85c 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.20261101020750-62cddf4efc62 h1:R5C8ICjiaDITHRFR/uIATwARPPXKxssUC70m0svstb0= -git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101020750-62cddf4efc62/go.mod h1:ouERNpZizzwZ0HLEtAypsY9FR20FyUgUYRni6J7kVCY= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101023317-8311ecb84911 h1:+82ygf2hiY5Mhwfmc1xfCe9e/KY/5ObBuE2LecM37qI= +git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261101023317-8311ecb84911/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=