What's Changed
- feat: merge Google Contacts with IMAP sources in microservice architecture by @malek10xdev in #2800
- fix: merge semantics for Google Contacts, migration reorganization, and tests by @malek10xdev in #2801
- feat: Google Contacts sync during email mining by @malek10xdev in #2802
- fix: align google contacts fetcher types with google api by @malek10xdev in #2804
- feat: add Zod request validation + HPP protection by @malek10xdev in #2803
- feat: add zod request validation to supabase edge functions by @malek10xdev in #2805
- fix: check email verifier is configured before adding clean task to pipeline by @malek10xdev in #2807
- feat: handle Google Workspace IMAP OAuth errors with Learn more dialog by @malek10xdev in #2808
- feat: Unified Senders Panel - Merge SMS Gateway and Email Sender management by @baderdean in #2825
- feat: move OAuth flow to mining-sources edge function by @malek10xdev in #2814
- fix: add surrogate id column to private.mining_sources by @malek10xdev in #2833
- fix(supabase): make migrations idempotent by @malek10xdev in #2834
- chore: prevent AI plan files from leaking to remote by @malek10xdev in #2835
- fix(supabase): make migrations idempotent and tolerate owner mismatch by @malek10xdev in #2836
- fix(supabase): tolerate owner-mismatch on smtp_senders and whatsapp_sessions by @malek10xdev in #2838
- fix(supabase): also wrap ENABLE ROW LEVEL SECURITY in DO blocks by @malek10xdev in #2839
- fix(supabase): revert owner-mismatch DO blocks by @malek10xdev in #2840
- Delete user edge function by @malek10xdev in #2829
- fix(supabase): resolve delete-user FK violation + remove duplicate migration by @malek10xdev in #2841
- feat: support phone-only contacts (no email required) across the stack by @malek10xdev in #2830
- fix(migration): delete orphan extension rows on phone-only migration by @malek10xdev in #2842
Full Changelog: v0.3.8...v0.3.9