From 3f232b44f69f95cc78261239ca28053999ab0baa Mon Sep 17 00:00:00 2001 From: "Claude (hermes-perso)" Date: Mon, 10 Aug 2026 22:23:14 +0100 Subject: [PATCH] PROTOCOL-INFRA: 3 regles issues de la resolution du bug D (clic != effet, garde-fou non concluant, flock sur tests Playwright) --- common/PROTOCOL-INFRA.md | 46 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/common/PROTOCOL-INFRA.md b/common/PROTOCOL-INFRA.md index b3c8f32..25a1336 100644 --- a/common/PROTOCOL-INFRA.md +++ b/common/PROTOCOL-INFRA.md @@ -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.