Railbase core v0.5.13
Every transactional email path is now guaranteed to send, proven via MailHog (12 flows green end-to-end), and unified onto a single DRY enqueue path (`jobs.EnqueueEmail`).
Gaps closed (created a token/record but never emailed):
- App-user invite — now sends the `invite` template per invitee.
- 2FA recovery codes — `2fa_recovery` was never sent; now emailed at TOTP enroll-start + regenerate, on both admin and app-user surfaces.
- Tenant member invite — new `tenant_invite` template + send.
Bug fixed: admin forgot-password refused with "mailer is not configured" whenever the mailer was env-configured or dev auto-detected (it trusted only the `mailer.configured_at` flag). It now gates on the live mailer's actual delivery capability.
Unification: auth flows (password reset / verification / email-change / OTP) moved from in-handler sends to the async, retry-backed queue — no more 500s on a transient SMTP hiccup. Welcome / admin-broadcast / new-device payloads now share one wire contract.
Full audit + matrix: docs/MAILER-AUDIT.md. 85 Go packages pass.
Verify downloads against `checksums.txt`.