# État projet — Source de vérité partagée **Dernière mise à jour :** 2026-06-01 10:00 (Claude) **Statut sprint :** ⏸️ **EN PAUSE** — Dom malade 3 jours (sam-lun), livraison reportée. Reprise probable jeudi 04/06 ou vendredi 05/06. --- ## Snapshot technique | Élément | Valeur | Source | |---|---|---| | Branche | `main` | git | | Commit courant | `13730d1` feat(admin_rules): CLI simulate_admin_rule + fix email avant force_terms | git log | | Tests unitaires | 73/73 PASSED (~3.89s) | session_state.md MEMORY | | Score qualité **actuel** | **99.8/100** (mesuré 2026-05-28 18:35 par Claude sur audit_30) | `evaluate_quality.py --compare` | | Score qualité baseline | 97.0/100 (référence figée 2026-03-12) | `evaluation/baseline_scores.json` | | ⚠️ Régression vs baseline | leak audit `GRAND` (17 occurrences) dans `trackare-05012965-23060770` | `evaluate_quality.py` output | | Version EXE distribuée | v10 — build 2026-04-15 (722 MB) | session_state.md | | EXE à jour ? | ❌ **NON** — 19 commits de retard dont fixes #1, #3-5, #6, #7-11 | audit Claude | | GUI active | `Pseudonymisation_Gui_V5.py` (v5.5) | code | | GUI v6 | Maquette HTML validée (2026-05-06) — non codée | roadmap | --- ## Décisions tranchées par Dom | ID | Décision | Date | Détail | |---|---|---|---| | D-1 | MVP = 99% RGPD | 2026-05-28 | aucune fuite PII silencieuse acceptée | | D-2 | Livraison .exe Windows v11 | 2026-05-28 | rebuild obligatoire sur 192.168.1.11 | | D-3 | Pas de signature Authenticode | 2026-05-28 | doc SmartScreen à fournir | | D-4 | Canal OwnCloud | 2026-05-28 | livraison + patches | | D-5 | Butoir mardi 02/06/2026 matin | 2026-05-28 | marge mardi soir / mercredi | | D-6 | P0 : Q-1, C-8, Q-2, C-2, B-1, B-2, B-3, rebuild EXE v11 | 2026-05-28 | scope serré | | D-7 | Reporté v11.5 : GUI v6, validation humaine, rapport campagne, C-1, perf | 2026-05-28 | post-livraison | | D-8 | Week-end ON | 2026-05-28 | vendredi → mardi continu | | D-9 | Support post-livraison | 2026-05-28 | TZ +4h, patches via OwnCloud | → Détail complet : `decisions/2026-05-28_dom_mvp-livraison-mardi.md` --- ## Actions en cours | # | Action | Statut | Owner | Priorité | Notes | |---|---|---|---|---|---| | C-1 | Compléter `requirements.txt` (gliner==0.2.18, numpy<2.0, pyahocorasick, pyzbar, edsnlp) | À faire | — | 🔴 Bloquant | audit Claude | | C-2 | Nettoyer doublon `standard_local_copie_copie` dans `config/profiles.yml` | À faire | — | 🟠 Important | audit Claude | | C-3 | `git rm` sorties pseudonymisées `ano/pdf_natif/pseudonymise/*` + `.gitignore` | À faire | — | 🟠 Important | audit Claude | | C-4 | Trancher silver_annotations (commit ou gitignore) — décision Dom | À faire | Dom | 🟠 Important | gouvernance RGPD | | C-5 | Rebuild EXE Windows v11 sur 192.168.1.11 | À faire | — | 🔴 Bloquant | post Phase 0 | | C-6 | Committer scripts build untracked + `config/profiles.default.yml` + `config/mask_templates/` | À faire | — | 🟠 Important | audit Claude | | C-7 | Retirer commentaire stale ligne 3 de `admin_rules.default.yml` | À faire | — | 🟡 Mineur | audit Claude | | Q-1 | Remplacer `except Exception: pass` (~20 occurrences) sur chemins rédaction PDF par logging | À faire | — | 🔴 **BLOQUANT SÉCU** | audit Qwen | | Q-2 | Corriger chemin absolu `C:\\Users\\dom\\...` dans `anonymisation_onefile.spec` | À faire | — | 🔴 Bloquant build | audit Qwen | | Q-3 | Corriger chemin absolu dans `check_regression.py` | À faire | — | 🟠 Important | audit Qwen | | Q-4 | Valider/sandboxer `regex_overrides` YAML | À faire | — | 🟠 Important | audit Qwen | | Q-5 | Wipe PII en mémoire (`del anon.audit`) après rédaction | À faire | — | 🟡 Mineur | audit Qwen | | Q-6 | Supprimer/archiver code mort (GUI V3, V4, RobustEngine, patch) | À faire | — | 🟡 Hygiène | audit Qwen | | Q-7 | Supprimer/renommer `anonymizer_core_refactored.py` (388 lignes incomplet) | À faire | — | 🟡 Hygiène | audit Qwen | | Q-8 | Compiler regex de `_mask_line_by_content` au niveau module (perf 3-5x) | À faire | — | 🟢 Perf | audit Qwen | | Q-9 | Factoriser `_search_whole_word` (complexité N²) | À faire | — | 🟢 Perf | audit Qwen | | Q-10 | Trancher build system PyInstaller vs Nuitka | À faire | Dom | 🟡 Hygiène | audit Qwen | | Q-11 | Ajouter `pyproject.toml` pytest + CI tests/lint | À faire | — | 🟡 Qualité | audit Qwen | | C-8 | Régression : fuite audit nom `GRAND` (17 occ.) dans `trackare-05012965-23060770` | À investiguer | — | 🟠 Important | mesure 2026-05-28 | | Q-12 | Audit ciblé flux admin_rules — règles chargées vs effectivement appliquées | Lancé par Qwen | Qwen | 🟡 Vérification | demande Claude 2026-05-28 | | Q-13 | Pseudo-code patch quarantaine différentielle Q-1 → préparer pour décision Dom | ✅ Livré v2 consolidé | Claude+Qwen | 🔴 Préa-bloquant | `inbox/for-dom/2026-05-29_consolide_pseudocode-Q1-v2.md` | | Q-14 | Tests pytest C-8 régression GRAND | ✅ Livré 11:45 | Qwen | 🟠 Important | `inbox/for-dom/2026-05-29_qwen_tests-c8-grand.md` (7 tests) | | Q-15 | Release notes v11 MVP — brouillon | ✅ Livré 12:30 | Qwen | 🟠 Important | `inbox/for-dom/2026-05-29_qwen_release-notes-v11-draft.md` | | Q-16 | Smoke test bêta T6 — kit complet (spec PDF + procédure + checklist 20 items + cas erreur) | ✅ Livré 13:45 (22h avance) | Qwen | 🟠 Important | `inbox/for-dom/2026-05-29_qwen_smoke-test-T6.md` | ## Désaccords résolus (sprint MVP) | Sujet | Résolution | Date | |---|---|---| | Inventaire +5 cas manqués (Qwen) | **Rejeté factuellement** — vérification ligne par ligne montre que les 5 lignes citées par Qwen ne sont pas des `except: pass`. Vrai total : 6 `except: pass` purs (déjà couverts) + 7 `except as e:` silencieux | 2026-05-29 11:15 | | Seuils Q-1 (Claude 50/3 vs Qwen 100/0) | Tranchés à **100/0** (arguments Qwen acceptés — RGPD 99% incompatible avec tolérance) | 2026-05-29 11:15 | | Texte Q-PDF (Claude=output_dir seul vs Qwen=copie quarantaine) | Tranché : **copie en quarantaine** pour autoportance opérateur | 2026-05-29 11:15 | | `_count_residual_pii` (Claude minimal vs Qwen complet via leak_scanner) | Tranché : **leak_scanner** réutilisé | 2026-05-29 11:15 | ## Intentions produit non finies (détectées par Qwen 2026-05-28) | Composant | Intention | État | Lien vision | |---|---|---|---| | `manual_masking.py` (56 lignes) | Validation humaine | 🔴 Embryon non branché | Axe 1 vision | | `pdf_mask_designer.py` (440 lignes) | Templates masquage | 🟠 Standalone fonctionnel | Axe 6 vision | | `format_converter.py` (256 lignes) | Multi-formats DOCX/ODT/RTF/HTML | 🟠 Code non orchestré GUI | UX | | `server.py` (347 lignes) | API microservice FastAPI | 🟡 Orphelin non documenté | Évolutivité | | `gliner_manager.py` | NER fallback multi-modèles | 🟢 Disponible mais dormant | Qualité | | `vlm_manager.py` | Détection visuelle PII (Ollama) | 🟢 Expérimental | R&D | | `hospital_filter.should_filter()` | Filtre FP établissements | 🟡 Retourne toujours False | Décision design | | `check_resources.py` | Pré-flight technique | 🟢 Système uniquement | Axe 3 vision | | Profils YAML | Multi-établissements | 🟠 Pas de cycle de vie | Évolutivité | Légende : - **C-x** : action identifiée par Claude - **Q-x** : action identifiée par Qwen - Préfixe `D-x` réservé aux décisions Dom --- ## Désaccords résolus | Sujet | Résolution | Date | |---|---|---| | Score qualité baseline (Claude 100 vs Qwen 97) | **Tranché : 99.8/100 actuel** (mesuré). Baseline 97 (12/03) correct. Mémoire 100 inexacte. | 2026-05-28 18:35 | | `admin_rules` branché au pipeline ? | **Tranché : OUI** depuis `df5dabf` (28/04). Qwen reconnaît erreur d'audit. Audit ciblé du flux à venir. | 2026-05-28 18:15 | ## Désaccords ouverts (aucun pour le moment) --- ## Points stratégiques en attente de décision Dom 1. **Pseudonymisation vs Anonymisation** — le produit s'appelle "Pseudonymisation" mais remplace par `[NOM]` non réversible → techniquement anonymisation. Trancher le positionnement. 2. **Cible utilisateur réelle** — DSI hospitalier (batch) ou médecin/secrétaire (cas par cas) ? 3. **Cas d'usage en aval** — publication / partage inter-établissements / archivage / recherche ? 4. **Modèle de responsabilité** — qui signe l'anonymisation (outil / opérateur / DPO) ? 5. **Stratégie GUI v6** — cosmétique seul, ou refonte fonctionnelle (validation humaine, rapport campagne, quarantaine, métadonnées) ? Voir `docs/reflexions/2026-05-28_vision_fonctionnelle_avant_prod.md` pour le détail.