reiniciarpten
zshdlq-doctor.md

status: concluído

dlq-doctor

Um agente que diagnostica e reprocessa dead letter queues do RabbitMQ — com aprovação humana em cada correção.

9/9 blocos178 testesMIT

O problema

Dead letter queues acumulam milhares de mensagens que ninguém investiga: os erros se repetem, e reprocessar na mão é arriscado — efeito duplicado, poison message voltando. O dlq-doctor ingere a fila, agrupa as falhas por embeddings, usa um agente com ferramentas somente leitura para propor causa e correção por cluster, e executa um replay seguro: dry-run, aprovação humana, canário, idempotency key.

Pipeline

ChaosGenerator→tickets.dlq→IngestionWorker→ClusteringWorker→DiagnosisAgent→ReplayExecutionService

Números reais

N = 2.326 mensagens de falha (parcial de um lote de 20 mil — declarado assim no README, não é o volume completo do plano).
AbordagemClustersPurezaARI
Agrupar por exception_type372,4%0,506
Hash exato do fingerprint8100,0%0,679
Embeddings + limiar incremental (real)472,4%0,505

Achado honesto: neste volume, o sistema real empata com o baseline ingênuo de agrupar por tipo de exceção — os dois fundem duas categorias de falha que lançam a mesma exceção, exatamente como o ADR-0003 previu.

Decisões técnicas

ADR-0001

x-delivery-limit do RabbitMQ só conta perda de conexão de verdade, nunca um nack(requeue: true) explícito — verificado contra um broker real.

ADR-0003

Dois tipos de falha lançam a mesma exceção de propósito, para a avaliação de clusterização ter uma chance real de mostrar um baseline falhando.

ADR-0006

Embeddings via ONNX local (sem chave, sem custo) e clusterização por limiar incremental — validado empiricamente antes de confiar na similaridade de cosseno.

ADR-0010

Métricas de avaliação por mensagem, não por fingerprint, comparadas contra dois baselines mais simples — não só contra o próprio sistema.

Stack

.NET 10RabbitMQ 4PostgreSQL + pgvectorMicrosoft.Extensions.AIAnthropic SDKPollyTestcontainersxUnit