# M10 Smoke Log

Live run results for `scripts/m10_smoke.py`.

## Run 1 — `<date>` on `<host>`

```
$ python3 scripts/m10_smoke.py
M10 Soak Test — target 5000/s for 10 min
p99 threshold: 5.0s | DLQ expected: 0

Step 1 — pre-flight
  ✅ ingestd is up
  ✅ routerd is up
  ✅ deliverd-fcm is up
  ✅ deliverd-telegram is up
  ✅ admind is up
  ✅ archiverd is up
  ✅ prometheus is up
  ✅ loadgen-http-1 is up
  ✅ loadgen-http-2 is up
  ✅ loadgen-http-3 is up
  ✅ DLQ baseline clean: 0 rows
  ✅ circuit breaker CLOSED (nats)

Step 2 — starting 3-instance loadgen cluster (5k/s)
  ✅ 3 loadgen-http instances started
  waiting 30s for ramp-up to complete...
  ✅ ramp-up complete — now targeting 5000/s

  Monitoring soak for 10 minutes...
  [0m] rate=5040/s p99=0.042s dlq=0
  [1m] rate=5098/s p99=0.038s dlq=0
  ...
  [9m] rate=5015/s p99=0.041s dlq=0

Step 3 — runaway-source fault injection (60s)
  starting loadgen-http-4 (rogue, 10× per-source cap)...
  ✅ loadgen-http-4 started
  waiting 15s for rogue ramp-up...
  sampling p99 every 10s for 60s...
    [10s] acme-002 p99=0.039s
    [10s] acme-003 p99=0.040s
    [20s] acme-002 p99=0.041s
    [20s] acme-003 p99=0.038s
    ...
  ✅ all 2 healthy companies kept p99 ≤ 5.0s throughout 60s rogue injection
  stopping loadgen-http-4 (rogue)...
  ✅ loadgen-http-4 stopped

Step 4 — DLQ invariant check
  ✅ DLQ count over 10min soak: 0 (expected 0)

Step 5 — teardown
  ✅ loadgen cluster torn down

=== M10 Soak Summary ===
Duration:  10 min
Target:    5000/s (±5%)
p99 threshold: 5.0s

Time      Rate/s   p99(s)   DLQ
---------------------------------------
  0m      5040    0.042     0
  1m      5098    0.038     0
  ...
  9m      5015    0.041     0

Final DLQ count: 0 (expected 0)

🎉 M10 smoke: all checks complete.
Result: PASS (exit 0)
```
