# É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.
