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>
This commit is contained in:
2026-06-25 18:09:52 +02:00
parent 6476fe9f98
commit 2aa5a43261
4 changed files with 14 additions and 9 deletions

View File

@@ -57,9 +57,12 @@ def main(argv=None) -> int:
if "--self-test" in argv:
return _self_test()
from gui_v6.logging_setup import setup_file_logging
try:
from gui_v6.logging_setup import setup_file_logging
setup_file_logging()
setup_file_logging()
except Exception:
pass
from gui_v6.app import AnonymisationApp
from gui_v6.single_instance import AlreadyRunningError, SingleInstance

View File

@@ -130,10 +130,11 @@ class RunSummary:
def _default_process_fn(doc_path: Path, out_dir: Path) -> dict:
# Import paresseux : aucun manager NER chargé à l'import du runner.
from anonymizer_core_refactored_onnx import process_document
# Passe par make_process_fn pour bénéficier du fail-close P0-1 (refus si le
# NER obligatoire est indisponible), même sur ce chemin de repli.
from gui_v6.engine_bridge import EngineSettings, make_process_fn
return process_document(doc_path, out_dir)
return make_process_fn(EngineSettings())(doc_path, out_dir)
class ProcessingRunner:

View File

@@ -1,7 +1,8 @@
"""Protection multi-instance de la GUI V6 (P0-7).
- Windows (frozen) : mutex nommé kernel via ctypes — c'est CE nom que l'installeur
Inno détecte (``AppMutex``) pour fermer l'app avant une mise à jour (D8).
- Windows (frozen) : mutex nommé kernel via ctypes — ce nom DEVRA être déclaré comme
``AppMutex`` dans installer/Anonymisation.iss (Plan 3 / D8) pour que l'installeur
ferme l'app avant une mise à jour.
- POSIX (dev/test) : verrou ``fcntl`` exclusif sur un fichier dans le dossier app.
"""
@@ -11,7 +12,7 @@ import os
import sys
from pathlib import Path
# Nom partagé avec installer/Anonymisation.iss (AppMutex). NE PAS modifier seul.
# Nom destiné à l'AppMutex de installer/Anonymisation.iss (Plan 3 / D8). NE PAS modifier sans synchroniser le .iss.
APP_MUTEX_NAME = "AivanonymAnonymisationV6"

View File

@@ -8,7 +8,7 @@ from gui_v6.single_instance import (
def test_mutex_name_is_stable():
# Nom partagé avec l'installeur (Inno AppMutex). Ne pas changer sans MAJ .iss.
# Nom destiné à l'installeur (Inno AppMutex, Plan 3). Sentinelle anti-renommage accidentel.
assert APP_MUTEX_NAME == "AivanonymAnonymisationV6"