feat: replay E2E fonctionnel — 25/25 actions, 0 retries, SomEngine via serveur

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>
This commit is contained in:
Dom
2026-03-31 14:04:41 +02:00
parent 5e0b53cfd1
commit a7de6a488b
79542 changed files with 6091757 additions and 1 deletions

View File

@@ -0,0 +1,243 @@
# 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.