The NoReply ledger can be filtered by subsystem, pruned, and told what to record

FeatureEmailService
Shipped
September 12, 2026 at 4:24 AM UTC
Author
Kamo
Commit
856c548

Each row now names the subsystem that sent it and, for a template send, the template key. EmailTemplateService and the campaign sender open a NoReplyOutboundSource scope around their SMTP send; anything else is UNATTRIBUTED. NoReplySubsystem maps the canonical template keys to subsystems, and a test fails if a canonical template maps to none. Deletes go to the table itself through NoReplyOutboundLedger: one row, up to 1000 selected rows, every row matching the list's filters, or the whole ledger (TRUNCATE), which has to be asked for with confirmAll. Bulk deletes run in chunks of 500. NoReplyOutboundSettings stores a recording switch per subsystem and the retention (30 days by default, 0 keeps rows until deleted), cached for 15 seconds per pod. NoReplyOutboundRetentionSweep purges hourly on one pod. All new endpoints are god-only, like the list.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing