Plan : corriger deux defauts releves a l'auto-relecture

dossier_donnees() etait utilise par app.py sans figurer dans le contrat Systeme —
l'implementation Windows aurait pu l'omettre et ne casser qu'a l'execution. Et les
comptes de tests annonces ne s'additionnaient pas depuis 80.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ralph Mayola 2026-08-23 17:44:39 +02:00
parent 372df70c62
commit 332afede0e

View File

@ -68,7 +68,7 @@ from contrats import Overlay, Systeme, Transcripteur
(Transcripteur, ["warmup", "transcrire"]), (Transcripteur, ["warmup", "transcrire"]),
(Overlay, ["show", "hide", "set_level", "set_status", "rearmer_garde"]), (Overlay, ["show", "hide", "set_level", "set_status", "rearmer_garde"]),
(Systeme, ["jouer_son", "modificateurs_enfonces", "raccourci_defaut", (Systeme, ["jouer_son", "modificateurs_enfonces", "raccourci_defaut",
"chemin_log", "acquerir_verrou_instance"]), "chemin_log", "dossier_donnees", "acquerir_verrou_instance"]),
]) ])
def test_le_contrat_declare_exactement_ses_methodes(contrat, methodes): def test_le_contrat_declare_exactement_ses_methodes(contrat, methodes):
declarees = [n for n, _ in inspect.getmembers(contrat, inspect.isfunction) declarees = [n for n, _ in inspect.getmembers(contrat, inspect.isfunction)
@ -144,6 +144,9 @@ class Systeme(Protocol):
def chemin_log(self) -> str: def chemin_log(self) -> str:
"""Chemin absolu du journal.""" """Chemin absolu du journal."""
def dossier_donnees(self) -> str:
"""Dossier des données de l'application (verrou d'instance, réglages)."""
def acquerir_verrou_instance(self, chemin: str): def acquerir_verrou_instance(self, chemin: str):
"""Verrou exclusif non bloquant ; rend le fichier, ou None s'il est pris.""" """Verrou exclusif non bloquant ; rend le fichier, ou None s'il est pris."""
``` ```
@ -186,7 +189,7 @@ from systeme import choisir_systeme
def test_la_fabrique_rend_une_implementation_complete(): def test_la_fabrique_rend_une_implementation_complete():
s = choisir_systeme() s = choisir_systeme()
for methode in ("jouer_son", "modificateurs_enfonces", "raccourci_defaut", for methode in ("jouer_son", "modificateurs_enfonces", "raccourci_defaut",
"chemin_log", "acquerir_verrou_instance"): "chemin_log", "dossier_donnees", "acquerir_verrou_instance"):
assert callable(getattr(s, methode)), f"{methode} manque" assert callable(getattr(s, methode)), f"{methode} manque"
@ -312,7 +315,7 @@ et, dans chaque test, remplacer `acquire_single_instance_lock(...)` par `choisir
- [ ] **Step 6 : Lancer toute la suite** - [ ] **Step 6 : Lancer toute la suite**
Run: `.venv/bin/python -m pytest -q` Run: `.venv/bin/python -m pytest -q`
Expected: PASS — 85 tests (80 + 5 nouveaux) Expected: PASS — **89 tests** (80 au depart, +4 en tache 1, +5 ici)
- [ ] **Step 7 : Commit** - [ ] **Step 7 : Commit**
@ -519,7 +522,7 @@ def classe_overlay_pour(plateforme=None):
- [ ] **Step 5 : Lancer toute la suite** - [ ] **Step 5 : Lancer toute la suite**
Run: `.venv/bin/python -m pytest -q` Run: `.venv/bin/python -m pytest -q`
Expected: PASS — 94 tests Expected: PASS — **91 tests** (+2 pour l'interface)
- [ ] **Step 6 : Commit** - [ ] **Step 6 : Commit**
@ -674,6 +677,7 @@ class FauxSysteme:
def modificateurs_enfonces(self): return False def modificateurs_enfonces(self): return False
def raccourci_defaut(self): return "<cmd>+<ctrl>+d" def raccourci_defaut(self): return "<cmd>+<ctrl>+d"
def chemin_log(self): return "/tmp/zonza-test.log" def chemin_log(self): return "/tmp/zonza-test.log"
def dossier_donnees(self): return "/tmp/zonza-test"
def acquerir_verrou_instance(self, chemin): return object() def acquerir_verrou_instance(self, chemin): return object()
@ -694,7 +698,7 @@ Le contrôleur appelle `transcrire`, non plus `transcribe` : renommer l'appel da
- [ ] **Step 5 : Lancer toute la suite** - [ ] **Step 5 : Lancer toute la suite**
Run: `.venv/bin/python -m pytest -q` Run: `.venv/bin/python -m pytest -q`
Expected: PASS — 95 tests Expected: PASS — **92 tests** (+1 pour la garde d'imports)
- [ ] **Step 6 : Commit** - [ ] **Step 6 : Commit**
@ -773,7 +777,7 @@ Et dans `_start_hotkey`, lire le raccourci depuis le système :
- [ ] **Step 3 : Lancer toute la suite** - [ ] **Step 3 : Lancer toute la suite**
Run: `.venv/bin/python -m pytest -q` Run: `.venv/bin/python -m pytest -q`
Expected: PASS — 95 tests Expected: PASS — **92 tests**
- [ ] **Step 4 : Reconstruire et vérifier le cdhash** - [ ] **Step 4 : Reconstruire et vérifier le cdhash**
@ -811,7 +815,7 @@ git push origin main
## Vérification finale de l'étape ## Vérification finale de l'étape
- [ ] `.venv/bin/python -m pytest -q`95 tests verts - [ ] `.venv/bin/python -m pytest -q`**92 tests verts** (80 au depart, +12)
- [ ] `codesign -dvvv /Applications/Zonza.app | grep CDHash` → identique à avant l'étape - [ ] `codesign -dvvv /Applications/Zonza.app | grep CDHash` → identique à avant l'étape
- [ ] `[diag] accessibilité accordée : True` dans le journal - [ ] `[diag] accessibilité accordée : True` dans le journal
- [ ] une dictée réelle produit `[texte]` puis `[collage] ok` - [ ] une dictée réelle produit `[texte]` puis `[collage] ok`