Retry queue without dead-letter queue

errorretry-queue-without-dlq

A retry queue is where poison messages end up. With no dead-letter queue they are retried forever or dropped in silence, and nobody ever looks at the failed payment.

Severity
error
Selects
every node of kind queue
Components in scope
24
What it checks

It looks at every node of kind queue, and fires when:

  • — all of these hold:
  • — the node's `role` is "retry"
  • — the node's `deadLetterQueue` is false
Message
Retry queue '{{node.id}}' has no dead-letter queue. Messages that keep failing must be parked for manual investigation.

{{node.id}} style paths are filled in from the node, the edge or the design the finding is about.

Applies to · 24 components
Tripped by · 5

Reference designs whose broken twin names this rule in its header. The gate reads the same header, and fails when a rule no design trips.

Source
# yaml-language-server: $schema=../schema/rule.schema.json
# A retry queue is where poison messages end up. Without a dead-letter queue they are
# retried forever or silently dropped, and nobody investigates the failed payment.
# Tripped by: designs/payment-system.broken.yaml
schemaVersion: "1"
type: "rule"
id: "retry-queue-without-dlq"
severity: "error"
select:
  node:
    kind: "queue"
when:
  all:
    - prop: "role"
      equals: "retry"
    - prop: "deadLetterQueue"
      equals: false
message: "Retry queue '{{node.id}}' has no dead-letter queue. Messages that keep failing must be parked for manual investigation."

The same page as markdown, for an agent: /catalogue/rules/retry-queue-without-dlq.md