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>
212 lines
10 KiB
Markdown
212 lines
10 KiB
Markdown
# 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.
|