Webhook notification retries used backoff without a max_time bound, so a
hanging or persistently-failing target could stall a worker for minutes
per bad URL (up to ~5 socket waits at timeout=60 plus retry sleeps),
starving sequential report dispatch.
Add max_time=120 to the backoff decorator on WebhookNotification.send.
factor/base/max_tries are unchanged, so legitimately-transient 5xx
targets are still retried; max_time only caps total wall-clock so a bad
target cannot monopolize a worker. max_time is checked between attempts,
so the final in-flight request still runs its full timeout.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>