Part of #982.
Self-hosters need a way to inspect, replay, and purge dead-letter jobs from the dashboard — today they require direct SQLite/Postgres access.
Scope:
- REST endpoints:
GET /api/selfhost/queue/dead (paginated), POST /api/selfhost/queue/dead/:id/replay, DELETE /api/selfhost/queue/dead/:id, DELETE /api/selfhost/queue/dead (purge all)
- Dashboard route: Dead-Letter Queue table with job ID, payload type, attempts, last error, created/died timestamps
- Replay button per row + bulk purge with confirmation
- Gate behind
SELFHOST_API_SECRET auth (same as existing local API routes)
- SQLite and Postgres adapters both expose the same dead-queue interface
Part of #982.
Self-hosters need a way to inspect, replay, and purge dead-letter jobs from the dashboard — today they require direct SQLite/Postgres access.
Scope:
GET /api/selfhost/queue/dead(paginated),POST /api/selfhost/queue/dead/:id/replay,DELETE /api/selfhost/queue/dead/:id,DELETE /api/selfhost/queue/dead(purge all)SELFHOST_API_SECRETauth (same as existing local API routes)