{% comment %} The live figures (SPEC §13.2). Polled every three seconds; the view answers 304 when none of these numbers moved, so an idle broadcast page costs a request line. Every number is computed in apps/broadcasts/services.py::counters from the recipient rows, which is what makes `queued = sent + failed + cancelled + skipped` reconcile by construction rather than by a running total somebody has to keep correct. `delivered` and `read` are joined off the message row that apps/messaging/ingest.py advances when a delivery receipt arrives — this app has no receipt path of its own. {% endcomment %}
Working out who this reaches…
{% else %} {% endif %}Why people were skipped
{% for reason in reasons %}