From 64bb49209c3e2660cb49be0b837ca20d92e2dfa4 Mon Sep 17 00:00:00 2001 From: jochen Date: Fri, 30 Oct 2026 11:45:00 +0100 Subject: [PATCH] node-tools: a session may wait on the gate's approval and on every asker's asks opening and decided MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The operator, 2026-10-30: an Approve must be acted on and known at once, and a session should hear approval requests. Adds mesh-delivery-gate.approval (approved, or approved and not handed past 60 s) and, one family per asker that uses the operator-channel seat, operator-channel.asked. and operator-channel.decided.. Named one by one (ADR 0367 ยง2). Needs mesh-catalog fix/turn-handed-on-approve first: the gate's approval event and the seat's asked event are declared there. --- .../internal/console/manifest_waits_test.go | 11 ++++++++++- node-tools/module.json | 18 +++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/node-tools/internal/console/manifest_waits_test.go b/node-tools/internal/console/manifest_waits_test.go index ed0b2ae..cea2a60 100644 --- a/node-tools/internal/console/manifest_waits_test.go +++ b/node-tools/internal/console/manifest_waits_test.go @@ -25,8 +25,17 @@ func TestTheManifestNamesTheFirstFamiliesOneByOne(t *testing.T) { if err := json.Unmarshal(raw, &m); err != nil { t.Fatal(err) } + // 2026-10-30, the operator: "an approval given by me must get handled accordingly and you should know about it + // immediately" and "you should be able to hook into approval requests": the gate's approval (approved, not handed), + // and every asker's asks opening and decided, one family per asker. want := []string{"mesh-knowledge.reviewed", "mesh-delivery-gate.transition", "gitea.forge.status", - "mesh-controller.checked", "operator-channel.decided.claude-code"} + "mesh-controller.checked", "operator-channel.decided.claude-code", "mesh-delivery-gate.approval"} + for _, asker := range []string{"mesh-config", "mesh-delivery-assigner", "mesh-delivery-teller", "mesh-grants", "mesh-knowledge", "mesh-mail", "pacman"} { + want = append(want, "operator-channel.decided."+asker) + } + for _, asker := range []string{"claude-code", "mesh-config", "mesh-delivery-assigner", "mesh-delivery-teller", "mesh-grants", "mesh-knowledge", "mesh-mail", "pacman"} { + want = append(want, "operator-channel.asked."+asker) + } if m.Module != "node-tools" || !reflect.DeepEqual(m.Waits, want) { t.Errorf("%s waits on %v, want %v", m.Module, m.Waits, want) } diff --git a/node-tools/module.json b/node-tools/module.json index 1daedcf..86785aa 100644 --- a/node-tools/module.json +++ b/node-tools/module.json @@ -10,7 +10,23 @@ "mesh-delivery-gate.transition", "gitea.forge.status", "mesh-controller.checked", - "operator-channel.decided.claude-code" + "operator-channel.decided.claude-code", + "mesh-delivery-gate.approval", + "operator-channel.decided.mesh-config", + "operator-channel.decided.mesh-delivery-assigner", + "operator-channel.decided.mesh-delivery-teller", + "operator-channel.decided.mesh-grants", + "operator-channel.decided.mesh-knowledge", + "operator-channel.decided.mesh-mail", + "operator-channel.decided.pacman", + "operator-channel.asked.claude-code", + "operator-channel.asked.mesh-config", + "operator-channel.asked.mesh-delivery-assigner", + "operator-channel.asked.mesh-delivery-teller", + "operator-channel.asked.mesh-grants", + "operator-channel.asked.mesh-knowledge", + "operator-channel.asked.mesh-mail", + "operator-channel.asked.pacman" ], "provides": [ {