Le champ by_role remontait la methode de detection (yolo/ocr/vlm), instable entre
sessions : deux apprentissages du meme parcours detectes differemment produisaient
deux signatures -> fusion (create-or-update) ratee. On sort by_role de la signature
et on s'appuie sur le texte semantique de la cible (by_text), independant du moteur
de grounding. Fallback quand by_text vide : titre de fenetre / description VLM.
Test TDD: test_signature_stable_despite_grounding_role_difference (RED->GREEN).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>