2 Commits
Author SHA1 Message Date
Nabil.Derouiche c003b58768 hermes-tt: garde-fou de portee /search (mitigation bug D) + timeout aligne sur le nouveau plafond
Garde-fou : /search renvoie parfois le contenu de la Boite de reception pour un
folder_path donne, en HTTP 200 sans erreur (bug D, cause non corrigee cote serveur).
Verifie avant d'implementer qu'AUCUN signal structure n'existe dans la reponse
(top-level query/count/items ; par item raw_text/aria_label/elem_id/attrs) -- en
exposer un imposerait de modifier hermes-mail-browser, donc session dediee.

Signal retenu faute de mieux : la derniere ligne de raw_text porte le libelle du
dossier. Fiabilite mesuree sur 5 dossiers de types differents avant implementation :
uniforme a 100% dans les 5 cas (81/81, 37/37, 6/6, 84/84, 77/77), correspondant dans
les 4 cas sains, divergent dans le seul cas verole -- fiable ET discriminant, ce qui
justifie un blocage dur plutot qu'un simple avertissement.

Conception conservatrice : ne bloque que sur preuve positive de mauvaise portee ;
journalise et laisse passer quand il ne peut pas conclure (aucun item, libelles
heterogenes, noyau comparable vide). Un faux positif bloquerait une ingestion
legitime, ce qui serait pire que le defaut couvert. HermesFolderScopeError herite de
HermesMailClientError -> comportement correct chez les deux appelants de production
sans les modifier (checkpoint 'error' cote pipeline, None cote download_attachments).
Verifie en conditions reelles depuis le container : dossier sain 81 items ingeres,
dossier verole bloque. Non-regression du mock de test verifiee.

Timeout : effet de bord du fix B (plafond 20 -> 200). La duree de /search croit avec
le volume demande (scroll progressif) -- 40 a 240 s mesures, contre timeout=60 code en
dur. Les gros dossiers echouaient en timeout. SEARCH_TIMEOUT_S = 300.

+ 1 regle PROTOCOL-INFRA (plafond de pagination et timeout sont couples).
2026-08-10 18:32:37 +01:00
Nabil.Derouiche c5f25684f7 hermes-tt: 4 bugs extraction OWA (A+B corriges, C+D diagnostiques)
A - glyphe de zone privee Unicode seul en ligne 0 de raw_text decalant tout le
    decoupage positionnel : sender, subject ET date faux ensemble. 295/399 notes
    avaient un received_date qui n'est pas une date. 11 points de code PUA distincts
    recenses sur 40 dossiers, dont 7 hors de la plage Fluent UI habituelle -> retenir
    U+E000-U+F8FF. Correctif : nettoyage en amont du decoupage, date par motif,
    normalisation ISO 8601 au jour, message_id sur champs normalises + conversation_id
    comme discriminant. Corrige aussi checkpoint.last_processed_date (meme source).

B - search_folder() ne transmettait pas limit a /search -> plafond serveur silencieux
    a 20 items, dossier marque done comme s'il etait complet.

C - dossiers hors Reception inatteignables : 3 chemins de navigation, 3 defauts deja
    resolus ailleurs dans le meme fichier. Diagnostique, non corrige.

D - NON RESOLU, BLOQUANT BACKFILL : /search renvoie le contenu de la Boite de reception
    pour certains folder_path, en HTTP 200. Invalide la methode d'audit de completude
    et remet en question le classement des 399 notes existantes.

+ 3 regles generales dans PROTOCOL-INFRA.md (glyphe/emoji cassant tout matching de
texte naif sur OWA ; valeur par defaut serveur non transmise = troncature silencieuse ;
verifier la portee d'un resultat scope, pas seulement son code HTTP).
2026-08-10 17:24:17 +01:00