## v0.4.0 release — retention fix, auto-tagging, tag management
- **Critical retention fix** — `retention_months=0` now means keep forever (was silently falling back to 3-month default, purging mail meant to be kept indefinitely)
- **Scheduled sync** — systemd timer caches emails from Resend every 6 hours, before their retention expires, even if the user never opens the UI
- **Auto-refresh** — 60-second polling when the tab is visible, plus a manual refresh button
- **Spam auto-tagging** — DMARC reports and scam/domain-renewal emails auto-tagged `spam` on ingest
- **DMARC auto-tagging** — DMARC reports also tagged `dmarc` for filtering
- **Tag counts in sidebar** — total message count per tag, not just unread
- **Hide tagged from inbox** — any message with any user tag is excluded from the inbox; only untagged messages appear
- **"Tag similar" modal** — tagging a message offers to also tag all messages from the same sender, with optional subject filter
- **Cache headers** — UI files now send `no-cache` to prevent stale JS after deploys
💼 Other
- [11/09]Release v0.4.0
- [11/09]Auto-tag DMARC reports with 'dmarc' tag on ingest
- [11/09]Hide all tagged messages from the inbox
- [11/09]Fix missing closing paren in return statement
- [11/09]Fix JSX syntax error: wrap AppLayout + TagSimilarModal in fragment
- [11/09]Add 'Tag similar messages' modal with from + subject filter
- [11/09]Hide spam-tagged messages from the inbox view
- [10/09]Show total message count per tag in sidebar
- [10/09]Fix bulk tag action not creating tag row in tags collection
- [10/09]Add no-cache headers to UI files to prevent stale JS after deploys
- [10/09]Auto-tag DMARC reports and scam emails as spam on ingest
- [10/09]Add refresh button and 60s auto-refresh to webmail UI
- [10/09]Fix retention_months=0 purging mail meant to be kept forever