The branded email layout footer renders Sent to {{params.memberMergeFields.EMAIL}}. For campaigns these params tokens must be rewritten to {{contact.EMAIL}} so Brevo fills in each recipient's own address, and that rewrite only runs when renderBrandedTemplate is called with campaign = true.
fc4d8894), then regressed in #273 (10c1d92e, version-controlled email templates retiring Brevo as a template store): the rewritten emailRequest.body / localTemplateHtml branches in performTemplateSubstitution dropped the campaign argument, so it defaulted to false.params value — the logged-in sender — baked identically into every recipient's copy.campaign to both renderBrandedTemplate calls restores per-recipient {{contact.EMAIL}} in the footer.The disable / bulk-delete post-send actions previously only ran on the transactional selected-members path; a whole-list campaign send never applied them.
applyPostSendActionsToMembers controller now backs both the batch and campaign paths.POST /member/apply-post-send-actions route and memberService.applyPostSendActions.autoFill now bound to state.narrowListId !== null rather than always false).Enabling real-time WATCH delivery on a mailbox needs a Pub/Sub topic that already exists and lets Gmail publish to it. The admin page gave no hint of which topic, and a missing topic failed with a raw "topic not found".
InboxPushConfigResponse.configuredTopicName), read from googleInbox.pubsubTopicName.On the committee email settings, "Clear all forwards" previously only set every role's forwardEmailTarget to CATCHALL in NGX's own config; it issued no Cloudflare deletes. The live per-role forwarding rules stayed active, and because Cloudflare matches literal rules before the catch-all, they kept diverting role mail away from the catch-all inbox — so the button did not actually achieve "everything via the catch-all".
domainForwardRules() selects only rules whose literal to matcher address ends in @<baseDomain>. Sibling subdomains that share a Cloudflare zone, and the catch-all rule itself, are left untouched.deleteRule path the per-role "Delete Forward" button uses, sets the non-vacant roles to CATCHALL, reloads the live rules, saves the committee config, and reports the count deleted. Worker-backed rules removed this way leave their script behind, which remains visible under the existing Orphaned Cloudflare Workers section for separate cleanup.