feat(notifications): operability tier (audit §9.4) — send_limit + open-pixel + signed-URL exp + retention + sent-flag #102
Reference in New Issue
Block a user
Delete Branch "fix/audit-9-4-operability"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Stacked on top of PR #101 (§9.3). Auto-rebases to
mainonce that merges.§9.4 — operability tier
UPDATE servers SET send_limit = 500(live in DB)email.service.ts+config/configuration.tsdefaults flipped todestek@sase.trbuildTrackPixelUrl()+ 8 templates with{{#if trackPixel}}<img>{{/if}}+ Novu Mongo updated/cacceptse=<exp>+s=HMAC(mid|target|exp); expired → 410; legacy still accepted for drain17 4 * * *on mailtrack worker; dailyDELETE events WHERE ts < now - 90dlifecycle_email_senttable (migration 0012) keyed(user_id, workflow); LEFT JOIN ... IS NULL in cron + INSERT after each triggerhttps://sase.tr→https://sase.tr/dashboard(live in Novu Mongo too)Live changes (deploy-independent, in effect now)
servers.send_limit = 500(per-hour cap, ≈ 12k/day).mailtrackredeployed: new/cvalidation +scheduledretention handler.17 4 * * *UTC registered on the production worker (verified via/accounts/.../workers/scripts/mailtrack/schedules).RETENTION_DAYS = 90.trackPixelblock; Welcome CTA fallback corrected.Verification snapshot
Post-merge deploy steps
pnpm db:generateto refresh drizzle snapshots for migrations 0011 + 0012.scripts/backfill-lifecycle-sent.sqlagainst prod + dev before the next cron tick (09:00 Europe/Istanbul) so the first run after deploy doesn't re-send to the 24 historical recipients we already mailed.postal/novu-patches/apply-headers-patch.shif Novu container rolled (idempotent).if (!ok)fallback in src/index.js) — all in-flight pre-#18 mail will have aged out by then.🤖 Generated with Claude Code
Pull request closed