loading audit trail…
Fix retry storm in `src/worker.ts` for the payments-svc charge call:
1. Replace fixed 200ms sleep with exponential backoff + full jitter, capped at 30s. Bound to MAX_ATTEMPTS=5 instead of 10.
2. Generate a stable idempotency key per job (e.g. `charge-${job.jobId}`) and send it as `Idempotency-Key` header so retries don't double-charge.
3. Set a per-request timeout (e.g. 10s) on the axios call.
4. Only retry on retryable errors: network errors, 408, 429, 5xx. Treat 4xx (except 408/429) as terminal.
5. On exhaustion, route the job to the existing DLQ (import/use the DLQ helper) instead of throwing a bare Error. Log jobId, customerId, last status, attempt count.
6. Continue using raw axios in `src/http.ts` for now — migrating to `@acme/http` is out of scope for this ticket.