Problem/Motivation
Suppression is derived entirely from the event log. Default 90-day cron retention deletes hard-bounce and permanent-complaint evidence, allowing sends again. A configured temporary window longer than retention is also shortened.
Evidence and scope
Reviewed 1.0.0-alpha1, source commit 02fd9d36af5237e712cecb7155d79725f7824880. Location: postmark_webhooks.module:48.
Kernel reproduction: a 91-day-old hard bounce suppresses before cron and no longer suppresses after cron. The settings form calls this permanent, while README acknowledges the limitation.
Proposed resolution
Keep minimal durable suppression state separately from expiring event history. Migrate existing evidence, preserve reason and expiry, and specify explicit release semantics. Logging retention must not silently change delivery policy.
Acceptance criteria
Prove permanent suppression survives purge, temporary expiry remains correct, shorter retention does not shorten windows, and migrations preserve decisions. Update form and docs together; retaining all event history forever is not the final solution.
Issue fork postmark_webhooks-3621121
Show commands
Start within a Git clone of the project using the version control instructions.
Or, if you do not have SSH keys set up on git.drupalcode.org:
Comments
Comment #2
jmcerdaImplementation is under review with the related occurrence-time and shared-policy changes (#3621124 and #3621126). Minimal durable evidence survives event purge; event and state writes commit together. PostgreSQL tests on Drupal 10.3/PHP 8.3 and Drupal 11/PHP 8.4 cover permanent/temporary retention, retained alpha upgrades, concurrent distinct events, and rollback on state failure. Review findings around frozen upgrade definitions, receipt-time consistency and migration progress have been fixed and regression-tested. Public 1.x will be updated after integration review.
Comment #8
jmcerdaDurable suppression is now integrated into 1.x at d3c5d94, together with validation (#3621122), provider occurrence time (#3621124), and the shared decision policy (#3621126). PostgreSQL CI passes on Drupal 10.3/PHP 8.3 and Drupal 11/PHP 8.4: 39 tests, 226 assertions each, including retained alpha migration, suppression surviving event purge, concurrent receiver processes and rollback on persistence failure.
Fixed on the development branch; not yet tagged or deployed. Run database updates when upgrading an existing alpha installation. Previously discarded history remains unrecoverable.