Commit 9bb5a5dd authored by Kourser's avatar Kourser
Browse files

Trois portes pour faire entrer quelqu'un en pleine crise

L'accès à une crise vient de l'appartenance à l'organisation : le garde
vérifie « roleDans », jamais l'appartenance à une cellule. Renforcer une
cellule, c'est donc inviter. Or la route d'invitation n'avait aucun
appelant dans l'interface — ni web ni mobile. Le geste existait et se
faisait en curl.

Un écran, dans l'espace de l'organisation. Il montre aussi qui est là et
quelles invitations dorment encore dans une boîte : séparés, on réinvite
quelqu'un dont le lien attend depuis une heure et on cherche pourquoi il
n'arrive pas, au pire moment pour chercher. Cela demandait une route de
lecture, ajoutée ici — un écran d'invitation qui ne montre pas l'équipe
est un formulaire.

Une route pour l'ajout en cellule. « ajouterMembre » portait EF-108 — un
intervenant externe exige une date d'expiration — et n'était appelée que
par la suite de vérification : la garantie ne protégeait personne. Elle
gagne au passage trois refus qui lui manquaient : une échéance déjà
passée, une cellule prise dans une autre crise, un compte étranger à
l'organisation. Et un type d'erreur propre, pour que le refus arrive en
400 avec son motif plutôt qu'en « erreur interne ».

Un parcours d'acceptation qui crée le compte. L'invité sans compte lisait
« créez un compte, puis rouvrez ce lien » : trois étapes et un
aller-retour, pour la personne qu'on appelle en renfort, la nuit, depuis
un téléphone. Il pose un mot de passe et il entre. Aucune organisation
fantôme n'est créée au passage, l'adresse vient de l'invitation et non du
formulaire, et un échec tardif ne brûle plus le jeton.

Deux défauts trouvés en éprouvant, et qui ne se voyaient pas autrement.

  La fixture de « verif » créait un compte et une organisation sans jamais
  les relier : elle exerçait depuis toujours un état que le produit
  interdit. Le nouveau garde l'a fait tomber au premier passage.

  L'atterrissage se dédisait. La porte de chargement démontait l'écran
  pendant le rafraîchissement qui suit un succès ; au remontage, l'effet
  reprenait un jeton à usage unique déjà consommé et remplaçait « vous
  avez rejoint » par « invitation invalide ou expirée ». L'utilisateur
  avait bel et bien rejoint. Le défaut préexistait pour la branche
  déjà-connectée, et aucune vérification côté serveur ne pouvait le voir :
  elle constatait le compte créé et n'avait rien à redire. Il a fallu
  ouvrir le lien.

Vingt et une garanties nouvelles, éprouvées en cassant chaque condition
plutôt qu'en les regardant passer au vert. 963 au total.

Au passage : « pnpm dev » ne démarrait pas, les arguments de tsx étant
dans l'ordre qui lui fait chercher un fichier nommé « watch ».

Co-Authored-By: default avatarClaude Opus 5 <noreply@anthropic.com>
parent 22d2c7f0
Loading
Loading
Loading
Loading