From 778bcd0eee5dbbda8cb6ae9c72646f612a3bb1a8 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 13:02:03 +0100 Subject: [PATCH] Item 2 (join 11): the builder's operator-ask tests check the ask's expiry on the asks' own clock MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The asks were made at a fixed time while the channel client checked their expiry against the real clock, so from 2026-11-12 every ask "expires before it is asked". The client now takes the same fixed clock. Builds: design 47 G ยง568 Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- .../internal/build/retakeask_test.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/modules/mesh-delivery-builder/internal/build/retakeask_test.go b/modules/mesh-delivery-builder/internal/build/retakeask_test.go index 25cccb2c..35c461d3 100644 --- a/modules/mesh-delivery-builder/internal/build/retakeask_test.go +++ b/modules/mesh-delivery-builder/internal/build/retakeask_test.go @@ -45,6 +45,10 @@ func TestTheOperatorIsAskedAndAnswers(t *testing.T) { } } +// askedAt is the clock of the asks and of the client that checks them, one fixed time, so an ask's expiry never falls +// behind the real clock. +func askedAt() time.Time { return time.Date(2026, 11, 11, 12, 0, 0, 0, time.UTC) } + func theOperatorAnswers(t *testing.T, option string) { r := newRig(t, goBundle) r.consider(t, "modules/m") @@ -52,8 +56,8 @@ func theOperatorAnswers(t *testing.T, option string) { Error: "transport fault: connection, node-build-go ace, dial tcp: connection refused"}) var published []oc.Ask acted := &actedStore{} - asker := &OperatorAsk{Builder: r.b, Acted: acted, Ctx: context.Background(), Now: func() time.Time { return time.Date(2026, 11, 11, 12, 0, 0, 0, time.UTC) }, - Client: &occ.Client{Module: "mesh-delivery-builder", State: &askedState{}, + asker := &OperatorAsk{Builder: r.b, Acted: acted, Ctx: context.Background(), Now: askedAt, + Client: &occ.Client{Module: "mesh-delivery-builder", State: &askedState{}, Now: askedAt, Publish: func(subject string, body any, id string) error { if subject != oc.AcceptSubjectAsk("mesh-delivery-builder") { t.Errorf("published on %s", subject) @@ -131,8 +135,8 @@ func TestTheOperatorsAnswerIsHeardThroughTheSdkAskerAndActedOnOnce(t *testing.T) }, AskSubject: oc.AcceptSubjectAsk, DecidedSubject: oc.SubjectDecided} o := &OperatorAsk{Builder: r.b, Acted: &actedStore{}, Ctx: context.Background(), Asker: asker, - Now: func() time.Time { return time.Date(2026, 11, 11, 12, 0, 0, 0, time.UTC) }, - Client: &occ.Client{Module: "mesh-delivery-builder", State: state, Publish: func(_ string, body any, id string) error { return asker.Ask(id, body) }}} + Now: askedAt, + Client: &occ.Client{Module: "mesh-delivery-builder", State: state, Now: askedAt, Publish: func(_ string, body any, id string) error { return asker.Ask(id, body) }}} if err := o.Listen(); err != nil || subscribed != oc.SubjectDecided("mesh-delivery-builder") { t.Fatalf("Listen = %v, subscribed to %q", err, subscribed) }