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>
10 KiB
10 KiB
Implementation Plan - Workflow Composition
-
1. Créer les modèles de données de base
- 1.1 Créer les dataclasses de configuration (ChainConfig, LoopConfig, ConditionalNode, etc.)
- Fichier:
core/workflow/composition_models.py - Inclure les méthodes
to_dict()etfrom_dict()pour chaque classe - Requirements: 1.6, 6.6, 7.6, 8.6
- Fichier:
- * 1.2 Écrire le test property-based pour la sérialisation round-trip
- Property 1: Round-trip de sérialisation
- Validates: Requirements 1.6, 2.6, 6.6, 7.6, 8.6, 9.4
- 1.1 Créer les dataclasses de configuration (ChainConfig, LoopConfig, ConditionalNode, etc.)
-
2. Implémenter le DependencyGraph
- 2.1 Créer la classe DependencyGraph
- Fichier:
core/workflow/dependency_graph.py - Méthodes:
add_dependency,remove_dependency,get_dependencies,get_dependents - Requirements: 5.1, 5.4
- Fichier:
- 2.2 Implémenter la détection de dépendances circulaires
- Méthode:
has_circular_dependencyavec algorithme DFS - Requirements: 5.3
- Méthode:
- * 2.3 Écrire le test property-based pour la validation des dépendances
- Property 13: Validation des dépendances
- Validates: Requirements 5.2, 5.3
- 2.1 Créer la classe DependencyGraph
-
3. Implémenter le GlobalVariableManager
- 3.1 Créer la classe GlobalVariableManager
- Fichier:
core/workflow/global_variable_manager.py - Méthodes:
set_global,get_global,transfer_to_workflow,get_final_state - Requirements: 9.1, 9.2, 9.3
- Fichier:
- 3.2 Implémenter la gestion des conflits de variables
- Logger les overrides, garder la valeur la plus récente
- Requirements: 9.5
- * 3.3 Écrire les tests property-based pour les variables
- Property 2: Propagation des variables dans les chaînes
- Validates: Requirements 1.2, 9.1, 9.5
- * 3.4 Écrire le test property-based pour la lecture avec défaut
- Property 21: Lecture de variable avec défaut
- Validates: Requirements 9.2
- 3.1 Créer la classe GlobalVariableManager
-
4. Checkpoint - Vérifier que tous les tests passent
- Ensure all tests pass, ask the user if questions arise.
-
5. Implémenter le LoopExecutor
- 5.1 Créer la classe LoopExecutor
- Fichier:
core/workflow/loop_executor.py - Méthodes:
start_loop,execute_iteration,should_continue,increment_counter - Requirements: 6.1, 6.2, 6.3, 6.4
- Fichier:
- 5.2 Implémenter la garde de sécurité (1000 itérations max)
- Lever LoopSafetyLimitError et logger un warning
- Requirements: 6.5
- * 5.3 Écrire le test property-based pour l'incrémentation du compteur
- Property 14: Incrémentation du compteur de boucle
- Validates: Requirements 6.2
- * 5.4 Écrire le test property-based pour la terminaison à la limite
- Property 15: Terminaison de boucle à la limite
- Validates: Requirements 6.3
- * 5.5 Écrire le test property-based pour la garde de sécurité
- Property 16: Garde de sécurité des boucles
- Validates: Requirements 6.5
- 5.1 Créer la classe LoopExecutor
-
6. Implémenter le ConditionalEvaluator
- 6.1 Créer la classe ConditionalEvaluator
- Fichier:
core/workflow/conditional_evaluator.py - Méthodes:
evaluate_condition,evaluate_node - Intégration avec TargetResolver existant
- Requirements: 7.1, 7.4, 7.5
- Fichier:
- 6.2 Implémenter l'évaluation ordonnée des branches
- Tester les branches par ordre de priorité, retourner la première qui match
- Requirements: 7.2
- 6.3 Implémenter la gestion de la branche par défaut
- Exécuter le défaut ou lever NoMatchingBranchError
- Requirements: 7.3
- * 6.4 Écrire le test property-based pour l'ordre d'évaluation
- Property 17: Ordre d'évaluation des branches conditionnelles
- Validates: Requirements 7.2
- * 6.5 Écrire le test property-based pour la branche par défaut
- Property 18: Branche par défaut ou erreur
- Validates: Requirements 7.3
- 6.1 Créer la classe ConditionalEvaluator
-
7. Checkpoint - Vérifier que tous les tests passent
- Ensure all tests pass, ask the user if questions arise.
-
8. Implémenter le SubWorkflowRegistry
- 8.1 Créer la classe SubWorkflowRegistry
- Fichier:
core/workflow/subworkflow_registry.py - Méthodes:
register,create_reference,execute_reference,get_dependents - Intégration avec DependencyGraph
- Requirements: 2.1, 2.4
- Fichier:
- 8.2 Implémenter le retour de contrôle après exécution
- Sauvegarder le contexte parent, exécuter le sous-workflow, restaurer
- Requirements: 2.2
- 8.3 Implémenter la propagation d'erreur
- Capturer les erreurs du sous-workflow avec contexte complet
- Requirements: 2.5
- * 8.4 Écrire le test property-based pour le retour de contrôle
- Property 5: Retour de contrôle après sous-workflow
- Validates: Requirements 2.1, 2.2
- * 8.5 Écrire le test property-based pour la propagation d'erreur
- Property 6: Propagation d'erreur de sous-workflow
- Validates: Requirements 2.5
- 8.1 Créer la classe SubWorkflowRegistry
-
9. Implémenter le WorkflowChainer
- 9.1 Créer la classe WorkflowChainer
- Fichier:
core/workflow/workflow_chainer.py - Méthodes:
add_chain,validate_chain,execute_chain - Intégration avec GlobalVariableManager
- Requirements: 1.1, 1.2, 1.3
- Fichier:
- 9.2 Implémenter la validation de compatibilité
- Vérifier que l'état final de A est compatible avec l'état initial de B
- Requirements: 1.4
- 9.3 Implémenter le log unifié
- Maintenir un ExecutionLogger partagé entre tous les workflows de la chaîne
- Requirements: 1.5
- * 9.4 Écrire le test property-based pour la validation de compatibilité
- Property 3: Validation de compatibilité de chaînage
- Validates: Requirements 1.4
- * 9.5 Écrire le test property-based pour le log unifié
- Property 4: Log unifié complet
- Validates: Requirements 1.5
- 9.1 Créer la classe WorkflowChainer
-
10. Checkpoint - Vérifier que tous les tests passent
- Ensure all tests pass, ask the user if questions arise.
-
11. Implémenter le WorkflowMerger
- 11.1 Créer la classe WorkflowMerger
- Fichier:
core/workflow/workflow_merger.py - Méthodes:
calculate_similarity,find_merge_candidates,merge,get_unique_paths - Requirements: 3.1, 3.4, 3.5
- Fichier:
- 11.2 Implémenter la préservation des chemins uniques
- Extraire tous les chemins de A et B, les combiner dans le résultat
- Requirements: 3.2
- 11.3 Implémenter la combinaison des statistiques
- Fusionner les stats d'apprentissage des deux sources
- Requirements: 3.3
- * 11.4 Écrire le test property-based pour la détection de similarité
- Property 7: Détection de similarité pour fusion
- Validates: Requirements 3.1
- * 11.5 Écrire le test property-based pour la préservation des chemins
- Property 8: Préservation des chemins lors de la fusion
- Validates: Requirements 3.2
- * 11.6 Écrire le test property-based pour la combinaison des stats
- Property 9: Combinaison des statistiques lors de la fusion
- Validates: Requirements 3.3
- 11.1 Créer la classe WorkflowMerger
-
12. Implémenter le SequenceExtractor
- 12.1 Créer la classe SequenceExtractor
- Fichier:
core/workflow/sequence_extractor.py - Méthodes:
find_common_sequences,extract_as_subworkflow,replace_with_references - Intégration avec SubWorkflowRegistry
- Requirements: 4.1, 4.4
- Fichier:
- 12.2 Implémenter le remplacement par références
- Remplacer les séquences originales par des ReferenceNodes
- Requirements: 4.2
- 12.3 Implémenter la priorisation
- Marquer haute priorité les séquences dans 3+ workflows
- Requirements: 4.3
- * 12.4 Écrire le test property-based pour la détection de séquences
- Property 10: Détection de séquences communes
- Validates: Requirements 4.1
- * 12.5 Écrire le test property-based pour le remplacement
- Property 11: Remplacement par références après extraction
- Validates: Requirements 4.2
- * 12.6 Écrire le test property-based pour la priorisation
- Property 12: Priorisation des séquences fréquentes
- Validates: Requirements 4.3
- 12.1 Créer la classe SequenceExtractor
-
13. Checkpoint - Vérifier que tous les tests passent
- Ensure all tests pass, ask the user if questions arise.
-
14. Implémenter le TriggerManager
- 14.1 Créer la classe TriggerManager
- Fichier:
core/workflow/trigger_manager.py - Méthodes:
register_trigger,fire_trigger,handle_concurrent_triggers - Support pour ScheduleTrigger, FileTrigger, VisualTrigger
- Requirements: 8.1, 8.2, 8.3
- Fichier:
- 14.2 Implémenter le passage du contexte de déclenchement
- Créer TriggerContext avec timestamp, file_path, detected_element
- Requirements: 8.4
- 14.3 Implémenter la gestion des déclenchements concurrents
- Mode concurrent ou queue selon configuration
- Requirements: 8.5
- * 14.4 Écrire le test property-based pour le contexte de déclenchement
- Property 19: Passage du contexte de déclenchement
- Validates: Requirements 8.4
- * 14.5 Écrire le test property-based pour la concurrence
- Property 20: Gestion des déclenchements concurrents
- Validates: Requirements 8.5
- 14.1 Créer la classe TriggerManager
-
15. Implémenter le ExecutionLogger unifié
- 15.1 Créer/étendre la classe ExecutionLogger
- Fichier:
core/workflow/execution_logger.py - Support pour les logs multi-workflows avec contexte de chaîne
- Méthode
get_final_variable_state - Requirements: 1.5, 9.3
- Fichier:
- * 15.2 Écrire le test property-based pour la préservation de l'état final
- Property 22: Préservation de l'état final des variables
- Validates: Requirements 9.3
- 15.1 Créer/étendre la classe ExecutionLogger
-
16. Intégration avec le système existant
- 16.1 Intégrer les nouveaux composants dans WorkflowGraph
- Ajouter les champs pour loops, conditionals, references
- Mettre à jour
to_dict()etfrom_dict() - Requirements: 1.6, 2.6, 6.6, 7.6
- 16.2 Intégrer avec ExecutionLoop
- Ajouter le support pour LoopExecutor et ConditionalEvaluator
- Requirements: 6.2, 7.2
- 16.3 Mettre à jour la CLI pour les nouvelles fonctionnalités
- Commandes pour chaîner, créer des sous-workflows, configurer des triggers
- Requirements: 1.1, 2.1, 8.1
- 16.1 Intégrer les nouveaux composants dans WorkflowGraph
-
17. Checkpoint final - Vérifier que tous les tests passent
- Ensure all tests pass, ask the user if questions arise.