You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
feat: let destination types classify failures and set their own retry policy - #1174
Let a destination type decide whether a failed delivery is retried and counted toward auto-disable, and let it bring its own retry schedule.
Today every failed attempt is retried on the one global schedule and counts toward auto-disable, whatever the cause. A destination type can know better: a failure may be permanent for that request, or say nothing about the endpoint's health. This PR lets the provider that saw the failure say so: the publish error carries the classification, and deliverymq and the alert evaluator act on it. The MCP destination (#1181) is the first user.
No existing destination type sets any of this, so delivery behavior doesn't change.
Changes
Publish errors classify themselves.destregistry.ErrDestinationPublishAttempt gains NonRetryable (no automatic retry is scheduled, and exhausted_retries fires right away) and SkipFailureCount (the failure neither increments nor resets the consecutive-failure count). Zero values keep today's behavior. The attempt is still logged as failed, attempt.failed is still emitted, and a manual retry still works.
A destination type can bring its own retry policy. A provider can implement the optional destregistry.RetryPolicyProvider; deliverymq resolves it per delivery and falls back to the global policy. The resolved limit drives scheduling, the attempt_max log field and the exhausted_retries alert, so all three agree.
alexluong
changed the title
feat: stop retrying webhook 410 and 413, use the Standard Webhooks retry schedule in standard mode
feat: no retries on webhook 410/413, Standard Webhooks retry schedule in standard mode
Oct 27, 2026
alexluong
changed the title
feat: no retries on webhook 410/413, Standard Webhooks retry schedule in standard mode
feat: no retries on webhook 410/413, 410 disables the destination, Standard Webhooks retry schedule in standard mode
Oct 29, 2026
Webhook 410 and 413 are not retried automatically, in both webhook modes. They still count toward auto-disable.
A webhook 410 disables the destination and emits alert.destination.disabled with reason: "endpoint_gone" (the existing reason is "consecutive_failure"). A burst of 410s disables once and alerts once, and a late attempt doesn't disable a destination the tenant has enabled again since.
I don't know about this; there are 2 main issues I see here. First, the decision to use Standard Webhook is currently positioned as a signature decision, not a behavioural one.
Second, there's no way to guarantee that people use those codes as intended, and it's not common knowledge that this would be the behaviour on a webhook call.
alexluong
changed the title
feat: no retries on webhook 410/413, 410 disables the destination, Standard Webhooks retry schedule in standard mode
feat: let destination types classify failures and set their own retry policy
Oct 30, 2026
@alexbouchardd makes sense, I've updated the PR to just support the mechanisms that will be used by MCP Events without changing the existing webhook destination behavior.
This branch has not been deployed
No deployments
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Let a destination type decide whether a failed delivery is retried and counted toward auto-disable, and let it bring its own retry schedule.
Today every failed attempt is retried on the one global schedule and counts toward auto-disable, whatever the cause. A destination type can know better: a failure may be permanent for that request, or say nothing about the endpoint's health. This PR lets the provider that saw the failure say so: the publish error carries the classification, and deliverymq and the alert evaluator act on it. The MCP destination (#1181) is the first user.
No existing destination type sets any of this, so delivery behavior doesn't change.
Changes
destregistry.ErrDestinationPublishAttemptgainsNonRetryable(no automatic retry is scheduled, andexhausted_retriesfires right away) andSkipFailureCount(the failure neither increments nor resets the consecutive-failure count). Zero values keep today's behavior. The attempt is still logged as failed,attempt.failedis still emitted, and a manual retry still works.destregistry.RetryPolicyProvider; deliverymq resolves it per delivery and falls back to the global policy. The resolved limit drives scheduling, theattempt_maxlog field and theexhausted_retriesalert, so all three agree.🤖 Generated with Claude Code