Files
rpa_vision_v3/.kiro/specs/workflow-composition/tasks.md
Dom a7de6a488b 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>
2026-03-31 14:04:41 +02:00

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.