Adds pending_email column to users table with idempotent migration.
Implements set_pending_email() and promote_pending_email() for email-change workflow.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
La connexion singleton partagée entre threads causait sqlite3.InterfaceError
lors de requêtes concurrentes sur la page compte.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Le lien de vérification pointait vers la page Dash /verification-email
(qui se contente de rediriger vers /connexion) au lieu de la route
backend /auth/verify-email qui consomme réellement le token et marque
l'email comme vérifié. Conséquence : l'email n'était jamais validé et le
login renvoyait email_not_verified en boucle.
Ajoute aussi MAIL_SUPPRESS_SEND=true au bloc env de pytest : sans cela,
le load_dotenv() de src.app injectait MAIL_SUPPRESS_SEND=false depuis le
.env local, désactivant la suppression d'envoi et faisant échouer les
tests d'auth qui envoient un email (selon l'ordre d'import).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Ajoute la variable MAIL_SUPPRESS_SEND pour pouvoir tester l'envoi d'emails
en mode développement sans toucher au flag DEVELOPMENT. Un warning est loggé
à chaque tentative d'envoi supprimée avec la cause et les détails du message.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>