Deux defauts trouves en rendant la sonde injectable.
1. Le masque etait ecrit 0x000F0000 A LA MAIN. Il couvrait Shift, Control et Alt
mais PAS Command (0x00100000) — pourtant la touche du raccourci de Zonza.
Maintenir Cmd seul passait donc inapercu. Le masque est desormais COMPOSE
depuis les constantes nommees de Quartz : un masque calcule de tete se trompe
en silence, compose il ne peut plus.
2. Le test lisait le CLAVIER PHYSIQUE (`modificateurs_enfonces() is False`). Son
resultat dependait des mains de l'utilisateur pendant la suite — un echec
inreproductible a ete observe ce jour, puis 17 executions vertes. La sonde est
rendue injectable, comme SystemeWindows l'avait deja, et les quatre
modificateurs sont eprouves un par un. Un test verifie que la sonde reelle rend
un booleen sans lever, SANS affirmer sa valeur.
Le repli hors Quartz excluait aussi le verrouillage majuscule : actif, il aurait
fait attendre 2 s avant CHAQUE collage, en permanence.
195 tests.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- systeme/macos.py : SystemeMacOS (sons afplay, modificateurs Quartz, chemins,
verrou d'instance fcntl) implementant le contrat Systeme.
- systeme/__init__.py : choisir_systeme() fabrique selon sys.platform,
refuse clairement une plateforme inconnue.
- core.py : verrou d'instance (fcntl, LOCK_PATH, acquire_single_instance_lock)
retire ; import os retire aussi, verifie inutilise ailleurs dans le fichier.
- app.py : passe par choisir_systeme().acquerir_verrou_instance(dossier_donnees()
+ instance.lock) au lieu de core.acquire_single_instance_lock. Seul changement
dans ce fichier, nom de fichier inchange.
- tests/test_single_instance.py : reoriente vers choisir_systeme(), memes
assertions et meme nombre de tests.
- tests/test_systeme.py (nouveau) : verrou du test_le_verrou_refuse_une_seconde_prise
garde desormais la reference au premier verrou — sans variable, CPython le
garbage-collectait entre les deux assert (refcount 0 -> fermeture -> verrou
relache), le test passait pour la mauvaise raison.
89 tests verts (84 + 5).