# Plan d'Implémentation ## Phase 1 : Validateur de Qualité d'Entraînement - [x] 1. Implémenter le cœur du Validateur de Qualité - [x] 1.1 Créer `core/training/quality_validator.py` avec la classe TrainingQualityValidator - Implémenter la méthode `validate_workflow()` retournant QualityReport - Implémenter `compute_cluster_metrics()` utilisant sklearn silhouette_score - Créer les dataclasses QualityReport et ClusterMetrics - _Exigences : 1.1, 1.4_ - [x]* 1.2 Écrire le test property pour la cohérence de qualité des clusters - **Propriété 1 : Cohérence de la Qualité des Clusters** - **Valide : Exigences 1.1** - [x] 1.3 Implémenter la détection d'outliers avec méthode IQR - Créer la méthode `detect_outliers()` avec seuil IQR 1.5 - Retourner les indices des embeddings outliers - _Exigences : 1.3_ - [x]* 1.4 Écrire le test property pour la détection d'outliers - **Propriété 2 : Correction de la Détection d'Outliers** - **Valide : Exigences 1.3** - [x] 1.5 Implémenter la validation croisée pour la qualité du workflow - Créer la méthode `cross_validate()` avec ratio holdout configurable - Calculer la précision de match sur les observations retenues - _Exigences : 1.5_ - [x]* 1.6 Écrire le test property pour la validation croisée - **Propriété 3 : Précision de la Validation Croisée** - **Valide : Exigences 1.5** - [x] 2. Intégrer le Validateur de Qualité avec GraphBuilder - [x] 2.1 Modifier `core/graph/graph_builder.py` pour appeler le validateur après création du workflow - Ajouter l'étape de validation de qualité dans `build_from_session()` - Stocker les métriques de qualité dans les métadonnées du workflow - _Exigences : 1.1, 1.2_ - [x] 2.2 Ajouter les restrictions d'état basées sur la qualité - Empêcher la transition AUTO_CANDIDATE si qualité < 0.7 - Marquer les clusters à faible confiance dans le workflow - _Exigences : 1.2, 1.4_ - [x] 3. Point de contrôle - Vérifier que tous les tests passent - Vérifier que tous les tests passent, demander à l'utilisateur si des questions se posent. ## Phase 2 : Matcher Hiérarchique - [x] 4. Implémenter le cœur du Matcher Hiérarchique - [x] 4.1 Créer `core/matching/hierarchical_matcher.py` avec la classe HierarchicalMatcher - Implémenter la méthode `match()` retournant MatchResult - Créer les dataclasses MatchResult et TemporalContext - _Exigences : 2.1, 2.2, 2.3_ - [x] 4.2 Implémenter le matching niveau fenêtre - Créer `match_window_level()` comparant pattern de titre et processus - Retourner un score de confiance 0.0-1.0 - _Exigences : 2.1_ - [x] 4.3 Implémenter le matching niveau région - Créer `match_region_level()` comparant les régions UI - Utiliser IoU et similarité d'embedding pour le matching de régions - _Exigences : 2.2_ - [x] 4.4 Implémenter le matching niveau élément - Créer `match_element_level()` comparant les éléments individuels - Utiliser rôle, texte et similarité visuelle - _Exigences : 2.3_ - [x] 4.5 Implémenter la formule de combinaison de confiance - Combiner : 0.2*fenêtre + 0.3*région + 0.5*élément - _Exigences : 2.4_ - [x]* 4.6 Écrire le test property pour les bornes de confiance - **Propriété 4 : Bornes de Confiance Hiérarchique** - **Valide : Exigences 2.4** - [x] 4.7 Implémenter le boost de contexte temporel - Augmenter la confiance de 0.1 pour les nodes successeurs valides - Plafonner la confiance finale à 1.0 - _Exigences : 2.5_ - [x]* 4.8 Écrire le test property pour le boost temporel - **Propriété 5 : Correction du Boost Temporel** - **Valide : Exigences 2.5** - [x] 5. Intégrer le Matcher Hiérarchique avec le Pipeline - [x] 5.1 Modifier `core/pipeline/workflow_pipeline.py` pour utiliser HierarchicalMatcher - Remplacer le matching FAISS simple par l'approche hiérarchique - Maintenir le contexte temporel entre les matchs - _Exigences : 2.1, 2.2, 2.3, 2.4, 2.5_ - [x] 6. Point de contrôle - Vérifier que tous les tests passent - Vérifier que tous les tests passent, demander à l'utilisateur si des questions se posent. ## Phase 3 : Apprenant Continu - [x] 7. Implémenter le cœur de l'Apprenant Continu - [x] 7.1 Créer `core/learning/continuous_learner.py` avec la classe ContinuousLearner - Implémenter `update_prototype()` avec EMA (alpha=0.1) - Créer la dataclass DriftStatus - _Exigences : 3.1_ - [x]* 7.2 Écrire le test property pour la mise à jour EMA du prototype - **Propriété 6 : Mise à Jour du Prototype par EMA** - **Valide : Exigences 3.1** - [x] 7.3 Implémenter la détection de dérive - Créer `detect_drift()` suivant les matchs consécutifs à faible confiance - Signaler la dérive après 3 matchs consécutifs sous 0.85 - _Exigences : 3.2_ - [x]* 7.4 Écrire le test property pour la détection de dérive - **Propriété 7 : Seuil de Détection de Dérive** - **Valide : Exigences 3.2** - [x] 7.5 Implémenter la création de variante sur dérive - Créer `create_variant()` pour les nouvelles variantes UI - Stocker l'embedding de variante séparément - _Exigences : 3.3_ - [x] 7.6 Implémenter la consolidation des variantes - Créer `consolidate_variants()` quand les variantes dépassent 5 - Re-clusteriser les variantes pour réduire le nombre - _Exigences : 3.4_ - [x] 8. Implémenter le Gestionnaire de Versions de Prototypes - [x] 8.1 Créer `core/learning/prototype_version_manager.py` - Implémenter `save_version()`, `get_version()`, `list_versions()` - Stocker les versions comme fichiers .npy avec métadonnées - _Exigences : 3.5_ - [x] 8.2 Implémenter la fonctionnalité de rollback - Créer `rollback_prototype()` pour restaurer une version précédente - Mettre à jour l'index FAISS lors du rollback - _Exigences : 3.5_ - [x] 9. Intégrer l'Apprenant Continu avec la Boucle d'Exécution - [x] 9.1 Modifier `core/execution/execution_loop.py` pour appeler l'apprenant - Mettre à jour le prototype après exécution réussie - Vérifier la dérive après chaque match - _Exigences : 3.1, 3.2_ - [x] 10. Point de contrôle - Vérifier que tous les tests passent - Vérifier que tous les tests passent, demander à l'utilisateur si des questions se posent. ## Phase 4 : Gestionnaire de Variantes - [x] 11. Implémenter le cœur du Gestionnaire de Variantes - [x] 11.1 Créer `core/variants/variant_manager.py` avec la classe VariantManager - Implémenter `detect_variants()` utilisant le clustering par similarité - Créer les dataclasses VariantCluster et NodeVariant - _Exigences : 4.1_ - [x] 11.2 Implémenter le matching avec variantes - Créer `match_with_variants()` retournant le meilleur match de variante - Comparer contre toutes les variantes, retourner la plus haute similarité - _Exigences : 4.3_ - [x]* 11.3 Écrire le test property pour le seuil de similarité des variantes - **Propriété 8 : Seuil de Similarité des Variantes** - **Valide : Exigences 4.2** - [x]* 11.4 Écrire le test property pour la sélection de la meilleure variante - **Propriété 9 : Sélection de la Meilleure Variante** - **Valide : Exigences 4.3** - [x] 11.5 Implémenter la détection d'états UI - Créer `detect_ui_states()` analysant les caractéristiques visuelles - Détecter : états activé, désactivé, coché, chargement, erreur - _Exigences : 4.4_ - [x] 11.6 Implémenter la détection d'overlay - Créer `detect_overlay()` comparant l'écran actuel vs baseline - Identifier les overlays modal, popup, tooltip, dropdown - _Exigences : 4.5_ - [x] 12. Améliorer le modèle WorkflowNode - [x] 12.1 Mettre à jour `core/models/workflow_graph.py` avec support des variantes - Ajouter les champs variants list, primary_variant_id, quality_score - Ajouter les champs prototype_version et prototype_history - _Exigences : 4.1, 4.2, 4.3_ - [x] 13. Point de contrôle - Vérifier que tous les tests passent - Vérifier que tous les tests passent, demander à l'utilisateur si des questions se posent. ## Phase 5 : Compréhension UI Avancée - [x] 14. Implémenter les Relations Spatiales - [x] 14.1 Créer `core/detection/spatial_analyzer.py` avec la classe SpatialAnalyzer - Implémenter `compute_relations()` entre éléments UI - Supporter : relations au-dessus, en-dessous, à_gauche_de, à_droite_de, à_l'intérieur - _Exigences : 5.1_ - [x]* 14.2 Écrire le test property pour la symétrie des relations spatiales - **Propriété 10 : Symétrie des Relations Spatiales** - **Valide : Exigences 5.1** - [x] 14.3 Implémenter la détection de conteneurs sémantiques - Créer `detect_containers()` groupant les éléments liés - Identifier : conteneurs formulaire, menu, barre d'outils, dialogue, liste - _Exigences : 5.2_ - [x] 15. Améliorer le Target Resolver avec fallback spatial - [x] 15.1 Modifier `core/execution/target_resolver.py` pour utiliser les relations spatiales - Ajouter la stratégie de fallback par relation spatiale - Utiliser les éléments ancres quand le match direct échoue - _Exigences : 5.3, 5.4_ - [x] 15.2 Ajouter la détection d'état visuel au matching d'éléments - Détecter activé/désactivé depuis couleur, opacité, bordure - _Exigences : 5.5_ - [x] 16. Point de contrôle - Vérifier que tous les tests passent - Vérifier que tous les tests passent, demander à l'utilisateur si des questions se posent. ## Phase 6 : Qualité des Sessions d'Entraînement - [x] 17. Implémenter l'Analyseur de Session - [x] 17.1 Créer `core/training/session_analyzer.py` avec la classe SessionAnalyzer - Implémenter `analyze_session()` retournant SessionQualityReport - Calculer le score de qualité depuis clarté, cohérence, timing - _Exigences : 6.1_ - [x] 17.2 Implémenter la détection de qualité des screenshots - Détecter faible contraste, flou, artefacts - Marquer les frames problématiques - _Exigences : 6.2_ - [x] 17.3 Implémenter l'analyse de timing - Détecter le timing d'action incohérent (>2x écart-type) - Identifier les transitions problématiques - _Exigences : 6.3_ - [x] 17.4 Implémenter la détection de doublons - Détecter les screenshots quasi-dupliqués - Suggérer l'optimisation de la fréquence de capture - _Exigences : 6.4_ - [x] 17.5 Générer des recommandations actionnables - Fournir des suggestions d'amélioration spécifiques - _Exigences : 6.5_ - [x] 18. Point de contrôle - Vérifier que tous les tests passent - Vérifier que tous les tests passent, demander à l'utilisateur si des questions se posent. ## Phase 7 : Robustesse d'Exécution - [x] 19. Améliorer le Moteur d'Exécution - [x] 19.1 Implémenter le retry avec backoff exponentiel - Ajouter la logique de retry à l'exécution d'action - Utiliser le pattern temps_base * 2^(tentative-1) - _Exigences : 7.1_ - [x]* 19.2 Écrire le test property pour le backoff exponentiel - **Propriété 11 : Backoff Exponentiel des Retries** - **Valide : Exigences 7.1** - [x] 19.3 Implémenter l'attente d'élément avec re-détection - Attendre jusqu'au timeout avec re-détection périodique - _Exigences : 7.2_ - [x] 19.4 Implémenter la récupération d'état - Re-matcher l'état actuel vers le graphe de workflow en cas d'échec - Trouver un chemin de récupération si possible - _Exigences : 7.3_ - [x] 19.5 Implémenter la gestion d'écran inconnu - Mettre en pause l'exécution sur écran inconnu - Demander guidance utilisateur avec contexte - _Exigences : 7.4_ - [x] 19.6 Implémenter les diagnostics détaillés d'échec - Logger screenshots, scores de match, stratégies - _Exigences : 7.5_ - [x] 20. Point de contrôle final - Vérifier que tous les tests passent - Vérifier que tous les tests passent, demander à l'utilisateur si des questions se posent.