v1.5.1
v1.5.1 — Inbox Rules Fix
This release fully resolves issue #133, where "move to folder" inbox rules caused messages to disappear from the inbox without arriving in the target folder.
Bug Fixes
Inbox rules — move to folder action
- Replaced the free-text IMAP path input in the rules editor with a folder dropdown populated directly from the account's IMAP folder list, eliminating the root cause of wrong folder paths being saved
- The rules form now fetches folders for the selected account when it opens, so the dropdown is reliable regardless of whether the sidebar has been navigated first
- Changing the account selector clears any saved move destination to prevent stale paths from a previously selected account carrying over
- Opening an existing rule for editing now normalizes any legacy rules that somehow contain multiple destination actions (move + archive, etc.)
- Backend create and update endpoints now enforce that only one destination action (move, archive, or delete) is kept per rule, silently dropping any extras
- Move destination paths are trimmed of whitespace before saving so what is validated matches what is stored and later executed
- For account-scoped rules, the backend now validates that the move destination folder exists in the synced folder list before saving, returning a clear 400 error instead of silently saving a rule that will fail at runtime
- Execution-time deduplication added: legacy rules already in the database with multiple destination actions now correctly execute only the first one, without requiring a manual edit-and-save
- A failing destination action (e.g. wrong folder path) no longer causes a subsequent archive or delete to run as a silent fallback — the message stays in the inbox and the error is logged
- No-op destination actions (blank move destination, unconfigured archive folder, no trash strategy) no longer incorrectly remove messages from the new-message broadcast
normalizeActionsnow safely handles malformed API input such as null entries or non-string values without throwing a 500- Fixed keyboard j/k navigation marking the wrong message as read when a search is active
- Translated the folder picker prompt correctly in German, Spanish, French, Italian, Russian, and Chinese (Simplified)
Tests
- 12 unit tests for
normalizeActionscovering deduplication, trimming, and malformed input - 6 integration tests for
applyInboxRulescovering execution-time deduplication, no-op handling, and the silent-fallback regression case