Problem/Motivation
Other Drupal modules can query the suppression policy but lack a documented notification contract for newly accepted events or effective suppression changes. CRM, membership and workflow integrations otherwise need to poll or depend on private tables.
Proposed resolution
Design an opt-in typed notification API with a transactional outbox or equivalent durable handoff. Keep authoritative intake and suppression updates synchronous; deliver integration work after commit through bounded workers.
Acceptance criteria
- Define minimal versioned event DTOs, event identity, source context and which changes emit notifications; do not expose raw webhook bodies or credentials.
- Ensure a duplicate webhook and a rolled-back transaction create no additional logical notifications.
- Document at-least-once delivery and consumer idempotency; do not promise exactly-once external side effects.
- Provide bounded retry/backoff, inspectable failed deliveries, controlled replay and retention; subscriber failure must not undo accepted suppression evidence.
- Test crash boundaries between commit and dispatch, duplicate worker execution and replay.
- Provide an example subscriber for a site workflow; optional ECA/Rules adapters can be separate follow-up work after the contract is established.
Scope and dependencies
Optional follow-up after stable release; not a blocker for #3621224: Complete the 1.0.0 stable release verification gates. Builds on #3621126: Add a shared suppression decision service with a stable extension API; the completed original issue remains fixed.
Comments
Comment #12
jmcerdaMerged to 1.x. Opt-in transactional outbox delivers typed v1 events after unique webhooks and suppression changes commit. Intake stays synchronous. Delivery is at-least-once after commit; subscribers must be idempotent. Duplicate webhooks and rolled-back transactions create no extra notifications. Subscriber failure does not undo suppression. Drush inspect omits recipients. Disabled by default.