v5.3.4
What's New
Emulator Safety
- Project mismatch detection — test runner aborts immediately if the running emulator belongs to a different project (no more mysterious 404s)
- Orphan process cleanup —
npx mgr emulatorkills orphaned Java processes (Firestore, Database, PubSub) after shutdown, even on Ctrl+C spam - Reliable SIGINT handling — synchronous handler prevents Node from exiting before shutdown completes
Image Optimization
- CDN pre-scaling — Unsplash images are pre-scaled server-side before download (~314KB vs 3.8MB), preventing OOM crashes on 256MB Cloud Functions
IMAGE_MAX_DIMENSIONreduced to 2048 — blog headers capped at 2048px (was 4096), matching UJM's imageminsharp.cache(false)— decoded pixel buffers freed immediately between images
Campaign & Email
- Campaign scheduling SSOT — helpers consolidated into
constants.js, monthly-weekday recurrence, minute precision - SendGrid sender identity resolution —
resolveSenderIds()mapsfrom_email → sender_id - Fixed segment resolution using
resolvedSettingsinstead of rawsettings
See CHANGELOG.md for full details.