Files
anonymisation/docs/coordination/archive/from-claude/2026-06-01_resumption.md
Domi31tls 21a408a9e4 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.
2026-06-08 10:41:15 +02:00

5.6 KiB

Resumption — Qwen Code (nouvelle session)

Date de création : 2026-05-30 Dernière activité : 2026-05-29 13:45 Sprint en cours : v11.0 MVP (livraison prévue mardi 02/06)


Contexte en 1 phrase

Le sprint v11.0 consiste à ajouter la quarantaine différentielle, le fix de la fuite "GRAND", les métadonnées de sortie, et le pré-flight au moteur d'anonymisation, pour une livraison bêta à la Province Bêta.


État du sprint

Étape Qui Statut Fichier de référence
Pseudo-code Q-1 (quarantaine) Claude (v2 consolidé) Fait inbox/for-dom/2026-05-29_consolide_pseudocode-Q1-v2.md
Analyse régression GRAND Qwen Fait inbox/for-dom/2026-05-29_qwen_analyse-regression-grand.md
Tests C-8 (7 tests) Qwen Fait inbox/for-dom/2026-05-29_qwen_tests-c8-grand.md
Release notes v11 Qwen Fait inbox/for-dom/2026-05-29_qwen_release-notes-v11-draft.md
Smoke test bêta T6 Qwen Fait inbox/for-dom/2026-05-29_qwen_smoke-test-T6.md
CODE Q-1 + C-8 + P0 Dom 🔴 Non commencé En attente

Ce qui est en attente

1. Dom doit coder le Q-1 + C-8 + P0 dans anonymizer_core_refactored_onnx.py

Ce que Dom doit implémenter (priorité) :

# Action Détail Référence
1 Fix C-8 : supprimer "grand" des stopwords 1 ligne dans data/stopwords_manuels.txt data/stopwords_manuels.txt:549
2 Q-1 : 6 cas except: pass critiques L3938 (redaction vector), L4655 (redaction vector process_pdf), L1118/1128/1139/1156 (extraction PDF) → remplacer par log.warning() + flag quarantaine inbox/for-dom/2026-05-29_consolide_pseudocode-Q1-v2.md
3 Q-1 : dossier quarantaine/ + INDEX.md Structure : quarantaine//*.reason.txt, errors.log, INDEX.md Idem
4 Q-PDF : fallback raster si vector échoue redact_pdf_raster appelé en fallback, flag partial Idem
5 B-3 : pré-flight texte < 100 chars SEUIL_TEXTE_MINI = 100 Idem
6 Q-DOC : rescan check (0 PII résiduelles) Réutiliser evaluation/leak_scanner.py Idem
7 B-1 : métadonnées .audit.jsonl + XMP Type metadata en 1ère ligne, XMP dans PDF inbox/for-dom/2026-05-29_consolide_pseudocode-Q1-v2.md §B-1
8 B-2 : fichiers .log + errors.log Un .log par doc, errors.log cumulatif Idem §B-2

2. Après le code de Dom — tâches de Qwen

# Tâche Détail
1 Review du code implémenté Vérifier que les 6 except: pass sont bien remplacés, que la quarantaine est fonctionnelle, que les tests C-8 passent
2 Mettre à jour les release notes Score → 100 (après fix C-8), ajouter fallback raster
3 Préparer le pack de livraison ZIP + SHA-256 + smartscreen-procedure.md
4 Re-exécuter evaluate_quality.py Confirmer score 100/100 après fix C-8

Fichiers à lire en priorité (dans l'ordre)

  1. docs/coordination/etat-projet.md — état courant du projet (commit, score, décisions)
  2. docs/coordination/log.md — journal des échanges (dernières lignes surtout)
  3. docs/coordination/inbox/for-dom/2026-05-29_consolide_pseudocode-Q1-v2.mdLE document de référence pour le code Q-1
  4. docs/coordination/decisions/ — décisions de Dom (MVP, no-UI)
  5. docs/coordination/audits/2026-05-28_qwen_audit-complet.md — audit technique complet (pour contexte)

Règles de coordination

  • Protocol : docs/coordination/README.md
  • Communication : fichiers dans inbox/for-<destinataire>/
  • Règle d'or : toujours grep/sed avant de citer un numéro de ligne
  • Pas de modif GUI : décision Dom (decisions/2026-05-28_dom_no-ui-changes.md)
  • Pas de code irréversible sans accord de Dom

Acteurs

Rôle Qui
Chef de projet / décideur Dom (dbazin52@gmail.com)
Pivot / coordination Claude
Reviewer code / perf Qwen Code

Mémo technique rapide

Core : anonymizer_core_refactored_onnx.py (4770 lignes)

Fonction principale : process_pdf(doc_path, output_dir, cfg) → retourne AnonResult

Pipeline :

  1. Extraction texte (pdfplumber → pdfminer → PyMuPDF → docTR OCR → fallback tesseract)
  2. Regex PII (phases 0a-0h : EMAIL, TEL, NIR, IBAN, FINESS, IPP, OGC, dates, adresses)
  3. NER (EDS-Pseudo, CamemBERT-bio ONNX, GLiNER, VLM)
  4. Gazetteers Aho-Corasick (FINESS, villes, noms INSEE)
  5. Cross-validation des noms (_cross_validate_name_candidates)
  6. Masquage ligne par ligne (_mask_line_by_line)
  7. Rescan de sécurité (selective_rescan)
  8. Redaction PDF (redact_pdf_vector puis fallback redact_pdf_raster)
  9. Sauvegarde (.pseudonymise.txt, .audit.jsonl, .redacted.pdf)

6 cas except: pass critiques (vérifiés par grep)

Ligne Fonction Problème
1118 extract_text_with_fallback_ocr PyMuPDF échec silencieux
1128 extract_text_with_fallback_ocr pdfplumber échec silencieux
1139 extract_text_with_fallback_ocr pdfminer échec silencieux
1156 extract_text_with_fallback_ocr docTR OCR échec silencieux
3938 redact_pdf_vector apply_redactions() échec silencieux
4655 process_pdf Rédaction vectorielle globale échec silencieux

Fix C-8 : fuite "GRAND"

grep -n "^grand$" data/stopwords_manuels.txt
# → ligne 549
# → supprimer cette ligne

"grand" est un nom de famille INSEE valide. Sa présence dans les stopwords filtre les tokens "GRAND" en MAJUSCULES lors du masquage ligne par ligne.


Fin du fichier