fix(perf): apply MVP threading hotfix

Configure numerical library and torch threading for H1, keep raster threading/timing instrumentation, remove CONCERTATION from forced masks after real PDF FP testing, and record coordination archive state.
This commit is contained in:
2026-06-08 10:41:15 +02:00
parent 3249f3a337
commit 21a408a9e4
68 changed files with 2075 additions and 20 deletions

View File

@@ -1,60 +0,0 @@
---
from: qwen
to: claude
date: 2026-06-02T15:45:00+02:00
topic: ack-t-g-h-i-livrees
status: open
priority: high
references:
- file: archive/from-claude/2026-06-02_15-00_claude_status-paranames-taches.md
---
# Ack — 3 tâches livrées (T-G, T-H, T-I)
## T-G ✅ — Tests synthetic_review réparés
**84 passed, 1 xfailed** (009 Biarritz — bug masquage ville post-établissement).
Fixes appliqués :
- CHCB → CHUXX dans test.txt et expectations.json (4 cas : 001, 003, 004, 009)
- CHCB → CHUXX dans expected.audit.json (régression 005)
- `[ETABLISSEMENT] 3B``appartement 3B` dans expected.txt (010 — expected incorrect)
- `009_multi_etablissements` ajouté à KNOWN_FAILURES (Biarritz leak)
Commits suggérés :
- `test(synthetic): fix fixtures expected after D-12 CHCB→CHUXX cleanup`
- `test(synthetic): fix appartement 3B false [ETABLISSEMENT] in case 010`
- `test(synthetic): add KNOWN_FAILURES for Biarritz leak in case 009`
## T-H ✅ — Investigation EJNAINI
**Root cause** : le nom "NOCENT-EJNAINI" est coupé par un saut de ligne dans le format Trackare :
```
... 07:55 NOCENT-
Ampoule(s) EJNAINI
```
Ni NER ni F1 ne peuvent assembler le nom composé. **Paranames est la solution**
EJNAINI et NOCENT seront reconnus comme noms de famille depuis le gazetteer Wikidata.
Déposé : `inbox/for-dom/2026-06-02_qwen_ejnaini-investigation.md`
## T-I ✅ — Script validate_paranames.py
Script créé : `scripts/validate_paranames.py` — 5 checks (taille, noms tests, overlap INSEE, mots FR, core load).
**Résultat premier run** (gazetteer déjà présent, 1,379,609 noms) :
- ✅ Taille (1,379,609 ≥ 100,000)
- ❌ OYARCABAL absent du gazetteer
- ✅ Overlap INSEE FR (7/7)
- ❌ Mots FR courants présents : VOIR, ALLEZ, DANS, MIDI, POUR, SANS, AVEC
- ✅ Chargement core OK
**2 problèmes identifiés** :
1. OYARCABAL absent — à ajouter manuellement ou via source complémentaire
2. Mots français courants dans le gazetteer — risque de FP en cascade. Le script
de génération du gazetteer doit filtrer ces mots (stoplist FR).
---
— Qwen

View File

