8f9107a27f
feat(gui): câblage upload diagnostics en fin de run (E3)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-30 10:44:02 +02:00
8eb8cf9999
feat(gui): client diagnostics non bloquant + spool best-effort (E3)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-30 10:39:25 +02:00
4b7a31b9df
feat(gui): module diagnostics — payload liste-blanche RGPD (E2)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-30 10:36:16 +02:00
4412512d4b
test(gui): vérifier chaque branche de classify_error_code + anti-dérive (E2)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-30 10:34:11 +02:00
952a1c6ca0
feat(gui): DocResult porte type+catégorie d'erreur RGPD-safe (E2)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-30 10:28:42 +02:00
675e328d8c
docs(plan): Plan 1c honnêteté UI (P1-4/NER/P1-5/P1-3/P1-1/P1-6/P1-11)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-29 19:42:16 +02:00
4813f9439e
fix(core): corriger la provenance OCR de l'audit (docTR → OnnxTR, P1-11)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-29 19:36:58 +02:00
ee1f86d55e
feat(gui): échec amont clair si dossier de sortie non inscriptible (P1-6)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-29 19:33:16 +02:00
3a981eb15a
feat(gui): dropzone cliquable + libellé honnête (P1-1, DnD natif différé)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-29 19:29:12 +02:00
d3189d5bb7
feat(gui): recâbler import/export de configuration par email (P1-3)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-29 19:27:33 +02:00
1d65d42430
feat(gui): localiser les documents livrés + bouton ouvrir le dossier (P1-5)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-29 19:15:28 +02:00
416b347d7f
feat(gui): confirmation explicite avant anonymisation regex-only (NER off)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-29 19:07:38 +02:00
880a75873d
feat(gui): charger le dictionnaires.yml externe éditable en frozen (P1-4)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-29 19:00:49 +02:00
c1c3565a0b
feat(gui): labels honnêtes — toggle « Téléphones » (e-mails non-toggleables) + hint Adresses sans ville (1c)
...
Décision Dom 2026-06-29 (honnêteté UI) :
- « Téléphones / e-mails » → « Téléphones » : EMAIL reste toujours masqué (non-toggleable),
le label ne le promet plus.
- hint « Adresses / CP » : « Voie, ville, code » → « Voie + code postal » : VILLE reste
toujours masquée (décision 1b), le hint ne la promet plus.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-29 10:42:58 +02:00
4357a58d7d
fix(core): exempter les hits forcés (overrides) du filtre catégorie — anti-fuite PDF (P1-2/T1)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-27 11:38:19 +02:00
5663966938
docs(coord): verdict Qwen GO — re-revue post-impl Tasks 1-4 gating catégories
...
§FAX: aucun autre type non-toggleable dépend d'une passe gatée.
§Divergence: accord seuil 0 strict + premask scopé (retire suggestion adaptatif).
§Task 3b: report acceptable pour beta (fail-closed).
1 trouble mineur T1: override user-defined nommé avec catégorie toggleable.
2026-06-27 11:27:24 +02:00
bf832e12f0
feat(gui): câbler les 7 toggles catégories au moteur (P1-2)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-26 11:33:13 +02:00
daec1f53bd
feat(core): garde-fou adresse burn + doc chemins conservateurs (P1-2/F-3)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-26 11:13:42 +02:00
a02bca516d
feat(core): gates texte par catégorie sur toutes les passes (P1-2/F-2/F-5)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-26 11:03:04 +02:00
dd392c4a50
docs(beta): plan 1b — Task 2 seuil résiduel strict 0 + premask scopé TEL (revue qualité) + Task 3 span-aware
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-26 10:23:40 +02:00
2a3aab117d
feat(core): coordination quarantaine résiduelle NIR/TEL décochés (P1-2/F-4)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-26 10:21:27 +02:00
b15d0da141
feat(core): _category_of dérivé (anti-dérive) + filtre audit Tier 1 (P1-2/F-1)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-26 10:04:03 +02:00
c93dc34a70
docs(beta): plan 1b — décision Dom CODE_POSTAL suit le toggle Adresses (catégorie ADRESSE)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-26 09:50:07 +02:00
c77082409d
docs(beta): plan 1b v3 — re-revue Qwen GO (boucle adversariale 2/2) + 3 correctifs
...
Re-revue Qwen de l'approche dérivation = GO (dérivation jugée supérieure à la table
figée). Vérif exhaustive maps : 7 VLM + 7 EDS + 8 regex + _GLOBAL dynamique = 22+ kinds
couverts. Mon reverse-map VLM + fallback EDS confirmés sûrs (pas de fuite croisée).
3 correctifs intégrés : (A) site manquant RE_TRACKARE_IAO_MULTILINE_VALUE l.3102 (NOM
Trackare) → Task 3 ; (B) doc convention admin_rules (kind=clé placeholder, branche 3) ;
(C) seuil quarantaine adaptatif 0→1 si catégories décochées (anti fragment TEL). Caveat
UX CP documenté. Convergence Claude+Qwen. Exécution = GO Dom après relecture.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-25 23:02:44 +02:00
c7c3a86910
docs(coord): re-revue Qwen Plan 1b v2 — GO dérivation + 3 corrections mineures
...
A: RE_TRACKARE_IAO_MULTILINE_VALUE site manquant Task 3,
B: documenter convention admin_rules kind=placeholder,
C: suggestion seuil adaptatif quarantaine
2026-06-25 23:00:56 +02:00
ade1743bee
docs(coord): verdict Qwen GO-AVEC-RÉSERVES — revue adversariale Plan 1b gating catégories
...
5 findings: F-1 CRITIQUE (_CATEGORY_OF manque 15 kinds VLM/EDS/_GLOBAL),
F-2 HAUT (24+ sites texte manquants), F-3 HAUT (Tier 1 OK, 3 gaps PDF),
F-4 HAUT (quarantaine NIR/TEL décochés), F-5 MODÉRÉ (fuite croisée NER)
2026-06-25 22:46:44 +02:00
fa575d5f61
docs(beta): plan 1b v2 — intègre revue Qwen + vérif Claude (gating cœur P1-2)
...
Revue adversariale Qwen = GO-avec-réserves (F-1 critique : 15 kinds manquants VLM/EDS/
_GLOBAL ; F-2 24+ sites ; F-3 burn ; F-4 quarantaine NIR/TEL ; F-5 NER intra-boucle).
Vérif indépendante Claude : table Qwen elle-même incomplète (VLM_CP raté). Décision :
_category_of DÉRIVÉ de VLM_CATEGORY_MAP + EDS_LABEL_MAP + suffixe _GLOBAL + test
anti-dérive, au lieu d'une table figée. Sites consolidés, coordination quarantaine,
gating NER intra-boucle, garde-fous burn. Sauvegarde avant implémentation (consigne Dom).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-25 22:45:38 +02:00
9ad7833d21
docs(beta): plan 1b — câblage des 7 toggles catégories au moteur (P1-2)
...
Plan TDD du gating par catégorie : infra disabled_kinds + _CATEGORY_OF (default-deny)
+ filtre audit Tier 1 (porteur de sûreté PDF), relaxation rescan résiduel NIR/TEL,
gates texte Tier 2/3 (dispatchers + selective_rescan + NER + phase-0), garde-fou
adresse burn, câblage GUI 7 booléens. Tests comportementaux par catégorie + baseline
non-régression. CODE SÉCURITÉ — revue Qwen obligatoire.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-25 22:25:01 +02:00
2aa5a43261
harden(gui): centraliser fail-close repli + garde-fou logging + doc mutex (revue finale Plan 1a)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-25 18:09:52 +02:00
6476fe9f98
feat(gui): instance unique + mutex partagé installeur (P0-7)
...
Protection multi-instance GUI V6 : mutex kernel nommé sur Windows (partagé
avec l'installeur Inno via AppMutex), fcntl exclusif sur POSIX (dev/test).
3 tests unitaires, self-test OK, 0 régression gui_v6 (145 passed).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-25 18:01:28 +02:00
d4891f5cfd
fix(gui): flag legacy ONNX + log fichier dès l'entrée frozen (P0-5/E1)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-25 17:58:05 +02:00
9296c28bed
feat(gui): log fichier rotatif V6 à chemin connu (E1)
2026-06-25 17:56:50 +02:00
9e87cb3122
feat(gui): binding licence-poste souple (P0-6/D-20.4, affichage sans blocage)
2026-06-25 17:52:07 +02:00
dc0554e694
fix(gui): fail-close si CamemBERT-bio indisponible (P0-1, anti-fuite PII)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-25 17:46:50 +02:00
f3e6cdb980
fix(gui): connecter la GUI V6 au portail prod (P0-2, plus localhost)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-25 17:40:33 +02:00
55e8839613
docs(beta): plan d'implémentation 1a — socle sûreté & chaîne prod GUI V6
...
Plan bite-sized TDD pour les chantiers A/B/E1 : fail-close PII (P0-1), URL portail
(P0-2), binding licence souple (P0-6), log fichier V6 (E1), flag frozen ONNX (P0-5),
instance unique + mutex installeur (P0-7). 6 tâches, code complet, tests unitaires.
Plans 1b (gating cœur), 1c (UI), 2 (diagnostics), 3 (build/release) à suivre.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-25 16:49:01 +02:00
6554a6d590
docs(beta): audit prêt-bêta GUI V6 + design de mise en prod bêta testeur
...
Audit prêt-pour-bêta de GUI V6 (3 axes : parcours/UX/PII, moteurs/OnnxTR/frozen,
licence/télémétrie/diffusion) → punch-list P0=7 / P1=11 / P2=6, findings vérifiés.
Design validé Dom : périmètre « A + chaîne prod », P0 + P1 honnêteté UI, toggles
« Données à détecter » câblés au moteur (gating par type + couplage rescan, pas de
plancher dur), licence souple + binding poste (D-20.4), −2 Go via excludes PyInstaller,
Linux-first TDD + un seul build Windows. Plus 3 exigences prod intégrées : diagnostics
logs auto-upload scrubbé (liste-blanche), mise à jour propre (installeur), modèles
embarqués hors-ligne. 6 chantiers (A-F), 2 repos. Diffusion = gate Dom.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-25 16:43:04 +02:00
4b7c8db9a8
build: retirer torch/docTR du frozen + hiddenimports OnnxTR (pré-audit Qwen GO)
...
Suite à la migration OCR docTR→OnnxTR (8d683bc ) et au verdict pré-audit Qwen
(GO technique, 2026-06-21), préparation des 3 specs PyInstaller pour le prochain
rebuild Windows :
- Retrait de "torch", "torchvision", "doctr.*" des hiddenimports des 3 specs
(anonymisation_onefile, _cli_onefile, _gui_v6_onefile) → -~2 Go EXE attendu,
suppression définitive de la classe de bug oneDNN sur CPU contraint.
- Ajout des hiddenimports transitifs OnnxTR manquants (réserve R1 Qwen) :
"pyclipper", "scipy.cluster.hierarchy", "scipy.special" → anti-omission
PyInstaller (évite un crash OCR en frozen).
- Retrait de python-doctr[torch]>=0.9.0 de requirements.txt (transitoire levé).
_configure_torch_threads() conservé en code (lazy import torch sous try/except,
no-op si torch absent) pour future réactivation EDS-Pseudo/GLiNER.
Aucun rebuild ni diffusion (gate Dom). 3 specs compilent (py_compile).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-22 16:49:03 +02:00
8d683bc6d8
feat(ocr): migrer l'OCR de docTR (PyTorch) vers OnnxTR (ONNX Runtime)
...
OnnxTR exécute les MÊMES modèles que docTR (db_resnet50 + crnn_vgg16_bn) sur
ONNX Runtime, sans PyTorch. Corrige le crash torch/oneDNN « could not create a
primitive » sur CPU contraint (VM 2 cœurs collaborateur : OCR scan impossible →
quarantaine). Qualité identique validée empiriquement (CER 0,10-0,23 % vs docTR,
2 validations indépendantes Claude+Qwen), OCR ~2-3× plus rapide CPU.
- core : import OnnxTR, _get_ocr_model(), _OCR_AVAILABLE, boucle OCR inchangée
(API miroir) ; ONNXTR_CACHE_DIR pour le frozen ; bandeau de logs ENV au démarrage
(OS, CPU+AVX, cœurs, RAM, versions, providers) pour retours terrain auto-suffisants.
- 3 .spec : embarquent les poids ONNX OnnxTR (fail-closed) + hiddenimports onnxtr.
- requirements : onnxtr[cpu] (python-doctr conservé transitoirement).
- inclut le correctif quarantaine-visible du runner (GO Qwen).
Tests : test_ocr_onnxtr.py (RED→GREEN), 95 unit passed, e2e scan client OK
(OCR 5/5, PDF produit, plus de crash). Retrait torch du frozen + rebuild Windows
= étapes suivantes (gates Dom).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-19 17:07:00 +02:00
80d8cc230b
docs(coord): rapport transfert artefacts 19c4934 vers portail (SHA vérifiés)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-18 18:06:17 +02:00
711f2bc2b5
docs(coord): ACK Codex — portail prod NPM + dépôt bêta, actions restantes Dom
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-18 16:39:27 +02:00
08e617b644
docs(beta): runbook portail aligné sur le déploiement prod réel (app.aivanov.eu)
...
- §0 nouveau : état réel (domaine app.aivanov.eu, NPM + Let's Encrypt Force SSL,
APP_ENV=production, .env 600, cookie Secure confirmé live = fix 884661a en prod).
- §1 : pré-requis EXE copié sur serveur + commande avec env prod chargé + vérif SHA
via /api/v1/version avant diffusion.
- §5 : sécurité indispensable marquée en place (HTTPS/secrets/cookie Secure ✅ ).
- §5bis : dépôt modèles EDS/GLiNER préparé mais NON ACTIF (pack à compléter+tester).
Vérifié live : /login 200 HTTPS, http→301, /api/v1/version 404 (pas encore publié).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-18 16:38:51 +02:00
14757007be
docs(coord): ACK Codex — sécurité portail proportionnée + fix https_only
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-18 15:08:44 +02:00
471a8a4c62
docs(beta): runbook portail — sécurité proportionnée (pas de VPN/IP allowlist)
...
Recalibre la section sécurité au modèle de menace réel : portail sans
donnée patient (licences + compteurs agrégés) → HTTPS + login/mot de
passe fort suffisent. Retire la recommandation VPN/IP allowlist (overkill).
CSRF déjà couvert par SameSite=Lax ; rate-limiting /login = nice-to-have
au proxy. https_only désormais implémenté (app_aivanov 884661a).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-18 15:07:57 +02:00
c64162a936
docs(beta): kit bêta 2026-06-19 (checklist tests, note client, runbook portail)
...
Préparation bêta GUI demain (scope gelé Codex/Dom) — documentation, pas de code produit :
- docs/beta/checklist-tests-collaborateurs.md : install/lancement/licence/traitement
PDF natif+scan/vérif anonymisation/0 remontée patient/usage admin/relevé OS-hash-version,
garde-fou RGPD (synthétique/caviardé only).
- docs/beta/note-beta-client.md : version+SHA 8B437346…, moteurs actifs CamemBERT+regex,
EDS/GLiNER non actifs, traitement local, consigne retour (pas de PDF/log patient).
- docs/beta/runbook-portail-beta.md : publier artefact actif, compte client+approbation→licence,
jeton activation, /api/v1/version + download authentifié, rappels sécu prod (HTTPS/secrets/
CSRF/rate-limit = accès restreint tant que non traités).
Cible : Anonymisation-Setup.exe v2026.06.18.1203 (source 19c4934 ). Aucun push/diffusion.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-18 12:47:56 +02:00
19c4934de3
fix(gui): rendre les profils lisibles sous windows
2026-06-17 23:01:27 +02:00
ea1752d4a7
feat(cli): charger les moteurs optionnels depuis les modeles embarques
2026-06-17 19:52:29 +02:00
9b40fc0a85
fix(gui): rendre les profils scrollables a la molette
...
Ajoute un conteneur scrollable dedie au sous-onglet Profils pour permettre le defilement souris du formulaire complet. Tests GUI: test_gui_v6_profiles.py et test_gui_v6_*.py.
2026-06-17 18:05:45 +02:00
dc0616f744
fix(ner): convertir les entrees ONNX en int64
...
Force input_ids et attention_mask en int64 avant inference CamemBERT ONNX, pour eviter les erreurs de dtype selon les tokenizers/environnements Windows. Test cible: test_camembert_manager_cache.py.
2026-06-17 18:01:57 +02:00
60fb41c2e7
fix(gui): clarifier aide et disponibilite moteurs
...
Passe theme clair, libelles utilisateur, aides conteneurs, recherche de mise a jour et indication honnete des moteurs optionnels non embarques. Tests GUI unitaires: 126 passed.
2026-06-17 18:01:25 +02:00