aboutsummaryrefslogtreecommitdiffstats
path: root/docs/plans
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-09-08 12:57:32 +0200
committerDanilo M. <danix@danix.xyz>2026-09-08 12:57:32 +0200
commit9ac5e7485e5f53f089c8932a8b13bc725b1ba029 (patch)
tree1aeff544110ee79328544f08f14686c2f9aa8115 /docs/plans
parent2ebc10f4e5e6e54e54cec5420d8fbba61c0a501a (diff)
downloadabusectl-9ac5e7485e5f53f089c8932a8b13bc725b1ba029.tar.gz
abusectl-9ac5e7485e5f53f089c8932a8b13bc725b1ba029.zip
spec: retry deferred destinations from cron, not by hand
A rate limit tells us when, not merely that: a 429 carries Retry-After or the vendor's reset headers. Recording the deadline and asking the user to run submit again throws that away and relies on them remembering. So `abusectl retry` scans every case for destinations whose retry_after has passed and sends only those, as one unattended cron line beside mailsync.sh. No inline retry: submit never sleeps waiting for a window, because a daily quota resets in hours and a process killed while sleeping is back to the user remembering. One mechanism, not two. Unattended retry makes three properties load-bearing, since a retry that re-sends is a duplicate abuse report and cannot be withdrawn. Status is written before the attempt, so a crash mid-send leaves in-flight, which is honest, rather than looking like it never happened; retry never touches in-flight. Attempts are capped, so a dead abuse mailbox stops being retried. A soft failure with no server deadline gets exponential backoff. deferred and failed are separate statuses: deferred means the tool will handle it, failed means the user must. Collapsing them either strands a rate-limited report forever or retries a dead mailbox indefinitely. The qtmaildir dialog accordingly grows no retry button. A deferred destination belongs to cron, and a button beside it would race the scheduled run. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KphFXTc2QajxXsHWyvGJ4R
Diffstat (limited to 'docs/plans')
0 files changed, 0 insertions, 0 deletions