diff --git a/go/catalogue/seat_invokes.go b/go/catalogue/seat_invokes.go index 583ad4e..d130b3d 100644 --- a/go/catalogue/seat_invokes.go +++ b/go/catalogue/seat_invokes.go @@ -29,7 +29,8 @@ func SeatInvoke(invoke string) (seat, verb string, ok bool) { // seatInvokeProblems are the `seat:.` a module or one of its processes invokes that nothing answers: a seat // no module declares and the mesh does not define, a verb the seat does not promise, or a seat with no holder (a -// mesh seat no module claims, unless its node's engine holds it, ADR 0563 ยง1). +// seat a module declares and no module claims; a mesh seat's holder, the mesh itself or a module of any repository, +// is not judged). func seatInvokeProblems(shelf Shelf, declared map[string]SeatDeclaration) []string { claimed := map[string]bool{} for _, m := range shelf { @@ -51,7 +52,10 @@ func seatInvokeProblems(shelf Shelf, declared map[string]SeatDeclaration) []stri var verbs []Verb held := claimed[seat] if s, isMesh := SeatNamed(seat); isMesh { - verbs, held = s.Serves, held || claimed[s.Name] || s.HeldByTheEngine + // A mesh seat is held by the mesh itself or by a module of any repository: one repository's catalogue + // cannot say it has no holder, so only its verbs are judged (the lead, 2026-10-30: mesh-control's check + // runs over the captured mesh-catalog alone, whose mesh-self-check calls the watchman's seat). + verbs, held = s.Serves, true } else if d, isModule := declared[seat]; isModule { verbs = d.Serves } else { diff --git a/go/catalogue/seats_declared_test.go b/go/catalogue/seats_declared_test.go index fdef894..41dfabc 100644 --- a/go/catalogue/seats_declared_test.go +++ b/go/catalogue/seats_declared_test.go @@ -71,8 +71,12 @@ func TestUsingASeatNobodyDeclaresIsRefused(t *testing.T) { Manifest{Module: "shop", Invokes: []string{"seat:telegram-sendr.status"}}, telegram(), true}, {"a verb of a declared seat nobody claims", `a verb of the seat "telegram-sender", ` + UnheldSeat, Manifest{Module: "shop", Invokes: []string{"seat:telegram-sender.status"}}, unclaimed, true}, - {"a verb of a mesh seat nobody claims", `a verb of the seat "mesh-controller", ` + UnheldSeat, - Manifest{Module: "shop", Invokes: []string{"seat:mesh-controller.root-free"}}, telegram(), true}, + {"a verb of a mesh seat whose holder lives in another repository", "", + Manifest{Module: "shop", Invokes: []string{"seat:mesh-watchdogs.signals"}}, telegram(), false}, + {"a verb a mesh seat does not promise", `the seat mesh-controller serves no verb "root-freed"`, + Manifest{Module: "shop", Invokes: []string{"seat:mesh-controller.root-freed"}}, telegram(), false}, + {"the controller's verb: the controller answers its seat", "", + Manifest{Module: "shop", Invokes: []string{"seat:mesh-controller.root-free"}}, telegram(), false}, {"the engine's verb: every node's engine holds its seat", "", Manifest{Module: "shop", Invokes: []string{"seat:node-engine.root-free"}}, telegram(), false}, {"a verb the engine's seat does not promise", `the seat node-engine serves no verb "root-freed"`,