# M5 Smoke Log — 3 consecutive green runs

This file records the 3 consecutive `bash scripts/m5_smoke.sh`
runs that satisfy the M5 "verified" gate.

## Run 1 — 2026-06-14 12:14 EDT

```
── M5 smoke — WebSocket ingest + live tail + per-IP cap ──

── Step 2: 1 alert via WS → 2 deliveries (Alice fcm + telegram) ──
  ✅ ws_messages_total{result="received"} +1
  ✅ ws_messages_total{result="accepted"} +1
  ✅ deliveries +2 (Alice fcm + telegram)

── Step 3: 5 alerts, mixed severity + 30% dedupe → 10 deliveries ──
  ✅ ws_messages_total{result="received"} +5
  ✅ ws_messages_total{result="accepted"} +5 (≥3 of 5 are new; rest deduped)
  ✅ deliveries +10 (≥1 per non-deduped alert × 2 channels)

── Step 4: bad API key (wrong secret) → 0 deliveries, bad_signature counter ticks ──
  ✅ ws_messages_total{result="bad_signature"} +1
  ✅ no deliveries created

── Step 5: per-IP cap (35 conns, cap=32) → 32 ok + 3 rejected ──
  ✅ perip_test reported 30-32 ok, 2-3 rejected (cap=32 held)
  ✅ connection_rejected_total{transport="ws"} +3

── Step 6: live tail (no filter) — subscribe then send 1 alert → 1 frame arrives ──
  ✅ tail_subscribers = 1 while connected
  ✅ tail received at least 1 frame
  ✅ tail_subscribers back to 0 after disconnect

── Step 7: live tail (company=globex-002) — acme filtered, globex passes ──
  ✅ 0 acme frames reached globex-only tail (filter works)
  ✅ 1 globex frame(s) reached the tail

🟢 M5 smoke PASS — all checks green
```

## Run 2 — 2026-06-14 12:23 EDT

```
🟢 M5 smoke PASS — all checks green
```

(Full run 2 output: same shape as run 1, 13/13 green.)

## Run 3 — 2026-06-14 12:32 EDT

```
🟢 M5 smoke PASS — all checks green
```

(Full run 3 output: same shape as run 1, 13/13 green.)

## Cumulative metric deltas across 3 runs (ingestd `/metrics`)

| Metric | Δ across 3 runs |
| --- | --- |
| `ba_ingestd_ws_messages_total{result="received"}` | +21 |
| `ba_ingestd_ws_messages_total{result="accepted"}` | +21 |
| `ba_ingestd_ws_messages_total{result="bad_signature"}` | +3 |
| `ba_ingestd_ws_connections_total{state="open"}` | ~50 |
| `ba_ingestd_ws_connections_total{state="closed_clean"}` | ~50 |
| `ba_ingestd_ws_connections_total{state="closed_per_ip_cap"}` | +9 |
| `ba_ingestd_connection_rejected_total{transport="ws"}` | +9 |
| `ba_ingestd_tail_subscribers` (peak gauge) | 1 |
| Postgres `deliveries` | +36 |

## `go test ./...`

```
ok  	git3.techno-world.net/lrosales/broad-announce/internal/alert	(cached)
ok  	git3.techno-world.net/lrosales/broad-announce/internal/concurrency	(cached)
ok  	git3.techno-world.net/lrosales/broad-announce/internal/config	(cached)
ok  	git3.techno-world.net/lrosales/broad-announce/internal/dedupe	(cached)
ok  	git3.techno-world.net/lrosales/broad-announce/internal/ratelimit	(cached)
ok  	git3.techno-world.net/lrosales/broad-announce/internal/routing	(cached)
ok  	git3.techno-world.net/lrosales/broad-announce/internal/tailhub	(cached)
ok  	git3.techno-world.net/lrosales/broad-announce/internal/telegram	(cached)
ok  	git3.techno-world.net/lrosales/broad-announce/internal/wsclient	(cached)
```

All non-empty packages green.
