See envoy/cases for full case studies and envoy/improvements for concrete changes.
• mid_to_email NameError in dispatch_immediate_actions (2026-03-17) — dispatch_immediate_actions referenced mid_to_email which was never passed as a parameter (it was built locally in execute_actions). All non-continuation outbound emails silently failed. Fixed by: (1) adding mid_to_email parameter to dispatch_immediate_actions; (2) building _mid_to_email from thread_pool + gathered_emails in main() just before the dispatch call.
• IMAP Sent copy in send_continuation_email (2026-03-16) — called _c.login() on IMAPClient which has no such method; __init__ auto-connects via netrc. AttributeError was swallowed by except Exception: pass, so continuation emails were never stored in Sent. Fixed by replacing manual connect/login/logout with with _IMAPClient('imap') as _c:.
• Message-ID angle bracket mismatch (commit 7f18c41) — LLM omits <>, email parser includes them; was causing every fetch to appear to fail. Fixed with _mid() normalisation.• Double-send on reply (commit c90222b) — reply dispatched before complete phase.• Duplicate notes in context (commit 5d866a3) — multi-folder move search produced duplicates.• deploy_notes.py codeblock crash — codeblock blocks with 'text' key instead of 'body' key caused KeyError. Fixed with cb.get('body') or cb.get('text', '').• Brevo for internal mail — resolved 2026-03-03. Internal mail (john@, envoy@, envoy_test@) now routes via local Postfix (localhost:25). Brevo only used for external addresses.
• Action success gate missing — if write_notes fails, success reply email still sends. Model doesn't know write failed.• Complete-with-no-actions — model can return status=complete with no write_notes and no meaningful email, effectively hallucinating completion. No guard exists.• Gathering fallback unreliable — mini model sometimes skips email search fallback after notes fail. Gathering state note needs numbered steps, not conditional prose.• Orphaned note subtrees — Envoy creates notes but doesn't always update parent index or CONTENTS. Notes become invisible to future gathering.
• Local SMTP (port 25) ISP restriction — outbound port 25 works on Virgin Media (home). May be blocked on other networks. Use Brevo for external mail when away from home.• XOAUTH2 broken for Outlook.com personal accounts — MS known issue. SMTP.Send scope token acquires OK but AUTH returns 535. Affected smtp.office365.com and smtp-mail.outlook.com. Token script kept at utils/get_smtp_token.py in case MS fixes this.• Brevo domain not yet verified (as of 2026-03-01) — DKIM CNAME records added to critchley.biz but Brevo reports up to 48h for verification. Until verified, outbound mail may lack DKIM signature and land in spam.• 4 resent queue emails — delivery unconfirmed — Resent via Brevo direct SMTP; Brevo accepted (250 OK) but end-delivery not confirmed. Check Brevo dashboard logs.