Area 2 (join 11): claude-code invokes operator-channel notify and restic the assigner's assignments

Builds: design 47 G GR8 (per-verb grants), area 2 of the join

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
This commit is contained in:
2026-11-12 11:39:43 +01:00
parent 8261c2c7e4
commit fe56de746e
4 changed files with 43 additions and 1 deletions
@@ -0,0 +1,19 @@
package main
import (
"os"
"strings"
"testing"
)
// The operator channel's notify, which notifyOperator calls, is in the manifest's invokes, which the grants part reads per
// verb (design 47 G GR8): without it the call is refused live.
func TestTheManifestInvokesTheNotifyTheModuleCalls(t *testing.T) {
raw, err := os.ReadFile("../../module.json")
if err != nil {
t.Fatal(err)
}
if !strings.Contains(string(raw), `"seat:operator-channel.notify"`) {
t.Error("the manifest does not invoke seat:operator-channel.notify")
}
}
+2 -1
View File
@@ -51,7 +51,8 @@
"mesh-delivery-assigner.assigner_read_assignments",
"seat:anthropic-licence-manager.bindings",
"seat:anthropic-licence-manager.current",
"seat:mesh-vault.get"
"seat:mesh-vault.get",
"seat:operator-channel.notify"
],
"consumes": [
"mesh-catalog.catalog-revision",
@@ -0,0 +1,21 @@
package main
import (
"os"
"strings"
"testing"
)
// The seat verbs the module calls are in its manifest's invokes, which the grants part reads per verb (design 47 G GR8): the
// assignments that tell who holds the seat mesh-broker (seatlist.HolderOf) and the broker's show that names its finding stream (A-274).
func TestTheManifestInvokesTheSeatVerbsTheModuleCalls(t *testing.T) {
raw, err := os.ReadFile(moduleDir + "/module.json")
if err != nil {
t.Fatal(err)
}
for _, verb := range []string{"seat:mesh-module-assigner.assignments", "seat:mesh-broker.show"} {
if !strings.Contains(string(raw), `"`+verb+`"`) {
t.Errorf("the manifest does not invoke %s", verb)
}
}
}
+1
View File
@@ -17,6 +17,7 @@
}
],
"invokes": [
"seat:mesh-module-assigner.assignments",
"seat:mesh-broker.show"
],
"consumes": [