What's Changed
- mail: Unify account search and split controls by @elie222 in #3585
- mail: Collapse the sidebar to an icon rail and let it be resized by @elie222 in #3589
- mail: Restore offline inbox loading and desktop recovery by @elie222 in #3590
- tooling: Add a pr-watch skill and split PR monitoring out of create-pr by @elie222 in #3591
- fix: prevent duplicate email branding and footer scoring penalties by @elie222 in #3592
- settings: Open settings in a dialog from any page by @elie222 in #3594
- mail: Add inline calendar invitation responses by @elie222 in #3595
- mail: Let a split cover several labels and split search from AI assist by @elie222 in #3593
- mail: Align and lighten date section headings by @elie222 in #3599
- mail: Focus email before leaving draft with Escape by @elie222 in #3596
- fix(mail): show starred indicator in email reader by @elie222 in #3598
- mail: Separate thread fetching and share split query construction by @elie222 in #3597
- fix: open settings dialog from command palette by @elie222 in #3600
- fix: clarify promotional email classification by @elie222 in #3601
- fix: invalidate stale conversation caches during mailbox sync by @elie222 in #3604
- mail: Unify split storage and add management dialogs by @elie222 in #3606
- mail: Buffer unfinished pages to avoid repeated provider fetches by @elie222 in #3603
- ci: Reduce browser jobs and narrow shared-feature coverage by @elie222 in #3602
- mail: Handle missing child folders in sidebar by @elie222 in #3607
- mail: Invalidate outdated persisted settings cache by @elie222 in #3610
- fix: escape Outlook contact search values by @elie222 in #3611
- Logging: Improve client crash diagnostic correlation by @elie222 in #3612
- fix: Disconnect invalid Gmail grants during webhook processing by @elie222 in #3609
- feat(auth): add opt-in email code sign-in by @elie222 in #3608
- fix(mail): refresh date groups across midnight by @elie222 in #3616
- fix(settings): show the email used for code sign-in by @elie222 in #3619
- docs: changelog — Label Conversations (Sep 7) by @cursor[bot] in #3576
- fix: prevent long email text from overflowing the reader by @elie222 in #3620
- mail: Fix calendar cards for duplicate invitation attachments by @elie222 in #3621
- Gmail: Improve watch and webhook tracing by @elie222 in #3622
- fix: classify email send failures and retain diagnostics by @elie222 in #3623
- Fix incomplete exact sender search in Outlook chat by @gentlemandev in #2961
- fix(mail): wait for complete mailbox reconciliation by @elie222 in #3624
- chat: Fix sender search schema compatibility by @elie222 in #3625
- mail: Add split inbox library and condition builder by @elie222 in #3626
- Fix Outlook scoped cleanup and deletion completion by @elie222 in #3627
- mail: widen sender column and coarsen list date sections by @elie222 in #3628
- Gmail: Reuse shared fields for tracing logs by @elie222 in #3630
- ui: Fix double focus outline on inputs, selects, and textareas by @elie222 in #3634
- fix: add safe Gmail send diagnostics by @elie222 in #3631
- ui: Fix components page crash and trim form fields copy by @elie222 in #3636
- fix(mail): preserve email content during document updates by @elie222 in #3635
- fix: Protect and restore the default mail tab by @elie222 in #3637
- docs: changelog — Split Inbox Library (Sep 10) by @cursor[bot] in #3633
- INB-356: Exclude drafts from thread participants by @gentlemandev in #3615
- INB-357: Preserve collapsed signatures when composing by @gentlemandev in #3617
- mail: Prevent crashes from outdated cached settings by @elie222 in #3638
- test: add opt-in email loading simulation by @elie222 in #3639
- fix: improve inline reply text contrast by @elie222 in #3642
- feat(mail): add important and catch-all inbox splits by @elie222 in #3645
- mail: Improve opt-in contact autocomplete by @elie222 in #3643
- Desktop: add unread badges and background mail notifications by @elie222 in #3629
- INB-358: Preserve compose drafts when closing the composer by @gentlemandev in #3618
- INB-348: Keep inbox unread count updated in real time by @gentlemandev in #3470
- meetings: Open related draft from Go to Drafts (INB-328 review fixes) by @elie222 in #3640
- security: upgrade Next.js to 16.3.4 (GHSA-2xp9-vwfh-vxw4, CVE-2026-75604) by @elie222 in #3491
- chore: drop temporary next ncu/maturity exclude after 16.3.4 by @elie222 in #3648
- mail: Apply sidebar colors and raised active rows by @elie222 in #3647
- docs: changelog — Important and Other (Sep 11) by @cursor[bot] in #3646
- Mail: Add split tab reordering and simplify controls by @elie222 in #3644
- ci: Report startup failures promptly and preserve server diagnostics by @elie222 in #3632
- INB-355: Add select-all option to mail thread list by @gentlemandev in #3614
- fix: scope Outlook draft queries to the drafts folder by @elie222 in #3650
- mail: Match the compose window to the inline reply composer by @elie222 in #3649
- INB-352: Keep active calls in the upcoming meetings list by @gentlemandev in #3507
- mail: Prevent blank frames when navigating between threads by @elie222 in #3652
- chore: update dependencies and enforce exact versions by @elie222 in #3651
- ci: Reduce dependency cache overhead and separate E2E status by @elie222 in #3654
- ci: Run browser tests against a shared production build by @elie222 in #3655
- auth: Reuse linked mailboxes by provider account identity by @elie222 in #3656
- ci: Run all browser specs in production mode by @elie222 in #3657
- bugfix-batch-0139: Scope digest action lookup by email account by @elie222 in #2519
- digest: Prevent duplicate pending digests by @elie222 in #2518
- ci: skip duplicate type checking in browser build by @elie222 in #3662
- auth: Handle verified Google email renames by @elie222 in #3663
- mail: Add star toggle to the thread actions menu by @elie222 in #3664
- cli: Align Compose and app environment loading by @elie222 in #3659
- ci: group browser specs by feature to reduce runner demand by @elie222 in #3666
- fix: Preserve actionable email preview errors by @elie222 in #3658
- fix(mail): show matched reasons per message by @elie222 in #3665
- Share model evidence across evals by @elie222 in #3087
- fix: skip database cleanup for uninitialized workspaces by @elie222 in #3673
- rules: Make draft replies optional during bulk processing by @elie222 in #3670
- fix(mail): Restore shortcuts from focused email bodies by @elie222 in #3667
- fix: isolate mail panel errors and improve recovery by @elie222 in #3672
- fix: display draft-only email threads by @elie222 in #3674
- fix(mail): clarify rule action display by @elie222 in #3676
- test(chat): Share complete assistant write-tool checks by @elie222 in #3677
- rules: Reconcile learned patterns while preserving corrections by @elie222 in #3669
- follow-up: Reach pending reminders beyond completed candidates by @elie222 in #3675
- history: Group conversations with paginated message details by @elie222 in #3660
- calendar: Surface Outlook reauthorization failures safely by @elie222 in #3668
- mail: Support domain sender conditions by @elie222 in #3678
- mcp: Add OAuth server with explicit consent and scoped access by @elie222 in #3661
- mail: Refresh Outlook tokens early and preserve reader actions by @elie222 in #3671
- chore(prisma): move User provisioning fields to the end by @elie222 in #3682
- fix: normalize migration whitespace across PostgreSQL versions by @elie222 in #3679
- command-k: Add Go to Mail navigation by @elie222 in #3685
- docs: changelog — Domain Filters for Splits (Sep 12) by @cursor[bot] in #3688
- security: upgrade linkify-it to 5.0.2 by @elie222 in #3687
- mail: Add Gmail-style advanced search options by @elie222 in #3689
- mail: Add undo send for compose and replies by @elie222 in #3683
- fix(docker): Allow Meriyah to be absent from standalone trace by @elie222 in #3691
- fix(docker): Remove obsolete Meriyah tracing workaround by @elie222 in #3692
- desktop: Open mailboxes in multiple windows by @elie222 in #3684
- mail: Paint unstyled HTML emails on the reader surface by @elie222 in #3696
- mail: Hide inline sending row for replies by @elie222 in #3693
- mail: Show when sent messages are opened by @elie222 in #3680
- mail: Suggest Gmail other contacts while composing by @elie222 in #3694
- mail: Keep archived mail locally and filter inbox views by @elie222 in #3695
- auth: Key Microsoft accounts on the Entra object id by @elie222 in #3704
- fix: restore shared data fetching on the upgrade page by @elie222 in #3702
- auth: Bind account reconnects to the mailbox they target by @elie222 in #3708
- mail: Keep forwards in their thread and explain unreadable threads by @elie222 in #3707
- billing: Fix trial conversion and scheduled cancellation tracking by @elie222 in #3701
- mail: Keep Outlook forwards in their conversation by @elie222 in #3710
- chore: Resolve the Microsoft account key from stored id_tokens by @elie222 in #3711
- test: Cover the signup-to-paid flow with a Stripe emulator by @elie222 in #3709
- mail: Carry a forward's attachments on Gmail by @elie222 in #3712
- integrations: Fix Attio OAuth client registration failure by @elie222 in #3713
- Add isolated browser unsubscribe worker by @elie222 in #3686
- mail: Parse the recipients of an Outlook reply by @elie222 in #3715
- mail: Show the files a forward carries by @elie222 in #3714
- Meeting briefs: prioritize decisions and improve context retrieval by @elie222 in #3705
- mail: Fix search field font size and add search suggestions by @elie222 in #3716
- Add provider-agnostic voice for chat and compose by @elie222 in #3698
- mail: Add slash snippets in compose by @elie222 in #3697
- mail: Focus the To field when forwarding by @elie222 in #3706
- mail: Surface mark as read next to archive by @elie222 in #3718
- llm: Add Cerebras provider and upgrade to AI SDK 7 by @elie222 in #3703
- unsubscribe: Skip page classification that cannot change the result by @elie222 in #3717
- desktop: Coalesce web update reload prompts by @elie222 in #3719
- mail: Move keyboard shortcuts from the sidebar into Command K by @elie222 in #3721
- mail: Offer named snooze times instead of relative presets by @elie222 in #3722
- desktop: Keep the collapsed mail rail below the traffic lights by @elie222 in #3720
- mcp: Show a clear message on the consent page for email code sessions by @elie222 in #3723
- auth: Require a provider session to link or reconnect a mailbox by @elie222 in #3724
- mail: Align the advanced search panel with the search field by @elie222 in #3725
- mail: Keep quote toggle above expanded history by @elie222 in #3729
- mail: Show Outlook participants across conversation folders by @gentlemandev in #3498
- unsubscribe: Fix the worker image build and its install instructions by @elie222 in #3731
- mail: Restore Outlook calendar invitation responses by @elie222 in #3728
- meetings: Open follow-up drafts within Outlook mail by @elie222 in #3727
- mail: Refresh draft indicators after reader changes by @elie222 in #3730
- mail: Preserve every saved draft in thread composers by @elie222 in #3641
- unsubscribe: Let the sandbox browser reach the broker by @elie222 in #3733
- unsubscribe: Stop shipping a second copy of the browsers by @elie222 in #3734
- mail: Save new messages as mailbox drafts by @elie222 in #3732
- mail: Collapse sidebar labels from the group heading by @elie222 in #3736
- docs: changelog — Advanced Search (Sep 15) by @cursor[bot] in #3700
- unsubscribe: Finish the unsubscribe instead of opening the sender's page by @elie222 in #3738
- mail: Keep archived threads out of inbox splits by @elie222 in #3735
- mail: Remove server-side compose draft storage by @elie222 in #3737
- mail: Add local-first search with provider completion by @elie222 in #3739
- onboarding: Guard persona refresh after navigation by @elie222 in #3747
- fix: prevent attachment download button clipping by @elie222 in #3751
- fix(mail): Preserve draft references and clarify failed reply recovery by @elie222 in #3749
- refactor(ui): consolidate shared component styling by @elie222 in #3752
- mail: Activate background sync after opening mail by @elie222 in #3741
- mail: Persist sync ownership and retry checkpoints by @elie222 in #3742
- mail: Persist resumable search index work by @elie222 in #3744
- fix: prevent hydration mismatch from conditional contactPoint in home… by @Samiullah-2004 in #3436
- fix(cli): use valid Gemini model IDs by @keshavraj936 in #3489
- mail: Respect and edit Gmail label visibility settings by @elie222 in #3755
- mail: Persist canonical message records by @elie222 in #3745
- llm: refresh default model lists across providers by @elie222 in #3756
- mail: Collapse non-inbox views into one Mail group, add scheduled view by @elie222 in #3753
- mail: Add persistent local search by @elie222 in #3746
- mail: Add budgeted local synchronization protocols by @elie222 in #3748
- mail: Add durable activated mailbox sync runtime by @elie222 in #3750
- onboarding: Add paywall-first onboarding A/B test by @elie222 in #3757
- onboarding: Fix blank onboarding page for the paywall-first arm by @elie222 in #3759
- chore: Remove concluded experiment flags and park the chat onboarding by @elie222 in #3763
- mail: Unify hover shortcuts as label plus key chips by @elie222 in #3764
- feat(mail): add local storage controls and cached attachments by @elie222 in #3754
- teams: Add environment flag for connection UI by @elie222 in #3769
- chore: sync main into staging (2026-09-17) by @elie222 in #3767
- mail: Keep designed HTML emails light in dark mode by @elie222 in #3766
- mail: Fix Outlook advanced search failing to fetch threads by @gentlemandev in #3765
- meetings: Open Outlook follow-up drafts in the full mail client by @gentlemandev in #3762
- calendar: Show invite response buttons for Exchange-regenerated invitations by @gentlemandev in #3760
- mail: Drop in-progress search status banner by @elie222 in #3770
- mcp: Make the remote server live-ready at /mcp by @elie222 in #3768
- docs: Drop internal MCP rollout notes from public copy by @elie222 in #3775
- perf: Paint the homepage hero immediately and cut boot work by @elie222 in #3773
- mail: Add opt-in OTP split inbox by @elie222 in #3771
- mail: Keep mail offline without asking by @elie222 in #3772
- perf: Shrink the homepage hero thumbnail by @elie222 in #3778
- fix: Resolve stream-json in Turbopack by @elie222 in #3777
- mail: Split Gmail and Outlook advanced search into native queries by @elie222 in #3774
- settings: Move MCP under Account and document ChatGPT, Claude, Cursor by @elie222 in #3779
- mcp: Accept Cursor's host-bearing OAuth redirect URI by @elie222 in #3780
- mail: Remove the offline-copy guards left with no writer by @elie222 in #3781
- mail: Answer boolean searches from the local index by @elie222 in #3782
- mail: Drop two local-mail protections nothing can reach by @elie222 in #3783
- mcp: Hand Cursor's native callback back after consent by @elie222 in #3784
- mail: Search attachments and relative dates from the local index by @elie222 in #3785
- docs: Note that an index schema change needs a source version bump by @elie222 in #3788
- billing: Allow existing subscribers to switch to annual billing by @elie222 in #3786
- mail: Wait for local search before prompting for the provider by @elie222 in #3790
- rules: Add optional classifier-based rule selection by @elie222 in #3791
- reply-tracker: Define conversation statuses once, on the rule by @elie222 in #3787
- billing: Stabilize onboarding experiment tracking by @elie222 in #3797
- mail: Restrict attachment previews to raster images by @elie222 in #3798
- auth: Bind native sign-in handoffs to provider completion and PKCE by @elie222 in #3799
- auth: Require application admin access for SSO management by @elie222 in #3800
- onboarding: Use PostHog as experiment assignment source by @elie222 in #3801
- rules: Enable explicitly created rules without a second toggle by @elie222 in #3804
- rules: Drop AI sender patterns on custom rules when their label is removed by @elie222 in #3805
- reply-tracker: Ignore the assistant's own filing emails when determining thread status by @elie222 in #3795
- rules: Ask the classifier about cold email as its own yes/no by @elie222 in #3807
- auth: Keep inline profile photos out of the session cookie by @elie222 in #3809
- docs: changelog — Instant Local Search (Sep 17) by @cursor[bot] in #3758
- assistant: Clarify user intent for email-based rules by @elie222 in #3803
- mail: Keep Outlook attachment flags in local search by @elie222 in #3810
- test: Drop low-value MCP copy and implementation-mirror tests by @elie222 in #3776
- ai: Add optional JEV decision-model routing by @elie222 in #3806
- billing: Mark trial users as premium in Loops by @elie222 in #3811
- skills: Raise pr-watch fix-round and time limits by @elie222 in #3814
- email: Group weekly summary by sender and link rows to emails by @elie222 in #3812
- queue: Spread weekly summary fan-out and cap retries by @elie222 in #3813
- email: Cap cold emails fetched for the weekly summary by @elie222 in #3816
- Mail engine: SQLite mailbox with engine-owned web lists by @elie222 in #3793
- docs: changelog — Weekly Summaries by Sender (Sep 22) by @cursor[bot] in #3819
- mail-sqlite: Fix Vercel build and Outlook reader e2e by @elie222 in #3820
- integrations: Support custom remote MCP servers by @elie222 in #3818
- chore: upgrade bullmq to 6.3.8 and ioredis to 6.0.0 by @elie222 in #3821
- ai: Add opt-out for AI sender pattern learning by @elie222 in #3794
- Track referral surface engagement by @elie222 in #3726
- fix: Load Geist and Inter as variable fonts by @elie222 in #3822
- chore: rename HTTP Redis env vars to REDIS_HTTP_* by @elie222 in #3826
- mail: prepare shared mail packages for a native client by @elie222 in #3824
- Allow the Expo auth proxy to open the local emulator in development by @elie222 in #3829
New Contributors
- @Samiullah-2004 made their first contribution in #3436
- @keshavraj936 made their first contribution in #3489
Full Changelog: desktop-v0.1.8...desktop-v0.1.9