Validé sur PC Windows (DESKTOP-58D5CAC, 2560x1600) : - 8 clics résolus visuellement (1 anchor_template, 1 som_text_match, 6 som_vlm) - Score moyen 0.75, temps moyen 1.6s - Texte tapé correctement (bonjour, test word, date, email) - 0 retries, 2 actions non vérifiées (OK) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
116 lines
5.6 KiB
Markdown
116 lines
5.6 KiB
Markdown
# Plan d'Implémentation - Multi-Anchor Constraints (Fiche #11)
|
|
|
|
**Auteur :** Dom, Alice Kiro
|
|
**Date :** 15 décembre 2024
|
|
|
|
## Statut: Implémentation Core Complète ✅
|
|
|
|
L'implémentation principale du système multi-anchor avec contraintes est **complète**. Les fonctionnalités suivantes sont opérationnelles:
|
|
|
|
- ✅ Multi-anchor resolution avec fallback automatique
|
|
- ✅ Hard constraints (within_container_text, min_area)
|
|
- ✅ Weighted scoring avec pondérations configurables
|
|
- ✅ Tie-breaking stable et déterministe
|
|
- ✅ Audit trail complet avec métriques de performance
|
|
- ✅ Tests unitaires et property-based tests
|
|
|
|
## Tâches Restantes
|
|
|
|
- [ ] 2.3 Écrire un test de propriété pour la résolution de conteneur
|
|
- **Propriété 3: Cohérence de la résolution de conteneur**
|
|
- **Valide: Exigences 4.1, 4.4**
|
|
- Implémenter test property-based pour vérifier que la résolution de conteneur est cohérente
|
|
|
|
- [ ] 3.3 Écrire un test de propriété pour la strictesse des contraintes
|
|
- **Propriété 2: Strictesse des contraintes strictes**
|
|
- **Valide: Exigences 2.1, 2.4**
|
|
- Implémenter test property-based pour vérifier qu'aucun élément violant les contraintes n'est sélectionné
|
|
|
|
- [ ] 3.4 Écrire un test de propriété pour le filtrage complet des contraintes
|
|
- **Propriété 7: Complétude du filtrage des contraintes**
|
|
- **Valide: Exigences 2.2, 2.3**
|
|
- Implémenter test property-based pour vérifier que tous les types de contraintes filtrent correctement
|
|
|
|
- [ ] 4.4 Écrire un test de propriété pour la complétude de l'évaluation multi-anchor
|
|
- **Propriété 1: Complétude de l'évaluation multi-anchor**
|
|
- **Valide: Exigences 1.1, 1.3**
|
|
- Implémenter test property-based pour vérifier que toutes les ancres sont tentées
|
|
|
|
- [ ] 4.5 Écrire un test de propriété pour la résilience du fallback d'ancrage
|
|
- **Propriété 6: Résilience du fallback d'ancrage**
|
|
- **Valide: Exigences 1.3, 1.4**
|
|
- Implémenter test property-based pour vérifier le fallback quand les ancres échouent
|
|
|
|
- [ ] 5.3 Écrire un test de propriété pour la monotonicité du scoring pondéré
|
|
- **Propriété 4: Monotonicité du scoring pondéré**
|
|
- **Valide: Exigences 3.1, 3.2, 3.3, 3.4**
|
|
- Implémenter test property-based pour vérifier que les scores respectent la monotonicité
|
|
|
|
- [ ] 6.3 Écrire un test de propriété pour le déterminisme du tie-breaking
|
|
- **Propriété 5: Déterminisme du tie-breaking**
|
|
- **Valide: Exigences 5.5**
|
|
- Implémenter test property-based pour vérifier la stabilité du tie-breaking
|
|
|
|
- [ ] 8.1 Implémenter la réutilisation de l'analyse des éléments UI
|
|
- Éviter de re-analyser les mêmes éléments entre les ancres
|
|
- Réutiliser les calculs de distance et d'alignement
|
|
- _Exigences: 8.2, 8.4_
|
|
|
|
- [ ] 8.2 Implémenter le cache des résolutions de conteneur
|
|
- Cacher les résolutions de conteneur dans la même résolution
|
|
- Éviter les lookups redondants de conteneur
|
|
- _Exigences: 8.3_
|
|
|
|
- [ ] 8.3 Ajouter les métriques de performance détaillées
|
|
- Mesurer les durées de résolution, scoring, contraintes séparément
|
|
- Compter les cache hits/misses pour les conteneurs
|
|
- _Exigences: 8.5_
|
|
|
|
- [ ] 8.4 Écrire un test de propriété pour la cohérence de l'optimisation des performances
|
|
- **Propriété 9: Cohérence de l'optimisation des performances**
|
|
- **Valide: Exigences 8.2, 8.4**
|
|
- Implémenter test property-based pour vérifier que les optimisations n'affectent pas la cohérence
|
|
|
|
- [ ] 10.1 Intégrer avec le système de guérison existant
|
|
- S'assurer que les nouvelles fonctionnalités fonctionnent avec les profils de guérison
|
|
- Tester l'interaction avec healing_attempt et les seuils relaxés
|
|
- _Exigences: Toutes_
|
|
|
|
- [ ] 10.2 Tests de performance avec des UI states complexes
|
|
- Vérifier que la résolution multi-anchor reste sous 50ms
|
|
- Mesurer l'impact mémoire des nouvelles fonctionnalités
|
|
- _Exigences: 8.1_
|
|
|
|
- [ ] 10.3 Tests d'intégration de bout en bout
|
|
- Scénarios réels avec panels Login/Settings
|
|
- Cas complexes avec multiples ancres et contraintes
|
|
- _Exigences: Toutes_
|
|
|
|
- [ ] 11. Point de contrôle final - S'assurer que tous les tests passent
|
|
- S'assurer que tous les tests passent, demander à l'utilisateur si des questions se posent.
|
|
|
|
## Notes d'Implémentation
|
|
|
|
### Fonctionnalités Complètes ✅
|
|
|
|
1. **Multi-Anchor System**: La méthode `_evaluate_all_anchor_candidate_combinations` implémente l'évaluation complète de toutes les combinaisons ancre-candidat avec fallback automatique.
|
|
|
|
2. **Hard Constraints**: La méthode `_apply_hard_constraints` filtre strictement les candidats selon les contraintes `within_container_text` et `min_area`.
|
|
|
|
3. **Weighted Scoring**: La méthode `_score_candidate_sniper` utilise des pondérations configurables pour proximity, alignment, container, et roi_iou.
|
|
|
|
4. **Stable Tie-Breaking**: Les méthodes `_create_stable_sort_key` et `_select_best_candidate_with_tiebreak` assurent un départage déterministe.
|
|
|
|
5. **Container Resolution**: La méthode `_container_bbox_from_text` trouve intelligemment les conteneurs par texte.
|
|
|
|
6. **Audit Trail**: Les métadonnées complètes sont incluses dans `resolution_details` avec toutes les informations de performance et de débogage.
|
|
|
|
### Tests Existants ✅
|
|
|
|
- Tests unitaires complets dans `test_fiche11_multi_anchor_constraints.py`
|
|
- Tests property-based partiels (4 propriétés sur 10 implémentées)
|
|
- Tests d'intégration avec scénarios réels
|
|
|
|
### Architecture
|
|
|
|
Le système s'intègre parfaitement dans l'architecture existante de `TargetResolver` sans casser la compatibilité. Les nouvelles fonctionnalités sont activées via les champs `hard_constraints` et `weights` de `TargetSpec`. |