← All stories

BRANCH · ef-089-email-deliverability-report

Email deliverability and sent emails reports

EF-089Persona: OrganizerStage: CloseoutRoots in: admin-shell-access

Organizer audits delivered, opened, clicked, bounced, and suppressed email events by mailing or event, then exports the rollup through the shared async report job lifecycle.

Happy path

  1. Open Email Deliverability from Reports.

    The report can aggregate per mailing or across the event.

  2. Inspect status counts.

    Delivered, opened, clicked, bounced, and suppressed counts use the ui-status-pill registry.

  3. Generate export.

    The async job tracker shows progress until the deliverability artifact is ready.

Failure modes

Email status count mismatch

Trigger: totals do not reconcile across delivered/opened/clicked/bounced/suppressed.

Resolution: summary flags inconsistent aggregation before export.

Mailing/event aggregation ambiguity

Trigger: per-mailing filters leak event-level rows.

Resolution: aggregation mode is explicit in the preview and export digest.

Status registry missing value

Trigger: suppressed or bounced renders as an unknown raw string.

Resolution: ui-status-pill registry covers all deliverability states.

Deployed-runtime gap

Trigger: deployed run on 2026-04-29 observed email-deliverability report job create returned 400 D1 bootstrap error; the probe locks this in until the gap is closed.

Resolution: status 400 remains expected until deployed D1 bootstrap is fixed.

Stable test attributes

Visibility teeth. Each attribute must be effectively visible when active.

email-deliverability-report-pagePageEmail deliverability report surface
email-deliverability-aggregation-modeFormPer-mailing or per-event mode
email-deliverability-mailing-pickerFormMailing selector
email-deliverability-status-summaryPreviewDelivered/opened/clicked/bounced/suppressed counts
email-deliverability-status-pillPreviewStatus display registry
email-deliverability-generate-ctaToolbarCreate report job
email-deliverability-job-trackerPageAsync report lifecycle
email-deliverability-download-ctaJob rowDownload artifact
email-deliverability-regenerate-ctaJob rowRegenerate expired/swept artifact
email-deliverability-error-panelJob rowFailure reason and request id
email-deliverability-stuck-bannerJob rowQueued too long warning
email-deliverability-permission-gateCatalogPermission-filtered report entry
email-deliverability-gap-panelPageRuntime gap notice

Agent test plan

- email-deliverability-renders
- generate-email-deliverability-report
- status-pill-registry-covers-email-events
- deployed-runtime-gap