From ffc4b888591a113cd03284701334488e831f2e77 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:21:11 +0100 Subject: [PATCH] A-248: buildrun.Asker puts under the asker its subject names MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The indexer's validation ask rides accept.. under its own name (§712, A-232); an asker that names none still puts under the builder's. Builds: design 47 G A-248, A-247, §712 Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- modules/mesh-delivery-builder/buildrun/asks.go | 10 +++++++--- modules/mesh-delivery-builder/buildrun/asks_test.go | 5 +++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/modules/mesh-delivery-builder/buildrun/asks.go b/modules/mesh-delivery-builder/buildrun/asks.go index 26cc3e2c..d65d845e 100644 --- a/modules/mesh-delivery-builder/buildrun/asks.go +++ b/modules/mesh-delivery-builder/buildrun/asks.go @@ -1,6 +1,7 @@ package buildrun import ( + "cmp" "context" "encoding/json" "errors" @@ -34,6 +35,9 @@ type AskWaiter interface { // Asker puts asks and waits for their steps. type Asker struct { + // Name is the asker the subject names, the caller's seat name (design 47 G A-248, A-163): empty puts under the builder's + // name until the asker rename after the join. + Name string Publisher AskPublisher Waiter AskWaiter // Seats finds the build module of an ask's language (design 47 G A-82). @@ -173,8 +177,8 @@ func (k Asker) dropped(a buildstep.StepAsk, why string) { // PutTry is how long one publish of an ask waits for its stream's answer before it is made again (Put). var PutTry = 10 * time.Second -// Put puts a on its stream: the seat's accept subject of its language and kind, under the builder's name as asker (design 47 G -// §481, §600: `accept..builder`). The put is a kept call (novox/hq ADR 0668 +// Put puts a on its stream: the seat's accept subject of its language and kind, under the asker's Name, else the builder's +// name (design 47 G §481, §600, A-248: `accept..builder`). The put is a kept call (novox/hq ADR 0668 // §1, §2; issue 1966, issue 1748 note 27): it carries the ask's id as its message id, so the stream takes it once, and it // is made again through every transport fault (a deadline, no responders) within busretry.Bound, each try bounded by // PutTry, until ctx ends. A put that still meets one is an error opening `transport fault:` (TransportFault), so the key it @@ -184,7 +188,7 @@ func (k Asker) Put(ctx context.Context, a buildstep.StepAsk) error { if err != nil { return err } - subject, err := buildstep.AskSubjectBy(a.Language, a.Kind, buildstep.AskerBuilder) + subject, err := buildstep.AskSubjectBy(a.Language, a.Kind, cmp.Or(k.Name, buildstep.AskerBuilder)) if err != nil { return err } diff --git a/modules/mesh-delivery-builder/buildrun/asks_test.go b/modules/mesh-delivery-builder/buildrun/asks_test.go index fac93dbd..5f847802 100644 --- a/modules/mesh-delivery-builder/buildrun/asks_test.go +++ b/modules/mesh-delivery-builder/buildrun/asks_test.go @@ -44,6 +44,11 @@ func TestAnAskerPutsOnceAndReadsTheStep(t *testing.T) { if len(subjects.seen) != 1 || subjects.seen[0] != "mesh.seat.node-build-go.accept."+goAsk("x").Kind+".builder" { t.Fatalf("the ask was put on %v", subjects.seen) } + // A-248: an asker that names itself puts under its own name. + byName := Asker{Name: "indexer", Seats: testSeats(), Publisher: subjects, Waiter: f} + if err := byName.Put(context.Background(), goAsk("mvl0frv18d1959")); err != nil || subjects.seen[len(subjects.seen)-1] != "mesh.seat.node-build-go.accept."+goAsk("x").Kind+".indexer" { + t.Fatalf("a named asker put on %v (%v)", subjects.seen, err) + } f.Answer = func(a buildstep.StepAsk) buildstep.Step { return buildstep.Step{ID: a.ID, Node: "shanks", State: buildstep.StepRefused, Reason: "go 1.27 installed"} }