KemalIdentity::Accounts::Notifier
Delivery. The shard decides what to say and the application decides how to say it.
There is no SMTP here, no templates, and no default implementation that quietly does
nothing — docs/00-scope.md puts all three out of scope, and a null default would turn a
forgotten configuration into password reset emails that are never sent, discovered by a
user who cannot get into their account.
deliver must return promptly
This is a contract, not a suggestion, and it is load-bearing for a security property.
Service#request_password_reset must take the same time whether or not the address
exists, or it becomes an account oracle — somebody enumerates a customer list by timing the
forgot-password form. The service equalises everything it controls, but if deliver opens
an SMTP connection and waits, the existing-account path is a network round trip longer than
the other, and the oracle is back.
So: enqueue and return. Write a row, push to a job queue, hand it to a background fiber — anything that does not block on somebody else's server.