Review round 1: a carried module's queue consumer survives PruneHeard, a work-queue stream's restricted metadata is proven on the server config (issue 1178)

ConsumersOf's carried-module path (a module the tool runner carries, no
account of its own — mesh-mail's real shape) was not passing Queues
through, so its work-queue consumer was missing from the composed list
and PruneHeard would have removed what issueProcess made for it. Fixed,
with a test through Users -> ConsumersOf.

Extracted EnsureStream's config building into StreamConfigFor, a pure
function, so the dead-letters test can assert the restricted metadata
EnsureStream would actually send for a work-queue stream instead of
setting the dead letter's header by hand, which passed whether or not
modstreams.go's out.Restricted = true was there at all.
This commit is contained in:
jochen
2026-10-19 03:18:18 +02:00
parent 65632e7999
commit 9b7f9a7fd2
4 changed files with 67 additions and 11 deletions
@@ -54,3 +54,28 @@ func TestTheOneProcessAWorkQueuesBusNamesGetsItsOwnConsumer(t *testing.T) {
t.Fatalf("the queue's consumer: %+v", c)
}
}
// review round 1, finding 2 (1178): mesh-mail's real shape has no account of its own (NoAccount) and is
// carried by the machine's tool runner — so its queue consumer has to come from the carried-module path in
// ConsumersOf, not only from a module with its own principal, or PruneHeard would remove what issueProcess
// made for it (novox/hq ADR 0436 §1, §2, §6).
func TestAWorkQueueConsumerSurvivesForAModuleTheRuntimeCarries(t *testing.T) {
users, err := Users(Records{Nodes: []string{"novox"}, Assigned: map[string][]Declared{"novox": {
{Module: RuntimeModule},
{Module: "mesh-mail", NoAccount: true,
Queues: []QueueOwner{{Process: "send", Stream: "MAIL_SENDS", MaxDeliver: 5}}},
}}})
if err != nil {
t.Fatal(err)
}
got := ConsumersOf(users)
var found bool
for _, c := range got {
if c.Module == "mesh-mail" && c.Consumer.Name == "novox_mesh-mail_send" && c.Consumer.Stream == "MAIL_SENDS" {
found = true
}
}
if !found {
t.Fatalf("mesh-mail's queue consumer is missing from the carried module's composition: %+v", got)
}
}