E-mail et téléphone deviennent obligatoires, et les silences parlent - #58
Merged
Merged
Conversation
L'un des deux suffisait, et cela fabriquait trois promesses non tenues. Un inscrit sans e-mail n'était jamais rappelé : le cron filtrait sur isNotNull(email) sans rien dire, pendant que le réglage promettait de « prévenir les inscrits ». « Écrire aux bénévoles » ne joignait que les porteurs d'adresse, sans compter ceux qu'il laissait de côté. Et la page Confidentialité annonçait « vous désinscrire via le lien reçu par e-mail » à des gens qui n'avaient donné qu'un numéro : ceux-là n'avaient aucun moyen de se retirer seuls. Les deux coordonnées sont désormais exigées, et chacune pour une raison qui lui est propre : l'e-mail porte la confirmation, le rappel et le lien de retrait ; le téléphone sert le jour même, quand personne ne lit ses courriels. Les formulaires le disent plutôt que d'exiger sans expliquer. La règle s'applique partout où une inscription naît : formulaire bénévole public, réponse publique à une réunion, et l'outil MCP qui inscrit de vive voix — sinon un organisateur rouvrait le trou d'un appel. Le téléphone est validé en comptant ses chiffres, pas en imposant un format : 06 12 34 56 78, 0612345678 et +33 6 98 76 54 32 sont le même numéro, et refuser l'un des trois ferait abandonner le formulaire. La fourchette 9–15 couvre le plan français comme la norme E.164. Restaient les inscriptions antérieures à cette règle, qui n'ont pas toujours d'adresse. Aucune migration ne peut leur en inventer une ; on cesse donc de les traiter en silence : - sous le créneau, elles portent « Sans e-mail : ne recevra ni rappel, ni lien de désinscription. Prévenez-la par téléphone. » — le numéro est juste au-dessus, la panne devient un coup de fil ; - la diffusion répond désormais « Message envoyé à 5 destinataire(s). 2 inscrit(s) sans adresse e-mail n'ont pas pu être joints : appelez-les. » au lieu de laisser croire qu'elle a écrit à tout le monde ; - le cron rend volunteersSansEmail et l'écrit au journal ; - la page Confidentialité dit quoi faire quand on n'a reçu aucun message. Vérifié sur une instance réelle. API : les quatre saisies incomplètes sont refusées champ par champ, les trois formats de numéro acceptés, rien n'entre en base sur un refus. Formulaire public : les cinq champs sont requis, la validation native bloque avant tout envoi, et une soumission complète arrive en base avec ses deux coordonnées. Présences : mêmes règles, mêmes refus. Diffusion : 5 envoyés, 2 signalés. Cron : 5 rappels, 2 injoignables annoncés. Bandeaux à 8,04:1, aucun débordement de 320 à 1280 px. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014SfQYBU4xXTeSEHKhHQXdD
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Les trois promesses non tenues
L'un des deux contacts suffisait, et cela produisait trois défaillances silencieuses :
isNotNull(email)— un inscrit sans adresse n'était jamais rappelé, sans traceLa règle
Les deux coordonnées sont désormais exigées, chacune pour une raison propre : l'e-mail porte la confirmation, le rappel et le lien de retrait ; le téléphone sert le jour même, quand personne ne lit ses courriels. Les formulaires l'expliquent au lieu d'exiger sèchement.
Elle s'applique partout où une inscription naît — formulaire bénévole public, réponse publique à une réunion, et l'outil MCP qui inscrit de vive voix. Sans ce dernier, un organisateur rouvrait le trou d'un appel.
Le téléphone est validé en comptant ses chiffres, pas en imposant un format :
06 12 34 56 78,0612345678et+33 6 98 76 54 32sont le même numéro, et refuser l'un des trois ferait abandonner le formulaire. La fourchette 9–15 couvre le plan français comme la norme E.164.Les inscriptions héritées
Celles d'avant la règle n'ont pas toujours d'adresse, et aucune migration ne peut leur en inventer une. On cesse donc de les traiter en silence :
volunteersSansEmailet l'écrit au journal ;Vérifications sur instance réelle
API inscription — refus champ par champ, rien n'entre en base :
{"email":["Required"],"phone":["Required"]}{"phone":["Required"]}{"email":["Required"]}0612{"phone":["Numéro de téléphone incomplet"]}06 12 34 56 78/+33 6 98 76 54 32/0612345678{"ok":true}— les trois en baseFormulaire public — les cinq champs sont requis (
slotId,name,email,phone,consent), la validation native bloque avant tout envoi, et une soumission complète arrive en base avec ses deux coordonnées.Présences publiques — mêmes règles, mêmes refus,
{"ok":true}seulement avec les deux.Diffusion —
{"sent":5,"sansEmail":2}, et le message le dit à l'expéditeur.Cron —
{"volunteerReminders":5,"volunteersSansEmail":2}+ avertissement au journal.Rendu — bandeaux d'alerte à 8,04:1, aucun débordement de 320 à 1280 px.
tsc,eslint --max-warnings=0,build: verts.Ce que ça change pour l'existant
Aucune migration : la colonne
phonereste nullable, parce que les lignes héritées en dépendent. La contrainte est posée à la validation, là où naissent les nouvelles inscriptions. Rien n'est supprimé, rien n'est réécrit rétroactivement.Un effet de bord à connaître : un parent qui refusait de donner son téléphone ne pourra plus s'inscrire seul. C'est le prix assumé de pouvoir tenir les trois promesses ci-dessus — et l'organisateur garde l'outil MCP pour l'inscrire à la main s'il a ses deux coordonnées par ailleurs.
🤖 Generated with Claude Code
https://claude.ai/code/session_014SfQYBU4xXTeSEHKhHQXdD
Generated by Claude Code