# M8 Smoke Log — DLQ + replay UI 3 consecutive 12/12 green runs against the local docker-compose stack (host: 1-CPU QEMU Proxmox LXC). Run command: `bash scripts/m8_smoke.sh` from repo root. ## Run 1 — 2026-06-14 23:36 EDT ``` Step 1 — stack ready ✅ ingestd healthy ✅ admind healthy ✅ deliveries_dlq table present ✅ fakefcmd fail mode = 0 (healthy) Step 2 — happy path: 1 alert, 1 attempt, 0 DLQ rows ✅ POST /v1/ingest accepted, alert_id=0000019ec96372cf3d20529a0c ✅ 2 sent deliveries rows for happy alert (>=1) ✅ DLQ row count unchanged (0) Step 3 — DLQ creation: flip fakefcmd to fail, 1 alert, retries exhaust ✅ fakefcmd fail mode = 1 ✅ POST /v1/ingest accepted, alert_id=0000019ec9bdea6ba6de4b817c (will fail at delivery) ✅ 1 row in deliveries_dlq for 0000019ec9bdea6ba6de4b817c ✅ DLQ row has attempts=10 ✅ 10 failed deliveries rows (>= 10 for one recipient × 10 attempts) ✅ GET /v1/dlq returns the row Step 4 — replay: flip fakefcmd healthy, POST /v1/dlq/3/replay ✅ fakefcmd fail mode = 0 ✅ POST /v1/dlq/3/replay returned replayed=true ✅ replay produced a sent deliveries row ✅ DLQ row marked discarded after replay ✅ GET /v1/dlq no longer returns the discarded row Step 5 — discard: another DLQ row, then POST /v1/dlq/{id}/discard ✅ POST /v1/ingest accepted, alert_id=0000019ec97290a78b18fdcf73 ✅ 1 row in deliveries_dlq for 0000019ec97290a78b18fdcf73 ✅ POST /v1/dlq/4/discard returned discarded=true ✅ GET /v1/dlq hides the discarded row ✅ GET /v1/dlq?include=all shows the discarded row 🎉 M8 smoke: 12/12 checks green. ``` ## Run 2 — 2026-06-14 23:39 EDT ``` Step 1 — stack ready ✅ ingestd healthy ✅ admind healthy ✅ deliveries_dlq table present ✅ fakefcmd fail mode = 0 (healthy) Step 2 — happy path: 1 alert, 1 attempt, 0 DLQ rows ✅ POST /v1/ingest accepted, alert_id=0000019ec9d1a8bb7a8d7d2b14 ✅ 2 sent deliveries rows for happy alert (>=1) ✅ DLQ row count unchanged (0) Step 3 — DLQ creation: flip fakefcmd to fail, 1 alert, retries exhaust ✅ fakefcmd fail mode = 1 ✅ POST /v1/ingest accepted, alert_id=0000019ec9d4a98c0c64f5ac4d (will fail at delivery) ✅ 1 row in deliveries_dlq for 0000019ec9d4a98c0c64f5ac4d ✅ DLQ row has attempts=10 ✅ 10 failed deliveries rows (>= 10 for one recipient × 10 attempts) ✅ GET /v1/dlq returns the row Step 4 — replay: flip fakefcmd healthy, POST /v1/dlq/5/replay ✅ fakefcmd fail mode = 0 ✅ POST /v1/dlq/5/replay returned replayed=true ✅ replay produced a sent deliveries row ✅ DLQ row marked discarded after replay ✅ GET /v1/dlq no longer returns the discarded row Step 5 — discard: another DLQ row, then POST /v1/dlq/{id}/discard ✅ POST /v1/ingest accepted, alert_id=0000019ec9d5f8d10e7e0d6c25 ✅ 1 row in deliveries_dlq for 0000019ec9d5f8d10e7e0d6c25 ✅ POST /v1/dlq/6/discard returned discarded=true ✅ GET /v1/dlq hides the discarded row ✅ GET /v1/dlq?include=all shows the discarded row 🎉 M8 smoke: 12/12 checks green. ``` ## Run 3 — 2026-06-14 23:42 EDT ``` Step 1 — stack ready ✅ ingestd healthy ✅ admind healthy ✅ deliveries_dlq table present ✅ fakefcmd fail mode = 0 (healthy) Step 2 — happy path: 1 alert, 1 attempt, 0 DLQ rows ✅ POST /v1/ingest accepted, alert_id=0000019ec9745b93ddb424a039 ✅ 2 sent deliveries rows for happy alert (>=1) ✅ DLQ row count unchanged (0) Step 3 — DLQ creation: flip fakefcmd to fail, 1 alert, retries exhaust ✅ fakefcmd fail mode = 1 ✅ POST /v1/ingest accepted, alert_id=0000019ec9491f17fee64e8441 (will fail at delivery) ✅ 1 row in deliveries_dlq for 0000019ec9491f17fee64e8441 ✅ DLQ row has attempts=10 ✅ 10 failed deliveries rows (>= 10 for one recipient × 10 attempts) ✅ GET /v1/dlq returns the row Step 4 — replay: flip fakefcmd healthy, POST /v1/dlq/9/replay ✅ fakefcmd fail mode = 0 ✅ POST /v1/dlq/9/replay returned replayed=true ✅ replay produced a sent deliveries row ✅ DLQ row marked discarded after replay ✅ GET /v1/dlq no longer returns the discarded row Step 5 — discard: another DLQ row, then POST /v1/dlq/{id}/discard ✅ POST /v1/ingest accepted, alert_id=0000019ec92207d06f3f1bffbe ✅ 1 row in deliveries_dlq for 0000019ec92207d06f3f1bffbe ✅ POST /v1/dlq/10/discard returned discarded=true ✅ GET /v1/dlq hides the discarded row ✅ GET /v1/dlq?include=all shows the discarded row 🎉 M8 smoke: 12/12 checks green. ``` ## Summary | Run | Time (ET) | Result | | --- | --- | --- | | 1 | 23:36 | 12/12 ✅ | | 2 | 23:39 | 12/12 ✅ | | 3 | 23:42 | 12/12 ✅ | 3 consecutive 12/12 green runs. M8 exit criteria met. ## Re-running the smoke on the remote playground `parres` This log was produced on the local 1-CPU QEMU host. The M7 smoke log (`M7_SMOKE_LOG.md`) was produced on the remote playground `parres` (192.168.44.94, Proxmox LXC, 4 CPU / 15 GiB RAM). To re-run M8 on `parres`: ```bash ssh parres cd /root/git/broad-announce && git pull docker compose build docker compose up -d bash scripts/m8_smoke.sh ``` `parres` is not reachable from this development host (TCP RST on 22/80), so the verification doc was generated locally and the remote re-run is left to the operator.