28 lines
979 B
Markdown
28 lines
979 B
Markdown
|
|
---
|
||
|
|
id: "0006"
|
||
|
|
date: 2026-04-20
|
||
|
|
status: Accepted
|
||
|
|
supersedes:
|
||
|
|
superseded-by:
|
||
|
|
affected-paths: [lib/relay/delivery.rb]
|
||
|
|
affected-components: [delivery, retries]
|
||
|
|
---
|
||
|
|
|
||
|
|
# 0006 — Dead-letter deliveries that exhaust retries to a JSONL file
|
||
|
|
|
||
|
|
## Context
|
||
|
|
|
||
|
|
A delivery that exhausts its retry attempts was previously just a log line; operators had no way to replay it after the receiver recovered.
|
||
|
|
|
||
|
|
## Decision
|
||
|
|
|
||
|
|
When a delivery fails its final attempt, Delivery appends the URL, payload, and last error as one JSON line to the dead-letter file (deadletter.jsonl). Replay is a manual operator action, not automatic.
|
||
|
|
|
||
|
|
## Consequences
|
||
|
|
|
||
|
|
No delivery is silently lost; the report command can enumerate failures. The file grows without rotation, acceptable at current volume.
|
||
|
|
|
||
|
|
## Alternatives rejected
|
||
|
|
|
||
|
|
Automatic background replay rejected: a recovering receiver would immediately be hit with the full backlog. A database table rejected: the tool has no database and one failure file is greppable.
|