# Implementation Plan - Workflow Composition - [x] 1. Créer les modèles de données de base - [x] 1.1 Créer les dataclasses de configuration (ChainConfig, LoopConfig, ConditionalNode, etc.) - Fichier: `core/workflow/composition_models.py` - Inclure les méthodes `to_dict()` et `from_dict()` pour chaque classe - _Requirements: 1.6, 6.6, 7.6, 8.6_ - [x]* 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** - [x] 2. Implémenter le DependencyGraph - [x] 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_ - [x] 2.2 Implémenter la détection de dépendances circulaires - Méthode: `has_circular_dependency` avec algorithme DFS - _Requirements: 5.3_ - [x]* 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** - [x] 3. Implémenter le GlobalVariableManager - [x] 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_ - [x] 3.2 Implémenter la gestion des conflits de variables - Logger les overrides, garder la valeur la plus récente - _Requirements: 9.5_ - [x]* 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** - [x]* 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** - [x] 4. Checkpoint - Vérifier que tous les tests passent - Ensure all tests pass, ask the user if questions arise. - [x] 5. Implémenter le LoopExecutor - [x] 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_ - [x] 5.2 Implémenter la garde de sécurité (1000 itérations max) - Lever LoopSafetyLimitError et logger un warning - _Requirements: 6.5_ - [x]* 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** - [x]* 5.4 Écrire le test property-based pour la terminaison à la limite - **Property 15: Terminaison de boucle à la limite** - **Validates: Requirements 6.3** - [x]* 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** - [x] 6. Implémenter le ConditionalEvaluator - [x] 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_ - [x] 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_ - [x] 6.3 Implémenter la gestion de la branche par défaut - Exécuter le défaut ou lever NoMatchingBranchError - _Requirements: 7.3_ - [x]* 6.4 Écrire le test property-based pour l'ordre d'évaluation - **Property 17: Ordre d'évaluation des branches conditionnelles** - **Validates: Requirements 7.2** - [x]* 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** - [x] 7. Checkpoint - Vérifier que tous les tests passent - Ensure all tests pass, ask the user if questions arise. - [x] 8. Implémenter le SubWorkflowRegistry - [x] 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_ - [x] 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_ - [x] 8.3 Implémenter la propagation d'erreur - Capturer les erreurs du sous-workflow avec contexte complet - _Requirements: 2.5_ - [x]* 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** - [x]* 8.5 Écrire le test property-based pour la propagation d'erreur - **Property 6: Propagation d'erreur de sous-workflow** - **Validates: Requirements 2.5** - [x] 9. Implémenter le WorkflowChainer - [x] 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_ - [x] 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_ - [x] 9.3 Implémenter le log unifié - Maintenir un ExecutionLogger partagé entre tous les workflows de la chaîne - _Requirements: 1.5_ - [x]* 9.4 Écrire le test property-based pour la validation de compatibilité - **Property 3: Validation de compatibilité de chaînage** - **Validates: Requirements 1.4** - [x]* 9.5 Écrire le test property-based pour le log unifié - **Property 4: Log unifié complet** - **Validates: Requirements 1.5** - [x] 10. Checkpoint - Vérifier que tous les tests passent - Ensure all tests pass, ask the user if questions arise. - [x] 11. Implémenter le WorkflowMerger - [x] 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_ - [x] 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_ - [x] 11.3 Implémenter la combinaison des statistiques - Fusionner les stats d'apprentissage des deux sources - _Requirements: 3.3_ - [x]* 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** - [x]* 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** - [x]* 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** - [x] 12. Implémenter le SequenceExtractor - [x] 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_ - [x] 12.2 Implémenter le remplacement par références - Remplacer les séquences originales par des ReferenceNodes - _Requirements: 4.2_ - [x] 12.3 Implémenter la priorisation - Marquer haute priorité les séquences dans 3+ workflows - _Requirements: 4.3_ - [x]* 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** - [x]* 12.5 Écrire le test property-based pour le remplacement - **Property 11: Remplacement par références après extraction** - **Validates: Requirements 4.2** - [x]* 12.6 Écrire le test property-based pour la priorisation - **Property 12: Priorisation des séquences fréquentes** - **Validates: Requirements 4.3** - [x] 13. Checkpoint - Vérifier que tous les tests passent - Ensure all tests pass, ask the user if questions arise. - [x] 14. Implémenter le TriggerManager - [x] 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_ - [x] 14.2 Implémenter le passage du contexte de déclenchement - Créer TriggerContext avec timestamp, file_path, detected_element - _Requirements: 8.4_ - [x] 14.3 Implémenter la gestion des déclenchements concurrents - Mode concurrent ou queue selon configuration - _Requirements: 8.5_ - [x]* 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** - [x]* 14.5 Écrire le test property-based pour la concurrence - **Property 20: Gestion des déclenchements concurrents** - **Validates: Requirements 8.5** - [x] 15. Implémenter le ExecutionLogger unifié - [x] 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_ - [x]* 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** - [x] 16. Intégration avec le système existant - [x] 16.1 Intégrer les nouveaux composants dans WorkflowGraph - Ajouter les champs pour loops, conditionals, references - Mettre à jour `to_dict()` et `from_dict()` - _Requirements: 1.6, 2.6, 6.6, 7.6_ - [x] 16.2 Intégrer avec ExecutionLoop - Ajouter le support pour LoopExecutor et ConditionalEvaluator - _Requirements: 6.2, 7.2_ - [x] 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_ - [x] 17. Checkpoint final - Vérifier que tous les tests passent - Ensure all tests pass, ask the user if questions arise.