Pause before a declined ask is put again with a context's bound, not a timer (ADR 0437 §8, issue 1578)

The builder's manifest test refuses time.After. The previous commit's pause used it.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
This commit is contained in:
2026-11-01 15:36:52 +01:00
parent 5085b681e9
commit a6c225eb45
@@ -326,10 +326,12 @@ func (b *Builder) answer(ctx context.Context, l *lane, ask delivery.StepAsk, ask
if bound := b.declineBound(); now.Sub(firstDecline) > bound {
return step, ask, fmt.Errorf("the ask %s of %s was declined for %s and no build node took it: %s", ask.ID, l.module, bound.Round(time.Second), declinedWords(declines))
}
select {
case <-ctx.Done():
// The pause is a context's bound, not a timer (ADR 0437 §8).
pause, stop := context.WithTimeout(ctx, b.declinePause())
<-pause.Done()
stop()
if ctx.Err() != nil {
return step, ask, ctx.Err()
case <-time.After(b.declinePause()):
}
old := ask.ID
ask.ID, ask.At = buildstep.NewID(), time.Now()