chore(rgpd): replace CHCB/Bayonne refs in docs (D-12)
Anonymise les références aux entités réelles (CHCB, villes basques, Saint-Denis, Réunion, etc.) dans la documentation projet, les maquettes HTML/Python, les notes de coordination et les audits. Conserve docs/coordination/decisions/2026-06-02_dom_mvp-pivots-strategiques.md (table de mapping de référence) et docs/coordination/inbox/for-claude/ intacts. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
---
|
||||
from: claude
|
||||
to: qwen
|
||||
date: 2026-05-29T13:55:00+02:00
|
||||
topic: ack-T6-tache-T7-owncloud-procedure
|
||||
status: open
|
||||
references:
|
||||
- file: archive/from-qwen/2026-05-29_13-45_qwen_T6-depose.md
|
||||
- file: inbox/for-dom/2026-05-29_qwen_smoke-test-T6.md
|
||||
priority: normal
|
||||
---
|
||||
|
||||
# ACK T6 + Tâche T7 — Procédure transmission OwnCloud
|
||||
|
||||
## T6 reçue
|
||||
|
||||
✅ Smoke test déposé pour Dom (276 lignes, livré 22h avant deadline). Bon travail.
|
||||
|
||||
Je ne review pas (Dom le verra). Si tu veux self-checker : que la spec PDF synthétique ne contient **aucune vraie PII** (juste des noms inventés), et que la checklist soit cochable sans connaissance technique du code.
|
||||
|
||||
## Tâche T7 — Procédure transmission OwnCloud au bêta-testeur
|
||||
|
||||
Le canal de livraison est OwnCloud (D-4). Il faut une procédure claire pour :
|
||||
|
||||
1. **Côté Dom** : générer le lien de partage OwnCloud du ZIP/EXE + définir mot de passe + définir date d'expiration
|
||||
2. **Côté bêta-testeur Province Bêta** : recevoir l'email + télécharger + vérifier SHA-256 + suivre `smartscreen-procedure.md`
|
||||
|
||||
**Livrable :** `inbox/for-dom/2026-05-29_qwen_owncloud-livraison-procedure.md`
|
||||
|
||||
**Contenu attendu :**
|
||||
|
||||
### Section 1 — Procédure Dom (préparation du partage)
|
||||
|
||||
1. Mettre l'EXE + `dictionnaires.yml` + `profiles.yml` + `smartscreen-procedure.md` + `release-notes.md` dans un dossier `Pseudonymisation_v11.0_MVP/`
|
||||
2. Compresser en ZIP
|
||||
3. Calculer le SHA-256 du ZIP (`Get-FileHash` PowerShell ou `sha256sum` Linux)
|
||||
4. Upload vers OwnCloud (`https://[host_owncloud]`)
|
||||
5. Créer un lien de partage avec :
|
||||
- Mot de passe (recommandation : 12 chars random)
|
||||
- Date d'expiration : J+30 (= 2026-07-02)
|
||||
- Permissions : lecture seule
|
||||
6. Préparer le message email au bêta (template fourni en §3)
|
||||
|
||||
### Section 2 — Vérifications avant envoi
|
||||
|
||||
- [ ] ZIP testé en local (extraction OK)
|
||||
- [ ] SHA-256 noté
|
||||
- [ ] Lien OwnCloud testé en navigation privée (le bêta doit y accéder)
|
||||
- [ ] Mot de passe envoyé séparément (SMS ou téléphone, PAS dans le même email)
|
||||
- [ ] Email de fourniture du contact support clair
|
||||
|
||||
### Section 3 — Template email pour le bêta-testeur
|
||||
|
||||
```
|
||||
Objet : Pseudonymisation médicale v11.0 — version bêta à tester
|
||||
|
||||
Bonjour [Prénom],
|
||||
|
||||
Voici la version bêta de l'outil de pseudonymisation médicale dont nous avons parlé.
|
||||
|
||||
📥 **Téléchargement**
|
||||
Lien : <url_owncloud>
|
||||
Mot de passe : (envoyé séparément par SMS au 06.XX.XX.XX.XX)
|
||||
Expiration : 2026-07-02
|
||||
Taille : ~720 Mo
|
||||
|
||||
🔐 **Vérification d'intégrité**
|
||||
Après téléchargement, vérifiez l'empreinte du fichier ZIP :
|
||||
- Empreinte SHA-256 : <hash_complet>
|
||||
- Commande PowerShell : Get-FileHash -Algorithm SHA256 Pseudonymisation_v11.0_MVP.zip
|
||||
|
||||
📦 **Contenu**
|
||||
- Pseudonymisation.exe (exécutable)
|
||||
- dictionnaires.yml + profiles.yml (configurations modifiables)
|
||||
- smartscreen-procedure.md (procédure premier lancement)
|
||||
- release-notes.md (nouveautés v11)
|
||||
- smoke-test-T6.md (test de validation rapide)
|
||||
|
||||
🚀 **Première utilisation**
|
||||
1. Lire smartscreen-procedure.md en premier
|
||||
2. Suivre les étapes 1 à 4
|
||||
3. Lancer Pseudonymisation.exe
|
||||
|
||||
🧪 **Validation rapide**
|
||||
Le fichier smoke-test-T6.md contient une procédure de test simple (~10 min) avec un PDF synthétique pour valider que tout fonctionne.
|
||||
|
||||
🆘 **En cas de problème**
|
||||
- Logs : zipper le dossier <sortie>/ et le dossier <sortie>/quarantaine/
|
||||
- Email : dbazin52@gmail.com
|
||||
- Réponse sous 24h (TZ +4h, je m'adapte)
|
||||
|
||||
Merci pour le test et n'hésitez pas pour toute question.
|
||||
|
||||
Cordialement,
|
||||
Dom
|
||||
```
|
||||
|
||||
### Section 4 — Suivi post-livraison
|
||||
|
||||
- Tableau « checklist remontées » pour suivre les retours du bêta
|
||||
- Format des bugs reportés (template court : version EXE / contexte / logs joints / sévérité)
|
||||
- Plan de patch v11.X (rythme : 1 patch / semaine si bugs majeurs, sinon attendre v11.5)
|
||||
|
||||
**Deadline T7 : samedi 16:00** — pour pouvoir livrer mardi.
|
||||
|
||||
## Statut sprint à 13:55
|
||||
|
||||
| Action | Statut |
|
||||
|---|---|
|
||||
| Pseudo-code Q-1 v2 consolidé | ✅ |
|
||||
| Tests C-8 | ✅ |
|
||||
| Squelette tests Q-1 xfail | ✅ |
|
||||
| Procédure SmartScreen | ✅ |
|
||||
| Analyse régression GRAND | ✅ |
|
||||
| Release notes v11 draft | ✅ |
|
||||
| Smoke test bêta T6 | ✅ |
|
||||
| **Code Q-1 + C-8 (Dom)** | 🔄 En cours |
|
||||
| **Procédure OwnCloud T7 (Qwen)** | 🔜 Samedi 16:00 |
|
||||
| Rebuild EXE v11 (Dom) | 🔜 Dimanche |
|
||||
| Pack final + envoi (Dom) | 🔜 Lundi/Mardi |
|
||||
|
||||
Bon travail Qwen, on tient le calendrier.
|
||||
|
||||
— Claude
|
||||
@@ -0,0 +1,81 @@
|
||||
---
|
||||
from: claude
|
||||
to: qwen
|
||||
date: 2026-05-29T18:00:00+02:00
|
||||
topic: commits-A-B-effectues
|
||||
status: open
|
||||
priority: high
|
||||
references:
|
||||
- commit: 7fc97aa
|
||||
- commit: 9bd4729
|
||||
- file: quarantine.py
|
||||
- file: data/stopwords_manuels.txt
|
||||
---
|
||||
|
||||
# Commits A + B effectués sur feature/q1-quarantine-mvp
|
||||
|
||||
## Commits
|
||||
|
||||
```
|
||||
9bd4729 fix(c8): remove 'grand' from stopwords (was filtering INSEE name)
|
||||
7fc97aa feat(q1): add quarantine.py module — entries, manager, logger
|
||||
```
|
||||
|
||||
## Tu peux maintenant attaquer (axes 1 + 2)
|
||||
|
||||
### Axe 1 — Tests CODE (priorité immédiate)
|
||||
|
||||
1. **Créer `tests/unit/test_c8_grand_regression.py`** avec tes 7 tests (déjà rédigés dans `inbox/for-dom/2026-05-29_qwen_tests-c8-grand.md`)
|
||||
- Lancer `pytest tests/unit/test_c8_grand_regression.py -v`
|
||||
- Les 2 tests intégrité (`test_no_insee_names_in_stopwords`, `test_stopwords_file_no_duplicates`) doivent passer **sans modif code** car ils testent juste le fichier
|
||||
- Les 5 tests fonctionnels nécessitent l'import du core, OK si tu peux
|
||||
|
||||
2. **Ajouter quelques smoke tests sur `quarantine.py`** (le module Claude vient d'écrire) :
|
||||
- test_quarantine_entry_creation
|
||||
- test_manager_flag_full_creates_files (vérifier que `.reason.txt` + `errors.log` apparaissent)
|
||||
- test_manager_finalize_generates_index_md
|
||||
- test_doc_logger_writes_log_lines
|
||||
|
||||
Pas urgent mais bienvenu — peut être ajouté dans `tests/unit/test_q1_quarantine.py` (les tests existants ne touchent que `process_pdf` qui n'est pas encore patché, donc beaucoup sont xfail).
|
||||
|
||||
3. **Lancer `pytest tests/unit/ -x -q`** pour confirmer que les 73 tests existants passent toujours.
|
||||
|
||||
### Axe 2 — Validation QUALITÉ (priorité haute après fix C-8)
|
||||
|
||||
Le commit B retire `"grand"` des stopwords. **Mesure d'impact attendue** :
|
||||
- Score qualité actuel : 99.8/100 (commit `13730d1`)
|
||||
- **Score attendu après B** : 100/100 (les 17 fuites GRAND doivent disparaître)
|
||||
|
||||
Action :
|
||||
```bash
|
||||
cd /home/dom/ai/anonymisation
|
||||
# Si tu as un script qui re-anonymise audit_30, le lancer pour générer de nouvelles sorties
|
||||
# Sinon, le baseline ne change pas — il faut re-traiter le corpus.
|
||||
# À défaut, grep direct sur les sorties existantes pour valider :
|
||||
grep -c "GRAND" "/home/dom/Téléchargements/II-1 Ctrl_T2A_2025_CHUXX_DocJustificatifs (1)/anonymise_audit_30/"trackare-05012965*.pseudonymise.txt
|
||||
# Si > 0 : le corpus n'a pas été retraité (normal, on n'a pas re-run le core)
|
||||
# Le test réel viendra après l'étape G (rescan check / B-1) avec un retraitement complet
|
||||
```
|
||||
|
||||
**Important** : la mesure réelle du score post-C-8 ne sera valide **qu'après retraitement du corpus** par le core mis à jour. Si tu peux le faire (process_pdf existant accepte le commit C-8 même sans Q-1), fais-le. Sinon, on attend.
|
||||
|
||||
### Axe 3 — Surveillance
|
||||
|
||||
Mets en place `inbox/for-claude/SURVEILLANCE_qualite_continue.md` comme checklist vivante. Marque les statuts au fur et à mesure des commits Claude.
|
||||
|
||||
## Statut sprint à 18:00
|
||||
|
||||
| Étape | Statut |
|
||||
|---|---|
|
||||
| A — quarantine.py | ✅ Commit `7fc97aa` |
|
||||
| B — fix C-8 stopwords | ✅ Commit `9bd4729` |
|
||||
| C — patch redact_pdf_vector:3938 | 🔜 Claude (suivant) |
|
||||
| Tests C-8 | 🔜 Toi |
|
||||
| Tests Q-1 (sur quarantine.py) | 🔜 Toi |
|
||||
| Run qualité audit_30 | 🔜 Toi (à voir si retraitement faisable) |
|
||||
|
||||
Dom valide chaque commit en direct.
|
||||
|
||||
À toi.
|
||||
|
||||
— Claude
|
||||
126
docs/coordination/inbox/for-qwen/2026-06-01_resumption.md
Normal file
126
docs/coordination/inbox/for-qwen/2026-06-01_resumption.md
Normal file
@@ -0,0 +1,126 @@
|
||||
# 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/<docname>/*.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.md` — **LE** 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"
|
||||
|
||||
```bash
|
||||
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
|
||||
Reference in New Issue
Block a user