This release fixes issues for SREs watching stability and regressions.
✓ No known CVEs patched in this version
Topics
Affected surfaces
Summary
AI summaryFixed multiple critical bugs in the rules engine that caused messages to vanish or misbehave and corrected notification suppression for mark_read actions.
Full changelog
v1.5.2 — Rules engine reliability
This release is a comprehensive fix for the inbox rules engine. Several bugs were causing rules to silently misbehave: moved messages vanishing from the inbox without arriving in the target folder, subsequent rules firing on already-relocated messages, incorrect match semantics for not_contains, and notification suppression not working for mark_read rules.
Bug fixes
Rules engine — message routing
- Fixed a race condition where IMAP EXPUNGE events triggered by a rule-initiated move could cause
reconcileDeletesto delete the DB row before the destination UID was recorded, making messages vanish from both folders. All move paths (rule actions, user-initiated moves, snooze) are now guarded against this race. - Fixed an issue where subsequent rules would attempt IMAP operations on a message already moved by an earlier rule, generating error logs and unnecessary IMAP round trips. Non-destination actions (
mark_read,star) in later rules now correctly continue to fire after a relocation; only additional destination actions are skipped. - Fixed
moveaction for all-accounts rules (account_id = null) being incorrectly allowed at the API level. Move actions require a specific account context and are now rejected for all-accounts rules. - Fixed a bug in
not_containsmatching on thefromfield: both email address and display name must not contain the value (was using OR, now uses AND, so a sender cannot escape the filter via a non-matching display name). - Fixed a bug in
not_containsmatching on thetofield with multiple recipients: all recipients must not contain the value (was usingsome(), now usesevery(), so a single non-matching recipient no longer incorrectly triggers the rule). - Fixed an edge case where a blank condition value (
contains "") would silently match every message, potentially moving or deleting all incoming mail.
Rules engine — notifications and counts
- Fixed
mark_readrules not suppressing sound, toast, and push notifications. Messages actioned by amark_readrule are now excluded from the alert path; the message list still refreshes but no sound or push is sent. - Fixed per-folder unread and total counts drifting after rule actions.
move,archive,delete, andmark_readactions now immediately update the folder count cache rather than waiting for the next reconcile cycle (~10 minutes). - Fixed a potential double-decrement of the unread count when a
mark_readrule fires at higher priority than amoverule targeting the same message.
Rules API
- Fixed
headerconditions with a blankheaderNamebeing silently saved and never matching. The API now returns a validation error requiring a non-empty header name.
Internal
- Added 14 new unit tests covering the above scenarios, bringing the rules test suite to 25 tests (190 total across all suites).
- All IMAP move paths (rule actions, block list, user-initiated delete/snooze, snooze wakeup) now use a consistent UID guard pattern to prevent reconcile race conditions.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
Beta — feedback welcome: [email protected]