Un refus ne conseille que ce qu'il a vérifié applicable¶
SynchronisationParticipationTest#refus_ne_tranche_pas_quand_la_plateforme_est_injoignableContexte¶
Le refus qui bloque le dépôt disait :
Site non rattaché à Vigie-Chiro : connectez-vous et synchronisez vos sites avant de créer la participation.
Le conseil était inapplicable à qui le lisait. La synchronisation dérive les sites de
/moi/participations : elle n'atteint que les carrés où une nuit est déjà déposée, et celui qui lit ce
message essaie d'en déposer une première (mesure de la sonde #3669, cf.
ADR 3806).
C'est le jumeau du défaut que #3806 a corrigé côté fenêtre de déclaration : le verdict « ce carré existe déjà » renvoyait lui aussi vers un geste inopérant. Corriger l'un sans l'autre laisse le défaut vivant sous une autre forme - c'est la raison d'être de la recherche de jumeaux au début d'une issue.
Décision¶
Un message d'erreur qui conseille un geste vérifie d'abord que ce geste s'applique, ou il ne le nomme pas.
Concrètement, le refus interroge GET /sites?q=<carré> et dit l'un des trois :
| Ce que porte la plateforme | Ce que le refus conseille |
|---|---|
| le carré existe en Point Fixe | le récupérer depuis la fenêtre de déclaration |
| le carré n'y est pas en Point Fixe | l'activer sur le portail d'abord |
| la plateforme ne répond pas | dire qu'on n'a pas pu vérifier |
La troisième ligne est la règle, pas une commodité. Ni « récupérez-le », ni « il n'existe pas » : affirmer depuis une ignorance est le défaut que l'ADR 3458 a fermé côté verdict. Un test l'exige en interdisant explicitement les mots des deux autres branches.
Ce que la requête coûte, et où¶
Rien sur le chemin nominal. Un dépôt qui aboutit ne cherche aucun carré, et un test le tient
(verify(client, never()).chercherCarre(...)). Le conseil ne se paie que là où il sert - un appel
réseau ajouté à chaque dépôt réussi, pour un message que personne ne lirait, serait un coût pur.
Ce qu'il a fallu déplacer, et pourquoi ce n'est pas un détail¶
Le refus vit dans passage, qui ne peut pas dépendre de sites (cycle interdit par ArchUnit).
Deux choses ont donc changé de place :
estPointFixequitteRapatriementCarrepourSiteVigieChiro, dans le socle : une définition, deux appelants. Une seconde copie de « le titre nomme le protocole » aurait divergé sans bruit ;InfosPointporte le numéro de carré. Il ne sert pas à déposer - le dépôt passe par l'objectid du lien - mais à conseiller. Un site absent le laisse ànullet le message retombe sur sa forme générique, plutôt que d'échouer.
Conséquences¶
- Le parcours qui a produit #3458 se referme des deux côtés : l'écran propose le geste, et le refus y renvoie.
- Un message d'erreur peut coûter une requête. C'est nouveau dans ce dépôt, et borné : sur le chemin d'échec, jamais sur le nominal.
- Le socle porte désormais une règle de protocole plateforme (
estPointFixe). C'est le prix de l'acyclicité ; l'alternative était deux copies. - La ligne de commande ne bénéficie pas de ce refus :
creer-siten'interroge rien (#3856).
Alternatives écartées¶
- Un message fixe et générique (« récupérez ce carré depuis Mes sites ») : correct dans le cas courant, faux quand le carré n'existe pas en Point Fixe - où le geste conseillé ne peut pas aboutir.
- Ne rien changer et documenter le contournement : la doc n'est pas lue au moment du refus.
- Interroger la plateforme à chaque dépôt pour préparer le message : un coût permanent pour un cas d'échec.