12-Jul-2026 — Inbox & Email Composer & Walks Admin Fixes #310

build 762commit eef7482


Sent emails with an attachment are no longer silently dropped

The write-back that records a composer send onto its conversation stamped every attachment with an empty contentType, but the stored-message schema required that field. Mongoose rejects an empty string for a required field, so the message insert threw on any send carrying an attachment: the thread was created but the message was never stored, leaving an empty conversation and no "Sent from Email Composer" entry. Attachment-free sends stored fine, which is why it went unnoticed - 41 recorded sends, none with an attachment.

Emails already dropped this way cannot be recovered - the send happened at the provider but nothing was stored locally; only new sends are fixed.

Attachment preview works across the www / non-www boundary

Previewing a CSV or text attachment does an in-page fetch of the file to render it, built from the group's configured address. When the page is served from www. but the group address is the bare domain, that fetch is cross-origin and the browser blocks it with a CORS error, while a plain Download is unaffected.

Send button available as soon as the email is sendable

The composer's Send button lived only inside the final Send step, so you had to click through the wizard to reach it.

Grouped-conversation badge removed

The stacked-icon count on grouped conversations read "Grouped across N role inboxes", which was confusing and, when the grouped threads share a single role, inaccurate. The folding behaviour is unchanged; only the badge and its now-unused helper are gone.

Self-serve Walks Manager CSV export from Event Data Management

Groups migrating from other platforms hold walk data (like leader names) that never reached Walks Manager, so their imported walks arrive with blanks. Event Data Management now lets an admin export any category of events as Walks Manager format CSVs, fill in the gaps in a spreadsheet, and keep the ids needed to amend the same records later - the immediate driver being Walks Manager walks with no leader name.

Fixes shaken out along the way