PROTOCOL-INFRA: 3 regles issues de la resolution du bug D (clic != effet, garde-fou non concluant, flock sur tests Playwright)

This commit is contained in:
Claude (hermes-perso)
2026-08-10 22:23:14 +01:00
parent f3b9cc10d9
commit 3f232b44f6
+46
View File
@@ -312,3 +312,49 @@ REFLEXE : un plafond de pagination et un timeout sont couples. Relever l'un sans
transforme une troncature silencieuse en echec generalise -- on remplace un bug par un autre.
Verifier aussi les timeouts en AVAL (retry, cron n8n, healthcheck) qui peuvent etre calibres sur
l'ancienne duree.
## REGLE -- UI React/Fluent : le succes d'un clic ne prouve PAS son effet (2026-08-10, soir)
Cause de fond du bug D ci-dessus, trouvee et corrigee : `go_to_folder_path` confondait DEPLIER et
SELECTIONNER. Sur l'arborescence OWA, le chevron d'expansion et la ligne qui le porte sont deux
cibles distinctes aux effets distincts. Le code ne cliquait la ligne (seul geste qui selectionne)
qu'en repli, faute de bouton d'expansion : un dossier FEUILLE etait donc correctement selectionne,
un dossier A ENFANTS ne l'etait jamais -- soit seul son chevron etait clique, soit, s'il etait deja
`aria-expanded="true"` (etat persistant d'un appel a l'autre), aucun clic n'avait lieu. La portee
d'une recherche OWA etant le dossier COURANT, la recherche s'executait dans la Boite de reception
recharge par `goto_owa_root()`. 63 des 336 dossiers du compte etaient concernes.
REFLEXE : apres toute navigation dont depend la suite du traitement, confirmer l'etat atteint par un
ATTRIBUT STRUCTURE (`aria-selected`), jamais par le fait que le clic n'a pas leve d'exception. Et en
l'absence de confirmation, echouer explicitement : un 200 qui repond sur le mauvais perimetre coute
infiniment plus cher qu'une erreur franche. Corollaire de diagnostic : quand un bug touche certains
elements et pas d'autres, chercher d'abord ce qui les distingue STRUCTURELLEMENT (ici : avoir des
enfants) avant d'incriminer le contenu (ici : les emojis, faussement suspectes pendant des jours).
Detail : hermes-tt/mail-o365-bug-D-deplier-nest-pas-selectionner.md
## REGLE -- un garde-fou qui "ne sait pas conclure" doit etre mesure, pas presume inoffensif (2026-08-10, soir)
Le controle de portee ajoute pour mitiger le bug D bloquait sur preuve positive et LAISSAIT PASSER
les listes heterogenes, au motif qu'un faux positif serait pire. Les tests du correctif ont montre
que cette branche "je ne sais pas" recouvrait en fait un SECOND mode de corruption (bug E) : quand
un dossier ne contient aucun message DIRECT (ses messages sont dans ses sous-dossiers), OWA elargit
de lui-meme la recherche a toute la boite aux lettres et renvoie un melange en HTTP 200. Mesure sur
un dossier reel : 40 items, libelle majoritaire a 10/40, stable sur 3 appels. Les deux effets ont
ete isoles en interrogeant `/inbox` (qui ne recherche pas) : reponse "liste introuvable" = dossier
vide, donc navigation correcte et recherche fautive.
REFLEXE : avant de classer un cas comme non concluant, verifier empiriquement ce qu'il contient
REELLEMENT en production. Ici l'uniformite s'est revelee etre la norme d'une portee correcte, meme
sur les dossiers a enfants (27/27, 19/19) -- donc son absence etait une preuve suffisante pour
bloquer, et la politique permissive choisie par prudence etait precisement ce qui laissait passer la
corruption.
## PIEGE -- batteries de tests Playwright : toujours sous `flock`, une seule serie a la fois (2026-08-10, soir)
Une premiere serie de tests a tourne en double : un job `nohup` chaine derriere un build avait
survecu a sa session SSH. Les deux series tapant le meme navigateur, et le serveur SERIALISANT les
appels (`@serialize_owa`), leurs resultats se sont entrelaces -- un test renvoyait la portee du test
precedent, ce qui imitait parfaitement un echec du correctif en cours de validation.
REFLEXE : lancer ces batteries sous `flock -n`, verifier `ps aux` avant de conclure, et se mefier
d'un resultat qui "pointe vers le dossier d'a cote" plutot que vers un dossier arbitraire.