| # | Acceptance Criteria | |---|----------------------| | | Wizard validates required fields, prevents saving if runAt is in the past. After save, schedule appears in List view. | | US‑02 | When tzMode = user , delivery worker resolves each recipient’s timezone from the user profile and adjusts runAt accordingly. Unit test covering PST, CET, UTC+13. | | US‑03 | Tokens are replaced correctly; missing token renders as empty string, not placeholder. | | US‑04 | If a user already hit the daily limit, the worker logs rate_limited and does not call the provider. | | US‑05 | Audit entry created for each Create/Update/Delete with diff JSON showing changed fields. | | US‑06 | /metrics endpoint returns Prometheus format counters that increment on each successful send. | | US‑07 | End‑to‑end Cypress test that creates a schedule, advances time (via test‑only clock mock), asserts that a mock email endpoint receives the message at the expected local hour. |