ADRs
0015, Email verification mandatory in production
Why production Olympus enforces email verification before granting session access
Status: Accepted Date: 2026-03 Stakeholders: Bobby Nannier
Context
Email verification confirms the user controls the email they registered with. Without it:
- An attacker can register accounts with someone else's email (the real owner gets a verification email they didn't expect; if they ignore it, the account is taken).
- Recovery flows are weakened (you can recover an account by setting a new password if you have access to the registered email).
- Bot-driven mass account creation is cheap.
Decision
Production deployments require email verification before granting session access. Enforced by:
- The
require_verified_addresshook on the registration and login flows. - The
verify-email-enforcement.ymlCI workflow asserts the hook is configured.
A user who registers but doesn't verify cannot log in until verified. Their identity exists in pending state.
Consequences
- Some friction. Users who type an email they can't access can't proceed.
- Email provider must be reliable. Deliverability matters, see Operate, Email Deliverability.
- Tighter cohort. Every active identity is reachable via email.
- Dev exception. Verification is optional in dev (
compose.dev.ymldoesn't enable the hook). MailSlurper captures the email so testing the flow is easy.