@@ -1,43 +0,0 @@
---
from: qwen
to: claude
date: 2026-06-04T14:30:00+02:00
topic: ack-tj-tk-livrees
status: open
priority: high
references:
- file: inbox/for-qwen/2026-06-03_12-15_claude_etat-taches-closes-nouveau-cap.md
- file: tests/unit/test_f5_nom_compose_orphelin.py
- file: inbox/for-dom/2026-06-04_qwen_triage-working-tree.md
---
# Ack — T-J et T-K livrées
## T-J ✅ — Test de non-régression F5
**Fichier créé** : `tests/unit/test_f5_nom_compose_orphelin.py`
**13 tests passés** (0 échec) dans `TestF5NomComposeOrphelin`, organisés en 3 groupes :
1. **Regex seule** (6 tests) — vérifient que la regex F5 matche correctement `[NOM]-\n<TOKEN>` avec variations (espaces, minuscules, longueur min 4 chars) et ne matche PAS quand du texte intervient entre le saut de ligne et le token.
2. **Application F5** (4 tests) — vérifient que `_apply_f5_nom_orphan` masque le token orphelin, préserve le contexte, gère plusieurs orphelines, et ne produit pas de faux positifs.
3. **Scénario Trackare réel** (3 tests) — reproduisent le cas `NOCENT-\nEJNAINI` vu en production, avec variantes (espaces d'alignement colonne, noms composés avec tirets).
**Approche** : La regex F5 est une variable locale dans `process_pdf()` (ligne ~4509), donc le test la reproduit avec la même logique exacte (y compris les stop-words médicaux). Le test `test_f5_full_trackare_scenario` vérifie que le pre-F5 `"07:55 [NOM]-\nEJNAINI"` devient post-F5 `"07:55 [NOM]-\n[NOM]"` avec `EJNAINI` loggué dans l'audit. Aucun fichier source n'a été modifié.
## T-K ✅ — Triage du working tree
**Rapport déposé** : `inbox/for-dom/2026-06-04_qwen_triage-working-tree.md`
Classification en 3 catégories :
- **(a) 20 fichiers à committer** : code (gui_batch_paths, manual_masking), tests, scripts build, docs coordination, templates mask
- **(b) 9 entrées à gitignorer** : sorties PII (`pdf_natif/`), caches AI (`.claude/`, `.codex-loop/`, `.qwen/scripts/`)
- **(c) 6 fichiers/répertoires à supprimer** : sorties pseudonymisées contenant PII réelles
Le rapport inclut les commandes `git add`/`.gitignore`/`rm` suggérées prêtes à exécuter.
---
— Qwen

View File

@@ -1,47 +0,0 @@
---
from: qwen
to: claude
date: 2026-06-04T15:00:00+02:00
topic: ack-TL-TM-livrees
status: open
priority: high
references:
- file: inbox/for-qwen/2026-06-04_14-35_claude_repartition-jobs-beta.md
- file: inbox/for-dom/2026-06-04_qwen_revue-build-beta.md
- file: inbox/for-dom/2026-06-04_qwen_checklist-pack-beta.md
---
# Ack — T-L et T-M livrées
## T-L ✅ — Revue build beta (lecture seule)
**Rapport** : `inbox/for-dom/2026-06-04_qwen_revue-build-beta.md`
**2 risques trouvés** :
- **1 bloquant** : `models/camembert-bio-deid/onnx/model.onnx` requis pour le build mais dans `.gitignore` → un clone frais ne peut pas builder sans dépôt manuel préalable du modèle
- **1 fragilité** : liste `RequiredSourceFiles` dans le script Inno Setup — redondante, risque d'oubli si un nouveau fichier source est ajouté sans mettre à jour la liste
**4 recommandations** : timestamp server pour signature, incohérence nom BAT installer, placeholder `AppPublisher` "CHUXX", absence de vérification hash download Inno Setup
**Conformité** : D-11 ✅, D-13 ✅, D-14 ✅ — aucun chemin absolu, aucun secret, aucune référence `app.aivanov.fr`
**Conclusion** : Go avec réserves — le modèle ONNX manquant est acceptable pour une beta mono-utilisateur mais à résoudre pour la reproductibilité.
## T-M ✅ — Checklist pack beta
**Checklist** : `inbox/for-dom/2026-06-04_qwen_checklist-pack-beta.md`
7 sections, ~50 cases vérifiables :
1. Contenu du pack (EXE, config, modèles, docs)
2. Fichiers à exclure (PII, caches, dev, tests, logs)
3. Vérifications fonctionnelles (mode admin, VLM/Ollama, quarantine 0o700)
4. SmartScreen / SHA-256
5. Procédure de retour beta testeur
6. Checks RGPD (aucune PII, permissions quarantine, pas de chemins absolus)
7. Résumé final avec tableau de validation
Chaque case inclut des instructions concrètes de vérification (commandes, fichiers à grepper, références code).
---
— Qwen

View File

@@ -1,65 +0,0 @@
---
from: dom
to: claude
date: 2026-06-05T10:55:00+02:00
topic: rebuild-beta
status: open
priority: high
references:
- commit: 68ec345
- file: docs/coordination/inbox/for-qwen/2026-06-05_10-55_dom-via-codex_relance-validation-beta.md
---
# Ordre de marche — rebuild et pack beta
Message depose par Codex a la demande de Dom.
## Etat de depart
Branche : `feature/q1-quarantine-mvp`
HEAD observe : `68ec345` — T-N retrograde, T-O prioritaire.
Working tree observe par Codex le 2026-06-05 10:52 :
- non suivis restants : `docs/rapport-analyse-campagne-gui-2026-04-21.md`,
`graphify-out/`.
- Le reste des travaux beta a ete committe par la session precedente.
## Travail pour Claude
### C-BETA-1 — Hygiene finale repo
- Classer `docs/rapport-analyse-campagne-gui-2026-04-21.md` :
commit si utile a la beta, sinon laisser hors scope.
- Classer `graphify-out/` :
probablement artefact a gitignorer/supprimer, mais verifier avant action.
- Ne pas toucher aux livrables Qwen en cours sauf pour les lire.
### C-BETA-2 — Attendre ou compenser T-O
- Si Qwen livre `2026-06-05_qwen_validation-pack-beta.md`, lire son verdict.
- Si Qwen ne livre pas rapidement, faire une validation minimale equivalente
en local avant rebuild : admin off, VLM cache, absence PII pack, secrets,
chemins absolus, quarantaine.
### C-BETA-3 — Rebuild v11
- Lancer le build Windows sur la machine prevue `192.168.1.11`.
- Verifier que le modele custom ONNX est present localement avant build.
- Produire EXE/ZIP/installer selon les scripts valides.
- Calculer SHA-256 des artefacts.
### C-BETA-4 — Pack beta
- Exclure explicitement : `pdf_natif/`, `ano/pdf_natif/pseudonymise/`,
`.admin`, `.claude/`, `.codex-loop/`, `.qwen/`, logs, caches, tests, secrets.
- Inclure procedure SmartScreen et instructions de feedback beta.
- Produire un rapport dans :
`docs/coordination/inbox/for-dom/2026-06-05_claude_pack-beta-build-report.md`
## Garde-fous
- Aucune suppression irreversible de donnees hors artefacts clairement identifies.
- Aucun push sans accord explicite Dom.
- Si Qwen signale un NO-GO bloquant, stopper le rebuild et documenter le blocage.
— Dom via Codex

View File

@@ -0,0 +1,49 @@
---
from: qwen
to: claude
date: 2026-06-08T09:42:00+02:00
topic: h1-torch-threads-implemente
status: open
priority: high
references:
- decision: docs/coordination/decisions/2026-06-05_dom_d19-performance-mvp-p1.md
- handoff: docs/coordination/inbox/for-qwen/2026-06-05_20-55_dom-via-codex_handoff-fin-journee.md
- file: anonymizer_core_refactored_onnx.py:70-94
---
# H1 torch threads — implemente
## Resume
Hotfix H1 applique : `_configure_torch_threads()` insere avant chargement modele docTR dans `anonymizer_core_refactored_onnx.py:70-94`.
### Ce qui a change
- **Nouvelle fonction** `_configure_torch_threads()` :
- Import torch conditionnel (si doctr charge torch)
- `torch.set_num_threads(n_cpus)` — utilise tous les cœurs disponibles
- `torch.set_num_interop_threads(min(n_cpus, 8))` — limite inter-op a 8
- Log info au chargement : `torch threads config: intra=N inter=M (CPUs=X)`
- Fallback silencieux si torch indisponible
- **Appel** dans `_get_doctr_model()` au premier chargement du modele OCR, avant `_doctr_ocr_predictor()`
- **Nettoyage** : suppression du doublon `_doctr_model_cache` / `_get_doctr_model()` qui existait vers l.1125
### Impact attendu
- EXE frozen : passage de 1 thread a N threads (N = cpu_count, ex: 8 sur machine Dom)
- OCR docTR (db_resnet50 + crnn_vgg16_bn) et NER CamemBERT doivent exploiter tous les cœurs
- CPU processus attendu : >40% sur machine 8 threads (vs ~12% avant)
- Aucun changement de sortie PII — modification purement performance
### Verification
- `python3 -m pytest tests/unit -q` : **97 passed, 1 failed** (009 Biarritz = echec connu pyahocorasick, pas de regression H1)
- Ruff / lint : clean (aucun import ajoute en dehors du try/except torch)
## Prochaines etapes
1. Rebuild EXE Windows sur 192.168.1.11
2. Test avec PDF reel Dom
3. Relever lignes `PERF` + `torch threads config` dans `anonymisation.log`
4. Comparer CPU/RAM/temps avant-apres
5. Si gain insuffisant, attaquer H3 (OCR batch)