Cause racine du dernier test Mocha en echec (getAuditBatch flaguait
"Faire mijoter a feu doux" comme peu fiable malgre une ancre NER claire) :
avec seulement 30 iterations/dropout 0.2, le textcat retournait le bon
intent (argmax correct) mais avec une confiance tres basse et compressee
(0.2-0.7 sur l'ensemble du corpus reel, y compris des cas evidents) —
un vrai probleme de qualite d'entrainement, pas seulement de seuil.
150 iterations / lot de 16 / dropout 0.1 (mesure localement contre le
vrai corpus, sans Postgres) : melt ~0.95, preheat ~0.90, jusqu'a ~0.51
pour le cas le plus faible observe (bake), bruit hors-vocabulaire toujours
~0.05. ~110s d'entrainement par locale (~220s pour fr+en au warm-up) —
compromis assume et documente (README du service, commentaires du code),
contrairement a l'entrainement quasi instantane de node-nlp.
Root hook Mocha (mocha-root-hooks.ts) et sa doc mis a jour avec un timeout
de 600s pour couvrir cette duree avec marge.
Verifie : 27/27 pytest, lint + build complets du monorepo. Suite Mocha a
confirmer sur ce commit via CI (source du diagnostic qui a mene a ce fix).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Deux bugs reels trouves par la premiere execution CI de la migration
node-nlp -> tech-step-intent-service :
1. PhraseMatcher retourne tous les matches y compris chevauchants — un
synonyme comme "fondre" litteralement contenu dans "faire fondre" (tous
deux synonymes de `melt`) produisait deux candidats separes pour la meme
technique, dupliquant son techStepId dans le resultat final. Fixe avec
spacy.util.filter_spans (garde le plus long match par position) dans
LocalePipeline.process. Test de non-regression ajoute.
2. La suite Mocha construit `app` directement via createApp(), sans jamais
passer par server.ts — le warm-up (POST /v1/train fr+en sur le corpus
complet) se declenchait donc paresseusement dans le premier test qui
appelait le classifieur, depassant le timeout Mocha de 10s par test.
Fixe par un root hook plugin Mocha (test-support/mocha-root-hooks.ts,
.mocharc.json) qui reset la DB et warm up le classifieur une seule fois
avant toute suite, avec son propre timeout de 60s.
Verifie : 27/27 tests pytest du service (dont le nouveau test de
non-regression), lint + build complets du monorepo. La suite Mocha
elle-meme n'a toujours pas pu etre executee dans cet environnement (pas de
Postgres disponible ici) — a confirmer via la CI.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>