Store a target's number of delivery attempts, at least one (closes #540)
check / check (push) Waiting to run

Target.MaxRetries (max_retries) becomes Target.MaxAttempts
(max_attempts), and the form field, parser and ceiling are renamed to
match. 1 is a single attempt with no circuit breaker; above 1 retries
behind the breaker up to that many attempts. Both target forms refuse
0 and less and default a blank field to 1. The target page shows the
plain number, and the README's two paragraphs on 0 against 1 become
one sentence.

Model: opus-5-5
This commit is contained in:
2026-10-15 11:10:29 +00:00
parent c0f7cc29fd
commit e639032483
37 changed files with 843 additions and 716 deletions
+7 -7
View File
@@ -354,11 +354,11 @@ func checkAddEachTargetType(ctx context.Context, t *testing.T, url string) {
}{
{
"http", "http",
"csrf_token name type url headers timeout max_retries",
"csrf_token name type url headers timeout max_attempts",
map[string]string{"url": publicTargetURL},
},
{
"slack", "slack", "csrf_token name type url max_retries",
"slack", "slack", "csrf_token name type url max_attempts",
map[string]string{"url": publicTargetURL},
},
{
@@ -630,11 +630,11 @@ func checkRefusedEdits(
values map[string]string
}{
{page + "/targets/" + targetID + "/edit", map[string]string{
"#name": "edited-target",
"#url": "http://127.0.0.1/hook",
"#headers": "X-Edited: kept",
"#timeout": "12",
"#max_retries": "3",
"#name": "edited-target",
"#url": "http://127.0.0.1/hook",
"#headers": "X-Edited: kept",
"#timeout": "12",
"#max_attempts": "3",
}},
{page + "/edit", map[string]string{
"#name": "edited-webhook",